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进制 ...
随机推荐
- 配置nginx的systemctl命令
启动nginx的命令为 /usr/local/nginx/sbin/nginx 停止nginx的命令为 /usr/local/nginx/sbin/nginx -s stop 重启ng ...
- C#多线程编程中的锁系统
C#多线程编程中的锁系统(二) 上章主要讲排他锁的直接使用方式.但实际当中全部都用锁又太浪费了,或者排他锁粒度太大了. 这一次我们说说升级锁和原子操作. 目录 1:volatile 2: Inter ...
- go mod 使用
go modules 是 golang 1.11 新加的特性.现在1.12 已经发布了,是时候用起来了.Modules官方定义为: 模块是相关Go包的集合.modules是源代码交换和版本控制的单元. ...
- ios Aspects面向切面沉思录—面向结构编程—面向修改记录编程—面向运行时结构编程—元编程?
1.将主功能看成一个巨大的结构: 2.将切面注入的交叉业务看成是一组结构修改的注册:目标对象+方法是修改的键值: 3.Aspects引擎是修改的执行者.记录者.和维护者: 4.函数和方法是它操作和面对 ...
- combineReducers(reducers)
combineReducers(reducers) 随着应用变得越来越复杂,可以考虑将 reducer 函数 拆分成多个单独的函数,拆分后的每个函数负责独立管理 state 的一部分. combine ...
- [Java] Spring boot 的maven设置阿里云仓库
Spring boot 的maven设置阿里云仓库 打开根目录下的 pom.xml 文件,在对应为止出加入如下 红色 代码: <build> <plugins> <plu ...
- xms西软预定列表-房类市场
select b.descript,sum(a.quan) as quan,case WHEN c.descript is null THEN '团队预留' ELSE c.descript end a ...
- python .socket 连接
https://blog.csdn.net/mgsky1/article/details/93412128https://blog.csdn.net/weixin_44449518/article/d ...
- 如何新建WebAPI,生成注释,TestAPI的项目
一.新建WebAPI的项目 1. 在Web下,ASP.NET Web 应用程序,点击确定 2. 点击确定 3. 如图所示, 新建Controller 4 . 运行项目 二.注释 1. 在生成中,勾选x ...
- js之切换全屏和退出全屏实现
应用场景:比如很多网页游戏全屏之类的,或者是网上看小说等. 核心代码: //控制全屏 function enterfullscreen() { //进入全屏 $("#fullscreen&q ...