最近遇到两起Linux的内存问题,其一是触发了oom-killer导致系统挂
1. 首先确认该系统的版本是32位
#uname -a Linux alarm 2.6.9-67.ELsmp #1 SMP Wed Nov 7 13:58:04 EST 2007 i686 i686 i386 |
2. 我们了解一下32位Linux的内存管理结构
# DMA: 0x00000000 - 0x00999999 (0 - 16 MB) # LowMem: 0x01000000 - 0x037999999 (16 - 896 MB) - size: 880MB # HighMem: 0x038000000 - <硬件特定> |
内核使用low memory来跟踪所有的内存分配,这样的话一个16GB内存的系统比一个4GB内存的系统,需要消耗更多的low memory,当low memory耗尽,即便系统仍然有剩余内存,仍然会触发oom-killer。在2.6内核的表现是,杀掉占用内存最高的进程,所以会导致sshd等进程被杀掉,造成系统无法登录。
3. 如何查看lowMem
-bash-3.00# free -lm total used free shared buffers cached Mem: 2026 1973 52 0 36 1303 Low: 874 823 51 High: 1151 1150 1 -/+ buffers/cache: 633 1392 Swap: 3067 142 2924
4. 所以我们需要保护LowMem,在2.6内核引入了lower_zone_protection,这将让内核愿意保护low memory,从而在分配内存时优先考虑从high memory分配。
-bash-3.00# cat /proc/sys/vm/lower_zone_protection 0 -bash-3.00#echo 400 > /proc/sys/vm/lower_zone_protection |
另一起问题是24G内存的系统,空闲内存已经不到50M
1. 确认该系统的版本是64位
# uname -a Linux gxgd-nms-app 2.6.18-194.el5xen #1 SMP Tue Mar 16 22:01:26 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux |
2. 用ps查看各进程的内存,大约就占用了4G, 绝大部分内存都是被Page Cache所占用。Linux内核的策略是最大程度的利用内存cache 文件系统的数据,提高IO速度,虽然在机制上是有进程需要更大的内存时,会自动释放Page Cache,但不排除释放不及时或者释放的内存由于存在碎片不满足进程的内存需求。
所以我们需要一个方法,能够限定PageCache的上限。
Linux 提供了这样一个参数min_free_kbytes,用来确定系统开始回收内存的阀值,控制系统的空闲内存。值越高,内核越早开始回收内存,空闲内存越高。
[root@zyite-app01 root]# cat /proc/sys/vm/min_free_kbytes 163840 echo 963840 > /proc/sys/vm/min_free_kbytes |
其他可选的临时解决方法:
关闭oom-killer
echo "0" > /proc/sys/vm/oom-kill
vi /etc/sysctl.conf
vm.oom-kill = 0
2. 清空cache (可选)
echo 1 > /proc/sys/vm/drop_caches
相关推荐
主要介绍了MySQL Slave 触发 oom-killer解决方法,需要的朋友可以参考下
主要介绍了Slave memory leak and trigger oom-killer,需要的朋友可以参考下
kubernetes-oom-event-generator 容器启动时生成Kubernetes事件,并指示该容器先前已被杀死。设计控制器侦听Kubernetes API中的新事件和事件更改。 每次收到有关事件的通知时,它都会根据事件的Reason和所涉及对象的...
Android应用源码开发Demo,主要用于毕业设计学习。
Android应用源码开发Demo,主要用于毕业设计学习。
OOM全称”Out Of Memory”,即内存溢出。 内存溢出已经是软件开发历史上存在了近40年的“老大难”问题。在操作系统上运行各种软件时,软件所需申请的内存远远超出了物理内存所承受的大小,就叫内存溢出。 内存溢出...
基本上解决了OOM问题 如果 方便可以直接引用BitmapManager类到 项目中使用 解决blog 地址http://www.cnblogs.com/liongname/articles/2345087.html
oom-killer通常在Linux用户中享有不良声誉。 这可能是Linux仅在绝对没有其他选择时才调用它的部分原因。 它将换出桌面环境,删除整个页面缓存,并在最终终止进程之前清空每个缓冲区。 至少那是我认为的做法。 我坐...
node-oom-heapdump 即将在发生“内存不足”错误之前创建V8堆快照的节点模块。 它还可以根据请求创建堆转储和CPU配置文件,例如“ v8-profiler”,但是这样做是在进程外进行的,因此不会干扰主进程的执行。 在Node.js...
Linux系统的OOM Killer处理机制.docx
Android高级应用源码-图片下载以及内存处理防OOM.zip
在 OomAdjuster.updateAndTrimProcessLocked() 函数中针对 Bservice进行优化
oom-meta-simulator
教你分析9种OOM常见原因及解决方案.docx
NULL 博文链接:https://shuechaolau.iteye.com/blog/1558046
oom观察者可以运行此命令来观察 cgroup 的 OOM 事件并运行一些子命令。 用法示例: go build ../oom-watcher --cgroup /sys/fs/cgroup/memory/yourcgroup -- \mail -s oom oom-alert@yourco.com
如果在Keras内部多次使用同一个Model,例如在不同的数据集上训练同一个模型进而得到结果,会存在内存泄露的问题。在运行几次循环之后,就会报错OOM。 解决方法是在每个代码后面接clear_session()函数,显示的关闭TF...
Android 图片下载以及内存处理防止OOM内存溢出 源码