- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我一直在阅读 Linux 的“swappiness”可调参数,它控制内核在不使用应用程序时将内存交换到磁盘的积极程度。如果你谷歌这个词,你会得到很多像this这样的页面。讨论利弊。简而言之,争论是这样的:
If your swappiness is too low, inactive applications will hog all the system memory that other programs might want to use.
If your swappiness is too high, when you wake up those inactive applications, there's going to be a big delay as their state is read back off the disk.
这个论点对我来说没有意义。如果我有一个使用大量内存的非事件应用程序,为什么内核不将其内存分页到磁盘并在内存中保留该数据的另一个副本?这似乎是两全其美:如果另一个应用程序需要该内存,它可以立即申请物理 RAM 并开始写入它,因为它的另一个副本在磁盘上并且可以在非事件应用程序被唤醒时换回向上。当原始应用程序唤醒时,它仍然在 RAM 中的任何页面都可以按原样使用,而无需将它们从磁盘中取出。
还是我遗漏了什么?
最佳答案
If I have an inactive application that's using a ton of memory, why doesn't the kernel page its memory to disk AND leave another copy of that data in-memory?
假设我们做到了。我们将页面写入磁盘,但将其留在内存中。稍后另一个进程需要内存,所以我们想从第一个进程中踢出页面。
我们需要绝对确定第一个进程是否修改了页面,因为它被写入磁盘。如果有,我们必须重新写出来。我们跟踪它的方法是在我们第一次将页面写出到磁盘时取消进程对该页面的写权限。如果进程再次尝试写入页面,则会出现页面错误。内核可以在恢复写权限并允许应用程序继续之前注意到该进程已经弄脏了页面(因此需要再次写出)。
问题就在这里。取消页面的写权限实际上有些昂贵,尤其是在多处理器机器中。重要的是,所有 CPU 都要清除其页面翻译缓存,以确保它们取消写入权限。
如果进程确实写入页面,则发生页面错误的代价更高。我假设这些页面中有相当数量的页面最终会出现该错误,这会侵 eclipse 我们通过将其留在内存中寻找的 yield 。
那么值得吗?老实说,我不知道。我只是想解释为什么将页面留在内存中并不像听起来那么明显。
(*) 这整个事情非常类似于一种叫做 Copy-On-Write 的机制,它在进程 fork() 时使用。子进程很可能只执行几条指令并调用 exec(),因此复制所有父页面是很愚蠢的。取而代之的是取消写权限,只允许 child 运行。 Copy-On-Write 是一个胜利,因为页面错误几乎从未发生过: child 几乎总是立即调用 exec()。
关于linux - 为什么 "swappiness"的讨论就像一次只能在一个地方的信息一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/147125/
问题:您好,我已经为我的一个客户创建了一个 DBMS,其中有一个功能,即从相同的表单输入将值拆分为四个不同的表(但是)有时会发生值输入到 table1 和 table2 而不是 table3 和 ta
我正在开发基于 Web 的应用程序,该应用程序需要在将任何文件上传到服务器之前检查其大小。 如果 Web 开发人员可以通过任何方式在客户端检查文件大小而不是在服务器端检查文件大小,从而避免不必要的服务
Closed. This question is opinion-based。它当前不接受答案。 想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。 5年前关闭。
好的,这个线程将更像是对标题中提到的主题的讨论。我一遍又一遍地搜索整个主题,但没有找到适合我的好/可接受的解决方案。 场景 假设我有一个 android 项目,我需要一个第三方库(例如 drag-so
我正在进行的项目使用用户创建的多个“墙”进行讨论。 我的问题涉及如何在 MySQL 数据库中对此进行建模。 拥有一个名为“walls”的表,其中包含诸如创建者等信息,以及另一个名为“messages”
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit th
发现了一个有趣的问题,我首先在 WinForms 中发现,然后在 Silverlight 中再次发现,而且在数据绑定(bind)方面也很可能是 WPF。 我有一个带有多个选项卡的选项卡控件。当用户点击
我正在用 VBA 编写一个方法,但我收到了 ByRef 参数类型不匹配。在做了一些研究之后,我找到了一个快速的解决方法——将我的值存储在另一个变量中,然后将该新变量传递给我的方法。谁能向我解释疯狂背后
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 7 年前。 Improv
我一直在尝试修改 Odoo 讨论,但没有成功。 这就是我要实现的目标: 我将带有“新消息”按钮的消息添加到 Odoo 模块(在类 mro.order 中)。消息显示在讨论模块中: 但我需要标题类似于“
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
为任何错误的术语道歉——我对计算机科学很陌生,我几乎只知道 Clojure(但我想我会说我很了解它)。 所以,我没有对此进行大量研究,但有时我发现在编写 Clojure 代码时它很有用,以便能够从该数
a) 匿名卷 使用数据容器时,您可以像这样使用匿名卷 version '2' services: consumer: volume_from: - data-container
var yourObjects = [ { object: {obj1:"aa"}, direction: 'top' }, { object: "obj2", direction: 'left' }
我正在尝试使用 Disqus API 将帖子添加到现有的讨论/论坛。在文档中我可以读到我可以作为访客发送评论而无需身份验证。文档是这样说的: http://disqus.com/api/docs/po
因此,我偶然发现了一本名为“C++科学计算指南”的C++书的练习。 这是练习: “编写代码,为三个2×2矩阵的 double 浮点数A,B,C动态分配内存,并为A和B的条目分配值。令C = A +B。
规则 CA1008指定所有枚举都应具有 0 值,该值应命名为 Unknown(我们不在此处讨论标志)。我理解您想防止未初始化的值自动获得意义的原因。假设我定义了以下枚举: enum Gender {
前几天,Google 通知我,我的 Gmail 帐户可能已被盗用,因为它已被两个来自异常位置的 IP 地址访问。由于我通常(并且愚蠢地)为每个网站使用相同的密码,所以我决定改变一下并使用不同的密码。
RubyGems.org ,官方 gems 站点,提供的功能很差。我想为我的网站找到一些好的 gems,但这是不可能的——它只提供了几个“新 Gems”/“今天下载最多的” gems,以及所有的列表
我如何提取我博客中的最新对话(整个网站)并显示最近的 10 条评论作为来自 Disqus 的对话摘要? 最佳答案 您可以使用 Disqus 论坛/listPosts API 方法构建一个最新评论小部件
我是一名优秀的程序员,十分优秀!