一个开发者的进阶是非常难的,作为一个java程序员的进阶也是非常难的。最近我在寻求作为一个java程序员的突破,所以最近也在不断的看各种的书,对过去用到的技术进行总结。其实真的没去大的互联网公司,之前做的要么是项目,要么是小用户量的互联网产品。所以今天说的基本都属于理论。因为在项目上或者小用户量的产品出了问题关闭调试就可以了,但是作为一个大用户量的产品线上出了问题为了高可用4个9的要求是不可能让你重新开启调试的所以线上调试的能力是很重要的,所以今天讲的就是一些用于线上jvm命令。
jad 反编译工具:
很多线上问题可能是由于引用的jar包导致的,所以我们在查错的时候可能要了解源码所以这个时候使用java反编译工具就非常重要了。java中常用的反编译工具是jad,并不是jvm的命令,他是一个工具,所以你在使用前需要下载这个工具。使用方法是在目录下执行jad xxx.class.
btrace线上调试工具:
在线上跑的程序,特别是正在正常运行的程序,有时候我们需要知道,请求参数的时候没有了开发环境时候的debug,想要知道系统中出现了什么问题,这个时候就需要使用btrace监听正在运行的代码,但是这个工具必须结合一段java代码使用。
使用方式:btrace -p 2020 -cp ~/servlet.jar 1507 ~/BTrace.java
jmap 定位内存中的问题:
在生产环境中很多时候可能会出现内存溢出的情况,可能会报OutOfMemoryError,而jmap从来监听Java进程对内存的使用情况。他是JDK自带的监控工具。
jstat是JDK自带的监控工具利用jvm内建的指令对Java应用程序的资源和性能进行实时的命令行监控,打印GC等统计信息。
jstack 命令用于打印给定的Java进程ID的线程堆栈快照信息,从而可以看到Java进程内线程的执行状态,正在执行的任务等,可以据此分析线程,死锁等问题。
jinfo 可以输出并修改运行是的java进程的环境变量和虚拟机参数。