Java进程故障排查思路及步骤

故障场景
Java进程出现问题,通常表现出如下现象:
- Web应用响应时间长/超时,甚至不响应
- CPU使用率极高/低,频繁出现Full GC,甚至OutOfMemoryError
响应时间长、超时,甚至不响应,这是最直观的表现;而CPU使用率极高或极低,频繁出现Full GC,这些需要借助系统日志或者监控辅助发现。
原因分析
针对响应时间长、超时,甚至不响应,这是一个综合性的问题导致的,可能并不单纯是应用程序本身的问题,如果后端还接了数据存储系统,除了排查应用程序本身的问题之外,还需要排查应用所依赖的第三方组件是否出现了性能瓶颈。
通常,在直观的表象背后是对应的系统指标异常,应该根据具体的系统指标进行排查,如下举例:
1.CPU使用率极高,可能是应用代码出现了死循环,或者TCP连接数过高。
2.CPU使用率极低,通常是线程Hang住了,或者是出现了死锁,此时需要查看线程堆栈信息。
3.如果频繁出现Full GC,首先需要排查是否分配的堆内存空间太小,或者GC配置是否需要调优,此时需要进行内存dump分析。
常用工具及处理方式
- 应用程序日志是首先排查的入口点,可以直接排查日志文件,或者从日志中心进行检索,因此要求在系统开发的时候必须设计合理的日志输出规范。
- 针对CPU使用极高或者极低的情况,首先进行堆栈分析:
jstack -l -F <pid> > stack.log,根据堆栈信息Review可能存在问题的代码逻辑。如果CPU使用率极高,通常是出现了死循环,或者TCP连接数过多,需要查看网络参数:netstat -anpt|grep <port>。 - 如果开启了GC日志,观察到频繁出现Full GC,则考虑调整堆内存空间,甚至是JVM调优,此时首先分析堆内存dump结果:
jmap -dump:live,format=b,file=heap.bin <pid>;另外,频繁Full GC,也会导致CPU使用率很高,导致无法正常响应业务请求。 - JMX监控也常常是问题排查的辅助手段,再启动应用程序时开启远程JMX监控:
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=端口号 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false,善于使用好JDK提供的2个可用于JMX监控的工具:jconsole,jvisualvm 。 - 可以借助第三方诊断工具进行问题定位,如:Arthas,详见:https://alibaba.github.io/arthas/index.html 。
Java进程故障排查思路及步骤的更多相关文章
- Java进程故障排查
故障分析 # 导致系统不可用情况(频率较大): 1)代码中某个位置读取数据量较大,导致系统内存耗尽,进而出现Full GC次数过多,系统缓慢: 2)代码中有比较消耗CPU的操作,导致CPU过高,系统运 ...
- 超长可视化指南!带你理清K8S部署的故障排查思路,让bug无处遁形
本文将帮助你厘清在Kubernetes中调试 deployment的思路.下图是完整的故障排查思路,如果你想获得更清晰的图片,请在公众号后台(RancherLabs)回复"troublesh ...
- NO11 SSH故障排查思路和netstat命令
本章知识相关考试:1.企业场景面试题:Linux系统如何优化?2.企业场景面试题:SSH服务连不上,如何排查?记住回答技巧: 1 ping 2 telnet 客户端ssh工具:SecureCRT,x ...
- JVM命令-java服务器故障排查
一.top(Linux命令) 执行top命令: (查看进程15477的详细情况,下文用到) 系统信息(前五行): 第1行:Top 任务队列信息(系统运行状态及平均负载),与uptime命令结果相 ...
- 20170413B端业务访问故障排查思路
现象: 1.全国用户电视端页面无法显示,刷不出版面. 2.后端服务无法打开,报错,504,502 显示服务器端业务故障超时. 3.其他业务也出现缓慢情况,并不严重. 排查: 1.系统服务排查,常规 ...
- java程序故障排查脚本之——CPU占用高
root@ubuntu-B85M-D3H:~/tmp# cat java_Analy.sh #!/bin/bash T=`ps -mp $1 -o THREAD,tid,time|sort -k 2 ...
- Linux运维故障排查思路
linux系统故障 网络问题 linux系统无响应 linux系统无法启动 linux系统故障处理思路 1.重视报错信息,一般情况下此提示基本定位了问题的所在 2.查阅日志文件,系统日志和应用日志 3 ...
- Java程序线上故障排查
目录 一.Linux 内存和cpu 网络 磁盘 /proc文件系统 二.JVM Java堆和垃圾收集器 gc日志分析 JVMTI介绍 Attach机制 java自带工具 三.三方工具 jprofile ...
- java进程性能分析步骤-超越昨天的自己系列(11)
java进程load过高分析步骤: top 查看java进程情况 top -Hp 查看某个进程的具体线程情况 printf 0x%x 确认哪一个线程占用cpu比较多,拿出来转成16进制 ...
随机推荐
- 洛谷 P5345: 【XR-1】快乐肥宅
题目传送门:洛谷 P5345. 很荣幸为 X Round 1 贡献了自己的一题. 题意简述: 给定 \(n\) 组 \(k_i,g_i,r_i\)(\(0\le k_i,r_i<g_i\le 1 ...
- shell脚本攻略1
换行符 \n echo -n 禁止换行 环境变量声明export export PATH="$PATH:/home/user/bin" 获取字符串的长度 length=${#var ...
- 常用 shell 命令 chmod | root
chmod 命令 chmod 命令 [格式1:] chmod [ugoa][+-=][rwx] 文件或目录 /*u.g.o.a : u属主,g属组,o其他用户,a所有用户*/ /*+.-.= : 增加 ...
- 理解JPA注解@GeneratedValue的使用方法
https://blog.csdn.net/u012838207/article/details/80406716 一.JPA通用策略生成器 通过annotation来映射hibernate实体的,基 ...
- Blink示例程序
打开Arduino IDE(话说与Processing IDE的UI好像啊 然后将这段代码输入.也可从文件>例子>01.Basics/Blink(File/Examples/01.Basi ...
- str2int HDU - 4436 (后缀自动机)
str2int \[ Time Limit: 3000 ms\quad Memory Limit: 131072 kB \] 题意 给出 \(n\) 个串,求出这 \(n\) 个串所有子串代表的数字的 ...
- 内置函数— — eval、exec、compile
字符串类型代码:eval.exec.compile eval() 执⾏字符串类型的代码,并返回最终结果 print(eval("2+2")) # 4 n=8 def func() ...
- python:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
# 将默认编码设为utf-8 # 否则会报错: # UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ...
- maven 无法引入包 报错 处理方式
<!--orderquery thrift client定义--> <dependency> <groupId>com.sankuai.qcs</groupI ...
- HTTP协议之multipart/form-data
HTTP协议之multipart/form-data REST API可以用multipart/form-data,来上传文件. 在最初的 http 协议中,没有上传文件方面的功能. rfc1867为 ...