看了外国人制作的排查apache网页很慢的视频顿时学习到了很多,应该多看国外的视频,链接http://www.youtube.com/watch?v=eF-p–AH37E
这个例子介绍了有一个网页打开比其他网页要慢,telnet去测试GET请求,我这里用nginx做测试
➜ telnet jpuyy.com 80 Trying 114.215.158.48... Connected to jpuyy.com. Escape character is '^]'. GET / HTTP/1.1 Host: jpuyy.com
这时回车一次,这样与服务器keep-alive。
另打开一个窗口,,用pidof nginx找到此进程的pid,用lsof -p查看此pid都打开了哪些文件,同时也能看到tcp ESTABLISHED及打开的端口,这里就能确定是哪个nginx进程来处理用户请求。
for i in `pidof nginx`; do lsof -n -p $i|grep ESTABLISHED; done nginx 28170 nginx 14u IPv4 8920667 0t0 TCP 114.215.158.48:http->91.200.12.90:61110 (ESTABLISHED)
在服务器上结合top,按下shift+u,输入nginx过滤只有nginx用户的进程。
找到pid之后,用strace -p pid分析请求到底都做了什么。这里是要找网页变慢的因素,加上-r参数显示时间过程,用于查看是哪一步变慢的,-o 跟filename将输出重定向到文件中,以下是完整命令。
strace -o file -r -p 28170
接下来打开可以查看worker是如何工作的,打开文件,运行命令,调用系统文件,调用php。因为加了-r参数,可以看到每一步运行的时间。可以直接用awk或cut结合sort找出运行时间最长的一步,查看它是因为dns原因,还是php运行函数导致。
Leave a Reply