1.美图
2.概述
在生产环境中经常遇到格式各样的问题,如OOM或者莫名其妙的进程死掉。一般情况下是通过修改程序,添加打印日志;然后重新发布程序来完成。然而,这不仅麻烦,而且带来很多不可控的因素。有没有一种方式,在不修改原有运行程序的情况下获取运行时的数据信息呢?如方法参数、返回值、全局变量、堆栈信息等。Btrace就是这样一个工具,它可以在不修改原有代码的情况下动态地追踪java运行程序,通过hotswap技术,动态将跟踪字节码注入到运行类中,对运行代码侵入较小,对性能上的影响可以忽略不计。
在下列情况时可以使用BTrace进行分析:
-
接口性能变慢,分析每个方法的耗时情况;
-
当在Map中插入大量数据,分析其扩容情况;
-
分析哪个方法调用了System.gc(),调用栈如何;
-
执行某个方法抛出异常时,分析运行时参数;
-
…
3. 使用场景
- 服务慢,能找出慢在哪一步,哪个函数里么? <