Memory

如何找到特定時間的最高記憶體和 CPU 消耗程序?

  • November 3, 2019

我檢查了 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 列數據

  1. 中央處理器 %
  2. 程序號
  3. 使用者名
  4. 命令執行
  5. 給命令執行的參數

在每個文件中,您將在第一列中獲得很多 0.0 的列表。有人擅長awksed可以在上面添加語法以過濾掉 0% cpu 程序。

就像有人說你必須在程序發生時捕捉它,一旦程序完成,就沒有 pid# 的記錄在什麼時候佔用了 %cpu。您將不得不像這樣進行過程監視,然後返回並找到違規者。

引用自:https://unix.stackexchange.com/questions/508518