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


    经过多次压力测试,发现sphinx在高并发时出现负载突然提升,并且响应速度明显下降。经过多方面的排查,发现是由于PHP与sphinx自带的 searchd进行socket的连接之后,系统内存有大量的Time_Wait连接,所以我们猜测为searchd的socket连接未及时关闭,造成 大量请求堆积,使得PHP客户端与sphinx的请求效率低下。由于searchd是编译好的,无法进行OPT设置,故我做了内核调整,来优化 socket连接释放时间,具体参数如下

    vi /etc/sysctl.conf

    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连接,但性能已经比之前的提升很多。
    以下为修改之前的请求:

    #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=66986 pages/min, 290593 bytes/sec.
    Requests: 33493 susceed, 0 failed.
    以下为修改之后的测试结果:

    #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

  • 相关阅读:
    Redis 的基本操作、Key的操作及命名规范
    python离线安装外部库(第三方库)
    STL之deque
    STL之list
    STL学习之vector
    STL三种标准容器
    Lua系统库
    Lua输入输出库
    Lua字符串库
    Lua面向对象
  • 原文地址:https://www.cnblogs.com/gpfeisoft/p/5010895.html
Copyright © 2020-2023  润新知