1. 程式人生 > >操作系統性能監控之內存監控

操作系統性能監控之內存監控

sha pidstat 進行 系統性能 博文 應用 -s 掃描 color

操作系統性能監控

服務端程序除了應用本身性能外,依賴與服務器本身的性能。服務器性能指標包括:CPU、內存、網絡IO和磁盤使用率。
技術分享圖片
今天學習了內存監控的部分。

為什麽要監測內存

當應用運行所需內存超過可用物理內存時,就會發生頁面交換。通常會在硬盤上分配一個swap空間。當應用耗盡可用內存時,就會把不常用的內容放到swap空間裏。 當訪問被置換到swap空間的內容時,就需要把swap空間的內容加載到物理內存中,這種置換操作會大大影響應用的吞吐量和響應性
JVM垃圾收集器在進行置換操作時,性能也很差。垃圾收集器為了回收不可達對象,需要大量訪問內存。如果java堆的一部分被置換出去,就必須先置換進來,在掃描存活對象,這會增加GC的時間。GC會造成jvm停頓。

監測內存使用率

[root@Hwseeker-Adx02 ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0 4030152 1427780 1159168 87874912    0    0     1    15    0    0  4  1 94  0  0

其中si、so可以看到swap操作,free代表可用內存數。如果si和so很大,就代表發生了內存置換。

監控鎖競爭

定義幾個概念
讓步試上下文切換:是指線程主動釋放CPU
搶占式上下文切換:線程因為分配的時間片用盡被迫放棄CPU或被優先級更高的線程搶占,而失去執行機會

Java HotSpot VM從1.5開始,增加了鎖機制優化。線程通過忙循環自旋嘗試獲得鎖,如果若幹次自旋後,沒有獲取成功,則掛起線程,等待喚醒後再次嘗試獲取。掛起和喚醒線程會導致讓步試上線文切換。

讓步試上下文切換耗費CPU時鐘非常嚴重,通常高達80000個時鐘周期
主頻為3GHz的處理器每秒鐘可用時鐘周期為3,000,000,000

搶占式上下文切換監控

[root@dmp002 ~]# pidstat -w -I -p 29064
Linux 2.6.32-573.el6.x86_64 (dmp002.tiger.local)    2018年01月25日     _x86_64_    (24 CPU)

18時34分45秒       PID   cswch/s nvcswch/s  Command
18時34分45秒     29064     3500      0.02  java

可以用top命令,獲取pid

pidstat -w顯示系統每秒發生3500個上下文切換。處理器為3Ghz雙核Intel CPU。因此虛擬處理器上下文切換為3500/2=1750,耗費的始終周期為1750*8000=140,000,000。3Ghz每秒鐘周期數為3,000,000,000。浪費的始終周期為140,000,000/3,000,000,000=4.7%。

讓步時鐘周期占用超過3%,表明Java應用正面臨鎖競爭
本博文內容為《Java性能優化權威指南》的讀書筆記整理而來

操作系統性能監控之內存監控