热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java服务问题快速定位与解决策略全面指南

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java服务问题快速排查指南相关的知识,希望对你有一定的参考价值。 问题 收到服务内存占用过大告警,登录虚拟机使用top发现每隔几秒ja

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java服务问题快速排查指南相关的知识,希望对你有一定的参考价值。



问题

收到服务内存占用过大告警,登录虚拟机使用top发现每隔几秒java进程占用的CPU就会暴增一次。


排查方向一:服务日志
  1. 使用tail -fn 100 xxx.log查看服务日志,发现频繁打印连接mail服务器失败错误,根据错误堆栈信息定位到业务代码位置
  2. 定位业务代码中的错误

排查方向二:JVM工具

若代码中未打印出错信息,可以考虑从jvm线程上入手。


  1. 使用jps -mlv获取java服务pid
  2. 使用top -H -p pid查看高占用线程(此时pid为tid),CPU打满时有10多个线程都占10%左右
  3. 使用jstat -gc pid 1000jstat -gcutil pid 1000查看gc情况,发现大约每隔1到2秒jvm进行一次minor gc,老年代空间几乎不变,怀疑业务逻辑导致不断创建、释放新对象
  4. 记录步骤2中高占用率的几个线程tid,使用printf "%x\\n" tid将tid转为16进制
  5. 使用jstack pid打印线程状态,观察未出现死锁,搜索上一步的16进制数对应的线程,发现繁忙线程果真大都是gc线程,同时参杂着自定义线程池的线程,找到running状态的线程,根据线程调用栈定位到代码中执行的位置
  6. 业务代码中线程正在执行的是邮件发送操作,与方向一种错误位置吻合
  7. 定位到错误根源:该机器未开启外网访问权限,而代码业务逻辑中检测邮件发送连接失败则直接扔回队列中重试,因为没有设定最大重试次数导致频繁创建邮件消息体,耗尽堆空间,打开外网后问题解决


辅助分析
使用jmap -dump:format=b,file=dump.bin pid生成堆转储文件,使用jhat dump.bin或复制到有VisualVM等分析工具的机器上进行分析,可以发现占用堆空间最大的是char[]数组,打开其中几个发现内容都是一致的,都是邮件发送的消息体。



扩展
  1. 可以结合freevmstatiostatnetstat等系统命令进行分析排查
  2. 将上述步骤写成脚本方便快速定位问题,网上已有不少例子,如 https://github.com/oldratlee/useful-scripts

推荐阅读
  • PHP中元素的计量单位是什么? ... [详细]
  • 本文详细探讨了Java集合框架的使用方法及其性能特点。首先,通过关系图展示了集合接口之间的层次结构,如`Collection`接口作为对象集合的基础,其下分为`List`、`Set`和`Queue`等子接口。其中,`List`接口支持按插入顺序保存元素且允许重复,而`Set`接口则确保元素唯一性。此外,文章还深入分析了不同集合类在实际应用中的性能表现,为开发者选择合适的集合类型提供了参考依据。 ... [详细]
  • 本项目在Java Maven框架下,利用POI库实现了Excel数据的高效导入与导出功能。通过优化数据处理流程,提升了数据操作的性能和稳定性。项目已发布至GitHub,当前最新版本为0.0.5。该项目不仅适用于小型应用,也可扩展用于大型企业级系统,提供了灵活的数据管理解决方案。GitHub地址:https://github.com/83945105/holygrail,Maven坐标:`com.github.83945105:holygrail:0.0.5`。 ... [详细]
  • 2019年后蚂蚁集团与拼多多面试经验详述与深度剖析
    2019年后蚂蚁集团与拼多多面试经验详述与深度剖析 ... [详细]
  • jQuery Flot 数据可视化插件:高效绘制图表的专业工具
    jQuery Flot 是一款高效的数据可视化插件,专为绘制各种图表而设计。该工具支持丰富的图表类型和自定义选项,适用于多种应用场景。用户可以通过其官方网站获取示例代码和下载资源,以便快速上手和使用。 ... [详细]
  • Spring Boot 实战(一):基础的CRUD操作详解
    在《Spring Boot 实战(一)》中,详细介绍了基础的CRUD操作,涵盖创建、读取、更新和删除等核心功能,适合初学者快速掌握Spring Boot框架的应用开发技巧。 ... [详细]
  • 如何运用蒙特卡洛方法计算NPV:计算机专业毕业设计遇到难题怎么办?
    许多计算机科学专业的学生在大学期间都会遇到这样的困扰:课堂上教授的内容往往偏向理论,实际应用的知识点讲解得较为浅显和概括,导致在进行毕业设计时,如运用蒙特卡洛方法计算净现值(NPV)等复杂问题时感到无从下手。本文旨在探讨如何通过深入理解和实践蒙特卡洛模拟技术,解决这类计算难题,为学生的毕业设计提供实用指导。 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 本文详细解析了 MySQL 5.7.20 版本中二进制日志(binlog)崩溃恢复机制的工作流程。假设使用 InnoDB 存储引擎,并且启用了 `sync_binlog=1` 配置,文章深入探讨了在系统崩溃后如何通过 binlog 进行数据恢复,确保数据的一致性和完整性。 ... [详细]
  • Java 零基础入门:SQL Server 学习笔记(第21篇)
    Java 零基础入门:SQL Server 学习笔记(第21篇) ... [详细]
  • 探讨 `org.openide.windows.TopComponent.componentOpened()` 方法的应用及其代码实例分析 ... [详细]
  • JVM参数设置与命令行工具详解
    JVM参数配置与命令行工具的深入解析旨在优化系统性能,通过合理设置JVM参数,确保在高吞吐量的前提下,有效减少垃圾回收(GC)的频率,进而降低系统停顿时间,提升服务的稳定性和响应速度。此外,本文还将详细介绍常用的JVM命令行工具,帮助开发者更好地监控和调优JVM运行状态。 ... [详细]
  • MySQL:不仅仅是数据库那么简单
    MySQL不仅是一款高效、可靠的数据库管理系统,它还具备丰富的功能和扩展性,支持多种存储引擎,适用于各种应用场景。从简单的网站开发到复杂的企业级应用,MySQL都能提供强大的数据管理和优化能力,满足不同用户的需求。其开源特性也促进了社区的活跃发展,为技术进步提供了持续动力。 ... [详细]
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
author-avatar
airchampion
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有