我在几个地方发现Linux使用页面和分页机制,但我找不到这个文件的位置或者如何配置它。
我找到的所有信息都与Linux交换文件/分区有关。分页和交换之间存在差异:
页面移动页面(包含一段数据的小框架 - 通常为4 KB,但可以在不同的操作系统之间变化)从主存储器到后端存储,始终作为操作系统的正常功能发生。 交换将整个流程移动到存储,当系统受到内存压力时发生,或者在新应用程序休眠时在Windows 8上发生。
Linux是否使用它的交换文件/分区? 如果是这样,我怎么能看到当前有多少页面被分页? vmstat,free或swapon命令中没有此信息(或者我没有看到它)。
或者是否有另一个用于分页的文件? 如果是这样,我该如何配置它(并观察它的使用情况)?
或许Linux根本不使用分页而且我误导了?
如果答案将针对红帽企业Linux版本6和7,我将不胜感激,但对所有Linux的一般回答也会很好。
提前致谢。
答案 0 :(得分:1)
在Linux上,交换分区用于分页。
Linux不会通过交换整个进程来响应内存压力。虚拟内存系统确实要求逐页进行分页。在极端的记忆压力下,一个或多个进程将被OOM杀手杀死。 (man malloc
)
top
标题中有一行显示交换分区的使用情况,但如果这是您想要的所有信息,请使用
swapon -s
man swapon
了解更多信息。
交换分区使用情况与未映射页面的数量不同。页面可能使用mmap
调用内存映射到文件;由于该页面在文件中有后备存储,因此无需将其写入交换分区,系统也不会使用交换空间。但是交换分区的使用是一个非常好的指标。
另请注意,Linux(与Windows不同)在分配页面时不会为页面分配交换空间。相反,它将新页面添加到虚拟内存映射而不需要任何后备存储。并在需要换出页面时分配交换空间。结果(如前面引用的malloc手册页中所述)是malloc
调用可能成功分配虚拟内存,但后续尝试使用该虚拟内存可能会失败。
答案 1 :(得分:0)
虽然Linux保留了术语“交换分区”这一术语。作为一个历史遗迹,它实际上执行分页。所以你的期望得到了证实;你只是被古老的术语所抛弃。