লিনাক্সের "অনুপস্থিত" মেমরির ব্যবহার ট্র্যাক করা


10

একটি আর্চ ৩..7. x x86_64 কার্নেলটিতে আমি সিস্টেমটির মেমরির ব্যবহারের জন্য অ্যাকাউন্ট করার চেষ্টা করছি, যা আমি এটির চেয়ে বেশি ততই একটি গর্ত বলে মনে করি (ব্যবহৃত মেমরির অ্যাকাউন্টিংয়ে, একটি নন-হোল এর ব্যবহার)।

এটি একটি নতুনভাবে বুট করা সিস্টেম। এটিকে সহজ রাখার জন্য সিস্টেমড এবং এসএসডি ছাড়া অন্য খুব বেশি চলমান না

$ ps aux | sort -n -k6
...
root       316  0.0  0.0   7884   812 tty1     Ss+  14:37   0:00 /sbin/agetty --noclear tty1 38400
matt       682  0.0  0.0  24528   820 pts/0    S+   15:09   0:00 sort -n -k6
dbus       309  0.0  0.0  17280  1284 ?        Ss   14:37   0:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
matt       681  0.0  0.0  10808  1364 pts/0    R+   15:09   0:00 ps aux
root       308  0.0  0.0  26060  1516 ?        Ss   14:37   0:00 /usr/lib/systemd/systemd-logind
root       148  0.0  0.0  25972  1692 ?        Ss   14:37   0:00 /usr/lib/systemd/systemd-udevd
matt       451  0.0  0.0  78180  2008 ?        S    14:37   0:00 sshd: matt@pts/0
root       288  0.0  0.0  39612  2708 ?        Ss   14:37   0:00 /usr/sbin/sshd -D
matt       452  0.0  0.0  16452  3248 pts/0    Ss   14:37   0:00 -bash
root         1  0.0  0.0  32572  3268 ?        Ss   14:37   0:00 /sbin/init
root       299  0.0  0.0  69352  3604 ?        Ss   14:37   0:00 /usr/sbin/syslog-ng -F
root       449  0.0  0.0  78040  3800 ?        Ss   14:37   0:00 sshd: matt [priv]
root       161  0.0  0.0 358384  9656 ?        Ss   14:37   0:00 /usr/lib/systemd/systemd-journald

সবচেয়ে বিস্তারিত মেমরির তথ্য আমি খুঁজে যায় এই 2007 যা প্রক্রিয়ার জন্য অ্যাকাউন্টিং সাধারণ কার্নেলে PSS মাঠের ছাড়াও হয়ে গেছে মনে হচ্ছে থেকে কিন্তু তাদের পাইথন কোড পুরোনো কার্নেলের জন্য জন্য / proc / ট * কিছু ফাইল এবং দুর্ভাগ্যবশত তারপর থেকে অদৃশ্য হয়ে গেছে। / Proc / meminfo ডকুমেন্টেশন এছাড়াও সহায়ক কিন্তু একটি বিট খুব পক্বতা হয়।

সুতরাং, আমি যা দেখছি তার একটি প্রদর্শনী।

# cat /proc/meminfo
MemTotal:       16345780 kB
MemFree:        16129940 kB
Buffers:           10360 kB
Cached:            48444 kB
SwapCached:            0 kB
Active:            24108 kB
Inactive:          46724 kB
Active(anon):      12104 kB
Inactive(anon):     3616 kB
Active(file):      12004 kB
Inactive(file):    43108 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         11996 kB
Mapped:            16372 kB
Shmem:              3696 kB
Slab:              25092 kB
SReclaimable:      11716 kB
SUnreclaim:        13376 kB
KernelStack:         928 kB
PageTables:         2428 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     8172888 kB
Committed_AS:      34304 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      372788 kB
VmallocChunk:   34359362043 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       12288 kB
DirectMap2M:    16680960 kB

যদি আমরা ব্যবহৃত যোগ:

MemTotal - MemFree - Buffers - Cached = Used
16345780 - 16129940 - 10360 - 48444 = 157036

সমস্ত অ্যাক্টিভ * / নিষ্ক্রিয় * কিছু পৃষ্ঠাগুলিতে প্রয়োগ করা কাউন্টার বলে মনে হচ্ছে (সমস্ত নয়) যাতে অন্য কোথাও গণনা করা যায় তা নকল করতে পারে।

Active + Inactive = Used
46724  + 24108    = 70832 (not quite)

Commited_AS এখানে / প্রোপ / * / এসএমএস থেকে ভাগ করা ফাইলকে ছাড়কারী ইউজারস্পেসের ব্যক্তিগত / ভাগ করা মেমরির যোগফলের ঘনিষ্ঠভাবে নজর রাখে। পিএসএসকে অ্যাকাউন্টে নেওয়াও লাইন আপ। (আগ্রহের বাইরে আমি 32 বিট ডিবিয়ানের ২.6.৩২-৫-6866 এ অনেক বেশি, কমিয়েড_এএসটি পেয়েছি)

AnonPages + Mapped + Commited_AS = Userspace?
11996     + 16372  + 34304       = 62672

স্ল্যাব / প্রোক / স্লাবিনফো সহ ইনলাইন

Slab +  Shmem + KernelStack + PageTables = Kernelspace?
25092 + 3696  + 928         + 2428       = 32144

Userspace? + Kernelspace? = Used?
62672      + 32144        = 94816

সুতরাং ~ 63M সংক্ষিপ্ত। এটি আমাকে আঘাত করে যে কার্নেল এবং লোড হওয়া সমস্ত মডিউলগুলির মধ্যে কিছু এমবি নেই। যদিও স্ল্যাবটি অনেকটা coverেকে ফেলেছে, তাই যদি কোনও অনুপস্থিত থাকে তবে আমি নিশ্চিত নই যে এটি M 60Mb এর সমান হবে কিনা?

অ্যাক্টিভ + নিষ্ক্রিয় চিত্রের কাছে 63 ধরণের কাছাকাছি তবে এটি সঠিক মনে হচ্ছে না।

তাহলে কি কেউ জাদু সূত্র জানে ?? অন্যথায় যদি আমি যা দেখছি সেই চিত্রগুলি যদি সঠিক হয় তবে মেমরির বরাদ্দের ধূসর অঞ্চলগুলি কী যে আমি keোকাতে পারি?

দেখা যাচ্ছে লিনাক্স আমার ভেড়া খেয়েছে! সাধারণভাবে =) এর চেয়ে ছোট অংশ হলেও

কমিটেড_এএস সম্পাদনা এটি যে প্রতিশ্রুতি দিয়েছিল তার 99.9% কভার করতে কত মেমরির প্রয়োজন তা কার্নেল থেকে অনুমান করা যায়, তাই আসল বরাদ্দকৃত সংখ্যা নয়। আননপেজস + ম্যাপযুক্ত এটির একটি উপাদান, যাতে এখন প্রায় 100 এমবি বৃহত্তর গর্ত ছেড়ে যায়।

User + Kernel
28368 + 32144 = 60512 != 157036

অ্যানপেজ এবং ম্যাপযুক্ত বেশিরভাগই আনন / ম্যাপ করা তথ্যের সাথে / প্রোক / [0-9] থেকে ট্র্যাক করে থাকে / পিএমএস / ভাগ করে নেওয়া অ্যাকাউন্টে এসএমএস ওয়েজেন।

সংরক্ষিত অঞ্চলগুলি মোট স্মৃতি থেকে সরিয়ে নেওয়া সমস্ত অংশের মধ্যে উপযুক্ত বলে মনে হচ্ছে:

মোট freeস্মৃতি 16345032 কেবি
মোট সিস্টেমের স্মৃতি 16777216Kb
পিসিআই 'গর্ত' - lspci -v 266520 কে = 16510696 কে
বায়োস সংরক্ষিত - dmesg 92793 কে = 16417903 কে

edit2 আমি লক্ষ্য করেছি যে অতিরিক্ত মেমরির ব্যবহারটি ভিএম এর মূল বাক্সের অভ্যন্তরে চলছে না /proc/meminfo। তাই আমি দু'জনের মধ্যে কী আলাদা তা দেখে চারপাশে হাঁসফাঁস শুরু করি। অবশেষে দেখা গেছে যে মোট শারীরিক স্মৃতি উপলব্ধ বর্ধিত ব্যবহৃত স্মৃতিশক্তি বৃদ্ধির সাথে মিলে যায়।

phys 16GB used>144508     vm>50692      user>21500      kern>26428      u+ktot>47928
vm   64MB used>24612      vm>31140      user>14956      kern>14440      u+ktot>29396
vm  256MB used>26316      vm>35260      user>14752      kern>14780      u+ktot>29532
vm    1GB used>33644      vm>35224      user>14936      kern>14772      u+ktot>29708
vm    2GB used>41592      vm>35048      user>14736      kern>15056      u+ktot>29792
vm    4GB used>57820      vm>35232      user>14780      kern>14952      u+ktot>29732
vm    8GB used>82932      vm>36912      user>15700      kern>15388      u+ktot>31088
vm   12GB used>110072     vm>35248      user>14812      kern>15624      u+ktot>30436
vm   15GB used>122012     vm>35424      user>14832      kern>15824      u+ktot>30656

এটি প্রতি 1 জিবি মেমরির জন্য বরাদ্দকৃত 8 ডলার। কার্নেলের মধ্যে একটি মেমরি মানচিত্র হতে পারে ... তবে আমি ভেবেছিলাম যে এটি কেবলমাত্র বুট-এ সেট আপ না হয়ে মেমরির বরাদ্দ হওয়ায় বাড়বে।

প্রবণতা অব্যাহত থাকলে কারও কাছে কোনও বিগ্মেম মেশিনে অ্যাক্সেস রয়েছে কিনা তা আকর্ষণীয় হবে?


psডিজাইন দ্বারা মিথ্যা। এটি মেমরি অ্যাকাউন্টিংয়ের জন্য ব্যবহার করবেন না।
বাহামত

2
চিয়ার্স, কিন্তু এটি মেলেনি ps। এটা তোলে সামগ্রিক ব্যবহার এর /proc/meminfo। একমাত্র প্রক্রিয়া অ্যাকাউন্টিংটি এসএমএসের মাধ্যমে হয়েছে যা ভাগ করে নেওয়া এবং ব্যক্তিগত মেমরির ক্ষেত্রে অ্যাকাউন্ট করে তবে এটি কেবল মেমিনফো থেকে অ্যানপেজ / ম্যাপ করা মানগুলির সাথে তুলনা করতে পারে।
ম্যাট


অতএব লিনাক্স সম্পর্কে আমার পোস্টে উল্লেখটি আসলে আমার র্যাম =) খাচ্ছে
ম্যাট

উত্তর:


3

"একটি প্রক্রিয়া দ্বারা ব্যবহৃত স্মৃতি" তা নয়আধুনিক অপারেটিং সিস্টেমগুলিতে একটি পরিষ্কার কাটা ধারণা। প্রক্রিয়াটির ঠিকানা স্থানের আকার (SIZE) এবং আবাসিক সেট আকার (আরএসএস, ঠিকানার জায়গার কতগুলি পৃষ্ঠা বর্তমানে মেমরিতে রয়েছে) তা কী পরিমাপ করা যায়। আরএসএসের কিছু অংশ ভাগ করা হয়েছে (মেমরির বেশিরভাগ প্রক্রিয়াগুলি গলিবিকের একটি অনুলিপি ভাগ করে, এবং অন্যভাবে ভাগ করা অন্যান্য শেয়ারকৃত লাইব্রেরিগুলির জন্য; একই এক্সিকিউটেবল শেয়ার করে পরিচালিত বেশ কয়েকটি প্রক্রিয়া, কেবলমাত্র পঠনযোগ্য ডেটা প্রক্রিয়াকরণ প্রক্রিয়া করে এবং সম্ভবত এখনও-সংশোধিত নয়) পিতামাতার সাথে ডেটা পড়ুন)। অন্যদিকে, কার্নেল দ্বারা প্রক্রিয়াটির জন্য ব্যবহৃত মেমরির জন্য পৃষ্ঠাগুলি, কার্নেল বাফার এবং কার্নেল স্ট্যাকের মতো হিসাব নেই। সামগ্রিক ছবিতে আপনাকে গ্রাফিক্স কার্ডের জন্য সংরক্ষিত মেমরির জন্য, কার্নেলের ব্যবহারের জন্য এবং ডস এবং অন্যান্য প্রাগৈতিহাসিক সিস্টেমগুলির জন্য সংরক্ষিত "গর্ত" মিশ্রিত করতে হবে (এটি খুব বেশি নয়,

সামগ্রিক চিত্র পাওয়ার একমাত্র উপায় হ'ল কার্নেল যেমন রিপোর্ট করে। অজানা ওভারল্যাপ এবং অজানা বাম আউটগুলির সাথে সংখ্যা যুক্ত করা পাটিগণিতের একটি দুর্দান্ত অনুশীলন, এর চেয়ে বেশি কিছুই নয়।


1
'প্রক্রিয়া প্রতি মেমরি' পরিষ্কার কাট নয় তবে আমি দেখতে পাচ্ছি না কেন এটি সামগ্রিক ব্যবহারের উপর নজর রাখতে পারে? কার্নেলের জন্য সামগ্রিক পেজ টেবিলস, স্ল্যাব, কার্নেলস্ট্যাক এবং অন্যান্য নন প্রসেস মেম কাউন্টারগুলি / প্রোক / মেমিনফোতে রিপোর্ট করা হয়েছে এবং আমি যে অ্যাকাউন্টের জন্য চেষ্টা করছি তার মধ্যে অন্তর্ভুক্ত রয়েছে (প্রক্রিয়া মেমেও সেখানে উপস্থিত রয়েছে বলে মনে হয়)। সামগ্রিক কাউন্টারগুলি ছাড়াও আমি আনন / ম্যাপড, ভাগ / বেসরকারী মেমরির জন্য প্রসেসের মেমোরি / প্রোম / মেমিনফোতে কোথায় প্রসেস মেমোরি হিসাবে গণ্য হতে পারে সে সম্পর্কে ধারণা পেতে প্রসেসের স্যাম্যাপগুলি সন্ধান করছিলাম। আমি ভিএম সংখ্যার সেটটি কীভাবে শারীরিকভাবে যুক্ত করব তা লক্ষ্য করছি, যা আমার স্পষ্টভাবে একটি গর্ত রয়েছে
ম্যাট

1
মূলত psমেমরির জন্য সঠিকভাবে অ্যাকাউন্টিং করতে অক্ষম। সুতরাং এটি ব্যবহার করবেন না। কি psরিপোর্ট একমাত্র সত্য যে প্রক্রিয়া সিস্টেম (একটি অসম্ভবতা) শুধুমাত্র একজন লোক দৌড়ে ছিল হবে। আপনি এখানে psপড়তে কেন তা করবেন না সে সম্পর্কে আরও তথ্যের জন্য : লিনাক্সে মেমরির ব্যবহার বোঝা
বাহামা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.