`
hbxflihua
  • 浏览: 676215 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java进程CPU过高问题定位

    博客分类:
  • java
阅读更多

 

1、top命令查看过高CPU的pid,命令:top

[root@test-v3 bin]# top
top - 16:44:22 up 173 days,  7:05,  2 users,  load average: 0.74, 0.71, 0.61
Tasks: 150 total,   1 running, 149 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.8%us,  0.4%sy,  0.0%ni, 98.1%id,  0.0%wa,  0.0%hi,  0.0%si,  0.7%st
Mem:   8061116k total,  7924856k used,   136260k free,   234996k buffers
Swap:  4194300k total,   383972k used,  3810328k free,  1191756k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                         
  949 root      20   0 3576m 622m 9852 S  3.3  7.9   1194:48 java                                                                             
 5485 root      20   0 3327m 688m 9804 S  3.3  8.8   1769:07 java                                                                             
  980 root      20   0 3460m 692m  10m S  3.0  8.8   1834:53 java                                                                             
 1012 root      20   0 3393m 668m  10m S  3.0  8.5   1824:38 java                                                                             
14017 root      20   0 2841m 393m 9564 S  2.7  5.0   2079:06 java                                                                             
 1042 root      20   0 3522m 725m   9m S  0.7  9.2 366:09.83 java

 

 

2、定位线程,命令:ps -mp pid -o THREAD,tid,time | sort -rn

[root@test-v3 bin]# ps -mp 949 -o THREAD,tid,time | sort -rn
USER     %CPU PRI SCNT WCHAN  USER SYSTEM   TID     TIME
root      3.2  19    - futex_    -      - 31587 13:37:04
root      2.5   -    - -         -      -     - 19:55:11
root      0.1  19    - futex_    -      -  1849 01:14:46

 

 

3、将线程ID转为 16进制格式,命令:printf "%x\n" tid

[root@test-v3 bin]# printf "%x\n" 31587
7b63

 

 

4、打印堆栈信息 ,命令:jstack pid |grep 十六进制格式tid -A 10

其中-A 10表示查找到所在行的后10行。

[root@test-v3 bin]# cd /usr/java/jdk1.7.0_80/bin
[root@test-v3 bin]# ./jstack 949 |grep 7b63 -A 30
"System Clock" daemon prio=10 tid=0x00007f42904b0800 nid=0x7b63 runnable [0x00007f41f6084000]
   java.lang.Thread.State: TIMED_WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x00000000eca553a8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2082)
	at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1090)
	at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:807)
	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:745)

"http-bio-8084-exec-10" daemon prio=10 tid=0x00007f422c011000 nid=0x210 waiting on condition [0x00007f41f6684000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x00000000ec542870> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
	at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:104)
	at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32)
	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)

"http-bio-8084-exec-9" daemon prio=10 tid=0x00007f422c00f800 nid=0x7229 waiting on condition [0x00007f41f6785000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)

 

 

分享到:
评论

相关推荐

    Java进程cpu占用率高

    在Java编程环境中,当遇到“Java进程CPU占用率高”的问题时,这通常意味着Java应用程序在执行过程中消耗了大量计算资源,可能导致系统响应变慢,甚至出现性能瓶颈。本篇文章将深入探讨这个问题,并提供相关解决方案...

    java进程占用CPU和内存太高问题排查相关测试文件.zip

    当Java进程CPU占用率过高时,可能的原因包括无限循环、线程阻塞、计算密集型任务或垃圾回收问题等。`44974.stack`文件很可能包含了Java线程堆栈跟踪,通过分析这个文件,我们可以看到各个线程的状态和它们正在执行...

    java进程高CPU占用故障排查.txt

    从给定的部分内容中可以看到,`top`命令显示PID为2633的Java进程CPU占用率为300%。这表明该进程内部存在严重的问题,导致了CPU资源的过度消耗。 2. **使用ps命令获取线程详情**: ```shell [root@localhost logs]...

    linux服务器找到占用cpu高的java代码的办法

    2. **获取Java进程ID**:找到占用CPU高的Java进程后,记下其PID(进程ID)。例如,如果`top`输出中的进程ID是12345,那么我们可以使用`ps`命令获取更多关于该进程的信息: ``` ps -mp 12345 -o comm= ``` 3. **...

    70-Java程序CPU占用1001

    通过输入`top`命令,我们可以看到各个进程的CPU和内存使用率,从中找出CPU占用率最高的Java进程。记下该进程的PID(进程ID)。 2. **获取问题线程的TID** 接下来,我们需要找出这个进程中的具体哪个线程导致了CPU...

    linux下查看java进程下线程占用cpu情况

    通过以上方法,你可以深入了解Linux下Java进程及线程对CPU的占用情况,从而进行问题定位和性能优化。在实际操作中,通常会结合多个工具和方法,以便从不同角度全面分析。记得,持续监控和分析是找出问题的关键。

    Java问题定位技术(

    Java问题定位技术涉及到多方面知识点,从JVM到多线程、高并发以及性能调优工具等都是深入理解Java性能问题的核心组成部分。下面详细介绍这些知识点。 首先,JVM(Java虚拟机)是运行Java字节码的虚拟机进程,它是...

    CPU占用高

    有一些工具如Process Explorer(微软出品)或VisualVM(Java应用性能分析工具)能提供更详细的性能分析,帮助定位问题。 8. **资源调度优化**: 对于多核CPU,合理分配任务到不同核心可以有效减少单个核心的负载...

    一次因Java应用造成CPU过高的排查实践过程

    在案例中,`top`命令显示进程ID为31737的进程CPU使用率极高。接着,使用`top -Hp 31737`进一步查看该进程内部各个线程的CPU使用情况,发现线程ID为5322(十六进制为14ca)的线程CPU使用异常。 接下来,为了定位问题...

    java实战CPU占用过高问题的排查及解决

    Java 实战 CPU 占用过高问题的排查及解决 在 Java 应用程序中,CPU 占用过高是一个常见的问题,可能会导致服务器崩溃或应用程序崩溃。因此,快速定位和解决 CPU 占用过高问题是非常重要的。本文将分享 Java 实战 ...

    JAVA分析进程占用过大原因

    本文将基于提供的信息,详细介绍如何在Linux环境下诊断并解决JAVA进程CPU占用率过高的问题。 #### 一、识别问题所在 1. **查看系统整体状况**:首先通过`top`命令来获取系统当前的整体状态,包括CPU使用情况、内存...

    线上服务CPU100%问题快速定位实战

    此时,我们需要确定哪些服务进程导致了CPU过载,进而定位到具体是哪个线程及哪段代码导致了CPU占用过高。 #### 三、定位步骤详解 ##### 步骤一:找到最耗CPU的进程 **工具:top** 1. **命令执行**:首先使用`top...

    Java问题定位技术(书签版)—JVM调优

    4. **线程分析**:通过`jstack`命令可以获取Java进程的线程快照,找出可能存在的死锁、线程阻塞等问题。 5. **类加载优化**:理解和配置类加载器,避免类加载冲突,合理设置类加载路径,可以提高应用程序的启动速度...

    java问题快速定位

    `jstack`是一个用于获取Java进程的线程快照的工具,可以帮助我们了解Java进程在某个时间点上每个线程都在做什么,这对于分析死锁、CPU使用率过高等问题非常有用。 - **基本用法**: - `jstack [pid] &gt; output.txt`...

    Jarboot 是一个强大的Java进程管理、诊断的平台,可以在线管理、监控及诊断本地和远程的Java进程.zip

    - **进程监控**:实时显示Java进程的内存使用、CPU占用、线程状态等关键指标,帮助用户了解应用的运行状况。 - **远程诊断**:支持远程连接到其他服务器上的Java进程,进行跨地域的远程管理与诊断,提升了运维的...

    java jstat 查看哪个进程频繁GC垃圾回收

    总的来说,通过`jstat`和GC日志,我们可以深入理解Java进程的内存行为,定位并解决频繁GC的问题,从而提高应用性能。记住,优化JVM配置是一项细致的工作,需要根据具体应用的特性进行调整,不能一概而论。

    宕机、高cpu、慢sql等问题辅助工具v0.1.pdf

    本文档介绍了一套专门针对这些常见问题的辅助工具——宕机、高CPU、慢SQL等问题辅助工具v0.1,该工具集主要面向Java应用,并提供了一系列实用的方法和技术来帮助定位和解决问题。 #### 二、关键知识点详解 ##### 1...

Global site tag (gtag.js) - Google Analytics