如果我运行top -c
或htop
获取进程及其内存消耗,但这不是我想要看到的。
是否有命令行可以查看给定应用程序的 RAM 消耗?
例如,我想查看 Apache Web 服务器的 RAM 消耗(而不是通过检查它运行的所有进程)
答案1
这里有一个非常详细的解释: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”之前和之后的总内存使用情况(free -m,+/buffers/cache)来验证这一点。在杀死所有mysqld进程后,根据“free -m”,内存使用量下降了25MB。
如果您发现每个进程都有相同的 VIRT、RES 和 SHR 列,则它们很可能只是同一进程的线程。(较旧的 Linux 库通过生成多个实质上占用相同内存的实际进程来处理线程)
如果它们不同,您可能能够通过对 (RES - SHR) 求和来估计。但这只有在进程实际上是独立进程而不仅仅是同一进程的线程时才有效。查看 PPID(父进程 ID)也有帮助。如果它们都有相同的父进程,它们可能只是线程(尽管不一定)。
不幸的是,在 Linux 中没有真正好的简单方法来回答这个问题。唯一简单的方法是在终止进程之前立即检查“free”,并在之后立即再次检查。查看“-/+ buffers/cache:”行,看看内存使用量减少了多少,这将告诉你它使用了多少。
答案2
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
and 的情况下运行tail -1
:
pmap -x $(pidof firefox) | tail -1
仅显示百分比:
top -p $(pidof firefox)
此外,使用时top
您可以按i忽略空闲/僵尸进程,以使其更容易阅读: