apache部署集群jkstatus中busy数过高
?
2、查看对应Tomcat Manager Application中Server Status的信息
?
?
得到下述Server Status的信息:
在此处,可以看到是哪个IP提出了哪种Request请求导致Busy数过高。此图片只是用来举个例子,并不是实际中出现Busy过高时的图片。
?
3、在我们的数据库中用户登录记录表中,会有IP和用户账户的对应关系,就可以查出是具有哪种种权限的哪个用户在何时使用了这个应用。此应用即上述Request下对应的应用。
?
4、对Bug重现,进行分析。
?
最终,我们发现我们系统Busy数过高,并不是因为服务器性能不足造成的,而是以下两个代码问题造成的:
?
1、系统有两条复杂的SQL语句,查询结果可以达到上亿条,使得执行到此查询时,需要耗费30分钟左右的时间。
?
2、在action中未规范使用Spring事务处理语句。
?
此两个问题,导致oracle出现严重的锁等待现象,通常会出现数以千计的锁。解除oracle锁,可以查看我的《批量解决oracle锁等待的方法》一文。
?
出现问题1的原因是某些程序员在select中使用了过多无用的表,并将这些无用的表连接起来,导致拼凑出大量无用的查询数据。删除这些无用表即可。若不行,您可以考虑经此处的业务逻辑尽量简化一下。
?
action中未规范使用Spring事务处理语句,可参考我写的《Spring事务管理最容易犯的一种错误》。
?
?