web-dev-qa-db-ja.com

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

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

制限を設定する方法は知っていますが、ユーザーごとにこれらの数値を追跡することに興味があります。

5
Julien

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()について過少報告されると思われます。

Updatelastcommが2番目の列にFを出力する場合、それはプロセスがフォークであったことを意味します(exec()は呼び出されませんでした)自分自身を新しいプロセスに置き換える)。 dump-acctの出力は、acct v3形式のPID(およびPPID)を表示する必要があります

Psacctの代わりに、new(ish)taskstatsがありますが、まだAFAICTのサポートはそれほど多くありません。カーネル・バージョンのソースのDocumentation/accounting/taskstats.txtを参照してください。これはあなたが始めるのに役立つかもしれません http://code.google.com/p/arsenalsuite/wiki/TrackingIOUsagehttps://code.google.com/archive/p/anim-studio-tools/ 特定のコード例はtasklogger.cです。まず、%uを置き換えるために、関数printf()print_delayacct2()行を変更する必要があります。 %lluタイプには__u64を使用し、次に、ユーザーが追跡する必要のあるフィールドac_uid(およびおそらくac_gid)を追加します。 tasklogger -dl -m 0-1のようなもので呼び出します(-m 0-1はCPU 0-1を示します)。その後、各プロセスが終了すると、リアルタイムの詳細が表示されます。

Perlモジュールもあります Linux::Taskstats::Read CPANで利用できますが、私は使用していません。

ユーザーごとのconcurrentプロセスカウントが必要な場合は、タイムスタンプに基づいてデータを処理する必要があります。これは、単純なことではありません。

アップデート2OK、必要なpsacctサポートを確認するものは次のとおりです。

  1. (公式)カーネル> = 2.6.8(v3アカウンティングサポート(またはバックポート)用)
  2. CONFIG_BSD_PROCESS_ACCTおよびCONFIG_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`
6
mr.spuratic

ps -efを使用して子pidを確認できます。親IDは、フォークまたはスポーンを実行したIDです。 watchを使用して定期的にスクリプトを実行し、カウントを行うことができます。

0
Daniel

監査サブシステム を設定してフォークをログに記録することができます(そして他のシステムコールがあなたの気に入るものは何でも)。

auditctl -a exit,always -S clone