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

相关文章
|
26天前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
102 3
|
1月前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
28天前
|
SQL Java 数据库连接
从理论到实践:Hibernate与JPA在Java项目中的实际应用
本文介绍了Java持久层框架Hibernate和JPA的基本概念及其在具体项目中的应用。通过一个在线书店系统的实例,展示了如何使用@Entity注解定义实体类、通过Spring Data JPA定义仓库接口、在服务层调用方法进行数据库操作,以及使用JPQL编写自定义查询和管理事务。这些技术不仅简化了数据库操作,还显著提升了开发效率。
37 3
|
1月前
|
SQL 监控 Java
技术前沿:Java连接池技术的最新发展与应用
本文探讨了Java连接池技术的最新发展与应用,包括高性能与低延迟、智能化管理和监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,为开发者提供了一份详尽的技术指南。
33 7
|
1月前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
47 3
|
1月前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
58 2
|
1月前
|
缓存 Java 数据库连接
Hibernate:Java持久层框架的高效应用
通过上述步骤,可以在Java项目中高效应用Hibernate框架,实现对关系数据库的透明持久化管理。Hibernate提供的强大功能和灵活配置,使得开发者能够专注于业务逻辑的实现,而不必过多关注底层数据库操作。
18 1
|
28天前
|
弹性计算 Kubernetes Perl
k8s 设置pod 的cpu 和内存
在 Kubernetes (k8s) 中,设置 Pod 的 CPU 和内存资源限制和请求是非常重要的,因为这有助于确保集群资源的合理分配和有效利用。你可以通过定义 Pod 的 `resources` 字段来设置这些限制。 以下是一个示例 YAML 文件,展示了如何为一个 Pod 设置 CPU 和内存资源请求(requests)和限制(limits): ```yaml apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - name: example-container image:
160 1
|
1月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
287 2
|
3月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
193 5