Answers:
这里有一个很好的详细说明:https : //blogs.kde.org/2005/09/15/measuring-memory-usage
但本质上:您必须真正深入并了解如何设置应用程序。
因此,例如,查看mysql:
PID PPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6004 16116 composit 20 0 37900 27m 2908 S 0 0.2 0:40.33 mysqld
16115 16085 composit 20 0 37900 27m 2908 S 0 0.2 0:00.37 mysqld
16116 16115 composit 20 0 37900 27m 2908 S 0 0.2 2:07.34 mysqld
16117 16116 composit 20 0 37900 27m 2908 S 0 0.2 0:00.00 mysqld
16118 16116 composit 20 0 37900 27m 2908 S 0 0.2 3:19.79 mysqld
16119 16116 composit 20 0 37900 27m 2908 S 0 0.2 0:00.01 mysqld
16120 16116 composit 20 0 37900 27m 2908 S 0 0.2 5:31.09 mysqld
16121 16116 composit 20 0 37900 27m 2908 S 0 0.2 14:19.53 mysqld
16122 16116 composit 20 0 37900 27m 2908 S 0 0.2 36:13.67 mysqld
16123 16116 composit 20 0 37900 27m 2908 S 0 0.2 30:30.64 mysqld
16124 16116 composit 20 0 37900 27m 2908 S 0 0.2 0:00.15 mysqld
16493 16116 composit 20 0 37900 27m 2908 S 0 0.2 0:00.00 mysqld
使用的总内存约为25 MB(取27 MB RES并减去共享(SHR))
我通过在发出“ killall mysqld”之前和之后检查总内存使用情况(免费的-m,+ /缓冲区/缓存)来验证这一点。杀死所有mysqld进程后,根据“ free -m”,内存使用减少了25 MB。
如果您看到每个进程具有相同的VIRT,RES和SHR列,则它们很可能只是同一进程的线程。(较早的Linux库通过产生实质上占用相同内存的多个实际进程来处理线程)
如果它们不同,则可以通过对(RES-SHR)求和来估计它。但这仅在进程实际上是单独的进程而不仅仅是同一个进程的线程的情况下才有效。查看PPID(父进程ID)也有帮助。如果它们都具有相同的父代,则它们可能只是线程(尽管不一定)。
不幸的是,在Linux中没有真正好的简单方法来回答这个问题。唯一简单的方法是在终止过程之前立即检查“免费”,并在之后立即再次检查。查看“-/ + buffers / cache:”行,并查看减少了多少内存使用量,这将告诉您使用了多少内存。
有了一点帮助man ps
,这个很好的答案 ...
ps -up $(pidof PROCESS_NAME)
例如:
[wilf@comp ~]$ ps -up $(pidof firefox)
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
wilf 1619 8.9 5.6 1464216 342396 ? Sl 17:56 1:36 /usr/lib64/firefox/firefox
[wilf@comp ~]$
其他方法:
cat /proc/$(pidof firefox)/status | grep VmSize
可以在没有-x
和的情况下运行tail -1
:
pmap -x $(pidof firefox) | tail -1
仅显示百分比:
top -p $(pidof firefox)
另外,在使用时,top
您可以按一下i以忽略空闲/僵尸进程,以使其更易于阅读:
pmap
显示了关于PID正在使用的资源的很多信息。根据设在进程的名称信息和PID利用它发现pidof
,因此,如果任何名义您提供所示的主处理(我想,不知道是否是指回父进程)