有诸如 top
、ps
、pmap
(以及其他)之类的命令可以显示进程使用了多少内存,但它们仅显示总内存。
使用free -g
命令输出我们可以看到total
、used
、和:shared
buffers
cached
total used free shared buffers cached
Mem: 126 86 39 5 1 80
-/+ buffers/cache: 4 121
Swap: 3 0 3
有没有办法详细检查每个进程的内存使用情况?例如这样的事情:
PID USER MEM USD SHRD BUF CAH command
23 monitoring 23kb 12kb 10kb 23kb 5kb du
如果上述不可能,那么有什么方法可以检查具体的内存量吗? (例如,我只想检查缓存内存并查看每个进程占用了多少内存。)
答案1
我没有 Centos,但手册页似乎与 Linux Mint 相关,我正在用它来调查这个问题。这些功能就是IPC(进程间通信设施)。
共享资源(几乎根据定义)不属于特定进程。因此,在许多情况下报告所有内容都会重复计算。
我可以使用 看到列出的共享内存段ipcs
,并使用以下命令获取更多详细信息:
ipcs | while read -r _ Id _; do
[[ $Id =~ [0-9] ]] && ipcs -u -m -i $Id
done | more
这些似乎维护一个cpid
(创建者 pid)和一个lpid
(最后访问者 pid)。据我所知,我有两种共享内存。
(a) 我的控制面板 (mate-panel) 与其显示的每个应用程序都有共享 (mintUpdate、mate-sensors-ap、mate-screensave)。
(b) 我的显示服务器 (Xorg) 与每个可以使用“编辑”菜单的窗口(xed、终端)共享。
设备缓存也是非进程的——它与任何以前使用过的文件相关,即使在使用该文件的进程早已结束之后也是如此。如果需要,可以立即丢弃该空间,但保留它是希望可以再次使用最近使用的文件中的某些块。
虚拟内存经常被从未实际使用过的保留过度使用,因此也可能是短暂的。