Linux kswapd0 進程CPU占用過高


圖便宜買了個1核1G虛擬機,啟動兩個jar后cpu飆升直接卡死,查看cpu及內存占用

發現kswapd0進程cpu占用一直居高不下,於是查詢資料,總結如下。

swap分區的作用是當物理內存不足時,會將一部分硬盤當做虛擬內存來使用。

kswapd0 占用過高是因為 物理內存不足,使用swap分區與內存換頁操作交換數據,導致CPU占用過高。

       可以通過修改  /etc/sys/vm/swappiness  里面的數值來修改swap分區使用與否,默認 60,數值越大表示更多的使用swap分區。這個交換參數控制內核從物理內存移出進程,移到交換空間。該參數從0到100,當該參數=0,表示只要有可能就盡力避免交換進程移出物理內存;該參數=100,這告訴內核瘋狂的將數據移出物理內存移到swap緩存中。設置vm.swappiness=0 后並不代表禁用swap分區,只是告訴內核,能少用到swap分區就盡量少用到,設置vm.swappiness=100的話,則表示盡量使用swap分區。

Swap配置對性能的影響
        分配太多的Swap空間會浪費磁盤空間,而Swap空間太少,則系統會發生錯誤。如果系統的物理內存用光了,系統就會跑得很慢,但仍能運行;如果Swap空間用光了,那么系統就會發生錯誤。例如,Web服務器能根據不同的請求數量衍生出多個服務進程(或線程),如果Swap空間用完,則服務進程無法啟動,通常會出現“application is out of memory”的錯誤,嚴重時會造成服務進程的死鎖。因此Swap空間的分配是很重要的。
通常情況下,Swap空間應大於或等於物理內存的大小,最小不應小於64M,通常Swap空間的大小應是物理內存的2-2.5倍。但根據不同的應用,應有不同的配置:如果是小的桌面系統,則只需要較小的Swap空間,而大的服務器系統則視情況不同需要不同大小的Swap空間。特別是數據庫服務器和Web服務器,隨着訪問量的增加,對Swap空間的要求也會增加,一般來說對於4G 以下的物理內存,配置2倍的swap,4G 以上配置1倍。
另外,Swap分區的數量對性能也有很大的影響。因為Swap交換的操作是磁盤IO的操作,如果有多個Swap交換區,Swap空間的分配會以輪流的方式操作於所有的Swap,這樣會大大均衡IO的負載,加快Swap交換的速度。如果只有一個交換區,所有的交換操作會使交換區變得很忙,使系統大多數時間處於等待狀態,效率很低。用性能監視工具就會發現,此時的CPU並不很忙,而系統卻慢。這說明,瓶頸在IO上,依靠提高CPU的速度是解決不了問題的。

總結完了繼續正題:

查看/proc/sys/vm/swappiness,vm.swappiness=0已經是能少用到swap分區就盡量少用到分區了

 

先把堆內存設置小點把程序啟動起來,頻繁觸發GC,沒辦法只能升級內存了。

java 
-Xms128m #JVM啟動時的初始堆大小 
-Xmx128m #最大堆大小 
 -jar app.jar

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM