JAVA_HOME/bin/ 目录下jdk提供了很多自带工具,下面以tomcat下的web项目为例。如果感觉输出内容太多可以使用 xxx | head -n 20 显示输出内容的头20行。

jps

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

usage: jps [-help]jps [-q] [-mlvV] [<hostid>]Definitions:<hostid>:      <hostname>[:<port>]

-m 输出传递给main 方法的参数,在嵌入式jvm上可能是null,tomcat下的web项目为例

14002 Jps -m
21206 Bootstrap start

-l 输出应用程序main class的完整package名 或者 应用程序的jar文件完整路径名

21206 org.apache.catalina.startup.Bootstrap
14062 sun.tools.jps.Jps

-v 输出传递给JVM的参数,要显示其他用户的还是只能用unix/linux的 ps 命令。

jps 仅查找当前用户的Java进程,而不是当前系统中的所有进程。

jstat

jstat(JVM Statistics Monitoring Tool)是用于监控虚拟机各种运行状态信息的命令行工具。他可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。包括了对Heap size和使用请看,垃圾回收状况的监控。

jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]jstat -gc 21206 250 20  //查询进程pid 21206的垃圾收集情况,每250毫秒查询一次,一共查询20次。
jstat -gccause pid //额外输出上次GC原因
jstat -calss pid  //类装载、类卸载、总空间以及所消耗的时间
jstat –gcnew pid  //监视新生代GC的状况
jstat –gcold pid  //监视老年代GC的状况

-gc 中的参数

S0C 年轻代中第一个survivor(幸存区)的容量 (字节) S1C 年轻代中第二个survivor(幸存区)的容量 (字节) S0U 年轻代中第一个survivor(幸存区)目前已使用空间 (字节) S1U 年轻代中第二个survivor(幸存区)目前已使用空间 (字节) EC 年轻代中Eden(伊甸园)的容量 (字节) EU 年轻代中Eden(伊甸园)目前已使用空间 (字节) OC Old代的容量 (字节) OU Old代目前已使用空间 (字节) PC Perm(持久代)的容量 (字节) PU Perm(持久代)目前已使用空间 (字节) YGC 从应用程序启动到采样时年轻代中gc次数 YGCT 从应用程序启动到采样时年轻代中gc所用时间(s) FGC 从应用程序启动到采样时old代(全gc)gc次数 FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s) GCT 从应用程序启动到采样时gc用的总时间(s)

jmap

生成堆转储快照(heap dump)
打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节。

堆Dump是反应Java堆使用情况的内存镜像,其中主要包括系统信息、虚拟机属性、完整的线程Dump、所有类和对象的状态等。 一般,在内存不足(OOM)、GC异常等情况下,我们就会怀疑有内存泄露。这个时候我们就可以制作堆Dump来查看具体情况,分析原因。

常用指令

jmap -heap pid //查看java 堆(heap)使用情况和堆内存的初始化值(易读,清晰)
jmap -histo pid //查看堆内存(histogram)中的对象数量及大小 (实用)
jmap -histo:live pid //JVM会先触发gc,然后再统计信息 (gc后对象一下少了一半)
jmap -dump:format=b,file=heapDump pid //将内存使用的详细情况输出到文件,之后一般使用其他工具进行分析。

jstack

生成当前时刻的线程快照。
生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。
jstack命令主要用来查看Java线程的调用堆栈的,可以用来分析线程问题(如死锁)。

常用指令

jstack pid  //查看线程情况
jstack -F pid  //正常输出不被响应时,使用该指令
jstack -l pid  //除堆栈外,显示关于锁的附件信息

wait on monitor entry: 被阻塞的,肯定有问题
runnable : 注意IO线程
in Object.wait(): 注意非线程池等待

jhat

jhat:(Java Heap Analysis Tool)是一个用来分析java的堆情况的命令。使用jmap可以生成Java堆的Dump文件。生成dump文件之后就可以用jhat命令,将dump文件转成html的形式,然后通过http访问可以查看堆情况。

jinfo

jinfo可以输出java进程、core文件或远程debug服务器的配置信息。

常见问题

频繁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 pid查看线程情况

摘自:http://www.hollischuang.com/archives/1561

OutOfMemery如何处理

首先线上应用的jvm配置要养成良好的习惯,增加一下配置则可以在jvm发生 oom的时候自动dump日志了 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/export/log/dump/jvm-oom.log

总结

1.如果程序内存不足或者频繁GC,很有可能存在内存泄露情况,这时候就要借助Java堆Dump查看对象的情况。
2.要制作堆Dump可以直接使用jvm自带的jmap命令
3.可以先使用jmap -heap命令查看堆的使用情况,看一下各个堆空间的占用情况。

参考资料

Java命令学习系列(四)——jstat (系列文章很好,很全)

Java——命令jps、jstat、jmap、jstack、jhat、jinfo相关推荐

  1. java jamp cmd,Java命令行监控工具jmap,jstack...

    原标题:Java命令行监控工具jmap,jstack... Java命令行监控工具(jmap,jstack,jstat,jinfo,jps) 项目部署上线之后,线上项目是不能轻易修改的,定位问题的难度 ...

  2. GC调优基础知识之工具篇--jdk为我们提供的命令行命令 jps,jstat,jmap,jinfo,jstat,jstack,jhat 等

    一. JDK为我们提供的工具:    在Windows中对于这些命令的支持是源自JDK -->bin下面的.exe可执行文件的支持.    在Linux中对于这些命令的支持是源自JDK --&g ...

  3. JVM 调优实战--常用JVM命令:jps/jinfo/jstat/jmap/jstack/jhat

    jps:查看jvm进程: jinfo:查看完整jvm参数信息: jstat:查看堆内存使用情况,加载的class数量及大小.-gc查看垃圾回收统计: jmap:查看堆内存使用情况,jstat是统计,j ...

  4. jvm系列(四):jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)

    2019独角兽企业重金招聘Python工程师标准>>> 文章同步发布于github博客地址,阅读效果更佳,欢迎品尝 运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我 ...

  5. [初级]Java命令学习系列(六)——jinfo

    转载自 [初级]Java命令学习系列(六)--jinfo jinfo可以输出java进程.core文件或远程debug服务器的配置信息.这些配置信息包括JAVA系统参数及命令行参数,如果进程运行在64 ...

  6. java 内存溢出 jstack,Java——命令jps、jstat、jmap、jstack、jhat、jinfo

    JAVA_HOME/bin/ 目录下jdk提供了很多自带工具,下面以tomcat下的web项目为例.如果感觉输出内容太多可以使用 xxx | head -n 20 显示输出内容的头20行. jps j ...

  7. java内存溢出排查jstack_Java命令行监控工具(jmap,jstack,jstat,jinfo,jps)

    项目部署上线之后,线上项目是不能轻易修改的,定位问题的难度也会变大.因此监控是非常重要的一个环节,有了监控,我们才能更好的定位系统中的问题,从而排查.监控的工具有很多种, 但是java自带的命令行监控 ...

  8. Java命令:jstat — 查看JVM的GC信息

    文章目录 一.简介 二.常用命令 1.jstat -class pid : class loader行为统计 2.jstat -compiler pid : JIT编译器行为统计 3.jstat -g ...

  9. Java命令学习系列

    Java命令学习系列(七)--javap Java命令学习系列(六)--jinfo Java命令学习系列(五)--jhat Java命令学习系列(四)--jstat Java命令学习系列(三)--Jm ...

最新文章

  1. linux文件描述符与标识符,文件描述符fd
  2. VisualStudio2008+水晶报表的使用
  3. 单身汪的电梯之旅(洛谷P1897题题解,Java语言描述)
  4. 安装Kubernetes V1.18.2
  5. AndroidStudio_安卓原生开发_自定义蒙板弹出框WaitDialog---Android原生开发工作笔记134
  6. Python怎么注册和调用大漠插件
  7. Apache ShenYu源码阅读系列-Divide插件
  8. 匿名方法和Lambda表达式
  9. springmvc测试类中如何引入controller与service,request,respon
  10. cs与msf的联合使用
  11. SQL语句插入日期类型
  12. Python 括号问题
  13. java replica set_Kubernetes对象之ReplicaSet
  14. Python|求a + aa + aaa + … + aa…a的值
  15. 【刷leetcode,拿Offer-009】561. Array Partition I(贪心,C++)
  16. EXCEL2013 vba工程密码破解
  17. V3商家支付到零钱+商家支付到零钱状态查询(100免密PHP版)
  18. java实现图像旋转
  19. developerWorks Java 技术专区-这里有数百篇关于 Java 编程各个方面的文章
  20. 回溯算法经典案例 1 ——N皇后 Java

热门文章

  1. 开源UReport 整合到产品中实践简要:(七)ureport设计器设计报表前基本功知识-表达式与函数
  2. 2018上海国际专业灯光音响展录音与制作专区来袭
  3. C语言%运算:a%b
  4. 如何在不插电源合盖的情况下,让mac book pro连接显示器键盘持续使用
  5. 本地配置 Aria2 下载程序搭建及 Web 控制面板
  6. mysql设计高考倒计时_HTML/CSS+JS制作一个高考倒计时页面
  7. [项目]配合JQuery简洁好看的倒计时页面(附源码)
  8. PLC算法_解析ABB机器人当前位置数据
  9. 07_《计算机安全原理与实践》数据安全随笔
  10. thinkphp5一键清除缓存