是否有一個簡單的工具,或者可能是一種方法將strace輸出轉換爲可視化或更容易篩選的東西?我不得不弄清楚應用程序出錯的地方,但是它會產生大量的數據。試圖追蹤這個應用程序和它的線程在更大規模上正在做什麼(或者試圖做什麼)被證明是非常難以閱讀每個系統調用的。可視化strace輸出
我沒有任何預算,我們是一個純粹的Linux商店。
是否有一個簡單的工具,或者可能是一種方法將strace輸出轉換爲可視化或更容易篩選的東西?我不得不弄清楚應用程序出錯的地方,但是它會產生大量的數據。試圖追蹤這個應用程序和它的線程在更大規模上正在做什麼(或者試圖做什麼)被證明是非常難以閱讀每個系統調用的。可視化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
/sendto
)可視化接收到的數據和發送,例如調試PHP程序:
strace -e recvfrom,sendto -fp $(pgrep -n php) -s 1000 2>&1 | while read -r line; do
printf "%b" $line;
done | strings
知道什麼樣的問題,你有幫助。但是,一般來說,當我在做毛茸茸的工作時,我使用grep很多,如果問題是核心轉儲或特定的系統調用,我可以猜測,請專注並使用它來指導我的線索向後。 –
@seth問題是應用程序看起來試圖連接到某個東西......然而,它出現連接失敗錯誤,但是,嗅探網絡接口時,它從不嘗試連接到盒子外的任何東西。我看到2個tcp會話建立並在環回中結束,沒有數據傳輸。 – tMC
我會'egrep'套接字|連接|發送'/ tmp/tr'並嘗試查看哪個命令失敗。根據錯誤消息的確切文本,我可能會查找DNS或端口查找失敗。 –