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

Linux下java进程CPU占用率高-分析方法

阅读更多
今天登陆同事的一台gateway 开始以为hive环境登陆不了了,仔细一看看了下是因为机器很卡,我每次等几秒没登陆就ctrl+c了,看了下是有个java进程cpu:340.4%  mem:14.6%
一般解决方法是通过top命令找出消耗资源高的线程id,利用strace命令查看该线程所有系统调用

1. 通过top命令找到可疑进程PID
top 一下

可以看出java进程CPU利用率一直保持100%,稳居不下,找到PID 24138

2. 找出消耗资源最高的线程

top -H -p  29580  可以不用第一步,直接执行命令 top -H ,就可以查看到消耗资源最高的线程
top - 20:42:01 up 633 days,  9:30,  9 users,  load average: 6.75, 8.32, 15.86
Tasks:  28 total,   2 running,  26 sleeping,   0 stopped,   0 zombie
Cpu(s): 42.4%us,  4.3%sy,  0.0%ni, 53.1%id,  0.0%wa,  0.0%hi,  0.1%si,  0.1%st
Mem:   7680000k total,  5774940k used,  1905060k free,   400792k buffers
Swap:  2096472k total,   876580k used,  1219892k free,  1727652k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                           
29679 baishou   16   0 1560m 1.1g  18m R 72.0 15.3 115:41.08 java                                                                                                              
29678 baishou   15   0 1560m 1.1g  18m R 63.3 15.3 118:44.99 java                                                                                                              
29673 baishou   15   0 1560m 1.1g  18m S  1.0 15.3   0:59.72 java                                                                                                              
29677 baishou   15   0 1560m 1.1g  18m S  1.0 15.3   1:01.34 java                                                                                                              

3. 查看这个线程所有系统调用
strace -p 29679
read(114, "\0\225\0\0\6\0\0\0\0\0\10\0\0\4\3\0\0\0p\365\1_\0\0\0\0\0\0\0\0\0\4"..., 2064) = 149
write(114, "\7\333\0\0\6\0\0\0\0\0\3\201r\4\0\0\0\0\0\0\0 B\25\274\252*\0\0\275.\0"..., 2011) = 2011
write(114, "\7\333\0\0\6\0\0\0\0\0Adddddc\2\301!\4\302dQQ\3\300R\37\3\300c"..., 2011) = 2011
write(114, "\7\333\0\0\6\0\0\0\0\0000\6\305\6\1JdK\ttb1521841\0010\1\200"..., 2011) = 2011
write(114, "\7\333\0\0\6\0\0\0\0\0000\6\305\6\1K6\27\ttb1533113\0010\1\200"..., 2011) = 2011
write(114, "\7\333\0\0\6\0\0\0\0\0<\0|0\6\305\6\1L\23\20\ttb1518437\1"..., 2011) = 2011
write(114, "\7\333\0\0\6\0\0\0\0\0\0010\1\200\1\200\2\301)\1\200\2\301\2\1\200\1\200\1\200\1\200"..., 2011) = 2011
write(114, "\0\34\0\0\6\0\0\0\0\0\200\1\200\1\200\1\200\n\300\31\20F\10\27#\23\23)", 28) = 28
read(114, "\0\225\0\0\6\0\0\0\0\0\10\0\0\4\3\0\0\0q\365\1_\0\0\0\0\0\0\0\0\0\4"..., 2064) = 149
write(114, "\7\333\0\0\6\0\0\0\0\0\3\201s\4\0\0\0\0\0\0\0 B\25\274\252*\0\0\311.\0"..., 2011) = 2011

发现有大量写操作,应该是由datax任务在跑。

+++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++如果是web应用,可以继续打印线程的堆栈信息+++++++++
将需要的线程ID转换为16进制格式:
printf "%x\n" 29679
73ef

最后打印线程的堆栈信息:
jstack 29679|grep 73ef -A 30



参考:http://blog.csdn.net/delphiwcdj/article/details/7387325
分享到:
评论
1 楼 xiemeikj 2014-06-20  

相关推荐

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

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

    CPU占用高

    标题“CPU占用高”指的是计算机或服务器的中央处理器在运行过程中...通过以上分析,我们可以根据具体情况采取相应的解决措施,降低CPU占用率,提高系统性能。记住,持续监控系统状态和定期维护是预防CPU占用高的关键。

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

    4. **分析JStack日志**:打开`jstack.log`,寻找CPU占用率高的线程。线程堆栈中显示的调用路径就是当前正在执行的代码路径。如果某个线程的堆栈中有很多重复的调用,那很可能就是问题所在。 5. **代码审查**:根据`...

    CPU占用率检测模块.rar

    CPU占用率检测模块是计算机系统监控中的重要组成部分,主要用于实时监测和分析计算机处理器的使用情况。这个模块能够帮助用户理解系统的性能瓶颈,优化系统资源分配,以及排查可能导致系统响应变慢或卡顿的问题。...

    控制cpu的占用率

    了解这些因素后,我们可以通过以下方法控制CPU占用率: 1. **优化代码**:针对CPU密集型任务,可以使用更高效的算法,减少不必要的计算。例如,使用哈希表替代线性搜索,减少循环次数等。 2. **调整线程数量**:...

    Linux系统中CPU占用率较高问题排查思路与解决方法

    在某个生产环境的Java进程中,CPU占用率达到300%。首先,通过`ps -mp 2633 -o THREAD,tid,time | sort -rn`找到CPU使用率最高的线程(TID 3626)。接着,将3626转换为16进制(e18),再用`jstack 2633 | grep "e18" ...

    CPU 高消耗排查

    - 当发现某个Java进程的CPU消耗异常时,可以使用`jstack`来进一步分析线程的具体行为。 2. **获取线程堆栈信息** - 命令示例:`[root@3server ~]# jstack 6633 &gt; cpu1128.log` - 这里的`6633`是指需要分析的Java...

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

    在Java开发过程中,有时会遇到项目运行时CPU占用率达到100%的问题,这可能是由于某个线程的无限循环、阻塞或者资源消耗过大导致的。以下是一套详细的排查步骤来帮助你找出是哪个jar包的哪个线程造成了这个问题。 ...

    java在cpu的占有率

    - **对于 Linux 系统**:通过读取 `top` 命令的输出来获取 CPU 占用率。 ##### `getMonitorInfoBean` 该方法用于构造一个 `MonitorInfoBean` 对象,用于返回系统的监控信息,如内存使用情况、CPU 使用率、线程数量...

    Android 查看CUP占用率

    #### 二、查看每个进程CPU占用率的方式 在Android平台上,可以通过多种方式来查看每个进程的CPU占用率。下面将逐一介绍这些方法: ##### 1. 使用`adb shell top` `adb shell top`命令是查看系统当前运行进程及其...

    记一次tomcat进程cpu占用过高的问题排查记录

    问题发生在Linux环境下,一个Tomcat Web服务的CPU占用率超过200%,导致请求无法响应。在排查过程中,作者首先通过`jps`命令找到JVM进程,接着使用`jstack`查看线程状态,发现大量log4j线程被阻塞在等待状态。这可能...

    java引起的linux服务器性能问题查找

    3. **定位高CPU占用线程**:在切换到线程模式后,可以观察到哪些线程的CPU占用率异常高。通过这种方式,可以快速锁定问题线程。 #### 二、使用jstack获取线程堆栈信息 1. **获取线程ID**:在top命令中找到高CPU...

    weblogic内存占用过大调优

    - 通过`top`可以查看各个进程的CPU和内存占用情况,以便定位到具体是哪个进程导致内存占用过高。 - `vmstat`命令可以帮助我们了解系统的整体性能状况,包括CPU利用率、内存交换情况等。 - 监控系统交换空间(swap...

    动态显示CPU利用率

    这些工具不仅能提供总体的CPU利用率,还能细分到各个进程,以便分析哪个程序占用了大量的CPU资源。 在编程层面,可以使用各种编程语言的库来实现动态显示CPU利用率。例如,Python有psutil库,Java有Java Management...

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

    本文将深入探讨一次由于Java应用导致CPU占用过高的排查实践过程。 首先,当发现应用CPU使用率异常时,第一步是确认是否真的是计算密集型任务导致的。在大多数情况下,CPU高负荷往往是由于程序中的逻辑错误,如死...

    获得进程CPU信息的代码集合

    以下代码展示了如何获取当前Java进程的CPU使用率和内存占用: ```java import java.lang.management.ManagementFactory; import java.lang.management.MemoryMXBean; import java.lang.management.MemoryUsage; ...

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

    当Java应用的CPU占用率飙高时,可能导致系统响应变慢甚至无法正常处理新请求。以下是一些分析步骤: 1. **模拟问题**:首先,我们可以编写一个包含死循环的Java程序,使CPU使用率上升。 2. **观察CPU占用**:在...

    JAVA性能分析

    当发现Java应用程序CPU占用率异常高时,首先可以通过Linux中的`top`命令来检查进程情况。具体步骤如下: 1. **运行top命令**: 输入`top`回车。 2. **定位Java进程**: 在显示的进程中找到Java进程对应的PID(Process...

    用jni获得cpu和内存使用率

    在Linux环境下,CPU使用率可以通过读取`/proc/stat`文件得到,其中包含了系统和各个进程的CPU时间统计。内存使用率则可以通过读取`/proc/meminfo`文件获取,这个文件提供了内存的总量和已使用的详细信息。在C++代码...

Global site tag (gtag.js) - Google Analytics