性能分析系列-小命令保证大性能(2)

发表于:2016-11-28来源:简书作者:小程故事多点击数: 标签:性能分析
.lang. String .equals 5 0.13 % 95.89 % 14 301138 java .net.URLStreamHandler.parseURL 6 0.11 % 96.01 % 6 301339 java .net.URLClassLoader$ 1. run 7 0.10 % 96.10 % 14 301124 java .lang. String .init 8 0.
.lang.String.equals 5 0.13% 95.89% 14 301138 java.net.URLStreamHandler.parseURL 6 0.11% 96.01% 6 301339 java.net.URLClassLoader$1.run 7 0.10% 96.10% 14 301124 java.lang.String.<init> 8 0.09% 96.19% 3407 300355 java.lang.String.charAt 9 0.08% 96.27% 36 300443 java.io.UnixFileSystem.normalize

注:通过上面内容可以看到,哪个类的方法执行时间长,耗费了cpu时间,一目了然,方便我们快速定位问题。

2、命令的具体讲解
hprof不是独立的监控工具,它只是一个java agent工具,它可以用在监控Java应用程序在运行时的CPU信息和堆内容,使用java -agentlib:hprof=help命令可以查看hprof的使用文档。


Paste_Image.png

通过上图可以看到这个工具非常强大,可以统计的东西很多,上面的例子统计的是cpu时间,同样我们还可以统计内存占用的dump信息。
如:-agentlib:hprof=heap,format=b,file=/test.hprof

这个hprof小工具,非常方便我们在用JUnit自测代码的时候结合使用,既可以解决业务上的BUG,又能够在一定程序上解决可发现的性能问题,非常实用。

二、性能排查工具-pidstat

1、示例演示
例子程序:

/**
 * PROJECT_NAME: test
 * DATE:         16/7/22
 * CREATE BY:    chao.cheng
 **/
public class PidstatTest {
    public static class PidstatTask implements  Runnable {
        public void run() {
            while(true) {
                double value = Math.random() * Math.random();
            }
        }
    }

    public static class LazyTask implements Runnable {
        public void run() {
            try {
                while (true) {
                    Thread.sleep(1000);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        new 



           

原文转自:http://www.jianshu.com/p/6df2963fe94e