是否有一个简单的工具,或者可能是一种方法将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或端口查找失败。 –