首页 > 编程语言 >Java中常用的监控命令

Java中常用的监控命令

时间:2024-10-30 14:17:52浏览次数:9  
标签:常用 Java JVM 12345 GC 监控 线程 jmap

Java 提供了多种监控工具,这些工具包含了许多命令行工具,用于监控、诊断和管理 Java 应用程序的性能。这些工具主要位于 Java 安装目录下的 bin 文件夹中,以下是几个常用的 Java 自带监控命令的详细说明:

1. jps (Java Virtual Machine Process Status Tool)

用于列出当前运行的 Java 进程的 ID 及其名称,类似于 ps 命令。

  • 基本用法jps [options]
  • 常用选项
    • -l:显示主类的完整包名或启动的 JAR 文件路径。
    • -v:显示传递给 JVM 的参数。

示例

jps -l

2. jstat (Java Virtual Machine Statistics Monitoring Tool)

用于监控 JVM 各个部分的实时状态,包括垃圾回收、类加载、JIT 编译等。

  • 基本用法jstat [option vmid [interval[s|ms] [count]]]
  • 常用选项
    • -gc:显示垃圾回收信息。
    • -class:显示类加载信息。
    • -compiler:显示 JIT 编译器的信息。

示例

jstat -gc <pid> 1000 5  # 每隔1秒显示一次 GC 状况,共显示5次

3. jmap (Memory Map Tool)

用于生成 JVM 中的内存映射,帮助分析 Java 堆的使用情况,还可以生成堆转储(heap dump)文件。

  • 基本用法jmap [option] <pid>
  • 常用选项
    • -heap:显示堆的使用情况。
    • -dump:format=b,file=<filename>:生成堆转储文件,通常用于内存泄露分析。
    • -histo:输出堆中对象的统计信息,包括对象数量和总大小。

示例

jmap -dump:format=b,file=heapdump.hprof <pid>

4. jstack (Java Stack Trace Tool)

用于生成 Java 线程的堆栈跟踪信息,可以帮助分析死锁、性能瓶颈等问题。

  • 基本用法jstack [option] <pid>
  • 常用选项
    • -l:显示关于锁的附加信息。
    • -F:强制输出线程堆栈信息。

示例

jstack -l <pid>

5. jconsole (Java Monitoring and Management Console)

jconsole 是 Java 自带的图形化工具,用于连接到本地或远程的 Java 进程,监控 CPU、内存、线程、类加载情况等。

  • 基本用法jconsole [pid]
  • 可以直接通过命令启动,也可以通过点击图标运行。

6. jcmd (JVM Diagnostic Command Tool)

功能强大,可以代替 jmapjstack 等工具,支持更多命令选项,能够执行线程转储、堆转储、GC 操作等。

  • 基本用法jcmd <pid> command
  • 常用命令
    • GC.heap_dump:生成堆转储文件。
    • Thread.print:输出线程堆栈信息。
    • GC.run:触发垃圾回收。

示例

jcmd <pid> Thread.print  # 打印线程信息

7. jinfo (Configuration Info for Java)

用于显示或修改正在运行的 Java 进程的配置信息,如系统属性和 JVM 选项。

  • 基本用法jinfo [option] <pid>
  • 常用选项
    • -sysprops:显示系统属性。
    • -flag <name>:显示指定的 JVM 选项。

示例

jinfo -flag MaxHeapSize <pid>

场景 1:Java 应用内存泄露的排查

问题描述:应用程序频繁出现 OutOfMemoryError,需要定位内存泄露的原因。

解决步骤

  1. 查看进程:首先用 jps 查看正在运行的 Java 进程,找到要诊断的进程 ID。

    jps -l
    

    输出结果类似于:

    12345 MyJavaApp
    
  2. 生成堆转储:使用 jmap 生成堆转储文件,供后续分析。

    jmap -dump:format=b,file=heapdump.hprof 12345
    

    heapdump.hprof 文件可以用专业工具(如 Eclipse MAT 或 VisualVM)进行分析,查找哪些对象占用了最多内存,是否有过多重复对象。

  3. 查看对象分布:使用 jmap -histo 查看对象统计,定位哪些类的实例数量异常。

    jmap -histo 12345 | head -n 20
    

    输出会列出对象类型、数量和占用的内存,通过观察异常多的对象来排查可能的内存泄漏来源。


场景 2:线程死锁排查

问题描述:系统出现无响应现象,怀疑存在线程死锁。

解决步骤

  1. 查看进程:使用 jps 命令确认目标 Java 进程。

    jps -l
    
  2. 生成线程堆栈:使用 jstack 查看线程堆栈,定位死锁线程。

    jstack -l 12345
    

    几种线程状态:

    • BLOCKED:线程正在等待锁资源,可能存在锁竞争问题。
    • WAITING:线程在等待条件满足,比如等待外部资源、网络IO、锁等,可能有资源未释放或超时问题。
    • TIMED_WAITING:线程在等待指定时间内的操作完成,超时后自动退出等待。可能和外部资源或数据库超时有关。
    • RUNNABLE:线程正在运行,通常是CPU消耗较多的线程。检查是否存在占用过高CPU的情况。
  3. 进一步确认死锁jconsole 提供了图形界面,可以更直观地观察线程状态。启动后连接到对应进程,在“线程”页面可以直接看到死锁信息。


场景 3:垃圾回收频繁导致的性能下降

问题描述:应用运行时频繁出现 GC,导致性能下降,响应速度变慢。

解决步骤

  1. 查看 GC 状态:使用 jstat 查看垃圾回收信息,判断是否存在频繁的 GC。

    jstat -gc 12345 1000 10
    

    上述命令每隔 1 秒采样一次,连续 10 次,输出中可以看到年轻代和老年代的 GC 次数和时间。频繁的年轻代 GC 可能是内存分配过多导致的,频繁的老年代 GC 则可能表示对象老化导致的内存不足。

  2. 生成堆信息:通过 jmap -heap 查看堆的总体使用情况,确认是否存在内存不足。

    jmap -heap 12345
    
  3. GC 手动触发:如果希望立即触发 GC,可以使用 jcmd 命令。

    jcmd 12345 GC.run
    

场景 4:系统参数调整

问题描述:应用在运行中,需要调整 JVM 参数以优化性能。

解决步骤

  1. 查看当前 JVM 配置:使用 jinfo 命令查看 JVM 配置参数,确认是否有需要调整的参数。

    jinfo -flags 12345
    
  2. 修改 JVM 参数:有些 JVM 参数支持在运行中调整,可以直接用 jinfo -flag 进行修改,例如启用 GC 日志。

    jinfo -flag +PrintGC 12345
    

场景 5:类加载问题排查

问题描述:某些类加载过程耗时过长,可能影响应用启动速度。

解决步骤

  1. 查看类加载信息:使用 jstat -class 查看类加载情况,包括已加载的类数量和加载时间。

    jstat -class 12345 1000 5
    
  2. 生成堆转储:可以使用 jmap 生成转储文件,以分析哪些类占用了大量内存或是否有重复加载的类。

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

场景 6:排查 JIT 编译影响性能问题

问题描述:程序运行时的 CPU 使用率居高不下,怀疑是 JIT 编译的问题。

解决步骤

  1. 查看 JIT 编译统计:使用 jstat -compiler 查看 JIT 编译信息。

    jstat -compiler 12345 1000 10
    

    输出会显示编译的次数和时间,如果编译时间过长,可能会对性能产生影响。

  2. 通过 jconsole 分析 CPU 使用情况jconsole 的“CPU”页面可以帮助进一步分析具体的 CPU 使用情况。

标签:常用,Java,JVM,12345,GC,监控,线程,jmap
From: https://blog.csdn.net/u012108607/article/details/143363152

相关文章

  • 基于Java+SpringBoot+Vue的课程答疑系统
    基于Java+SpringBoot+Vue的课程答疑系统前言✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌......
  • windows java8的环境的安装
    目录下载地址安装过程下载地址官网下载地址:https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html通过百度网盘分享的文件:jdk-8u321-windows-x64.exe链接:https://pan.baidu.com/s/1Va5kC78upY-gfyiMRL_aEQ?pwd=fe2e提取码:fe2e安装过......
  • 惊了!大模型连这样的验证码都能读懂_java_识别验证码
    最近在看视觉大模型的能力,然后用了某网站的一个验证码试了试,竟然连这样的验证码都能认识,这个有点夸张,尤其是这个9和6颠倒的都能理解,现在的能力已经这么牛了么具体就是用了通义最新的qwenvl模型+springaialibaba。这个识别能力和理解能力,绝对能处理非常多的不同类型的......
  • Java & Lock & AQS & 总结
    前言 相关系列《Java&Lock&目录》(持续更新)《Java&Lock&AQS&源码》(学习过程/多有漏误/仅作参考/不再更新)《Java&Lock&AQS&总结》(学习总结/最新最准/持续更新)《Java&Lock&AQS&问题》(学习解答/持续更新)  涉及内容《Java&Lock&ReentrantLock......
  • JavaScript基础知识——黑马JavaWeb学习笔记
    JavaScript基础JavaScript:跨平台、面向对象的脚本语言(脚本语言:不需要编译,浏览器解释完直接运行)作用:控制网页行为,使网页可交互ps:JavaScript与Java是两门完全不同的语言本文为学习黑马程序员JavaWeb开发教程中JS部分学习笔记文章目录JavaScript基础一、JS引入方式1.......
  • 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现九
    一、前言介绍:1.1项目摘要随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势。古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力。然而,在现代社会中,由于生活节奏的加快和信息获取方式的多样化,古诗词的传播和阅读面临着一......
  • 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现十
    一、前言介绍:1.1项目摘要随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势。古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力。然而,在现代社会中,由于生活节奏的加快和信息获取方式的多样化,古诗词的传播和阅读面临着一......
  • 宇视设备视频平台EasyCVR海康私有化视频平台实现全方位、全天候监控码头海岸线视频监
    在现代港口管理和海岸线监控领域,采用先进的视频监管技术已成为提高管理效率和确保安全的重要措施。宇视设备视频平台EasyCVR作为一种高效且智能的视频汇聚与监管系统,为码头及海岸线的视频监控提供了全面的解决方案。一、背景与需求港口码头作为货物和集装箱堆放及中转的重要机......
  • 国标GB28181视频平台EasyGBS国标GB28181软件实现无需插件的视频监控对讲和网页直播
    在当今社会,视频监控已经成为公共安全、企业管理、智能城市建设等领域不可或缺的一部分。然而,由于不同厂家和平台之间的兼容性问题,视频监控系统的联网和整合面临巨大挑战。为了解决这个问题,国家制定了《公共安全视频监控联网系统信息传输、交换、控制技术要求》(GB/T28181—2016......
  • 三、常用汇编指令
    MOV指令作用:数据移动movcx,ax //将ax寄存器中的值复制到cx寄存器中movdx,FFFF //将数据0xFFFF放到寄存器dx中moval,bh //将bx寄存器的高八位的数据复制到ax寄存器的低八位NOP:空指令指令、数据对齐可以有效地提高程序的性能,使用NOP指令,可以使得指令按字对齐,......