首页 > 其他分享 >系统问题排查思路

系统问题排查思路

时间:2024-01-02 18:33:45浏览次数:43  
标签:文件 系统 排查 XX 线程 内存 JVM 进程 思路

系统在运行的过程中往往会出现一些意想不到的问题,例如

  1. 响应时长突然升高,甚至应用无响应
  2. 内存使用量突然变大,甚至内存溢出
  3. CPU使用率持续增高
  4. JVM进程消失

面对这些问题,我们往往都需要通过以下的数据来进行分析

  1. 链路追踪,主要用于识别出各接口或方法的耗时情况
  2. Java Core数据,主要用于分析线程的运行情况
  3. Heap Dump转存,主要用于分析JVM内存的使用情况
  4. GC日志,主要分析GC的情况
  5. 数据库执行SQL耗时,主要分析慢SQL


场景1:JVM进程消失

导致JVM进程消失的一般情况有

  1. linux的OOM killer
  2. JVM自身故障
  3. JVM的OOM 


linux的OOM killer

Linux 内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽而内核会把该进程杀掉。 因此,你发现java进程突然没了,首先要怀疑是不是被linux的OOM killer给干掉了!

系统自身会将系统报错数据存储在以下文件中

/var/log/messages

可以通过以下命令来查询有关杀死进程的信息

egrep -i 'killed process' /var/log/messages

当然,你也可以去内核日志里头查询。有时Linux系统或者系统上运行的java或者其它进程,会发生一些莫名其妙的问题,比如突然挂掉了,比如突然重启等等。在软件上找不到问题所在,此时我们应该怀疑硬件或者内核的问题,此时我们就可以使用 dmesg来查看:

dmesg | grep java

例如以下的输出

[5673702.665338] Out of memory: Kill process 29953 (java) score 431 or sacrifice child
[5673702.665338] Killed process 29953, UID 500, (java) total-vm:9805316kB, anon-rss:2344496kB, file-rss:128kB

通过上面的输出可以看到内核对进程做的操作。


JVM自身故障

当JVM发生致命错误导致崩溃时,会生成一个hs_err_pid_xxx.log这样的文件,该文件包含了导致 JVM crash 的重要信息,我们可以通过分析该文件定位到导致 JVM Crash 的原因,从而修复保证系统稳定。

默认情况下,该文件是生成在工作目录下的,当然也可以通过 JVM 参数指定生成路径:

-XX:ErrorFile=/var/log/hs_err_pid<pid>.log

如何分析该文件,可参考 JVM 致命错误日志(hs_err_pid.log)解读


JVM的OOM 

这种情况往往是因为内存泄漏、代码不合理;或者并发量太大,任务本身会消耗较多内存;或者就是内存配置太小而导致内存溢出。

可以通过添加以下参数来获取内存时的转存文件,然后对文件分析找出问题的代码

-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=*/java.hprof;
  1. JVM 内存分析工具 MAT 的深度讲解与实践——入门篇
  2. JVM 内存分析工具 MAT 的深度讲解与实践——进阶篇


场景2:无法提供响应

该场景包含两种情况,一种是新的请求被拒绝了,第二种是响应时长很大。有可能是服务的线程被使用完了,而导致使用完的原因可能有

  1. 线程的死锁
  2. 线程间进行资源竞争时长期等待资源响应
  3. JVM不断的full gc

这时可以抓取Java Core文件进行分析,通过下面的方式可以获取该文件


1、通过Java JDK自带的工具

jstack [-F] [-l] [-m] <pid>

参数说明:

选项

作用

-F

当正常输出的请求不被响应时,强制输出线程堆栈

-m

如果调用到本地方法的话,可以显示C/C++的堆栈

-l

除堆栈外,显示关于锁的附加信息,在发生死锁时可以用jstack -l pid来观察锁持有情况

例如,将进程号为17246的线程转储输出到文件中

jstack -l  17264 > /tmp/threaddump.txt

至于怎么得到进程ID号,可通过linux的ps命令或jdk中的jps工具。

注意:应该在启动进程的所在用户下执行;同时,如果服务器上安装的是JRE而非JDK,那么将不能使用 jstack 工具获取thread dump文件


2、通过Unix/Linux的kill指令

如果服务器上只安装了JRE,那么可以通过kill命令来获取thread dump文件。

kill  -3  <pid>

通过上面指令可以将thread dump信息打印到标准输出中。

同时,通过在Java命令中加上以下参数后可将thread dump输出到文件中。

-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=~/jvm.log
  • 你可以通过-XX:+LogVMOutput开启,或者-XX:-LogVMOutput关闭
  • LogVMOutput必须配合参数-XX:+UnlockDiagnosticVMOptions使用,并且只能加在其后才能生效


场景3:CPU过高

这种情况依旧需要通过Thread Dump文件来分析,其操作过程大致如下

  1. top, 通过top命令找出cpu消耗大的java进程,并得到PID
  2. top -Hp pid,通过该命令查看制定进程下各个线程的cpu使用情况
  3. jstack -l [PID] >/tmp/log.txt , 抓取进程的dump文件
  4. 分析堆栈信息,将线程的ID转换成十六进制后再thread dump文件中查找

可参考文章:Java程序员必备:jstack命令解析



附:其他可参考文章

  1. 为JVM添加故障时的日志参数
  2. Java Thread Dump 日志分析
  3. how-to-read-a-thread-dump
  4. 啃碎并发(四):Java 线程 Dump 分析

标签:文件,系统,排查,XX,线程,内存,JVM,进程,思路
From: https://blog.51cto.com/dengshuangfu/9072075

相关文章

  • 优维科技2024战略定位:新一代运维核心系统提供商
    01 经济复苏「走远路」过去几年,全球经济持续低迷,2024会迎来转机吗?回顾2023年,尽管经济复苏动能式微,但全球经济因有效控制通胀而展现出来的韧性,让包括中国在内的大部分经济体躲过了深度衰退的陷阱;展望2024年,上半年全球经济增长动能或进一步衰减,但下半年有望以新的复苏周期终止并替代......
  • 浅析变电所自动化控制系统应用与分析
    摘要:变电所自动化控制系统是对变电所执行自动监视、测量、控制和协调的综合性系统。本文对变电所自动化控制中的计算机监控系统和监控保护分别进行了分析,并着重探讨了变电所自动化控制系统应用中的几个问题:通信网络和备用电源自投装置等。关键词:监控系统;微机继电保护;通信网络0引......
  • 浅析电弧光保护在火力发电厂用电高压系统中的应用
    安科瑞电气张田田摘要:介绍了电弧光保护装置的组成,对火力发电厂高压厂用电系统保护的现状及存在的不足进行了分析,以一个典型的2×300MW火力发电厂工程为例,讨论了高压厂用电系统电弧光保护装置的设计应用方案,对电弧光保护装置的应用前景进行了展望。关键词:电弧光保护;高压厂用电系......
  • 亚马逊鲲鹏系统给我带来的真实体验感
    我想分享一下我对亚马逊鲲鹏系统的使用体验。我一直在寻找一个方便且高效的方法来批量注册亚马逊买家账号,而亚马逊鲲鹏系统给了我一个理想的解决方案。使用亚马逊鲲鹏系统进行批量注册是非常简便的。系统内置了全自动化的操作功能,只要提前准备好所需的资料,比如账号密码信息,系统就能......
  • 聊聊我使用亚马逊鲲鹏系统注册买家号的心得
    想和大家聊一下我最近用了个挺好用的工具,就是亚马逊鲲鹏系统。以前我总是烦恼要一个一个手动注册亚马逊账号,真是麻烦。但有了这个系统,简直是方便到不行!首先,它有个全自动批量注册账号的功能,你只需要提前准备好要用的账号密码,系统就能自己搞定,还能自动应对验证码,真是秒注册啊!而且系统......
  • 跑腿配送系统技术探析
    概述跑腿配送系统是一种基于现代科技的服务平台,通过智能化的技术手段,实现用户需求的快速响应和高效配送。本文将探讨该系统的核心技术原理,以及在实际开发中的一些代码示例。技术原理1.用户请求与任务分配跑腿配送系统的第一步是接收用户的请求并进行任务分配。这通常涉及到前端与......
  • 浅析城镇污水处理厂供配电系统节能设计
    安科瑞张田田摘要:通过分析城镇污水处理厂的基本能耗,对城镇污水处理厂供配电系统的节能价值进行简要概述,同时提出一系列城镇污水处理厂供配电系统节能设计的措施,以及节能减排导向下该系统的优化方法。通过研究可知,供配电系统需要根据自身的结构设计,从电气设备、电缆线路的节能设计......
  • 浅析新型高压开关配电室环境监测系统的设计
    摘要:针对目前高压开关配电室环境监测系统在可靠性、扩展性、灵活性、方使性等方面存在的问题,提出一种新型环境监测系统的设计方案。系统由SIEMENS可编程控制器(PLC)及传感器等组成,实时监测高压开关配电宝环境中SF6气体浓度、氧气含量、环境温湿度等参数。本系统具有可靠性高、扩充......
  • 浅析配电能源管理系统在钢铁行业的应用
    安科瑞张田田摘要:能源管理系统在钢铁行业中的应用是钢铁行业信息化、数据化、智能化发展的重要表现,也是钢铁行业实现智能制造与精细化管理的重要举措。鉴于此,从能源管理系统在钢铁行业中的应用意义出发,就能源管理系统应用现状进行了简要分析,并结合钢铁行业特征与智能创造目标,......
  • 中国app系统开发公司前十名,排行榜
    对于app系统开发公司前十名排行榜,并没有一个官方的排名结果。这是因为app开发公司的排名受到多种因素的影响,如公司规模、技术实力、项目经验、服务质量等等。因此,很难给出一个准确的排名结果。华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致......