看TomProbe如何知道网站是否要宕

 

一、最重要的线:总内存

 

网站自启动后,如果总内存线一直在台阶式地爬升(如下图所示),那么网站迟早要宕(有内存泄漏,迟早要用光内存而宕掉)。这是网站宕掉的最常见的情形。

  

 

网站自启动后,经过若干天(一般不超过2个星期)运行,全部初始化完毕,总内存线不再台阶式爬升,而后一直保存水平线(如下图所示),那么网站大体上是稳定的,但是是否很稳定,还要看外来线程和“count in limitLatch”的情况。

  

 

更多详情可阅读这篇文章:

《TomProbe的内存监测与牛顿的苹果落地》

 

二、外来线程数

 

如果外来线程数有毛刺现象(如下图所示),说明您的网站会因为浏览器用户访问而动态启动线程,这种线程的个数是Tomcat无法控制的,它们的数量会随着浏览器用户数猛增而有可能瞬间达到很大而使网站宕掉(但这时总内存线还来不及显示台阶式爬升)。

  

 

所以,当您看到外来线程数有毛刺现象时,您可以认为网站是不稳定的。但是如果外来线程数一直是水平线,则是没问题的(即使是非0,也是没问题的,它们可能是您的servlet或jsp里启动的static线程,不会因为浏览器用户增加而增加)。

 

与此相关的,还有死锁线程。如果死锁线程数非零(如下图所示),那么扯淡了,死锁线程可能不是引起网站宕掉,而是消耗大量CPU而使网站响应迟钝、负载能力大大下降。立即改正!程序错误太低级了。

  

 

 

三、count in limitLatch

 

Tomcat在连接数到达规定的最大值时,停止接受浏览器连接(这时Tomcat假死了)。这个连接数本应该是现存连接数(即实际连接数),但不知为何,Tomcat另外采用了一个limitLatch的对象型变量(里面封装了count的int变量)作为判断标准。当Tomcat接受到一个浏览器连接时,就把limitLatch里的count加1;当Tomcat释放一个连接时,就把limitLatch里的count减1。

 

那么问题来了:Tomcat对例外的捕捉正确吗?是否会连接释放了而limitLatch里count没减1。如果是这样,网站迟早也会出现假死,而这时总内存并不出现台阶式爬升。

 

“count in limitLacth”与现存连接数初始值应该是相等的(但它们相差1,这可能是Tomcat的错误)。 

 

如果“count in limitLacth”与现存连接数的差不能保持恒定(如下图所示),网站也将宕掉(假死),当然这是Tomcat本身的问题。