我没有strace技能和knowlegde,但即时通讯尝试通过一个问题,我的客户端应用程序是非常缓慢的工作。 我试图找出瓶颈/问题可能在哪里。
所以我跑了
/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无法build立? 民意调查甚至与数据库有关。
先退一步 – 在发现问题出现在哪里之前,您的水平已经很低了。 一个简单的方法是看看Apache的静态HTTP页面是否缓慢 – 如果不是,那么也许数据库很慢。 下一步我会看看DB查询要花多长时间。
此外,如果这是在同一个系统上,你可以看看系统资源将工具,如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的正常运作。 可能是因为每个networking套接字都需要一个文件描述符,如果这实际上是一个问题,那么Apache将耗尽文件描述符。 如果你已经到了这一步,你可以看一下Apache描述文件描述符的手册部分 。 但是根据DerkK的说法,“在open()或socket()方面会失败”,这更加有意义。
所以真的这只是一些很可能不是你真正的问题的细节 – 再次采取几个步骤。