千家信息网

java线上问题排查套路是什么

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章给大家介绍java线上问题排查套路是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。tags: java, troubleshooting, monitor一句话概括:
千家信息网最后更新 2026年11月03日java线上问题排查套路是什么

这篇文章给大家介绍java线上问题排查套路是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

tags: java, troubleshooting, monitor


一句话概括:java应用线上问题如CPU过高,内存溢出,IO过高等问题如何排查,本文为你详细讲述。

1 引言

java应用上线运行后,免不了会有各种问题,总的来说问题会分为四大类:

  • (1)CPU相关问题

  • (2)内存相关问题

  • (3)磁盘及IO相关问题

  • (4)业务代码问题。

针对这些问题,线上如何进行监测与问题排查,是一个java开发人员的必要技能。下面将结合前面提到的java命令行工具,对这几个问题的排查套路进行说明。

2 CPU问题排查套路

如果发现系统变慢变卡,应用响应变慢,首先要查的就是CPU使用情况,一般是进程占用CPU过高,因此需要监测CPU的占用情况,而java应用中与CPU相关的主要是线程的运行,因此具体到java应用,需要监测线程的运行状态,对应就是命令行工具jstack。因此,总结CPU占用过高问题可按下面套路:

# (1) 查询CPU占用高的进程ID(PID)top -c# (2) 了解此进程的启动参数ps -ef|grep  PID或者jinfo -flags PID# (3) 打印线程堆栈信息并输出文件jstack -l PID > PID.dump# (4) 根据进程查找线程ID(TID)top -H -p PID# (5) 获取TID的16进制数printf "%x\n" TID# (6) 结合TID和线程堆栈信息文件查找问题- 可以使用文本工具直接查看- 可以使用 grep TID -A20 PID.dump 来查看- 需要配合线程状态来检查

关于jstack工具和线程状态可查看文章《java应用监测(3)-这些命令行工具你掌握了吗》

3 内存问题排查套路

内存问题主要是java应用在运行过程中发生OOM(out of memory),因此需要建议在java应用启动时,添加几个参数,包括-Xloggc:file -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=logs/heapdump.hprof -XX:ErrorFile=logs/java_error_%p.log。这样当发生oom时,可以从dump出来的文件来分析oom的原因。与内存问题相关的java命令行工具包括jmap,jstat,因此内存OOM问题排查套路如下:

# (1)找到java应用进程(PID)jps -lvm或者top -c# (2)了解此进程启动参数(特别是-Xms,-Xmx等)ps -ef|grep  PID或者jinfo -flags PID# (3) 确认内存情况jmap -heap PID# (4) 查找占内存的大对象jmap -histo:live PID # (5) dump出堆文件,以便使用工具分析jmap -dump:file=./heap.hprof PID# (6) 查看GC变化情况,如下每秒打印一次jstat -gc PID 1000 # (7) 结合日志文件出错信息及dump出来的堆文件分析OOM和GC情况- 内存分配小,适当调整内存- 对象被频繁创建,且不释放,优化代码- young gc频率太高,查看-Xmn、-XX:SurvivorRatio等参数设置是否合理

关于OOM,官方文档有关于OOM的说明(https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/memleaks002.html), 主要分为以下几大类:

  • java.lang.OutOfMemoryError: Java heap space,堆的内存占用已经达到-Xmx设置的最大值,无法创建新对象,简单的可以考虑通过调整-Xmx参数来解决。

  • java.lang.OutOfMemoryError: GC Overhead limit exceeded,表示GC一直在执行且java进程运行很慢,通常会抛出此异常,java堆的分配的空间很小以至于新数据无法放到堆中。考虑调整堆大小,如果想关闭此输出,可用参数来关闭-XX:-UseGCOverheadLimit。

  • java.lang.OutOfMemoryError: Requested array size exceeds VM limit,java应用尝试分配大于堆大小的数组,如堆大小是256M,却要分配512M的数组,则会报错。考虑调整堆大小或者修改代码

  • java.lang.OutOfMemoryError: Metaspace,当类元数据所需的本机内存量超过时MaxMetaSpaceSize时报出,考虑调整MaxMetaSpaceSize。

  • java.lang.OutOfMemoryError: request size bytes for reason. Out of swap space?当来自本机堆的分配失败并且本机堆可能接近耗尽时会报此错误,需要查看日志来处理。

  • java.lang.OutOfMemoryError: Compressed class space,JVM的非堆结构中,类指针存放空间不足,考虑使用CompressedClassSpaceSize来调整。

  • java.lang.OutOfMemoryError: reason stack_trace_with_native_method,JVM的本地方法区不足,在Java本机接口(JNI)或本机方法中检测到分配失败,需要查找对应堆栈信息来查询。

4 磁盘及IO问题排查套路

java应用运行过程中,会涉及日志产生,对磁盘的读写等操作,也有可能有各种问题,如磁盘不足(日志输出过多)、、磁盘读写IO比较慢、IO过于频繁等。一般来说,可以按以下套路进行排查:

# (1) 查看磁盘容量情况df -h# (2) 查看文件大小和目录大小ls -l 或者直接lldu -h --max-depth=1# (3) 查看IO情况,找到IO读写频繁的进程PIDiotop -d 1 # 1秒打印一次或者iostat -d -x -k 1 #1秒打印一次# (4) 使用stack打印线程堆栈信息,排查IO相关代码# (5) 有时候若想测试磁盘的读写速度(特别是虚拟机),可以使用dd# 示例:测数据卷挂载目录的纯写速度dd if=/dev/zero of=/数据卷目录/test.iso bs=8k count=1000000

5 业务问题排查套路

业务问题,主要是涉及到代码逻辑层面的,主要是查询日志输出,方法是否按正确的逻辑执行,因此一般的排查套路如下:

# (1) 实时日志输出查询tail -fn 100 log_file# (2) 根据日志输出的关键字来定位问题grep keyWord log_file # 关键字所在行grep -C n keyWord log_file # 关键字所在前后n行# (3) 日志文件使用可视化文本工具分析(notepad++,sublime,大文件查看如EmEditor)# (4) 使用线上工具直接检测方法的参数、返回值,异常情况等等,如Btrace,arthas等。

结合java的命令行工具和线上诊断工具,可以很方便地给java应用进行排查。

关于java线上问题排查套路是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

问题 内存 应用 套路 工具 文件 情况 日志 线程 进程 参数 磁盘 大小 分配 调整 输出 运行 代码 信息 命令 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网高科技 江苏根荣互联网科技 科技赋能下的互联网金融 互联网科技logo 互联网金融 科技创新 新华互联网科技校企合作 互联网巨头投资的硬核科技 青岛中康互联网医疗科技有限公司 现代互联网科技股 荆州市昕露互联网络科技有限公司 注册互联网科技公司经营范围大全 玉溪新华互联网科技好不好 工业互联网展湾科技股份有限公司 互联网时代的科技公司 容联科技互联网电商 湖北辰鑫科技互联网 长沙渺峰互联网科技有限公司 易租星互联网科技有限公司 科技互联网专业工作会议发言稿 现代科技的标志之一的互联网 互联网金融 科技金融 万达互联网科技 大白互联网科技 互联网金融科技委员会 隆华科技工业互联网 承德科技产业互联网发展 注册互联网科技公司经营范围大全 深圳市优智互联网科技有限公司 沐思想互联网科技有限公司 长沙渺峰互联网科技有限公司
0