#topas
作業系統的最全面動态,而又檢視友善的性能視圖就是topas指令了,下面以topas輸出為例,對AIX系統的性能監控做簡要描述,供運維工程師和系統管理者們參考。
另:1.作業系統報錯資訊errpt檢視。2.磁盤空間使用率采用df檢視。這裡主要分析性能問題。
區域1:反映CPU使用率和工作狀況。
Kernel:
說明:作業系統的核心占用的CPU時間比率。
作業系統作為基礎軟體,為應用程式支援和服務的同時,本身的運作也需要一定的CPU和記憶體資源(順便提到記憶體資源,後面不再闡述這個内容了),特别是記憶體資源,系統負載越重,相應的核心占用的CPU和記憶體資源也會越多。一般來說,核心占用的CPU時間不會太多的。一般小于應用的CPU使用率。
User:
說明:使用者程序占用的CPU時間比率。
這個為CPU使用率的關鍵數值。該使用率反映了使用者在作業系統基礎上運作的各種軟體占用的CPU時間比率的總和。一般來說,如果User+Kernel連續大于70%,即可以認為系統可能存在CPU上的嚴重性能問題。
WaitCPU的等待一般都為等待IO的響應,衆所周知,目前計算機的主要瓶頸都在IO。應用程式執行的時候,需要讀寫磁盤等外部存儲的資料,程序就會發起IO請求後等待IO完成。這個等待的過程占用CPU時間就是wait。當這個值很高的時候,就說明IO來不及響應很多的IO請求,這個時候,就隻能從IO層面想辦法優化了。
說明:CPU處于等待狀态占CPU時間的比率。
Idle:
說明:CPU空閑時間比率,這個就不用說了吧。就是CPU多少時間比率在閑着。
CPU占用率出問題的主要可能原因:資料庫伺服器執行某一個SQL或者存儲過程(存儲過程就是封裝起來的sql程式包而已)需要大量的運算(一般為軟體設計不合理)。或者應用程式中存在異常的地方,比如死循環,或者其他寫程式時的邏輯錯誤導緻。一般程式出錯會導緻一個CPU被全部占用,比如上述的20%占用的原因就是一個交易程式長期占用一個CPU全部時間片(系統共計5個CPU)。
區域2:反映網絡使用率的狀況。
Netwok;列出了網卡接口,KBPS即每秒鐘多少KB(千位元組) I-Pack每秒鐘輸入的資料包個數, O-Pack 每秒鐘輸出的資料包個數? KB-In每秒鐘輸入的位元組數 KB-Out每秒鐘輸出的位元組數。
當我們發現網絡擁堵時(出現網卡傳輸失效的報錯,即網卡發送資料包失敗。或者網絡響應明顯變慢的時候,如果CPU沒有問題,那麼請檢查網絡流量)發現某一個網卡的KBPS持續大于四位數,甚至五位數時(這個值要是網卡千兆還是百兆而定)。就要看看這個網卡是什麼網卡,在處理什麼業務了。在指令行執行netstat –in 檢視對應en*接口的ip位址,通過ip位址看看是帶官網卡還是生産服務網卡流量高。然後通過netstat –v en* 看看網卡的詳細工作狀态,出現了多少錯包,沖突包,crc校驗錯或者網絡重置過等資訊。上述資訊請詳細看netstat –v en*的輸出.如果出現大量crc,錯包的話,可能網線有問題或者接觸不良。
如果上述均正常,而網絡反應慢,則有可能是交換機擁堵。
網絡出現問題的可能原因:通過百兆的帶管網加載大量資料(以前出現過),大量隊列的長時間的ftp傳輸,或者網線,交換機問題等。
區域3:反映磁盤使用率的狀況。
Disk? Busy%磁盤繁忙的百分比,即磁盤能滿足的最大IOPS(每秒IO操作數)和目前IO數量的比率。其他的參數不再解釋。望文生義即可。
一般主要看磁盤的Busy%,當磁盤的Busy%持續大于85%時,即認為磁盤相當繁忙,已經可能要出問題了。當然,自己知道已經确定要産生大量IO操作的内容則不必在意,等其完成即可。
出現問題的原因:應用伺服器上面寫日志程序或者查詢日志的程序大量讀寫日志,導緻磁盤繁忙率高,或者其他程式頻繁讀寫磁盤導緻。系統中hdisk0,hdisk1一般為系統盤,内置SCSI磁盤的相對IOPS是較低的。很容易滿負荷運作。
區域4:反映程序資訊的狀況。
Name:程序的名稱,即程序被執行時啟動的二進制檔案的名稱。
PID,程序的ID,程序的ID在系統中唯一,是我們了解跟蹤程序資訊重要數值。
跟蹤程序的CPU使用,磁盤IO讀寫,程序的記憶體和pagingspace占用等等均需要使用。
CPU%程序占用CPU時間的比率。
PgSp,程序占用的pagingspace的空間大小。
Owner程序的屬主,即由哪個操作使用者使用者啟動了這個程序。
在topas中,預設是列出占用cpu最高的前幾個的程序資訊供參考,如果前面第一區域的的CPU使用率持續高,就要看看這裡是那個程序占用了大量的CPU資源,看看是哪個使用者的程序,如果自己執行的,則殺掉或者找項目組解決即可。
區域5:反映記憶體頁面和換頁空間資訊的狀況。
換頁空間即磁盤上的空間,在AIX作業系統中用來做記憶體空間使用。具體的理論就不再闡述了,詳細資訊請參閱作業系統内容。磁盤空間的速度當然相比記憶體,慢了不止10倍。是以,隻是記憶體頁面的一個暫時存放地,存放的還是那些長期不怎麼用到的記憶體頁面而已。如果paging大量出現,這時候就有麻煩了,說明:記憶體不夠用了!
該區域主要關注PageIn,PageOut如果這兩個數值均大于三位數,并且長期大于這個數值,在技術上叫做記憶體颠簸,即不停的把記憶體頁面換到磁盤空間上,又從磁盤空間把記憶體頁面讀進來,系統的記憶體使用效率變的極差,系統響應性能也變慢了。
這個資訊也可以用vmstat來看,pi和po列即與這裡相對應。當然,如果隻是有頁面出,或者隻有頁面入,或者短時間的一些頁面換入換出,則沒有什麼問題,關注一下即可。
區域6:反映記憶體使用的資訊。
Real,MB作業系統實際擁有的記憶體的總量,機關是MB。
%Comp,計算型記憶體占用比率,%Noncomp非計算型記憶體占用的比率。
%Client也為非計算型記憶體,Noncomp包涵Client型記憶體,jfs檔案系統使用的記憶體為noncomp,為了區分,jfs2和nfs使用的記憶體為Client。
計算型記憶體就是程序實際使用的記憶體,例如我們寫程式的時候malloc記憶體,或者在排序中使用了堆棧,程序中變量數值都需要在記憶體中儲存,這部分記憶體為計算型記憶體(闡述不全面,僅供參考)。而作業系統在進行檔案讀寫,需要的io緩沖區,或者我們在寫程式的時候,打開檔案,讀寫檔案,均在檔案緩沖區進行。(裸裝置例外,CCCC的資料庫采用RAC,資料的存儲全部使用裸裝置,在資料庫伺服器上,資料檔案的緩沖在oracle的sga區的data buffer中(這個區域系統認為是計算型記憶體),是不會占用非計算記憶體的。)
導緻記憶體出問題的可能原因很多。主要有:程序使用了更多的記憶體,例如,CCCC資料庫伺服器大量的oracle連接配接使用了很多記憶體,或者資料庫中執行的某一個sql腳本或者存儲過程的執行需要大量的記憶體來完成其操作(特例庫中出現過這個情形,一個存儲過程的執行導緻作業系統記憶體被耗盡,pg也随之耗盡,作業系統自動執行PGSP_KILL,把該程序給幹掉了,我也是第一次知道aix系統還有這個功能,呵呵)。第二個主要的問題就是記憶體洩漏,記憶體洩漏最簡單的來說,就是申請了記憶體空間,使用後不再使用了,但是也沒有釋放。我們寫程式的時候malloc,卻沒有free。這就導緻了嚴重的問題,随着程式的執行,可用實體記憶體越來越少,最後就挂了,隻好定期重新開機應用來解決。
作業系統的記憶體換頁機制導緻了程式中不用的記憶體頁面最後都跑到pg上面去了,換頁空間會持續增長的。因應用導緻系統問題就是這麼産生的。
區域7反映的是換頁空間的使用率。
如果換頁空間的使用率長期增長,就說明系統記憶體不足,已經開始使用磁盤空間來緩沖記憶體了,如果PG使用率持續增長,或者大于50%,需要警惕(到50%在監控平台已經是主要告警啦!),并馬上送出系統管理者分析記憶體增長原因。如果該數值持續增長,系統一定會挂掉的!