【问题标题】:What happens when RAM is completely full and new process wants to run on an embedded device?当 RAM 已满且新进程要在嵌入式设备上运行时会发生什么?
【发布时间】:2012-01-23 08:41:50
【问题描述】:

我想知道当我尝试在没有交换分区或交换文件的运行 linux 的嵌入式板上运行新进程时会发生什么。通常对于 PC 上的 linux,它会从 RAM 中换出页面,从而为新进程释放内存。现在,嵌入式板子(以任何开发板为例),运行没有swap的linux想要运行一个RAM完全满的新进程,它如何运行一个新进程?

板子会有闪存,寿命有限,即使我们实施交换也不能频繁交换。

【问题讨论】:

    标签: linux memory-management embedded


    【解决方案1】:

    OOM Killer 会出现并杀死它认为需要杀死的任何进程。

    更多信息在这里:http://linux-mm.org/OOM_Killer

    【讨论】:

    • 你的意思是说,基本上它会杀死一些其他进程来运行新进程?
    • 它可能会杀死您刚刚启动的进程或其父进程,例如如果它有太多的叉子。通常你不希望发生这样的事情,避免 OOM Killer 是你的工作。请参考我的回答中的链接。
    • 链接的第二行说“Linux 'oom 杀手'的工作是牺牲一个或多个进程以便在所有其他方法都失败时为系统释放内存。”现在 wat 是其他一切.. 我知道交换空间.. 根据这个链接 OOM 是最后会发生的事情。还有其他方法吗?我想应该是上面那行。
    • 没有。你要么有一些空闲内存,要么没有。如果您确实有可用内存或未使用的交换空间,那么就没有问题。如果你不这样做,那么 OOM Killer 就会来做他的工作。
    • 似乎 OOM 杀手杀死了我的服务器 - 一段写得不好的 PHP 代码导致一半的服务宕机,但不是 apache……我仍在调查,不确定罪魁祸首是谁。虽然很糟糕。
    【解决方案2】:

    Android 系统试图尽可能长时间地维护一个应用程序进程,但最终需要移除旧进程以为新的或更重要的进程回收内存。为了确定保留哪些进程以及终止哪些进程,系统根据进程中运行的组件和这些组件的状态将每个进程置于“重要性层次结构”中。重要性最低的进程首先被淘汰,然后是重要性次之的进程,依此类推,以恢复系统资源。

    取自这里: http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html

    我假设 android/linux 对你来说是一样的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-04
      • 2015-09-14
      • 2011-07-16
      • 2011-12-22
      • 2015-05-26
      • 1970-01-01
      • 2017-03-08
      • 1970-01-01
      相关资源
      最近更新 更多