centos oomkiller centos8官网下载教程
Centos修改swappiness
swappines是Linux的一个内核参数,控制系统在进行swap时,内存使用相对权重。
那么系统在进行swap时,系统做了什么?
在Linux系统中,当物理内存不足时,系统会拿出预先设定好的部分硬盘空间当swap分区使用,从而解决内存容量不足的情况。
当某进程向系统请求内存发现不足时,系统会把内存中暂时不用的数据交换出去,放在swap分区中,这个过程称为 swap out。
当某进程又需要这些数据且系统发现还有空闲物理内存时,又会把swap分区中的数据交换回物理内存中,这个过程称为 swap in。
当然,swap大小是有上限的,一旦swap使用完,操作系统会触发OOM-Killer机制,把消耗内存最多的进程kill掉以释放内存。
可以理解为系统在硬盘上设置swap分区,当内存不足了,把这部分硬盘当作内存来用。
swappiness参数值可设置范围在0到100之间。
此参数值越低,就会让Linux系统尽量少用swap分区,多用内存;参数值越高就是反过来,使内核更多的去使用swap空间。
CentOS系统此参数的默认值是30,表示当内存使用超过70%,系统开始使用swap分区。
这里CDH推荐swappiness为10,表示当内存使用率超过90%,系统开始使用swap分区。
或
临时修改,当前系统的swappiness为10,但重启后,系统的swappiness继续恢复默认值。
此方法为永久修改swappiness分区的办法。
Out of memory: Kill process 解决
环境:Centos7
现象:Linux测试服务器上部署了很多程序mysql、mongodb、java等等。程序操作mongodb经常进程被杀死的情况,导致业务中断,mongodb的logs无提示信息。查看系统日志message后,发现对应时间点,系统自动kill掉了mongodb进程,如下
Out of memory: Kill process 5372(mongod) score 130 or sacrifice child
Killed process 5372(mongod), UID 0, total-vm:2539052kB, anon-rss:2117096kB, file-rss:0kB, shmem-rss:0kB
Linux分配内存策略
Linux内核根据应用程序的要求来分配内存,由于进程实际上并不会将分配的内存全部使用,所以,为了提高性能,内核采用了一种过度分配内存(over-commit-memory)的策略,来间接利用进程的空闲内存,提高内存的使用效率。一般来说,这没问题。但如果大多数进程都耗光自己的内存,就有麻烦了。因此此时,所有应用程序的内存之和大于物理内存。所以,必须杀掉一部分进程,一般来说,是选内存占用最大的进程杀掉。
挑选原理
挑选的过程由linux/mm/oom_kill.c里的 oom_badness()函数决定,挑选的算法很直接:是那个最占用内存的进程。
/**
test 2334 1.6 2.1 623800 4876? Ssl 09:52 0:00/usr/sbin/test
0
当然,也可以完全关闭 OOM killer,但线上生产环境最好不要这么做。
OOM_killer是Linux自我保护的方式,当内存不足时不至于出现太严重问题,有点壮士断腕的意味
在kernel 2.6,内存不足将唤醒oom_killer,挑出/proc/<pid>/oom_score最大者并将之kill掉
为了保护重要进程不被oom-killer掉,我们可以:echo-17>/proc/<pid>/oom_adj,-17表示禁用OOM
我们也可以对把整个系统的OOM给禁用掉:
sysctl-w vm.panic_on_oom=1(默认为0,表示开启)
sysctl-p
值得注意的是,有些时候 free-m时还有剩余内存,但还是会触发OOM-killer,可能是因为进程占用了特殊内存地址
平时我们应该留意下新进来的进程内存使用量,免得系统重要的业务进程被无辜牵连
可用 top M查看最消耗内存的进程,但也不是进程一超过就会触发oom_killer
参数/proc/sys/vm/overcommit_memory可以控制进程对内存过量使用的应对策略
当overcommit_memory=0允许进程轻微过量使用内存,但对于大量过载请求则不允许(默认)
当overcommit_memory=1永远允许进程overcommit
当overcommit_memory=2永远禁止overcommit
参考:
linux和centos的区别
linux的一个著名版本是red hat,本来是有个人版本和企业版本,后来个人版本不再开发,改为fedora。而企业版本呢是要收费的。centOS就是red hat企业版本的重写,不要收费的。
所以说centOS是linux操作系统的一个版本。
1、完全可以把CentOS理解为RedHat AS系列!它完全就是对RedHat AS进行改进后发布的!各种操作、使用和RedHat没有区别!
2、CentOS完全免费,不存在像RedHat AS系列那样需要序列号的问题。
3、CentOS独有的yum命令支持在线升级,可以即时更新系统,不像RedHat那样需要花钱购买支持服务!
4、CentOS修正了许多RedHat AS的BUG!
5、CentOS版本说明:
CentOS4.0等同于RedHat AS4
CentOS4.1等同于RedHat AS4 U1
CentOS4.2等同于RedHat AS4 U2
CentOS4.3等同于RedHat AS4 U3
CentOS4.4等同于RedHat AS4 U4
RedHat在发行的时候,有两种方式:二进制的发行方式以及源代码的发行方式。无论是哪一种发行方式,你都可以免费获得(例如从网上下载),并再次发布。但如果你使用了他们的在线升级(包括补丁)或咨询服务,就必须要付费。
RedHat一直都提供源代码的发行方式,CentOS就是将RedHat发行的源代码重新编译一次,形成一个可使用的二进制版本。由于Linux的源代码是GNU,所以从获得RedHat的源代码到编译成新的二进制,都是合法。只是RedHat是商标,所以必须在新的发行版里将RedHat的商标去掉。