一个Aache服务崩溃测试复现的案例分享

上一篇 / 下一篇  2012-01-17 19:02:39 / 个人分类:相关技术

路径:

1、给一个岗位分配较大的权限(目的是为了登录时慢些,使之报登录超时或通信异常,比如给岗位设置上百个岗位隶属关系),然后登录

2、当报登录超时后,再继续登录一次

问题表现:

如果apache服务端是双核,

1凡是一个账号出现登录超时的情况,Httpd进程所占CPU就会50%,再登录一次,会再上升50%,即使退出所有客户端,CPU也不会释放(除非重启服务),因此现场服务即使是多核,如果出现超时的账号稍微多一点,就会导致Apache服务CPU被耗光

2登录时并没有达到我们所设置的超时时间(5min or 6min)系统就会报:超时或通信异常1-2min左右)

3、使用apache自带的server-status分析线程占用情况,如果有客户端出现非法退出的情况,线程并不是  立马释放,而是过几秒释放,所以如果现场出现此问题情况较多时,即使是500个线程(40个账号),也是可能out of threads

参考:经过测试,一个账号登录时,会同时占用2-4个线程不等,其余的操作大部分占1-2个线程

日志elf文件:与现场吻合

1Appserverelf(经过测试,凡是出现超时,appserverelf文件就会报下面这个,分析现场elf文件,apache出问题前,出现了大量的这类错误,且apache  access log中有大量用户登录):

[{FEE617CC-1FDD-4BDD-AC0C-5325F7D46AA7}]对应的用户不存在

2Apache error log(一旦出现超时,线程不被及时释放,导致out of threads:

[Tue Nov 29 15:45:38 2011] [warn] Server ran out of threads to serve requests. Consider raising the ThreadsPerChild setting

[Tue Nov 29 15:46:53 2011] [warn] (OS 64)指定的网络名不再可用。  : winnt_accept: Asynchronous AcceptEx failed.

[Tue Nov 29 15:46:53 2011] [warn] (OS 64)指定的网络名不再可用。  : winnt_accept: Asynchronous AcceptEx failed.

[Tue Nov 29 15:46:53 2011] [warn] (OS 64)指定的网络名不再可用。  : winnt_accept: Asynchronous AcceptEx failed.

[Tue Nov 29 15:46:53 2011] [warn] (OS 64)指定的网络名不再可用。  : winnt_accept: Asynchronous AcceptEx failed.

后记:

各平台版本需要解决如下问题:

1、登录超时后apache CPU资源不释放问题

2、未达到超时时间就报超时的问题

修改后,测试再进行一次验证

 

也可能超时只是复现此问题的方法之一,

6集中并发登录测试时没有出现此问题的原因很明显,就是权限小登录快不会大量用户报超时(6的表现是通信异常,不报超时)

 

截止现在,apache出现问题时的错误表现一共有:

1ran out of threads、指定网络名不再可用、测试服务失败(已复现,避免ran out of threads可以通过设置apachethreadsperchild选项)

2、内存吃光:apache error.log中有大量的Not enough space: mpm_get_completion_context: Failed to create the transaction pool(未复现)

 

问题2内存吃光的原因初步诊断为存在内存泄露,或长时间大量应用导致

MaxRequestperchild我们的系统未设置,默认是0,表明资源会一直不释放,直到服务重起,目前因还没有一个合理的测试值,设大了吃内存,设小了影响效率,后续我们再安排测试

TAG:

 

评分:0

我来说两句

Open Toolbar