有没有一个简单的工具,或者可能是一个方法将strace输出转换成可视化的或更容易筛选的东西? 我不得不弄清楚应用程序出错的地方,但是它会产生大量的数据。 试图追踪这个应用程序和它的线程在更大规模上正在做什么(或者试图做什么)被certificate是很难读取每个系统调用的。
我没有任何预算,我们是一个纯粹的Linux商店。
如果你的问题是网络问题,你可以尝试用a来限制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
相关: 如何在shell中将strace解析为纯文本?