Memory
如何找到特定時間的最高記憶體和 CPU 消耗程序?
我檢查了 sar 報告,發現 CPU 和記憶體在特定時間(例如前一天)得到了更多的利用。
是否有可能找到哪個程序佔用了大量 CPU 和記憶體?我們如何發現哪個程序正在消耗該記憶體和 CPU。
不。
除非您設置了一些(複雜的)監控,否則一旦程序退出,您將無法找出哪個程序使用了 CPU。
沒有像桌子這樣的“標準”東西
exec path;exec name;stime,etime,%sys,%io,%wait,%idle,...
您必須在執行期間擷取該過程。
crontab -e
# min hr day month day_of_week # every minute run : 1 * * * * /root/watch_processes.sh
一次手動執行:
mkdir /root/process_watch
創建簡單的腳本
/root/watch_processes.sh
#!/bin/bash # %cpu pid command args ps -eo "%C %P %U %c %a" > /root/process_watch/`date +%Y%m%d_%H%M`
上面將每分鐘創建一個文本文件,只有日期作為文件名,但它們都將位於給定文件夾下,在上面的範例中為
/mkdir/process_watch
. 相應調整。http://linuxcommand.org/lc3_man_pages/ps1.html
根據需要調整
ps -eo
每個流程的輸出,使用%C %P %U %c %a
將產生這 5 列數據
- 中央處理器 %
- 程序號
- 使用者名
- 命令執行
- 給命令執行的參數
在每個文件中,您將在第一列中獲得很多 0.0 的列表。有人擅長
awk
或sed
可以在上面添加語法以過濾掉 0% cpu 程序。就像有人說你必須在程序發生時捕捉它,一旦程序完成,就沒有 pid# 的記錄在什麼時候佔用了 %cpu。您將不得不像這樣進行過程監視,然後返回並找到違規者。