Java应用CPU打满故障处理

简介: java应用CPU故障处理,及后续操作建议

问题背景:某项目生产环境正常投用的xx业务系统,在某天下午业务组反馈,xx业务系统客户端及网页版应用均无法登录,请求登录页面无响应。

影响范围:xx业务系统无法使用

排查思路:
一般情况下,Java应用占用CPU较高的原因大部分为以下两种情况:

  1. 应用属于计算密集型应用
  2. 应用方法中出现了死循环

排查过程:
1.首先查看系统资源占用信息,使用top看一下,定位到占用CPU较高的进程PID。

top

image
可以通过ps aux | grep PID命令,进一步确定是否tomcat进程出现了问题。
2.定位最耗cpu的线程,使用ps -mp pid -o THREAD,tid,time | sort -rn命令显示线程列表,并找到占用CPU高的线程。其中 tid代码线程ID,time代表这个线程的已运行时间。

ps -mp 17789 -o THREAD,tid,time|sort -rn

image
3.将需要的线程ID转换为16进制格式。使用printf "%xn" tid命令,手动将线程ID转换为16进制。

printf "%x\n" 18081

image
4.打印线程堆栈信息,使用命令Jstack PID | grep tid –A line输出line行线程堆栈信息。

jstack pid |grep tid -A 30

image
在执行上述命令后会看到如图所示堆栈信息,找到nid=$(tid十六进制值)即可定位出现问题的代码了!
5.接下来再回到代码,分析下具体的代码中的方法。对相应方法进行优化,若无可优化空间,则应进行应用服务器扩容。

问题总结:
经排查,开发人员在xx业务系统中新增了一个报表查询功能,且功能新增后直接在生产环境进行了发版。由于报表查询的查询SQL为添加过滤条件,导致全表扫描,从而使得应用CPU打满。

建议:
建议后期发版过程严格遵守应用发布流程规范,按照研发->测试->上线流程进行应用发布,并在上线前按照规范中的发布申请、发布审批等步骤对应用所需资源、SQL脚本等进行审核。

相关文章
|
7天前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
|
16天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
9天前
|
SQL Java 数据库连接
从理论到实践:Hibernate与JPA在Java项目中的实际应用
本文介绍了Java持久层框架Hibernate和JPA的基本概念及其在具体项目中的应用。通过一个在线书店系统的实例,展示了如何使用@Entity注解定义实体类、通过Spring Data JPA定义仓库接口、在服务层调用方法进行数据库操作,以及使用JPQL编写自定义查询和管理事务。这些技术不仅简化了数据库操作,还显著提升了开发效率。
23 3
|
19天前
|
SQL 监控 Java
技术前沿:Java连接池技术的最新发展与应用
本文探讨了Java连接池技术的最新发展与应用,包括高性能与低延迟、智能化管理和监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,为开发者提供了一份详尽的技术指南。
29 7
|
17天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
31 3
|
17天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
34 2
|
19天前
|
缓存 Java 数据库连接
Hibernate:Java持久层框架的高效应用
通过上述步骤,可以在Java项目中高效应用Hibernate框架,实现对关系数据库的透明持久化管理。Hibernate提供的强大功能和灵活配置,使得开发者能够专注于业务逻辑的实现,而不必过多关注底层数据库操作。
12 1
|
Java BI Linux
从Java视角理解系统结构 (一) CPU上下文切换
本文是从Java视角理解系统结构连载文章 在高性能编程时,经常接触到多线程. 起初我们的理解是, 多个线程并行地执行总比单个线程要快, 就像多个人一起干活总比一个人干要快. 然而实际情况是, 多线程之间需要竞争IO设备, 或者竞争锁资源,导致往往执行速度还不如单个线程. 在这里有一个经常提及的概念就是: 上下文切换(Context Switch).
125 0
从Java视角理解系统结构 (一) CPU上下文切换
|
9天前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。