java生产环境下性能监控与调优(一)

1. -Xmx -Xms

-Xms等价于-XX:InitialHeapSize

-Xmx等价于-XX:MaxHeapSize

查看运行时参数的值:

ps -ef | grep tomcat (获得进程号)

jinfo -flag MaxHeapSize 进程id

显示结果:-XX:MaxHeapSize=268435456

2. PrintFlagsFinal

3. jps

4.jinfo

怎样查看一个正在运行的jvm中的一些参数的值?

jinfo -flag MaxHeapSize 进程id

更多可查询官方文档

5.jstat

查看垃圾回收的信息:jstat -gc 进程id 1000 10,打印S0C S1C S0U S1U EU OC OU...等区域的大小,最后的1000 10表示每秒打印一次,一共打印10次。

6. 如何导出内存印象文件

1)内存溢出自动导出

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath=./

2)使用jmap命令手动导出

jmap -dump:format=b,file=heap.hprof  进程id ,导出内存印象文件到当前路径下,文件名称是heap.hprof

jmap -heap 查看heap中每一块区域的使用情况

7. MAT分析内存溢出

1)分析程序中每个对象的数量

2)分析程序中每个对象所占的空间

两个功能基本就可以排查出内存溢出

8. jstack实战死循环与死锁

cpu飙高的排查方法:

1) jstack 进程id > 进程id.txt,jstack打印出tomcat中所有线程的信息,可以帮助排查CPU突然飙高的问题

2)top查看占用cpu最高的进程或者tomcat所在的进程,然后jstack导出该进程中的所有线程

3)top -p 进程id -H ,打印这个进程中的所有线程,然后找到占cpu很高的线程id,这里打印出的线程ID是十进制的,而jstack打印出的线程id是十六进制的,所以需要将十进制的id转换成十六进制的,以便在导出的线程文件中找到对应的线程信息。可以用“printf "%x" 十进制进程id”转换。

4)在jstack导出的文件中查找对应的线程,查看线程执行的堆栈信息,定位问题

死锁问题排查:

首先jstack导出tomcat中的线程信息,然后拉到最底下,如果有死锁,会显示在该文件的末尾

9. 监控java进程——jvisualvm

1)监控本地java进程

在本地java安装目录下启动D:\Install\Java1.8\jdk1.8.0_181\bin\jvisualvm.exe,在启动的图形化界面中即可监控本地java进程。界面中展示的信息类似MAT,jstack这些命令行实现的功能,但没有MAT的功能强大。

2)监控远程java进程,通过JMX连接

第一步:启动项目,启动参数参考连接https://www.jianshu.com/p/923580d3a5a2

第二步:在jvisualvm的图形化界面中添加远程主机,添加完以后,右击添加JMX连接。

https://visualvm.github.io/这个地址有visualvm的document,具体可在这里查询

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值