1、監控CPU使用率java
一、 Linux提供了監控CPU使用率的命令行工具,能夠保留文本形式的CPU使用率運行歷史和日誌。經常使用的命令有:vmstat、mpstat、top等等,下面只是top命令的一個截圖,其餘的命令的使用方式,請自行搜索。ios
圖1-1工具
Linux的top命令不只包括CPU使用率也包括進程統計數據和內存使用率。上面的截圖顯示它的輸出主要包含兩個部分,上部分是整個系統的統計信息,下半部分是進程的統計信息(默認按CPU使用率由高到低排序)。命令行
2、CPU調度程序運行隊列線程
一、 Linux上能夠用vmstat命令監控運行隊列長度。Vmstat輸出的第一列是運行隊列長度,值是運行隊列中輕量級進程的實際數量。以下圖,紅色方框列即爲運行隊列。日誌
圖1-2排序
3、內存使用率隊列
一、 Linux上能夠用mstat輸出中的free列監控頁面交換,也能夠用其餘方法例如top命令來監控。這裏介紹用vmstat監控頁面交換。須要監控vmstat中的si和so,他們分別表示內存頁面換入和換出的量。此外,free列顯示可用的空閒內存,留意是否會同時出現空閒內存少和頁面調度頻繁的情形,相比而言,實際的數量單位反而不那麼重要。若是觀察到上述統計數據的模式,說明系統可能在進行頁面交換。下面示例中的系統沒有頁面交換,由於si和so 沒有頁面調度,並且空閒內存不少。進程
圖1-3內存
二、下面截圖(網上下載的)中的系統正在進行頁面交換
圖1-4
注意上面的數據。當空閒內存剛開始減小時,si和so幾乎沒有什麼頁面調度。但當空閒內存達到155000~175000時,so出現頁面換出活動。一旦頁面換出變得平穩,si列顯示的頁面換入開始快速增長。一般說明系統中有應用或一組應用在進行大量的內存分配或內存訪問。當物理內存逐漸耗盡時,系統開始將最近最少使用的內存置換到虛擬內存。當應用須要內存頁時,就會發生頁面換入,隨着頁面調度的增長,空閒內存基本不變。換句話說,當系統空閒內存不多時,內存頁面換入和換出的速度幾乎同樣快。在Linux系統進行頁面交換時,Linux的vmstat能夠觀察到這種典型模式。
二、 監控鎖競爭(網上找的)
Linux上可使用sysstat包中的pidstat命令監控鎖競爭。pidstat –w輸出結果中的cswch/s
是讓步式上下文切換。重點須要注意的是,該值並不包括全部的上下文切換。此外,pidstat –w 報告的是每秒而不是每一個測量間隔的讓步式上下文切換。所以,讓步式上下文切換浪費的時鐘週期,能夠由pidstat –w的讓步式上下文切換數除以虛擬處理器的數目而得出。請記住,pidstat –w是全部虛擬處理器的讓步式上下文切換。讓步式上下文切換數乘以80000,除以CPU每秒的時鐘週期,能夠得出讓步式上下文切換所耗費的CPU時鐘週期百分比。下面是pidstat –w每5秒監控進程id爲9391的java應用。
圖1-5
下面估算上下文切換所浪費的時鐘週期。處理器爲3.0GH雙核IntelCPU,pidstat –w顯示系統每秒鐘大約發生3500個上下文切換。所以,每一個虛擬處理器的上下文切換爲3500/2 = 1750,耗費的時鐘週期爲1750 x 80 000 = 140 000 000。3GHz CPU每秒的時鐘週期數爲3 000 000 000。
所以上下文切換所浪費的時鐘週期爲140 000 000 /3 000 000 000 = 4.7%。再次應用通常性準則(讓步時鐘週期佔用3% ~ 5%或更多時鐘週期),說明Java應用正面臨鎖競爭。
上面說了讓步式上下文切換,下面說說搶佔式上下文切換。Linux上能夠用pidstat –w監控搶佔式上下文切換。搶佔式上下文切換率高代表預備運行的線程數多於可用的虛擬處理器,因此此時用vmstat一般就能看到很長的運行隊列、很高的CPU使用率以及大量與之相關的搶佔式上下文切換。
4、 磁盤I/O使用率
一、Linux上能夠用iostat –xm監控磁盤I/O使用率和系統態CPU使用率。下面的示例顯示Linux系統的vda盤爲97%,系統態CPU使用率爲16%。
圖1-6