Linux读取文件,导致内存高,触发oom-killer问题解决
来源:互联网 发布:武汉矩阵互动面试 编辑:程序博客网 时间:2024/05/02 01:20
最近遇到两起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 cachedMem: 2026 1973 52 0 36 1303Low: 874 823 51High: 1151 1150 1-/+ buffers/cache: 633 1392Swap: 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
- Linux读取文件,导致内存高,触发oom-killer问题解决
- LINUX内存高,触发OOM-KILLER问题解决
- LINUX内存高,触发OOM-KILLER问题解决
- LINUX内存高,触发OOM-KILLER问题解决
- Linux内存高,触发oom-killer问题解决
- Linux内存高,触发oom-killer问题解决
- Linux内存高,触发oom-killer问题…
- linux低端内存用光后会导致oom-killer随机kill掉进程
- 理解和配置 Linux 下的 OOM Killer(内存过高导致应用程序挂掉)
- Linux OOM-killer(内存不足时kill高内存进程的策略)
- linux oom killer
- Linux OOM-killer
- Linux OOM killer 机制
- Linux之OOM-killer
- OOM killer linux
- linux OOM killer分析
- Linux -- 内存控制之oom killer机制及代码分析
- linux OOM-killer机制(杀掉进程,释放内存)
- 【互动问答分享】第9期决胜云计算大数据时代Spark亚太研究院公益大讲堂
- C++设计模式从0进击-2-抽象工厂模式
- 与一线Linux嵌入式开发工程师的对话
- html 表格溢出解决办法
- 找出数组中长度最长的等差数列
- Linux读取文件,导致内存高,触发oom-killer问题解决
- oracle rac常用的命令
- 有的人活着他已经死了,有的人死了他还活着
- postgreSQL数据库中特殊操作
- 三层登陆实例
- 字符编码是怎么一回事
- 20140825
- 【数据结构与算法】图的深度与广度遍历
- 这些片子你猜到结局了吗?