微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一个用户级进程可以在linux下处理OOM错误吗?

@H_404_0@假设我已经禁用了所有的OOM相关function(没有OOM杀手)。 一个进程占用了所有可用的内存,并且仍然试图从mmapped磁盘文件中读取一些不在任何页面caching中的字节。 这个过程是否会得到一个OOM信号,这样它可以被动地释放一些内存并在以后重试?

@H_404[email protected]重写规则,以防止caching的CSS,JS,图像文件

@H_404_0@如何以编程方式清除Windows中的caching?

@H_404_0@如何创build一个caching/交换/内存caching

@H_404_0@fflush,fsync和sync与内存层

@H_404_0@在Nginx中覆盖Cache-Control:Private

@H_404_0@这取决于很多条件。

@H_404_0@1)你如何禁用杀手?

@H_404_0@假设你写了2到/ proc / sys / vm / overcommit_memory,这意味着:

@H_404_0@2:总是检查,永远不要过分(见man 5 proc)

@H_404_0@之后,你叫mmap。

@H_404_0@2)你在“mmap”中使用了哪些标志?

@H_404_0@假设你使用了MAP_norESERVE,在另一种情况下(没有MAP_norESERVE),如果没有足够的物理内存,mmap只是返回错误

@H_404_0@3)你的overcommit_ratio值是多少? 我们假设它不是零,如果它是零,那么mmap返回错误,我们不能处于“无文件页面”的情况。

@H_404_0@如果所有这些假设都是真的,那么你来:mm / oom_kill.c :: pagefault_out_of_memory,

@H_404_0@又一个新的条件:

@H_404_0@4)可能是我们在与OOM禁用Cgroup?

@H_404_0@如果是,那么我们就去睡觉。

@H_404_0@最后称为杀手

@H_404_0@关于禁用oom

@H_404_0@而“我们只是去睡觉”,你的意思是系统暂停吗?

@H_404_0@请参阅linux-source / Documentation / cgroups / memory.txt:

@H_404_0@如果OOM杀手被禁用,则cgroup下的任务将在请求可疑内存时在内存cgroup的OOM等待队列中挂起/休眠。

@H_404_0@因此,处理与残疾杀手的部分cgroup去睡觉,而不是所有的系统。

@H_404_0@用户态进程是否有可能处理这个页面错误

@H_404_0@1)可以这样做: https : //lwn.net/Articles/550555/

@H_404_0@2)或者你可以看OOM杀手事件。

@H_404_0@再次查看linux-source / Documentation / cgroups / memory.txt:

@H_404[email protected]_control文件用于OOM通知和其他控件。

@H_404_0@内存cgroup使用cgroup通知API实现OOM通知程序(请参阅cgroups.txt)。 它允许注册多个OOM通知传递并在OOM发生时获得通知

@H_404_0@要注册通知程序,应用程序必须:…

@H_404_0@如果你禁用了oom-killer那么进程将不会得到信号,但是一旦内存耗尽, malloc()调用将会失败。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐