什麼時候須要關注 Linux 的內存用量?

Linux 上的內存管理很複雜。儘管使用率高但未必存在問題。你也應當關注一些其餘的事情。html

在 Linux 上用光內存一般並不意味着存在嚴重的問題。爲何?由於健康的 Linux 系統會在內存中緩存磁盤活動,基本上佔用掉了未被使用的內存,這顯然是一件好事情。linux

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

緩存如何工做

磁盤緩存簡單地意味着系統充分利用未使用的資源(空閒內存)來加速磁盤讀取與寫入。應用程序不會失去任何東西,而且大多數時間裏可以按需求得到更多的內存。此外,磁盤緩存不會致使應用程序轉而使用交換分區。反而,用做磁盤緩存的內存空間當被須要時會當即歸還,而且磁盤內容會被更新。github

主要和次要的頁故障

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

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

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

$ 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):session

$ ps -o min_flt,maj_flt 1
 MINFL  MAJFL
230064    150
複製代碼

你也能夠添加其餘的顯示字段,例如進程全部者的 UID 和 GID。socket

$ 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 選項指定了數字的單位是 MiBmebibyte 而不是字節。性能

$ 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: www.networkworld.com/article/339…

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

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

相關文章
相關標籤/搜索