jvm的相关命令行指令和问题分析集锦

背景
  1. 整理并记录jvm常用指令
  2. 整理常见问题及分析过程
过程
  • jvm常用指令
  1. java -X 查询有哪些非标准参数
  2. java -XX:+PrintCommandLineFlags -version 查询使用了哪个垃圾收集器和java版本号
  3. jps 查询有哪些java进程
  4. jinfo pid 查询关于此java进程的一些基础信息
  5. jstat -gc pid 查询关于此进程的垃圾收集情况
  6. jstack pid 查询关于此进程的线程情况
  7. jmap -heap pid 查询关于此进程的堆情况。(堆信息转成文件存储)。不允许在生产环境,直接执行此指令。
  8. jconsole, jvisulvm不允许远程连接生产观测。本地开发或者测试是可以连接的。
  9. arthas开源工具,直接可在生产环境使用。
  • 问题及处理过程

  • 如果在生产环境上,出现了cpu居高不下的情况,如何定位问题?

  1. 把arthas-boot.jar上传到服务器上,启动。这个arthas只是一个工具,一个排查问题的工具而已,并不是说,一开始就与我们的服务同时部署起来,而是出现了问题后,自己通过这个工具进行一系列的排错即可。
  2. 使用的线程池,一定要有一个详细的名称。这样出现了问题,才好排错。
  3. 业务线程, 读业务逻辑,去分析和思考。
  4. jvm的线程(一般是GC线程,比如FGC频繁,或者一次FGC时间长)
  • 如果生产环境出现了死锁情况,如何排查或者说如何定位问题?
  1. 使用arthas工具,关联到此java进程。
  2. arthas thread -b, 得到哪些线程被阻塞住了,寻找代码相关业务逻辑,定位问题,找到原因。
  • 如何在开发或者测试环境,快速查询java实例的个数呢?
  1. jmap -histo pid | head -20
  • 如果在生产环境上出现了OOM,怎么办?

    1. 先解决问题。给多分配一些空间,重启服务。
    2. 在生产环境上,肯定是不能直接使用jmap命令的。因此,最好的方式就是,服务启动的时候,一定要配置一个参数:-XX:+HeapDumpOnOutOfMemeryError
    3. 有了这个堆转储文件,得找到一个合适的工具(jvisulvm)去分析这个文件。定位问题,然后分析代码,然后找到问题的原因,最后解决问题。
    4. 把文件拿到,在windows中,通过jvisulvm工具加载进来,打开即可。
  • 如果在生产环境出现了栈溢出,怎么办?

  1. 先解决问题。给-XSS多分配一点儿,默认是512k, 可以分配1m
  2. 在jvm中,一个方法一个栈帧,方法调用方法太多,就会造成,一个线程下,栈空间无法存放更多的栈帧了,总的来说,还是扩大栈的容量即可。
小结
  • 熟悉jvm常量指令。
  • 熟悉常见问题,及其解决思路,这些都不是理论,而是可以直接动手操作的。练习到熟悉。反复写反复练。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值