(3)操作使用。
首先,输入如下命令启动TProfiler:
-javaagent :/opt/tprofi1er/tprofi1er-1.0.1.jar
-Dprofile. properties=/opt/tprofiler/profile.properties
指令操作如下所示。
査看TProfiler当前状态:
$ java -cp /opt/tprofiler/tprofiler-1.0.1. jar com.taobao.profile.client.TProfilerClient 127.0.0.1 30000 status
关闭TProfiler:
$ java -cp /opt/tprofiler/tprofiler-1.0.1. jar com.taobao.profile.client.TProfilerClient 127.0.0.1 30000 stop
开启TProfiler:
$ java -cp /opt/tprofiler/tprofiler-1.0.1. jar com.taobao.profile.client.TProfilerClient 127.0.0.1 30000 start
保存数据:
执行此命令会将数据保存到~/logs/目录下生成“TProfiler的日志.png”。
用普通方法进行线程统计:
$ java -cp /opt/tprofiler/tprofiler-1.0.1. jar com.taobao.profile.analysis.SamplerLogAnalysis~/ logs/tsampler. log~/logs/method. log~/logs/thread. log
top统计:
$ java -cp /opt/tprofiler/tprofiler-1.0.1. jar com.taobao.profile.analysis.ProfilerLogAnalysis-/ logs/tprofiler. log~/logs/tmethod. log^/logs/topmethod. log~/logs/topob j ect. log
执行上述命令显示的topmethod.log部分结果如下:
com/defonds/core/ppts/common/support/JsonUtils : object2 j sonString: 123 13519 154 2083584 com/caucho/hessian/client/HessianURLConnection: sendRequest: 156 15894 130 2072565 com/defonds/rest/core/client/proxy/ResourceJsonlnvocationHandler:invoke:39 8123 113 921340 com/defonds/core/ppts/cache/service/impl/MerBankCfgServicelmpl: selectMerBankCfgByParams:
72 54213 15 799322
com/def onds/core/ppts/incomes/biz/sinopay/service/impl/SinoPayBankReturnServiceImpl4 Json: updateOrderSuccess:792 2495 176 438542
结果显示的数据分别是方法信息、执行次数、平均执行时间(单位为毫秒)和全部执行时间(单位为毫秒)。
方法执行时间的统计非常重要,它是TProfiler最重要的特性,是TProfiler能够傲视所有其他性能测试类(包括JVM性能测试类)工具的关键所在,我们将会不止一次地在关键的时候受益于TProfiler的这一非常有用的特性。
根据topmethod.log统计结果,我们拿到了热点方法前10位的被调用次数、平均执行时间、全部执行时间,这些都是性能测试过程中重点观察的指标,十分有价值和意义。
提示
Arthas(阿尔萨斯)是阿里开源的Java诊断性能监控分析工具,它不需要用户做任何参数配置,就可以直观地获取各种维度的性能数据。通过阅读官网的介绍可以看到,当我们遇到类似以下问题而束手无策时,Arthas可以帮助我们解决。
这个类是从哪个jar包加载的?为什么会报各种类相关的异常?
我改的代码为什么没有运行?难道是我没提及?分支搞错了?
遇到问题无法在线上调试,难道只能通过加日志再重新发布吗?
线上遇到某个用户的数据处理有问题,但线上无法调试,线下无法重现?
是否有全局视角来查看系统的运行状况?
有什么办法可以监控到JVM的实时运行状态?
Arthas支持JDK6+,支持Linux/macOS/Windows,采用命令行交互模式,同时提供丰富的Tab自动补全功能,进一步方便开发人员进行问题的定位和诊断。