使用jstack分析java程序cpu占用率过高的有关问题
使用jstack分析java程序cpu占用率过高的问题
1,使用jps查找出java进程的pid,如3707
2,使用top -p 14292 -H观察该进程中所有线程的CPU占用。
[root@cp01-game-dudai-0100.cp01.baidu.com ~]# top -p 14292 -H top - 22:14:13 up 33 days, 7:29, 4 users, load average: 25.68, 32.11, 33.76 Tasks: 113 total, 2 running, 111 sleeping, 0 stopped, 0 zombie Cpu(s): 68.3%us, 6.3%sy, 0.0%ni, 20.2%id, 0.1%wa, 0.2%hi, 4.9%si, 0.0%st Mem: 65965312k total, 65451232k used, 514080k free, 82164k buffers Swap: 975864k total, 972052k used, 3812k free, 9714400k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 15844 root 15 0 6889m 5.7g 4864 S 20.6 9.1 814:13.29 java 15848 root 15 0 6889m 5.7g 4864 S 13.0 9.1 460:25.17 java 15611 root 15 0 6889m 5.7g 4864 S 12.7 9.1 468:17.77 java 15613 root 15 0 6889m 5.7g 4864 S 11.7 9.1 479:40.45 java 15743 root 15 0 6889m 5.7g 4864 S 11.7 9.1 443:04.80 java 15612 root 15 0 6889m 5.7g 4864 S 11.0 9.1 453:43.68 java 15965 root 15 0 6889m 5.7g 4864 S 10.3 9.1 371:00.33 java 15490 root 15 0 6889m 5.7g 4864 S 7.7 9.1 255:32.74 java 15587 root 15 0 6889m 5.7g 4864 S 7.3 9.1 282:27.58 java 15590 root 15 0 6889m 5.7g 4864 S 7.3 9.1 205:48.37 java 15491 root 15 0 6889m 5.7g 4864 R 6.3 9.1 279:09.08 java 15689 root 15 0 6889m 5.7g 4864 S 5.7 9.1 251:42.36 java 16935 root 15 0 6889m 5.7g 4864 S 5.7 9.1 190:34.37 java 15665 root 15 0 6889m 5.7g 4864 S 5.3 9.1 250:07.34 java 16920 root 15 0 6889m 5.7g 4864 S 5.3 9.1 241:34.50 java 15671 root 15 0 6889m 5.7g 4864 S 5.0 9.1 239:49.97 java 15492 root 15 0 6889m 5.7g 4864 S 4.7 9.1 210:23.09 java 14322 root 16 0 6889m 5.7g 4864 S 4.3 9.1 107:39.61 java 14316 root 16 0 6889m 5.7g 4864 S 4.0 9.1 107:18.43 java 14317 root 16 0 6889m 5.7g 4864 S 4.0 9.1 107:29.13 java 15591 root 15 0 6889m 5.7g 4864 S 4.0 9.1 114:34.90 java 14313 root 16 0 6889m 5.7g 4864 S 3.7 9.1 107:12.70 java 14314 root 15 0 6889m 5.7g 4864 S 3.7 9.1 107:28.05 java 14319 root 16 0 6889m 5.7g 4864 S 3.7 9.1 107:27.43 java 14321 root 15 0 6889m 5.7g 4864 S 3.3 9.1 108:01.12 java 15589 root 15 0 6889m 5.7g 4864 R 3.0 9.1 109:01.91 java 15615 root 15 0 6889m 5.7g 4864 S 3.0 9.1 114:55.29 java 16808 root 15 0 6889m 5.7g 4864 S 2.7 9.1 279:05.03 java 14315 root 15 0 6889m 5.7g 4864 S 2.0 9.1 107:45.00 java 14320 root 15 0 6889m 5.7g 4864 S 2.0 9.1 107:48.30 java 15489 root 15 0 6889m 5.7g 4864 S 1.7 9.1 57:38.46 java 15670 root 15 0 6889m 5.7g 4864 S 1.3 9.1 5:55.43 java 14318 root 15 0 6889m 5.7g 4864 S 0.7 9.1 107:45.88 java 14826 root 15 0 6889m 5.7g 4864 S 0.7 9.1 25:07.64 java
3,找出CPU消耗较多的线程id,如15844,将15844转换为16进制0x3de4,注意是小写哦
4,使用jstack 14292|grep -A 10 0x3de4来查询出具体的线程状态。
[root@cp01-game-dudai-0100.cp01.baidu.com ~]# jstack 14292|grep -A 10 0x3de4 "pool-52-thread-1" prio=10 tid=0x000000005a08e000 nid=0x3de4 waiting on condition [0x00002ae63d917000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x00000006f9a0a110> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987) at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) at java.lang.Thread.run(Thread.java:662)
通过这些线程状态便可基本定位问题之所在。
相关推荐
这篇原创博客“【原创】java程序cpu占用过高问题分析”探讨了如何识别和解决这些问题。 首先,分析CPU占用过高的第一步是获取性能数据。这通常通过Java的JMX(Java Management Extensions)或者监控工具如VisualVM...
在IT领域,特别是系统监控与性能分析中,获取CPU占用率是评估系统健康状况和优化资源分配的关键步骤。本文将详细解析如何使用Java语言来获取CPU占用率,这不仅涉及了基本的Java编程技巧,还深入到了操作系统级别的...
Java 应用 CPU 占用过高问题分析及解决方法 Java 应用程序的 CPU 占用率过高是一个常见的问题,影响着系统的性能和稳定性。在本文中,我们将讨论 Java 应用程序 CPU 占用率过高的原因、分析方法和解决方法。 一、...
在Java编程环境中,当遇到“Java进程CPU占用率高”的问题时,这通常意味着Java应用程序在执行过程中消耗了大量计算资源,可能导致系统响应变慢,甚至出现性能瓶颈。本篇文章将深入探讨这个问题,并提供相关解决方案...
通过上述方法,你可以根据实际需求选择合适的方式来获取Java应用的CPU占用率。在进行性能优化或者问题排查时,这将是一个非常实用的工具。记得在实际应用中遵循最佳实践,确保代码的稳定性和兼容性。
通过JNI,我们可以编写特定于操作系统的C/C++代码来调用系统调用,获取关于CPU使用率和内存占用的数据,然后将这些信息传递回Java应用程序。相比依赖于解析操作系统特定的命令行工具(如Unix的`ps`命令)输出,这种...
在Java编程环境中,当遇到"Java程序CPU占用100%"的问题时,这通常意味着程序中存在性能瓶颈或者死循环,导致CPU资源被过度消耗。为了解决这个问题,我们需要进行一系列的诊断步骤来定位问题所在。以下是详细的排查...
在 Java 应用程序中,CPU 占用过高是一个常见的问题,可能会导致服务器崩溃或应用程序崩溃。因此,快速定位和解决 CPU 占用过高问题是非常重要的。本文将分享 Java 实战 CPU 占用过高问题的排查及解决方法。 排查...
CPU使用率是指在特定时间间隔内,CPU被占用的时间比例,通常以百分比表示。在Linux中,可以通过`/proc/stat`文件获取这些信息。这个文件包含了系统启动以来的CPU使用统计,包括用户进程、系统进程、空闲时间等。 在...
在Linux服务器环境中,Java应用程序可能由于各种原因导致CPU使用率过高,这可能会影响系统的整体性能。要找到占用CPU高的Java代码,我们可以采取一系列步骤来诊断和优化问题。以下是一种详细的方法: 1. **查看系统...
标题“Java通过JNI查看Windows的CPU利用率的问题”涉及到的是Java编程语言如何利用Java Native Interface (JNI) 这一技术来获取Windows操作系统的CPU使用情况。JNI是Java平台标准的一部分,它允许Java代码和其他语言...
有一些工具如Process Explorer(微软出品)或VisualVM(Java应用性能分析工具)能提供更详细的性能分析,帮助定位问题。 8. **资源调度优化**: 对于多核CPU,合理分配任务到不同核心可以有效减少单个核心的负载...
在Java应用程序的运行过程中,有时会遇到进程占用CPU和内存过高导致系统性能下降的问题。针对这类问题,开发者需要进行深入的排查与优化。本压缩包文件包含了一些关键工具和输出,帮助我们理解如何进行这样的排查。 ...
总结来说,处理Java应用CPU过高的问题需要结合系统监控工具和Java自身提供的诊断工具,通过分析线程状态和堆栈信息来定位问题。同时,理解应用程序的运行环境和组件配置也至关重要,例如在Web容器中部署应用时要注意...
当CPU使用率过高,可能导致设备过热、响应变慢或者电池寿命缩短。通过这样的工具,用户可以找出占用CPU资源过多的应用或进程,以便优化设备的性能。 描述中提到的ZIP文件是常见的压缩格式,用于打包多个文件到一个...
近期java应用,CPU使用率一直很高,经常达到,通过以下步骤完美解决,分享一下。 1.jps 获取Java进程的PID。 2.jstack pid >> java.txt 导出CPU占用高进程的线程栈。 3.top -H -p PID 查看对应进程的哪个...
在处理JAVA应用时,经常会遇到CPU占用率过高的问题,这不仅会影响应用程序的性能,还可能导致系统响应缓慢甚至崩溃。本文将基于提供的信息,详细介绍如何在Linux环境下诊断并解决JAVA进程CPU占用率过高的问题。 ###...
在IT行业中,尤其是在服务器管理与优化的领域,Tomcat作为一款广泛应用的Java应用服务器,其性能问题至关重要。本文将深入探讨“Tomcat占用CPU高的原因”这一主题,旨在帮助管理员解决此类问题,提升系统效率。 ...