首先解释两个概念:
swap:在linux里面,当物理内存不够用了,而又有新的程序请求分配内存,那么linux就会选择将其他程序暂时不用的数据交换到物理磁盘上(swap out),等程序要用的时候再读进来(swap in)。这样做的坏处显而易见,swap in/swap out这里的代价比较大,相比数据一直放在内存里面,多了读磁盘的操作,而磁盘IO代价。。大家都懂的。
OOM:out of memory,指在linux里面,由于系统内存压力,系统会选择保护一些系统进程,而将一些其他的进程kill掉,释放内存。

那么在linux里面怎么可以做到这两点呢?
一、禁止使用swap
1.  可以设置/proc/sys/vm/swappiness=0,不过这就禁用了所有进程使用swap(实际上设置为0并不能完全禁止使用swap,而是只能尽量减少使用swap可能性)
2.  给进程分配内存的时候,让它使用hugepage内存。设置方法:
1>vi /etc/sysctl.conf ; 添加 vm.nr_hugepages=hugepage_num(多少页大页内存,这个必须大于进程需要的最大内存,比如mysqld buffer pool=5G,那么hugepage_num*page_size>5G)  ; sysctl -p 生效。
2>这样可以防止进程使用hugepage的原因:在进程使用hugepage分配内存时,是一次性分配、且独占的,既然一次性已经分配满了那也不存在使用swap的理由,你可以通过top命令看到进程一开始就占用了你所为它设定大小的内存。
3.  可以设置/proc/sys/vm/overcommit_memory=2(其他值代表什么含义,可以自己google,另外自己测试中发现这个值如果大于2,那么效果和2一样) 在值为2的情况下,可以分配的内存最大大小在swap size + RAM*((/proc/sys/vm/overcommit_ratio) / 100)),如果大于这个直接返回错误,这个也是类似hugepage分配内存,也是一次性,独占(不能100%肯定),但是利用top命令查看,它显示当前已占用的内存大小不是我们为他设定的那个值。那为什么我认为它也是独占、且一次性分配呢?因为启动其他进程的时候,直接报错:
Error occurred during initialization of VM
Could not reserve enough space for object heap
4. 使用mysql自带的参数--memlock 它将内存锁定,原理同hugepage一样,不过缺陷是必须由root运行mysqld

二、怎么避免进程因为OOM机制被kill掉?
1.  与OOM相关的几个文件是 /proc/<pid>/oom_adj 、 /proc/<pid>/oom_score。前者是一个权值-16至15,默认是0,设置为-17表示永远不被kill,其余情况值越大越容易被kill。后者就是它计算出来的一个值,就是根据这个值来选择哪些进程被kill掉的。
2.  上面放置使用swap中的第三个方法 overcommit参数,因为它分配不出内存就会返回错误,所以永远也不能达到内存被耗尽。OOM也就不会有影响了。

[转]Linux下防止进程使用swap及防止OOM机制导致进程被kill掉的更多相关文章

  1. Linux下禁止使用swap及防止OOM机制导致进程被kill掉

    首先解释两个概念: swap:在linux里面,当物理内存不够用了,而又有新的程序请求分配内存,那么linux就会选择将其他程序暂时不用的数据交换到物理磁盘上(swap out),等程序要用的时候再读 ...

  2. 在windows和linux下如何查看80端口占用情况?是被哪个进程占用?如何终止等

    一.在windows下如何查看80端口占用情况?是被哪个进程占用?如何终止等 这里主要是用到windows下的DOS工具,点击"开始"--"运行",输入&quo ...

  3. linux 下 取进程占用内存(MEM)最高的前10个进程

    # linux 下 取进程占用 cpu 最高的前10个进程ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head # linux 下 取进程占用内存 ...

  4. 【转】Linux 下取进程占用 cpu/内存 最高的前10个进程

    # Linux 下 取进程占用 cpu 最高的前10个进程ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head # linux 下 取进程占用内存 ...

  5. Linux-PAM(Linux下的密碼認證和安全机制)系統管理員指南(中文版)

    he Linux-PAM 系统管理员指南作者:Andrew G. Morgan, morgan@linux.kernel.org翻译:孙国清(Thomas Sun),thomassun@yeah.ne ...

  6. linux下查看进城(ps)的方法 与 杀死进程(kill)的N种方法

    PS查看进程 inux上进程有5种状态: 1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3. 不可中断(收到信号不唤醒和不可运行, 进程必 ...

  7. linux 下取进程占用 cpu/内存 最高的前10个进程

    linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ;|head linux下获取占用内存资源最多的10个进程,可以使用如下命令组合: ;|head 命令组合解析(针对CPU的,M ...

  8. 调整swap分区大小-Linux下安装Oracle时报swap不够解决方法

    调整swap分区大小 方法一:如果磁盘有剩余的空间,用分区工具新建一个swap分区.并写到/etc/fstab里面.再 #swapon -a方法二:可以用一个文件做交换分区. su root cd / ...

  9. Linux下Tomcat的启动和停止(包括杀死tomcat进程)

    打开终端 cd /java/tomcat #执行 bin/startup.sh #启动tomcat bin/shutdown.sh #停止tomcat tail -f logs/catalina.ou ...

随机推荐

  1. [19/06/09-星期日] CSS基础_示例

    一.图片格式&Hack(尽量不要使用) IE6对图片png-24的透明效果不支持,IE6中背景会发灰,可以使用png-8来代替.但是使用png-8代替之后清晰度会有所下降. 使用js来解决该问 ...

  2. JSP页面读取数据中的数据内容,出现乱码现象的解决方法

    1.首先要确保JSP页面的编码已修改为“utf-8”的字符编码: 2.然后再在jsp页面上添加代码进行设置: 先用getBytes()方法读出数据,然后再new String()方法设置格式为“utf ...

  3. Eureka 源码分析之 Eureka Server

    文章首发于公众号<程序员果果> 地址 : https://mp.weixin.qq.com/s/FfJrAGQuHyVrsedtbr0Ihw 简介 上一篇文章<Eureka 源码分析 ...

  4. 学习C++的意义

    1,常见的观点: 1,并不是每个应届生都有机会写操作系统和驱动程序: 2,嵌入式系统也是软家系统,只不过是软件在出厂的时候已经被烧写到硬件中了,用户没有办法修改软件而已,因此嵌入式系统也是软件系统,C ...

  5. 介绍一下 except 的作用和用法?

    except: #捕获所有异常 except: <异常名>: #捕获指定异常 except:<异常名 1, 异常名 2> : 捕获异常 1 或者异常 2 except:< ...

  6. POJ 3414 Pots (BFS/DFS)

    Pots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7783   Accepted: 3261   Special Ju ...

  7. 二: Jvm内存模型

    因为每个对象生命周期不一样,jvm在做内存管理的时候,就帮我们分成了三个区域: 1.  新生代(回收频率高)   新生和老年默认大小比例为1:2 2.  老年代(回收频率低)     最好所有的对象都 ...

  8. IDEA 增加对JPA的支持 执行JPQL语句

    IDEA 可以在控制台console中执行JPQL语句: 1. 在已存在的项目中选择项目结构: 2. 选择模块-指定实体所在的模块-选择上面的号 2. 选择要添加的模块:我们使用的是JPA,也可能有的 ...

  9. ambari 2.5.0源码编译安装

    参考:https://www.ibm.com/developerworks/cn/opensource/os-cn-bigdata-ambari/index.html Ambari 是什么 Ambar ...

  10. 用eclipse怎么打war包?

    用eclipse怎么打war包? 在服务器上部署很多都是用war包进行部署的,eclipse是很友好的支持把java项目打成war包的,下面就把打war的经验写出来,供大家参考 百度经验:jingya ...