リアルタイムのパフォーマンスを妨げる定期的なシステムアクティビティを追跡する方法

リアルタイムのパフォーマンスを妨げる定期的なシステムアクティビティを追跡する方法

私は、64 ビット ubuntu-14.04 を実行している 2 コア ラップトップで、Pianoteq-5 を搭載した Jack2 を実行しています。このような構成は、低遅延要件のため、リアルタイム パフォーマンスに非常に敏感です。最初は、一定のクリック音が聞こえましたが、/etc/security/limits.conf を調整してオーディオ グループに RR 機能を有効にすると、基本的に聞こえなくなりました。

これで、Jack と Pianoteq の両方に SCHED_FIFO スケジューリング クラスのスレッドができました。Jack を 128 サンプルのバッファーで実行でき、ほとんどの場合スムーズに動作します。「ほとんどの場合」と言ったのは、数分おきに何かが楽園を壊すからです。ひどいひび割れ音が聞こえます。バックグラウンドで開始された優先度の高いアクティビティの結果ではないかと考えています。しかし、誰が犯人なのかをどうやって突き止めればよいのでしょうか。

答え1

これを行う 1 つの方法を以下に示します。大量のファイルが生成されますが、他の方法は思いつきません。

サーバーがビジー状態になったときにそれを確認できない場合は、sysstat を使用して履歴リソース データを取得する必要があります。

最初の方法: sysstat を使用して 5 分ごとに統計を収集します (1 日あたり約 8 MB を消費します)。cron エントリは、5 * * * * /usr/lib/sa/sa1
または 5 * * * * /usr/lib64/sa/sa1 のようになります。

sysstat は最大 1 か月分のデータを保持します。ただし、いつでもファイルをコピーしてアーカイブすることもできます。

「sar」コマンドを使用して履歴データを遡り、サーバーがビジー状態になった時間を確認します。

サーバーに履歴データが存在するので、その時点で何が実行されているかを確認できるようにプロセス出力をキャプチャする必要があります。これには「ps」または「top」を使用できます。

したがって、5 分ごとに top と ps auxww の出力をキャプチャして、実行中のすべてのプロセスを確認することもできます。私は 2 つのサブディレクトリ「toparchive」と「psarchive」を作成し、これらを cron ジョブとして配置します。

5 * * * * top -b -n 1 > /root/toparchive/top.`date +"%Y%m%d_%H%M%S"`

または

5 * * * * ps auxww > /root/psarchive/ps.`date +"%Y%m%d_%H%M%S"`

(ファイル数は多くなりますが、代わりにスクリプトを作成して、/root/toparchive/20140701/ のように日付スタンプ付きのサブディレクトリを追加することもできます)

しかし、基本的にはsysstatを監視して、サーバーがいつビジーになるかを確認し、キャプチャした適切なtopまたはps出力をチェックして、スペースを占有しているものを確認します。

プロセスがメモリを大量に消費している場合は、さらに「pmap」と「pgrep」を使用して、現在のプロセスと実際のメモリ使用量も確認することができます。

関連情報