记一次网站访问慢的调试记录

客户网站打开非常慢,请我去看一下。

首先慢是一个主观感受,到底多久算慢呢? 这里可以用浏览器开的开发工具来看加载时间,看了一下,index.php确实非常慢,足足有8s之多。而且这个8s是在waiting的。也就是说服务器等了8s才给浏览器发东西。 非常可疑,不正常!

这里要交代一下这个网站的架构,采用的简单的linux,php ,nginx,mysql ,甚至还开了memcached ,阿里云云主机,照理说不应该这么慢啊。

8s ,首先想到的是mysql ,排查,开slow log ,看有没有大于2s 的查询语句,发现没有。都挺块的。。这里排查数据库的原因。

接下来我想到了nginx,把进程调成1work 进程 ,然后用strace -p PID -c 统计,没有特别好的发现。。

如果,所以我把目光聚集在php 上,php-fpm看了一下,也有slow log 这个概念,把秒数设成2s ,再看slow log

sleep() xxx/plugins/functions/cache_memcached.php:64

php确实调用了memcached ,我再仔细看memcached ,之前搜索确实发现有些网站访问慢是不能连接memcached 的原因,把原进程杀了,然后-c 60000调大可连接的参数,怕是因为默认连接数1024不够的缘故。发现还是老样子,

这时候telnet localhost 11211

stats

STAT pid 25853
STAT uptime 22191
STAT time 1370735255
STAT version 1.2.0
STAT pointer_size 64
STAT rusage_user 0.005999
STAT rusage_system 0.014997
STAT curr_items 0
STAT total_items 0
STAT bytes 0
STAT curr_connections 2
STAT total_connections 3
STAT connection_structures 3
STAT cmd_get 0
STAT cmd_set 0
STAT get_hits 0
STAT get_misses 0
STAT bytes_read 7
STAT bytes_written 0
STAT limit_maxbytes 67108864
发现了问题所在,cmd_get 为0 ,也就是 没有连上memcached,那么这个时间完全就在等待了,那么肯定会慢啊

如果正如我分析的,把网站关于memcached 的部分给注释了,不用,看访问结果,结果超快,不过1s就ok了。

再看strace 结果

strace  -i -p 24100 -c
Process 24100 attached - interrupt to quit
Process 24100 detached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
100.00    0.000033           1        25           sendfile
  0.00    0.000000           0        12           write
  0.00    0.000000           0        10           open
  0.00    0.000000           0        24           close
  0.00    0.000000           0        29         1 stat
  0.00    0.000000           0        10           fstat
  0.00    0.000000           0        14           ioctl
  0.00    0.000000           0         2           readv
  0.00    0.000000           0        14           writev
  0.00    0.000000           0         2           socket
  0.00    0.000000           0         2         2 connect
  0.00    0.000000           0        12           accept
  0.00    0.000000           0        40        14 recvfrom
  0.00    0.000000           0         2           shutdown
  0.00    0.000000           0         2           getsockname
  0.00    0.000000           0        20           setsockopt
  0.00    0.000000           0         2           getsockopt
  0.00    0.000000           0        55           epoll_wait
  0.00    0.000000           0        21           epoll_ctl
------ ----------- ----------- --------- --------- ----------------
100.00    0.000033                   298        17 total

正常的应该是100%时间用在森的sendfile 上面了。但为什么系统没有连接memcached ,原因不明。

posted @ 2013-06-09 08:01  过去的我  阅读(287)  评论(0编辑  收藏  举报