这个问题是为了理解适用于Unix Environ中的MEM映射文件的幼稚约束。
我们有一个在UNIX环境中运行的应用程序,该应用程序托管并提供具有键值键值文件的文件,仅读取访问,也能够在复制新版本的文件时在运行时刷新(带有更多键的probabaly) - 值对)。
我观察到的是,由于文件是mem映射的,因为我们使用更多键值配对的文件刷新文件,而随着RES MEM消耗的不多,VIRD内存消耗会增加。
PID PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12948 16 0 43240 9936 2996 S 0.0 0.1 0:00.00 lookup_server
12951 16 0 562m 16m 9972 S 0.0 0.1 0:00.09 lookup_server
我知道这是因为整个文件被复制为硬盘驱动器中的虚拟内存页面,只有很少的页面在res mem中。
是我的假设,正确的是
- 使用MEM映射文件,文件大小不限于可用的物理RAM,因为该文件将由OS ON-DEMAND分类/输出。
- 唯一的限制因子可以是为虚拟内存配置的磁盘空间。 在这种情况下,如何确定由OS确定的虚拟内存扩展的磁盘空间?文件的虚拟内存脚打印在哪里存储在硬盘中?
我认为2)仅当您使用map_private映射文件时才适用,然后仅当您修改内存中的页面时。如果映射没有MAP_PRIVATE的页面,则文件已经在磁盘上,不需要复制到交换文件中。1)正确 - 您可以映射比可用内存更大的文件。但是请记住,OS仍然必须分配页面表 - 因此请勿尝试映射1TB文件。