当我检查free
其中一台 Prod 服务器时,它显示 70% 的内存正在被使用:
total used free shared buffers cached
Mem: 164923172 141171860 23751312 0 4555616 20648048
-/+ buffers/cache: 115968196 48954976
Swap: 8388600 0 8388600
但我没有找到哪个进程正在使用内存,我尝试了该top
命令,它显示进程仅使用内存 1.1 和 5.4 %
如何找到哪个进程正在使用内存?
下面是top命令的结果:
15085 couchbas 25 0 2784m 2.4g 40m S 183.7 1.5 299597:00 beam.smp
28248 tibco 18 0 124m 100m 3440 S 20.9 0.1 2721:45 tibemsd
15334 couchbas 15 0 9114m 8.6g 3288 S 9.0 5.4 12996:28 memcached
15335 couchbas 18 0 6024 600 468 S 2.0 0.0 1704:54 sigar_port
15319 couchbas 15 0 775m 2516 944 S 0.7 0.0 269:13.41 i386-linux-godu
12167 tibco 16 0 11284 1464 784 R 0.3 0.0 0:00.04 top
12701 root 15 0 451m 427m 2140 S 0.3 0.3 18:25.02 controller
13163 root 11 -5 0 0 0 S 0.3 0.0 289:58.58 vxglm_thread
答案1
这将显示使用内存最多的前 10 个进程:
ps aux --sort=-%mem | head
使用top
:打开时top
,按m将根据内存使用情况对进程进行排序。
但这并不能解决你的问题,在 Linux 中,一切要么是文件,要么是进程。所以你打开的文件也会占用内存。所以这不会有帮助。
lsof
将为您提供所有打开的文件以及文件大小或文件偏移量(以字节为单位)。
答案2
你的内存实际上并没有被使用。默认情况下,Linux 只是将内容缓存在磁盘上,并将缓存的内容放在 RAM 的“已使用”部分中。
如果您加载实际使用该 RAM 的应用程序,那么它将供其使用。
答案3
你可以用管道附注和种类获得使用最多内存的进程。它还允许您指定您希望看到的其他流程详细信息:
ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -n -r | less
PS:上面假设你的内存栏是第一个“排序-k 1 -n -r”
答案4
您可以使用命令slabtop来查看内核使用了哪些slab对象。
您还可以检查 /proc/meminfo 的输出
在输出中查找这两行
Slab: 68136 kB
SReclaimable: 21208 kB
上面的示例显示内核使用了 68MB 的板缓存,并且可以回收 21MB。要回收,您可以使用此处描述的技术https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html-single/Performance_Tuning_Guide/#s-memory-tunables
echo 2 > /proc/sys/vm/drop_caches