近几天在性能测试过程中,发现loadrunner Controller经常报 Server “**” has shut down the connection prematurely 。概率很高,现象很奇怪。网上有很多说法,各有不同,但貌似都不正确,只能靠自己追踪。
根据经验仔细分析,发现可能跟下列因素有关:
(1)loadrunner客户端服务器网卡资源不足;
(2)tcp/ip连接超时时间设置太长,造成无连接可用;
(3)应用服务端有问题。
一、用事实做详细的对比:
分析:从对比结果来看,shut down的比例跟loadrunner客户端确实有关系,但无论客户端怎样改变,还是该现象出现,而且比例始终超过万分之1。
LoadRunner服务器数量 | TcpTimedWaitDelay键值 | 并发用户数 | 平均TPS | shut down比例 |
1台 | 30s | 13 | 76.195 | 万分之18.4 |
1台 | 10s | 7 | 66.49 | 万分之10.8 |
2台 | 10s | 7 | 85.994 | 万分之1.39 |
2台 | 10s | 2 | 33.544 | 万分之1.23 |
至此,可以排除loadrunner客户端的原因。
二、转向服务端,在dpm服务器上,发现apache占用很大的资源,而且有报错:
(1)在压力情况下,apache(httpd进程)占用的物理内存,平均每秒增涨4M,非常恐怖;
(2)Apache日志中有三类报错信息:
a、 [Tue Jun 30 18:54:37 2009] [error] [client 192.168.**.**] unable to init Zlib: deflateInit2 returned -4: URL /distributor/product/my_product_list.htm
b、 [Tue Jun 30 18:54:38 2009] [notice] child pid 28699 exit signal Segmentation fault (11)
c、Memory allocation failed.
分析:经过观察,推论出httpd进程占用物理内存狂增,导致服务器没有剩余资源分配给它,造成memory allocation failed。
三、修改和屏蔽一些apache配置项,例如减少SendBufferSize所占空间、屏蔽CustomLog日志。都无济于事。
问题到底出在哪?