ユーザーあたりのプロセスとフォークの数を追跡する方法は?

ユーザーあたりのプロセスとフォークの数を追跡する方法は?

時間の経過とともに、完了したフォークの数とユーザーごとに実行されている同時プロセスの数を把握する必要があります。私のディストリビューションではこの情報を追跡しないようです。

制限を設定する方法を知っていますが、ユーザーごとにこれらの数字を追跡したいと思います。

答え1

そのpsacctパッケージ(GNU Accounting)を試してください。必要な操作をすべて実行し、一度インストールして有効にすると(accton)、ユーザープロセスに関するレポートを保持します(およびlastcomm参照)。参考までに以下を参照してください。sadump-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__u64ac_uidac_gidtasklogger -dl -m 0-1-m 0-1

PerlモジュールもありますLinux::Taskstats::ReadCPANで利用可能ですが、使用していません。

必要に応じて、タイムスタンプに基づいてデータを処理する必要があります。同時にユーザーあたりのプロセス数は言葉ほど単純ではありません。

アップデート2 いいですね。必要なサポートを確認する必要があるのは次のとおりpsacctです。

  1. (公式)v3アカウントサポート(またはバックポート)のためのカーネル> = 2.6.8
  2. カーネルが有効になってCONFIG_BSD_PROCESS_ACCTいますCONFIG_BSD_PROCESS_ACCT_V3
  3. psacctv3は上記の会計()パッケージをサポートしています。

何よりもしなければならないこれは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

関連情報