简单的java性能调试方法

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

在没有三方工具的情况下,如何对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 等专业的工具,以后有时间再测试.

上一篇: java servlet 用firefox下载文件,文件名有空格的问题
下一篇: 简单方法合并两个java list
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章或者资源来源于互联网, 有时候很难判断是否侵权, 若有侵权, 请联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布无版权争议的 文章/资源.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号