我的主机上运行了很多进程实例,每个实例似乎都消耗大量内存。
进程上的 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 个进程),这太疯狂了。谁能解释我是否做错了,应该如何计算?
还 free -k 给出
total used free shared buffers cached
Mem: 7782580 4802104 2980476 0 380192 1931708
-/+ buffers/cache: 2490204 5292376
Swap: 1048568 32 1048536
看起来没有使用太多交换,现在每个进程的内存来自哪里?谢谢。