何时需要关注 Linux 的内存用量? | Linux 中国

2019 年 7 月 7 日 Linux中国
Linux 上的内存管理很复杂。尽管使用率高但未必存在问题。你也应当关注一些其他的事情。
-- Sandra Henry-stocker

在 Linux 上用光内存通常并不意味着存在严重的问题。为什么?因为健康的 Linux 系统会在内存中缓存磁盘活动,基本上占用掉了未被使用的内存,这显然是一件好事情。

换句话说,它不让内存浪费掉。使用空闲的内存增加磁盘访问速度,并且不占用运行中应用程序的内存。你也能够想到,使用这种内存缓存比起直接访问硬盘驱动器(HDD)快上数百倍,也比明显快于直接访问固态硬盘驱动。内存占满或几乎占满通常意味着系统正在尽可能高效地运行当中 —— 并不是运行中遇到了问题。

缓存如何工作

磁盘缓存简单地意味着系统充分利用未使用的资源(空闲内存)来加速磁盘读取与写入。应用程序不会失去任何东西,并且大多数时间里能够按需求获得更多的内存。此外,磁盘缓存不会导致应用程序转而使用交换分区。反而,用作磁盘缓存的内存空间当被需要时会立即归还,并且磁盘内容会被更新。

主要和次要的页故障

Linux 系统通过分割物理内存来为进程分配空间,将分割成的块称为“页”,并且映射这些页到每个进程的虚拟内存上。不再会用到的页也许会从内存中移除,尽管相关的进程还在运行。当进程需要一个没有被映射或没在内存中页时,故障便会产生。所以,这个“故障fault”并不意味着“错误error”而是“不可用unavailables”,并且故障在内存管理中扮演者一个重要的角色。

次要故障意味着在内存中的页未分配给请求的进程,或未在内存管理单元中标记为出现。主要故障意味着页没有保留在内存中。

如果你想切身感受一下次要页故障和主要页故障出现的频率,像这样试一下 ps 命令。注意我们要的是与页故障和产生它的命令相关的项。输出中省略了很多行。MINFL 显示出次要故障的数目,而 MAJFL 表示了主要故障的数目。

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

汇报单一进程,你可以尝试这样的命令(LCTT 译注:参数里面的 1 是要查看的进程的 PID):

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

你也可以添加其他的显示字段,例如进程所有者的 UID 和 GID。

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

多少才算满?

一种较好的方法来掌握内存究竟使用了多少是用 free -m 命令。-m 选项指定了数字的单位是 MiBmebibyte 而不是字节。

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

注意 free(未使用)的内存可能会不足,而 available(可用于启动新的应用)会显示更大的数量。这两者的区别值得我们去关注。可用available意味着它可以在需要时恢复使用,而空闲free意味着现在就能够使用。

什么时候要担心

如果 Linux 系统上的性能表现良好 —— 应用程序响应度高,命令行没有显示出问题 —— 很可能系统状况良好。记住,一些应用也许会出于某种原因而变慢,但它不影响整个系统。

过多的硬故障也许表明确实存在问题,但要将其与观察到的性能相比较。

一个好的方法是当可用内存接近 0 或者“用作交换swap used”项显著增长或波动时开始担心。如果“可用”项占总内存可用量的百分比合理,那么就无需担心,就像下面的例子那样:

   
   
     
  1. $ free -m
  2. total used free shared buff/cache available
  3. Mem: 3244 3069 35 49 140 667
  4. 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中国 荣誉推出

😻:还 在看吗?


登录查看更多
0

相关内容

Linux 是一系列类 Unix 计算机操作系统的统称。该操作系统的核心为 Linux 内核。Linux 操作系统也是软件和开放源代码发展中最著名的例子之一。
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
【高能所】如何做好⼀份学术报告& 简单介绍LaTeX 的使用
Python分布式计算,171页pdf,Distributed Computing with Python
专知会员服务
107+阅读 · 2020年5月3日
【2020新书】Kafka实战:Kafka in Action,209页pdf
专知会员服务
67+阅读 · 2020年3月9日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
87+阅读 · 2019年11月25日
在K8S上运行Kafka合适吗?会遇到哪些陷阱?
DBAplus社群
9+阅读 · 2019年9月4日
msf实现linux shell反弹
黑白之道
49+阅读 · 2019年8月16日
VS Code Remote发布!真·远程开发
开源中国
6+阅读 · 2019年5月3日
ZigBee 网络安全攻防
计算机与网络安全
13+阅读 · 2019年4月15日
Linux挖矿病毒的清除与分析
FreeBuf
14+阅读 · 2019年4月15日
Flink 靠什么征服饿了么工程师?
阿里技术
6+阅读 · 2018年8月13日
实战 | 用Python做图像处理(三)
七月在线实验室
15+阅读 · 2018年5月29日
AI 和机器学习中暗含的算法偏见 | Linux 中国
Linux中国
3+阅读 · 2018年4月14日
如何运用Python建一个聊天机器人?
七月在线实验室
17+阅读 · 2018年1月23日
教你用Python来玩跳一跳
七月在线实验室
6+阅读 · 2018年1月2日
Meta-Transfer Learning for Zero-Shot Super-Resolution
Arxiv
43+阅读 · 2020年2月27日
Arxiv
4+阅读 · 2018年10月31日
Arxiv
8+阅读 · 2018年5月1日
Arxiv
3+阅读 · 2017年12月14日
VIP会员
相关VIP内容
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
【高能所】如何做好⼀份学术报告& 简单介绍LaTeX 的使用
Python分布式计算,171页pdf,Distributed Computing with Python
专知会员服务
107+阅读 · 2020年5月3日
【2020新书】Kafka实战:Kafka in Action,209页pdf
专知会员服务
67+阅读 · 2020年3月9日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
87+阅读 · 2019年11月25日
相关资讯
在K8S上运行Kafka合适吗?会遇到哪些陷阱?
DBAplus社群
9+阅读 · 2019年9月4日
msf实现linux shell反弹
黑白之道
49+阅读 · 2019年8月16日
VS Code Remote发布!真·远程开发
开源中国
6+阅读 · 2019年5月3日
ZigBee 网络安全攻防
计算机与网络安全
13+阅读 · 2019年4月15日
Linux挖矿病毒的清除与分析
FreeBuf
14+阅读 · 2019年4月15日
Flink 靠什么征服饿了么工程师?
阿里技术
6+阅读 · 2018年8月13日
实战 | 用Python做图像处理(三)
七月在线实验室
15+阅读 · 2018年5月29日
AI 和机器学习中暗含的算法偏见 | Linux 中国
Linux中国
3+阅读 · 2018年4月14日
如何运用Python建一个聊天机器人?
七月在线实验室
17+阅读 · 2018年1月23日
教你用Python来玩跳一跳
七月在线实验室
6+阅读 · 2018年1月2日
相关论文
Top
微信扫码咨询专知VIP会员