JVM問題定位和排查之linux下的性能監(jiān)控工具與命令

顯示系統(tǒng)整體資源使用情況--top

top是linux下常用的性能分析工具,能夠?qū)崟r(shí)顯示系統(tǒng)中各個(gè)進(jìn)程的資源占用情況。如圖所示:

image

top命令的輸出可以分為兩部分: 前半部分是系統(tǒng)統(tǒng)計(jì)信息,后半部分是進(jìn)程信息。

在統(tǒng)計(jì)信息中,第一行是消息隊(duì)列信息,它的結(jié)果相當(dāng)于uptime命令。


image

從左到右依次為:

系統(tǒng)當(dāng)前時(shí)間、運(yùn)行時(shí)間、當(dāng)前登錄用戶數(shù)。load average表示系統(tǒng)的負(fù)載均衡,也就是任務(wù)隊(duì)列的平均長度,三個(gè)值分別表示1分鐘,5分鐘,15分鐘到現(xiàn)在的平均值。

第二行是進(jìn)程統(tǒng)計(jì)信息,分別總線程數(shù)、有正在運(yùn)行的線程數(shù)、睡眠進(jìn)程數(shù)、停止的進(jìn)程數(shù)、僵尸進(jìn)程數(shù)。

image

第三行是CPU統(tǒng)計(jì)信息,us表示用戶空間CPU占用率,sy表示內(nèi)核空間CPU空間占用率、ni表示用戶進(jìn)程空間改變過優(yōu)先級的進(jìn)程CPU的占用率、id表示空閑CPU占用率、wa表示等待輸入輸出的CPU時(shí)間百分比、
hi表示中斷請求、si表示軟件中斷請求。


image

在Mem行中,從左到右表示物理內(nèi)存總量、已使用的物理內(nèi)存、空閑物理內(nèi)存、內(nèi)核緩沖使用量
swap依次表示交換區(qū)總量、空閑交換區(qū)總量、緩沖交換區(qū)大小。


image

第二部分為進(jìn)程信息去,顯示各個(gè)進(jìn)程的資源使用情況。


image
image

總結(jié): 一般是通過top命令,宏觀的觀察系統(tǒng)各個(gè)進(jìn)程對CPU的占用情況以及內(nèi)存使用情況。

監(jiān)控內(nèi)存和CPU----vmstat命令

vmstat也是一款功能比較全的性能檢測工具。 主要用來統(tǒng)計(jì)CPU、內(nèi)存使用情況、swap使用情況登信息??梢灾付ú蓸又芷诤筒蓸哟螖?shù)。

如下實(shí)例:

意思是每秒采樣一次,一共采樣三次。


image
image

下面給出一個(gè)特殊的例子:

image

我們根據(jù)上面的命令輸出含義,可以看cs值還有us值,看到每秒上下文的切換次數(shù)和用戶CPU時(shí)間,表明系統(tǒng)上下文切換很頻繁,用戶的CPU占用率很高。

總結(jié): vmstat工具是linux系統(tǒng)自帶的,可以查看內(nèi)存、交互分區(qū)、I/O操作、上下文切換以及CPU的使用情況。

監(jiān)控I/O使用---iostat命令

isstat可以提供詳細(xì)的IO信息,如下圖,命令的使用方式和vmstat一樣,以下命令表示每秒采樣一次,合計(jì)兩次。如果只需要顯示磁盤情況,則可以使用如下命令:

iostat -d 1 2
image

顯示的各個(gè)列的含義如下:


image

總結(jié): 磁盤IO是稱為系統(tǒng)瓶頸的重要原因之一,所以我們一般可以通過這個(gè)命令去快速定位系統(tǒng)是都產(chǎn)生了大量的I/O操作。

多功能診斷器 pidstat

pidstat 是一個(gè)功能強(qiáng)大的性能檢測工具,也是Sysstat的組件之一。這個(gè)需要通過以下網(wǎng)址去下載:


image

安裝:

yum install pidstat

這個(gè)工具的強(qiáng)大之處在于不僅可以監(jiān)視進(jìn)程的性能情況,也可以監(jiān)視線程的性能情況。

有如下的功能:

1.CPU使用率監(jiān)控

CPU使用率監(jiān)控主要是監(jiān)控java等程序運(yùn)行的CPU使用情況,所以我們一般需要通過運(yùn)行命令:jps
獲取java程序的進(jìn)程pid,然后可以執(zhí)行如下命令:

image

以上命令中, -p表示指定進(jìn)程的進(jìn)程ID, -u 參數(shù)表示對CPU使用率的監(jiān)控。

參數(shù) 1 3 表示每秒采樣1一次,一個(gè)采用三次。從上面輸出可以看出,CPU的占用率幾乎是100%。

當(dāng)我們想要進(jìn)一步觀察進(jìn)程信息,它可以進(jìn)一步監(jiān)控線程的信息,使用如下命令:

image

參數(shù) : -t 就是將系統(tǒng)性能的監(jiān)控細(xì)化到線程級別。

案例定位分析:

執(zhí)行如下命令


image

輸出


image

然后我們可以看到,java應(yīng)用程序之所以占如此高的CPU,是因?yàn)榫€程1204的原因。使用jstack輸出堆棧
jstack -l 1187 >/tmp/t.txt

觀察輸出的t.txt文件,可以看到這一段內(nèi)容:

image

可以看到,該線程的nid(native id)為0x4b4 轉(zhuǎn)為10進(jìn)制后,發(fā)現(xiàn)是1204.。。我們找到了java應(yīng)用程序中占用大量CPU內(nèi)存的線程。

2.I/O使用監(jiān)控

運(yùn)行命令:

pidstat -p 22796 -d -t 1 3

對進(jìn)程id為22796的java程序每秒采樣一次,一共三次

image

可以明顯的看到,這里進(jìn)行了大量的寫入操作。

3.內(nèi)存監(jiān)控

使用pidstat命令還可以監(jiān)控指定進(jìn)程的內(nèi)存使用情況。
如使用如下命令:

pidstat -r -p 27233 1 5
image

image
image

部分摘自:
《實(shí)戰(zhàn)java虛擬機(jī)》

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容