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 ->
