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

我如何获得所有正在运行的进程的当前内存使用情况? 最好以字节为单位,使它们可以精确地相加。 我可以将subprocess的摘要汇总到产生它们的进程中吗? (例如所有的apache线程一起)。

有时,我的服务器内存不足,无法响应。 我想发现什么是使用所有的内存。 不幸的是,这可能不是一个单一的过程。 一些程序产生了数百个进程,每个进程使用很less的内存,但它累加起来。

这会让你在那里的一部分:

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

顺便说一句,Apache可能是preforked而不是线程。

 ps aux 

有一个名为RSS的列,它是以千字节为单位的非交换内存使用量。 我不得不parsing这个命令的输出,并且自己添加它来找出每个命令的总数。

我介绍了smem ,它介绍了比例尺寸的概念:

由于物理内存的大部分通常是在多个应用程序之间共享的,因此称为驻留集大小(RSS)的标准内存使用量度将显着高估内存使用量。 PSS反而衡量每个应用程序的每个共享区域的“公平份额”,以提供一个现实的措施。

另外,你也可以查找oomkiller日志,它会告诉你哪个程序因为内存分配而破坏骆驼的后台而死亡。

你不会告诉你正在运行的是什么Unix。 如果是Solaris,则可以使用具有一些有用选项的prstat命令,如:

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