前言

在生产环境中,为了保证Java应用的健康运行,需要动态检测应用运转过程中的各种指标,比较常见的像CPU利用率,内存使用,堆栈是否正常等

另一方面,生产环境中出现的各种问题,包括异常信息等,都可以通过一些监控指标进行呈现,通过这些指标指导运维和开发人员快速排查问题定位问题与解决问题

但说到底,监控的本身离不开原始数据的采集,而JVM本身可以通过相关的命令得出许多有助于分析,排查和定位问题的源信息,本篇将介绍开发过程中常用的一些JVM监控命令,方便工作中快速查阅

命令 说明 常用形式
jps 查看java进程pid jps
jinfo 查看jvm环境与参数 jinfo pid > a.txt
jstat 查看jvm内存与GC状态 jstat -gcutil pid 1000 10
jstack 查看各线程调用方法堆栈 jstack -l pid
jmap 生成dump文件 jmap -dump:live,format=b,file=dump.hprof pid
jmap 生成统计信息 jmap -histo pid
jhat dump分析工具 jhat dump.hprof

下面主要围绕这几个命令分别进行说明

jps

列出当前服务器的所有运行中的Java进程的PID


如果单纯是想查看当前服务器上运行的进程,也可以通过下面的命令查看

ps -ef
ps -ef | grep java [查看Java进程]
netstat -ltnp [查看本机各端口的网络连接情况]
netstat -ltnp | grep java [查看本机java相关的网络连接情况]
netstat -tulpn [和上面的差不多]



jinfo

查看jvm环境与参数

在上面通过JPS命令打印出了各个进程的信息之后,可以通过jinfo + pid 输出当前这个进程相关的详细信息

比如,当前运行的Java环境信息,class文件位置,以及最后的当前PID相关的堆栈分配信息等


需要说明的是,这里的堆栈分配空间信息都是静态的,还无法很好的反映运行时的状态,如果这样查看不方便,可以通过下面的命令将jinfo的详细信息输出到文件中查看

jinfo pid > a.txt

jstat

查看jvm内存相关的统计信息与GC状态 jstat -gcutil pid 1000 10

结合上面的堆区的结构图一起理解,通过这个命令,可以展示出某个Java进程在当前时刻,JVM中堆的各个区域内存占用情况,这里是以百分比的形式呈现,运维或者开发的同学看到这个数据,可以直观的看出堆中各个区域的内存消耗是否正常,比如上图展示的数据,表明堆的区域处于比较健康运行的状态,如果是E区的数值偏高呢?

  • S0: 幸存者区0
  • S1:幸存者区1
  • E:eden区
  • O:old区
  • M:元空间(JDK8)
  • CCS:压缩类空间利用率为百分比
  • YGC:年轻一代GC事件次数
  • YGCT:年轻一代垃圾收集时间
  • FGC:完整的GC事件的数量
  • GCT:垃圾收集总时间

如果想直接查看数值而不是百分比,可以直接通过下面的命令查看,

jstat -gc 16485 1000 10


jstat扩展

输出当前进程的类加载信息

jstat -class pid


查看GC相关

-gc、 -gcutil、-gccause,-gcnew,-gcold

在上面我们使用了 -gc打印了当前时刻某个进程的GC相关信息

查看当前进程发生GC的原因

jstat -gccause 16485

查看JIT编译信息

-compiler ,-printcompilation

jstack

查看并打印各线程调用方法堆栈信息的快照

基本用法:

jstack PID

附加选项:

jstack -l PID 显示锁的额外信息
jstack -e PID 显示有关线程的额外信息,比如分配的内存,定义了多少个类等

常用命令:

jstack -l PID 查看当前进程中的所有线程,以及各个线程中的调用堆栈信息


如果里面的线程堆栈信息太多,命令行窗口查看不方便,可以输出到文件中查看,通过读懂这些打印输出的线程堆栈信息,比如说当出现线程死锁时,就可以反映出来,方便开发人员快速定位程序问题

其实来说,这个命令在开发测试阶段做问题快速定位还是可以使用的,但是在生产环境下,一般不建议这么搞,毕竟打印出来的线程堆栈信息太多了,不方便查看,一般来说,是导出来之后,结合其他的分析工具配合使用更有效果

jmap

用于展示JVM中某个进程中对象内存映射或堆内存的详细信息,由于该命令属于实验性的,JDK8支持,在更高的版本中,部分功能可以使用jhsdb 代替,也可以使用jcmd代替

命令使用形式

jmap [options] pid

常用命令:

jmap -clastats pid 查看进程中类的统计信息
jmap -histo pid | head -n 20 生成统计信息,输出最占空间的前20个统计信息


从统计结果,可以清楚的看到整个进程中的class各个元数据占用的大小,实例个数信息等,同时这些数据可以帮助我们了解到在当前的应用中,那些对象最占用空间,最占用空间的类信息等,以便开发人员快速定位程序代码进行修正优化

输出线程的堆栈信息到dunp文件

jmap -dump:live,format=b,file=dump.hprof pid

使用jmap将进程的堆栈信息输出到dump文件中,是在平时开发过程中对相关生产问题进行排错的重要手段,比如像OOM信息等,就可以借助输出的dump文件导入到可视化分析工具中进行细致的排查,是开发过程中的基本思路,下面我们来演示下

关于上面的命令简单解释下,

  • -dump:live 表示dump那些还存活的对象
  • format=b 表示以二进制格式输出
  • file=dump.hprof pid 输出文件的命名


输出得到的dump.hprof文件就可以导出到可视化工具中进行堆栈日志分析,比如像 jvisualvm 或者Eclipse Memory Analyzer(MAP) 进行分析,后续的文章中将会提到

jvm常用监控命令总结相关推荐

  1. redis常用监控命令

    redis常用监控命令 1.实时监控redis服务收到来自应用的所有命令 1 2 3 4 5 6 7 redis-cli 127.0.0.1:6379>monitor 1509964152.13 ...

  2. Linux常用监控命令

    A goal is a dream with a deadline. Much effort, much prosperity.  1.IOSTAT命令 此命令安装包为sysstat     可用yu ...

  3. java常用监控命令

    Java常用的监控命令比如top,jps,jmap等,下面具体讲解一下使用方式 1.top 使用top展示的信息如下所示 其中第一行展示了机器的负载(load)信息:当前时间,机器运行了多长时间,有多 ...

  4. 通过常用监控命令快速发现性能问题

    命令大致如下: uptime dmesg | tail vmstat 1 mpstat -P ALL 1 pidstat 1 iostat -xz 1 free -m sar -n DEV 1 sar ...

  5. Linux常用监控命令简介 – vmstat,ps,free,uptime 等

    vmstat [-a] [-n] [delay [ count]] vmstat [-f] [-s] [-m] vmstat [-S unit] vmstat [-d] vmstat [-p disk ...

  6. JVM系列(二):JDK自带监控命令

    为什么80%的码农都做不了架构师?>>>    当我们定位一个系统的问题时,知识.经验是关键基础,数据是依据,工具是运用知识处理数据的手段.这里的数据包括:运行日志.异常堆栈.GC日 ...

  7. JVM监控-命令行篇

    1. 概述 性能诊断是软件工程师在日常工作中需要经常面对和解决的问题,在用户体验至上的今天,解决好应用的性能问题能带来非常大的收益. Java作为最流行的编程语言之一,其应用性能诊断一直受到业界广泛关 ...

  8. 怎么监控多台服务器资源占用率,常用的4个服务器性能监控命令

    一.top -实时监控命令 1.能够实时监控系统的运行状态,并且可以按照cpu及内存等进行排序: -h:帮助 -p:监控指定的进程,当监控多个进程是,进程ID以逗号隔开 2.top任务区命令: M:按 ...

  9. Zookeeper常用命令大全之四字监控命令

    文章目录 四字监控命令 0. 官方文档 1. conf命令 2. cons命令 3. crst命令 4. dump命令 5. envi命令 6. ruok命令 7. stat命令 8. srst命令 ...

最新文章

  1. mysql远程权限grant_mysql 赋给用户远程权限 grant all privileges on
  2. linux文件属性 -rwxr-xrw,Linux文件属性
  3. Shell基础学习(六) 流程控制
  4. python封装举例_Python+Pycharm—学习1—封装导入
  5. 在Wordpress的文章页面获取上一页及下一页的链接URL地址,实现通过键盘的前进后退键进行翻页
  6. android rtc 不能写时间到 rtc 原因分析
  7. linux夸分区建立软链接,Linux硬链接和软链接
  8. Go爬虫colly官方示例三【cryptocoinmarketcap】- 爬取加密数字货币最新市值
  9. 冰点还原无法修改计算机时间,安装冰点还原后无法更改系统时间怎么办
  10. p2p借贷项目面试题
  11. 直播教学系统16项功能
  12. 码率、帧率和I B P帧
  13. 什么是光开光?它有什么作用?
  14. Word中endnote选项无效,怎么处理?
  15. 石头扫地机器人遇见地毯_当戴森V8遇上石头扫地机器人,彻底拯救懒癌患者
  16. initramfs详解----设备文件系统
  17. Notify 与 Indicate的区别
  18. tcpcopy填坑实践。
  19. 非因解读 | DSP空间多组学助力胃癌预后标志物的发现
  20. 如何修改docker镜像名称?

热门文章

  1. c++11 多线程 2c++ concurrency in action
  2. 无意间发现我的博客园的年龄有11年了
  3. 贪心算法——找纸币问题
  4. Java的接口与继承
  5. 热备份路由协议(HSRP)
  6. 【请教】服务器上出现的两个问题!
  7. 想要一本Linux书籍?投出您想要的Linux书籍,由红联论坛邮寄给您(2007新增)(转)...
  8. OFCMS 项目开源 java cms 系统 内容管理系统
  9. Uploadify 配置错误信息提示
  10. Web前端面试指导(六):面试后需要总结和交流