如何查看按实际内存使用量排序的顶级进程?
我有一台具有12G内存的服务器。top的片段如下所示:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 12979 frank 20 0 206m 21m 12m S 11 0.2 26667:24 krfb
13 root 15 -5 0 0 0 S 1 0.0 36:25.04 ksoftirqd/3
59 root 15 -5 0 0 0 S 0 0.0 4:53.00 ata/2
2155 root 20 0 662m 37m 8364 S 0 0.3 338:10.25 Xorg
4560 frank 20 0 8672 1300 852 R 0 0.0 0:00.03 top
12981 frank 20 0 987m 27m 15m S 0 0.2 45:10.82 amarok
24908 frank 20 0 16648 708 548 S 0 0.0 2:08.84 wrapper
1 root 20 0 8072 608 572 S 0 0.0 0:47.36 init
2 root 15 -5 0 0 0 S 0 0.0 0:00.00 kthreadd
该free -m
显示以下内容:
total used free shared buffers cachedMem: 12038 11676 362 0 599 9745
-/+ buffers/cache: 1331 10706
Swap: 2204 257 1946
如果我理解正确,则系统只有362 MB的可用内存。我的问题是:如何找出哪个进程正在消耗大部分内存?
就像背景信息一样,系统正在运行64bit OpenSuse 12
。
回答:
首先,将这一口头禅重复一会儿:“未使用的内存就是浪费的内存”。Linux内核保持周围 巨大的
文件元数据并要求提供的文件量,直到一些看起来更重要的是推动了数据。这就是为什么您可以运行:
find /home -type f -name '*.mp3'find /home -type f -name '*.aac'
并find
以令人难以置信的速度运行第二个实例。
Linux只剩下一点点的“空闲”内存即可轻松处理内存使用高峰。
其次,您要查找正在消耗您全部内存的进程。在top
使用该M
命令的内存使用排序。随意忽略该VIRT
列,该列仅告诉您已分配了多少虚拟内存,而不是进程正在使用多少内存。RES
报告
驻留 或当前在ram中有多少内存(而不是交换到磁盘或从不实际分配,尽管有请求)。
但是,由于几乎每个进程RES
都会对/lib/libc.so.6
一次内存进行计数,因此,这并不是衡量一个进程正在使用多少内存的好方法。该SHR
列报告了与其他进程
共享的 内存量,但是不能保证实际上有另一个进程在共享—它可以共享,只有其他人不想共享。
该smem
工具旨在帮助用户更好地衡量每个进程 真正
应承担多少内存。它会做一些聪明的工作,以找出真正独特的内容,共享的内容,并将共享内存按比例分配给共享它的进程。smem
也许可以帮助您了解记忆的发展状况top
,但top
它是出色的入门工具。
以上是 如何查看按实际内存使用量排序的顶级进程? 的全部内容, 来源链接: utcz.com/qa/410520.html