社区
Linux_Kernel
帖子详情
linux swap为空,当内存全部被占用时,未触发oom,能否导致线程间的数据被写坏?急!!
码农写博客
2016-07-19 04:30:50
如题:
linux 2.6内核 一个进程 多个线程,无swap, 内存全部被占用时会出现啥问题,
像线程间共用堆,不同虚拟地址映射到同一块内存,缺页中断时会发生什么?(注:此时已经无内存可用,正常情况会用swap)会不会引起线程间内存覆写?
注:baidu很挫,基本找不到有用的信息。
...全文
901
3
打赏
收藏
linux swap为空,当内存全部被占用时,未触发oom,能否导致线程间的数据被写坏?急!!
如题: linux 2.6内核 一个进程 多个线程,无swap, 内存全部被占用时会出现啥问题, 像线程间共用堆,不同虚拟地址映射到同一块内存,缺页中断时会发生什么?(注:此时已经无内存可用,正常情况会用swap)会不会引起线程间内存覆写? 注:baidu很挫,基本找不到有用的信息。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
码农写博客
2016-07-27
打赏
举报
回复
@renwotao2009 覆盖旧页面,那就是程序间的内存会出错啰?像a的程序映射到一块物理内存,b因为缺页也映射到相同物理内存,那b就覆写了a的内存,a崩溃?
lysysjw
2016-07-27
打赏
举报
回复
一般来说,当物理内存被申请到一定程度(未使用的物理内存小于一定值)会触发oom,你标题中"当内存全部被占用时,未触发oom",如果是物理内存,理论上不会全部被占用,当低到一定程度就应该开始触发oom,至于"能否导致线程间的数据被写坏"应该不会存在这样的情况. "像线程间共用堆,不同虚拟地址映射到同一块内存"这个描述应该不准确,同一个地址空间的不同线程,他们虽然是用了相同的堆空间,但是无论是不是同一线程,不同的虚拟地址映射不会到同一物理地址上.不同虚拟地址映射到同一个物理地址上通过mmap函数可以做到,但是像堆空间,栈空间不会出现不同的虚拟地址映射到同一物理地址上的. 多扯一点,linux使用堆空间的大致原理,例如malloc函数申请一片内存时,也就是使用堆空间的内存时,是通过brk系统调用在内存中申请一片虚拟内存空间vma(virtual memory area),并没有给它分配真正的物理内存,所以这时候它对应的物理地址是不确定的,当开始用到这片内存时,比如从这片内存空间读取数据或者写入数据时,这时候会触发pagefault(不同的架构有不同的处理方式,不过最后它们都归于对pagefault的处理上),这时候会根据当前触发异常的地址找到对应的vma,然后通过伙伴系统算法申请一片空闲的物理内存(页)(如果使能了swap,并且内存已经不足了,这时候就会换出一部分使得这部分换出的页变成了"空闲"页,如果还是没有物理内存,那么就通过oomkiller来获取内存)和这个vma填到页表中.
renwotao2009
2016-07-19
打赏
举报
回复
正常情况下,缺页中断会调入所缺页面到内存,并更新cache,如果内存这时没有可用页框,就使用页面置换算法换出旧页面到swap分区,换入新页面。这里你说没有swap,那么就等于覆盖旧页面了
mysql
swap
空
间
_
swap
空
间
不足
导致
MySQL被
OOM
kill案例
背景:某机器
内存
256G,安装2实例MySQL,每个 buffer_pool各106G,总计212G;某套DB晚上10:00左右迁移到该环境,第2天早上10:00左右收到
OOM
kill短信,因
swap
空
间
不足一个Mysql实例被强制kill;该实例mysqld进程没有被彻底清除,而是变成了僵尸进程,
导致
后续无法重启该实例,最后重启机器才解决。调查:上图为
oom
kill后的top输出,因为该my...
linux
oom
swap
,每天3分钟操作系统修炼秘籍(12):
OOM
和
swap
分区
oom
和
swap
分区进程的虚拟
内存
空
间
是映射到整个物理
内存
空
间
的,所以在进程自身看来它拥有了整个物理
内存
,它也能使用整个物理
内存
,只需在使用的
时
候请求操作系统帮忙分配更多空
间
即可。但是,操作系统上并非只运行了一个进程,如果一个进程无休止的申请物理
内存
空
间
,最终会
导致
物理
内存
耗尽或即将耗尽,使得操作系统无法创建新进程,因为创建新进程需要为它分配虚拟
内存
。所以,操作系统必须得监视物理
内存
的使用情况,在...
linux
【
内存
】5. 为什么系统的
Swap
变高了
文章目录1. 回顾2.
Swap
原理3. NUMA 与
Swap
4.
swap
piness5. 案例6. 总结 1. 回顾 如果在程序中直接或
间
接地分配了动态
内存
,你一定要记得释放掉它们,否则就会
导致
内存
泄漏,严重
时
甚至会耗尽系统
内存
。不过,反过来讲,当发生了
内存
泄漏
时
,或者运行了大
内存
的应用程序,
导致
系统的
内存
资源紧张
时
,系统又会如何应对呢?在
内存
基础篇我们已经学过,这其实会
导致
两种可能结果,
内存
回收和
OOM
杀死进程。
内存
资源紧张
导致
的
OOM
(Out Of Memory),相对容易理解,指的
linux
内存
管理(十四)-
内存
OOM
触发
分析
在
内存
分配路径上,当
内存
不足的
时
候会
触发
k
swap
d、或者
内存
规整,极端情况会
触发
OOM
,来获取更多
内存
。 在
内存
回收失败之后,__alloc_pages_may_
oom
是
OOM
的入口
Linux
OOM
-killer机制说明
1.什么是
OOM
-killer
oom
_killer(out of memory killer)是
Linux
内核的一种
内存
管理机制,在系统可用
内存
较少的情况下,内核为保证系统还能够继续运行下去,会选择杀掉一些进程释放掉一些
内存
。通常
oom
_killer的
触发
流程是:进程A想要分配物理
内存
(通常是读
写
内存
)->
触发
缺页异常->内核去分配物理
内存
->物理
内存
不足,
触发
OOM
。 1......
Linux_Kernel
4,438
社区成员
17,460
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章