実行されるフォークの数と、各ユーザーが時間の経過とともに実行する同時プロセスの数を把握する必要があります。この情報が私のディストリビューションによって追跡されているようには見えません。
制限を設定する方法は知っていますが、ユーザーごとにこれらの数値を追跡することに興味があります。
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
サポートを確認するものは次のとおりです。
CONFIG_BSD_PROCESS_ACCT
およびCONFIG_BSD_PROCESS_ACCT_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`
ps -ef
を使用して子pidを確認できます。親IDは、フォークまたはスポーンを実行したIDです。 watch
を使用して定期的にスクリプトを実行し、カウントを行うことができます。
監査サブシステム を設定してフォークをログに記録することができます(そして他のシステムコールがあなたの気に入るものは何でも)。
auditctl -a exit,always -S clone