如何详细检查内存使用情况

如何详细检查内存使用情况

有诸如 toppspmap(以及其他)之类的命令可以显示进程使用了​​多少内存,但它们仅显示总内存。

使用free -g命令输出我们可以看到totalused、和:sharedbufferscached

             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、终端)共享。

设备缓存也是非进程的——它与任何以前使用过的文件相关,即使在使用该文件的进程早已结束之后也是如此。如果需要,可以立即丢弃该空间,但保留它是希望可以再次使用最近使用的文件中的某些块。

虚拟内存经常被从未实际使用过的保留过度使用,因此也可能是短暂的。

相关内容