JVM优化

LINUX中 JVM 的 优化 ,查询 操作

一 。jps : 显示当前系统的java进程情况

二。jstat -class 7881 : 显示 java进程 7881 的详情

(Loaded :加载的文件个数)


三。GC 调优参数解析 :


jstat -gcutil 查看 各个分区 的具体情况, 每一秒输出一次,总共10次:

s0,s1,Enden,Old 各个区现在使用的比例,执行GC的次数和消耗时间


在eclipse 官网下载mat.exe ,来查看文件信息:

https://www.eclipse.org/downloads/download.php

碰到内存溢出,可以导出文件。利用 mat 工具 分析,哪个对象占的内存最多,自然就能找出内存泄漏的原因了。

解析时可以看到 下图信息:


可以找到哪个对象占用的堆内存 和 百分比 很多,就可以找到问题了!


四。内存溢出

堆内存溢出 : 创建太多的类对象 会导致 。

非堆内存溢出:创建太多的类,会导致。

五。Jstack 死循环与死锁

比如运行后,CPU飙高,可以利用Jstack 来 查看jvm里运行的所有线程的运行情况。

比如:一个方法导致了 死循环,当请求越来越多时,CPU就会狂飙,以至于后边的请求都进不来了。


先导出 所有线程的运行情况后,在 服务器上top -C 找出最占CPU的线程pid ,然后再在该文件中搜一下 该pid 对应的 哪个方法的调用,就能找出 问题!

也可以通过 导出的文件来定位死锁。

六。visualVM JDK自带的 jvm 内存分析,线程分析,图形化界面展示。

安装插件的时候,复制链接可能会提示超时,无法下载; 不要用jdk自带的那个 ,直接去网上下一个 就可以安装插件了。

七。Btrace 可以在线查看 线上出现的问题

(Btrace 是在 字节码 层面上进行的拦截的)

Btrace 可以做成一个小工程,单独部署,脚本启动的时候,其实就是将btrace 嵌入到 要监控的 程序上。


(拦截普通方法 ,方法名,参数)



捕捉异常信息


八。远程Debug

远程调试的 意义:

①。支付宝,微信的支付业务,不得不部署的外网测试环境测试

②。预发环境(与正式发布的数据库基本一致)下,出现问题,可以使用远程Debug确定问题,不用去胡乱猜测,费时费力。[PS:有一些bug,只有在线上才存在,测试环境不出现]

针对tomcat ,直接改:

catalina.sh 文件 :设置远程连接的端口号


startup.sh 文件: 加上jpda


在IDEA上设置 tomcat remote ->


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容