采用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,可能是网络的一个中间部件不能快速结束连接导致阻塞
如果出现大量ESTABLISH或fin wait,可能是网络的一个中间部件不能快速结束连接导致阻塞
#4
10小时多,则ACE服务器完全连接不上,查看端口,发现端口的状态都是ESTABLISH。
这是个问题,参考:
http://os.chinaunix.net/a2005/0629/954/000000954751.shtml。
除了这个问题以外,并发数的提升还会有其它的问题的,个人觉得,php和apache部署在同一台机器上,是否有其它形式的IO处理?
这是个问题,参考:
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连不上的问题!
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
#1
没有人碰到过类似的问题吗?
#2
如果确信软件没有问题的话,换张网卡,和重装下系统看
#3
不知道服务器,不过去年网络经常断流,期间研究过一些网络连接问题
如果出现大量ESTABLISH或fin wait,可能是网络的一个中间部件不能快速结束连接导致阻塞
如果出现大量ESTABLISH或fin wait,可能是网络的一个中间部件不能快速结束连接导致阻塞
#4
10小时多,则ACE服务器完全连接不上,查看端口,发现端口的状态都是ESTABLISH。
这是个问题,参考:
http://os.chinaunix.net/a2005/0629/954/000000954751.shtml。
除了这个问题以外,并发数的提升还会有其它的问题的,个人觉得,php和apache部署在同一台机器上,是否有其它形式的IO处理?
这是个问题,参考:
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连不上的问题!
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服务器的问题出在哪里