当前位置 > 主页 > 万和大讲堂 >


南京Java培训分享:Java开发必须掌握的线上问题排查命令

2016-10-10 11:14

  作为一个合格的开发人员,不仅要能写得一手还代码,还有一项很重要的技能就是排查问题。这里南京万和Java培训提到的排查问题不仅仅是在coding的过程中debug等,还包括的就是线上问题的排查。由于在生产环境中,一般没办法debug,所以我们需要借助一些常用命令来查看运行时的具体情况,这些运行时信息包括但不限于运行日志、异常堆栈、堆使用情况、GC情况、JVM参数情况、线程情况等。


  给一个系统定位问题的时候,知识、经验是关键,数据是依据,工具是运用知识处理数据的手段。为了便于我们排查和解决问题,Sun公司为我们提供了一些常用命令。这些命令一般都是jdk/lib/tools.jar中类库的一层薄包装。随着JVM的安装一起被安装到机器中,在bin目录中。下面就和南京万和Java培训一起来认识一下这些命令以及具体使用方式。


  jps


  功能


  显示当前所有java进程pid的命令。


  常用指令


  jps:显示当前用户的所有java进程的PID


  jps -v 3331:显示虚拟机参数


  jps -m 3331:显示传递给main()函数的参数


  jps -l 3331:显示主类的全路径


  jinfo


  功能


  实时查看和调整虚拟机参数,可以显示未被显示指定的参数的默认值(jps -v 则不能)。


  jdk8中已经不支持该命令。更多问题,请咨询南京万和Java培训


  常用指令


  jinfo -flag CMSIniniatingOccupancyFration 1444:查询CMSIniniatingOccupancyFration参数值


  jstat


  功能


  显示进程中的类装载、内存、垃圾收集、JIT编译等运行数据。


  常用指令


  jstat -gc 3331 250 20 :查询进程2764的垃圾收集情况,每250毫秒查询一次,一共查询20次。


  jstat -gccause:额外输出上次GC原因


  jstat -calss:件事类装载、类卸载、总空间以及所消耗的时间


  jmap


  功能


  生成堆转储快照(heapdump)


  常用指令


  jmap -heap 3331:查看java 堆(heap)使用情况


  jmap -histo 3331:查看堆内存(histogram)中的对象数量及大小


  jmap -histo:live 3331:JVM会先触发gc,然后再统计信息


  jmap -dump:format=b,file=heapDump 3331:将内存使用的详细情况输出到文件,之后一般使用其他工具进行分析。


  jhat


  功能


  一般与jmap搭配使用,用来分析jmap生成的堆转储文件。


  由于有很多可视化工具(Eclipse Memory Analyzer 、IBM HeapAnalyzer)可以替代,所以很少用。不过在没有可视化工具的机器上也是可用的。更多问题,请咨询南京万和Java培训


  常用指令


  jmap -dump:format=b,file=heapDump 3331 + jhat heapDump:解析Java堆转储文件,并启动一个 web server


  jstack


  功能


  生成当前时刻的线程快照。


  常用指令


  jstack 3331:查看线程情况


  jstack -F 3331:正常输出不被响应时,使用该指令


  jstack -l 3331:除堆栈外,显示关于锁的附件信息


  常见问题定位过程


  频繁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)分析堆情况。


  六、结合代码解决内存溢出或泄露问题。更多问题,请咨询南京万和Java培训


  死锁问题


  一、使用jps查看线程ID


  二、使用jstack 3331:查看线程情况


  结语


  经常使用适当的虚拟机监控和分析工具可以加快我们分析数据、定位解决问题的速度,但也要知道,工具永远都是知识技能的一层包装,没有什么工具是包治百病的。


  想和兴趣相投的朋友们一起交流吗?那就来江苏万和计算机培训中心吧。而江苏万和作为南京专业的Java培训中心,欢迎广大有志于此行业发展的学员们加入。

最近开班 more>
  • 全栈开发
  • 前端基础班
  • 软件测试
  • Java大数据开发工程师
  • 云原生精英班
  • 开发课程基础班第四期
  • 开发课程基础班第三期
  • 开发课程基础班第二期
  • 开发课程基础班第一期
  • Java Web UI Python
  • CISP
  • HCIE-Datacom(HCIA,HCIP基础)
  • HCIP-Datacom(HCIA基础)
  • HCIA-Datacom(0基础)
  • HCIE-Datacom(HCIA,HCIP基础)
  • HCIP-Datacom(HCIA基础)
  • HCIA-Datacom(0基础)
  • OCM 12C
  • OCP 19C
  • RHCE 9.0
  • 脱产班
  • 脱产班
  • 脱产班
  • 脱产班
  • 脱产班
  • 脱产班
  • 脱产班
  • 脱产班
  • 脱产班
  • vip班
  • 考试计划
  • 脱产班
  • 脱产班
  • 脱产班
  • 双休班
  • 双休班
  • 双休班
  • 双休班
  • 业余班
  • 业余班
  • 10月16日
  • 9月23日
  • 9月2日
  • 9月30日
  • 8月26日
  • 10月8日
  • 9月23日
  • 9月16日
  • 9月9日
  • 随时开课
  • 9月21日
  • 10月17日
  • 9月18日
  • 9月2日
  • 11月2日
  • 10月26日
  • 9月7日
  • ——
  • 随时开课
  • 9月26日
    • 姓 名 :
    • 电 话 :
    • 课 程 :

技术交流群

  • Java大数据交流群560819979加入
  • Python技术交流群595083299加入
  • Oracle技术交流群595119011加入
  • Web前端技术交流群604697610加入
  • Huawei技术交流群482919361加入
  • Redhat技术交流群587875348加入
  • UI设计技术交流群511649801加入
  • Cisco技术交流群596886705加入
  • IT运维技术交流群605888381加入