Chinaunix首页 | 论坛 | 博客
  • 博客访问: 657092
  • 博文数量: 220
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1961
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-04 21:54
文章分类

全部博文(220)

文章存档

2018年(1)

2015年(140)

2014年(79)

我的朋友

分类: 系统运维

2015-08-20 10:12:22

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

偶然看到CNXCT小组的文章:

  1. <?php  
  2. function make_seed() {  
  3.   list($usec,$sec)=explode(' ',microtime());  
  4.   return(float) $sec+((float)$usec*100000);  
  5. }  
  6.   
  7. $i=0;  
  8. $k=0;  
  9. while($i < 1000){  
  10.         $i++;  
  11.         mt_srand(make_seed());  
  12.         if($i%2 == 0)  
  13.                 $k += mt_rand();  
  14.         else  
  15.                 $k -= mt_rand();  
  16. }  
  17. echo $k;  
  18.   
  19. phpinfo();  
  20. ?>  



测试方法:


  1. 在同网段找一台服务器  
  2. 使用webbench来测试  
  3. ./webbench -c 500 -t 30 http://ip/cgi-bin/Liv.php  
  4.   
  5. cat nginx-access.log | grep -v 200 | grep WebBench | wc -l  
  6. 检查返回内容的稳定性  

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



Tcp socket的情况


  1. 异常返回:4  
  2. Speed=14502 pages/min, 11660916 bytes/sec.  
  3. Requests: 7251 susceed, 0 failed.  
  4. 异常返回:0  
  5. Speed=14480 pages/min, 11644002 bytes/sec.  
  6. Requests: 7240 susceed, 0 failed.  
  7. 异常返回:1 (http 499 客户端断开连接)  
  8. Speed=14542 pages/min, 11693312 bytes/sec.  
  9. Requests: 7271 susceed, 0 failed.  



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


  1. 异常返回:388  
  2. Speed=15194 pages/min, 11600151 bytes/sec.  
  3. Requests: 7596 susceed, 1 failed.  
  4. 异常返回:271  
  5. Speed=15020 pages/min, 11644336 bytes/sec.  
  6. Requests: 7510 susceed, 0 failed.  
  7. 异常返回:831  
  8. Speed=16110 pages/min, 11625129 bytes/sec.  
  9. Requests: 8054 susceed, 1 failed.  

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



  1. 异常返回:230  
  2. Speed=14972 pages/min, 11632380 bytes/sec.  
  3. Requests: 7459 susceed, 27 failed.  
  4. 异常返回:647  
  5. Speed=15804 pages/min, 11687138 bytes/sec.  
  6. Requests: 7898 susceed, 4 failed.   
  7. 异常返回:698  
  8. Speed=15944 pages/min, 11685551 bytes/sec.  
  9. Requests: 7972 susceed, 0 failed.  



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


  1. UnixSocket性能比TcpSocket最多高不超过10%  
  2. UnixSocket的异常率比TcpSocket至少高226倍  
  3. UnixSocket返回异常时,Http Code 502,php-fpm返回11: Resource temporarily unavailable,google后尝试修改backlog,但结果无明显变化  
  4.   
  5. 结论:在查明UnixSocket异常原因之前,建议依然使用TcpSocket(即默认的127.0.0.1:9000方式)  




附:

看到了这篇文章:

  1. echo 'net.core.somaxconn = 2048' >> /etc/sysctl.conf   
  2. sysctl -p  



修改 php-fpm.conf


  1. listen.backlog = 2048  


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


但……是……呢……

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


那么新的结论:


  1. Unix domain socket和Tcp socket,在性能上没有显著差距。  
  2. 当访问压力较小时,可以使用UnixSocket,因为不会占用额外的端口、且理论上效率较高。  
  3. 当高并发的时候,Tcp Socket能表现出更高的稳定性,且性能并不差于UnixSocket,缺点是会占用大量的临时端口,需要用内核参数优化。  

阅读(2152) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~