2011-06-22 7 views
2

簡単なツールがありますか、straceの出力を視覚化することができますか?アプリケーションがどこに間違っているのか把握しなければならないが、膨大な量のデータが生成される。このアプリケーションとそのスレッドが何をやっているのか(またはしようとしているのか)を大規模に追跡しようとすると、すべてのシステムコールを読むのが非常に難しいことが分かります。straceの出力を可視化する

私には何も予算はありません。私たちは純粋なLinuxショップです。あなたの問題はネットワーク1の場合

+0

知ることが、問題の種類をお持っていると助けになる。しかし、一般的に私は髪の毛のような仕事をしているときに私はgrepをたくさん使っています。問題がクラスのコアダンプや特定のシステムコールであれば、そこに焦点を当てて、それを使って自分の道を後方に導きます。 –

+0

@seth問題は、アプリケーションが何かに接続しようとしているようです...接続に失敗しましたが、ネットワークインターフェイスを盗聴してエラーが発生しました。ボックスの外には何も接続しようとしません。 2つのtcpセッションが確立され、ループバックで終了しました。これまでに送信されたデータはありませんでした。 – tMC

+0

私は 'egrep 'socket | connect | send'/tmp/tr'を実行して、どのコマンドが失敗したかを調べようとします。エラーメッセージの正確なテキストに応じて、DNSまたはポート検索も失敗する可能性があります。 –

答えて

4

、あなたは、

strace -e trace=network your_program

2

はいてネットワークに関連するシステムコールをstrace出力を制限しようとカウント時間を視覚化する-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 

これは、大量のデータを分析することなく問題を特定します。

strace -e recvfrom,sendto -fp $(pgrep -n php) -s 1000 2>&1 | while read -r line; do 
    printf "%b" $line; 
done | strings 

関連:

もう一つの方法は、(recvfrom/sendtoなど)、例えば、デバッグPHPプロセス受信したデータを視覚化して送信するために、特定のシステムコールによってフィルタリングすることであるHow to parse strace in shell into plain text?