java新手在遇到jvm上的问题,很多时候都是不知所措,下面我介绍一下小问题(仅单机,web)查找的路子,其中有遇到各种jdk的工具都是,仅作为自己的工作备份,后续的会陆续增加。
?
首先查看日志,web server会有很多有用的日志,有些时候直接通过日志就可以搞定这些问题了
日志看完了,我们就从运维的角度来定位问题,找到对应的web机器,top(load average,cpu、内存)查看ctrl+h,找到对应的进程号转16进制,jstack 14400|grep -A 10 4015 ,定位到对应堆栈信息查看一下代码,找到对应的代码直接解决掉。多来几次就逮到了,普通的小问题就差不多解决了。
?
纠结原因常见的分析如下
1、cpu瞬间增加,大多数是项目中有大量的运算或者死循环到导致的。我们直接按照上面的步骤定位
2、不间断的gc,造成jvm的不可能用
3、磁盘满了,这个问题遇到过,尤其调试log的磁盘
4、线程死锁,这个定位问题很简单,可以直接jmx,检测一下就能定位到哪个线程死锁找到对应的代码片段
?
?
需要必须掌握的工具top、jps、jstack、jmap、jstat ?基本上能定位到简单的java问题了