操做系統性能監控以內存監控

操做系統性能監控

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

爲何要監測內存

當應用運行所需內存超過可用物理內存時,就會發生頁面交換。一般會在硬盤上分配一個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開始,增長了鎖機制優化。線程經過忙循環自旋嘗試得到鎖,若是若干次自旋後,沒有獲取成功,則掛起線程,等待喚醒後再次嘗試獲取。掛起和喚醒線程會致使讓步試上線文切換。 jvm

讓步試上下文切換耗費CPU時鐘很是嚴重,一般高達80000個時鐘週期
主頻爲3GHz的處理器每秒鐘可用時鐘週期爲3,000,000,000 ide

搶佔式上下文切換監控

[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性能優化權威指南》的讀書筆記整理而來優化

相關文章
相關標籤/搜索