当前位置: 首页 > article >正文

高级java每日一道面试题-2024年11月28日-JVM篇-调优命令有哪些?

如果有遗漏,评论区告诉我进行补充

面试官: 调优命令有哪些?

我回答:

在Java高级面试中,调优命令是面试官常问的问题之一。以下是对Java调优命令的详细介绍:

一、主要调优命令

1. jps(JVM Process Status Tool)

  • 功能:显示指定系统内所有的HotSpot虚拟机进程。
  • 常用参数
    • -q:简洁模式,只输出Java虚拟机(JVM)的进程ID(PID),不显示主类名称或者其他详细信息。
    • -l:显示应用程序主类的完整包名或jar文件的完整路径。
    • -v:显示传递给JVM的参数。
    • -m:输出运行主类(即包含main方法的类)时传递给main方法的参数。
    • 示例
      jps -lvm
      
      jps -q
      
      输出当前系统上所有Java进程的PID。

2. jstat(JVM statistics Monitoring)

  • 功能:用于监视虚拟机运行时状态信息的命令,可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
  • 常用参数
    • jstat -gc <pid> [interval] [count]:显示GC(Garbage Collection)统计信息,包括各代堆内存的大小、已用空间、已分配对象数以及GC次数与时间等。

    • jstat -class <pid>:显示类加载器相关的统计信息,比如已加载的类数量及其占用的空间。

    • jstat -thread <pid>:显示有关Java线程的信息,如活动线程数、死锁检测等。

    • jstat -gccapacity <pid>:显示各个分代区域的容量配置。

    • jstat -gcutil <pid>:提供更详细的GC使用率信息,包括堆区的使用率和永久代(或元空间)的使用情况。

    • 示例

      jstat -gc 12345 1000 5
      

      每隔1000毫秒打印一次PID为12345的进程的垃圾回收信息,共打印5次。

      jstat -gc <pid> 1000 5
      

      每隔1000毫秒查询一次Java进程的GC情况,共查询5次。

3. jmap(JVM Memory Map)

  • 用途:生成堆转储快照(heap dump),或者查看堆内存的详细使用情况。
  • 常用选项
    • jmap -heap <pid>:显示堆配置和使用情况。
    • jmap -histo <pid>:显示堆中的对象直方图。
    • jmap -dump:live,format=b,file=heapdump.hprof <pid>:生成堆转储文件。
  • 示例
    jmap -heap 12345
    
    jmap -dump:live,format=b,file=heapdump.hprof <pid>
    
    生成指定Java进程的heap dump文件,文件名为heapdump.hprof。

4. jhat(JVM Heap Analysis Tool)

  • 功能:与jmap搭配使用,用来分析jmap生成的dump。jhat内置了一个微型的HTTP/HTML服务器,生成dump的分析结果后,可以在浏览器中查看。
jhat heapdump.hprof

分析heapdump.hprof文件,并在浏览器中查看分析结果。

5. jstack

  • 功能:用于生成Java虚拟机当前时刻的线程快照,从而展示JVM当前线程的总体情况。如果Java进程启用了远程调试,jstack可以连接到远程主机上的调试端口来获取线程堆栈信息。
  • 常用选项

    • jstack <pid>:显示指定进程的线程堆栈信息。
    • jstack -l <pid>:显示详细的线程信息,包括锁信息。
  • 示例

    jstack 12345
    
    jstack -l <pid>
    

    生成指定Java进程的线程快照,并包含锁定信息。

6. jinfo

  • 功能:JVM Configuration info,实时查看和调整虚拟机运行参数。
    - 常用选项

    • jinfo <pid>:显示进程的配置信息。
    • jinfo -flag <name> <pid>:显示特定JVM标志的值。
    • jinfo -flag <name>=<value> <pid>:设置特定JVM标志的值。
- **示例**:

  ```sh
  jinfo 12345
  ```

7. jcmd (Java Command)

  • 用途:向正在运行的Java进程发送诊断命令请求。

  • 常用选项

    • jcmd <pid> GC.run:触发垃圾回收。
    • jcmd <pid> GC.class_histogram:显示类直方图。
    • jcmd <pid> VM.version:显示JVM版本信息。
  • 示例

    jcmd 12345 GC.run
    
    jinfo -flag MaxHeapSize <pid>
    

    查询指定Java进程的MaxHeapSize参数值。

8. VisualVM

  • 用途:一个图形化的工具,可以监控和分析Java应用程序的性能。
  • 功能
    • 实时监控CPU、内存、线程等。
    • 生成和分析堆转储。
    • 分析线程堆栈。
    • 监控JMX MBeans。
  • 安装
    VisualVM通常包含在JDK的bin目录下,可以直接运行jvisualvm命令启动。

9. JConsole

  • 用途:一个图形化的工具,可以监控和管理Java应用程序。
  • 功能
    • 实时监控内存、线程、类加载等。
    • 查看MBeans。
  • 启动
    可以通过jconsole命令启动。

10. JFR (Java Flight Recorder)

  • 用途:记录Java应用程序的低开销数据,用于事后分析。

  • 功能

    • 记录各种事件,如垃圾回收、线程活动、JVM状态等。
    • 与JMC(Java Mission Control)配合使用进行分析。
  • 启用
    通过JVM参数启用,例如:

    -XX:StartFlightRecording=filename=myrecording.jfr
    

11. JMH (Java Microbenchmark Harness)

  • 用途:用于编写和运行微基准测试。

  • 功能

    • 提供精确的性能测量。
    • 支持多种基准测试模式。
  • 示例

    @Benchmark
    public void testMethod() {
        // 测试代码
    }
    

二、注意事项

  1. 命令使用前提:需要知道目标Java进程的PID。
  2. 权限问题:某些命令可能需要管理员权限才能执行。
  3. 命令版本:不同版本的JDK可能提供的命令和参数有所不同,建议查阅官方文档以获取最准确的信息。

http://www.kler.cn/a/419428.html

相关文章:

  • 【开源免费】基于Vue和SpringBoot的校园资料分享平台(附论文)
  • 【k8s深入理解之 Scheme 补充-1】理解 Scheme 中资源的注册以及 GVK 和 go 结构体的映射
  • 云计算的发展历史与未来展望
  • centos更换源文件,换源,替换源
  • 本地部署 WireGuard 无需公网 IP 实现异地组网
  • 第六届金盾信安杯-SSRF
  • java解析json
  • 【Story】《嵌入式开发中的Bug故事:挑战、解决与成长》
  • MySQL数据库做题笔记
  • vue实现excel导出导入
  • 《黑神话:悟空》启动游戏就提示缺少C++库如何解决?
  • JS实现数据循环顺位获取元素,数组元素不足时,能够从头开始顺位取元素以补足
  • docker中redis查看key、删除key
  • git 清除旧历史提交记录并关联远程仓库
  • Qt 面试题学习11_2024-11-29
  • 力扣--LCR 143. 子结构判断
  • 挑战用React封装100个组件【006】
  • 【Springboot】@Autowired和@Resource的区别
  • TouchGFX设计模式代码实例说明
  • 基于centos7.9容器编排Jumpserver堡垒机
  • Android获取内置卡、内置U盘和挂载U盘路径和内存大小
  • Lerna管理和发布同一源码仓库的多个js/ts包
  • React面试进阶(五)
  • docker rocketmq
  • vue2和vue3两种倒计时CountDown实现
  • 设计模式之单例