作为一个及格的开拓人员,不只要能写得一手还代码,尚有一项很重要的技术就是排盘查题。这里提到的排盘查题不只仅是在coding的进程中debug等,还包罗的就是线上问题的排查。由于在出产情况中,软件开发,一般没步伐debug(其实有些问题,debug也白扯。。。),所以我们需要借助一些常用呼吁来查察运行时的详细环境,这些运行时信息包罗但不限于运行日志、异常仓库、堆利用环境、GC环境、JVM参数环境、线程环境等。
给一个系统定位问题的时候,常识、履历是要害,数据是依据,软件开发,东西是运用常识处理惩罚数据的手段。为了便于我们排查息争决问题,Sun公司为我们提供了一些常用呼吁。这些呼吁一般都是jdk/lib/tools.jar中类库的一层薄包装。跟着JVM的安装一起被安装到呆板中,在bin目次中。下面就来认识一下这些呼吁以及详细利用方法。文中涉及到的所有呼吁的具体信息可以参考 Java呼吁进修系列文章。
jps
成果
显示当前所有java历程pid的呼吁。
常用指令
具体先容
jinfo
成果
及时查察和调解虚拟机参数,可以显示未被显示指定的参数的默认值(jps -v 则不能)。
jdk8中已经不支持该呼吁。
常用指令
jinfo -flag CMSIniniatingOccupancyFration 1444:查询CMSIniniatingOccupancyFration参数值
具体先容
jstat
成果
显示历程中的类装载、内存、垃圾收集、JIT编译等运行数据。
常用指令
具体先容
jmap
成果
生成堆转储快照(heapdump)
常用指令
具体先容
jhat
成果
一般与jmap搭配利用,用来阐明jmap生成的堆转储文件。
由于有许多可视化东西(Eclipse Memory Analyzer 、IBM HeapAnalyzer)可以替代,所以很罕用。不外在没有可视化东西的呆板上也是可用的。
常用指令
jmap -dump:format=b,file=heapDump 3331 + jhat heapDump:理会Java堆转储文件,并启动一个 web server
具体先容
jstack
成果
生成当前时刻的线程快照。
常用指令
具体先容
常见问题定位进程
频繁GC问题或内存溢出问题
一、利用jps查察线程ID
二、利用jstat -gc 3331 250 20 查察gc环境,一般较量存眷PERM区的环境,查察GC的增长环境。
三、利用jstat -gccause:特别输出上次GC原因
四、利用jmap -dump:format=b,file=heapDump 3331生成堆转储文件
五、利用jhat可能可视化东西(Eclipse Memory Analyzer 、IBM HeapAnalyzer)阐明堆环境。
六、团结代码办理内存溢出或泄露问题。
死锁问题
一、利用jps查察线程ID
二、利用jstack 3331:查察线程环境
结语
常常利用适当的虚拟机监控和阐明东西可以加速我们阐明数据、定位办理问题的速度,但也要知道,东西永远都是常识技术的一层包装,没有什么东西是包治百病的。