我很喜欢你,可是命运逼着我妥协了
java虚拟机自带了很多有效的工具的可以用于java项目监测调试。不过,在使用jvm自带的调试工具之前,必须得掌握linux下的调试指令。下面是一部分。
然后,是jvm虚拟机的工具
jps
与linux系统中ps的功能一样,主要用于支持进程相关的操作
jstat
可以使用 jstat -options查看jstat支持哪些命令,比较常用的是
比较常见的用法是:
jmap
jstack
获取java进程的栈信息
jconsole
打开了本地的java项目之后,然后打开jconsole连接到需要监测的项目,就可以进行监测了
jhat
jhat是分析工具,主要用来分析jmap dump下来的内存快照
jinfo
同时,可以使用jdk内置的visual vm对java项目进行监控,visual vm支持安装插件,只要在命令行中输入:
就可以运行了。监测远程端口时,远程java的监听端口默认为1099端口。visual vm安装了visual GC插件之后,可以对项目的内存中的新生代老年代进行有效监测,分析内存泄漏时,用visual vm监测,当发现full GC很多且没有用的时候,可以确定的有两个可能性,第一是虚拟机开启参数-Xmx/-Xmn/-Xms等参数设置得有问题。这得根据项目中jvm使用的具体垃圾回收器进行讨论,不同的垃圾回收器有不同的处理手段。第二是可能发生了内存泄漏。可以优先考虑第二种情况,当老年代比较满的时候切换到抽样器中查看当前内存中对象的占比情况,如果发现了一些非通用对象比较多,那么内存泄漏大部分都是因为那些非通用对象的积压造成的,也就是所谓的内存泄漏。这时候就可以去研究一下源代码,看看是不是没有用的对象引用没有被释放掉,如果是,那么就采取措施把没用的对象引用释放掉,再测试是否会发生内存泄漏,如果仍然发生内存泄漏或者该对象的引用是释放掉了的,只不过需要的量本身就比较大,那么就有可能是内存中参数设置得有问题了。