zoukankan      html  css  js  c++  java
  • LINUX内存高,触发OOMKILLER问题解决

    原文:http://www.cnblogs.com/itfriend/archive/2011/12/14/2287160.html


    最近遇到两起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

    cat /proc/sys/vm/oom-kill
    echo "0" > /proc/sys/vm/oom-kill
    vi /etc/sysctl.conf
      vm.oom-kill = 0

    2. 清空cache (可选)
    echo 1 > /proc/sys/vm/drop_caches

  • 相关阅读:
    创建zull工程时pom文件报错failed to read artifact descriptor for org.springframework.cloud:spring-cloud
    利用eureka构建一个简单的springCloud分布式集群
    《信息安全专业导论》第十一周学习总结
    Nmap
    Excel数据统计与分析
    python模拟进程状态
    《信息安全专业导论》第9周学习总结
    俄罗斯方块
    《信息安全专业导论》第八周学习总结
    熟悉编程语言
  • 原文地址:https://www.cnblogs.com/aquester/p/9891834.html
Copyright © 2011-2022 走看看