Linux

如何跟踪每個使用者的程序數和分叉數?

  • October 24, 2017

我需要弄清楚隨著時間的推移,每個使用者完成了多少分叉,以及每個使用者執行了多少並發程序。我的發行版似乎沒有跟踪此資訊。

我知道如何設置限制,但我有興趣為每個使用者跟踪這些數字。

試試這個psacct包(GNU 會計),它應該做你需要的一切,一旦安裝和啟用(accton),然後lastcomm會保持報告使用者程序(另見sadump-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支持的內容是:

  1. (官方)核心 >= 2.6.8 用於 v3 記帳支持(或向後移植)
  2. 核心啟用CONFIG_BSD_PROCESS_ACCTCONFIG_BSD_PROCESS_ACCT_V3啟用
  3. 支持 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`

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