这个问题是为了理解适用于unix环境中Mem-Mapped文件的类型限制。
我们有一个在unix环境中运行的APP,它托管并提供具有只读访问权限的密钥值的Mem映射文件的文件,也能够在复制新版本文件时在运行时刷新(可能更多密钥) - 值对。)
我观察到的是,由于文件是Mem-Mapped,因为我们用更多的键值对刷新文件,VIRT内存消耗随着RES内存消耗的增加而增加。
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内存中。
我的假设是否正确,
答案 0 :(得分:0)
我认为2)仅在您使用MAP_PRIVATE映射文件时才适用,然后仅在您修改内存中的页面时才适用。如果映射没有MAP_PRIVATE的页面,则该文件已在磁盘上,无需复制到交换文件中。 1)是否正确 - 您可以映射比可用内存更大的文件。 但请记住,操作系统仍然需要分配页表 - 所以不要尝试映射1TB文件。