mysql socket php fpm_通过socket连接nginx 优化php-fpm 性能 Php-fpm TcpSocket vs UnixSocket

http://blog.csdn.net/liv2005/article/details/7741732

受到一些启发,遂google了一下,的确有很多人推荐使用php-fpm的UnixSocket的方式,尝试测试之

简单准备了一个测试页面,包含一些循环、判断、加减、以及常用的phpinfo

function make_seed() {

list($usec,$sec)=explode(' ',microtime());

return(float) $sec+((float)$usec*100000);

}

$i=0;

$k=0;

while($i 

$i++;

mt_srand(make_seed());

if($i%2 == 0)

$k += mt_rand();

else

$k -= mt_rand();

}

echo $k;

phpinfo();

?>

function make_seed() {

list($usec,$sec)=explode(' ',microtime());

return(float) $sec+((float)$usec*100000);

}

$i=0;

$k=0;

while($i < 1000){

$i++;

mt_srand(make_seed());

if($i%2 == 0)

$k += mt_rand();

else

$k -= mt_rand();

}

echo $k;

phpinfo();

?>

测试方法:

在同网段找一台服务器

使用webbench来测试

./webbench -c 500 -t 30 http://ip/cgi-bin/Liv.php

cat nginx-access.log | grep -v 200 | grep WebBench | wc -l

检查返回内容的稳定性

在同网段找一台服务器

使用webbench来测试

./webbench -c 500 -t 30 http://ip/cgi-bin/Liv.php

cat nginx-access.log | grep -v 200 | grep WebBench | wc -l

检查返回内容的稳定性

测试结果(每种测试3次,每次都重启nginx和php-fpm):

Tcp socket的情况

异常返回:4

Speed=14502 pages/min, 11660916 bytes/sec.

Requests: 7251 susceed, 0 failed.

异常返回:0

Speed=14480 pages/min, 11644002 bytes/sec.

Requests: 7240 susceed, 0 failed.

异常返回:1 (http 499 客户端断开连接)

Speed=14542 pages/min, 11693312 bytes/sec.

Requests: 7271 susceed, 0 failed.

异常返回:4

Speed=14502 pages/min, 11660916 bytes/sec.

Requests: 7251 susceed, 0 failed.

异常返回:0

Speed=14480 pages/min, 11644002 bytes/sec.

Requests: 7240 susceed, 0 failed.

异常返回:1 (http 499 客户端断开连接)

Speed=14542 pages/min, 11693312 bytes/sec.

Requests: 7271 susceed, 0 failed.

Unix socket的情况(放在/dev/shm中)

异常返回:388

Speed=15194 pages/min, 11600151 bytes/sec.

Requests: 7596 susceed, 1 failed.

异常返回:271

Speed=15020 pages/min, 11644336 bytes/sec.

Requests: 7510 susceed, 0 failed.

异常返回:831

Speed=16110 pages/min, 11625129 bytes/sec.

Requests: 8054 susceed, 1 failed.

异常返回:388

Speed=15194 pages/min, 11600151 bytes/sec.

Requests: 7596 susceed, 1 failed.

异常返回:271

Speed=15020 pages/min, 11644336 bytes/sec.

Requests: 7510 susceed, 0 failed.

异常返回:831

Speed=16110 pages/min, 11625129 bytes/sec.

Requests: 8054 susceed, 1 failed.

Unix socket的情况(放在/tmp中)

异常返回:230

Speed=14972 pages/min, 11632380 bytes/sec.

Requests: 7459 susceed, 27 failed.

异常返回:647

Speed=15804 pages/min, 11687138 bytes/sec.

Requests: 7898 susceed, 4 failed.

异常返回:698

Speed=15944 pages/min, 11685551 bytes/sec.

Requests: 7972 susceed, 0 failed.

异常返回:230

Speed=14972 pages/min, 11632380 bytes/sec.

Requests: 7459 susceed, 27 failed.

异常返回:647

Speed=15804 pages/min, 11687138 bytes/sec.

Requests: 7898 susceed, 4 failed.

异常返回:698

Speed=15944 pages/min, 11685551 bytes/sec.

Requests: 7972 susceed, 0 failed.

针对上面的测试结果,简单总结一下,未必客观,仅供参考:

UnixSocket性能比TcpSocket最多高不超过10%

UnixSocket的异常率比TcpSocket至少高226倍

UnixSocket返回异常时,Http Code 502,php-fpm返回11: Resource temporarily unavailable,google后尝试修改backlog,但结果无明显变化

结论:在查明UnixSocket异常原因之前,建议依然使用TcpSocket(即默认的127.0.0.1:9000方式)

UnixSocket性能比TcpSocket最多高不超过10%

UnixSocket的异常率比TcpSocket至少高226倍

UnixSocket返回异常时,Http Code 502,php-fpm返回11: Resource temporarily unavailable,google后尝试修改backlog,但结果无明显变化

结论:在查明UnixSocket异常原因之前,建议依然使用TcpSocket(即默认的127.0.0.1:9000方式)

附:

解决了UnixSocket时,大量http code 502,11: Resource temporarily unavailable的问题,操作如下

echo 'net.core.somaxconn = 2048' >> /etc/sysctl.conf

sysctl -p

echo 'net.core.somaxconn = 2048' >> /etc/sysctl.conf

sysctl -p

修改 php-fpm.conf

listen.backlog = 2048

listen.backlog = 2048

然后重启nginx和php-fpm,就很少会有502的情况了

但……是……呢……

性能依旧没有明显变化……还有待于继续学习……

那么新的结论:

Unix domain socket和Tcp socket,在性能上没有显著差距。

当访问压力较小时,可以使用UnixSocket,因为不会占用额外的端口、且理论上效率较高。

当高并发的时候,Tcp Socket能表现出更高的稳定性,且性能并不差于UnixSocket,缺点是会占用大量的临时端口,需要用内核参数优化。

Unix domain socket和Tcp socket,在性能上没有显著差距。

当访问压力较小时,可以使用UnixSocket,因为不会占用额外的端口、且理论上效率较高。

当高并发的时候,Tcp Socket能表现出更高的稳定性,且性能并不差于UnixSocket,缺点是会占用大量的临时端口,需要用内核参数优化。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值