我正在尝试评估一组 python 脚本在无交换机器上的性能。
使用该命令监视进程top
会得到一个比常驻内存大小略大的虚拟内存大小。
此时,虚拟内存指的是什么?它包括常驻内存吗?
编辑:根据评论删除python标签不相关
我正在尝试评估一组 python 脚本在无交换机器上的性能。
使用该命令监视进程top
会得到一个比常驻内存大小略大的虚拟内存大小。
此时,虚拟内存指的是什么?它包括常驻内存吗?
编辑:根据评论删除python标签不相关
有两点,为什么 top 在这种情况下列出虚拟内存使用情况是有意义的:
如前所述,有内存映射。这样一来,并非所有映射到内存的东西都必须驻留在内存中。它还具有这样的效果,像共享库这样的常用文件只需加载到内存中一次,它们就被简单地映射到多个进程的虚拟地址空间中。
当你向 Linux 索要一些内存时,它只是记下,你在虚拟地址空间中拥有它,而实际上并没有提供它。这意味着,您可以自由地要求比可能提供的更多的内存,从而将 top 报告的数字放大为分配给您的虚拟内存。您只是不能使用所有这些内存,因为当内核内存不足时,OOM-killer 会简单地射击您。
这两点都非常清楚地表明,您仍然在完全虚拟化的内存系统下工作,只是无法完成将任意页面交换到磁盘以实现“优雅”降级的其他技巧。
不是编程问题,而是wotthehell。可执行文件及其共享库被内存映射到 RAM 中,而不是在可执行文件启动时一次全部加载。这减少了进程启动时间,还可以减少实际内存使用(如果不是可执行文件中的所有代码都需要用于执行任何操作)。这不是交换,但它是由 VM 系统完成的,因此算作虚拟内存。