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 responding or HotSpot VM not loaded

The -F option can be used when the target process is not responding

4.分析结果

请开发协助分析结果...

参考链接

http://www.jianshu.com/p/5f14386a1fe3

http://dbaplus.cn/news-21-130-1.html

http://www.blogjava.net/hankchen/archive/2012/05/09/377735.html

时间: 2024-10-28 20:06:10

JAVA应用程序占用CPU、内存过高分析过程的相关文章

java:找出占用CPU资源最多的那个线程(HOW TO)

在这里对linux下.sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结:linux环境下,当发现java进程占用CPU资源很高,且又要想更进一步查出哪一个java线程占用了CPU资源时,按照以下步骤进行查找: 先用top命令找出占用资源厉害的java进程id,如: 如上图所示,java的进程id为'12377',接下来用top命令单独对这个进程中的所有线程作监视: ? 1 top -p 12377 -H 如图: 如上图所示,linux下,所有的java内部线程,其实都对应了一

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

Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源高的线程id,利用strace命令查看该线程所有系统调用 1. 通过top命令找到可疑进程PID top - 09:37:18 up 70 days, 16:29, 2 users, load average: 1.13, 1.04, 0.97 Tasks: 105 total, 1 running

一个由C/C++编译的程序占用的内存

一个由C/C++编译的程序占用的内存分为以下几个部分  1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.  2.堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 .注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵.  3.全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的

由C/C++编译的程序占用的内存分类

一个由C/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap) : 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 .注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵. 3.全局区(静态区)(static):,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区

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的占用 如果你的内存占

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

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.最后打印