Linux编程之Linux 的 Out-of-Memory (OOM) Killer仓酷云
功能实在太强了,在配合exec参数或者通过管道重定向到xargs命令和grep命令,可以完成非常复杂的操作,如果同样的操作用图形界面的工具来完成,恐怕要多花十几陪的时间。同事在Linux服务器上碰到点小成绩,我也上往折腾半天。这仍是第一次注重到Linux这个多年来就存在的特征:OOMKiller。说白了OOMKiller就是一层回护机制,用于制止Linux在内存不敷的时分不至于出太严峻的成绩,把可有可无的历程杀失落,有些勇士断腕的意义。
先要进修点老常识,在32位CPU架构下寻址是无限制的。Linux内审定义了三个地区:
#DMA:0x00000000-0x00999999(0-16MB)#LowMem:0x01000000-0x037999999(16-896MB)-size:880MB#HighMem:0x038000000-<硬件特定>LowMem区(也叫NORMALZONE)一共880MB,并且不克不及改动(除非用hugemem内核)。关于高负载的体系,便可能由于LowMem使用欠好而激发OOMKiller。一个大概缘故原由是LowFree太少了,别的一个缘故原由是LowMem里都是碎片,哀求不到一连的内存地区【依据我碰到的一个案例,一个料想是有些使用一次性哀求对照年夜的内存,恰好又是880M以内的,余暇的(LowFree)不敷年夜,就会触发OOMKiller出来干活】。反省以后LowFree的值:
#cat/proc/meminfo|grepLowFree反省LowMem内存碎片:
#cat/proc/buddyinfo下面这条命令要在2.6Kernel情况下无效。听说利用SysRq的体例更好,不外Hang的时分再用吧。拜见MetalinkNote:228203.1。
依据一些文档形貌,OOMKiller在2.4与2.6上体现是纷歧样的。2.4的版本中是把新出去(新请求内存)的历程杀失落。而2.6上是杀失落占用内存最凶猛的历程(这是很伤害的,很简单招致体系使用瘫痪)。
关于RHEL4,新增了一个参数:vm.lower_zone_protection。这个参数默许的单元为MB,默许0的时分,LowMem为16MB。倡议设置vm.lower_zone_protection=200乃至更年夜以免LowMem地区的碎片,是相对能办理这个成绩的(这参数就是办理这个成绩出来的)。
而关于RHEL3(Kernel2.4)仿佛没甚么好举措,一个是用Hugemem内核(天晓得会不会引进新的偏差),一个是晋级到2.4.21-47而且利用新的中心参数vm.vm-defragment把持碎片的数目。再就是利用RHEL4(Kernel2.6),这又绕归去了。说白了,假如碰到OOMKiller,基础上是低版本Kernel计划上有点缺点。
别的,假如往查询RedHat的Bug库,会发明很多Kernel版本也有Bug的。特别在利用NFS的场景。
Tip:OOMKiller的封闭与激活体例:
#echo"0">/proc/sys/vm/oom-kill#echo"1">/proc/sys/vm/oom-kill更多参考信息:
[*]1)OOMkiller"OutofMemory:Killedprocess"SOLUTIONS/SUMMARY【对我碰到的案例没鸟用】
[*]2)MetalinkNotes:LinuxKernelLowmemPressureIssuesandKernelStructures
[*]3)RespitefromtheOOMkiller
来自:Linux的Out-of-Memory(OOM)Killer
批评:
jametong的批评:我之前是用过晋级到hugemem的内核版本办理这个成绩的,,体系以后不乱的运转了2年没有出成绩吧..
你们却是也能够尝尝..
我晋级以后利用的版本为..
2.4.21-32.0.1.ELhugemem#1
May27,20089:09AMforcey的批评:我们用的32位体系一向存在这个成绩,880M的限定是为4G以下内存计划的,假如物理内存年夜于4G并翻开PAE的话,LowMem很简单爆失落。假如内核回护得好没有爆失落的话,也会有一年夜片物理内存使用不上。
晋级到64位体系就办理了这个成绩,由于64位体系下一切的内存都是LowMem。
May27,200810:27AMFenng
<br>的批评:@forcey
我这边最初对链接出去的历程数做了把持。“制止”了成绩的再次呈现。临时来看,仍是找个时机晋级到64位呆板上。
May27,200812:26PMZhuang@FUN的批评:昔时,上学时,我们先生就在给我们讲,做我们这一行的(IT),身材情况就没一个无缺的,都是处于亚安康形态,,,,,看来又多了一个,呵呵!~~
哥们可要注重身材哟!!
May27,20082:38PMwhoami的批评:光说这个其实太少.OOM成绩和年夜tmpfs(用多了内存大概会把无辜的X干失落),memorysplit成绩,另有已经的32bit1Glowmempatch(不外如今应当没人用了,作者竟然是ConKolivas:()
May27,20086:32PMFenng
<br>的批评:@whoami
等候你多增补一些嘛
May27,20086:43PMshowuser的批评:这个成绩之前听基盘的伴侣谈起过,说在redhat4上还存在,在redhat5上就修复了。看了你写的发明还不是那样的成绩。
这个呈现过Oracle历程被杀失落的情形。对照可骇。
May27,20088:44PMkissingwolf的批评:03年的时分在做imu项目标时分出过如许的成绩,服务程序有溢出,最夸大的一次是将sshdkill了,招致没法远程登录!
May27,200810:06PM
在linux中学习命令的最好办法是学习Shell脚本编程,Shell脚本比起其他语言来学习简单,但是功能却十分强大.通过学习Shell编程,能让你掌握大量的linux命令。 即便是非英语国家的人发布技术文档,Linux也都首先翻译成英语在国际学术杂志和网络上发表。 Linux简单,占内存少,特别是对于程序开发人员来说很方便,如果说windows的成功在于其方便用户的窗口管理界面。 当然你不需搭建所有服务,可以慢慢来。自己多动手,不要非等着别人帮你解决问题。 即便是非英语国家的人发布技术文档,Linux也都首先翻译成英语在国际学术杂志和网络上发表。 安装一个新的软件时先看README,再看INSTALL然后看FAQ,最后才动手安装,这样遇到问题就知道为什么。如果Linux说明文档不看,结果出了问题再去论坛来找答案反而浪费时间。 甚至目前许多应用软件都是基于它的。可是没有哪一个系统是十分完美的。 熟悉系统的基本操作,Linux的图形界面直观,操作简便,多加上机练习就可熟悉操作,在Linux下学习办公软件等常用软件。 即便是非英语国家的人发布技术文档,Linux也都首先翻译成英语在国际学术杂志和网络上发表。 学习Linux应具备的。[书籍+网络资源] Windows有MS-DOS?方式,在该方式下通过输入DOS命令来操作电脑;Linux与Windows类似,也有命令方式,Linux?启动后如果不执行?X-WINDOWS,就会处于命令方式下,必须发命令才能操作电脑。? 掌握硬件配置,如显卡,声卡,网卡等,硬件只要不是太老或太新一般都能被支持,作为一名Linux系统管理员建议多阅读有关硬件配置文章,对各种不支持或支持不太好的硬件有深刻的了解。 尽我能力帮助他人,在帮助他人的同时你会深刻巩固知识。 说实话小时候没想过搞IT,也计算机了解也只是一些皮毛,至于什么UNIX,Linux,听过没见过,就更别说用过了。? 笔者五分钟后就给出了解决方法: “首先备份原文件到其他目录,然后删掉/usr/local/unispim/unispimsp.ksc,编辑 /usr/local/unispim/unispimsp.ini,最后重启动计算机 为了更好的学习这门课程,我不仅课上认真听讲,课下也努力学习,为此还在自己的电脑上安装了Ubuntu系统。 Linux操作系统这个名词记得在很早以前就听过,但当时并不知道具体是什么样的操作系统,只知道是一个与嵌入式密切相关的操作系统。 另外Linux上也有很多的应用软件,安装运行了这些软件后,你就可以在Linux上编辑文档、图?片,玩游戏、上网、播放多媒体文件等。 任何人都可以根据自己的喜好来定制适合自己的操作系统,Linux?是抢占式多任务多用户操作系统. 随着Linux技术的更加成熟、完善,其应用领域和市场份额继续快速增大。目前,其主要应用领域是服务器系统和嵌入式系统。然而,它的足迹已遍布各个行业,几乎无处不在。
页:
[1]
2