時間の経過とともに、完了したフォークの数とユーザーごとに実行されている同時プロセスの数を把握する必要があります。私のディストリビューションではこの情報を追跡しないようです。
制限を設定する方法を知っていますが、ユーザーごとにこれらの数字を追跡したいと思います。
答え1
そのpsacct
パッケージ(GNU Accounting)を試してください。必要な操作をすべて実行し、一度インストールして有効にすると(accton
)、ユーザープロセスに関するレポートを保持します(およびlastcomm
参照)。参考までに以下を参照してください。sa
dump-acct
ユーザーが実行したコマンドのログファイル
PID / PPIDを記録するには、バージョンをアップグレードする必要があります。https://serverfault.com/questions/334547/how-can-i-enable-pid-and-ppid-fields-in-psacct-dump-acctfork()
そうでなければ、noを過少報告することが疑われますexec()
。
修正するlastcomm
出力が2番目の列にある場合、F
プロセスはフォークであることを意味します(exec()
新しいプロセスに置き換えられた場合は呼び出されません)。出力dump-acct
しなければならないAcct v3形式でPID(およびPPID)を表示します。
psacctの代替案は、taskstats
まだサポートされていない新しい(ish)AFAICTです。Documentation/accounting/taskstats.txt
カーネルバージョンのソースを参照してください。始めるのに役立ちます。http://code.google.com/p/arsenalsuite/wiki/TrackingIOUsage https://code.google.com/archive/p/anim-studio-tools/ 具体的なコード例は、関数の行を変更してtasklogger.c
最初に型を変更してから、ユーザーが追跡する必要があるフィールドを追加する必要があることです。次のように呼び出してください(CPU 0-1を意味します)。これにより、各プロセスが終了するたびにリアルタイムの詳細が表示されます。printf()
print_delayacct2()
%u
%llu
__u64
ac_uid
ac_gid
tasklogger -dl -m 0-1
-m 0-1
PerlモジュールもありますLinux::Taskstats::Read
CPANで利用可能ですが、使用していません。
必要に応じて、タイムスタンプに基づいてデータを処理する必要があります。同時にユーザーあたりのプロセス数は言葉ほど単純ではありません。
アップデート2
いいですね。必要なサポートを確認する必要があるのは次のとおりpsacct
です。
- (公式)v3アカウントサポート(またはバックポート)のためのカーネル> = 2.6.8
- カーネルが有効になって
CONFIG_BSD_PROCESS_ACCT
いますCONFIG_BSD_PROCESS_ACCT_V3
psacct
v3は上記の会計()パッケージをサポートしています。
何よりもしなければならないこれは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`
答え2
を使用して子PIDを表示できます。ps -ef
親IDはフォークまたは生成されたIDです。これを使用して、watch
定期的にスクリプトを実行して計算することができます。
答え3
設定できます監査サブシステムフォーク(および必要な他のシステムコール)を記録します。
auditctl -a exit,always -S clone