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编程环境中,当遇到“Java进程CPU占用率高”的问题时,这通常意味着Java应用程序在执行过程中消耗了大量计算资源,可能导致系统响应变慢,甚至出现性能瓶颈。本篇文章将深入探讨这个问题,并提供相关解决方案...
当Java进程CPU占用率过高时,可能的原因包括无限循环、线程阻塞、计算密集型任务或垃圾回收问题等。`44974.stack`文件很可能包含了Java线程堆栈跟踪,通过分析这个文件,我们可以看到各个线程的状态和它们正在执行...
从给定的部分内容中可以看到,`top`命令显示PID为2633的Java进程CPU占用率为300%。这表明该进程内部存在严重的问题,导致了CPU资源的过度消耗。 2. **使用ps命令获取线程详情**: ```shell [root@localhost logs]...
2. **获取Java进程ID**:找到占用CPU高的Java进程后,记下其PID(进程ID)。例如,如果`top`输出中的进程ID是12345,那么我们可以使用`ps`命令获取更多关于该进程的信息: ``` ps -mp 12345 -o comm= ``` 3. **...
通过输入`top`命令,我们可以看到各个进程的CPU和内存使用率,从中找出CPU占用率最高的Java进程。记下该进程的PID(进程ID)。 2. **获取问题线程的TID** 接下来,我们需要找出这个进程中的具体哪个线程导致了CPU...
通过以上方法,你可以深入了解Linux下Java进程及线程对CPU的占用情况,从而进行问题定位和性能优化。在实际操作中,通常会结合多个工具和方法,以便从不同角度全面分析。记得,持续监控和分析是找出问题的关键。
Java问题定位技术涉及到多方面知识点,从JVM到多线程、高并发以及性能调优工具等都是深入理解Java性能问题的核心组成部分。下面详细介绍这些知识点。 首先,JVM(Java虚拟机)是运行Java字节码的虚拟机进程,它是...
有一些工具如Process Explorer(微软出品)或VisualVM(Java应用性能分析工具)能提供更详细的性能分析,帮助定位问题。 8. **资源调度优化**: 对于多核CPU,合理分配任务到不同核心可以有效减少单个核心的负载...
在案例中,`top`命令显示进程ID为31737的进程CPU使用率极高。接着,使用`top -Hp 31737`进一步查看该进程内部各个线程的CPU使用情况,发现线程ID为5322(十六进制为14ca)的线程CPU使用异常。 接下来,为了定位问题...
Java 实战 CPU 占用过高问题的排查及解决 在 Java 应用程序中,CPU 占用过高是一个常见的问题,可能会导致服务器崩溃或应用程序崩溃。因此,快速定位和解决 CPU 占用过高问题是非常重要的。本文将分享 Java 实战 ...
本文将基于提供的信息,详细介绍如何在Linux环境下诊断并解决JAVA进程CPU占用率过高的问题。 #### 一、识别问题所在 1. **查看系统整体状况**:首先通过`top`命令来获取系统当前的整体状态,包括CPU使用情况、内存...
此时,我们需要确定哪些服务进程导致了CPU过载,进而定位到具体是哪个线程及哪段代码导致了CPU占用过高。 #### 三、定位步骤详解 ##### 步骤一:找到最耗CPU的进程 **工具:top** 1. **命令执行**:首先使用`top...
4. **线程分析**:通过`jstack`命令可以获取Java进程的线程快照,找出可能存在的死锁、线程阻塞等问题。 5. **类加载优化**:理解和配置类加载器,避免类加载冲突,合理设置类加载路径,可以提高应用程序的启动速度...
`jstack`是一个用于获取Java进程的线程快照的工具,可以帮助我们了解Java进程在某个时间点上每个线程都在做什么,这对于分析死锁、CPU使用率过高等问题非常有用。 - **基本用法**: - `jstack [pid] > output.txt`...
- **进程监控**:实时显示Java进程的内存使用、CPU占用、线程状态等关键指标,帮助用户了解应用的运行状况。 - **远程诊断**:支持远程连接到其他服务器上的Java进程,进行跨地域的远程管理与诊断,提升了运维的...
总的来说,通过`jstat`和GC日志,我们可以深入理解Java进程的内存行为,定位并解决频繁GC的问题,从而提高应用性能。记住,优化JVM配置是一项细致的工作,需要根据具体应用的特性进行调整,不能一概而论。
本文档介绍了一套专门针对这些常见问题的辅助工具——宕机、高CPU、慢SQL等问题辅助工具v0.1,该工具集主要面向Java应用,并提供了一系列实用的方法和技术来帮助定位和解决问题。 #### 二、关键知识点详解 ##### 1...