2025年08月16日
Memory Overcommit的意思是操作系统承诺给进程的内存大小超过了实际可用的内存。一个保守的操作系统不会允许memory overcommit,有多少就分配多少,再申请就没有了,这其实有些浪费内存,因为进程实际使用到的内存往往比申请的内存要少,比如某个进程malloc()了200MB内存,但实际上只用到了100MB,按照UNIX/Linux的算法,物理内存页的分配发生在使用的瞬间,而不是在申请的瞬间,也就是说未用到的100MB内存根本就没有分配,这100MB内存就闲置了。下面这个概念很重要,是理解memory overcommit的关键:commit(或overcommit)针对的是内存申请,内存申请不等于内存分配,内存只在实际用到的时候才分配。
2025年08月16日
操作系统其实是没办法去区分哪个是我的关键任务进程的,oom-killer的作者有这么段话:
If we run out of memory, we have the choice between either killing a random task (bad) letting the system crash (worse), OR try to be smart about which process to kill. Note that we don't have to be perfect here, we just have to be good.
2025年08月16日
Linux 内核有个机制叫OOM killer(Out Of Memory killer),该机制会监控那些占用内存过大,尤其是瞬间占用内存很快的进程,然后防止内存耗尽而自动把该进程杀掉。
具体过程如图所示:
在源码层面,内核检测到系统内存不足、挑选并杀掉某个进程的过程,可以参考内核源代码linux/mm/oom_kill.c。
2025年08月16日
以下文章来源于硬核子牙 ,作者子牙
来源:https://mp.weixin.qq.com/s/xUfRmqNlZRLkN7DpL_3Y6A
2025年08月12日
阅读本文大概需要 6.0 分钟。
作者:卡巴拉的树
链接:https://dwz.cn/BaQWWtmh
本文探讨Linux中 主要的几种零拷贝技术 以及零拷贝技术 适用的场景 。为了迅速建立起零拷贝的概念,我们拿一个常用的场景进行引入:
在写一个服务端程序时(Web Server或者文件服务器),文件下载是一个基本功能。这时候服务端的任务是:将服务端主机磁盘中的文件不做修改地从已连接的socket发出去,我们通常用下面的代码完成:
2025年08月12日
简介:年初,由于协同办公系统升级,底层的系统从Windows切换为Linux,切换后的Linux系统通过移动硬盘挂载数据,虽然移动硬盘的读写速度都很快,不存在瓶颈问题。但是考虑数据安全性问题(万一移动硬盘损坏)。为保证数据的安全,还是计划将移动硬盘的数据迁移到存储设备中。迁移过程将涉及创建挂载目录,挂载设备等相关知识。
2025年08月12日
我们知道对于Linux系统来讲,一直流传着这样一句话“一切皆文件”,也就是说Linux就是由文件系统堆砌而成的。正确理解它的文件与目录是熟练掌握此款系统的最大的前提条件。
Linux的目录的结构属于树状结构,那么要想访问某个目录的话,必须先要理解绝对路径与相对路径的概念,绝对路径很容易理解那就是我们创建的文件实际存放的位置,是由根目录/开始写起。而相对路径则是相对于某个目录而言的,不是由/开始写起的。相对路径的写法很方便,用户不用再很多层叠路径下一个文件夹一个文件夹输入了。
2025年08月12日
1、ls与cat的区别是是什么?
答:ls命令的含义是list,显示当前目录中内容。不加参数时它显示当前目录中除隐藏文件外的所有文件及目录的名字。