查找占用资源高的JAVA代码
1. /tmp/hsperfdata_$USER目录
$USER是启动JAVA进程的用户,这里保存的所有用户启动的JAVA进程。
这些都JAVA进程的PID,里面存放的是JVM进程信息。你所用的jsp、jstack、jmap这些工具都会读取这个目录中对应PID的文件获取连接信息。
有时候你会发现这样的错误
这种情况是你使用的是一个JAVA的线程号而不是一个进程号。因为jstack、jps、jmap这些工具都是使用进程号的。
如果你提供了一个根本不存在的进程号呢?它会告诉你无此进程。
这种情况是你使用的是一个JAVA的线程号而不是一个进程号。因为jstack、jps、jmap这些工具都是使用进程号的。
如果你提供了一个根本不存在的进程号呢?它会告诉你无此进程。
2. 如何查找消耗资源的代码
通过top命令获取消耗资源最大的PID号
通过top –p PID –H来查看指定进程中最消耗资源的线程
把线程ID转换为16进制
printf '0x%x\n' PID
查找代码
如果同一个JAVA进程中有多个占用CPU资源多的线程,那么你就把线程号保存到一个文件中,一行一个号。然后运行下面的命令.
找到线程号,转换成十六进制保存到文件里
保存堆栈信息到文件
查找,写一个循环进程查找
while read LINE; do grep $LINE /tmp/stock.txt ; done < /tmp/threadNum.txt
字段中第一个引号字段就是JAVA线程的名字。由于我这里其实只是展示一下操作过程实际上并没有消耗CPU高的线程,你会看到比较少的信息,如果真的有消耗CPU高的线程,这里会有很多同名的Java线程名称。也不能说是名称完全一样只是主名称相同后面还是有区分的。
3. 堆栈信息说明
prio=N 表示线程的优先级别
os_prio=N 表示线程的操作系统优先级别
tid= 表示线程ID
nid= 表示操作系统影视的线程ID,非常关键,你在top –H –p PID 查看的数字转换为十六进制就是这个
状态 | 说明 |
New | 线程对象刚刚创建时的状态,此时不可执行 |
Runnable | 表示线程具备所有运行条件,在队列中等待CPU调度 |
Running | 正在运行 |
Wait on condition | 该线程在等待某个条件发生,发生后就可以运行,但具体什么条件需要进一步查看。最常见的就是线程在等待网络的读写,比如网络数据没有准备好,线程处于等待状态,一旦数据准备好线程会被重新激活。 |
Waiting for monitor entry和In Object.wait() |
Monitor是JAVA中实现线程互斥与协调的手段,可以看成对象或者class的锁。每个对象都有,也仅有一个monitor。每个Monitor在某个时刻只能被一个线程拥有,该线程叫做Active Thread,而其他线程叫做“Waiting Tread”,分别在2个队列中“Entry Set”和“Wait Set”里面。在前者队列的线程状态时“Waiting for monitor entry”,在后者队列的线程状态是“in Object.wait()” Wating on monitor entry:正在等待锁 |
4. 关于“Unable to open socket file: target process not responding or HotSpot VM not loaded”问题
遇到这个问题可能有几个原因:
- 运行该命令的用户账号和启动指定进程的用户账号不一致。也就是PID 145784这个进程是通过其他账号启动的,而不是当前你用的账号
- /tmp/hsperfdata_$USER这个目录里的内容被清理,这里放的就是启动进程的进程号,由于是临时目录有可能Linux系统定期清理导致进程号文件没有了,所以会打印堆栈信息失败。因为jps和jstack等工具会读取这个目录里面指定进程号的PID文件获取连接信息。
- 确保你使用的命令的JDK版本和运行JAVA程序的JDK版本一致。
其实通过第二条就知道为什么第一条存在,因为不同用户会有不同目录,你用root账号虽然权限大,但是它会读取/tmp/hsperfdata_root目录,而你需要打印堆栈的程序是用其他账号启动的,所以用root会报错。
切换账号后打印成功
查找占用资源高的JAVA代码的更多相关文章
- Windows下找到JVM占用资源高的线程
与linux下top命令直接显示进程下线程资源占用不同,Windows下默认任务管理器只能显示出进程的资源占用,jconsle等工具也只能显示出java进程资源占用,无法显示出进程能具体线程的资源占用 ...
- SQL SERVER 占用资源高的SQL语句
--SQL SERVER 占用资源高的SQL语句: --查询占用cpu高的前 50 个 SQL 语句 SELECT total_cpu_time,[total_physical_Reads], tot ...
- 编写高质量java代码151个建议
http://blog.csdn.net/aishangyutian12/article/details/52699938 第一章 Java开发中通用的方法和准则 建议1:不要在常量和变量中出现易混 ...
- 利用jstack命令定位占用cpu高的java线程及具体错误代码信息
1.先用top查询某进程的线程CPU占用情况,定位到cpu占用高的进程pid 2.根据pid定位具体的线程top -p PID -H ,找出占用cpu最大的pid,此处占用cpu比较平均,我们随便选择 ...
- Linux中查找最耗性能的JAVA代码
在这里总结一下查找Linux.Java环境下最耗CPU性能的代码段的方法.基本上原理就是使用top命令查看最耗cpu的进程和线程(子进程).使用jstack把java线程堆栈给dump下来.然后,在堆 ...
- 高质量JAVA代码编写规范
1. Java 命名约定 除了以下几个特例之外,命名时应始终采用完整的英文描述符.此外,一般应采用小写字母,但类名.接口名以及任何非初始单词的第一个字母要大写. 1.1 一般概念 * 尽量使用完整的英 ...
- Linux中查找最耗CPU的Java代码问题
第一步: 查看消耗CPU最高的进程PID [lolaage@web2 tomcat-ns]$ top top - 13:23:32 up 42 days, 19:11, 3 users, load ...
- 查找占用CPU高线程
1.根据进程号查看线程 ps -mp pid -o THREAD,tid,time 2 把tid值转成16进制 printf "%x\n" tid 3.根据上面获取到的16进制数据 ...
- 编写高质量JAVA代码之让接口的职责保持单一
上述标题读者朋友应该也注意到了是让接口的职责保持单一,而不是实现者单一. 设计模式六大原则之单一原则: 定义 不要存在多于一个导致类变更的原因.**通俗的说,即一个类只负责一项职责. 下面以一个电话模 ...
随机推荐
- 如何给小学生讲清楚ECC椭圆曲线加密
对于RSA这套公私钥加密的思路,我以为我挺明白的,运用的娴熟自如. 当然现在RSA用的不多,而是基于ECC曲线来做签名验签,最大名鼎鼎的莫过于比特币. 可是前两天和别人讲代码,被问了ECC为什么可以用 ...
- 通过源码理解HashMap的并发问题
最近在学习有关于Java的基础知识,在学习到HashMap的相关知识的时候,了解了HashMap的并发中会出现的问题,在此记录,加深理解(这篇文章是基于Java1.7的,主要是为了更加直观,更新版本的 ...
- yii2 httpClient的用法
yii2 httpClient的用法示例: <?php /* * @Purpose : yii2 httpClient 请求示例 * @Author : Chrdai * @Time : 201 ...
- python学习笔记(7)
第七章 文件和数据格式化 文件的使用 文件是数据的抽象和集合 文件是存储在辅助存储器上的数据序列 文件是数据存储的一种形式 文件展现形态:文本文件和二进制文件 文本文件 由单一特定编码组成的文件,如U ...
- TCP协议中是如何保证报文可靠传输的
1.什么是TCP的可靠传输 它向应用层提供的数据是无差错的.有序的.无丢失的,换言之就是:TCP最终递交给应用层的数据和发送者发送的数据是一模一样的. 2.TCP保证可靠传输的办法有哪些? TCP采用 ...
- jquery获取一组文本框的值
$("#btn5").click(function() { var str="";$("[name='checkbox'][checked]& ...
- 在阿里云ECS CentOS7上部署基于MongoDB+Node.js的博客
前言:这是一篇教你如何在阿里云的ECS CentOS 7服务器上搭建一个个人博客的教程,教程比较基础,笔者尽可能比较详细的把每一步都罗列下来,包括所需软件的下载安装和域名的绑定,笔者在此之前对Linu ...
- Ubuntu部署python3.7的开发和运行环境
Ubuntu部署python3.7的开发和运行环境 1 概述 由于最近项目全部由python2.x转向 python3.x(使用 python3.7.1) ,之前的云主机的的默认python版本都面临 ...
- 中间人攻击——ARP欺骗的原理、实战及防御
1.1 什么是网关 首先来简单解释一下什么是网关,网关工作在OSI七层模型中的传输层或者应用层,用于高层协议的不同网络之间的连接,简单地说,网关就好比是一个房间通向另一个房间的一扇门. 1.2 A ...
- 爱奇艺技术分享:爱奇艺Android客户端启动速度优化实践总结
本文由爱奇艺技术团队原创分享,原题<爱奇艺Android客户端启动优化与分析>. 1.引言 互联网领域里有个八秒定律,如果网页打开时间超过8秒,便会有超过70%的用户放弃等待,对Andro ...