Linux 上的內存管理很複雜。儘管使用率高但未必存在問題。你也應當關注一些其餘的事情。html
在 Linux 上用光內存一般並不意味着存在嚴重的問題。爲何?由於健康的 Linux 系統會在內存中緩存磁盤活動,基本上佔用掉了未被使用的內存,這顯然是一件好事情。linux
換句話說,它不讓內存浪費掉。使用空閒的內存增長磁盤訪問速度,而且不佔用運行中應用程序的內存。你也可以想到,使用這種內存緩存比起直接訪問硬盤驅動器(HDD)快上數百倍,也比明顯快於直接訪問固態硬盤驅動。內存佔滿或幾乎佔滿一般意味着系統正在儘量高效地運行當中 —— 並非運行中遇到了問題。git
磁盤緩存簡單地意味着系統充分利用未使用的資源(空閒內存)來加速磁盤讀取與寫入。應用程序不會失去任何東西,而且大多數時間裏可以按需求得到更多的內存。此外,磁盤緩存不會致使應用程序轉而使用交換分區。反而,用做磁盤緩存的內存空間當被須要時會當即歸還,而且磁盤內容會被更新。github
Linux 系統經過分割物理內存來爲進程分配空間,將分割成的塊稱爲「頁」,而且映射這些頁到每一個進程的虛擬內存上。再也不會用到的頁也許會從內存中移除,儘管相關的進程還在運行。當進程須要一個沒有被映射或沒在內存中頁時,故障便會產生。因此,這個「故障」並不意味着「錯誤」而是「不可用」,而且故障在內存管理中扮演者一個重要的角色。緩存
次要故障意味着在內存中的頁未分配給請求的進程,或未在內存管理單元中標記爲出現。主要故障意味着頁沒有保留在內存中。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
選項指定了數字的單位是 MiB 而不是字節。性能
$ free -m
total used free shared buff/cache available
Mem: 3244 3069 35 49 140 667
Swap: 3535 0 3535
複製代碼
注意 free
(未使用)的內存可能會不足,而 available
(可用於啓動新的應用)會顯示更大的數量。這二者的區別值得咱們去關注。可用意味着它能夠在須要時恢復使用,而空閒意味着如今就可以使用。
若是 Linux 系統上的性能表現良好 —— 應用程序響應度高,命令行沒有顯示出問題 —— 極可能系統情況良好。記住,一些應用也許會出於某種緣由而變慢,但它不影響整個系統。
過多的硬故障也許代表確實存在問題,但要將其與觀察到的性能相比較。
一個好的方法是當可用內存接近 0 或者「用做交換」項顯著增加或波動時開始擔憂。若是「可用」項佔總內存可用量的百分比合理,那麼就無需擔憂,就像下面的例子那樣:
$ free -m
total used free shared buff/cache available
Mem: 3244 3069 35 49 140 667
Swap: 3535 0 3535
複製代碼
拋開這些不說,Linux 系統上的內存可能會變滿,而且性能可能會下降。當系統出現問題時不要僅將單一的內存使用報告做爲指標。
Linux 系統的內存管理很複雜,由於它採起的措施須要確保系統資源獲得最好的利用。不要受到一開始內存佔滿的欺騙,使你認爲系統存在問題,但實際上並無。
via: www.networkworld.com/article/339…
做者:Sandra Henry-Stocker 選題:lujun9972 譯者:LuuMing 校對:wxy