[problem help] 内存用了不到一半,Swap使用率就超过了50%这正常吗,为啥会这样?
Tofloor
poster avatar
qmicrosoftcom
deepin
2024-10-17 12:01
Author

如题
image.png

Reply Favorite View the author
All Replies
2 / 2
To page
安洛
deepin
2024-10-18 12:42
#21
昨夜的星辰

有一个疑问,写回文件是指的写到哪里?既然是能写回到文件里的数据,为什么还要待在内存里,是需要频繁使用的缓存数据?搞不懂😂

对Linux系统来说,绝大多数情况下,CPU访问文件数据时都是先将文件数据从硬盘加载到内存,再处理数据(当然实际处理过程更加复杂,涉及高速缓存、寄存器等多级存储)。CPU几乎不会直接操作硬盘中的数据。程序在运行的时候会打开大量的文件,例如程序本身的可执行文件、程序要使用的数据文件、程序的配置文件等等。这些文件都会被加载到内存中。

例如,下图是Firefox浏览器进程的内存映射表的局部。可以看到,绝大多数内存空间都有对应的“文件名”。包括.so文件(可执行文件),.mo文件(语言文件)等。
截图 2024-10-18 12-36-12.png

被加载到内存中的文件如果不主动释放,一般不会马上写回硬盘,毕竟每次写硬盘都会有额外的开销,与其每修改一次就写回一次硬盘,不如先在内存中暂存更改,等到文件被释放的时候再一次性写回。

当内存被占满时,没有对应文件的内存数据(通常是程序运行中直接写入内存的数据)只能被换入swap,而以上这些从文件加载进内存中的数据就有两个选择,可以被写回文件,或者换入swap。swappiness就是决定它们是被换入swap,还是写回文件。

Reply View the author
2 / 2
To page