JVM故障诊断与性能优化-性能监控工具(五)

Linux下的性能监控工具

1.显示系统整体资源使用情况-top命令

2.监控内存和CPU-vmstat命令

vmstat 1 3

示例1--使用vmstat查看java程序占用内存情况

package chapter6;

import java.util.Random;

//去package名放入linux中运行
public class HoldLockMain {
	public static Object[] lock = new Object[10];
	public static Random r = new Random();
	static{
		for (int i = 0; i < lock.length; i++) {
			lock[i] = new Object();
		}
	}
	public static class HoldLockTask implements Runnable{
		private int i;
		public HoldLockTask(int i) {
			super();
			this.i = i;
		}
		@Override
		public void run() {
			// TODO Auto-generated method stub
			try{
				while(true){
					synchronized (lock[i]) {
						if(i%2==0)
							lock[i].wait(r.nextInt(10));
						else
							lock[i].notifyAll();
					}
				}
			}catch(Exception e){
			}
		}
	}
	public static void main(String[] args) {
		for (int i = 0; i < lock.length*2; i++) {
			new Thread(new HoldLockTask(i/2)).start();
		}
	}
}

3.监控IO使用-iostat

示例2--使用iostat监控

package chapter6;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class HostIOMian {
	public static class HoldIOTask implements Runnable{
		@Override
		public void run() {
			// TODO Auto-generated method stub
			while(true){
				try{
					FileOutputStream fos = new FileOutputStream(new File("temp"));
					for(int i=0;i<10000;i++)
						fos.write(i);
					fos.close();
					FileInputStream fis = new FileInputStream(new File("temp"));
					while(fis.read()!=-1);
				}catch(Exception e){
				}
			}
		}
	}
	public static class LazyTask implements Runnable{
		@Override
		public void run() {
			// TODO Auto-generated method stub
			try{
				while(true){
					Thread.sleep(1000);
				}
			}catch(Exception e){
			}
		}
	}
	public static void main(String[] args) {
		new Thread(new HoldIOTask()).start();
		new Thread(new LazyTask()).start();
		new Thread(new LazyTask()).start();
		new Thread(new LazyTask()).start();
	}
}
 

 4.多功能诊断器-pidstat

1.安装sysstat工具

示例3--使用pidstat查看进程信息

package chapter6;

public class HoldCPUMain {
	public static class HoldCPUTask implements Runnable{
		@Override
		public void run() {
			// TODO Auto-generated method stub
			while(true){
				double a = Math.random()*Math.random();
			}
		}
	}
	public static class LazyTask implements Runnable{
		@Override
		public void run() {
			// TODO Auto-generated method stub
			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();
	}
}

使用-p参数进一步查看进程信息:

[root@localhost bin]# pidstat -p 3591 1 3 -u -t
Linux 2.6.32-696.el6.x86_64 (localhost.localdomain) 	06/13/2018 	_x86_64_	(1 CPU)

08:44:56 PM      TGID       TID    %usr %system  %guest    %CPU   CPU  Command
08:44:57 PM      3591         -  100.00    0.00    0.00  100.00     0  java
08:44:57 PM         -      3591    0.00    0.00    0.00    0.00     0  |__java
08:44:57 PM         -      3592    0.00    0.00    0.00    0.00     0  |__java
08:44:57 PM         -      3593    0.00    0.00    0.00    0.00     0  |__java
08:44:57 PM         -      3594    0.00    0.00    0.00    0.00     0  |__java
08:44:57 PM         -      3595    0.00    0.00    0.00    0.00     0  |__java
08:44:57 PM         -      3596    0.00    0.00    0.00    0.00     0  |__java
08:44:57 PM         -      3597    0.00    0.00    0.00    0.00     0  |__java
08:44:57 PM         -      3598    0.00    0.00    0.00    0.00     0  |__java
08:44:57 PM         -      3599    0.00    0.00    0.00    0.00     0  |__java
08:44:57 PM         -      3600  100.00    0.00    0.00  100.00     0  |__java
08:44:57 PM         -      3601    0.00    0.00    0.00    0.00     0  |__java
08:44:57 PM         -      3602    0.00    0.00    0.00    0.00     0  |__java
08:44:57 PM         -      3603    0.00    0.00    0.00    0.00     0  |__java

08:44:57 PM      TGID       TID    %usr %system  %guest    %CPU   CPU  Command
08:44:58 PM      3591         -   99.00    0.00    0.00   99.00     0  java
08:44:58 PM         -      3591    0.00    0.00    0.00    0.00     0  |__java
08:44:58 PM         -      3592    0.00    0.00    0.00    0.00     0  |__java
08:44:58 PM         -      3593    0.00    0.00    0.00    0.00     0  |__java
08:44:58 PM         -      3594    0.00    0.00    0.00    0.00     0  |__java
08:44:58 PM         -      3595    0.00    0.00    0.00    0.00     0  |__java
08:44:58 PM         -      3596    0.00    0.00    0.00    0.00     0  |__java
08:44:58 PM         -      3597    0.00    0.00    0.00    0.00     0  |__java
08:44:58 PM         -      3598    0.00    0.00    0.00    0.00     0  |__java
08:44:58 PM         -      3599    0.00    0.00    0.00    0.00     0  |__java
08:44:58 PM         -      3600   99.00    0.00    0.00   99.00     0  |__java
08:44:58 PM         -      3601    0.00    0.00    0.00    0.00     0  |__java
08:44:58 PM         -      3602    0.00    0.00    0.00    0.00     0  |__java
08:44:58 PM         -      3603    0.00    0.00    0.00    0.00     0  |__java

08:44:58 PM      TGID       TID    %usr %system  %guest    %CPU   CPU  Command
08:44:59 PM      3591         -   97.03    0.00    0.00   97.03     0  java
08:44:59 PM         -      3591    0.00    0.00    0.00    0.00     0  |__java
08:44:59 PM         -      3592    0.00    0.00    0.00    0.00     0  |__java
08:44:59 PM         -      3593    0.00    0.00    0.00    0.00     0  |__java
08:44:59 PM         -      3594    0.00    0.00    0.00    0.00     0  |__java
08:44:59 PM         -      3595    0.00    0.00    0.00    0.00     0  |__java
08:44:59 PM         -      3596    0.00    0.00    0.00    0.00     0  |__java
08:44:59 PM         -      3597    0.00    0.00    0.00    0.00     0  |__java
08:44:59 PM         -      3598    0.00    0.00    0.00    0.00     0  |__java
08:44:59 PM         -      3599    0.00    0.00    0.00    0.00     0  |__java
08:44:59 PM         -      3600   97.03    0.00    0.00   97.03     0  |__java
08:44:59 PM         -      3601    0.00    0.00    0.00    0.00     0  |__java
08:44:59 PM         -      3602    0.00    0.00    0.00    0.00     0  |__java
08:44:59 PM         -      3603    0.00    0.00    0.00    0.00     0  |__java

Average:         TGID       TID    %usr %system  %guest    %CPU   CPU  Command
Average:         3591         -   98.67    0.00    0.00   98.67     -  java
Average:            -      3591    0.00    0.00    0.00    0.00     -  |__java
Average:            -      3592    0.00    0.00    0.00    0.00     -  |__java
Average:            -      3593    0.00    0.00    0.00    0.00     -  |__java
Average:            -      3594    0.00    0.00    0.00    0.00     -  |__java
Average:            -      3595    0.00    0.00    0.00    0.00     -  |__java
Average:            -      3596    0.00    0.00    0.00    0.00     -  |__java
Average:            -      3597    0.00    0.00    0.00    0.00     -  |__java
Average:            -      3598    0.00    0.00    0.00    0.00     -  |__java
Average:            -      3599    0.00    0.00    0.00    0.00     -  |__java
Average:            -      3600   98.67    0.00    0.00   98.67     -  |__java
Average:            -      3601    0.00    0.00    0.00    0.00     -  |__java
Average:            -      3602    0.00    0.00    0.00    0.00     -  |__java
Average:            -      3603    0.00    0.00    0.00    0.00     -  |__java
08:44:58 PM         -      3600   99.00    0.00    0.00   99.00     0  |__java
08:44:58 PM         -      3601    0.00    0.00    0.00    0.00     0  |__java
08:44:58 PM         -      3602    0.00    0.00    0.00    0.00     0  |__java
08:44:58 PM         -      3603    0.00    0.00    0.00    0.00     0  |__java

08:44:58 PM      TGID       TID    %usr %system  %guest    %CPU   CPU  Command
08:44:59 PM      3591         -   97.03    0.00    0.00   97.03     0  java
08:44:59 PM         -      3591    0.00    0.00    0.00    0.00     0  |__java
08:44:59 PM         -      3592    0.00    0.00    0.00    0.00     0  |__java
08:44:59 PM         -      3593    0.00    0.00    0.00    0.00     0  |__java
08:44:59 PM         -      3594    0.00    0.00    0.00    0.00     0  |__java
08:44:59 PM         -      3595    0.00    0.00    0.00    0.00     0  |__java
08:44:59 PM         -      3596    0.00    0.00    0.00    0.00     0  |__java
08:44:59 PM         -      3597    0.00    0.00    0.00    0.00     0  |__java
08:44:59 PM         -      3598    0.00    0.00    0.00    0.00     0  |__java
08:44:59 PM         -      3599    0.00    0.00    0.00    0.00     0  |__java
08:44:59 PM         -      3600   97.03    0.00    0.00   97.03     0  |__java
08:44:59 PM         -      3601    0.00    0.00    0.00    0.00     0  |__java
08:44:59 PM         -      3602    0.00    0.00    0.00    0.00     0  |__java
08:44:59 PM         -      3603    0.00    0.00    0.00    0.00     0  |__java

Average:         TGID       TID    %usr %system  %guest    %CPU   CPU  Command
Average:         3591         -   98.67    0.00    0.00   98.67     -  java
Average:            -      3591    0.00    0.00    0.00    0.00     -  |__java
Average:            -      3592    0.00    0.00    0.00    0.00     -  |__java
Average:            -      3593    0.00    0.00    0.00    0.00     -  |__java
Average:            -      3594    0.00    0.00    0.00    0.00     -  |__java
Average:            -      3595    0.00    0.00    0.00    0.00     -  |__java
Average:            -      3596    0.00    0.00    0.00    0.00     -  |__java
Average:            -      3597    0.00    0.00    0.00    0.00     -  |__java
Average:            -      3598    0.00    0.00    0.00    0.00     -  |__java
Average:            -      3599    0.00    0.00    0.00    0.00     -  |__java
Average:            -      3600   98.67    0.00    0.00   98.67     -  |__java
Average:            -      3601    0.00    0.00    0.00    0.00     -  |__java
Average:            -      3602    0.00    0.00    0.00    0.00     -  |__java
Average:            -      3603    0.00    0.00    0.00    0.00     -  |__java

使用jstack查看java应用程序所有线程信息:

可以看到两者的进程id相同(e10==3600)

2.Windows下性能监控工具

1.perform性能监控工具

示例4--使用perfmon

1.运行HoldCPUMain类。

2.在运行中输入“perfmon”打开性能监视器。

3.右击折线图添加计数器,选择Threads,搜索java,选中所有搜索的实例添加到计数器中

5.更换显示模式,以报表查看

可以看到,线程id为12892的线程占用很高的cpu。

使用jstack查看应用线程得

可以看到线程id相同(0x325c==12892)

2.process explorer进程管理工具

示例5--使用process explorer查看应用进程

1.下载processexplorer。

2.运行HoldLockMain,在processexplorer中进行查看

右击应用程序的进程,查看线程信息:

使用jstack查看线程信息

可以看到两者查看的线程信息相同

3.命令行工具--pslist

示例6--使用pslist查看应用线程

1.下载pslist工具,在命令行打开

2.运行HoldCPUTask程序

3.使用pslist java查看应用进程:

4.使用pslist java -d查看线程信息

5.使用jstack查看线程信息:

两者查看的线程信息相同。

JDK性能监控工具

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值