Linux:找出是什么进程在使用所有的内存?
在真正问之前,先说清楚:是的,我知道磁盘缓存,不,不是我的情况:) 对不起,这个序言:)
我使用的是CentOS 5。系统中的每个程序都在大量切换,系统速度很慢。当我做free -m
时,我得到的结果是:
total used free shared buffers cached
Mem: 3952 3929 22 0 1 18
-/+ buffers/cache: 3909 42
Swap: 16383 46 16337
所以,我实际上只有42Mb可以使用! 据我了解,-/+ buffers/cache
其实并没有计算磁盘缓存,所以我确实只有42Mb,对吗?我想,可能是我想错了,于是我试着关闭了磁盘缓存,结果没有任何效果–图片还是老样子。
于是,我决定查出我所有的内存都被谁用掉了,于是我用top
来查。但是,很明显,它报告说没有进程使用我的RAM。我的顶部唯一的进程是MySQL,但它使用了0.1%的RAM和400Mb的swap。
top - 15:09:00 up 2:09, 2 users, load average: 0.02, 0.16, 0.11
Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 4046868k total, 4001368k used, 45500k free, 748k buffers
Swap: 16777208k total, 68840k used, 16708368k free, 16632k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ SWAP COMMAND
3214 ntp 15 0 23412 5044 3916 S 0.0 0.1 0:00.00 17m ntpd
2319 root 5 -10 12648 4460 3184 S 0.0 0.1 0:00.00 8188 iscsid
2168 root RT 0 22120 3692 2848 S 0.0 0.1 0:00.00 17m multipathd
5113 mysql 18 0 474m 2356 856 S 0.0 0.1 0:00.11 472m mysqld
4106 root 34 19 251m 1944 1360 S 0.0 0.0 0:00.11 249m yum-updatesd
4109 root 15 0 90152 1904 1772 S 0.0 0.0 0:00.18 86m sshd
5175 root 15 0 90156 1896 1772 S 0.0 0.0 0:00.02 86m sshd
&001
重启无济于事,而且,它们的速度很慢,这在这台机器上是****慢的,我通常不会想到的(4核,4Gb RAM,RAID1)。
所以,我很确定这不是磁盘缓存,是谁在使用内存,因为通常情况下,它应该被减少,让其他进程使用内存,而不是去交换。