亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Linux Swap空間利用率過高問題

 更新時間:2023年04月06日 10:01:35   作者:人工智  
這篇文章主要介紹了Linux Swap空間利用率過高問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

在單獨部署的mysql數(shù)據(jù)庫服務器中發(fā)現(xiàn),在高并發(fā)的情況下發(fā)現(xiàn)內(nèi)存不夠用,進一步發(fā)現(xiàn)swap的利用率很高。

公司的DBA提了兩點建議:

  • 1、建議先減小數(shù)據(jù)庫緩沖池(buffer pool)的大??;
  • 2、進行數(shù)據(jù)庫內(nèi)存擴容

1、首先,不是內(nèi)存不夠用嗎?swap利用率為什么高呢?swap是什么呢?

什么是swap?

swap space是磁盤上的一塊區(qū)域,可以是一個分區(qū),也可以是一個文件,或者是他們的組合。

簡單點說,當系統(tǒng)物理內(nèi)存吃緊時,Linux會將內(nèi)存中不常訪問的數(shù)據(jù)保存到swap上,這樣系統(tǒng)就有更多的物理內(nèi)存為各個進程服務,而當系統(tǒng)需要訪問swap上存儲的內(nèi)容時,再將swap上的數(shù)據(jù)加載到內(nèi)存中,這就是我們常說的swap out和swap in。

為什么需要swap?

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

對于一些大型的應用程序(如LibreOffice、video editor等),在啟動的過程中會使用大量的內(nèi)存,但這些內(nèi)存很多時候只是在啟動的時候用一下,后面的運行過程中很少再用到這些內(nèi)存。有了swap后,系統(tǒng)就可以將這部分不這么使用的內(nèi)存數(shù)據(jù)保存到swap上去,從而釋放出更多的物理內(nèi)存供系統(tǒng)使。

很多發(fā)行版(如ubuntu)的休眠功能依賴于swap分區(qū),當系統(tǒng)休眠的時候,會將內(nèi)存中的數(shù)據(jù)保存到swap分區(qū)上,等下次系統(tǒng)啟動的時候,再將數(shù)據(jù)加載到內(nèi)存中,這樣可以加快系統(tǒng)的啟動速度,所以如果要使用休眠的功能,必須要配置swap分區(qū),并且大小一定要大于等于物理內(nèi)存。

在某些情況下,物理內(nèi)存有限,但又想運行耗內(nèi)存的程序怎么辦?這時可以通過配置足夠的swap空間來達到目標,雖然慢一點,但至少可以運行。

雖然大部分情況下,物理內(nèi)存都是夠用的,但是總有一些意想不到的狀況,比如某個進程需要的內(nèi)存超過了預期,或者有進程存在內(nèi)存泄漏等,當內(nèi)存不夠的時候,就會觸發(fā)內(nèi)核的OOM killer,根據(jù)OOM killer的配置,某些進程會被kill掉或者系統(tǒng)直接重啟(默認情況是優(yōu)先kill耗內(nèi)存最多的那個進程),不過有了swap后,可以拿swap當內(nèi)存用,雖然速度慢了點,但至少給了我們一個去debug、kill進程或者保存當前工作進度的機會。

如果看過Linux內(nèi)存管理,就會知道系統(tǒng)會盡可能多的將空閑內(nèi)存用于cache,以加快系統(tǒng)的I/O速度,所以如果能將不怎么常用的內(nèi)存數(shù)據(jù)移動到swap上,就會有更多的物理內(nèi)存用于cache,從而提高系統(tǒng)整體性能。

swap的缺點?

上面介紹了swap的優(yōu)點,那swap的缺點呢?swap是存放在磁盤上的,磁盤的速度和內(nèi)存比較起來慢了好幾個數(shù)量級,如果不停的讀寫swap,那么對系統(tǒng)的性能肯定有影響,尤其是當系統(tǒng)內(nèi)存很吃緊的時候,讀寫swap空間發(fā)生的頻率會很高,導致系統(tǒng)運行很慢,像死了一樣,這個時候添加物理內(nèi)存是唯一的解決辦法。

由于系統(tǒng)會自動將不常用的內(nèi)存數(shù)據(jù)移到swap上,對桌面程序來說,有可能會導致最小化一個程序后,再打開時小卡一下,因為需要將swap上的數(shù)據(jù)重新加載到內(nèi)存中來。

到底要不要swap?

上面介紹了什么是swap以及它們的優(yōu)缺點,那么到底要不要配置swap呢?答案是:看情況。

下面分別討論內(nèi)存不夠用、內(nèi)存勉強夠用和內(nèi)存很充裕這三種情況下服務器和桌面環(huán)境對swap的選擇。

內(nèi)存不夠用

不管是桌面還是服務器,當物理內(nèi)存明顯不夠用,而又想跑程序的話,添加swap是唯一的選擇,慢點總比不能工作強。

內(nèi)存勉強夠用

建議配置swap,這樣內(nèi)核會將不常用的數(shù)據(jù)從內(nèi)存移到swap上,從而有更多的物理內(nèi)存供系統(tǒng)調(diào)用,提升系統(tǒng)性能,同時也避免因偶爾的物理內(nèi)存不夠造成進程異常退出,提升系統(tǒng)穩(wěn)定性,但對服務器來說,一定要限制或者監(jiān)控swap空間的使用情況,當出現(xiàn)swap空間使用超預期或者swap in/out頻繁時,要及時采取措施,不然對性能影響很大

內(nèi)存充裕

理論上來說,如果物理內(nèi)存足夠多并且不需要休眠功能,那swap就沒什么用,可關鍵問題是我們很難保證物理內(nèi)存在任何情況下都夠用,因為總有意想不到的情況發(fā)生,比如某些進程耗內(nèi)存超預期,服務器壓力超預期,內(nèi)存泄漏等。

目前,我們是明顯內(nèi)存不夠用了,是什么導致內(nèi)存不夠用了呢?為什么mysql會直接導致服務器內(nèi)存不夠了

那我們的mysql的服務器為什么會發(fā)生swap呢?

假設我們的物理內(nèi)存是16G,swap是4G。如果MySQL本身已經(jīng)占用了12G物理內(nèi)存, 而同時其他程序或者系統(tǒng)模塊又需要6G內(nèi)存,這時候操作系統(tǒng)就可能把MySQL所擁有的一部分地址空間映射到swap上去。

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

而mysql中占內(nèi)存最大的就是innodb_buffer_pool_size了,所以第一時間應考慮到這個值是不是設置的不合理?

MySQL的內(nèi)存消耗分為:

  • 1.會話級別的內(nèi)存消耗:如sort_buffer_size等,每個會話都會開辟一個sort_buffer_size來進行排序操作
  • 2.全局的內(nèi)存消耗:例如:innodb_buffer_pool_size等,全局共享的內(nèi)存段

這也是我覺得我們DBA不專業(yè)的地方,并沒有考慮第一種情況,去查看回話級別的內(nèi)存消耗情況,而是直接跟我說要調(diào)小innodb_buffer_pool_size

InnoDB的緩沖池緩存什么?有什么用?設置多大合適呢?

緩存表數(shù)據(jù)與索引數(shù)據(jù),把磁盤上的數(shù)據(jù)加載到緩沖池,避免每次訪問都進行磁盤IO,起到加速訪問的作用。

給 Buffer Pool 分配越大的內(nèi)存,MySQL 的并發(fā)性能就越好。那是不是都應該將百分之九十九的機器的內(nèi)存都分配給 Buffe Pool 呢?

當然不是!先不說操作系統(tǒng)內(nèi)核也需要幾個G內(nèi)存,MySQL 除了 Buffer Pool 還有很多別的內(nèi)存數(shù)據(jù)結構呢,這些都是需要內(nèi)存的,所以說,上面的想法是絕對不行的!

比較合理的比例,應該是 Buffer Pool 的內(nèi)存大小占機器總內(nèi)存的 50% ~ 60%。

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

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

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Linux在應用層讀寫寄存器的方法及實現(xiàn)實例

    Linux在應用層讀寫寄存器的方法及實現(xiàn)實例

    這篇文章主要介紹了Linux在應用層讀寫寄存器的方法及實現(xiàn)實例的相關資料,需要的朋友可以參考下
    2017-02-02
  • 在Fedora 10下配置SVN服務器的步驟

    在Fedora 10下配置SVN服務器的步驟

    subversion(簡稱svn)是近年來崛起的版本管理工具,是cvs的接班人。目前,絕大多數(shù)開源軟件都使用svn作為代碼版本管理軟件。
    2010-12-12
  • 詳解Linux誤刪用戶家目錄的恢復方法

    詳解Linux誤刪用戶家目錄的恢復方法

    本篇文章主要介紹了詳解Linux誤刪用戶家目錄的恢復方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Linux虛擬機修改ip地址,查看網(wǎng)關,網(wǎng)絡環(huán)境配置的教程

    Linux虛擬機修改ip地址,查看網(wǎng)關,網(wǎng)絡環(huán)境配置的教程

    這篇文章主要介紹了Linux虛擬機修改ip地址,查看網(wǎng)關,網(wǎng)絡環(huán)境配置的教程,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • 在 CentOS 8/RHEL 8 上安裝和使用 Cockpit的方法

    在 CentOS 8/RHEL 8 上安裝和使用 Cockpit的方法

    Cockpit 是一個基于 Web 的服務器管理工具,可用于 CentOS 和 RHEL 系統(tǒng)。最近發(fā)布的 CentOS 8 和 RHEL 8,其中 cockpit 是默認的服務器管理工具。這篇文章主要介紹了在 CentOS 8/RHEL 8 上安裝和使用 Cockpit的方法,需要的朋友可以參考下
    2019-10-10
  • apache 80端口被iis或其他服務占用怎么辦

    apache 80端口被iis或其他服務占用怎么辦

    80端口被占用導致apache無法正常運行,如果80端口不是iis占用,我們可以參考下面方法來查找80端口被哪個服務占用,具體操作如下
    2013-05-05
  • CentOS系統(tǒng)下Apache配置多域名或多端口映射的方法

    CentOS系統(tǒng)下Apache配置多域名或多端口映射的方法

    我們大多情況是一臺服務器一個IP,這樣配置起來很簡單,但是如何想多域名多端口映射的話就沒那么簡單了,下面這篇文章主要介紹了CentOS系統(tǒng)下Apache配置多域名或多端口映射的方法,需要的朋友可以參考學習,下面來一起看看吧。
    2016-12-12
  • Linux CentOS7 vim臨時文件使用

    Linux CentOS7 vim臨時文件使用

    這篇文章主要介紹了Linux CentOS7 vim臨時文件使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Linux通用java程序啟動腳本代碼實例

    Linux通用java程序啟動腳本代碼實例

    這篇文章主要介紹了Linux通用java程序啟動腳本代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • Gunicorn Django部署配置方法

    Gunicorn Django部署配置方法

    這篇文章主要介紹了Gunicorn-Django部署配置方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08

最新評論