Linux中查找最耗性能的JAVA代码

在这里总结一下查找Linux、Java环境下最耗CPU性能的代码段的方法。基本上原理就是使用top命令查看最耗cpu的进程和线程(子进程)。使用jstack把java线程堆栈给dump下来。然后,在堆栈信息中查找出对应的代码块。具体操作如下:

一、查找最耗cpu的进程

执行:top
输出:
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
12789 root      20   0 3320m 689m  10m S 120.5  8.8  15430:42 java
31444 root      20   0 2694m  21m 6992 S 11.1  0.3  44:28.65 java
 5031 root      20   0 2694m  21m 6992 S  6.9  0.3 264:18.50 java
 2896 root      20   0 2004m 389m  15m S  1.4  4.9   0:47.65 java
 3729 root      20   0 14936 1144  796 R  1.4  0.0   0:00.01 top
    1 root      20   0 19248 1444 1156 S  0.0  0.0   0:02.50 init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      RT   0     0    0    0 S  0.0  0.0   0:00.02 migration/0
    4 root      20   0     0    0    0 S  0.0  0.0   0:01.16 ksoftirqd/0
    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/0

这里我们看到最耗cpu的Java进程是:12789

二、jstack堆栈信息保存

进入Java的安装目录(如:/usr/java/jdk1.6.0_34/bin),在bin文件夹中执行:./jstack 12789  >  jstackResult.txt 这样,就将堆栈信息保存到jstackResult.txt这个文件中了。jstackResult.txt中的内容大体如下:

三、查出最耗cpu的子进程(java线程)

执行:top -p 12789 –H
输出:
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
11637 root      20   0 3320m 689m  10m S  13.7  8.8 573:57.24 java
 9867 root      20   0 3320m 689m  10m R  2.7  8.8 216:57.68 java
29006 root      20   0 3320m 689m  10m S  2.7  8.8   3:49.73 java
28761 root      20   0 3320m 689m  10m S  2.3  8.8   3:55.86 java
29008 root      20   0 3320m 689m  10m S  2.3  8.8   3:50.22 java
29448 root      20   0 3320m 689m  10m R  2.3  8.8   3:37.94 java
30211 root      20   0 3320m 689m  10m R  2.3  8.8   3:17.72 java
30213 root      20   0 3320m 689m  10m R  2.3  8.8   3:18.59 java
 1087 root      20   0 3320m 689m  10m S  2.3  8.8   2:00.05 java
13117 root      20   0 3320m 689m  10m S  2.0  8.8 574:07.45 java
13314 root      20   0 3320m 689m  10m S  2.0  8.8 574:12.15 java
13751 root      20   0 3320m 689m  10m S  2.0  8.8 564:11.94 java
14103 root      20   0 3320m 689m  10m R  2.0  8.8 560:00.50 java
14485 root      20   0 3320m 689m  10m R  2.0  8.8 559:24.82 java
16319 root      20   0 3320m 689m  10m R  2.0  8.8 551:27.09 java
17406 root      20   0 3320m 689m  10m R  2.0  8.8 549:19.02 java
17957 root      20   0 3320m 689m  10m R  2.0  8.8 547:40.06 java   

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

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

从上面看到,我们用top找出来的pid是十进制的。而dump下来的nid是十六进制的。其实他们是一个东西,只是进制不同。利用printf命令格式化来转换一下进制。

执行:printf %0x 11673
输出:2d99

通过在dump出的堆栈信息中查找,就能找到问题所在了。

时间: 2024-12-13 17:30:50

Linux中查找最耗性能的JAVA代码的相关文章

linux中查找命令find、locate、whereis、which、type区别

linux中查找命令find.locate.whereis.which.type区别 1. find Java代码 find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件.与查询数据库(/var/lib/locatedb)文件不同,find查找磁盘空间 find的使用格式如下: $ find <指定目录> <指定条件> <指定动作> - <指定目录>: 所要搜索的目录及其所有子目录.默认为当前目录. - <指定条件>: 所要搜索的文件

linux中查找文件属于那个软件包的方法

一.linux中查找文件属于那个软件包的方法 [[email protected] prod]# whereis htpasswdhtpasswd: /usr/bin/htpasswd /usr/share/man/man1/htpasswd.1.gz [[email protected] prod]# rpm -qf /usr/bin/htpasswdhttpd-tools-2.4.6-80.el7.centos.x86_64 原文地址:https://www.cnblogs.com/nuli

Android Layout Binder(在线将XML中View find出来,生成java代码的工具)

废话不多说,这是地址:http://android.lineten.net/layout.php. 有图有真相,例如: 你的XML假如是这样: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fil

linux中查找(find、locate、which、whereis、grep)命令汇总、帮助命令(man、whatis、apropos、info、help)汇总

(一)find命令详解 find:功能:文件搜索: 语法:find[搜索范围][匹配条件]:  只要匹配条件完全符合才可以被显示,使用通配符*匹配条件*则可以显示匹配条件的所有目录,问号?匹配单个字符 所在路径:/bin/find:按照名字查找文件: eg:# find /tmp -name *test*:区分大小写,显示所有包含test的文件: # find /tmp -iname *test* :不区分大小写,显示所有包含test的文件 按照所有者查找文件: find / -user zxh

如何使用网页开发自己的app,在网页中的按钮与自己的java代码绑定来实现打电话即javascript代码调用java代码,和java代码来调用javascript代码

1首先是如何在自己的app里用网页显示,这样可以较快的更新界面而不需要让客户端升级,方法如下: xml文件: <WebView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/web_v" /> 2在activity里绑定网页: public class MainActivity extends Action

Linux中查找帮助文档的几种方法

初学Linux,看到了关于查看命令帮助的几种方法,觉得有用故记录与此,以备不时之需,也希望能帮到他人.刚学,如有不对之处,还请各位前辈不令赐教. 一.help COMMAND -->shell的内嵌命令可以用此命令. 二.COMMAND --help -->命令自带的普通格式的使用帮助 三.使用手册:man [options] COMMAND  -->使用手册在man命令里面主要有以下几个选项:NAME:功能性说明,SYNOPSIS:语法格式(很重要),DESCRIPTION:描述,OP

Linux中CPU与内存性能监测

在系统维护的过程中,随时可能有需要查看 CPU 使用率内存使用情况的需要,尤其是涉及到JVM,程序调优的情况,并根据相应信息分析系统状况的需要. top命令 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式 -- 用基于 top 的命令,可以控制显示方式等等.退出 top 的命令为 q (在 top 运行中敲 q 键一次). 可以直接使用top命令

linux中查找隐藏文件夹

linux 命令如何查找隐藏文件-命令:find /path/to/target  -name ".?*" linux 命令如何忽略查找隐藏文件-命令:find /path/to/target  !  -name ".?*"

Linux中查找文件和文件内容的常用命令

一.whereis <程序名称> 查找软件的安装路径-b 只查找二进制文件 -m 只查找帮助文件-s 只查找源代码-u 排除指定类型文件-f 只显示文件名-B <目录> 在指定目录下查找二进制文件-M <目录> 在指定目录下查找帮助文件-S <目录> 在指定目录下查找源代码 二.locate <文件名称>在文件索引数据库中搜索文件-d <数据库路径> 搜索指定数据库updatedb更新文件索引数据库 三.find [路径] <表