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

相关文章
|
3天前
|
安全 Java API
Java 泛型在安卓开发中的应用
在Android开发中,Java泛型广泛应用于集合类、自定义泛型类/方法、数据绑定、适配器及网络请求等场景,有助于实现类型安全、代码复用和提高可读性。例如,结合`ArrayList`使用泛型可避免类型转换错误;自定义泛型类如`ApiResponse<T>`可处理不同类型API响应;RecyclerView适配器利用泛型支持多种视图数据;Retrofit结合泛型定义响应模型,明确数据类型。然而,需注意类型擦除导致的信息丢失问题。合理使用泛型能显著提升代码质量和应用健壮性。
|
2天前
|
JavaScript 安全 Java
谈谈UDP、HTTP、SSL、TLS协议在java中的实际应用
下面我将详细介绍UDP、HTTP、SSL、TLS协议及其工作原理,并提供Java代码示例(由于Deno是一个基于Node.js的运行时,Java代码无法直接在Deno中运行,但可以通过理解Java示例来类比Deno中的实现)。
14 1
|
12天前
|
Java 测试技术
Java接口的生产环境应用注意点
在Java生产环境中,合理使用接口对提升代码质量至关重要。设计接口时应遵循单一职责原则,采用清晰命名,并控制方法数量。默认方法应谨慎使用,避免与实现类产生冲突。通过版本化管理接口更新,确保向后兼容。实现接口时需明确行为,保持实现与接口分离,利用多态增强灵活性。关注性能影响,适当文档注释及充分测试确保接口稳定可靠。综合运用这些策略,可以显著提高系统的可扩展性和维护性。
|
14天前
|
Java API
Java中的Lambda表达式及其应用
本文将深入探讨Java中的Lambda表达式,通过简洁易懂的语言和示例代码,帮助读者理解Lambda表达式的定义、优势以及在实际开发中的应用。同时,我们将解析一些常见的使用场景,并展示如何利用Lambda表达式简化代码,提高编程效率。
21 2
|
2天前
|
监控 并行计算 数据处理
构建高效Python应用:并发与异步编程的实战秘籍,IO与CPU密集型任务一网打尽!
在Python编程的征途中,面对日益增长的性能需求,如何构建高效的应用成为了每位开发者必须面对的课题。并发与异步编程作为提升程序性能的两大法宝,在处理IO密集型与CPU密集型任务时展现出了巨大的潜力。今天,我们将深入探讨这些技术的最佳实践,助你打造高效Python应用。
9 0
|
12天前
|
Java 数据中心 微服务
Java高级知识:线程池隔离与信号量隔离的实战应用
在Java并发编程中,线程池隔离与信号量隔离是两种常用的资源隔离技术,它们在提高系统稳定性、防止系统过载方面发挥着重要作用。
13 0
|
14天前
|
Java 开发者 UED
Java中的异常处理机制:理解与应用
本文深入探讨Java的异常处理机制,通过实例解析如何有效使用try-catch-finally块、throws关键字及自定义异常,以提升代码的健壮性和可维护性。我们将从基础概念入手,逐步过渡到高级应用,为Java开发者提供全面指导。
|
13天前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
81 5
|
11天前
|
Prometheus Kubernetes 监控
使用kubectl快速查看各个节点的CPU和内存占用量
在Kubernetes集群中,安装metrics-server,并使用kubectl快速查看集群中各个节点的资源使用情况。
30 0
|
2月前
|
存储 监控 Docker
如何限制docker使用的cpu,内存,存储
如何限制docker使用的cpu,内存,存储