顯示系統(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ì)列的平均長(zhǎng)度,三個(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)程空間改變過(guò)優(yōu)先級(jí)的進(jìn)程CPU的占用率、id表示空閑CPU占用率村刨、wa表示等待輸入輸出的CPU時(shí)間百分比告抄、
hi表示中斷請(qǐng)求、si表示軟件中斷請(qǐng)求嵌牺。
在Mem行中打洼,從左到右表示物理內(nèi)存總量、已使用的物理內(nèi)存逆粹、空閑物理內(nèi)存募疮、內(nèi)核緩沖使用量
swap依次表示交換區(qū)總量、空閑交換區(qū)總量僻弹、緩沖交換區(qū)大小阿浓。
第二部分為進(jìn)程信息去,顯示各個(gè)進(jìn)程的資源使用情況蹋绽。
總結(jié): 一般是通過(guò)top命令芭毙,宏觀的觀察系統(tǒng)各個(gè)進(jìn)程對(duì)CPU的占用情況以及內(nèi)存使用情況。
監(jiān)控內(nèi)存和CPU----vmstat命令
vmstat也是一款功能比較全的性能檢測(cè)工具卸耘。 主要用來(lái)統(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)瓶頸的重要原因之一燕耿,所以我們一般可以通過(guò)這個(gè)命令去快速定位系統(tǒng)是都產(chǎn)生了大量的I/O操作中符。
多功能診斷器 pidstat
pidstat 是一個(gè)功能強(qiáng)大的性能檢測(cè)工具,也是Sysstat的組件之一誉帅。這個(gè)需要通過(guò)以下網(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使用情況堵第,所以我們一般需要通過(guò)運(yùn)行命令:jps
獲取java程序的進(jìn)程pid吧凉,然后可以執(zhí)行如下命令:
以上命令中, -p表示指定進(jìn)程的進(jìn)程ID踏志, -u 參數(shù)表示對(duì)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ì)化到線程級(jí)別。
案例定位分析:
執(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
對(duì)進(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ī)》