簡體   English   中英

按用戶或名稱監控 Linux 進程

[英]Monitor Linux process by user or name

我需要使用 Cpanel 從我的 Centos 6.7 獲取統計信息並發送到我的外部監視器服務器。 我想得到的是過去 3 分鍾內每個用戶或每個進程名稱的平均 CPU 負載。 經過多次研究和測試,沒有找到任何可行的解決方案,除了 bash run top with

top -d 180 -b -n 2 > /top.log

第二次迭代看起來像......

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
38017 mysql     20   0  760m 265m 6324 S  1.4 14.2 244:27.08 mysqld
39501 nobody    20   0 1047m  93m 7068 S  0.1  5.0   0:06.80 httpd
54877 johnd     20   0 32728 3612 2364 S  0.0  0.2   0:00.09 imap
51530 johnd     20   0  353m 5372 1928 S  0.0  0.3   0:04.17 php-fpm
39500 nobody    20   0 1046m  79m 3656 S  0.0  4.3   0:02.57 httpd
    7 root      20   0     0    0    0 S  0.0  0.0  27:47.61 events/0
39497 nobody    20   0 1046m  84m 7784 S  0.0  4.5   0:02.77 httpd
etc...

然后使用命令或用戶 grep(僅在第二次迭代輸出上),求和並除以 100 以獲得像 cpu-load 這樣的值

echo "$PRTGTOP" | grep johnd | awk '{ sum += $9; } END { print sum/100; }'

我可能還應該嘗試計算處理時間等?,也許有一種更簡單的方法可以實現相同的結果,也許使用第三方軟件來生成統計信息?

謝謝。

top/proc/*/stat獲取它的信息。 /proc下的每個數字目錄都是當前正在運行的進程的進程號。

直接從這些目錄收集數據可能更容易。 數據格式定義明確,可以在man proc名為“/proc/[pid]/stat”的小節下找到。

你可以試試pidstat工具( sysstat包的一部分):

pidstat -C httpd -U johnd -h -u 180 1 | awk '{ sum += $7; } END { print sum/100;}'

這將返回在180秒間隔內與httpd命令字符串和johnd用戶匹配的所有進程的 CPU 使用率百分比。

好的,pidstat 更好,謝謝!,但是如果 USER pid 僅運行幾秒鍾,則不會報告 cpu 使用情況。 我發現最好的結果是:

#run pidstat with 10 iterations for 18 times
pidstat -U -u 10 18 > /pidstat.log

然后

#sum all cpu usage and divide by 18   

cat /pidstat.log | grep -v Average | grep johnd | awk '{ sum += $8; } END { print sum/100/18;}' OFMT="%3.3f"
cat /pidstat.log | grep -v Average | grep httpd | awk '{ sum += $8; } END { print sum/100/18;}' OFMT="%3.3f"

有了這個,即使進程只運行了幾秒鍾但 CPU 使用率很高,我也可以獲得每個用戶的最佳 CPU 使用率統計

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM