22 | 答疑(三):文件系统与磁盘的区别是什么?
倪朋飞
该思维导图由 AI 生成,仅供参考
你好,我是倪朋飞。
专栏更新至今,四大基础模块的第二个模块——内存性能篇,我们就已经学完了。很开心你还没有掉队,仍然在积极学习和实践操作,并且热情地留言与讨论。
这些留言中,我非常高兴看到,很多同学用学过的案例思路,解决了实际工作中的性能问题。我也非常感谢 espzest、大甜菜、Smile 等积极思考的同学,指出了文章中某些不当或者不严谨的地方。另外,还有我来也、JohnT3e、白华等同学,积极在留言区讨论学习和实践中的问题,也分享了宝贵的经验,在这里也非常感谢你们。
今天是性能优化的第三期。照例,我从内存模块的留言中摘出了一些典型问题,作为今天的答疑内容,集中回复。为了便于你学习理解,它们并不是严格按照文章顺序排列的。
每个问题,我都附上了留言区提问的截屏。如果你需要回顾内容原文,可以扫描每个问题右下方的二维码查看。
问题 1:内存回收与 OOM
虎虎的这个问题,实际上包括四个子问题,即,
怎么理解 LRU 内存回收?
回收后的内存又到哪里去了?
OOM 是按照虚拟内存还是实际内存来打分?
怎么估计应用程序的最小内存?
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了Linux系统中的文件系统与磁盘的区别,以及内存回收与OOM的相关知识。在内存回收方面,详细介绍了基于LRU算法的缓存回收、Swap机制回收和OOM机制,并解答了相关问题。此外,还阐述了磁盘作为文件系统载体的功能,以及读写普通文件和块设备文件时的不同I/O请求路径和使用的缓存类型。最后,强调了理解PSS的含义对于统计所有进程的物理内存使用量至关重要。整体而言,本文内容涵盖了文件系统、磁盘、内存回收和OOM等技术知识,对读者了解相关概念和原理具有一定的参考价值。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Linux 性能优化实战》,新⼈⾸单¥68
《Linux 性能优化实战》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(45)
- 最新
- 精选
- 白华自己跑虚拟机跑的k8s小集群,node节点跑的镜像太多,就特别卡,看集群情况发现好多pod都死了,看虚拟机上面就写到oom自动杀进程了,以前从没遇到过oom,这次一下就知道怎么回事了
作者回复: 😊 k8s别忘了设置好内存资源的请求和限制
2019-01-09217 - wykkx老师您好,请教一个问题,您说匿名页回收是使用swap机制,那么这里有几个问题:一是如果我的系统不开启swap(现在很多系统都是不开启swap的,尤其是web类应用,为了提升响应时间),那么匿名页还怎么回收?二是即使我开启了swap,匿名页被放到了swap上,那么swap是如何清理这些匿名页的,总不能一致保存这些匿名页吧。谢谢老师 2019-01-10 作者回复 1. 不开swap,没法回收 2. 取决于这些页的实际访问情况,只要一访问,就会换入到内存中 ---------追问------------------------- 首先谢谢老师的问答,可能是我没有描述清楚。一是,如果按照老师说的“不开swap,没法回收”那么我系统产生的大量匿名页怎么办?是不是一直在内存里,不能被回收?直到引发oom,把这个进程干掉?;二是“ 取决于这些页的实际访问情况,只要一访问,就会换入到内存中”如果这些被换到swap上的匿名页量很大 ,把swap都写满了,这个时候是怎么选择从swap里清理哪些匿名页呢?
作者回复: 1.是的;2. swap都满了,说明内存也耗尽了呀,这时候就要OOM了
2019-01-12214 - 好好学习内存统计这样也可以吧smem|awk '{total+=$7};END{printf "%d kb/n",total}'
作者回复: smem是可以的👍,不过要注意计算 PSS 而不是 RSS
2019-01-138 - 陳先森很多同学装bcc工具的时候都提示找不到动态库之类的,经过本人亲测是因为没有安装匹配新内核版本的内核头包。我的系统centos7.3更新了之后内核是5.0.5版本的,升完之后一直提示缺少库文件,我的做法是 rpm -qa |grep kerner,先查找系统内核版本,网上查找相应的匹配kerner-devel包,及时没有相同版本也不要紧,比如5.0.5-1的版本就是我系统的版本网上找了没有这个版本对应的kerner-devel包但是不知道为什么升级了会安装这个版本,我系统升级前centos7.3,升级后7.6。我就下载了5.0.5-3并安装,然后版本的,找到对应的包版本,rpm -ql 包版本,做个软连接就OK。至此bcc已经安装完成。做为一个linux运维我都装了2天,可想而知大家。此方法亲测centos7.3
作者回复: 👍谢谢分享
2019-04-0537 - 平安喜乐打卡: bcc-tools install(centos6.9) 已尝试可以顺利安装 https://blog.csdn.net/luckgl/article/details/88355074
作者回复: 谢谢分享
2019-03-1222 - ninuxer打卡day23 喜欢一篇文章看两次,第一次看,第二次是实践的时候再看一遍
作者回复: 👍
2019-01-092 - JJjOOM 触发的时机基于虚拟内存。换句话说,进程在申请内存时,如果申请的虚拟内存加上服务器实际已用的内存之和---这里的实际已使用内存是不是对应free里面的used
作者回复: 应该是buff/cache+used,参考问题1的第三种方式,先尝试回收内存然后才是OOM
2019-06-291 - H&HH老师,初始系统版本是centos7.3,按照你给的安装bcc-tools步骤安装完后还是出现了以下报错,请问老师怎么回事呀 [root@server tools]# ./cachetop Traceback (most recent call last): File "./cachetop", line 21, in <module> from bcc import BPF File "/usr/lib/python2.7/site-packages/bcc/__init__.py", line 27, in <module> from .libbcc import lib, bcc_symbol, bcc_symbol_option, _SYM_CB_TYPE File "/usr/lib/python2.7/site-packages/bcc/libbcc.py", line 17, in <module> lib = ct.CDLL("libbcc.so.0", use_errno=True) File "/usr/lib64/python2.7/ctypes/__init__.py", line 360, in __init__ self._handle = _dlopen(self._name, mode) OSError: /opt/lampp/lib/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by /lib64/libbcc.so.0) [root@server tools]# uname -r 5.0.3-1.el7.elrepo.x86_64 [root@server tools]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core)
作者回复: 看错误是找不到依赖的动态链接库,可以试试修复安装 libstdc++
2019-03-2221 - LotusChing老师,您对wykkx同学问题的回答我有些不理解,"不开swap,没法回收匿名页。",我自己用tomcat容器做了个小实验。 环境:Ubuntu 14.04.1 LTS, Trusty Tahr,3.13.0-128-generic,docker 17.12.0-ce,tomcat:8-alpine 我的环境没有启用swap(free看到的都是0),通过启停tomcat容器,并观察/proc/zoneinfo、/proc/meminfo中anon相关匿名页相关指标,发现这些指标数值会随着启停容器上下浮动。 这样,是不是说明应用占用的匿名页只有在退出时释放?那应用运行过程中使用到的内存如何释放呢?通过GC么? 希望老师能抽空回复下关于我们的这个问题么,感谢!
作者回复: 停止进程后当然是会释放进程所占用的内存。我说的是进程一直在运行中的时候,进程自己分配的内存只能进程自己来释放,或者等着进程推出后由系统释放。
2019-02-161 - 超我的现象是32G服务器 free 还有2g多出现oom,但并没有容器的内存升高。 进程申请的虚拟内存 + 服务器已用的内存(包括buf/cache) > 物理内存 的时候会触发OOM 那们我个人理解OOM 发生以后会出现某个进程内存飙升的情况,但从OOM对应的时间上来看,监控没有发现某个容器进程飙升。 不知道是为什么? ubuntu 16.04 sar -r -S 1 %commit 与 free -g 里面又该如何对应呢?
作者回复: 使用容器的话,内存可能还受到cgroups的限制。这时候容器OOM只代表容器的内存达到了limit,不代表系统内存使用情况。另外,进程的内存使用不一定是飙升,还有可能缓慢增长(其实大部分内存泄漏都是这样). %commit跟free没有对应关系,commit是一个动态计算出来的估计值
2019-02-011
收起评论