OSC故障分析:频繁的重启 Tomcat 会导致系统的性能下降吗?

红薯 发布于 2015/10/16 23:24
阅读 2K+
收藏 11

今天下午 OSChina 挂了挺长时间,主要的现象是应用服务器 CPU 非常繁忙,连接池爆满,Tomcat 对请求的处理非常缓慢,报大量的 work queue full 的错误。但是前端 Nginx 的日志里看不到明显的攻击行为。

处理过程:

不断的尝试在应用服务器1上停掉 Tomcat 进行重启,折腾了近半个小时毫无效果(系统慢,各种操作也跟着慢),体现在 Tomcat 处理请求很慢,CPU 很快又上升到 100%,感觉整个系统都比较缓慢。这期间甚至包括停掉前端的 Nginx 来确保 Tomcat 在启动期间不会接收大量的请求。

后来放弃,启用另外一台应用服务器2,将请求转向新的应用服务器2上的 Tomcat,系统很快就恢复了正常。

由此感觉是应用服务器1的系统遭受什么问题导致性能低下。而应用服务器2因为一直闲置,所以跑 Tomcat 服务速度很快能应付涌进来的大量请求。

因此我的猜测是应用服务器1的系统性能低导致的挂机。如果猜测是正确的话,那么是什么引起系统性能低下呢?

从 OSChina 的过去一两年的运行状况来看,这种情况差不多隔2-3个月会有那么一次,只是看恢复的快慢而已,最近这一次因为最近上的新服务器配置比较高,因此间隔时间比较长。而 OSChina 的应用服务器一般我们对应用更新非常频繁,基本上工作日每天早上都要进行更新。更新的时候会通过 Tomcat 的 shutdown.sh 来停止服务,但因为业务中会有很多线程,会导致 shutdown.sh 无法正常停止 Tomcat,而基本上都需要使用 kill 命令来杀掉 Tomcat 的集成。那么在这个 kill 的过程中,会不会导致某些系统资源没有被释放,积累到一定程度就会导致下午的这种情况出现呢?就好像应用服务器1现在是无法执行df操作的,因为有个 NFS 的安装点不知道为何卡住了。要解决这个问题估计只能重启机器。

目前也只是猜测,因为生产环境没办法暂时通过工具来进行检测。

继续观察中。。。

2015-10-18:

目前所有请求都已经转到其他服务器上,这台机器的 Tomcat 不再接收任何请求。今天早上依然无法通过 shutdown.sh 停止 tomcat,使用 lsof 查看该进程发现其打开的 lucene 索引库始终没有关闭。而这个索引库是通过 NFS 的方式访问其他主机上的文件。

目前这台机器是无法通过 df 命令查磁盘空间占用情况的,直接在 nfs 安装的目录执行 ls 命令也会卡住。或许频繁的重启直接导致 NFS 的客户端挂掉,但是对 NFS 文件夹的读写是正常的。

于是我尝试重启该服务器,发现无法正常的通过命令进行重启,目前正在求助于机房按电源开关进行重启。

服务器重启后,mount 三个 NFS 目录,执行操作都正常,文件夹也 mount 成功,但是通过 df 命令只能看到其中一个。而其他服务器执行同样的操作则没有该问题

加载中
0
滔哥
滔哥
把shutdown.sh改智能点。如果K的过程,或者没K干净,或者多个来K它,都只执行一次!!!会不会好一点。 这样就不会出现多个线程请求它,都是玩它的痛苦。
Feng_Yu
Feng_Yu
不用这么改,shutdown.sh本身就有个-force参数,shutdown.sh -force就会在5秒钟如果java进程还活着,就kill掉。 需要提前在$CATALINA_HOME/bin/setenv.sh中定义CATALINA_PID变量,用于在这个变量指定的文本中存放pid
0
红薯
红薯
接下来准备限制下每周应用更新的频次,每周最多更新2次!
路过蜻蜓osc
路过蜻蜓osc
我以前重启tomcat时,先把网站的入口关掉禁止访问,如果session设置的是30分钟,就等过30分钟,然后再看监控上的在线人数,理论上是没有了,但是有时还会显示有几个,这时候再去重启tomcat
0
yak
yak
php是最好的语言
eechen
eechen
运维力挺PHP完爆Java http://my.oschina.net/neochen/blog/516003
0
如比如比
如比如比
每天都重启一次虚拟机
0
地鼠特工队
地鼠特工队
为何不使用docker
哈库纳
哈库纳
有毛线关系啊?
0
蔡蜘蛛侠
蔡蜘蛛侠
@红薯 我们运维的时候也遇到相同问题,我们的中间件是glassfish。我们也是经常使用kill进程,当时重启中间件后不到5分钟就挂了,我们曾经试过从负载均衡中把全部实例都卸下拉尝试重启几次问题依然出现,日志报数据库连接池满了,无法取到连接。经检查数据库发现当时连接并不高,IO,CPU,网络也没用问题,后来不知道为什么就好了。
0
哈库纳
哈库纳

有 jvm dump 数据吗? 

0
Li_Peng
Li_Peng
请问 @红薯 ,Tomcat中的线程是否都设置为Daemon thread?kill进程的时候,用的是kill命令还是killall命令?
红薯
红薯
一台机器多个 tomcat,所以肯定是 kill
0
多多de棉花糖
多多de棉花糖
还没遇到这个问题,红薯抓紧分析[13]
0
ericsoul
ericsoul
nfs容易挂死,导致无法df和一些文件系统的问题。只能重启机器。不重启继续使用这台主机,依然还是会有io性能问题。所以除非从操作系统层面,从内核层定位到问题解决掉,否则 只能重启 主机了。
返回顶部
顶部