客户网站打开非常慢,请我去看一下。
首先慢是一个主观感受,到底多久算慢呢? 这里可以用浏览器开的开发工具来看加载时间,看了一下,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 ,原因不明。