关于并发性能问题,迫切

时间:2022-10-17 22:04:12
背景:
采用APACHE + PHP + ACE 构建了一个服务器。
ACE采用的是TP_Reactor框架。
PHP和ACE之间采用SOCKET进行通信,PHP建立不了长连接,每次请求连接,处理完毕断开。
APACHE+PHP部署在一台服务器,ACE部署在另一台服务器。

问题:
采用loadrunner进行性能测试时,发现并发上不去,以为是资源不够,查看服务器后,发现各服务器的CPU和内存资源都有空余,特别是ACE的那台服务器,CPU基本在10%左右。
采用的是20用户,开始测试时,并发数持续上升,ACE端刷屏正常。
当并发数达到400+时,出现connect fail,奇怪的就是ACE端的程序基本没刷屏,也就是连接根本没有过来,怀疑是APACHE堵死了,调整各种参数(很多不太明白),然后稍微好点,但时间一长,10小时多,则ACE服务器完全连接不上,查看端口,发现端口的状态都是ESTABLISH,都没有结束?

说明一下,为了找问题,现在的ACE服务器基本什么都不处理,直接返回一个字符串,也就是说,它的处理时间消耗基本可以忽略。

没有找到性能瓶颈,则不知道该从何处优化,做过类似系统的人,能否指点一二,非常感谢!

10 个解决方案

#1


没有人碰到过类似的问题吗?

#2


如果确信软件没有问题的话,换张网卡,和重装下系统看

#3


不知道服务器,不过去年网络经常断流,期间研究过一些网络连接问题
如果出现大量ESTABLISH或fin wait,可能是网络的一个中间部件不能快速结束连接导致阻塞

#4


10小时多,则ACE服务器完全连接不上,查看端口,发现端口的状态都是ESTABLISH。

这是个问题,参考:
http://os.chinaunix.net/a2005/0629/954/000000954751.shtml。

除了这个问题以外,并发数的提升还会有其它的问题的,个人觉得,php和apache部署在同一台机器上,是否有其它形式的IO处理?

#5


感觉还是ACE的设置有问题

#6


有没有数据库交互?

#7


分析分两步:
1、你先测试apache不连接ace的并发情况。保证在400或者800以上apache没有问题。
2、再测试ace的并发情况。代码微调一下,最好增加心跳功能,简单说就是每次连接ace时候判断是否可以连接上,并且最好弄个计数器主要看连接数等信息,如果不可以连接然后就不在发送请求。
3、我怀疑是ace的连接已经死了,但是有没有关闭,所以会引起连接占用,所以apache连不上的问题!

#8


顶一下那份......

#9


我觉得  几百的
引用
并发
 首先 apache肯定没问题 所以肯定不是apache服务器的压力 或者 也不是apache占用过多的资源  因为一个连接占用的内存和CPU占用撑死也就几百KB   1G存内的服务器也能撑起1000的并发  你的请求可能 调用socket跟ACE进行通信  这个请求的时间过长  而 apache 是有最大并发连接的限制的  你试着去优化这个  导致不能再次分配子进程处理你额外的请求  导致大部分连接请求处于等待  而照你的描述可能 ACE那边占用的资源很大  导致资源衰竭 不能理解的是你说你的ACE服务器只返回字符串 没有额外处理  所以我这块不懂   还请楼主找到问题告诉我你ACE服务器的问题出在哪里

#10


该回复于2013-05-13 11:40:22被管理员删除

#1


没有人碰到过类似的问题吗?

#2


如果确信软件没有问题的话,换张网卡,和重装下系统看

#3


不知道服务器,不过去年网络经常断流,期间研究过一些网络连接问题
如果出现大量ESTABLISH或fin wait,可能是网络的一个中间部件不能快速结束连接导致阻塞

#4


10小时多,则ACE服务器完全连接不上,查看端口,发现端口的状态都是ESTABLISH。

这是个问题,参考:
http://os.chinaunix.net/a2005/0629/954/000000954751.shtml。

除了这个问题以外,并发数的提升还会有其它的问题的,个人觉得,php和apache部署在同一台机器上,是否有其它形式的IO处理?

#5


感觉还是ACE的设置有问题

#6


有没有数据库交互?

#7


分析分两步:
1、你先测试apache不连接ace的并发情况。保证在400或者800以上apache没有问题。
2、再测试ace的并发情况。代码微调一下,最好增加心跳功能,简单说就是每次连接ace时候判断是否可以连接上,并且最好弄个计数器主要看连接数等信息,如果不可以连接然后就不在发送请求。
3、我怀疑是ace的连接已经死了,但是有没有关闭,所以会引起连接占用,所以apache连不上的问题!

#8


顶一下那份......

#9


我觉得  几百的
引用
并发
 首先 apache肯定没问题 所以肯定不是apache服务器的压力 或者 也不是apache占用过多的资源  因为一个连接占用的内存和CPU占用撑死也就几百KB   1G存内的服务器也能撑起1000的并发  你的请求可能 调用socket跟ACE进行通信  这个请求的时间过长  而 apache 是有最大并发连接的限制的  你试着去优化这个  导致不能再次分配子进程处理你额外的请求  导致大部分连接请求处于等待  而照你的描述可能 ACE那边占用的资源很大  导致资源衰竭 不能理解的是你说你的ACE服务器只返回字符串 没有额外处理  所以我这块不懂   还请楼主找到问题告诉我你ACE服务器的问题出在哪里

#10


该回复于2013-05-13 11:40:22被管理员删除