将Java进程转移到“解剖台”之前,法医都干了什么?
副标题[/!--empirenews.page--]
作为法医,不怕高度腐烂的尸体,也不怕错综复杂的案情。最怕的,是没留下任何东西。空无一物,任何高超的技术,丰富的经验,都无从下手。 生产环境错综复杂,几分钟前活蹦乱跳的进程,此刻就奄奄一息的躺在那里,苟延残喘。作为第一时间发现的目击者,一定要注意保存好现场。有时,最坏的情况就是引火上身,纠缠不清,这都是我们不愿看到的。 在进程的生命烟消云散之前,我们还有很多事要做。本篇文章,将介绍常用的保留线索方法。最后,将这个过程,使用Shell脚本自动化。 ![]() 系统环境,不说谎的案发现场 1、系统当前网络连接
本命令将系统的所有网络连接输出到ss.dump文件中。使用ss命令而不是netstat的原因,是因为netstat在网络连接非常多的情况下,执行非常缓慢。 后续的处理,通过查看各种网络连接状态的梳理,来排查TIME_WAIT或者CLOSE_WAIT,或者其他连接过高的问题,非常有用。 2、网络状态统计
将网络统计状态,输出到netstat-s.dump文件中。它能够按照各个协议进行统计输出,对把握当时整个网络状态,有非常大的作用。
上面这个命令,会使用sar输出当前的网络流量。在一些速度非常高的模块上,比如redis、kafka,就经常发生跑满网卡的情况。 3、进程资源
这是个非常强大的命令。可以查看进程打开了哪些文件,这是一个神器,可以以进程的维度查看整个资源的使用情况。这个命令在资源非常多的情况下,输出稍慢,耐心等待。 4、CPU资源
这几个命令,我们在 《Linux之《荒岛余生》(二)CPU篇》 这篇文章,已经有了比较详细的介绍。主要输出当前系统的CPU和负载,便于事后排查。 这几个命令的功能,有不少重合,使用者要注意甄别。 5、I/O资源
一般,以计算为主的服务节点,I/O资源会比较正常。但有时候也是会发生问题的,比如日志输出过多,或者磁盘问题等。此命令可以输出每块磁盘的基本性能信息,用来排查I/O问题。 6、内存问题
内存问题较为复杂,有兴趣可以看下xjjdog堆外内存排查小结这篇文章。一般发生的问题是JVM内存溢出,我们在进程小节说明。 free命令能够大体展现操作系统的内存概况,是故障排查中一个非常重要的点。 7、其他全局
在xjjdog的其他文章,我们不止一次说到dmesg。dmesg是许多静悄悄死掉的服务留下的最后一点线索。 当然,ps作为执行频率最高的一个命令,它当时的输出信息,也必然有一些可以参考的价值。 由于内核的配置参数,会对系统产生非常大的影响。所以我们也输出了一份。 进程快照,最后的遗言 1、jinfo
此命令将输出java的基本进程信息。包括环境变量和参数配置。 2、gc信息
jstat将输出当前的gc信息。一般,能大体看出一个端倪,如果不能,将借助jmap进行分析。 3、堆信息
jmap将会得到当前java进程的dump信息。如上所示,其实最有用的就是第4个命令,但是前面三个能够让你初步对系统概况进行大体判断。 因为,第4个命令产生的文件,一般都非常的大。而且,需要下载下来,导入MAT这样的工具进行深入分析,才能获取结果。 4、执行栈
(编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |