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

分析java应用占用cpu高的线程

    博客分类:
  • jvm
 
阅读更多

一、使用top+jstack定位java应用CPU占用高的线程步骤

  1. ps axu | grep java 或者直接jps得到进程号
  2. top  -p   java进程号
  3. 在top界面按小写的s改变默认刷新值到0.5s
  4. 在shift +h 键,按线程进行显示
  5. 到现在为止,基本可以看到是哪个线程占用CPU较高了
  6. 假如线程号为21646,转换为16进制  548e
  7. jstack  java进程号 | grep -A  20  java线程号16进制

二、使用top+jstack定位java应用CPU占用高的线程详细说明

1.top查找出哪个进程消耗的cpu高


PID

USER

PR

NI

VIRT

RES

SHR

S

%CPU

%MEM

TIME+

COMMAND

21125

co_ad2

18

0

1817m

776m

9712

S

3.3

4.9

12:03.24

java

5284

co_ad

21

0

3028m

2.5g

9432

S

1.0

16.3

6629:44

java

21994

mysql

15

0

449m

88m

5072

S

1.0

0.6

67582:38

mysqld

8657

co_sparr

19

0

2678m

892m

9220

S

0.3

5.7

103:06.13

java

 这里我们分析21125这个java进程。

2.top中shift+h查找出哪个线程消耗的cpu高

PID

USER

PR

NI

VIRT

RES

SHR

S

%CPU

%MEM

TIME+

COMMAND

21233

co_ad2

15

0

1807m

630m

9492

S

1.3

4.0

0:05.12

java

20503

co_ad2_s

15

0

1360m

560m

9176

S

0.3

3.6

0:46.72

java

21134

co_ad2

15

0

1807m

630m

9492

S

0.3

4.0

0:00.72

java

22673

co_ad2

15

0

1807m

630m

9492

S

0.3

4.0

0:03.12

java

 

这里我们分析21233这个线程,并且注意的是,这个线程是属于21125这个进程的。

3.jstack查找这个线程的信息
jstack [进程]|grep -A 10 [线程的16进制]
即:jstack  21125 |grep -A  10  52f1 

 

-A 10表示查找到所在行的后10行。21233转换为16进制52f1,注意字母是小写。
结果:

写道
"http-8081-11" daemon prio= 10 tid= 0x00002aab049a1800 nid= 0x52f1 in Object.wait() [ 0x0000000042c75000 ]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:485 )
at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:416 )

 说不定可以一下子定位到出问题的代码。

 

三、找出占用cpu高的java线程脚本

写道
#!/bin/bash

typeset top=${1:-10}
typeset pid=${2:-$(pgrep -u $USER java)}
typeset tmp_file=/tmp/java_$pid_$$.trace

$JAVA_HOME/bin/jstack $pid > $tmp_file
ps H -eo user,pid,ppid,tid,time,%cpu --sort=%cpu|tail -$top|awk '$2==pid{print $4"\t"$6}' pid=$pid|while read line;
do
typeset nid="0x"$(echo "$line"|awk '{print $1}'|xargs -I{} echo "obase=16;{}"|bc|tr 'A-Z' 'a-z')
typeset cpu=$(echo "$line"|awk '{print $2}')
cat $tmp_file|awk '/nid='"$nid"'/,/^$/{print $0"\t"(isF++?"":"cpu="'"$cpu"'"%");}'
done;

rm -f $tmp_file

 四、jtop

https://code.google.com/p/hatter-source-code/wiki/jtop

分享到:
评论

相关推荐

    【原创】java程序cpu占用过高问题分析

    总之,解决Java程序CPU占用过高问题需要多方面的排查和优化,包括但不限于源码优化、线程分析、内存管理、垃圾收集策略调整以及外部资源的优化。通过持续监控、细致的分析和有针对性的改进,可以有效地提高Java应用...

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

    通过以上步骤,我们可以有效地找出并解决Linux服务器上Java应用占用CPU过高的问题。记得在处理过程中保持耐心和细致,因为性能问题往往需要深入分析才能找到根本原因。同时,定期的性能测试和代码审查也是预防此类...

    用java获取CPU占用率

    在IT领域,特别是系统监控与性能分析中,获取CPU占用率是评估系统健康状况和优化资源分配的关键步骤。本文将详细解析如何使用Java语言来获取CPU占用率,这不仅涉及了基本的Java编程技巧,还深入到了操作系统级别的...

    java应用cpu占用过高问题分析及解决方法

    Java 应用 CPU 占用过高问题分析及解决方法 Java 应用程序的 CPU 占用率过高是一个常见的问题,影响着系统的性能和稳定性。在本文中,我们将讨论 Java 应用程序 CPU 占用率过高的原因、分析方法和解决方法。 一、...

    CPU占用高

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

    Java进程cpu占用率高

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

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

    在Java应用程序的运行过程中,有时会遇到进程占用CPU和内存过高导致系统性能下降的问题。针对这类问题,开发者需要进行深入的排查与优化。本压缩包文件包含了一些关键工具和输出,帮助我们理解如何进行这样的排查。 ...

    用java获取cpu占用

    通过上述方法,你可以根据实际需求选择合适的方式来获取Java应用的CPU占用率。在进行性能优化或者问题排查时,这将是一个非常实用的工具。记得在实际应用中遵循最佳实践,确保代码的稳定性和兼容性。

    70-Java程序CPU占用1001

    - **线程泄露**:检查是否存在未正确关闭的线程,它们可能一直在后台运行并占用CPU资源。 - **数据库或其他I/O操作**:确认是否因为等待I/O操作完成而导致CPU占用过高。 通过对以上步骤的分析,我们通常能够定位到...

    分析tomcat占用cpu高的原因

    通过以上分析和解决策略,我们可以有效地排查和处理Tomcat占用CPU高的问题,保证应用的稳定性和性能。在实际操作中,每个环境都有其特殊性,因此要具体情况具体分析,确保找到最合适的解决方案。

    JVM---jstack分析Java线程CPU占用,线程死锁的解决

    在开发和运维过程中,有时会遇到Java应用的性能问题,如线程CPU占用过高或者线程死锁。这时,我们就需要用到JVM提供的工具,如`jstack`,来帮助诊断和解决问题。 `jstack` 是JDK自带的一个命令行工具,它能够打印出...

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

    总结来说,处理Java应用CPU过高的问题需要结合系统监控工具和Java自身提供的诊断工具,通过分析线程状态和堆栈信息来定位问题。同时,理解应用程序的运行环境和组件配置也至关重要,例如在Web容器中部署应用时要注意...

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

    在日常的运维与开发工作中,经常遇到Java应用出现高CPU占用的问题。这类问题不仅会影响系统的稳定性和响应速度,还可能导致服务不可用。因此,对于此类故障的快速定位和解决变得尤为重要。下面将详细介绍如何进行...

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

    例如,`jps` 可以显示运行的Java应用程序的进程ID。 3. **`top` 命令**: - `top` 提供了一个实时的视图,显示了系统资源的使用情况,包括CPU和内存。通过`top`,你可以看到哪个Java进程占用了最多的CPU。 4. **`...

    CPU 高消耗排查

    - 通过分析`cpu1128.log`中的信息,可以找出占用CPU较高的线程正在执行的任务,进而判断其是否正常工作或是存在性能瓶颈。 #### 四、进一步分析线程 1. **转换线程ID为十六进制格式** - 在某些情况下,我们可能...

    教你找出 运行java项目,使cpu 100%,如何排查出是哪个jar包的哪个线程导致的

    最后,学习如何查看和分析`jstack`生成的Dump日志对于长期优化Java应用性能至关重要。通过深入理解这些工具和方法,你可以有效地预防和解决Java项目运行时CPU使用率过高的问题,从而确保应用程序的稳定性和效率。

    java获得CPU使用率.doc

    ### Java 获取 CPU 使用率及内存信息 #### 一、背景介绍 在计算机系统管理与监控领域,了解系统的CPU使用率及内存使用情况是至关重要的。对于Java开发者来说,能够通过编程方式获取这些信息有助于更好地管理和优化...

    4JAVA编程高级-多线程编程

    ### JAVA编程高级-多线程编程 #### 一、多线程简介 多线程编程是一种软件技术,它允许在单个程序内并发执行多个控制流。...掌握好Java中的多线程机制,可以帮助开发者更好地设计和实现高效的应用程序。

Global site tag (gtag.js) - Google Analytics