[转]Linux下防止进程使用swap及防止OOM机制导致进程被kill掉
首先解释两个概念:
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掉的更多相关文章
- Linux下禁止使用swap及防止OOM机制导致进程被kill掉
首先解释两个概念: swap:在linux里面,当物理内存不够用了,而又有新的程序请求分配内存,那么linux就会选择将其他程序暂时不用的数据交换到物理磁盘上(swap out),等程序要用的时候再读 ...
- 在windows和linux下如何查看80端口占用情况?是被哪个进程占用?如何终止等
一.在windows下如何查看80端口占用情况?是被哪个进程占用?如何终止等 这里主要是用到windows下的DOS工具,点击"开始"--"运行",输入&quo ...
- linux 下 取进程占用内存(MEM)最高的前10个进程
# linux 下 取进程占用 cpu 最高的前10个进程ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head # linux 下 取进程占用内存 ...
- 【转】Linux 下取进程占用 cpu/内存 最高的前10个进程
# Linux 下 取进程占用 cpu 最高的前10个进程ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head # linux 下 取进程占用内存 ...
- Linux-PAM(Linux下的密碼認證和安全机制)系統管理員指南(中文版)
he Linux-PAM 系统管理员指南作者:Andrew G. Morgan, morgan@linux.kernel.org翻译:孙国清(Thomas Sun),thomassun@yeah.ne ...
- linux下查看进城(ps)的方法 与 杀死进程(kill)的N种方法
PS查看进程 inux上进程有5种状态: 1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3. 不可中断(收到信号不唤醒和不可运行, 进程必 ...
- linux 下取进程占用 cpu/内存 最高的前10个进程
linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ;|head linux下获取占用内存资源最多的10个进程,可以使用如下命令组合: ;|head 命令组合解析(针对CPU的,M ...
- 调整swap分区大小-Linux下安装Oracle时报swap不够解决方法
调整swap分区大小 方法一:如果磁盘有剩余的空间,用分区工具新建一个swap分区.并写到/etc/fstab里面.再 #swapon -a方法二:可以用一个文件做交换分区. su root cd / ...
- Linux下Tomcat的启动和停止(包括杀死tomcat进程)
打开终端 cd /java/tomcat #执行 bin/startup.sh #启动tomcat bin/shutdown.sh #停止tomcat tail -f logs/catalina.ou ...
随机推荐
- 【7.24校内交流赛】T1&T2
T1: 一个脑洞很大的题,将输入的所有数异或起来输出就好了: (话说我为什么这么喜欢用异或啊) #include<bits/stdc++.h> using namespace std; i ...
- Django创建mysql数据表流程
在Django项目建好后,在setting.py中设置好mysql连接参数: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysq ...
- 关系型数据库为什么喜欢使用B+树作为索引结构? (转)
问题1. 数据库为什么要设计索引? 图书馆存了1000W本图书,要从中找到<架构师之路>,一本本查,要查到什么时候去? 于是,图书管理员设计了一套规则: (1)一楼放历史类,二楼放文学类, ...
- vue eslint 规范配置
vue eslint 规范配置 为了代码格式统一,避免一些低级或者不合理的错误,现强行使用eslint的 standard规范 项目配置 目前都是使用 vue 提供的脚手架进行开发的,虽然 vue-c ...
- 计算机系统结构总结_Memory Hierarchy and Memory Performance
Textbook: <计算机组成与设计——硬件/软件接口> HI <计算机体系结构——量化研究方法> QR 这是youtube上一个非常好的memory syst ...
- 关于微信小程序 modal弹框组件的介绍
微信小程序 modal: 这里对微信小程序中 modal组件进行详细解析,我想开发微信小程序的小伙伴可以用到,这里小编就记录下modal的知识要点. modal modal类似于javascript中 ...
- 微信小程序css篇----flex模型
一.Flex布局是什么? Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为Flex布局. .box{displ ...
- PHP获取当前服务器详细信息
最近正在用PHP写一个企业级的CMS,后台需要用到PHP获取当前服务器的详细信息以及相关系统参数信息,整理了整理,现在贴这儿,以备后用. 获取系统类型及版本号: php_uname() (例:W ...
- vue 项目报错,提示:Cannot read property '$createElement' of undefined at render ...
vue 项目报错,提示:Cannot read property '$createElement' of undefined at render ...
- JAVA中自定义properties文件介绍
Gradle中的使用 1. 使用gradle.properties buid.gradle 和 gradle.properties可以项目使用,在同一个项目中,build.gradle可以直接获取其同 ...