我没有 strace 技能和知识,但我试图解决我的客户端应用程序非常慢的问题。我试图找出瓶颈/问题可能在哪里。
所以我跑了
/etc/init.d/apache2 stop && strace -Tf -o /tmp/trace.txt /etc/init.d/apache2 start
Run Code Online (Sandbox Code Playgroud)
通过/tmp/trace.txt,我看到了很多以下内容。
2540 poll([{fd=21, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout) <0.000052>
Run Code Online (Sandbox Code Playgroud)
有人会取悦我所看到的,以及我将如何将其与问题所在的位置联系起来。该站点确实使用了 MySQL,这是否意味着无法建立与 MySQL 的连接?民意调查甚至与数据库相关。
首先退后一步——在找出问题所在之前,你的水平已经非常低了。一个简单的方法是查看 Apache 的静态 HTTP 页面是否很慢——如果不是,那么数据库可能很慢。我下一步要做的是查看数据库查询花费了多长时间。
top
此外,如果这一切都在同一系统上,您可以使用、iotop
和 等工具查看系统资源iostat
。
关于poll
系统调用:
如果您在关注系统调用之前将其范围缩小到 apache,我会尝试将开关添加到-c
Apache 的 strace 中,以查看每个系统调用的时间安排。例如,健康 HAProxy 的输出顶部是:
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
38.79 0.001152 0 6089 epoll_wait
Run Code Online (Sandbox Code Playgroud)
该poll
系统调用用于等待文件描述符上的可用事件。我的第一个猜测是,由于超时时间太短,这是 Apache 的正常功能。如果这实际上是一个问题,则可能是 Apache 耗尽了文件描述符,因为每个网络套接字都需要一个文件描述符。如果您看到了这一点,您可以查看Apache 手册中有关文件描述符的部分。但根据 DerkK 的说法,“它会在 open() 或 socket() 处失败”,这更有意义。
所以实际上,这只是一些很可能不是您实际问题的细节——再次退后几步。
归档时间: |
|
查看次数: |
12644 次 |
最近记录: |