顯示系統(tǒng)整體資源使用情況--top
top是linux下常用的性能分析工具,能夠?qū)崟r(shí)顯示系統(tǒng)中各個(gè)進(jìn)程的資源占用情況。如圖所示:
top命令的輸出可以分為兩部分: 前半部分是系統(tǒng)統(tǒng)計(jì)信息,后半部分是進(jìn)程信息。
在統(tǒng)計(jì)信息中,第一行是消息隊(duì)列信息,它的結(jié)果相當(dāng)于uptime命令。
從左到右依次為:
系統(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ù)。
第三行是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表示軟件中斷請求。
在Mem行中,從左到右表示物理內(nèi)存總量、已使用的物理內(nèi)存、空閑物理內(nèi)存、內(nèi)核緩沖使用量
swap依次表示交換區(qū)總量、空閑交換區(qū)總量、緩沖交換區(qū)大小。
第二部分為進(jìn)程信息去,顯示各個(gè)進(jìn)程的資源使用情況。
總結(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í)例:
意思是每秒采樣一次,一共采樣三次。
下面給出一個(gè)特殊的例子:
我們根據(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
顯示的各個(gè)列的含義如下:
總結(jié): 磁盤IO是稱為系統(tǒng)瓶頸的重要原因之一,所以我們一般可以通過這個(gè)命令去快速定位系統(tǒng)是都產(chǎn)生了大量的I/O操作。
多功能診斷器 pidstat
pidstat 是一個(gè)功能強(qiáng)大的性能檢測工具,也是Sysstat的組件之一。這個(gè)需要通過以下網(wǎng)址去下載:
安裝:
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í)行如下命令:
以上命令中, -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)控線程的信息,使用如下命令:
參數(shù) : -t 就是將系統(tǒng)性能的監(jiān)控細(xì)化到線程級別。
案例定位分析:
執(zhí)行如下命令
輸出
然后我們可以看到,java應(yīng)用程序之所以占如此高的CPU,是因?yàn)榫€程1204的原因。使用jstack輸出堆棧
jstack -l 1187 >/tmp/t.txt
觀察輸出的t.txt文件,可以看到這一段內(nèi)容:
可以看到,該線程的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程序每秒采樣一次,一共三次
可以明顯的看到,這里進(jìn)行了大量的寫入操作。
3.內(nèi)存監(jiān)控
使用pidstat命令還可以監(jiān)控指定進(jìn)程的內(nèi)存使用情況。
如使用如下命令:
pidstat -r -p 27233 1 5
部分摘自:
《實(shí)戰(zhàn)java虛擬機(jī)》