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

标签: linux java 进程 | 发表时间:2014-01-04 20:11 | 作者:安铁辉
出处:http://www.iteye.com
今天登陆同事的一台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


已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [linux java 进程] 推荐:

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

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

Linux进程关系

- - 博客园_首页
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明. Linux的进程相互之间有一定的关系. 比如说,在 Linux进程基础中,我们看到,每个进程都有父进程,而所有的进程以init进程为根,形成一个树状结构. 我们在这里讲解进程组和会话,以便以更加丰富的方式了管理进程.

python/java操作linux系统命令

- 天朝小民 - ITeye论坛最新讨论
看来python的确是做为脚本语言来使用的话,非常的方便. 来看一个处理linux命令的脚本. #coding:utf-8 import os import commands ''' 采用os.popen(cmd)来执行命令,要获取输出,需要read()来读取 ''' cmd = 'ls -l' values = os.popen(cmd).read() #print values for v in values.split('\n'):.

Linux中如何杀掉僵尸进程

- Fornote - C++博客-首页原创精华区
  1) 检查当前僵尸进程信息.   执行上面获得的语句即可, 使用信号量9, 僵尸进程数会大大减少..   3) 过一会儿检查当前僵尸进程信息.   发现僵尸进程数减少了一些, 但还有不少啊..   4) 再次获得杀僵尸进程语句.   执行上面获得的语句即可, 这次使用信号量18杀其父进程, 僵尸进程应该会全部消失..

甲骨文放弃Linux Java许可计划

- Paul - cnBeta.COM
 北京时间8月31日上午消息,甲骨文已经终止了2006年由Sun创立的“操作系统Java分销许可”. 这份收费许可允许Linux开发商将Sun的Java版本整合到他们的Linux发行版中.

java问题导致linux负载、cpu过高如何定位

- - CSDN博客推荐文章
1.用top找到最耗资源的进程id. 2.查询最消耗资源的java进程. 3.打印java 栈 信息. 4.将耗资源的javaPID转换为16进制(5920转1720<16进制>  去百度找 :十进制转十六进制). PID 对应 堆栈中的nid(16进制). 去stack.txt 中查找nid=1720的问题.

Java线程与Linux内核线程的映射关系

- - CSDN博客编程语言推荐文章
Linux从内核2.6开始使用NPTL (Native POSIX Thread Library)支持,但这时线程本质上还轻量级进程. Java里的线程是由JVM来管理的,它如何对应到操作系统的线程是由JVM的实现来确定的. Linux 2.6上的HotSpot使用了NPTL机制, JVM线程跟内核轻量级进程有一一对应的关系.

使用纯java ssh方式连接linux服务器,并用此方式部署war到linux的tomcat下

- - Linux - 操作系统 - ITeye博客
纯java代码使用ssh方式登录linux服务. 实际应用中,可以使用这种方式上传部署web工程war包 并且部署启动tomcat 一个自动化完成所有工作 起到节省时间作用. 1.去 官网下载最新的jar包. 下面是我的java code 例子. /** * java ssh登录linux以后的一些操作方式 * @author liuxy * */ public class SchUnitJsch extends SchUnit{.

Linux下Java线程详细监控和其dump的分析使用----分析Java性能瓶颈

- - CSDN博客互联网推荐文章
这里对linux下、sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结;. linux环境下,当发现java进程占用CPU资源很高,且又要想更进一步查出哪一个java线程占用了CPU资源时,按照以下步骤进行查找:. -p 12377 -H】 查看java进程的有哪些线程的运行情况;.

Linux下谁在切换我们的进程

- hikerlive - 淘宝核心系统团队博客
我们在做Linux服务器的时候经常会需要知道谁在做进程切换,什么原因需要做进程切换. 因为进程切换的代价很高,我给出一个LMbench测试出来的数字:. 在我的很高端的服务器上,进程切换的开销在8us左右, 这个相对于高性能的服务器是不可接受的, 所以我们要在一个时间片内尽可能的多做事情,而不是把时间浪费在无谓的切换上.