簡単なツール、またはstrace出力を視覚化できるものまたは他の方法で簡単にふるいにかけることができるものに変換する方法はありますか?アプリケーションがどこで問題になっているのかを把握する必要がありますが、それを階層化すると大量のデータが生成されます。このアプリケーションとそのスレッドが実行していること(または実行しようとしていること)を大規模に追跡しようとすると、すべてのシステムコールを読み取ることが非常に困難になります。
私には何の予算もありません。私たちは純粋なLinuxショップです。
問題がネットワークの問題である場合は、 strace出力をネットワーク関連のシステムコールに制限することを試みることができます。
strace -e trace=network your_program
はい、-c
パラメータを使用して、各システムコールのカウント時間、呼び出し、およびエラーを視覚化し、表の形式で要約を報告します。
$ strace -c -fp $(pgrep -n php)
Process 11208 attached
^CProcess 11208 detached
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
83.78 0.112292 57 1953 152 stat
7.80 0.010454 56 188 lstat
7.79 0.010439 28 376 access
0.44 0.000584 0 5342 32 recvfrom
0.15 0.000203 0 3985 sendto
0.04 0.000052 0 27184 gettimeofday
0.00 0.000000 0 6 write
0.00 0.000000 0 3888 poll
------ ----------- ----------- --------- --------- ----------------
100.00 0.134024 42922 184 total
これにより、大量のデータを分析しなくても問題を特定できます。
recvfrom
もう1つの方法は、特定のシステムコール( /など)でフィルタリングして、sendto
受信データと送信データを視覚化することです。たとえば、PHPプロセスのデバッグ例です。
strace -e recvfrom,sendto -fp $(pgrep -n php) -s 1000 2>&1 | while read -r line; do
printf "%b" $line;
done | strings