关于sphinx+PHP在高并发时响应性能低下的解决办法

通过屡次压力测试,发现sphinx在高并发时出现负载忽然提高,而且响应速度明显降低。通过多方面的排查,发现是因为PHP与sphinx自带的 searchd进行socket的链接以后,系统内存有大量的Time_Wait链接,因此咱们猜想为searchd的socket链接未及时关闭,形成 大量请求堆积,使得PHP客户端与sphinx的请求效率低下。因为searchd是编译好的,没法进行OPT设置,故我作了内核调整,来优化 socket链接释放时间,具体参数以下php

vi /etc/sysctl.confweb

net.ipv4.tcp_timestamps=1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
说明:
net.ipv4.tcp_timestamps = 1 表示开启对于TCP时间戳的支持,若该项设置为0,则下面net.ipv4.tcp_tw_recycle的设置将不起做用;
net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少许SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。容许将TIME-WAIT sockets从新用于新的TCP链接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP链接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。服务器

再执行如下命令,让修改结果当即生效:
/sbin/sysctl -p
用如下语句看了一下服务器的TCP状态:
netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’
虽然这样修改以后仍是会有不少的TIME_WAIT链接,但性能已经比以前的提高不少。
如下为修改以前的请求:cookie

#webbench -c 300 -t 30 http://192.168.1.29/sphinx/sphinx_nocache.php
Webbench – Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.并发

Benchmarking: GET http://192.168.1.29/sphinx/sphinx_nocache.php
300 clients, running 30 sec.socket

Speed=66986 pages/min, 290593 bytes/sec.
Requests: 33493 susceed, 0 failed.
如下为修改以后的测试结果:tcp

#webbench -c 300 -t 30 http://192.168.1.29/sphinx/sphinx_nocache.php
Webbench – Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.高并发

Benchmarking: GET http://192.168.1.29/sphinx/sphinx_nocache.php
300 clients, running 30 sec.性能

Speed=91326 pages/min, 398190 bytes/sec.
Requests: 45663 susceed, 0 failed.
能够明显的看到效率的明显提高测试

来源:http://blog.itphp.org/archives/107

相关文章
相关标签/搜索