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

10 ram

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

是否有命令行可以查看给定应用程序的 RAM 消耗?

例如,我想查看 Apache Web 服务器的 RAM 消耗(而不是通过检查它运行的所有进程)

irw*_*inr 5

这里有一个非常好的详细解释: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    
Run Code Online (Sandbox Code Playgroud)

使用的总内存约为 25 MB(取 27 MB RES 并减去共享 (SHR))

我通过检查发出“killall mysqld”之前和之后的总内存使用情况(free -m,+/缓冲区/缓存)来验证这一点。杀死所有 mysqld 进程后,根据“free -m”,内存使用量下降了 25 MB。

如果您看到每个进程都有相同的 VIRT、RES 和 SHR 列,那么它们很可能只是同一进程的线程。(较旧的 Linux 库通过生成多个实质上占用相同内存的实际进程来处理线程)

如果它们不同,您也许可以通过求和 (RES - SHR) 来估计它。但这仅在进程实际上是单独的进程而不仅仅是同一进程的线程时才有效。查看 PPID(父进程 ID)也有帮助。如果它们都有相同的父级,它们可能只是线程(尽管不一定)。

不幸的是,在 Linux 中没有真正好的简单方法来回答这个问题。唯一简单的方法是在终止进程之前立即检查“空闲”,然后立即再次检查。查看“-/+ buffers/cache:”行,看看内存使用量减少了多少,这将告诉您它使用了多少内存。