迪克猪的博客
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

22|答疑(三)文件系统与磁盘的区别是什么?

问题 1:内存回收与 OOM

  • 怎么理解 LRU 内存回收?
  • 回收后的内存又到哪里去了?
  • OOM 是按照虚拟内存还是实际内存来打分?
  • 怎么估计应用程序的最小内存?

一旦发现内存紧张,系统会通过三种方式回收内存。

这三种方式分别是 :

  • 基于 LRU(Least Recently Used)算法,回收缓存;
  • 基于 Swap 机制,回收不常访问的匿名页;
  • 基于 OOM(Out of Memory)机制,杀掉占用大量内存的进程。前两种方式,缓存回收和 Swap 回收,实际上都是基于 LRU 算法,也就是优先回收不常访问的内存。

LRU 回收算法,实际上维护着 active 和 inactive 两个双向链表,其中:

  • active 记录活跃的内存页;
  • inactive 记录非活跃的内存页。

问题 2: 文件系统与磁盘的区别

  • 读写文件最终也是读写磁盘,到底要怎么区分,是读写文件还是读写磁盘呢?
  • 读写磁盘难道可以不经过文件系统吗?

磁盘是一个存储设备(确切地说是块设备),可以被划分为不同的磁盘分区。而在磁盘或者磁盘分区上,还可以再创建文件系统,并挂载到系统的某个目录中。这样,系统就可以通过这个挂载目录,来读写文件。

Linux 中一切皆文件。换句话说,你可以通过相同的文件接口,来访问磁盘和文件(比如 open、read、write、close 等)。我们通常说的“文件”,其实是指普通文件。而磁盘或者分区,则是指块设备文件。

问题 3: 如何统计所有进程的物理内存使用量

问题 4: CentOS 系统中如何安装 bcc-tools

问题 5: 内存泄漏案例的优化方法

在内存泄漏案例的最后,我们通过增加 free() 调用,释放了函数 fibonacci() 分配的内存,修复了内存泄漏的问题。就这个案例而言,还有没有其他更好的修复方法呢?