linu下java程序占用CPU和内存过高排错处理方案

1:通过jps命令查看所有进程pid。

2:使用top -p pid 针对你所要查的pid查看这个进程的CPU和内存以及负载情况

如图:

使用top -p pid  -H  查看针对每一个线程占用CPU情况进行查询

如果你发现某一个PID占用的CPU过高,就拿到这个PID转换成16进制

例如pid为12760转化成16进制31D8,大写换成小写

jstack 22821|grep -A 10 0x31d8

针对你的每个线程拿出占用CPU的堆栈信息,你可以根据这个去查找CPU的占用

如果你的内存占用较高,我比较喜欢使用jmap命令

 jmap
-histo:live 9652 | head -n 100

jmap -heap 12733

时间: 2024-10-15 00:33:30

linu下java程序占用CPU和内存过高排错处理方案的相关文章

JAVA应用程序占用CPU、内存过高分析过程

1.查看cpu占有率 top -P 2.查看进程cpu占用率 ps -mp 3749 -o THREAD,tid,time|sort -rn|head -n 20 3.查看java堆栈信息 su - nobody -c "/usr/java/jdk1.6.0_21/bin/jstack 3749|grep 34d8 -A 30" 注意:这里要使用程序启动的用户执行此命令 使用root会提示: Unable to open socket file: target process not

windows下揪出java程序占用cpu很高的线程 并找到问题代码 死循环线程代码

我的一个java程序偶尔会出现cpu占用很高的情况 一直不知道什么原因 今天终于抽时间解决了 系统是win2003 jvisualvm 和 jconsole貌似都只能看到总共占用的cpu 看不到每个线程分别占用的cpu呢 所以在windows平台上要找出到底是哪个线程占用的cpu还不那么容易,linux用top就简单多了 最后的解决方法: 1.找到java进程对应的pid. 找pid的方法是:打开任务管理器,然后点击 "查看" 菜单,然后点击 "选择列",把pid勾

windows下揪出java程序占用cpu很高的线程

1.找到java进程对应的pid.通过任务管理器.linux---top 2.然后把java进程导出快照.直接运行命令.stack -l 31372 > c:/31372.stack 3.在windows下只能查看进程的cpu占用率,要查看线程的cpu占用率要借助其他的工具,我这里用的是微软提供的 Process Explorer v15.3 右键点击需要查看的进程---properties linux下先输入top,然后再按shift+h 或"H",此时打开的是线程视图,pid

记一次java程序占用cpu超高排查

1.首先通过top命令查看占用cpu过高的pid #top top - 18:07:25 up 48 days,  1:07,  3 users,  load average: 11.94, 11.90, 9.46Tasks: 271 total,   1 running, 270 sleeping,   0 stopped,   0 zombie%Cpu(s): 74.2 us,  0.8 sy,  0.0 ni, 24.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.

Linux排查Java程序占用CPU很高的解决办法

Java的工具集相当强大,学习成本也很低,处理线上问题时,jstack这个工具就比微软的windbg,好学好用很多,3步找出占用CPU很高的源所在.而windbg反人类的各种命令,实在不敢恭维. 故意设置了一个CPU占用很高的场景: 排查问题,步骤: 1. ps -mp [替换为进程ID PID] -o THREAD,tid,time 发现线程6322.6323占用CPU很高,时间也很长. 2. printf “%x” [线程ID TID] 把TID转换为16进制. 3. jstack [进程I

Linux排查java程序占用cpu过高的线程代码

分几步骤: 1.通过top,查出占用CPU过高的java进程 ,比如: pid :6666 2.通过ps -mp 6666 -o THREAD,tid,time| sort -n -k1 -r 查看此进程占用线程的情况,比如查到占用CPU异常高的线程的线程Id :8888 以上两步,可以直接通过top -H搞定 3.将需要的线程ID转换为16进制格式: printf “%x\n” 8888 [[email protected]]# printf “%x\n” 8888“22b8n” 4.最后打印

对Ansible二次开发来检查服务器的Java程序占用端口数量

一 应用场景描述 有这个么一个需求:对很多台服务器的Java程序所占用的端口数量与正常的值进行对比确认. 可以使用如下命令得到结果: netstat -tulnp|grep java|wc -l 但是服务器很多,每台手动去执行这条命令是不现实的.于是想到使用Ansible批量去执行,Ansible使用paramiko去ssh登录服务器执行命令,并使用mutilprocessing实现多进程ssh登录. 二 代码实现 如果直接使用Ansible去执行,不作任何处理的话.执行情况是这样的: # an

[转]生产环境中程序占用cpu过高的程序的排查办法

一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环.以我们最近出现的一个实际故障为例,介绍怎么定位和解决这类问题. 根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障. 通过ps aux | grep PID命令,可以进一步确定是tomcat进程出现了问题.但是,怎么定位到具体线程或者代码呢? 首先显示线程列表: ps -mp pid -o THREAD,tid,time 找到了耗时最高的线程28802,占用CPU时间快两个小时了!

Java虚拟机六:Java进程占用cpu过高问题分析

在平时开发过程中,经常会碰到Java进程占用cpu过高的现象,本篇将简单记录一下自己分析该类问题的步骤. 1.使用 top -p <pid> 命令(<pid>为Java进程的id号)查看Java进程的cpu占用: 该Java进程占用cpu达到92.2%. 2.使用 top -Hp <pid>  命令(<pid>为Java进程的id号)查看该Java进程内所有线程的资源占用情况(按shft+p按照cpu占用进行排序,按shift+m按照内存占用进行排序)此处按