搜尋
首頁運維linux運維Linux Swap空間使用率過高怎麼解決

    什麼是swap?

    swap space是磁碟上的一塊區域,可以是一個分割區,也可以是一個文件,或是他們的組合。

    簡單點說,當系統物理記憶體吃緊時,Linux會將記憶體中不常存取的資料保存到swap上,這樣系統就有更多的物理記憶體為各個進程服務,而當系統需要存取swap上儲存的內容時,再將swap上的資料載入記憶體中,這就是我們常說的swap out和swap in。

    為什麼需要swap?

    要回答這個問題,就需要回答swap為我們帶來了哪些好處。

    對於一些大型的應用程式(如LibreOffice、video editor等),在啟動的過程中會使用大量的內存,但這些內存很多時候只是在啟動的時候用一下,後面的運行過程中很少再用到這些記憶體。有了swap後,系統就可以將這部分不這麼使用的記憶體資料保存到swap上去,從而釋放出更多的物理記憶體供系統使。

    許多發行版(如ubuntu)的休眠功能依賴swap分區,當系統休眠的時候,會將內存中的數據保存到swap分區上,等下次系統啟動的時候,再將數據載入到記憶體中,這樣可以加快系統的啟動速度,所以如果要使用休眠的功能,必須要配置swap分割區,而且大小一定要大於等於實體記憶體。

    在某些情況下,實體記憶體有限,但又想運行耗記憶體的程式怎麼辦?這時可以透過配置足夠的swap空間來達到目標,雖然慢一點,但至少可以運行。

    雖然大部分情況下,物理記憶體都是夠用的,但是總有一些意想不到的狀況,比如某個進程需要的內存超過了預期,或者有進程存在內存洩漏等,當內存不夠的時候,就會觸發核心的OOM killer,根據OOM killer的配置,某些進程會被kill掉或系統直接重啟(預設情況是優先kill耗記憶體最多的那個進程),不過有了swap後,可以拿swap當記憶體用,雖然速度慢了點,但至少給了我們一個去debug、kill進程或是保存目前工作進度的機會。

    如果看過Linux記憶體管理,就會知道系統會盡可能多的將空閒記憶體用於cache,以加快系統的I/O速度,所以如果能將不怎麼常用的記憶體資料移動到在swap上,就會有更多的實體記憶體用於cache,從而提高系統整體效能。

    swap的缺點?

    上面介紹了swap的優點,那swap的缺點呢? swap是存放在磁碟上的,磁碟的速度和記憶體比較起來慢了好幾個數量級,如果不停的讀寫swap,那麼對系統的效能肯定有影響,尤其是當系統記憶體很吃緊的時候,讀寫swap空間發生的頻率會很高,導致系統運作很慢,像死了一樣,這個時候加入實體記憶體是唯一的解決方案。

    由於系統會自動將不常用的記憶體資料移到swap上,對桌面程式來說,有可能會導致最小化一個程式後,再開啟時小卡一下,因為需要將swap上的資料重新載入到記憶體中來。

    到底要不要swap?

    上面介紹了什麼是swap以及它們的優缺點,那麼到底要不要設定swap呢?答案是:看情況。

    以下分別討論記憶體不夠用、記憶體勉強夠用和記憶體很充裕這三種情況下伺服器和桌面環境對swap的選擇。

    記憶體不夠用

    不管是桌面還是伺服器,當實體記憶體明顯不夠用,而又想跑程式的話,加入swap是唯一的選擇,慢點總比不能工作強。

    記憶體勉強夠用

    建議配置swap,這樣核心會將不常用的資料從記憶體移到swap上,從而有更多的物理記憶體供系統調用,提升系統效能,同時也避免因偶爾的實體記憶體不夠造成進程異常退出,提升系統穩定性,但對伺服器來說,一定要限製或監控swap空間的使用情況,當出現swap空間使用超預期或swap in/out頻繁時,要及時採取措施,不然對性能影響很大

    內存充裕

    理論上,如果物理內存足夠多並且不需要休眠功能,那swap就沒什麼用,可關鍵問題是我們很難保證物理內存在任何情況下都夠用,因為總有意想不到的情況發生,例如某些進程耗內存超預期,伺服器壓力超預期,內存洩漏等。

    目前,我們是明顯記憶體不夠用了,是什麼導致記憶體不夠用了呢?為什麼mysql會直接導致伺服器記憶體不夠了

    那我們的mysql的伺服器為什麼會發生swap呢?

    假設我們的物理記憶體是16G,swap是4G。如果MySQL本身已經佔用了12G物理內存, 而同時其他程式或者係統模組又需要6G內存,這時候操作系統就可能把MySQL所擁有的一部分地址空間映射到swap上去。

    說白了,就是系統認為你mysql佔用的空間太大了,不允許你搞特殊,必須騰出空間讓那個我的其它必要的進程區使用內存,所以你就去比較慢的swap去玩吧!

    而mysql中佔記憶體最大的就是innodb_buffer_pool_size了,所以第一時間要考慮到這個值是不是設定不合理的?

    MySQL的記憶體消耗分為:

    • #1.會話層級的記憶體消耗:如sort_buffer_size等,每個會話都會開啟一個sort_buffer_size來進行排序操作

    • 2.全域的記憶體消耗:例如:innodb_buffer_pool_size等,全域共享的記憶體段

    ##這也是我覺得我們DBA不專業的地方,並沒有考慮第一種情況,去查看回話等級的記憶體消耗情況,而是直接跟我說要調小innodb_buffer_pool_size

    InnoDB的緩衝池快取什麼?有什麼用?設定多大合適呢?

    快取表資料與索引數據,把磁碟上的資料載入到緩衝池,避免每次存取都進行磁碟IO,起到加速存取的作用。

    MySQL的同時效能與Buffer Pool所分配的記憶體大小成正比,分配的記憶體越大,其並發效能越好。是否應該將所有99%的機器記憶體都分配給Buffer Pool呢?

    當然不是!先不說作業系統核心也需要幾個G內存,MySQL 除了 Buffer Pool 還有很多別的內存資料結構呢,這些都是需要內存的,所以說,上面的想法是絕對不行的!

    比較合理的比例,應該是 Buffer Pool 的記憶體大小佔機器總記憶體的 50% ~ 60%。

    可以透過show engine innodb status\G; 看命中情況. 當命中沒達到97%以上,都可以考慮加內存,當然這個和業務也有關例如對一個master的寫入量大,讀少就是特例.

    其它情況如果沒達到97%以上,對於讀取多的情況,如果沒達到98%以上,都說明buffer不夠.可以擴. 再從另一方面來講如果給分了20%的內存命中都能達到100%了,而且還有大量的free page那說明,那就夠用了,另外也可以跟據free page去算一下可以再減少點內存. 把那些內存用到別用呢

    以上是Linux Swap空間使用率過高怎麼解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述
    本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
    Linux中的維護模式:何時以及為什麼使用它Linux中的維護模式:何時以及為什麼使用它Apr 25, 2025 am 12:15 AM

    使用Linux維護模式的時機和原因:1)系統啟動問題時,2)進行重大系統更新或升級時,3)執行文件系統維護時。維護模式提供安全、控制的環境,確保操作的安全性和效率,減少對用戶的影響,並增強系統的安全性。

    Linux:基本命令和操作Linux:基本命令和操作Apr 24, 2025 am 12:20 AM

    Linux中不可或缺的命令包括:1.ls:列出目錄內容;2.cd:改變工作目錄;3.mkdir:創建新目錄;4.rm:刪除文件或目錄;5.cp:複製文件或目錄;6.mv:移動或重命名文件或目錄。這些命令通過與內核交互執行操作,幫助用戶高效管理文件和系統。

    Linux操作:管理文件,目錄和權限Linux操作:管理文件,目錄和權限Apr 23, 2025 am 12:19 AM

    在Linux中,文件和目錄管理使用ls、cd、mkdir、rm、cp、mv命令,權限管理使用chmod、chown、chgrp命令。 1.文件和目錄管理命令如ls-l列出詳細信息,mkdir-p遞歸創建目錄。 2.權限管理命令如chmod755file設置文件權限,chownuserfile改變文件所有者,chgrpgroupfile改變文件所屬組。這些命令基於文件系統結構和用戶、組系統,通過系統調用和元數據實現操作和控制。

    Linux中的維護模式是什麼?解釋了Linux中的維護模式是什麼?解釋了Apr 22, 2025 am 12:06 AM

    MaintenancemodeInuxisAspecialBootenvironmentforforcalsystemmaintenancetasks.itallowsadMinistratorStoperFormTaskSlikerSettingPassingPassingPasswords,RepairingFilesystems,andRecoveringFrombootFailuresFailuresFailuresInamInimAlenimalenimalenrenmentrent.ToEnterMainterMainterMaintErmaintErmaintEncemememodeBoode,Interlecttheboo

    Linux:深入研究其基本部分Linux:深入研究其基本部分Apr 21, 2025 am 12:03 AM

    Linux的核心組件包括內核、文件系統、Shell、用戶空間與內核空間、設備驅動程序以及性能優化和最佳實踐。 1)內核是系統的核心,管理硬件、內存和進程。 2)文件系統組織數據,支持多種類型如ext4、Btrfs和XFS。 3)Shell是用戶與系統交互的命令中心,支持腳本編寫。 4)用戶空間與內核空間分離,確保系統穩定性。 5)設備驅動程序連接硬件與操作系統。 6)性能優化包括調整系統配置和遵循最佳實踐。

    Linux體系結構:揭示5個基本組件Linux體系結構:揭示5個基本組件Apr 20, 2025 am 12:04 AM

    Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

    Linux操作:利用維護模式Linux操作:利用維護模式Apr 19, 2025 am 12:08 AM

    Linux的維護模式可以通過GRUB菜單進入,具體步驟為:1)在GRUB菜單中選擇內核並按'e'編輯,2)在'linux'行末添加'single'或'1',3)按Ctrl X啟動。維護模式提供了一個安全環境,適用於系統修復、重置密碼和系統升級等任務。

    Linux:如何進入恢復模式(和維護)Linux:如何進入恢復模式(和維護)Apr 18, 2025 am 12:05 AM

    進入Linux恢復模式的步驟是:1.重啟系統並按特定鍵進入GRUB菜單;2.選擇帶有(recoverymode)的選項;3.在恢復模式菜單中選擇操作,如fsck或root。恢復模式允許你以單用戶模式啟動系統,進行文件系統檢查和修復、編輯配置文件等操作,幫助解決系統問題。

    See all articles

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

    使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

    熱工具

    Dreamweaver Mac版

    Dreamweaver Mac版

    視覺化網頁開發工具

    VSCode Windows 64位元 下載

    VSCode Windows 64位元 下載

    微軟推出的免費、功能強大的一款IDE編輯器

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級程式碼編輯軟體(SublimeText3)

    Safe Exam Browser

    Safe Exam Browser

    Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具