近几天现场报故障过来,说A系统(java b/s应用,有较多后台线程处理任务)在现网占用系统资源非常严重,而服务器相对也比较强劲,8核CPU,16G内存,相对于我们的应用从硬件来说远远足够。
首先,top命令看一下情况,果然名为java的进程,时不时占到500%甚至700%的cpu,mpstat -P ALL 1 ,看了一会cpu情况,8个cpu(核)也基本都没闲的时候,看来问题比较严重了。我ssh到服务器敲些命令反应也不如之前快。
排查步骤:
一、使用之前的top或者jdk自带的jps,找到这个java进程的PID,假设为 2370.
二、继续使用top命令,但这次是看这个进程包含的线程cpu使用情况,命令:top -H -P 2370 -d 1 -n3>javaTop.log,这样就把这个java进程包含的线程资源使用情况重定向到文件了,-d 1表示1秒刷新一次,且加上它才能重定向到文件 。-n 3 表示采样3次。
结果大概是这样:
其中可以看到这些线程的cpu占用都不太正常,当然这里要注意前面的PID,这个有用。
三、使用kill -3 2370 赶紧做次threadDump,看java线程栈情况,当然也可以自己写个脚本连续间隔着做几次,这样更好排除问题。做完threadDump后,把它们复制出来,可以直接用文本工具分析,大概像这样:
图中与公司信息相关的包名已经抹掉了。图中的nid,是根据第二步的top中的PID转换为16进制后,查到的。
四、其实就是第3图中定位方法。在第二步获取的结果中,找几个PID,都转换为16进制,然后到第三步的threadDump中查找,它对应的是threadDump中的nid,多查几个更能准确说明问题。像我这定位下来,就是第三步图中的结果,即我们去获取某个目录下的文件目录个数消耗了较多的CPU。
五、这里就是根据第四步分析的threadDump,看那个类的哪行代码是在做什么事。我们这就是IO操作,去计算某个目录下文件个数。我叫现场人员看了下那个目录,有几万个文件,而我们的代码又是个递归的判断,在这里性能非常低下,并导致CPU占用奇高无比。
六、其实没什么好说的,定位了问题,就分析下如何解决了。
相关推荐
在Java编程中,CPU占用过高是一个常见的性能问题,可能由多种因素引起,包括但不限于不当的算法选择、线程过多、循环优化不足、垃圾回收(GC)问题、内存泄漏或资源竞争等。这篇原创博客“【原创】java程序cpu占用过...
Linux系统中java进程占用cpu资源过高,分析(自用,需要私聊)
java cpu 内存占用高 问题 模拟并排查 https://blog.csdn.net/jiankunking/article/details/79749836 https://blog.csdn.net/jiankunking/article/details/79749483
Java线程CPU占用高原因排查方法,Java线程CPU占用高原因排查方法
当用户量过大,或服务器性能不足以支持大用户量,但同时又得不到扩容的情况下,进行性能分析,并对系统、应用、程序进行优化显得尤为重要,也是节省资源的一种必不可少的手段。目前大多数运维产品都基于JAVA语言开发...
在Java应用程序的运行过程中,有时会遇到进程占用CPU和内存过高导致系统性能下降的问题。针对这类问题,开发者需要进行深入的排查与优化。本压缩包文件包含了一些关键工具和输出,帮助我们理解如何进行这样的排查。 ...
本文将深入探讨一次由于Java应用导致CPU占用过高的排查实践过程。 首先,当发现应用CPU使用率异常时,第一步是确认是否真的是计算密集型任务导致的。在大多数情况下,CPU高负荷往往是由于程序中的逻辑错误,如死...
Java 实战 CPU 占用过高问题的排查及解决 在 Java 应用程序中,CPU 占用过高是一个常见的问题,可能会导致服务器崩溃或应用程序崩溃。因此,快速定位和解决 CPU 占用过高问题是非常重要的。本文将分享 Java 实战 ...
这篇文章主要记录了一次排查Tomcat进程CPU占用过高的问题的过程。问题发生在Linux环境下,一个Tomcat Web服务的CPU占用率超过200%,导致请求无法响应。在排查过程中,作者首先通过`jps`命令找到JVM进程,接着使用`...
在Java编程环境中,获取CPU占用率是常见的系统监控任务,这对于性能分析、故障排查或资源管理至关重要。要实现这一功能,通常需要利用Java提供的操作系统接口,例如Java Management Extensions (JMX) 或者 sun.misc...
- **线程泄露**:检查是否存在未正确关闭的线程,它们可能一直在后台运行并占用CPU资源。 - **数据库或其他I/O操作**:确认是否因为等待I/O操作完成而导致CPU占用过高。 通过对以上步骤的分析,我们通常能够定位到...
### Java进程高CPU占用故障排查 在日常的运维与开发工作中,经常遇到Java应用出现高CPU占用的问题。这类问题不仅会影响系统的稳定性和响应速度,还可能导致服务不可用。因此,对于此类故障的快速定位和解决变得尤为...
- 通过分析`cpu1128.log`中的信息,可以找出占用CPU较高的线程正在执行的任务,进而判断其是否正常工作或是存在性能瓶颈。 #### 四、进一步分析线程 1. **转换线程ID为十六进制格式** - 在某些情况下,我们可能...
在日常的软件开发与维护过程中,针对JVM(Java虚拟机)的性能调优和问题排查是非常关键的一环。本手册旨在提供一套全面且实用的JVM问题排查方法和技术,帮助开发者快速定位并解决JVM相关的性能瓶颈或异常情况。 ###...
java进程占用CPU过高常见的两种情况: 代码中有死循环或者接近死循环的操作 快速创建大量临时变量,导致频繁触发gc回收 问题解决: 1、用top命令找到cpu占用率最高的进程号是8958 top 2、top -Hp pid 命令找到该...
### Java常见问题排查 #### NoSuchMethodException **出现原因:** `NoSuchMethodException`异常通常发生在尝试通过反射机制调用类的方法时,该类没有对应签名的方法。这可能是因为类库版本不一致导致方法签名的...
在Java开发过程中,有时会遇到项目运行时CPU占用率达到100%的问题,这可能是由于某个线程的无限循环、阻塞或者资源消耗过大导致的。以下是一套详细的排查步骤来帮助你找出是哪个jar包的哪个线程造成了这个问题。 ...
在Linux系统管理中,CPU占用率过高是一个常见的问题,它可能导致系统性能下降,甚至影响到服务的稳定性。本文主要探讨了如何排查和解决Linux系统中CPU利用率高的问题,包括两种常用的方法以及一个实际的故障排查案例...
系统异常通常指的是CPU占用率过高、磁盘使用率100%、系统可用内存低等情况;而业务异常则可能包括服务运行一段时间自动退出、服务间调用时间过长、多线程并发异常、死锁等问题。在进行故障排查时,第一步便是问题的...