举几个例子
1、查看最繁忙的线程,以及是否有阻塞情况发生?
场景:我想看下查看最繁忙的线程,以及是否有阻塞情况发生? 常规查看线程,一般我们可以通过 top 等系统命令进行查看,但是那毕竟要很多个步骤,很麻烦。
2、确认某个类是否已被系统加载?
场景:我新写了一个类或者一个方法,我想知道新写的代码是否被部署了?
3、如何查看一个class类的源码信息?场景:我新修改的内容在方法内部,而上一个步骤只能看到方法,这时候可以反编译看下源码。
4、如何跟踪某个方法的返回值、入参?场景:我想看下我新加的方法在线运行的参数和返回值?
5、如何看方法调用栈的信息?场景:我想看下某个方法的调用栈的信息?
运行此命令之后需要即时触发方法才会有响应的信息打印在控制台上。
6、找到最耗时的方法调用?
场景:testMethod这个方法入口响应很慢,如何找到最耗时的子调用?
运行此命令之后需要即时触发方法才会有响应的信息打印在控制台上,然后一层一层看子调用。
7、如何临时更改代码运行?场景:我找到了问题所在,能否线上直接修改测试,而不需要在本地改了代码后,重新打包部署,然后重启观察效果?
如上,是直接更改线上代码的方式,但是一般好像是编译不成功的。所以,最好是本地ide编译成 class文件后,再上传替换为好!
总之,已经完全不用重启和发布了!这个功能真的很方便,比起重启带来的代价,真的是不可比的。比如,重启时可能导致负载重分配,选主等等问题,就不是你能控制的了。
8、我如何测试某个方法的性能问题?