10 ram
如果我运行top -c
或htop
获得内存消耗的进程,但这不是我想看到的。
是否有命令行可以查看给定应用程序的 RAM 消耗?
例如,我想查看 Apache Web 服务器的 RAM 消耗(而不是通过检查它运行的所有进程)
这里有一个非常好的详细解释: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:”行,看看内存使用量减少了多少,这将告诉您它使用了多少内存。