简单的java性能调试方法

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

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



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

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



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




一般情况下,我们关注这几项就足够了: 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 进程中的所有线程.



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

利用jdk 自带工具,比如:



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



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

除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.