你能帮我解决这个问题吗?我正在尝试编写一个 bash 脚本,它将监视 ram 使用情况(不仅是 ram,还包括 cpu 和网络),并向我显示过去 X 秒内使用最多 ram 的 3 个进程?我知道我可以通过运行以下命令找到哪些进程使用最多的内存:
ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 3
但这怎么能重复呢?我不想看到此时此刻的情况,而是监视(让它成为)60 秒的情况,并查看使用最多 RAM 的前 3 个进程。
答案1
我使用dstat
命令。很有用。使用探索它man dstat
例如:
每 3 秒查找最昂贵的内存:
#dstat --top-mem 3 --most-expensive- memory process firefox 1430M firefox 1430M firefox 1431M firefox 1435M firefox 1435M firefox 1435M firefox 1435M firefox 1438M
同样,你可以为 cpu 、 network 、 IO 等打点。
dstat --top-cpu 3 -most-expensive- cpu process
firefox 3.5 firefox 4.5 firefox 2.4 firefox 2.6 firefox 2.8 firefox 2.0 firefox 2.8
答案2
前 3 个内存消耗最大的进程命令:
ps auxxx --sort=-rss |头-4
占用 CPU 最多的 3 个进程:
ps auxxx --sort=-%cpu |头-4
您可以通过 Cronjob 每分钟运行这些脚本。
- /tmp/serverhealth.sh