1. 程式人生 > >乾貨:java之jdk命令列工具詳解。

乾貨:java之jdk命令列工具詳解。

在上一篇文章中整理了java開發人員必須掌握的linux基本命令。由於java jdk命令列工具比較重要所以單獨整理一個篇幅來講解。相關資料有來源於網路、加上自己的見解整理而成、比較全面。上一篇文章地址:Java開發必須熟悉的Linux命令看這一篇就夠了。
在筆者接觸的很多公司中、發現很多java開發人員一旦發現應用無法響應、首先檢視一下日誌、在查詢日誌無果的情況下動不動就重啟java應用先讓其正常工作了再說。還有更誇張的是聽到過製作定時指令碼每天半夜定時重啟、並笑著說重啟解決一切問題。那種解決辦法乃是下下策、經驗不足的表現。除了檢視日至之外、對於java程序JVM的檢測其實sun公司提供了一套強大的虛擬機器監視和故障處理工具。如果你對jdk有一點點了解、對於個java 程序的診斷其實就那麼回事、我們應該查詢到根源問題、從本上找到ava程序不能正常工作的原因、從而達到治本的目的。
圖片描述

簡單的介紹一下jdk命令列工具是什麼。
我們整java的肯定知道jdk的bin目錄下面有 java.exe、javac.exe這兩個命令列工具。但是除了這兩個工具還有一些其他的非常實用的工具、這篇文章主要就是介紹用於監視虛擬機器和故障處理的工具。非常有用哦。
JPS—虛擬機器程序狀況工具

常用的幾個引數:
-l 輸出Java應用程式的main class的完整包
-q 僅顯示pid,不顯示其它任何相關資訊
-m 輸出傳遞給main方法的引數
-v 輸出傳遞給JVM的引數。在診斷JVM相關問題的時候,這個引數可以檢視JVM相關引數的設定
ps:這個命令相信大多數java程式設計師都知曉、查詢當前執行的java程序、當需要kill掉某個程序的時候可以用到、
圖片描述

jstat —虛擬機器統計資訊監視工具
jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ] ,可以用來檢視堆資訊,垃圾回收資訊等,詳細使用命令可以通過man jstat命令來檢視。

圖片描述
檢視垃圾回收資訊
圖片描述

S0C:年輕代中第一個survivor(倖存區)的容量 (位元組)
S1C:年輕代中第二個survivor(倖存區)的容量 (位元組)
S0U:年輕代中第一個survivor(倖存區)目前已使用空間 (位元組)
S1U:年輕代中第二個survivor(倖存區)目前已使用空間 (位元組)
EC:年輕代中Eden(伊甸園)的容量 (位元組)
EU:年輕代中Eden(伊甸園)目前已使用空間 (位元組)
OC:Old代的容量 (位元組)
OU:Old代目前已使用空間 (位元組)
PC:Perm(持久代)的容量 (位元組)
PU:Perm(持久代)目前已使用空間 (位元組)
YGC:從應用程式啟動到取樣時年輕代中gc次數
YGCT:從應用程式啟動到取樣時年輕代中gc所用時間(s)
FGC:從應用程式啟動到取樣時old代(全gc)gc次數
FGCT:從應用程式啟動到取樣時old代(全gc)gc所用時間(s)
GCT:從應用程式啟動到取樣時gc用的總時間(s)
NGCMN:年輕代(young)中初始化(最小)的大小 (位元組)
NGCMX:年輕代(young)的最大容量 (位元組)
NGC:年輕代(young)中當前的容量 (位元組)
OGCMN:old代中初始化(最小)的大小 (位元組)
OGCMX:old代的最大容量 (位元組)
OGC:old代當前新生成的容量 (位元組)
PGCMN:perm代中初始化(最小)的大小 (位元組)
PGCMX:perm代的最大容量 (位元組)
PGC:perm代當前新生成的容量 (位元組)
S0:年輕代中第一個survivor(倖存區)已使用的佔當前容量百分比
S1:年輕代中第二個survivor(倖存區)已使用的佔當前容量百分比
E:年輕代中Eden(伊甸園)已使用的佔當前容量百分比
O:old代已使用的佔當前容量百分比
P:perm代已使用的佔當前容量百分比
S0CMX:年輕代中第一個survivor(倖存區)的最大容量 (位元組)
S1CMX :年輕代中第二個survivor(倖存區)的最大容量 (位元組)
ECMX:年輕代中Eden(伊甸園)的最大容量 (位元組)
DSS:當前需要survivor(倖存區)的容量 (位元組)(Eden區已滿)
TT: 持有次數限制
MTT : 最大持有次數限制
jinfo java配置資訊工具
觀察執行中的java程式的執行環境引數:引數包括Java System屬性和JVM命令列引數、也可以設定引數的值,並使之立即生效。
圖片描述


。eg:
圖片描述

jmap Java記憶體映像工具
可以生成java應用程式的堆快照和物件統計資訊。
下面的命令可以看到java程序中某一時刻的類示例數量以及所佔的位元組數。
列印程序的類載入器和類載入器載入的持久代物件資訊,輸出:類載入器名稱、物件是否存活(不可靠)、物件地址、父類載入器、已載入的類大小等資訊
1、使用jmap -heap pid檢視程序堆記憶體使用情況,包括使用的GC演算法、堆配置引數和各代中堆記憶體使用情況。
2、使用jmap -histo[:live] pid 檢視堆記憶體中的物件數目、大小統計直方圖,如果帶上live則只統計活物件
ps:個人覺得這個比較有用、那時還在遊戲公司上班、遊戲正在外網公測、運維給遊戲內玩家發了一封郵件、查詢資料庫的時候記錄數太多導致伺服器記憶體爆滿一直full GC遊戲程序假死。後來排查問題的時候用此命令檢視類的數量以及位元組數、發現某個類的個數非常多以及所佔的記憶體非常大、很可疑、複製這個類名在eclipse裡邊ctrl+shift+t一查發現是jdbc jar包裡邊一個類、由此才確定是查詢資料庫導致的問題。
圖片描述

也可以將當前程式的堆快照匯出到檔案中:
圖片描述
jstack命令(Java Stack Trace)

可以用來檢視java應用程式的堆疊資訊。
jstack -l
可以用來檢視程序中執行緒狀態,檢測死鎖等。
jstack可以定位到執行緒堆疊,根據堆疊資訊我們可以定位到具體程式碼,所以它在JVM效能調優中使用得非常多。下面我們來一個例項找出某個Java程序中最耗費CPU的Java執行緒並定位堆疊資訊,用到的命令有ps、top、printf、jstack、grep。
步驟一:先找出Java程序ID,我部署在伺服器上的Java應用名稱為mrf-center:
圖片描述
得到程序ID為21711
步驟二:找出該程序內最耗費CPU的執行緒 top -Hp pid
圖片描述

TIME列就是各個Java執行緒耗費的CPU時間,CPU時間最長的是執行緒ID為21742的執行緒
printf”%x\n”21742得到21742的十六進位制值為54ee,下面會用到。
步驟三:jstack上場、它用來輸出程序21711的堆疊資訊,然後根據執行緒ID的十六進位制值grep,如下
圖片描述

PS:可以看到CPU消耗在PollIntervalRetrySchedulerThread這個類的Object.wait(),我找了下我的程式碼,定位到下面的程式碼:
圖片描述

學習Java的同學注意了!!!

學習過程中遇到什麼問題或者想獲取學習資源的話,歡迎加入Java學習交流,裙號碼:392216227【長按複製】 我們一起學Java!

相關推薦

乾貨javajdk命令工具

在上一篇文章中整理了java開發人員必須掌握的linux基本命令。由於java jdk命令列工具比較重要所以單獨整理一個篇幅來講解。相關資料有來源於網路、加上自己的見解整理而成、比較全面。上一篇文章地址:Java開發必須熟悉的Linux命令看這一篇就夠了。 在

JVM調優前戲JDK命令工具---jhat

在JDK的命令列中,一般開發人員最耳熟能詳的肯定就是java,javac,javap等常用命令,不過在jdk/bin下還有許多其他

Kubernetes 實踐指南Kubernetes 的命令工具

  kubectl作為客戶端CLI工具,可以讓使用者通過命令列的方式對Kubernetes叢集進行管理。本節內容將對kubectl的子命令和用法進行詳細描述。 一、kubectl 用法概述 kubectl語法執行如下命令: kubectl [comman

【linux】Valgrind工具(八)Memcheck命令引數

【linux】Valgrind工具集詳解(五):命令列詳解中不夠全,在此專門針對Memcheck工具中的命令列引數做一次詳細的解釋。 Memcheck命令列選項 –leak-check=<no|summary|yes|full> [default: summary]

短小精悍 Redis 命令工具有趣的罕見用法

我們天天都在使用 Redis 內建的命令列工具 redis-cli,久而久之以為它就是一個簡單的互動式 Redis 資料結構手工操作程式,但是它背後強大的功能絕大多數同學可能聞所未聞。本節我們一起來挖掘這些鮮為人知的有趣用法。 執行單條命令 平時在訪問 Redis 伺

Kuberneteskubectl命令工具簡介、安裝配置及常用命令

kubectl概述 kubectl是Kubernetes叢集的命令列工具,通過kubectl能夠對叢集本身進行管理,並能夠在叢集上進行容器化應用的安裝部署。執行kubectl命令的語法如下所示: $ kubectl [command] [TYPE] [NAME] [flags] coma

【ffmpeg】視訊編解碼ffmpeg命令工具的常用命令彙總

H264視訊轉ts視訊流 ffmpeg -i test.h264 -vcodec copy -f mpegts test.ts H264視訊轉mp4 ffmpeg -i test.h264 -vcodec copy -f mp4 test.mp4 ts視訊轉mp4 ffmpeg

Vue入門教程node安裝vue命令工具及啟動專案

安裝淘寶npm映象 npm install -g cnpm --registry=https://registry.npm.taobao.org 全域性安裝vue命令列工具 cnpm inst

JVM效能監控工具(一)-jdk命令工具

概述 當系統出bug需要定位問題的時候,知識、經驗是關鍵基礎,資料是依據,工具是運用知識處理資料的手段。這裡所說的資料包括:執行日誌,異常堆疊,GC日誌,執行緒快照(threaddump/javacore檔案),堆轉儲快照(heapdump/hprof檔案)等

來認識一下venus-init——一個讓你僅需一個命令開始Java開發的命令工具

原始碼地址: Github倉庫地址 個人網站:個人網站地址 前言 不知道你是否有過這樣的經歷。不管你是什麼崗位,前端也好,後端也罷,想去了解一下Java開發到底是什麼樣的,它是不是真的跟傳說中的一樣。 於是你拿起鍵盤,用觸控板 ? '' : 抄起滑鼠',開始了Java淌坑之旅。在一把梭的操作之後,面對你搭建的

Java命令引數

最近在學習Gradle相關的知識。下載Gradle原始碼後,未能成功匯入IDEA執行。所以想另闢蹊徑,通過命令列來除錯執行Gradle程式。經過一番搜尋和思考。發現Java通過jdwp可以遠端除錯java程式的。在實踐的過程中,對一些命令列引數的含義不是特別清楚。故有此篇文章。 1.

JAVA利用cmd命令呼叫WINRAR壓及壓縮

  JAVA利用cmd命令列呼叫WINRAR解壓及壓縮     前言 對於zip檔案,java有自帶類庫java.util.zip;可是要想解壓rar檔案只能靠第三方類庫,我試過兩個:com.github.junrar和de.innosystec.u

javayield(),sleep(),wait()區別

yield 其他 哪些 AD 不能訪問 機制 內存 strong 一段 1、sleep() 使當前線程(即調用該方法的線程)暫停執行一段時間,讓其他線程有機會繼續執行,但它並不釋放對象鎖。也就是說如果有synchronized同步快,其他線程仍然不能訪問共享數據。註意該方

美團面試題Java-執行緒池 ThreadPool 專題

去美團面試,問到了什麼是執行緒池,如何使用,為什麼要用,以下做個總結。關於執行緒之前也寫過一篇文章《高階面試題總結—執行緒池還能這麼玩?》 1、什麼是執行緒池:  java.util.concurrent.Executors提供了一個 java.util.conc

shell三劍客awk 資料擷取工具

目錄 awk 資料擷取工具 ③變數 ④流程控制 ⑤陣列 ⑥內建函式 ①awk簡介 >>>awk是一種程式語言(解釋性語言,不需要編譯),用於資料擷取和報告的工具 >>>awk自動搜尋輸入的檔案

【搞定Java併發程式設計】第22篇Java中的阻塞佇列 BlockingQueue

上一篇:Java併發容器之ConcurrentHashMap詳解 本文目錄: 1、阻塞佇列的基本概念 2、ArrayBlockingQueue 2.1、ArrayBlockingQueue的基本使用 2.2、ArrayBlockingQueue原理概要 2.3、ArrayBl

【搞定Java併發程式設計】第28篇Java中的執行緒池

上一篇:Java中的併發工具類之執行緒間交換資料的 Exchanger 本文目錄: 1、執行緒池的實現原理  2、執行緒池的使用 2.1、執行緒池的建立 2.2、向執行緒池提交任務 2.3、關閉執行緒池 2.4、合理地配置執行緒池 2.5、執行緒池的監控

Tensorflow使用flags定義命令引數

TensorFlow定義了tf.app.flags,用於支援接受命令列傳遞引數,相當於接受argv,詳細用法請看程式碼中的註釋 例一: import tensorflow as tf ##第一個是引數名稱,第二個引數是預設值,第三個是引數描述 tf

Matlab mex 命令引數

 MATLAB Application Program Interface   Go to function:  The mex Script Compiles a MEX-function from C or Fortran source code MEX

乾貨 | 深度學習CNN反向傳播演算法

微信公眾號 關鍵字全網搜尋最新排名 【機器學習演算法】:排名第一 【機器學習】:排名第一 【Python】:排名第三 【演算法】:排名第四 前言 在卷積神經網路(CNN)前向傳播演算法(乾貨 | 深度學習之卷積神經網路(CNN)的前向傳播演算法詳解)中對CNN的前向傳播演算法做了總結,基於CNN前向傳播演