搜尋
首頁運維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 18, 2022 pm 08:10 PM

    linux设备节点是应用程序和设备驱动程序沟通的一个桥梁;设备节点被创建在“/dev”,是连接内核与用户层的枢纽,相当于硬盘的inode一样的东西,记录了硬件设备的位置和信息。设备节点使用户可以与内核进行硬件的沟通,读写设备以及其他的操作。

    Linux中open和fopen的区别有哪些Linux中open和fopen的区别有哪些Apr 29, 2022 pm 06:57 PM

    区别:1、open是UNIX系统调用函数,而fopen是ANSIC标准中的C语言库函数;2、open的移植性没fopen好;3、fopen只能操纵普通正规文件,而open可以操作普通文件、网络套接字等;4、open无缓冲,fopen有缓冲。

    linux中什么叫端口映射linux中什么叫端口映射May 09, 2022 pm 01:49 PM

    端口映射又称端口转发,是指将外部主机的IP地址的端口映射到Intranet中的一台计算机,当用户访问外网IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上;可以通过使用动态或固定的公共网络IP路由ADSL宽带路由器来实现。

    什么是linux交叉编译什么是linux交叉编译Apr 29, 2022 pm 06:47 PM

    在linux中,交叉编译是指在一个平台上生成另一个平台上的可执行代码,即编译源代码的平台和执行源代码编译后程序的平台是两个不同的平台。使用交叉编译的原因:1、目标系统没有能力在其上进行本地编译;2、有能力进行源代码编译的平台与目标平台不同。

    linux中eof是什么linux中eof是什么May 07, 2022 pm 04:26 PM

    在linux中,eof是自定义终止符,是“END Of File”的缩写;因为是自定义的终止符,所以eof就不是固定的,可以随意的设置别名,linux中按“ctrl+d”就代表eof,eof一般会配合cat命令用于多行文本输出,指文件末尾。

    linux怎么判断pcre是否安装linux怎么判断pcre是否安装May 09, 2022 pm 04:14 PM

    在linux中,可以利用“rpm -qa pcre”命令判断pcre是否安装;rpm命令专门用于管理各项套件,使用该命令后,若结果中出现pcre的版本信息,则表示pcre已经安装,若没有出现版本信息,则表示没有安装pcre。

    linux怎么查询mac地址linux怎么查询mac地址Apr 24, 2022 pm 08:01 PM

    linux查询mac地址的方法:1、打开系统,在桌面中点击鼠标右键,选择“打开终端”;2、在终端中,执行“ifconfig”命令,查看输出结果,在输出信息第四行中紧跟“ether”单词后的字符串就是mac地址。

    linux中rpc是什么意思linux中rpc是什么意思May 07, 2022 pm 04:48 PM

    在linux中,rpc是远程过程调用的意思,是Reomote Procedure Call的缩写,特指一种隐藏了过程调用时实际通信细节的IPC方法;linux中通过RPC可以充分利用非共享内存的多处理器环境,提高系统资源的利用率。

    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脫衣器

    AI Hentai Generator

    AI Hentai Generator

    免費產生 AI 無盡。

    熱門文章

    R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
    2 週前By尊渡假赌尊渡假赌尊渡假赌
    倉庫:如何復興隊友
    4 週前By尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island冒險:如何獲得巨型種子
    3 週前By尊渡假赌尊渡假赌尊渡假赌

    熱工具

    禪工作室 13.0.1

    禪工作室 13.0.1

    強大的PHP整合開發環境

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    SublimeText3 Linux新版

    SublimeText3 Linux新版

    SublimeText3 Linux最新版

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具