转--Server “**” has shut down the connection prematurely一例分析
近几天在性能测试过程中,发现loadrunner Controller经常报 Server “**” has shut down the connection prematurely 。概率很高,现象很奇怪。网上有很多说法,各有不同,但貌似都不正确,只能靠自己追踪。
根据经验仔细分析,发现可能跟下列因素有关:
(1)loadrunner客户端服务器网卡资源不足;
(2)tcp/ip或者http connection keepalive连接超时时间设置太长,造成无连接可用;
(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日志。都无济于事。
问题到底出在哪? 欲知后事如何,敬请关注该主题的下一篇blog。
上一篇Blog讲到,性能测试过程中发现server shut down现象,经过追踪,定位到是apache子进程狂吃内存。
根据经验,判断问题可能出在apche加载某个/某些模块上。于是,使用“拆分问题,隔离分析”的分析方法。先隔离出apache加载的所有模块。再采取注释、重启、验证的方式,逐步缩小隔离范围。最终定位出瓶颈点。
系apache在加载一个Taobao**_module时,每秒消耗4M内存,导致apache占用的物理内存不断增涨,当涨至操作系统能分配给apache的最大内存时,apache子进程死掉。在老的子进程死亡和新的子进程创建的时间间隔,有请求过来,系统自然没有响应,从loadrunner那端看,就是server shut down。
真相得以大明。接下来就是对这个模块进行优化了。
一个 1.84/千 ,背后竟然隐含如此巨大的性能问题。如果不深究,问题很快就被忽视了,系统上线之后,不被上帝眷顾的用户很有可能就打不开网页了。整个瓶颈查找的过程,我想可以让我们想到以下几点:
1. 性能测试工程师需要具备敏锐的观察力,再小的概率,只要出错,必定深究;
2. 性能测试工程师需要有清晰的思路,先查什么,后查什么,要设计得很明确;
3. 除了注重jboss和java程序,apache也应当重点关注,特别是出现error的时候;
4. “拆分问题,隔离分析”的方法确实很实用;
5. 尽信书不如无书,遇到具体问题要具体分析。
转--Server “**” has shut down the connection prematurely一例分析的更多相关文章
- Error -27791: Server xx has shut down the connection prematurely
最近在进行一次性能测试中遇到一个问题,并发较大的时候会出现LR出现Error -27791: Server xx has shut down the connection prematurely的ER ...
- Action.c(37):Error-27791:Server"192.168.2.111" has shut down the connection paematurely
1)测试的时候最好应用干净的测试环境,即:清楚一切可能干扰的对象:2)如果出了这种错误,要认真的去排查错误,不单单找找脚本,或者[b][url=http://www.ltesting.net/html ...
- Genymotion-Android模拟器提示"Unable to connect to the Genymotion server. Please check your Internet connection."解决方法
昨天刚装的Genymotion,昨晚还用得好好的. 今晚开机,重新打开Genymotion,却提示:"Unable to connect to the Genymotion server. ...
- AMQP server localhost:5672 closed the connection. Check login credentials: Socket closed
2016-04-13 09:23:38.755 18850 INFO oslo.messaging._drivers.impl_rabbit [req-fafc8542-9403-4b5a-89d2- ...
- SQL Server ->> DAC(Dedicated Administrator Connection)专用管理员连接
专用管理员连接是一种特殊的SQL Server服务器诊断性质的连接,用于在正常或者说标准连接形式无法连接SQL Server服务器的情况下连接到服务器进行服务器性能或者错误诊断.DAC同样支持安全加密 ...
- Lost connection to MySQL server during query ([Errno 104] Connection reset by peer)
Can't connect to MySQL server Lost connection to MySQL server during query · Issue #269 · PyMySQL/Py ...
- MySQL server has gone away && Lost connection to MySQL server during query
问题一.MySQL server has gone away ##### peewee from peewee import * from peewee import __exception_wrap ...
- SQL Server索引进阶第十一篇:索引碎片分析与解决
相关有关索引碎片的问题,大家应该是听过不少,也许也很多的朋友已经做了与之相关的工作.那我们今天就来看看这个问题. 为了更好的说明这个问题,我们首先来普及一些背景知识. 知识普及 我们都知道,数据库中的 ...
- sql server 性能调优之 CPU消耗最大资源分析1 (自sqlserver服务启动以后)
一. 概述 上次在介绍性能调优中讲到了I/O的开销查看及维护,这次介绍CPU的开销及维护, 在调优方面是可以从多个维度去发现问题如I/O,CPU, 内存,锁等,不管从哪个维度去解决,都能达到调优的效 ...
随机推荐
- 阿里云 mysql 无缘无故挂掉
近期在登录自己博客时,老是报数据库连接失败,然后重启服务器就好了.但是,重启服务器很耗时间,不方便,不能每次都重启吧于是远程连接服务器看了一下原来是数据库服务挂掉了启动时还报错于是查看了下错误日志 2 ...
- 20160504-hibernate入门
关系型数据库与面向对象 模型不匹配(阻抗不匹配) Java面向对象语言,对象模型,其主要概念有:继承.关联.多态等:数据库是关系模型,其主要概念有:表.主键.外键等. 解决办法: 1使用JDBC手工转 ...
- Android 使用BaseAdapter 插入不同类型数据
在使用过程有时要在listview中插入不同类型的数据,比如说position=0的位置插入,广告,其它列表显示数据的情况. 一定要重写两种方法 @Override public int getIte ...
- C# 编写短信发送Window服务
我们做项目过程中,一般都会有发送短信的需求.最常见的就是户注册或者登录时发送短信验证码.不同类型的短信发送,我们都可以放到到一张短信表中,然后通过一个定时的作业去执行短信发送.而定时作业的执行,我们就 ...
- 将多维数组转换为支持curl提交的一维数组格式
/** * @desc 多维数组转化为支持curl提交数组 * @author lytian 2013-06-29 */ public function toPost(array $params = ...
- JAVA中REPLACE和REPLACEALL的区别(转)
replace和replaceAll是JAVA中常用的替换字符的方法,它们的区别是: 1)replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(Char ...
- ios7之后 根据UILabel的文字计算frame的方法
ios7 新出来的根据label的文字和字体大小来确定label的宽高. 官方的方法是: - (CGRect)boundingRectWithSize:(CGSize)size options:(NS ...
- transform3D实现翻页效果
---恢复内容开始--- 闲篇 最近升级了下百度音乐,唯一的感觉就是动画效果很炫丽.我不是个对产品很敏感的人,但是这段时间观察一些大厂的产品发现现在的APP越来越重视动画效果了.大家可能没有注意过,连 ...
- [转]JavaScript去重的6种方法
Array.prototype.unique1 = function() { var n = []; for(var i = 0; i < this.length; i++) { if (n.i ...
- Poj 2159 / OpenJudge 2159 Ancient Cipher
1.链接地址: http://poj.org/problem?id=2159 http://bailian.openjudge.cn/practice/2159 2.题目: Ancient Ciphe ...