簡體   English   中英

linux進程的內存利用率

[英]memory utilization by a linux process

我在主機上運行着許多進程實例,每個實例似乎都占用大量內存。

ps aux上的過程給了我以下信息

blah1   18634  0.0  0.4 131852 31188 pts/15   Ssl+ 00:27   0:00 myPgm
blah2   18859  0.0  0.3 131292 30656 pts/32   Sl+  01:17   0:00 myPgm
blah3   19813  0.0  0.4 131960 31220 pts/44   Ssl+ 01:17   0:00 myPgm
blah4   20228  0.1  0.3 131728 31036 pts/54   Ssl+ 01:41   0:00 myPgm
blah5   20238  0.0  0.3 131688 30932 pts/20   Sl+  Nov15   0:00 myPgm
blah6   21181  0.0  0.3 131304 30632 pts/25   Sl+  Nov15   0:00 myPgm
blah7   21278  0.0  0.3 131824 31096 pts/61   Ssl+ Nov15   0:00 myPgm
blah8   21821  0.0  0.3 131444 30808 pts/7    Sl+  00:54   0:00 myPgm

因此,VSZ始終約為130 MB,而RSS始終約為30 MB。 進程的pmap具有以下數據:對於18634:

mapped: 131852K    writeable/private: 59692K    shared: 28K

對於21181:

mapped: 131304K    writeable/private: 59144K    shared: 28K

以及其他過程的相似值。 主機具有7GB的物理內存。 有時我在主機上運行大約700到800個同一進程的實例。 我試圖了解每個進程實際上消耗了多少內存。 如果我將“可寫/專用”作為每個進程中的實際內存使用量,則每個進程58MB會導致45 GB(對於800個進程),這很瘋狂。 任何人都可以解釋即時消息是否做錯了,應該如何進行計算?

也免費-k給

             total       used       free     shared    buffers     cached
Mem:       7782580    4802104    2980476          0     380192    1931708
-/+ buffers/cache:    2490204    5292376
Swap:      1048568         32    1048536

似乎沒有使用太多交換,現在每個進程的內存來自哪里? 謝謝。

您不知道VSZ是什么。 您以為自己知道,但是有證據表明並非如此,因此您需要找出它是什么。

VZS是虛擬內存大小,它是進程所需的所有內存,包括共享內存。 這就是為什么您不能只求和(VSZ)並期望得到小於物理內存+交換數量的原因。

我想,pmap中映射的內存可能對應於VSZ,並且可寫/私有是某些進程共享的內存,其中每個進程都對該內存具有寫訪問權限(例如由其父進程分配的內存)。

要了解這一點,您需要了解內存分配和訪問的工作方式,這很困難。 http://emilics.com/blog/article/mconsumption.html本文似乎對它進行了詳細解釋(但我只是以粗略的方式閱讀)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM