1. 程式人生 > >jvm效能調優 之 工具說明

jvm效能調優 之 工具說明

我們知道,在JVM編譯期和載入器,甚至執行期已經做了大量的調優操作,但是那些都是JVM針對Java程式所做的通用的、簡單的優化,程式在執行時由於執行環境的複雜性、業務邏輯的複雜性,很多JVM是無法進行優化處理的,這就需要我們自己在寫程式碼的時候就注意,以便我們的程式在特定的業務場景發揮到最佳效能。

要進行效能調優,首先我們要找到程式的效能瓶頸在哪裡?而要知道效能瓶頸在哪裡,我們需要藉助一定的工具進行處理。

windows作業系統下,當我們的系統執行很慢的時候,80%的人首先檢視的就是工作管理員,因為它可以讓我們快讀的知道是那個程式佔用了較多的資源(如CPU、記憶體、磁碟IO等),或者是那個程序不能響應導致整個作業系統巨卡,我們通過工作管理員可以輕鬆的檢視和管理我們的應用程式,如下圖所示:



而從windowsVista核心以後(win7win8win2008OS),windows作業系統還提供了更為詳細的一個資源監視器,它可以讓我們更清晰的知道更多的細節資訊,在資源管理器上有一個資源監視器的入口,如下圖所示


 開啟對應的資源監視器,如下圖所示:


概述

tab頁面我們可以大致的看到對應的程序資訊,哪些程序佔用了多少的資源等資訊,而對應的CPU、記憶體、磁碟、網路則更詳細的展示了具體的資訊,如下圖所示,磁碟的資訊,哪些程序在操作哪些個檔案,磁碟的佇列有多少?都一目瞭然。


以上是

windows自帶的一些監控工具,當然我們知道面向windows的監控工具比比皆是,我在這裡就不多說了。

而我們的伺服器大部分是執行在Linux下,如我們現在的伺服器使用的是CentOS5.5的作業系統(Linux2.6核心),那在Linux下都有哪些工具可以使用的呢?

Linux下使用的最頻繁的一個命令是top,如下圖所示



這個就相當於

windows下的工作管理員,能夠簡單的描述每個程序佔用的資源資訊,包含CPU、磁碟、記憶體等資訊,按1可以將CPU拆解,看單個CPU的執行資訊。使用ps –ef | grep 程序名可以檢視對應程序的簡單資訊,如
ps –ef|grep java,如下圖所示:


 當然,針對我們

Java開發人員,這一點是遠遠不夠的,我們還需要更詳細的資訊。Linux工具集SysStat(下載地址:http://sebastien.godard.pagesperso-orange.fr/download.html)為我們提供了一系列指令集,我們在尋找下面會提到,但其實JDK已經為我們提供了很多很好的針對Java的效能監控工具,下面我們就來一起看一下JDK都為我們提供了哪些效能檢測工具。

一、JpsJVM Process Status Tools

Jps是參照Unix系統的取名規則命名的,而他的功能和ps的功能類似,可以列舉正在執行的餓虛擬機器程序並顯示虛擬機器執行的主類以及這些程序的唯一ID(LVMID,對應本機來說和PID相同),他的用法如下:

Jps [option] [hostid]

其中hostid預設為本機,而option選項包含以下選項

Option

Function

-q

只輸出LVMID

-m

輸出JVM啟動時傳給主類的方法

-l

輸出主類的全名,如果是Jar則輸出jar的路徑

-v

輸出JVM的啟動引數



二、

jstatJVM Statistics Monitoring Tools

Jstat主要用於監控虛擬機器的各種執行狀態資訊,如類的裝載、記憶體、垃圾回收、JIT編譯器等,在沒有GUI的伺服器上,這款工具是首選的一款監控工具。其用法如下:

jstat [option vmid [interval [s|ms] [vount] ] ]

引數intervalcount分別表示查詢間隔和查詢次數,如每1毫秒查詢一次程序20445的垃圾回收情況,監控20次,命令如下所示:

jstat –gc 20445 1 20


相關的輸出引數介紹可參照

官方的說明(注:網址連結請點選此處

選項option代表使用者需要查詢的虛擬機器的資訊,主要分為3類:類裝載、垃圾回收和執行期的編譯情況,具體如下表所示:

Option

Function

-class

監視類的裝載、解除安裝數量以及類的裝載總空間和耗費時間等

-gc

監視Java堆,包含eden2survivor區、old區和永久帶區域的容量、已用空間、GC時間合計等資訊

-gccapcity

監視內容與-gc相同,但輸出主要關注Java區域用到的最大和最小空間

-gcutil

監視內容與-gc相同,但輸出主要關注已使用空間佔總空間的百分比

-gccause

-gcutil輸出資訊相同,額外輸出導致上次GC產生的原因

-gcnew

監控新生代的GC情況

-gcnewcapacity

-gcnew監控資訊相同,輸出主要關注使用到的最大和最小空間

-gcold

監控老生代的GC情況

-gcoldcapacity

-gcold監控資訊相同,輸出主要關注使用到的最大和最小空間

-gcpermcapacity

輸出永久帶用到的最大和最小空間

-compiler

輸出JIT編譯器編譯過的方法、耗時資訊

-printcompilation

輸出已經被JIT編譯的方法

三、jinfoJVM configuration Info for Java

Jinfo的作用是實時檢視虛擬機器的各項引數資訊jps –v可以檢視虛擬機器在啟動時被顯式指定的引數資訊,但是如果你想知道預設的一些引數資訊呢?除了去查詢對應的資料以外,jinfo就顯得很重要了。jinfo的用法如下:

Jinfo [option] pid

 jinfo –sysprops {pid}



還有很多引數資訊,我們可以看到除了我們顯式指定的引數資訊以外,JVM的預設引數一覽無餘。同時,從JDK1.6以後,jinfo加入了執行時修改引數資訊的能力,可以使用-flag [+|-]name 或者-flag name=value來修改一部分執行期可以寫入的虛擬機器引數。更多資訊可參考官方文件

四、jmapJVM Memory Map for Java

Jmap用於生成堆快照(heapdump)。當然我們有很多方法可以取到對應的dump資訊,如我們通過JVM啟動時加入啟動引數 –XX:HeapDumpOnOutOfMemoryError引數,可以讓JVM在出現記憶體溢位錯誤的時候自動生成dump檔案,亦可以通過-XX:HeapDumpOnCtrlBreak引數,在執行時使用ctrl+break按鍵生成dump檔案,當然我們也可以使用kill -3 pid的方式去恐嚇JVM生成dump檔案。Jmap的作用不僅僅是為了獲取dump檔案,還可以用於查詢finalize執行佇列、Java堆和永久帶的詳細資訊,如空間使用率、垃圾回收器等。其執行格式如下:

Jmap [option] vmip

Option的資訊如下表所示

Option

Function

-dump

生成對應的dump資訊,用法為-dump:[live,]format=b,file={fileName}

-finalizerinfo

顯示在F-Queue中等待的Finalizer方法的物件(只在linux下生效)

-heap

顯示堆的詳細資訊、垃圾回收器資訊、引數配置、分代詳情等

-histo

顯示堆疊中的物件的統計資訊,包含類、例項數量和合計容量

-permstat

相關推薦

jvm效能調 工具說明

我們知道,在JVM編譯期和載入器,甚至執行期已經做了大量的調優操作,但是那些都是JVM針對Java程式所做的通用的、簡單的優化,程式在執行時由於執行環境的複雜性、業務邏輯的複雜性,很多JVM是無法進行優化處理的,這就需要我們自己在寫程式碼的時候就注意,以便我們的程式在

JVM效能調監控工具jps、jstack、jstat、jmap、jinfo使用

 現實企業級Java開發中,有時候我們會碰到下面這些問題: OutOfMemoryError,記憶體不足 記憶體洩露 執行緒死鎖 鎖爭用(Lock Contention) Java程序消耗CPU過高 ...... &n

JVM效能調監控工具jps、jstack、jmap、jhat、jstat、hprof詳解

來源:https://my.oschina.net/feichexia/blog/196575 現實企業級Java開發中,有時候我們會碰到下面這些問題: OutOfMemoryError,記憶體不足 記憶體洩露 執行緒死鎖 鎖爭用(Lock Contention)

JVM效能調監控工具jps、jstack、jmap、jhat、jstat、hprof使用詳解,以及例子

現實企業級Java開發中,有時候我們會碰到下面這些問題: OutOfMemoryError,記憶體不足 記憶體洩露 執行緒死鎖 鎖爭用(Lock Contention) Java程序消耗CPU過高 ......     這

深入理解Java虛擬機器(四)——JVM效能調監控工具

Jinfo 檢視正在執行的Java應用程式的擴充套件引數 檢視jvm的引數 檢視java系統引數 Jstat jstat命令可以檢視堆記憶體各部分的使用量,以及載入類的數量。命

JVM效能調生成堆的dump檔案

 最近因專案存在記憶體洩漏,故進行大規模的JVM效能調優 , 現把經驗做一記錄。 一、JVM記憶體模型及垃圾收集演算法  1.根據Java虛擬機器規範,JVM將記憶體劃分為: New(年輕代)Tenured(年老代)永久代(Perm)   其中New和Tenured屬

JVM效能調監控工具jps、jstack、jmap、jhat、jstat、hprof使用詳解

第一部分:工具介紹部分: 現實企業級Java開發中,有時候我們會碰到下面這些問題: OutOfMemoryError,記憶體不足 記憶體洩露 執行緒死鎖 鎖爭用(Lock Contention) Java程序消耗CPU過高 ...... 這些問題在日常開發中可能被很多人忽視(比如有的人遇到

JVM效能調監控工具jps、jstack、jstat、jmap、jinfo使用詳解

jcmd命令:主要提供JVM的一些基本資訊查詢(檢視程序執行時間、檢視虛擬機器版本資訊、顯示調優標誌)jinfo命令:檢視程序ID號。檢視JVM的配置引數。jps檢視所有的jvm程序,包括程序ID,程序啟動的路徑等等。我自己也用PS,即:ps -ef | grep javaj

JVM效能調監控工具

一、jps(Java Virtual Machine Process Status Tool)  基礎工具        實際中這是最常用的命令,下面要介紹的小工具更多的都是先要使用jps查看出當前有哪些Java程序,獲取該Java程序的id後再對該程序進行處理。 二

JVM效能調監控工具專題一:JVM自帶效能調工具

前提概要:  JDK本身提供了很多方便的JVM效能調優監控工具,除了整合式的VisualVM和jConsole外,還有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,每一種工具都有其自身的特點,使用者可以根據你需要檢測的應用或者程式片段的狀況,適

JVM效能調JVM效能監控

JVM的效能監控主要關注以下幾個方面: 垃圾回收、 JIT和類的載入。 垃圾回收器的監控: 幾點需要關注的內容: 1. 使用的垃圾回收期的種類 2. java堆的大小 3. 新生代和老年代的大小 4.永久代的大小 5. minor GC的持續時間 6. minor GC的發

ifeve.com 南方《JVM 效能調實戰:使用阿里開源工具 TProfiler 在海量業務程式碼中精確定位效能程式碼》

https://blog.csdn.net/defonds/article/details/52598018 多次拉取 JStack,發現很多執行緒處於這個狀態:    at jrockit/vm/Allocator.getNewTla(JJ)V(Native Method) 

JVM 效能調實戰 使用阿里開源工具 TProfiler 在海量業務程式碼中精確定位效能程式碼

                本文是《JVM 效能調優實戰之:一次系統性能瓶頸的尋找過程》 的後續篇,該篇介紹瞭如何使用 JDK 自身提供的工具進行 JVM 調優將 TPS 由 2.5 提升到 20 (提升了 7 倍),並準確定位系統瓶頸:我們應用裡靜態物件不是太多、有大量的業務執行緒在頻繁建立一些生命週期

Jvm效能調監控工具jps、jstack、jmap、jhat、jstat、hprof

現實企業級Java開發中,有時候我們會碰到下面這些問題: OutOfMemoryError,記憶體不足 記憶體洩露 執行緒死鎖 鎖爭用(Lock Contention) Java程序消耗CPU過高 ......     這些問題在日常開發中可能被很多人忽視

JVM 效能調實戰:一次系統性能瓶頸的尋找過程

玩過效能優化的朋友都清楚,效能優化的關鍵並不在於怎麼進行優化,而在於怎麼找到當前系統的效能瓶頸。效能優化分為好幾個層次,比如系統層次、演算法層次、程式碼層次...JVM 的效能優化被認為是底層優化,門檻較高,精通這種技能的人比較少。筆者呆過幾家技術力量不算弱的公司,每個公司內

【JAVA進階架構師指南】五:JVM效能調

## 前言   首先給大家說聲對不起,最近屬實太忙了,白天上班,晚上加班,回家還要收拾家裡,基本每天做完所有事兒都是凌晨一兩點了,沒有精力再搞其他的了.   好了,進入正題,讓我們來聊聊JVM篇最後一個章節----JVM效能調優.童鞋們隨便開啟一個大廠的招聘崗位JD,應該都會有JVM調優相關的描述,其實招

Nginx效能調快取記憶體

Nginx可以快取一些檔案(一般是靜態檔案),減少Nginx與後端伺服器的IO,提高使用者訪問速度。而且當後端伺服器宕機時,Nginx伺服器能給出相應的快取檔案響應相關的使用者請求。 一 Nginx靜態快取基本配置 在tomcat的webapps目錄下建立hello.html,內容

Spark效能調原理分析

spark效能調優之前先明白原理,具體如下: 使用spark-submit提交一個Spark作業之後,這個作業就會啟動一個對應的Driver程序。根據使用的部署模式(deploy-mode)不同,Driver程序可能在本地啟動,也可能在叢集中某個工作節點上啟動。Driver程序本身會根

如何合理的規劃一次jvm效能調

原文中的評論很有參考價值,轉發只是為了以後方便檢視 這是jvm優化系列第三篇: JVM效能調優涉及到方方面面的取捨,往往是牽一髮而動全身,需要全盤考慮各方面的影響。但也有一些基礎的理論和原則,理解這些理論並遵循這些原則會讓你的效能調優任務將會更加輕鬆。為了更好的理解本

效能調MySQL篇三:MySQL配置定位以及優化

1、優化方式 一般的優化方法有:硬體優化,配置優化,sql優化,表結構優化。下面僅僅介紹配置優化,具體優化設定可以參考本人另外一篇部落格,傳送門:https://www.cnblogs.com/langhuagungun/p/9507206.html 2、mysql配置分析 1)常見瓶頸 90%系統瓶