5分钟排错-拯救躺枪的tomcat

监控检测到基于tomcat应用的后台管理系统网页无法访问,发来了报警短信,故障问题出现,要做的第一件事情--重启应用。没错!不是排障,而是先重启应用,线上产品出现问题第一原则,不管什么问题要在第一时间尝试恢复,而重启应用往往是最有效的手段!

重启后,后台管理系统能正常使用,这下心就算放下了,一般这种情况都是可以恢复的小问题,如果重启不行呢?恢复不了呢,运维人员这才会紧急排错,如果尝试10分钟无从下手或者预测10分钟内无法解决,那么赶紧按照容灾手册进行紧急替换恢复吧,别告诉我没有快速容灾方案....

回到主题,在业务暂时恢复正常后,千万不要不管不顾了,一定要找出问题原因,不可能出现没有原因就导致业务罢工的,那只是你没找见而已。

分享下楼主的排障步骤,仅作参考:

1.   排除是否由代码引起的故障

检查tomcat的日志,发现了错误信息,但是与tomcat的socket错误有关,从这个报错信息基本上排除是开发的代码问题,其实有很多时候开发的代码会把tomcat跑死,什么内存溢出的都是小意思,做好内存GCC和heapdump就可以了。

ClientAbortException:  java.net.SocketTimeoutException
       atorg.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:369)
       atorg.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:368)
       atorg.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:392)
       atorg.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:381)
       atorg.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
       at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:83)
       atcom.qhfax.thrivefa.web.FileController.showImage(FileController.java:60)
       atcom.qhfax.thrivefa.common.BaseController.showImage(BaseController.java:54)
       at sun.reflect.GeneratedMethodAccessor40.invoke(UnknownSource)
       atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       atorg.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175)
       atorg.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
       at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
       atorg.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
       atorg.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
       at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
       atorg.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
       atjavax.servlet.http.HttpServlet.service(HttpServlet.java:617)
       at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
       atjavax.servlet.http.HttpServlet.service(HttpServlet.java:717)
       atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
       atorg.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
       atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
       atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
       atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
       at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
       atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
       atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
       atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
       atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
       atorg.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
       at org.apache.coyote.http11.Http11NioProcessor.process(Http11NioProcessor.java:889)
       atorg.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:744)
       atorg.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:2274)
       atjava.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
       atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
       at java.lang.Thread.run(Thread.java:662)
Caused by: java.net.SocketTimeoutException
       atorg.apache.tomcat.util.net.NioBlockingSelector.write(NioBlockingSelector.java:123)
       atorg.apache.tomcat.util.net.NioSelectorPool.write(NioSelectorPool.java:156)
       atorg.apache.coyote.http11.InternalNioOutputBuffer.writeToSocket(InternalNioOutputBuffer.java:460)
       atorg.apache.coyote.http11.InternalNioOutputBuffer.flushBuffer(InternalNioOutputBuffer.java:800)
       atorg.apache.coyote.http11.InternalNioOutputBuffer.addToBB(InternalNioOutputBuffer.java:644)
       at org.apache.coyote.http11.InternalNioOutputBuffer.access$000(InternalNioOutputBuffer.java:46)
       atorg.apache.coyote.http11.InternalNioOutputBuffer$SocketOutputBuffer.doWrite(InternalNioOutputBuffer.java:825)
       atorg.apache.coyote.http11.filters.IdentityOutputFilter.doWrite(IdentityOutputFilter.java:118)
       atorg.apache.coyote.http11.InternalNioOutputBuffer.doWrite(InternalNioOutputBuffer.java:610)
       at org.apache.coyote.Response.doWrite(Response.java:560)
       atorg.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:364)
       ... 38 more

2.   费尽心思搭监控的意义

同时赶紧检查各类报警短信和邮件,排除对网页监控的保健,还真有收获:

告警主机:**********

告警时间:********

告警等级:Warning

告警信息: Too many processes on ******

告警项目:proc.num[]

问题详情:Number of processes:106

当前状态:OK:106

事件ID:16294

那么赶紧看监控系统:

这下就抓住罪魁祸首的小尾巴了,初步找到导致业务趴下的疑犯了那么下面就要在控制台准确定位是那个捣乱的了。

3.   排障方法

找到是进程过多的原因导致的,那么解决办法就太简单了

pstree  找出哪个进程过高一看便知,额,原来是定时任务的坑...

pkill    批量结束定时任务的应用

4.   精确分析故障原因

报警看到的知识进程过多,这个和tomcat歇菜有什么关系,这就要看系统日志,这个时候日志集中管理和可视化的作用就体现出来了。

5.    知识点

Linux 内核有 个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防 止内存耗尽而内核会把该进程杀掉。典型的情况是:某天一台机器突然ssh远程登录不了,但能ping通,说明不是网络的故障,原因是sshd进程被 OOM killer杀掉了(多次遇到这样的假死状况)。重启机器后查看系统日志/var/log/messages会发现Out of Memory: Kill process 1865(sshd)类似的错误信息。

需要注意的是:

1.OOM不适合于解决内存泄漏(Memory leak)的问题。

2.有时free查看还有充足的内存,但还是会触发OOM,是因为该进程可能占用了特殊的内存地址空间。

所以别指望OOM能够预防内存溢出,还有free是发现不了OOM的问题,运维伙伴们,企业级监控和日志集中管理才是你们的眼睛!

时间: 2024-10-12 19:22:23

5分钟排错-拯救躺枪的tomcat的相关文章

从Facebook躺枪,看社交平台和媒体平台交集的禁区

近日,Facebook又"躺枪"了.德国司法部长赫科·玛斯表示,他认为Facebook应当被视为一家媒体公司,而非技术平台.但扎克伯格早在8月份虽然承认Facebook通过用户之间的关系向其提供新闻,并强调通过不同地方获取信息的优势,但他表示,"Facebook是一家科技公司,我们的任务是开发工具,而不是制作任何内容". 换句话说,扎克伯克不会让Facebook成为一家媒体公司,而是继续充当科技平台.与Facebook类似的是,微信这一社交平台也明确表示不会成为媒体

苹果、三星皆躺枪 央视为何曝光手机拍照不合格

苹果.三星又摊上大事了!甚至还顺带着,带跑偏了一众小伙伴.近日,国家照相机质量监督检验中心应浙江省消费者保护委会员要求对9个品牌的10款产品进行了测试.测试发现,10款手机中有8款曝光量准确度误差较大.这8款手机很"和谐"地出现4款国外品牌,4款国内品牌的情况.然而杀伤力却完全不同,苹果和三星是其中的绝对主角. 为何央视<每周质量报告>非得曝光手机拍照不合格的事情?这其中的门道太多,水太深我们无法揣测.不过可以预见的是,这样的事情既不是第一次发生,也不会是最后一次--手机市

央视报道云盘,腾讯为什么会躺枪?

8月10日,央视<焦点访谈>节目播出了以"清盘除垢净网络" 为主题的报道,报道称,"今年5月,北京市扫黄打非办和警方接到群众举报,称一些不法分子以微信等网络社交工具为平台,出售一些数字.字母组合而成的密码,这些密码实际是一个个的360云盘账号,里面存储着大量的淫秽***内容. 与此同时,江苏南通警方也根据腾讯公司的举报,查处了同类案件,被销售的360云盘账号中,同样也有涉及儿童的淫秽***内容." 双方对此事的回应 8月11日,以"腾讯举报36

LogSec日志大数据审计平台,企业信息安全管理人员不再“躺枪”

作为一名企业信息安全管理人员,你有没有被各种安全设备.服务器.网络设备的安全日志搞得焦头烂额?无论是要从各种日志中进行问题分析和定位,还是从日志中提取有用的信息,是不是都像大海捞针一样忙得筋疲力尽收获却总是寥寥? 而且,而且,你们单位里只有你一个安全管理员有木有? 单位这么多安全日志.设备日志,每天就好几万条怎么分析? 面对监管单位的安全检查,重点要求设备安全日志检查,怎么办? 那么在日常工作中,信息安全管理员究竟会面临哪些安全日志审计的问题呢? 日志分散在各地 随着信息化技术的逐渐深入,企业往

为什么室内设计师前期的薪资低?你躺枪了吗?

室内设计这一行业,虽然前景不错,但也成为了大家吐槽的职业之一.比如室内设计经常加班特别累,前期薪资低到丧心病狂,养活不了自己等等. 为什么室内设计师前期的薪资低?在回答这个问题之前,小编希望大家先问问自己,你在学校学到了什么?到什么时候会用到?现阶段最缺什么?那接下来就带着你们心中的答案,且听小编为你分析前期薪资低的原因吧. [性格测试]60秒测试下自己适不适合当一名室内设计师: http://www.tianhusj.com/list-93-1.html?wm=lt_lxx_snsj_ce (

比特币会输?不可能!莫名躺枪依然还是王者

币圈只有一个比特币,一个分叉闹剧居然夺走了BTC的算力,这结果娱乐性很强.BCH分叉的玩家就是玩家,算力争夺结束后,BTC在算力.价格上都会恢复.亏在BTC上的新韭菜,满血恢复的概率很高.稳定运行4个月的BTC,却因为BCH分叉出现了破位下跌,让新老韭菜心里一凉,短线亏的一塌糊涂.如果没有使用杠杠,2个交易日下跌11%的BTC,与股市下跌10%的区别并不大.实际上,BCH的算力增长上波动很大,人为因素调集算力到BCH分叉币上,算力分布还会恢复到分叉前状态.昨日BCH算力下跌了34%,仅有3.79

【Tomcat】一分钟教你eclipse如何配置tomcat(二)

对于初学者来说,在eclipse下如何配置tomcat,完全是一团雾水,不知怎么下手,在此,我们花费十分钟的时间,使用最简单的图文解说方式介绍一下,希望对大家有所帮助. 准备工具 windows操作系统 开发工具:eclipse(请自行官网下载解压版) 服务器:tomcat6.x或7.x(请自行官网下载解压版) 准备开发环境 安装jdk,你需要安装JDK1.6或者1.7都可以,本人使用的jdk1.8,最好你还是使用jdk1.7,其他都一样. 配置步骤 下载好tomcat之后,解压后即可使用,同样

快看看你躺枪了吗?最全搞笑中式英语大集合

[摘要]很多中国人在说英语时有时会不经意间说出一些“中式英语”,不仅老外听到会摸不清头脑,中国人看到了也常常忍俊不禁.做好准备,下面就为你盘点那些让人爆笑的中式英语,看的时候一定要坐稳喽! 1.we two who and who? 咱俩谁跟谁阿 2.how are you ? how old are you? 怎么是你,怎么老是你? 3.you don’t bird me,I don’t bird you 你不鸟我,我也不鸟你 4.you have seed ,I will give you

12306用户名密码泄露,这回貌似是躺枪

12306用户信息泄露,包含大量用户名.明文密码.验证邮箱等.乌云平台上看到的消息,详见http://www.wooyun.org/bugs/wooyun-2014-088532.目前根据厂商的回应,貌似是第三方抢票软件导致的. 从乌云上截了个图,大家看吧,快去改密码吧.