日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java表底层生产工具_使用Java工具解决生产故障(一)-jcmd介绍

發布時間:2025/4/16 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java表底层生产工具_使用Java工具解决生产故障(一)-jcmd介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.簡介

Java開發的應用程序在線上出現生產故障很常見,通常我們會在開發環境模擬此類故障,但偶爾也會遇到無法成功模擬的故障。那么我們就需要在生產環境上進行分析,定位故障產生原因。JDK1.7版本之后新增了一個命令行工具jcmd,那么下面我們就使用jcmd來定位生產故障吧。

2.命令介紹

2.1獲取所有的JVM

首先,我們可以通過jcmd獲取所有的JVM列表。

>jcmd

直接輸入jcmd,就能列出所有運行中的JVM。

7796

8404

7592

1228 sun.tools.jcmd.JCmd

7628 org.jetbrains.idea.maven.server.RemoteMavenServer

通過命令,可以查看到總共有5個JVM正在運行中。

2.2查看jcmd支持的命令

>jcmd help

7628:

The following commands are available:

VM.native_memory

ManagementAgent.stop

ManagementAgent.start_local

ManagementAgent.start

GC.rotate_log

Thread.print

GC.class_stats

GC.class_histogram

GC.heap_dump

GC.run_finalization

GC.run

VM.uptime

VM.flags

VM.system_properties

VM.command_line

VM.version

help

For more information about a specific command use 'help '.

如果需要對特定的命令進行幫助說明,可以在help之后加上命令名。

>jcmd 7628 help VM.version

7628:

VM.version

Print JVM version info

Impact: Low

Permission: java.util.

Syntax: VM.version

包含了命令的含義、影響、權限、語法等信息。

2.3生成堆dump

很多時候我們需要生成dump,再使用特定工具去詳細進行分析(例如VisualVm)。

>jcmd 7628 GC.heap_dump filepath

通過上述命令可以生成相應的堆dump。

GC.heap_dump

Generate a HPROF format dump of the Java heap.

Impact: High: Depends on Java heap size and content. Request a full GC unless the '-all' option is specified.

Permission:

java.lang.management.ManagementPermission(monitor)

Syntax : GC.heap_dump [options]

Arguments:

filename : Name of the dump file (STRING, no default value)

Options: (options must be specified using the or = syntax)

-all : [optional] Dump all objects, including unreachable objects (BOOLEAN, false)

通過幫助手冊可以查看到,生成HPROF格式的堆dump,可以指定-all命令就能dump所有的對象,包括那些無法到達的對象。

命令指定的路徑是相對于JVM運行的當前路徑,所以最好還是指定一個全路徑。

Dump生成之后就可以使用VisualVM等工具進行分析了,詳細的分析流程在后續會陸續講到。

可能很多小伙伴使用過jmap工具,也一樣可以生成dump文件,不過未來版本可能會被去掉,Oracle官方也建議使用jcmd。

2.4生成類直方圖

類直方圖是一個較為直觀的狀態去查看內存分布的情況。

>jcmd GC.class_histogram

num #instances #bytes class name

----------------------------------------------

1: 5923 5976952 [I

2: 50034 4127704 [C

3: 49465 1187160 java.lang.String

4: 188 1069496 [J

5: 3985 1067240 [Ljava.util.HashMap$Node;

6: 8756 982872 java.lang.Class

7: 2855 835792 [B

8: 23570 754240 java.util.HashMap$Node

9: 13964 671440 [Ljava.lang.Object;

10: 9642 308544 java.util.Hashtable$Entry

11: 4453 213744 java.util.HashMap

上述對象描述的只是類自身大小,不包含子對象。上圖中String底層實現使用到了char[],但是很明顯char[]并未比String大多少。

2.5打印線程狀態

有時候我們的應用程序會產生死鎖或者頻繁爭搶資源的情況,那么就可以通過打印線程狀態來詳細分析各個線程的執行狀態。

jstack

jcmd Thread.print

3.總結

我們對jcmd有了一個直觀的認識,下面的文章中將會對各種線上故障通過jcmd進行一一解決。

總結

以上是生活随笔為你收集整理的java表底层生产工具_使用Java工具解决生产故障(一)-jcmd介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。