我们使用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
相关推荐
这可能包括设备控制软件、监控系统或者数据分析工具。由于BACnet-stack-0.8.0的开源性质,开发者可以深入研究源代码,优化性能,或者根据特定需求添加新的功能。 总的来说,Bacnet-stack-0.8.0是一个强大且灵活的...
这里的 "redis-stack-server-6.2.6-v7.rhel7.x86-64.tar.gz" 文件是一个针对 Red Hat Enterprise Linux 7 (RHEL7) 平台的 64 位版本的 Redis Stack 6.2.6 包。这个压缩包包含了运行 Redis Stack 所需的所有组件,...
总的来说,Z-Stack-Mesh-1.0.0是TI为CC2530提供的一个强大的ZigBee解决方案,它涵盖了构建高效、可靠、可扩展的物联网网络所需的所有组件和工具。通过深入学习和利用这套工具,开发者能够快速地开发出满足特定需求的...
通过本文档,我们将详细介绍如何使用`ndk-stack`工具来进行调试,帮助开发者更轻松地定位问题。 #### 二、环境配置与准备 ##### 2.1 配置项目目录 在项目目录中,需要确保已经正确配置了`jni`目录下的`...
3. 配置Z-Stack:根据你的应用需求,使用Z-Stack提供的配置工具(如ZNP-PROG或ZConfig)设置网络参数、设备角色、安全选项等。 4. 编写应用代码:利用Z-Stack的API编写你的应用程序,实现设备功能和网络交互。 5. ...
OPC UA java开发使用的jar包,最新代码编译的jar包版本1.4.0,欢迎下载使用。
ndk-stack 是 Android NDK 中的一个命令行工具,用于分析和调试Native 代码。它可以将崩溃的日志信息转换成可读的调用栈信息,从而帮助开发者快速定位和解决问题。 ndk-stack 的使用方法 在使用 ndk-stack 之前,...
linux storage stack diagram ,linux storage stack diagram ,linux storage stack diagram
-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...
- 3.0.2版可能提供了更丰富的API接口,简化了开发者的工作,同时可能升级了开发工具,提供更好的调试和分析功能。 - 2.5.1版的API和开发工具可能是早期设计,可能需要开发者投入更多时间和精力进行学习和调试。 5...
TI BLE-STACK-CC2540-CC2541是Texas Instruments(TI)公司推出的针对其蓝牙低功耗(Bluetooth Low Energy, BLE)芯片CC2540和CC2541的官方开发库。这个库包含了必要的软件工具和资源,用于开发基于这些芯片的BLE...
该BACnet协议栈库 提供了BACnet应用层,网络层和媒体访问(MAC)层通信服务。它是适用于嵌入式系统,Windows,Linux或其他操作系统的开源免版税库。 包括示例BACnet客户端和服务器应用程序。
在Java中,我们可以使用`java.util.Stack`类来实现压栈操作。初始化一个空栈,然后遍历查询结果集,每次遇到一个新节点,将其转换为自关联的对象(如`MenuNode`),并压入栈中。如果当前节点有父节点,我们将栈顶...
对Linux网络协议栈结构的理解.Linux的协议栈基于分层的设计思想,总共分为四层,从下往上依次是 :物理层,链路层,网络层,应用层。
Linux-IO性能优化基础工具和实践: 基础篇-Linux IO stack overview 基础篇-read syscall IO stack 工具篇-iostat数据可靠吗 工具篇-blktrace原理和应用 工具篇-debugfs应用 Cache server机械盘IO性能瓶颈分析 实践...
"java-sizeof-0.0.4"是一个用于分析Java对象内存占用的工具,它可以帮助开发者更好地理解对象在运行时的内存消耗。这个工具提供了查看对象实例大小的能力,这对于调试和性能优化非常有用。"java-sizeof-0.0.4"包含三...
《Z-STACK协议栈详解与应用...总结,Z-STACK协议栈是构建Zigbee网络的关键工具,其强大的功能和易用性使其在物联网行业中具有广泛的应用。通过深入理解和实践,开发者可以利用Z-STACK构建出高效、可靠的无线网络系统。
本项目这是一个纯静态的网址导航网站,项目基于bootstrap前端框架开发,基于Java开发的后台系统 框架:Guns Springboot
EtherCAT-Slave-Stack-Code-Tool 是一个专门为 EtherCAT 从站开发所设计的工具,它包含了从站节点软硬件配置的重要功能。这个工具的核心作用在于帮助工程师生成用于驱动从站硬件的 XML 文件,该文件包含了从站设备的...