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