该应用程序使用了多少 RAM?

该应用程序使用了多少 RAM?

如果我运行top -chtop获取进程及其内存消耗,但这不是我想要看到的。

是否有命令行可以查看给定应用程序的 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

这可以在没有-xand 的情况下运行tail -1

pmap -x $(pidof firefox) | tail -1

仅显示百分比:

top -p $(pidof firefox)

此外,使用时top您可以按i忽略空闲/僵尸进程,以使其更容易阅读: 顶部输出更小

相关内容