如何跟踪每個使用者的程序數和分叉數?
我需要弄清楚隨著時間的推移,每個使用者完成了多少分叉,以及每個使用者執行了多少並發程序。我的發行版似乎沒有跟踪此資訊。
我知道如何設置限制,但我有興趣為每個使用者跟踪這些數字。
試試這個
psacct
包(GNU 會計),它應該做你需要的一切,一旦安裝和啟用(accton
),然後lastcomm
會保持報告使用者程序(另見sa
和dump-acct
)。請參閱此內容:使用者執行的命令日誌文件您可能需要升級版本以記錄 PID/PPID,請參閱https://serverfault.com/questions/334547/how-can-i-enable-pid-and-ppid-fields-in-psacct-dump-acct,否則我懷疑它會在
fork()
沒有exec()
.更新 如果您在第二列中的
lastcomm
輸出F
,則表示該程序是一個分叉(從未呼叫exec()
以用新程序替換自身)。的輸出dump-acct
應該以 acct v3 格式顯示 PID(和 PPID)。psacct 的替代品可能是 new(ish)
taskstats
,目前還沒有大量支持它的 AFAICT,請參閱Documentation/accounting/taskstats.txt
您的核心版本原始碼。這可能會幫助您入門http://code.google.com/p/arsenalsuite/wiki/TrackingIOUsage https://code.google.com/archive/p/anim-studio-tools/ 具體的程式碼範例是tasklogger.c
,您將需要修改printf()
函式中的行print_delayacct2()
,首先替換%u
為%llu
類型__u64
,其次添加您需要由使用者跟踪的欄位ac_uid
(也許還有)。ac_gid
用類似的東西呼叫它tasklogger -dl -m 0-1
(其中-m 0-1
表示 CPU 0-1)。然後,您將在每個程序退出時看到實時詳細資訊。CPAN 上還有一個 perl 模組
Linux::Taskstats::Read
,雖然我沒有使用過。如果您想要每個使用者的並發程序計數,則需要根據時間戳處理數據,這聽起來並不簡單。
更新 2 好的,檢查所需
psacct
支持的內容是:
- (官方)核心 >= 2.6.8 用於 v3 記帳支持(或向後移植)
- 核心啟用
CONFIG_BSD_PROCESS_ACCT
並CONFIG_BSD_PROCESS_ACCT_V3
啟用- 支持 v3 的會計 (
psacct
) 包,如上所述以上所有在 CentOS 6 中都應該是正確的,我檢查了 5.x 並且它沒有
CONFIG_BSD_PROCESS_ACCT_V3=y
,所以你必須重建你的核心才能啟用它。原版
psacct-6.3.2
大約有 15 年的歷史,Red Hat/CentOS 版本具有向後移植的 v3 和 PID 顯示支持(我現在無法測試它,但它應該可以工作)。要檢查您的核心配置:
zgrep BSD_PROCESS_ACCT /proc/config.gz /boot/config-`uname -r`