JVM的常用命令匯總
簡介
監(jiān)測java應(yīng)用,最方便的就是直接使用jdk提供的現(xiàn)成工具,在jdk的安裝的bin目錄下,已經(jīng)提供了多種命令行監(jiān)測工具,以便于開發(fā)人員和運維人員監(jiān)測java應(yīng)用和診斷問題,因此,此類工具是java應(yīng)用監(jiān)測的重要手段。也是作為java開發(fā)人員需要掌握的基本技能。
jps
查看java進程。
The jps command lists the instrumented Java HotSpot VMs on the target system. The command is limited to reporting information on JVMs for which it has the access permissions.

jinfo
(1)實時查看和調(diào)整JVM配置參數(shù)
The jinfo command prints Java configuration information for a specified Java process or core file or a remote debug server. The configuration information includes Java system properties and Java Virtual Machine (JVM) command-line flags.
(2)查看用法
jinfo -flag name PID 查看某個java進程的name屬性的值
jinfo -flag MaxHeapSize PID jinfo -flag UseG1GC PID

(3)修改 參數(shù)只有被標記為manageable的flags可以被實時修改。
jinfo -flag [+|-] PID jinfo -flag <name>=<value> PID
(4)查看曾經(jīng)賦過值的一些參數(shù)
jinfo -flags PID

jstat
(1)查看虛擬機性能統(tǒng)計信息
The jstat command displays performance statistics for an instrumented Java HotSpot VM. The target JVM is identified by its virtual machine identifier, or vmid option.
(2)查看類裝載信息 jstat -class PID 1000 10 查看某個java進程的類裝載信息,每1000毫秒輸出一次,共輸出10次。

(3)查看垃圾收集信息
jstat -gc PID 1000 10

jstack
(1)查看線程堆棧信息
The jstack command prints Java stack traces of Java threads for a specified Java process, core file, or remote debug server.
(2)用法
jstack PID

(4)排查死鎖案例
DeadLockDemo
//運行主類
public class DeadLockDemo
{
public static void main(String[] args)
{
DeadLock d1=new DeadLock(true);
DeadLock d2=new DeadLock(false);
Thread t1=new Thread(d1);
Thread t2=new Thread(d2);
t1.start();
t2.start();
}
}
//定義鎖對象
class MyLock{
public static Object obj1=new Object();
public static Object obj2=new Object();
}
//死鎖代碼
class DeadLock implements Runnable{
private boolean flag;
DeadLock(boolean flag){
this.flag=flag;
}
public void run() {
if(flag) {
while(true) {
synchronized(MyLock.obj1) {
System.out.println(Thread.currentThread().getName()+"----if獲得obj1鎖");
synchronized(MyLock.obj2) {
System.out.println(Thread.currentThread().getName()+"----if獲得obj2鎖");
}
}
}
}
else {
while(true){
synchronized(MyLock.obj2) {
System.out.println(Thread.currentThread().getName()+"----否則獲得obj2鎖");
synchronized(MyLock.obj1) {
System.out.println(Thread.currentThread().getName()+"----否則獲得obj1鎖");
}
}
}
}
}
}運行結(jié)果

jstack分析

把打印信息拉到最后可以發(fā)現(xiàn)

jmap
(1)生成堆轉(zhuǎn)儲快照
The jmap command prints shared object memory maps or heap memory details of a specified process, core file, or remote debug server.
(2)打印出堆內(nèi)存相關(guān)信息
jmap -heap PID jinfo -flag UsePSAdaptiveSurvivorSizePolicy 35352 -XX:SurvivorRatio=8

(3)dump出堆內(nèi)存相關(guān)信息
jmap -dump:format=b,file=heap.hprof PID

(4)要是在發(fā)生堆內(nèi)存溢出的時候,能自動dump出該文件就好了
一般在開發(fā)中,JVM參數(shù)可以加上下面兩句,這樣內(nèi)存溢出時,會自動dump出該文件。
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.hprof。
設(shè)置堆內(nèi)存大小: -Xms20M -Xmx20M
啟動,然后訪問localhost:9090/heap,使得堆內(nèi)存溢出
(5)關(guān)于dump下來的文件
一般dump下來的文件可以結(jié)合工具來分析,這塊后面再說。
到此這篇關(guān)于JVM的常用命令匯總的文章就介紹到這了,更多相關(guān)JVM常用命令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在Spring MVC中處理請求參數(shù)的方法總結(jié)
在Spring MVC中處理請求參數(shù)是通過使用各種注解來實現(xiàn)的,本文給大家介紹了在Spring MVC中處理不同類型請求參數(shù)的方法,并通過代碼講解的非常詳細,需要的朋友可以參考下2024-08-08
Java關(guān)于后端怎么去接收Date、LocalDateTime類型的參數(shù)詳解
這篇文章主要介紹了java關(guān)于后端怎么去接收Date、LocalDateTime類型的參數(shù),文中有詳細的代碼流程,對我們學(xué)習(xí)或工作有一定的參考價值,需要的朋友可以參考下2023-06-06
JAVA幫助文檔全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版整理
JDK(Java Development Kit,Java開發(fā)包,Java開發(fā)工具)是一個寫Java的applet和應(yīng)用程序的程序開發(fā)環(huán)境。它由一個處于操作系統(tǒng)層之上的運行環(huán)境還有開發(fā)者編譯,調(diào)試和運行用Java語言寫的applet和應(yīng)用程序所需的工具組成2014-01-01
java.net.SocketTimeoutException: Read timed o
本文主要介紹了java.net.SocketTimeoutException: Read timed out異常的解決,可能是因為網(wǎng)絡(luò)延遲、服務(wù)器響應(yīng)慢或連接不穩(wěn)定等原因造成的,下面就一起來介紹一下,感興趣的可以了解一下2024-05-05
Redis?command?timed?out兩種異常情況的解決方式

