查看jvm内存使用命令

jmap (linux下特有,也是很常用的一个命令)

观察运行中的jvm物理内存的占用情况。

参数如下:

-heap :打印jvm heap的情况
-histo: 打印jvm heap的直方图。其输出信息包括类名,对象数量,对象占用大小。
-histo:live : 同上,但是只答应存活对象的情况
-permstat: 打印permanent generation heap情况

命令使用:

jmap -heap 3409

可以观察到New Generation(Eden Space,From Space,To Space),tenured generation,Perm Generation的内存使用情况

输出内容:

jmap -histo 3409 | jmap -histo:live 3409

可以观察heap中所有对象的情况(heap中所有生存的对象的情况)。包括对象数量和所占空间大小。

输出内容:

写个脚本,可以很快把占用heap最大的对象找出来,对付内存泄漏特别有效。

 

如果结果很多,可以用以下命令输出到文本文件。

jmap -histo 3409 | jmap -histo:live 3409 > a.txt

注: 查看系统里java进程信息

// 查看当前机器上所有运行的java进程名称与pid(进程编号)
jps -l 
// 显示指定的jvm进程所有的属性设置和配置参数
jinfo pid
 
 
  • 1
  • 2
  • 3
  • 4

1 . jmap : 内存占用情况查询 (位于”jdk_home/bin”目录下)

// 查询某个pid进程对应的应用程序内存占用情况
jmap -heap pid

// 示例
jmap -heap 5940
Attaching to process ID 5940, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.92-b14

using thread-local object allocation.
Parallel GC with 4 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 734003200 (700.0MB)
   NewSize                  = 44040192 (42.0MB)
   MaxNewSize               = 244318208 (233.0MB)
   OldSize                  = 88080384 (84.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 32505856 (31.0MB)
   used     = 13906760 (13.262519836425781MB)
   free     = 18599096 (17.73748016357422MB)
   42.782322052986395% used
From Space:
   capacity = 6291456 (6.0MB)
   used     = 294912 (0.28125MB)
   free     = 5996544 (5.71875MB)
   4.6875% used
To Space:
   capacity = 7340032 (7.0MB)
   used     = 0 (0.0MB)
   free     = 7340032 (7.0MB)
   0.0% used
PS Old Generation
   capacity = 41943040 (40.0MB)
   used     = 6127536 (5.8436737060546875MB)
   free     = 35815504 (34.15632629394531MB)
   14.609184265136719% used

8535 interned Strings occupying 710344 bytes.
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

2 . jstack : 进程所包含线程情况查询 (位于”jdk_home/bin”目录下)

// 命令帮助
jstach -h 
// 显示进程详情
jstack pid

// 示例
jstach 5940
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.92-b14 mixed mode):

"RMI TCP Connection(10)-10.2.13.162" #32 daemon prio=5 os_prio=0 tid=0x00000000179dc000 nid=0x1f60 in Object.wait() [0x000000001d7dd000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at com.sun.jmx.remote.internal.ArrayNotificationBuffer.fetchNotifications(ArrayNotificationBuffer.java:449)
        - locked <0x00000000d462ec18> (a com.sun.jmx.remote.internal.ArrayNotificationBuffer)
        at com.sun.jmx.remote.internal.ArrayNotificationBuffer$ShareBuffer.fetchNotifications(ArrayNotificationBuffer.java:227)
        at com.sun.jmx.remote.internal.ServerNotifForwarder.fetchNotifs(ServerNotifForwarder.java:274)
        at javax.management.remote.rmi.RMIConnectionImpl$4.run(RMIConnectionImpl.java:1270)
        at javax.management.remote.rmi.RMIConnectionImpl$4.run(RMIConnectionImpl.java:1268)
        at javax.management.remote.rmi.RMIConnectionImpl.fetchNotifications(RMIConnectionImpl.java:1274)
        at sun.reflect.GeneratedMethodAccessor59.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:324)

..............

"GC task thread#1 (ParallelGC)" os_prio=0 tid=0x0000000002d10000 nid=0x27dc runnable

"GC task thread#2 (ParallelGC)" os_prio=0 tid=0x0000000002d11800 nid=0x2d84 runnable

"GC task thread#3 (ParallelGC)" os_prio=0 tid=0x0000000002d13800 nid=0x118 runnable

"VM Periodic Task Thread" os_prio=2 tid=0x0000000015ccb000 nid=0x2fd4 waiting on condition

JNI global references: 239

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

3 . jstat: 可以实时监测系统资源占用与jvm运行情况 (位于”jdk_home/bin”目录下)

// 命令语法结构:
Usage: jstat -help|-options
       jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

// 参数解释:
Options — 选项,我们一般使用 -gcutil 查看gc情况
vmid    — VM的进程号,即当前运行的java进程号
interval– 间隔时间,单位为秒或者毫秒
count   — 打印次数,如果缺省则打印无数次

S0  — Heap上的 Survivor space 0 区已使用空间的百分比
S1  — Heap上的 Survivor space 1 区已使用空间的百分比
E   — Heap上的 Eden space 区已使用空间的百分比
O   — Heap上的 Old space 区已使用空间的百分比
P   — Perm space 区已使用空间的百分比
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)

//示例
jstat -options
    -class
    -compiler
    -gc
    -gccapacity
    -gccause
    -gcmetacapacity
    -gcnew
    -gcnewcapacity
    -gcold
    -gcoldcapacity
    -gcutil
    -printcompilation

jstat -class -t 5940
Timestamp Loaded  Bytes  Unloaded  Bytes     Time
6188.4   3898  7178.4       40    58.3       1.78

jstat -gcutil 5940 1000 5
S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
0.00  25.00  98.55  15.37  96.94  94.88     21    0.069     7    0.237    0.306
0.00  25.00  99.59  15.37  96.94  94.88     21    0.069     7    0.237    0.306
0.00  25.00  99.59  15.37  96.94  94.88     21    0.069     7    0.237    0.306
0.00  25.00 100.00  15.37  96.94  94.88     21    0.069     7    0.237    0.306
0.00  25.00 100.00  15.37  96.94  94.88     21    0.069     7    0.237    0.306

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

4 . jconsole 以GUI的方式更直观化呈现jvm进程的实时情况, 比如内存占用, 线程执行情况等; 
在jdk_home/bin目录下执行 jconsole.exe 打开图形化界面, 然后选择要检查的进程就可以查看所有相关jvm情况的信息了.

概览

5 . jprofiler 一个付费的商业jvm分析监控工具, 可查看概况, 内存, GC活动, class 状况, 线程信息, CPU 占用情况, 内存对象信息, 还有数据库连接等, 是一个非常优秀的分析工具;

概览



  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要查看JVM内存使用情况,可以使用以下命令: 1. jps命令查看Java进程的进程ID 2. jstat命令查看JVM内存使用情况,包括堆内存、非堆内存、GC情况等 3. jmap命令:生成JVM内存快照,可以用于分析内存泄漏等问题 4. jconsole命令:图形化界面查看JVM内存使用情况,包括堆内存、非堆内存、GC情况等 以上命令都可以在Linux系统下使用。 ### 回答2: 在Linux系统中查看JVM内存使用非常简单,只需要使用命令行工具即可。 首先,我们需要确认JDK已经安装在系统中。在终端中输入下面命令来检查Java版本: java -version 如果Java命令不存在,则需要安装JDK。在Ubuntu系统中,可以使用下面命令来安装OpenJDK: sudo apt-get install openjdk-8-jdk 安装完成后,我们可以在终端中运行下面命令来启动JVM: java -Xms256m -Xmx1024m -jar myapp.jar 该命令可以启动一个Java应用程序,并设置初始堆内存为256M,最大堆内存为1024M。当程序运行时,我们可以使用下面命令查看JVM内存使用情况: jstat -gc <pid> <interval> <count> 其中,<pid>是JVM进程的进程号,<interval>是采样间隔(以毫秒为单位),<count>是采样次数。 例如,我们可以使用下面命令查看JVM进程的进程号: ps aux | grep java 然后,使用进程号来查看JVM内存使用情况: jstat -gc <pid> 1000 10 该命令将每秒钟采样一次,共采样10次,然后输出JVM的堆内存使用情况和垃圾回收情况。 除了jstat命令外,我们还可以使用其他工具来查看JVM内存使用情况,例如jmap、jcmd、jstatd等。这些工具的用法和参数不同,请根据需要选择合适的工具。 总之,Linux下查看JVM内存使用情况非常方便,只需要用一些简单的命令就可以完成。这对于调试Java程序和优化JVM性能非常有帮助。 ### 回答3: 在Linux系统中,我们可以使用多种方式来查看Java虚拟机(JVM内存使用情况,下面介绍几种常用的方法: 1.使用jstat命令 jstat是Java Development Kit(JDK)中自带的一个监控JVM的工具,它能监控JVM内存使用情况,包括整体内存使用、堆内存使用、非堆内存使用、永久代内存使用等。使用jstat命令,可以获取JVM内存的各项指标,并指导性能调优。以下是查看内存和非堆内存使用情况的命令: - 查看内存使用情况:jstat -gcutil [pid] [间隔时间] [查看次数] - 查看非堆内存使用情况:jstat -gc [pid] [间隔时间] [查看次数] 其中,[pid]是进程ID,[间隔时间]是每隔多少毫秒获取一次内存使用情况,[查看次数]是总共查看的次数。 2.使用jps和jmap命令 jps是JDK中的一个命令,用来列出JVM进程ID,也可以查看JVM进程的启动参数。jmap是JDK中的一个堆转储工具,可以生成JVM堆的转储快照,以及查询JVM内存使用情况。以下是查看JVM内存使用情况的命令: - 查看JVM进程ID:jps - 生成JVM堆快照:jmap -dump:file=[堆快照文件名] [pid] - 查询JVM内存使用情况:jmap -heap [pid] 其中,[pid]是进程ID。 3.使用top命令 top是系统资源监视器,可以通过top命令查看系统中所有进程的CPU、内存等资源使用情况。通过top命令可以查看JVM进程的CPU和内存使用情况。以下是查看JVM进程的内存使用情况的命令: - top -p [pid] 其中,[pid]是进程ID。 通过以上这些方式,我们可以了解JVM内存使用情况,方便我们进行性能调优和资源管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值