Strace 轮询,尝试诊断瓶颈

Strace 轮询,尝试诊断瓶颈

我没有 strace 技能和知识,但我正在尝试解决客户应用程序运行非常慢的问题。我正在尝试找出瓶颈/问题可能出在哪里。

所以我跑了

/etc/init.d/apache2 stop && strace -Tf -o /tmp/trace.txt /etc/init.d/apache2 start

通过 /tmp/trace.txt,我看到了很多以下内容。

2540  poll([{fd=21, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout) <0.000052>

有人能告诉我我看到了什么吗?我该如何将其与问题联系起来?该站点确实使用 MySQL,这是否意味着无法建立与 MySQL 的连接?轮询是否与 DB 有关。

答案1

首先退一步——在找出问题所在之前,你的水平非常低。一个简单的方法是看看来自 Apache 的静态 HTTP 页面是否很慢——如果不是,那么可能是数据库很慢。我要采取的下一步是查看数据库查询需要多长时间。

top此外,如果所有这些都在同一个系统上,您可以使用、iotop和等工具查看系统资源iostat


关于poll系统调用:

我会尝试将-c开关添加到 Apache 的 strace 中,以查看每个系统调用的耗时如果你将范围缩小到 Apache在关注系统调用之前。例如,来自健康 HAProxy 的输出顶部是:

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 38.79    0.001152           0      6089           epoll_wait

系统poll调用用于等待文件描述符上的可用事件。我的第一个猜测是,由于超时时间很短,所以这是 Apache 的正常运行。如果这真的是个问题,那么可能是 Apache 用完了文件描述符,因为每个网络套接字都需要一个文件描述符。你可以看看Apache 手册中有关文件描述符的部分如果你到了这个地步。但是根据 DerkK 的说法,“它将在 open() 或 socket() 处失败”,这更有意义。

因此,这实际上只是一些细节,很可能不是您的实际问题——再次退后几步。

相关内容