关于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 的内存使用情况。

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

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

相关文章

  • IntelliJ IDEA中properties文件显示乱码问题的解决办法

    IntelliJ IDEA中properties文件显示乱码问题的解决办法

    今天小编就为大家分享一篇关于IntelliJ IDEA中properties文件显示乱码问题的解决办法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • Java MethodHandle的使用详解

    Java MethodHandle的使用详解

    这篇文章主要介绍了Java MethodHandle的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • Java如何实现判断并输出文件大小

    Java如何实现判断并输出文件大小

    这篇文章主要介绍了Java如何实现判断并输出文件大小问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • mybatis实现动态升降序的问题小结

    mybatis实现动态升降序的问题小结

    文章介绍了如何在MyBatis的XML文件中实现动态排序,使用$符号而不是#符号来引用变量,以避免SQL注入,同时,强调了在Java代码中进行防注入处理的重要性,感兴趣的朋友一起看看吧
    2025-02-02
  • Kotlin 基础语法详细介绍

    Kotlin 基础语法详细介绍

    这篇文章主要介绍了Kotlin 基础语法详细介绍的相关资料,需要的朋友可以参考下
    2017-05-05
  • SpringSecurity授权实现基本思路

    SpringSecurity授权实现基本思路

    本文介绍了SpringSecurity中使用FilterSecurityInterceptor进行权限校验的基本方法,通过SecurityContextHolder获取Authentication中的权限信息,感兴趣的朋友跟随小编一起看看吧
    2024-10-10
  • java调用Oracle存储过程的方法实例

    java调用Oracle存储过程的方法实例

    这篇文章介绍了java调用Oracle存储过程的方法实例,有需要的朋友可以参考一下
    2013-09-09
  • 探究springboot中的TomcatMetricsBinder

    探究springboot中的TomcatMetricsBinder

    springboot的TomcatMetricsBinder主要是接收ApplicationStartedEvent然后创建TomcatMetrics执行bindTo进行注册,TomcatMetrics主要注册了globalRequest、servlet、cache、threadPool、session相关的指标,本文给大家介绍的非常详细,需要的朋友参考下吧
    2023-11-11
  • springboot序列化和反序列化器配置方法

    springboot序列化和反序列化器配置方法

    这篇文章主要介绍了springboot序列化和反序列化器配置方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • spring boot启动出现Unable to start ServletWebServerApplicationContext due to missing ServletWebServer错误解决

    spring boot启动出现Unable to start ServletWe

    在使用SpringBoot时,启动报错可能源于多种原因,错误提示为缺少ServletWebServerFactory bean,初步分析可能是缺少spring-boot-starter-web依赖或@EnableAutoConfiguration注解,感兴趣的可以了解一下
    2024-10-10

最新评论