java 调试 方法,简单的java性能调试方法

在没有三方工具的情况下,如何对java程序进行性能调优呢?答案很简单,利用操作系统提供的一些功能和jdk自带的一些工具,就可以完成一些基本的性能调优,比如,在linux 下,可以用 top,sar, vmstat 命令查看一些进程,内存以及cpu的信息。当然window 下也有相应的东西,比如任务管理器,性能监控工具。这里主要讲一次window下的调优。

任务管理器,就不用多说了,用过window 的人基本都知道。它能对计算机系统的整体运行情况进行监控,暴多CUP,内存,以及网络使用情况。

b7b1c0328d1c8280c775fc9d3f870169.png

但事实上,在window下用perfmon 是性能监控更强大的工具.它不仅可以针对计算机整体情况进行监控,更能对某一个具体的进程,具体的线程进行监控.基本上所有的东西,都在它的监控范围内.

你可以通过在开始菜单 运行 对话框中输入 "perfmon" 命令来启动它,也可以在"控制面板"中的"管理工具"中找到 “性能” ,双击打开.

f4fe4f06fc8d45e00810913ae7870aa0.png

底部的表格显示了正在监控的对象,可以通过右键点击,添加计数器。

cf08b6480e5bc73d519aec9d8bce5221.png

40034d066b1faf152fd7a948bbce36fd.png

一般情况下,我们关注这几项就足够了: process 进程,processor 处理器 ,thread 线程. 这里用一个例子来测试。找出消耗cpu最多的线程.public class HoldCPUMain {

public static class HoldCPUTask implements Runnable{

@Override

public void run() {

while(true){

double a=Math.random()*Math.random();

}

}

}

public static class LazyTask implements Runnable{

public void run(){

try{

while(true){

Thread.sleep(1000);

}

}catch(Exception e){

}

}

}

public static void main(String[] args){

new Thread(new HoldCPUTask()).start();

new Thread(new LazyTask()).start();

new Thread(new LazyTask()).start();

new Thread(new LazyTask()).start();

}

}

运行之后,我们设置监控对象为 Thread, 并选择 java.exe 进程中的所有线程.

1f0ea56f126a38d61a93e6e30e2ab44a.png

发现线程id:3020 最耗CPU资源。

利用jdk 自带工具,比如:

301be0317d6c7d093547b7f01a770e9b.png

将 3020 转换成 16进制 就是 BCC, 因此,在刚才 jstack 命令中 的结果中去找 nid = BCC 的线程,救过发现如下:

b35efe481b532c22b9c3380e60ae8bc1.png

于是可以清晰的看到是那一个类中的那一个方法最耗资源。当然,这只是简单的方法去测试性能,在大多数情况也足够用了,当然,如果想更好的监控性能,可以采用三方工具,比如virtual vm 或者 jprofile 等专业的工具,以后有时间再测试.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值