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脚本等进行审核。

相关文章
|
2天前
|
Java 编译器 开发者
Java中的this关键字详解:深入理解与应用
本文深入解析了Java中`this`关键字的多种用法
28 9
|
2天前
|
Java 应用服务中间件 API
【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析
本文介绍了 Spring Boot 的核心概念和使用场景,并通过一个实战项目演示了如何构建一个简单的 RESTful API。
21 5
|
2天前
|
人工智能 自然语言处理 搜索推荐
【潜意识Java】了解并详细分析Java与AIGC的结合应用和使用方式
本文介绍了如何将Java与AIGC(人工智能生成内容)技术结合,实现智能文本生成。
21 5
|
2天前
|
SQL Java 数据库连接
【潜意识Java】深入理解MyBatis,从基础到高级的深度细节应用
本文详细介绍了MyBatis,一个轻量级的Java持久化框架。内容涵盖MyBatis的基本概念、配置与环境搭建、基础操作(如创建实体类、Mapper接口及映射文件)以及CRUD操作的实现。此外,还深入探讨了高级特性,包括动态SQL和缓存机制。通过代码示例,帮助开发者更好地掌握MyBatis的使用技巧,提升数据库操作效率。总结部分强调了MyBatis的优势及其在实际开发中的应用价值。
11 1
|
29天前
|
安全 算法 Java
Java CAS原理和应用场景大揭秘:你掌握了吗?
CAS(Compare and Swap)是一种乐观锁机制,通过硬件指令实现原子操作,确保多线程环境下对共享变量的安全访问。它避免了传统互斥锁的性能开销和线程阻塞问题。CAS操作包含三个步骤:获取期望值、比较当前值与期望值是否相等、若相等则更新为新值。CAS广泛应用于高并发场景,如数据库事务、分布式锁、无锁数据结构等,但需注意ABA问题。Java中常用`java.util.concurrent.atomic`包下的类支持CAS操作。
64 2
|
1月前
|
Java 对象存储 开发者
如何找出Java进程占用CPU高的元凶
本文记录了一次Java进程CPU占用率过高的问题和排查思路。
|
1月前
|
开发框架 .NET PHP
网站应用项目如何选择阿里云服务器实例规格+内存+CPU+带宽+操作系统等配置
对于使用阿里云服务器的搭建网站的用户来说,面对众多可选的实例规格和配置选项,我们应该如何做出最佳选择,以最大化业务效益并控制成本,成为大家比较关注的问题,如果实例、内存、CPU、带宽等配置选择不合适,可能会影响到自己业务在云服务器上的计算性能及后期运营状况,本文将详细解析企业在搭建网站应用项目时选购阿里云服务器应考虑的一些因素,以供参考。
|
1月前
|
监控 Java 数据库连接
Java线程管理:守护线程与用户线程的区分与应用
在Java多线程编程中,线程可以分为守护线程(Daemon Thread)和用户线程(User Thread)。这两种线程在行为和用途上有着明显的区别,了解它们的差异对于编写高效、稳定的并发程序至关重要。
48 2
|
27天前
|
存储 缓存 前端开发
JavaEE初阶——初识EE(Java诞生背景,CPU详解)
带你从零入门JAVAEE初阶,Java的发展历程认识什么是cpu,cpu的工作原理,cpu是如何进行计算的,cpu的架构,指令集,cpu的核心,如何提升cpu的算力,cpu的指令,,cup的缓存,cpu的流水线
|
1月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
161 7