文档章节

linux中找到最耗CPU的那段Java代码

laichendong
 laichendong
发布于 2014/06/25 09:27
字数 457
阅读 314
收藏 1
在这里总结一下查找linux,sun JDK环境下最耗CPU性能的java代码段的方法。基本上原理就是使用top命令查看最耗cpu的进程和线程(子进程)。使用jstack把java线程堆栈给dump下来。然后,在堆栈信息中查找出对应的代码块。具体操作如下:

一、使用top查找出最耗cpu的进程号(PID)

2013011622221320130116215224(提示:可以按shift+p来按cpu排序。) 这里我们看到最耗cpu的进程是:17315

二、使用jstack dump对应PID的堆栈信息保存备查

20130116215630 这没什么好说的。有时候需要加-F (强制选项)。另外,在jdk1.6.0.23之前,有一个bug。无法用这种方法dump下详细的堆栈信息。只有线程号。 dump下来的文件内容大概长这样:20130116220414几个比较有用的信息包括 线程名称、nid(native id, 一会儿会用到)、线程状态

三、再次使用top查出对应PID中最耗cpu的子进程(java线程)

2013011621582220130116215957top命令使用-p参数来指定进程号,-H参数来显示线程。这里可以看到最耗cpu的进程(java中的线程)是17316

四、从dump下来的堆栈信息中查找耗费性能的代码块

从上面开到,我们用top找出来的pid是十进制的。而dump下来的nid是十六进制的。其实他们是一个东西。只是进制不同。于是我们利用printf命令格式化来转换一下进制(当然,也可以用其他方式): 20130116221543   20130116221709 通过在vim中查找,就能找到问题所在了。 :D 20130116221855

好了,基本就是这样一个步骤,对于分析线上问题还是有一定帮助的。have fun!

© 著作权归作者所有

共有 人打赏支持
laichendong
粉丝 10
博文 85
码字总数 71483
作品 0
朝阳
程序员
私信 提问
Linux下如何对tomcat Java线程进行分析?

在生产环境(Linux)有什么办法知道当前某个线程的运行情况,比如是不是挂住了,是不是吃了好多cpu和内存。 以下是针对tomcat上的应用的. 其他的java程序, 只要你能触发他的thread dump并且拿到...

DongHenry
2013/09/26
0
0
Linux下java实现文件排他锁问题的解决

最近用Java写了个在线文件日志的转存的代码,就是在Linux操作系统下实现一个服务器日志的在线转离线的功能。 用FileChannel类的tryLock()方法在Windows下测试通过,用这段代码锁住后,在线日...

阿施发拉路
2012/02/19
1K
3
java:找出占用CPU资源最多的那个线程(HOW TO)

在这里对linux下、sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结;linux环境下,当发现java进程占用CPU资源很高,且又要想更进一步查出哪一个java线程占用了CPU资源时,按照以下步...

鉴客
2012/06/28
10K
3
java 困扰

理解为什么 JAVA 消耗 CPU 在产品环境profiling 不是一个选择,我们的CPU已经好几次达到了几乎100%,我们的环境是运行部署在 Redhat中的tomcat 5.5,接下来发生了什么? 幸运的是, java 一开...

晨曦之光
2012/02/24
2
0
Java Tomcat vs PHP CLI Server 性能对比

测试环境: Ubuntu 14.04 with i5-3230M Tomcat 8.0.5 with 64bit jre1.7.0_55 PHP 5.5.8 with Zend OPcache v7.0.3-dev 测试脚本: 显示当前服务器时间 Java Tomcat: t.jsp <%@ page session=......

eechen
2014/09/22
0
34

没有更多内容

加载失败,请刷新页面

加载更多

BCryptPasswordEncoder加密工具类

Spring Security 提供的 BCryptPasswordEncoder 加密算法进行加密 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;/** * <p> * BCryptPasswordEncoder加......

秋至丶枫以落
5分钟前
0
0
在 Linux 上使用 tarball

Tarball 提供了一种在 Linux 系统上备份和管理一组文件的通用方法。请按照以下提示了解如何创建它们,以及从中提取和删除单个文件。 “tarball” (LCTT 译注:国内也常称为“tar 包”)一词...

Linux就该这么学
20分钟前
2
0
2018年AI和ML(NLP、计算机视觉、强化学习)技术总结和2019年趋势(上)

摘要: 回顾2018,展望2019,计算机科学技术继续前进! 1、简介: 过去几年一直是人工智能爱好者和机器学习专业人士最幸福的时光。因为这些技术已经发展成为主流,并且正在影响着数百万人的生...

阿里云官方博客
24分钟前
2
0
UnsatisfiedLinkError sawindbg.dll

方法:搜索sawindbg.dll,然后将文件报错的目录下

洛水
26分钟前
2
0
说说不知道的Golang中参数传递

本文由云+社区发表 导言 几乎每一个C++开发人员,都被面试过有关于函数参数是值传递还是引用传递的问题,其实不止于C++,任何一个语言中,我们都需要关心函数在参数传递时的行为。在golang中...

腾讯云加社区
26分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部