报告每个进程/程序的内存使用情况

报告每个进程/程序的内存使用情况

如何单独获取所有正在运行的进程的当前内存使用情况?最好以字节为单位,这样可以准确地将它们加起来。我可以将子进程的摘要汇总到生成它们的进程中吗?(例如,所有 Apache 线程一起)。

有时,我的服务器会耗尽内存并变得无响应。我想知道是什么占用了所有的内存。不幸的是,这可能不是一个单一的进程。有些程序会产生数百个进程,每个进程占用的内存很少,但加起来就很多了。

答案1

这将帮助你到达那里的部分路程:

ps axfo %mem,size,rss,vsz,pid,args

顺便说一句,Apache 可能是预先分叉的,而不是线程化的。

答案2

ps aux

有一列名为 RSS,即非交换内存使用量(以千字节为单位)。我不得不解析此命令的输出,然后自己将其加起来,才能找出每个命令名称的总数。

答案3

有请微电子,引入了比例集大小

由于物理内存的很大一部分通常由多个应用程序共享,因此内存使用量的标准度量标准(称为驻留集大小 (RSS))将大大高估内存使用量。相反,PSS 会测量每个应用程序在每个共享区域中的“公平份额”,以提供实际的度量标准。

或者,您可以只查找 oomkiller 日志,它会告诉您哪个程序因为在内存分配中压垮了骆驼而被杀死。

答案4

你不需要知道你正在运行什么 Unix。如果是 Solaris,你可以使用 prstat 命令,它有一些有用的选项,例如:

prstat -s rss -a # sorted by RAM usage, per user metrics

相关内容