上次分析系统中占用CPU高的问题,得到一些使用Java自身调试工具的经验,与大家分享。
(1)使用top命令找出占用cpu最高的JAVA进程PID:28174
(2)如下命令找出占用cpu最高的线程
top -Hp 28174 -d 1 -n 1
32694 root 20 0 3249m 2.0g 11m S 2 6.4 3:31.12 java
28175 root 20 0 3249m 2.0g 11m S 0 6.4 0:00.06 java
28176 root 20 0 3249m 2.0g 11m S 0 6.4 1:40.79 java
28177 root 20 0 3249m 2.0g 11m S 0 6.4 1:41.12 java
28178 root 20 0 3249m 2.0g 11m S 0 6.4 1:41.11 java
28179 root 20 0 3249m 2.0g 11m S 0 6.4 1:41.33 java
28180 root 20 0 3249m 2.0g 11m S 0 6.4 1:41.58 java
28181 root 20 0 3249m 2.0g 11m S 0 6.4 1:40.36 java
28182 root 20 0 3249m 2.0g 11m S 0 6.4 1:41.02 java
28183 root 20 0 3249m 2.0g 11m S 0 6.4 1:40.96 java
28184 root 20 0 3249m 2.0g 11m S 0 6.4 4:38.30 java
28185 root 20 0 3249m 2.0g 11m S 0 6.4 0:00.46 java
28186 root 20 0 3249m 2.0g 11m S 0 6.4 0:01.83 java
28187 root 20 0 3249m 2.0g 11m S 0 6.4 0:00.00 java
28189 root 20 0 3249m 2.0g 11m S 0 6.4 0:00.01 java
28190 root 20 0 3249m 2.0g 11m S 0 6.4 0:49.01 java
(3)打印占CPU最高JAVA进程28174的堆栈信息
/usr/java/jdk1.6.0_21/bin/jstack 28174 > /root/mss/41-100javathreaddump.txt
(4)占CPU最高线程32694换算成16进制到文档中寻找对应线程
7fb6
"MSXMLProcessorThread" prio=10 tid=0x00002b469923a800 [color=darkred]nid=0x7fb6[/color] sleeping[0x00002b46b0200000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at com.adventnet.management.xml.MSXmlProcessor.listen(MSXmlProcessor.java:279)
at com.adventnet.management.xml.MSXmlProcessor.run(MSXmlProcessor.java:264)
at java.lang.Thread.run(Thread.java:619)
以上过程手工进行,虽然不如Jprofiler和java自带的可视化工具那么直观,但是能够解决问题!尤其是在不能使用远程调试工具的时候,能够提供最大的帮助。
分享到:
相关推荐
2. **获取Java进程ID**:找到占用CPU高的Java进程后,记下其PID(进程ID)。例如,如果`top`输出中的进程ID是12345,那么我们可以使用`ps`命令获取更多关于该进程的信息: ``` ps -mp 12345 -o comm= ``` 3. **...
通过以上方法,你可以深入了解Linux下Java进程及线程对CPU的占用情况,从而进行问题定位和性能优化。在实际操作中,通常会结合多个工具和方法,以便从不同角度全面分析。记得,持续监控和分析是找出问题的关键。
首先,Java程序需要识别运行的操作系统类型,因为不同的操作系统(如Windows和Linux)提供了不同的API或系统调用来访问CPU占用信息。在提供的代码示例中,`System.getProperty("os.name")`用于获取操作系统名称,...
这有助于我们识别占用CPU资源最多的程序。 2. **恶意软件检查**: 高CPU占用有时可能由病毒、木马或恶意软件引起。运行反病毒扫描并确保操作系统和所有软件的更新是最新的,可以防止这类问题。 3. **系统服务与...
本文将深入探讨如何使用Java来实现Linux下的CPU使用率监控。通过理解这个主题,开发者可以更好地掌握系统性能,及时发现并解决问题,确保服务的稳定运行。 首先,我们需要了解Linux系统中CPU使用率的基本概念。CPU...
线上Java应用,在业务高峰期的时候经常出现CPU跑高,需要查看实时的线程占用cpu情况,下面是一个很好用的脚本,可以快速导出每个线程的占用CPU情况,结合jstack日志,排查到具体的线程类名。 一、首先获得jvm的进程...
一旦找到CPU占用高的Java进程,你可以使用`jstack`工具来获取该进程的线程堆栈信息。`jstack`会输出一个包含所有线程状态的文本文件,其中第一行显示的是dump的时间,紧接着是虚拟机信息,然后列出所有线程的状态。...
- 通过这种方式,我们可以发现某个进程内部哪个线程占用CPU最高,比如这里发现PID为5159的线程占用非常高。 #### 三、使用`jstack`进行线程堆栈分析 1. **`jstack`工具简介** - `jstack`是Java自带的一个诊断工具...
1. **获取线程ID**:在top命令中找到高CPU占用的线程后,记录下该线程的PID(进程ID)。 2. **导出线程堆栈**:接下来,使用`jstack`工具来获取该线程的堆栈信息。例如,如果目标线程所在的进程ID为1117,则可以执行...
4. **分析线程状态**:使用文本编辑器或专用工具(如Windows下的ProcessExplorer)查看生成的`cpu.txt`文件,找到CPU占用高的线程,分析其状态和调用堆栈,定位到引起高CPU占用的方法。 ### 分析线程死锁 线程死锁...
例如,如果发现某个进程占用CPU过高,可以通过阅读其源码,优化相关函数或算法,降低CPU消耗。 至于【压缩包子文件的文件名称列表】中的"cpu占用时间",这可能是某种日志文件或性能测试数据。通过分析这些数据,...
本文将深入探讨一次由于Java应用导致CPU占用过高的排查实践过程。 首先,当发现应用CPU使用率异常时,第一步是确认是否真的是计算密集型任务导致的。在大多数情况下,CPU高负荷往往是由于程序中的逻辑错误,如死...
按大写字母`P`,系统会按照CPU使用率对进程进行排序,让你快速找到占用CPU最多的进程。 例如,假设我们发现PID为10765的进程是最耗CPU的。接下来,我们需要进一步查找该进程中哪个线程导致了CPU使用率高。使用`top ...
1. 使用`top`命令,按下`Shift+p`对进程按CPU使用率进行排序,找到占用CPU最多的进程的PID(进程ID)。 2. 接下来,使用`top -H -p [进程id]`查看该进程内部的线程及其CPU使用情况,找出消耗资源最严重的线程ID。 3....
jProfiler7作为一个强大的Java性能诊断工具,对于任何Linux环境下的Java开发人员来说都是必备的。熟练掌握其使用,可以有效地提升Java应用程序的性能,减少资源浪费,防止内存泄漏,从而提高整体系统的稳定性和效率...
本文将基于提供的信息,详细介绍如何在Linux环境下诊断并解决JAVA进程CPU占用率过高的问题。 #### 一、识别问题所在 1. **查看系统整体状况**:首先通过`top`命令来获取系统当前的整体状态,包括CPU使用情况、内存...
本篇文章将深入探讨嵌入式Linux环境下Java虚拟机的分析与设计,旨在为读者提供对这一领域的全面理解。 首先,我们来了解嵌入式系统的基本概念。嵌入式系统是指用于特定功能的计算机系统,它们通常被集成到更大的...
获取当前jvm占用CPU的线程, 分析性能问题利器。