码迷,mamicode.com
首页 > 其他好文 > 详细

记一次入门级别的并发试验过程(暂时放弃)

时间:2016-08-23 16:56:02      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:

环境:

a服务器使用curl_multi执行3000,4000,5000并发,访问b服务器一个静态html文件

 

问题:3000,4000并发基本稳定,5000并发时,有时候全部成功,有时候Recv failure: Connection reset by peer错误

 

需要解决:让5000并发成功率能够稳定

 

原因定位:出现改问题,是服务端发送了RST的tcp,其中win=0,客户端不再发包

 

两种猜测:1 tcp连接数上限被拒绝(然而并不是,这些tcp的三次握手都已经完成并且发送了http请求)  2内存不够处理请求,所以服务端发送了win=0的rst包(目前比较有这个可能)

 

最后:暂时放弃试验,性能优化这块,内容太多了,涉及网络(tcp),cpu,内存(tcp使用的内存,程序使用的内存,php-fpm内存等等),服务器的配置优化。。。。我晕了

 

 

学到:

  1 php-fpm不会释放内存(导致执行curl_multi的服务器内存飙高宕机,每次top查看剩余内存,不够就要重启php-fpm),而且貌似是轮询调用php-fpm

  2 可以使用curl_multi执行并发请求

  3 可以使用popen代替exec同时打开多个进程(相当于并发执行某些命令)

  4 windows使用wireshark抓包,linux使用tcpdump抓包,常用 tcpdump -i eht1 src host xxx or dst host xxx -w filename

  5 使用netstat查看网络连接,和tcp迁移状态 netstat -lan|grep xxx.

    状态主要有sync_send,ESTABLISHED,

    fin_wait1(主动发送fin的一方等待ack响应前进入状态),

    fin_wait2(主动发送fin的一方,接到ack响应后,等待对方的fin前的状态),

    time_wait(主动发送fin一方收到对方fin并发送了ack确认后要断开之前进入的状态)

  6 卧槽,,好像没了,搞了几天,难道就学会这些?反思反思。。

记一次入门级别的并发试验过程(暂时放弃)

标签:

原文地址:http://www.cnblogs.com/furoro/p/5799770.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!