Linux中國

何時需要關注 Linux 的內存用量?

在 Linux 上用光內存通常並不意味著存在嚴重的問題。為什麼?因為健康的 Linux 系統會在內存中緩存磁碟活動,基本上佔用掉了未被使用的內存,這顯然是一件好事情。

換句話說,它不讓內存浪費掉。使用空閑的內存增加磁碟訪問速度,並且不佔用運行中應用程序的內存。你也能夠想到,使用這種內存緩存比起直接訪問硬碟驅動器(HDD)快上數百倍,也比明顯快於直接訪問固態硬碟驅動。內存佔滿或幾乎佔滿通常意味著系統正在儘可能高效地運行當中 —— 並不是運行中遇到了問題。

緩存如何工作

磁碟緩存簡單地意味著系統充分利用未使用的資源(空閑內存)來加速磁碟讀取與寫入。應用程序不會失去任何東西,並且大多數時間裡能夠按需求獲得更多的內存。此外,磁碟緩存不會導致應用程序轉而使用交換分區。反而,用作磁碟緩存的內存空間當被需要時會立即歸還,並且磁碟內容會被更新。

主要和次要的頁故障

Linux 系統通過分割物理內存來為進程分配空間,將分割成的塊稱為「頁」,並且映射這些頁到每個進程的虛擬內存上。不再會用到的頁也許會從內存中移除,儘管相關的進程還在運行。當進程需要一個沒有被映射或沒在內存中頁時,故障便會產生。所以,這個「 故障 fault 」並不意味著「 錯誤 error 」而是「 不可用 unavailables 」,並且故障在內存管理中扮演者一個重要的角色。

次要故障意味著在內存中的頁未分配給請求的進程,或未在內存管理單元中標記為出現。主要故障意味著頁沒有保留在內存中。

如果你想切身感受一下次要頁故障和主要頁故障出現的頻率,像這樣試一下 ps 命令。注意我們要的是與頁故障和產生它的命令相關的項。輸出中省略了很多行。MINFL 顯示出次要故障的數目,而 MAJFL 表示了主要故障的數目。

$ ps -eo min_flt,maj_flt,cmd
 MINFL  MAJFL CMD
230760    150 /usr/lib/systemd/systemd --switched-root --system --deserialize 18
     0      0 [kthreadd]
     0      0 [rcu_gp]
     0      0 [rcu_par_gp]
     0      0 [kworker/0:0H-kblockd]
   ...
   166     20 gpg-agent --homedir /var/lib/fwupd/gnupg --use-standard-socket --daemon
   525      1 /usr/libexec/gvfsd-trash --spawner :1.16 /org/gtk/gvfs/exec_spaw/0
  4966      4 /usr/libexec/gnome-terminal-server
  3617      0 bash
     0      0 [kworker/1:0H-kblockd]
   927      0 gdm-session-worker [pam/gdm-password]

彙報單一進程,你可以嘗試這樣的命令(LCTT 譯註:參數裡面的 1 是要查看的進程的 PID):

$ ps -o min_flt,maj_flt 1
 MINFL  MAJFL
230064    150

你也可以添加其他的顯示欄位,例如進程所有者的 UID 和 GID。

$ ps -o min_flt,maj_flt,cmd,args,uid,gid 1
 MINFL  MAJFL CMD                         COMMAND                       UID   GID
230064    150 /usr/lib/systemd/systemd -- /usr/lib/systemd/systemd --     0     0

多少才算滿?

一種較好的方法來掌握內存究竟使用了多少是用 free -m 命令。-m 選項指定了數字的單位是 MiB mebibyte 而不是位元組。

$ free -m
              total        used        free      shared  buff/cache   available
Mem:           3244        3069          35          49         140         667
Swap:          3535           0        3535

注意 free(未使用)的內存可能會不足,而 available(可用於啟動新的應用)會顯示更大的數量。這兩者的區別值得我們去關注。 可用 available 意味著它可以在需要時恢復使用,而 空閑 free 意味著現在就能夠使用。

什麼時候要擔心

如果 Linux 系統上的性能表現良好 —— 應用程序響應度高,命令行沒有顯示出問題 —— 很可能系統狀況良好。記住,一些應用也許會出於某種原因而變慢,但它不影響整個系統。

過多的硬故障也許表明確實存在問題,但要將其與觀察到的性能相比較。

一個好的方法是當可用內存接近 0 或者「 用作交換 swap used 」項顯著增長或波動時開始擔心。如果「可用」項佔總內存可用量的百分比合理,那麼就無需擔心,就像下面的例子那樣:

$ free -m
              total        used        free      shared  buff/cache   available
Mem:           3244        3069          35          49         140         667
Swap:          3535           0        3535

Linux 性能很複雜

拋開這些不說,Linux 系統上的內存可能會變滿,並且性能可能會降低。當系統出現問題時不要僅將單一的內存使用報告作為指標。

Linux 系統的內存管理很複雜,因為它採取的措施需要確保系統資源得到最好的利用。不要受到一開始內存佔滿的欺騙,使你認為系統存在問題,但實際上並沒有。

via: https://www.networkworld.com/article/3394603/when-to-be-concerned-about-memory-levels-on-linux.html

作者:Sandra Henry-Stocker 選題:lujun9972 譯者:LuuMing 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國