我们使用jdk自带的jstack来分析。当linux出现cpu被java程序消耗过高时,以下过程说不定可以帮上你的忙:
1.top查找出哪个进程消耗的cpu高
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高
先输入top,然后再按shift+h
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=0x52bb 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)
如果Java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。
2、命令格式
jstack [ option ] pid
jstack [ option ] executable core
jstack [ option ] [server-id@]remote-hostname-or-IP
3、常用参数说明
1)、options:
executable Java executable from which the core dump was produced.
(可能是产生core dump的java可执行程序)
core 将被打印信息的core dump文件
remote-hostname-or-IP 远程debug服务的主机名或ip
server-id 唯一id,假如一台主机上多个远程debug服务
2)、基本参数:
-F当’jstack [-l] pid’没有相应的时候强制打印栈信息
-l长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.
-m打印java和native c/c++框架的所有栈信息.
-h | -help打印帮助信息
pid 需要被打印配置信息的java进程id,可以用jps查询.
4、使用示例
#jstack -l 进程号> jstact 导出日志文件
#less jstact 查看文件
http://wenku.baidu.com/link?url=9e-JEB1WreNARlL39kejO3gKbWdGppJEFUCNlKDVwvboZtgAn_7eka36KgU9UA4a9HLprACkpBvHujXquUR-hmJh5QtwIs2FQnr-fFljkvi
相关推荐
Linux-storage-stack-diagram_v3.17.pdf Linux-storage-stack-diagram_v3.17.pdf
linux协议栈源码,带注释版本,是学习linux tcp/ip协议栈的最佳伴侣。 linux内核版本2.6
linux内核网络协议栈源码阅读分析注释--带详尽中文分析注释以及相关流程分析调用注释,对理解分析内核协议栈源码很有帮助
linux系统中详细的IO访问栈。一张图详细描述了从设备硬件层面,scsi层,block层面,文件系统层之间的调用关系
最近发布的Zstack 3.0.2 SDK 和说明文档
redis-stack-server-7.2.0-v9.arm64.snap redis-stack-server-7.2.0-v9.bionic.arm64.tar.gz redis-stack-server-7.2.0-v9.bionic.x86_64.tar.gz redis-stack-server-7.2.0-v9.bullseye.x86_64.tar.gz redis-stack-...
Stack-Stack-Stack
linux storage stack diagram ,linux storage stack diagram ,linux storage stack diagram
TI Z-Stack 3.0.2官方原版,zigbee TI 开发官方BSP,支持TI CC2530,CC2538等多款器件!
CC2530 Z-stack
-javaagent:java-stack-trace-1.0-SNAPSHOT-jar-with-dependencies.jar=[m:method name|f:file name] 方法前缀可以用m:method name指定 m: 代表Method方法 method name: 需要打印堆栈的方法的前缀 方法前缀也可以用f...
该BACnet协议栈库 提供了BACnet应用层,网络层和媒体访问(MAC)层通信服务。它是适用于嵌入式系统,Windows,Linux或其他操作系统的开源免版税库。 包括示例BACnet客户端和服务器应用程序。
对Linux网络协议栈结构的理解.Linux的协议栈基于分层的设计思想,总共分为四层,从下往上依次是 :物理层,链路层,网络层,应用层。
f-stack的客户端服务端实现方法代码
bacnet-stack-0.8.0.zip可以移植在各种嵌入式设备上,兼容了各种平台:linux win32 pic单片机 arm7,且实现的功能较为完善,提供各种服务,对于BVLL较为详细
CC2530 Z-stack
了解网络协议栈的人都知道,网络协议栈是一个有层次的软件结构,层与层之 间通过预定的接口传递网络报文。网络报文中包含了在协议栈各层使用到的各 种信息。
这个软件名称是Z-Stack-Mesh-1.0.0,是TI(德州仪器)发布的基于CC2530的ZigBee协议栈,主要用于CC2530应用开发。
error-stack-parser, 从JS错误中提取含义 error-stack-parser.js-- 从JS错误中提取含义 简单,跨浏览器 错误分析器。 这个库解析并提取函数名。url 。行号和列号,作为一个框架集的一个 array,作为一个的。一旦你...
Elastic Stack 在最近两年迅速崛起,成为机器数据分析,或者说实时日志处理领 域,开源界的第一选择。和传统的日志处理方案相比,Elastic Stack 具有如下几个 优点: 处理方式灵活。Elasticsearch 是实时全文索引,...