关于jvm内存如何查看

 更新时间:2025年02月12日 11:00:49   作者:企鹅侠客  
本文介绍了如何在Java虚拟机(JVM)中进行内存管理,包括查看JVM内存情况的常用方法和工具,这些方法包括使用JDK自带的工具如jps、jstat、jmap和jconsole,以及一些第三方监控工具如Prometheus、Grafana和ElasticStack等,通过这些方法

jvm内存如何查看

在 Java 虚拟机 (JVM) 中,内存管理是性能调优和排查问题的重要部分。

JVM 的内存分为多个区域,如堆内存(Heap)、方法区(Method Area)、堆外内存(Off-Heap Memory)等。

查看 JVM 的内存情况可以通过多种工具和方法,以下是常用的方法和工具。

1. 使用 JDK 自带工具查看 JVM 内存

a. jps + jstat

  • jps:用于查看当前系统中正在运行的 Java 进程。
  • jstat:用于监控 JVM 的内存使用情况。

查看正在运行的 Java 进程:

jps

假设你得到的 Java 进程 ID 是 1234,你可以使用以下命令查看该进程的堆内存使用情况:

jstat -gc 1234 1000 5

这将输出 JVM 中堆内存和垃圾回收的相关信息,每 1 秒输出一次,总共输出 5 次。

输出示例:

S0C    S1C    S0U    S1U      EC       EU        OC         OU      MC      MU     CCSC   CCSU   YGC   YGCT   FGC    FGCT     GCT
1536.0 1536.0   0.0    0.0    8192.0   2500.0   10240.0    2048.0    2400.0  2200.0  400.0  350.0   5    0.045   2      0.030   0.075

  • S0C, S1C:第一个和第二个 Survivor 区的容量。
  • S0U, S1U`:第一个和第二个 Survivor 区的使用量。
  • EC:Eden 区的容量。
  • EU:Eden 区的使用量。
  • OC:Old Generation(老年代)的容量。
  • OU:Old Generation(老年代)的使用量。
  • YGC, YGCT`:年轻代 GC 次数及其时间。
  • FGC, FGCT:老年代 GC 次数及其时间。

b. jmap

jmap 可以生成堆转储文件,也可以查看 JVM 的内存情况。

查看堆内存分布:

bash
jmap -heap <进程ID>

输出示例:

Heap Configuration:
   MinHeapFreeRatio         = 40
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 536870912 (512.0MB)
   NewSize                  = 1310720 (1.25MB)
   MaxNewSize               = 17592186044415 MB
   OldSize                  = 54525952 (52.0MB)
   MetaspaceSize            = 134217728 (128.0MB)
   CompressedClassSpaceSize = 16777216 (16.0MB)
   MaxMetaspaceSize         = 536870912 (512.0MB)

c. jconsole

jconsole 是 JDK 自带的 GUI 工具,可以用来监控 JVM 内存使用、线程、类加载等信息。

运行以下命令启动:

bash
jconsole

选择需要监控的 Java 进程,即可实时查看 JVM 内存的使用情况,包括堆内存和非堆内存。

d. jvisualvm

jvisualvm 是另一个强大的 GUI 工具,它集成了性能监控、内存分析、垃圾回收分析等功能。

运行以下命令启动:

bash
jvisualvm

选择需要分析的 Java 进程,可以查看堆内存使用情况、生成堆转储、分析内存泄漏等。

2. 通过 Java 命令行参数查看 JVM 内存配置

使用以下命令查看 JVM 的启动参数,包括内存配置:

bash
java -XX:+PrintFlagsFinal -version | grep -Ei 'Heap|PermSize|MetaspaceSize'

该命令会显示 JVM 当前的内存配置,例如:

intx InitialHeapSize                          := 268435456
     intx MaxHeapSize                              := 4294967296
     intx MaxMetaspaceSize                         := 1073741824

3. 查看运行时内存信息

在 Java 程序中,可以使用以下代码来查看 JVM 内存使用情况:

public class JVMInfo {
    public static void main(String[] args) {
        Runtime runtime = Runtime.getRuntime();

        // 总内存
        long totalMemory = runtime.totalMemory();
        // 最大内存
        long maxMemory = runtime.maxMemory();
        // 空闲内存
        long freeMemory = runtime.freeMemory();

        System.out.println("Total Memory: " + totalMemory / 1024 / 1024 + " MB");
        System.out.println("Max Memory: " + maxMemory / 1024 / 1024 + " MB");
        System.out.println("Free Memory: " + freeMemory / 1024 / 1024 + " MB");
    }
}

4. 使用第三方监控工具

  • Prometheus + Grafana:通过 Prometheus 监控 Java 应用(通常与 jmx_exporter 配合使用),并使用 Grafana 可视化展示 JVM 的内存使用情况。
  • Elastic Stack (ELK):可以集成 Java 应用的监控数据,通过 Kibana 展示内存使用情况。
  • New Relic、Datadog、Zabbix:这些工具提供丰富的 JVM 监控和告警功能。

总结

通过使用 JDK 自带的工具(如 jstat、jmap、jconsole 等)、代码、命令行参数以及第三方监控工具,可以全面监控和分析 JVM 的内存使用情况。

掌握这些工具有助于在实际开发和生产环境中快速定位和解决内存相关问题。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot读取外部配置文件的方法

    SpringBoot读取外部配置文件的方法

    这篇文章主要介绍了SpringBoot读取外部配置文件的方法,以端口配置为例,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • Java设计模式之构建者模式知识总结

    Java设计模式之构建者模式知识总结

    这几天刚好在复习Java的设计模式,今天就给小伙伴们全面总结一下开发中最常用的设计模式-建造者模式的相关知识,里面有很详细的代码示例及注释哦,需要的朋友可以参考下
    2021-05-05
  • Java中的Random()函数及两种构造方法

    Java中的Random()函数及两种构造方法

    Java中存在着两种Random函数分别是java.lang.Math.Random和java.util.Random,文中给大家介绍了random()的两种构造方法,感兴趣的朋友跟随小编一起看看吧
    2018-11-11
  • springboot的LogbackLoggingSystem配置加载流程解析

    springboot的LogbackLoggingSystem配置加载流程解析

    这篇文章主要介绍了springboot的LogbackLoggingSystem配置加载流程源码分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • 一篇文章学会java死锁与CPU 100%的排查

    一篇文章学会java死锁与CPU 100%的排查

    这篇文章主要介绍了一篇文章学会java死锁与CPU 100%的排查,文中主要介绍了Java死锁以及服务器CPU占用率达到100%时的排查和解决方法,感兴趣的朋友一起来看一看吧
    2021-08-08
  • IDEA使用jformdesigner插件做管理系统MVC架构的步骤和实现思路

    IDEA使用jformdesigner插件做管理系统MVC架构的步骤和实现思路

    在 IntelliJ IDEA 中结合 JFormDesigner 插件,通过 Swing 框架实现一个管理系统的 MVC 架构是一种经典的开发方式,以下是具体的步骤和实现思路,包含从项目创建到 MVC 架构的核心代码实现,需要的朋友可以参考下
    2024-12-12
  • 详解Java如何通过装饰器模式扩展系统功能

    详解Java如何通过装饰器模式扩展系统功能

    这篇文章主要为大家详细介绍了Java如何通过装饰器模式扩展系统功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-04-04
  • 情人节写给女朋友Java Swing代码程序

    情人节写给女朋友Java Swing代码程序

    这篇文章主要为大家分享了情人节写给女朋友的java小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,祝大家每天都是情人节
    2018-02-02
  • Spring Boot Admin 动态修改日志级别的方法步骤

    Spring Boot Admin 动态修改日志级别的方法步骤

    这篇文章主要介绍了Spring Boot Admin 动态修改日志级别的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • java四种访问权限实例分析

    java四种访问权限实例分析

    这篇文章主要介绍了java四种访问权限实例分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10

最新评论