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