php高并发接口性能急剧下降,关于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

[转]你如何面对—LNMP高并发时502

From : http://www.topthink.com/topic/5683.html 之前php-fpm配置: 单个php-fpm实例,使用socket方式,内存8G 静态方式,启动php-f ...

爬虫爬数据时,post数据乱码解决办法

最近在写一个爬虫,目标网站是:http://zx.bjmemc.com.cn/,可能是为了防止被爬取数据,它给自身数据加了密.用谷歌自带的抓包工具也不能捕获到数据.于是下了Fiddler.     F ...

Bootstrap中关闭第二个模态框时出现的问题和解决办法

Bootstrap中关闭第二个模态框时出现的问题和解决办法 1.关闭第二个模态框时,第一个模态框跟着消失. 解决办法: 第二个模态框的代码不要写在第一个模态框里面,确保两个模态框相对独立; 2.关闭第 ...

oracle执行update语句时卡住问题分析及解决办法

转载:http://www.jb51.net/article/125754.htm 这篇文章主要介绍了oracle执行update语句时卡住问题分析及解决办法,涉及记录锁等相关知识,具有一定参考价值, ...

返回xml过长时被nginx截断的解决办法

返回xml过长时被nginx截断的解决办法 问题描述:通过网页获取数据,数据格式为xml.当xml比较短时,可以正常获取数据.但是xml长度过长时不能正常获取数据,通过观察返回数据的源代码,发现xml ...

IDEA使用maven构建时控制台中文乱码的解决办法

使用maven clean install 项目时控制台中文乱码,解决办法如下: Setting->maven->runner VMoptions: -Dfile.encoding=UTF ...

mongodb 更新数据时int32变为double的解决办法 & 教程

https://www.runoob.com/mongodb/mongodb-mongodump-mongorestore.html mongodb 更新数据时int32变为double的解决办法   ...

java下载文件时文件名出现乱码的解决办法

转: java下载文件时文件名出现乱码的解决办法 2018年01月12日 15:43:32 橙子橙 阅读数:6249   java下载文件时文件名出现乱码的解决办法: String userAgent ...

随机推荐

安装mongodb后服务启动不了的问题

安装mongodb后,在命令行进入mongoDB安装目录执行如下: mongod --dbpath [数据存放的本地路径] 提示如下错误: ERROR: dbpath (数据存放的本地路径) does ...

windows10版本1709 在桌面和文件中点击右键,会引起卡顿

windows自动升级到1709版本后出现的问题,而之前是没有这种问题的. 最终解决办法:(需要设置注册表) 运行:快捷键Win+R regedit 路径:可直接复制后粘贴+回车 HKEY_CLASS ...

[转] 使用gc && objgraph 优化python内存

转自https://www.cnblogs.com/xybaby/p/7491656.html 使用gc.objgraph干掉python内存泄露与循环引用!   目录 一分钟版本 python内存管 ...

React的Element的创建和render

React的Element是React应用程序的最小构建块,它是用来描述我们在屏幕上看到的浏览器页面上的内容. 在React中构建 Element 有两种方式: 1.JSX的方式,JSX不是React ...

剑指offer(9)变态跳台阶

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 题目分析 根据上一个题目可以知道,青蛙只跳1或2可以得出是一个斐波那契问题,即 ...

Eclipse Android 模拟器启动过慢

打开AVD Manager窗口,在模拟器配置页面,选择Intel Atom (x86)选项.笔记本的CPU处理器是Intel 酷睿. 可以发现模拟器的启动速度明显变快.

Bash 和 Zsh 开启 vi-mode

Bash 和 Zsh 开启 vi-mode bash 有两种操作模式,分别是 emacs 和 vi . 在 bash 中 set -o vi # 临时开启 vi 模式 vi ~/.bashrc # 在 ...

UVM phase的用法研究【zz】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值