OOM killer "Out of Memory: Killed process" SOLUTIONS / SUMMARY

作者:sealinger 发布时间:December 20, 2010 分类:混口饭吃

水平有限,这只是sealinger自己的笔记。

原文作者:Eric Sisler <esisler westminster lib co us>

原文链接:http://www.redhat.com/archives/taroon-list/2007-August/msg00006.html

由于这个问题似乎在不同的邮件列表中出现,我已经将此消息张贴到红帽一般性讨论列表了,RHEL3(Taroon)和RHEL4(Nahant)列表。很抱歉我没有时间来更早的发布它。

通常,在大内存(6Gb+)服务器上,out of memory killer (oom-killer)也会杀死进程。在很多case中,人们都困惑地报告说还有剩余内存的情况下,为何oom-killer还会杀死进程?现象是在 /var/log/messages 日志中,有如下信息:

  Out of Memory: Killed process [PID] [process name].

在我自己的case中,我在VMware中升级了各个RHEL3到RHEL4,有1个16Gb内存的服务器,还是会被oom-killer杀死进程。不用说,这非常令人沮丧。

事实证明,这个问题的原因是low memory耗尽。引用Tom的话“内核使用low memory来跟踪所有的内存分配,这样的话一个16GB内存的系统比一个4GB内存的系统,需要消耗更多的low memory,可能有4倍之多。这种额外的压力从你刚启动系统那一刻就开始存在了,因为内核结构必须为潜在的跟踪四倍多的内存分配而调整大小( The kernel uses low memory to track allocations of all memory thus a system with 16GB of memory will use significantly more low memory than a system with 4GB, perhaps as much as 4 times. This extra pressure happens from the moment you turn the system on before you do anything at all because the kernel structures have to be sized for the potential of tracking allocations in four times as much memory)”。

有两种方法查看 low memory 和 high memory 的状态:


# egrep 'High|Low' /proc/meminfo
HighTotal:     5111780 kB
HighFree:         1172 kB
LowTotal:       795688 kB
LowFree:         16788 kB

# free -lm
             total       used       free     shared    buffers     cached
Mem:          5769       5751         17          0          8       5267
Low:           777        760         16          0          0          0
High:         4991       4990          1          0          0          0
-/+ buffers/cache:        475       5293
Swap:         4773          0       4773

当low memory耗尽,不管high memory剩余多少,oom-killer都开始杀死进程,以保持系统的正常运转。

有两种方法解决这个问题:


1、如果可能,请升级到64位系统。

这是最好的解决办法,因为所有的内存都将成为low memory。如果你在这种情况下耗尽了low memory,那就真的是out of memory了。:-)

2、如果受限于必须使用32位系统,最好的解决办法是使用hugemem内核。

这种内核以不同的方式分割low/high memory,而且在大多数情况下会提供足够多的low memory到high memory的映射(This kernel splits low/high memory differently, and in most cases should provide enough low memory to map high memory)。在大多数案例中,这是一个很简单的修复方法:安装hugemem kernel RPM包,然后重启即可。

如果运行hugemem内核也不可能,你可以尝试将 /proc/sys/vm/lower_zone_protection 的值设置为250甚至更多。这将让内核愿意保护low memory,从而在分配内存时多考虑从high memory分配(This will cause the kernel to try to be more aggressive in defending the low zone from allocating memory that could potentially be allocated in the high memory zone.)。据我所知,此选项从2.6.x内核才开始可用。必要的是,您可能需要通过一些实验来找到您系统环境中最适合的值。可以使用下面方法快速的设置和检查改值:

  # cat /proc/sys/vm/lower_zone_protection
  # echo "250" > /proc/sys/vm/lower_zone_protection

在 /etc/sysctl.conf 中加入设置,以便启动就生效:
  vm.lower_zone_protection = 250

作为最后的努力,你可以关闭oom-killer。这个选项可以导致系统挂起,所以请小心使用(风险自负)!

查看当前oom-killer的状态:

  # cat /proc/sys/vm/oom-kill

关闭/打开oom-killer:
  # echo "0" > /proc/sys/vm/oom-kill
  # echo "1" > /proc/sys/vm/oom-kill

加入到 /etc/sysctl.conf,以便启动就生效:
  vm.oom-kill = 0

当进程该被oom-killer杀死却没有被杀死时,相关信息会记录到 /var/log/messages:
  "Would have oom-killed but /proc/sys/vm/oom-kill is disabled"

很抱歉啰嗦多了。我希望它能帮助到那些正在被该问题困扰的人们。

--Eric

翻译完毕,有些句子实在难理解,把原文贴在后面了。

=========再引用些支付宝牛人的文字:==============

http://www.dbanotes.net/database/linux_outofmemory_oom_killer.html

说白了 OOM Killer 就是一层保护机制,用于避免 Linux 在内存不足的时候不至于出太严重的问题,把无关紧要的进程杀掉,有些壮士断腕的意思。

先要学习点老知识,在 32 位CPU 架构下寻址是有限制的。Linux 内核定义了三个区域:

# DMA: 0x00000000 -  0x00999999 (0 - 16 MB)
# LowMem: 0x01000000 - 0x037999999 (16 - 896 MB) - size: 880MB
# HighMem: 0x038000000 - <硬件特定>

LowMem 区 (也叫 NORMAL ZONE ) 一共 880 MB,而且不能改变(除非用 hugemem 内核)。对于高负载的系统,就可能因为 LowMem 利用不好而引发 OOM Killer 。一个可能原因是 LowFree 太少了,另外一个原因是 LowMem 里都是碎片,请求不到连续的内存区域【根据我遇到的一个案例,一个猜想是 有些应用一次性请求比较大的内存,恰恰又是 880M 之内的,空闲的(LowFree)不够大,就会触发 OOM Killer 出来干活】。检查当前 LowFree 的值:
# cat /proc/meminfo |grep LowFree

检查LowMem内存碎片:
# cat /proc/buddyinfo

上面这条命令要在 2.6 Kernel 环境下有效。据说使用 SysRq 的方式更好,不过 Hang 的时候再用吧。参见 Metalink Note:228203.1 。

根据一些文档描述,OOM Killer 在 2.4 与 2.6 上表现是不一样的。2.4 的版本中是把新进来(新申请内存)的进程杀掉。而 2.6 上是杀掉占用内存最厉害的进程(这是很危险的,很容易导致系统应用瘫痪)。

对于 RHEL 4 ,新增了一个参数: vm.lower_zone_protection 。这个参数默认的单位为 MB,默认 0 的时候,LowMem 为 16MB。建议设置 vm.lower_zone_protection = 200 甚至更大以避免 LowMem 区域的碎片,是绝对能解决这个问题的(这参数就是解决这个问题出来的)。

而对于 RHEL 3 (Kernel 2.4) 似乎没什么好办法,一个是用 Hugemem 内核(天知道会不会引入新的毛病),一个是升级到 2.4.21-47 并且使用新的核心参数 vm.vm-defragment 控制碎片的数量。再就是使用 RHEL 4 (Kernel 2.6),这又绕回去了。说白了,如果遇到 OOM Killer ,基本上是低版本 Kernel 设计上有点缺陷。

=================================================

《让子弹飞》很不错,推荐!

作者:sealinger 发布时间:December 18, 2010 分类:简单生活

两个多小时,算是国产大片了,节奏快,语言流畅,还很搞笑,值得一看!

 

单车被偷了

作者:sealinger 发布时间:December 15, 2010 分类:简单生活

才买了一个多月的单车被偷了,早上停车的时候就预感到了,只有一句话,真是麻辣隔壁啊!

施工——原来停单车的地方不能停了——不让搬上楼——只能停大厦前面路边——这地方没人看守——地方小停满了——犹豫了半天还是停在了最靠边上——这“靠边”还远离了车辆放行杆的师傅——降温下雨——在公司吃饭晚走,这一切的一切,都给小偷创造了机会和时间,MD。。。早有预谋一般!

考驾照科目一理论题易错题整理

作者:sealinger 发布时间:December 12, 2010 分类:都学杂了

本文的意图不是让您答满分,而是真心希望大家认真学习交通规则,在任何情况下做到主动礼让,不做“马路杀手”:“一个合格的驾驶人,不仅表现在技术的娴熟上,更重要的是应该具有良好的驾驶行为习惯和道德修养”。

建议:交通标志认真看,交通警察手势认真学,本文不做整理。

声明:解答基本来源于网上搜索,明者自辨,推荐网站( http://bbs.jsyks.com )。

1) 交通信号灯红灯亮时,车辆前轮不得超越停车线。

 正确答案:对。( 这个线有停车线和停止线,如果是停止线就是保险杠都不能超过,如果是停车线就是车轮不能超过,注意看清题目。)

 

(一条实线是停止,两条实线是停车让行,两条虚线是减速让行)

2) 机动车通过没有交通信号灯控制也没有交通警察指挥的交叉路口,相对方向行驶的右转弯的机动车让左转弯的车辆先行。

 正确答案:对。

             |    对   ‖        |
             |    方   ‖        |
             |    行   ‖        |
             |    驶   ‖        |
             |    方   ‖        |
             |    向   ‖        |
             |    ↓    ‖         |
-----------           ‖         -----------------

==============================

----------           ‖   ↑        -----------------
             |         ‖   我    |
             |         ‖   们    |
             |         ‖   行    |
             |         ‖   驶    |
             |         ‖   方    |
             |         ‖   向    |

你们好笨啊,左转弯的车如果让右转弯的车就妨碍交通秩序了,左转弯的车若停下来,就挡住了右路来的车,而右转弯的车停下来,就只有他后面的车要等他,明白?如果你们不明白,就是我的能力有限啦。。。

3) 转向失控后,若车辆偏离直线行驶方向,应 ( D ),使车辆尽快减速停车。

A.轻踏制动踏板
B.拉紧驻车制动器操纵杆
C.迅速抢挡减速
D.果断地连续踩踏、放松制动踏板

正确答案:D(注意本题不是“C”,应该只有丰富驾驶经验的人士能深刻理解了)

4)高速行驶的车辆,在转向失控的情况下使用紧急制动,很容易造成___B___。A、侧滑
B、翻车
C、车厢前移
D、爆胎
 

5)自动挡汽车在平路行驶时使用“L”挡。

正确答案:错

6)自动挡汽车在陡坡行驶时使用“L”挡。

正确答案:对 ( 偶 在书上 看到的,一字一字打进去的:)

 P 档(驻车档):驻车、启动发动机时应在的档位。
 R 档(倒车档):倒车时用。
 N档(空  档):不传递动力,但在这个位置可以移动。
 D 档(驱动档):用于正常行驶。
 L档(低速档):陡坡行驶时用。
 2 档(二  档):一般坡路行驶时使用。
 OD档(超速档):车辆以高于规定的速度行驶,不仅可以节省燃料,还可以降低噪音。

7)变更车道时,应开启转向灯,迅速驶入侧方车道。

正确答案:错 (“迅速”二字是错的。应开启转向灯,觀察後方車輛待可駛入時緩慢駛入)

8)造成交通事故后逃逸,尚不构成犯罪的,公安交通管理部门除按照规定罚款外,还可以并处___A___。A、15日以下拘留
B、吊销驾驶证
C、扣留车辆
D、扣留行驶证

《中华人民共和国道路交通安全法》第九十九条 有下列行为之一的,由公安机关交通管理部门处二百元以上二千元以下罚款:
(三)造成交通事故后逃逸,尚不构成犯罪的;
行为人有前款第一项、第三项、第五项至第八项情形之一的,可以并处十五日以下拘留。因此选择A。

9)造成交通事故后逃逸的,由公安机关交通管理部门吊销机动车驾驶证,且终生不得重新取得机动车驾驶证。

正确答案:对

(我的理解:首先,造成交通事故后逃逸的,无论是否构成犯罪,驾驶证都要被吊销,且终生不得重新取得;其次,如不构成犯罪,可视情况决定罚款还是拘留,或既罚款又拘留。)

10)违反交通管制的规定强行通行,不听劝阻的,公安交通管理部门除按照规定罚款外,还可并处___C___。

A、扣留机动车
B、吊销驾驶证
C、15日以下拘留
D、扣留行驶证

正确答案:C(是驾驶人有问题,而不是驾驶技术有问题,所以扣人不扣证?)

行为人有第二项、第四项情形之一的,可以并处吊销机动车驾驶证;有第一项、第三项、第五项至第八项情形之一的,可以并处十五日以下拘留。

第九十九条 有下列行为之一的,由公安机关交通管理部门处二百元以上二千元以下罚款:

   (一)未取得机动车驾驶证、机动车驾驶证被吊销或者机动车驾驶证被暂扣期间驾驶机动车的;
   (二)将机动车交由未取得机动车驾驶证或者机动车驾驶证被吊销、暂扣的人驾驶的;
   (三)造成交通事故后逃逸,尚不构成犯罪的;
   (四)机动车行驶超过规定时速百分之五十的;
   (五)强迫机动车驾驶人违反道路交通安全法律、法规和机动车安全驾驶要求驾驶机动车,造成交通事故,尚不构成犯罪的;
   (六)违反交通管制的规定强行通行,不听劝阻的;
   (七)故意损毁、移动、涂改交通设施,造成危害后果,尚不构成犯罪的;
   (八)非法拦截、扣留机动车辆,不听劝阻,造成交通严重阻塞或者较大财产损失的。

11)将机动车交由未取得机动车驾驶证的人或机动车驾驶证被吊销、暂扣的人驾驶的, 由公安交通管理部门处200元以上2000元以下罚款,还可以并处______。

A、15日以下拘留
B、吊销驾驶证
C、扣留车辆
D、扣留行驶证

正确答案:B

12)机动车驾驶人将机动车交由未取得机动车驾驶证的人驾驶的,依法扣留机动车驾驶证。

正确答案:对

我自己记住这个题的方法是:
1、如果你将机动车交给“驾驶证被吊销或扣留驾驶证的人驾驶”(这里有吊销两个字),那么就选“吊销你的驾驶证”。
2、如果你将把机动车交给“未取得驾驶证的人驾驶”(这里面没有吊销或扣留两个字),那么就选“扣留你的驾驶证”!

13)车辆撞击无法避免时,驾驶人应当尽力避免侧面相撞。

正确答案:对 (因为正面有保险杠,汽车厂家对正面相撞的设计比较多,经撞;侧面相撞车门很薄,且容易引起翻车等更严重的后果)

14)侧面碰撞部位发生在驾驶座部位时,应迅速设法跳车。

正确答案:错(因为是在驾驶座部位,跳车可能会被相向来的车撞到,所以不能跳,要将身体向右边副座靠)

15)检查离合器踏板时,应将踏板踏到底,检查踏板与车厢板之间的间隙是否合适。

正确答案:错(这是检查制动踏板的方法)

检查离合器 :用力踏离合器踏板,感受一下用力和以往是否有所不同,踏板能否顺利回位.
(检查离合器踏板时,应将踏板踏到底,检查离合器踏板自由行程是否合适。).

检查制动踏板:踩到底,检查制动踏板与与车厢板之间的间隙是否合适.

16)移动脊柱骨折的伤员,切勿扶持伤者走动,可用软担架运送。

正确答案:错(不能用软的,用硬的)

17)伤员骨折处出血时,应先固定,然后止血和包扎伤口

正确答案:错(应先止血)

18)伤员上肢骨折固定时,肢体要伸直捆绑。

正确答案:错

上肢 要弯曲固定 ,伸直不利血液运输。
下肢 要伸直固定,弯曲行走易造成二次受伤。

19)遇伤者被压于车轮或货物下时,应迅速将伤者拖出。

正确答案:错(应迅速将压在伤者身上的货物搬移,勿轻易移动伤者)

20)在山区冰雪道路上行车,遇有前车正在爬坡时,后车应___A___。

A、选择适当地点停车,等前车通过后再爬坡
B、迅速超越前车
C、低速爬坡
D、紧随其后爬坡

正确答案:A (防止汽车溜滑下来)

21)机动车驶离高速公路前,距出口___B___处,即应不得再超越前车、向右变更车道,而应提前做好驶出准备。A、2Km
B、1Km
C、500m
D、出现减速车道处

正确答案:1km处不准超车,500m处开启转向灯。最后,出题人有病。

22)在高速公路行驶中,发现前方有人或动物突然横穿时,应______。

A、迅速采取紧急制动
B、迅速向右转向避让
C、果断采取损失小的避让措施
D、迅速向左转向避让

正确答案:C

23)行车中制动突然失灵时,驾驶人要沉着镇静,握紧转向盘,______进行减速。

A、连续踩踏制动踏板
B、利用“抢挡”或驻车制动
C、迅速踏下离合器踏板
D、迅速拉紧驻车制动器操纵杆

正确答案:B

24)机动车在夜间行驶,没有路灯或路灯照明不良时,应当开启______、示廓灯和后位灯。

A、转向灯    
B、雾灯
C、危险报警闪光灯
D、前照灯

正确答案:D

25)行车制动器的作用是使停驶的车辆保持不动。

正确答案:错(这是驻动制动器的作用;行车制动器就是脚刹,驻车制动器俗称手刹)

26)车速较高时发生紧急情况,应先转方向避让,再采取制动减速,以减小碰撞损坏程度。

正确答案:错

在较高的车速情况下,转方向会造成车辆失控,损失会更大。
正确的方法是先采取制动减速再转方向避让,以减小损坏程度。

27)在暴雨天气驾车,刮水器无法刮净雨水时,应当____。

A、减速行驶
B、集中注意力谨慎驾驶
C、立即减速靠边停驶
D、以正常速度行驶

正确答案:C

28)最容易发生侧滑的路面是______。

A、干燥水泥路面
B、下雨开始时的路面
C、潮湿水泥路面
D、大雨中的路面

正确答案:B (有泥易滑,再下雨泥就被冲刷掉了)

司机在雨季必须注意: 避免紧急制动或制动过猛。雨天路面上,由于有水使轮胎附着系数下降,特别是刚下雨时,由于水与路面上的泥土混合,附着系数会更低,增加车辆的侧滑。因此,行车时要有预见性地控制车速,千万不能使用紧急制动。

29)调节座椅头枕高度,使头枕中心______。

A.抵住脖子
B.与颈平齐
C.与头平齐
D.抵住颈椎

正确答案:C

具体是这样的:在发生追尾时,前车因受到后车向前的撞击而突然加速,人体因坐在座椅上所以同汽车一起加速,而头部则因具有惯性而保持原运动状态。这样一来因为有个速度差所以头会向后仰,很容易伤及颈椎。而有头枕以后头部便会和身体一起加速,使其整体仍然相对静止,避免伤害。