linux服务器lowmem不足引起系统崩溃的解决
来源:互联网 发布:双立人去味皂淘宝 编辑:程序博客网 时间:2024/03/29 06:10
近日,一台linux的mq服务器频繁发生队列管理器被异常终止的情况,查看mqlog得知mq关键进程被异常终止,查看/var/log/messgaes中的信息得知,mq进程被oom-killer杀掉。但该服务器内存空余一直很多,遂进行进一步分析。
linux将内存分为DMA区、lowmem区及highmem区(zone),其中dma区及lowmem区的大小默认是固定的。经过对于日志的仔细分析,及使用free -lm命令分区域查看系统剩余内存,发现lowmem剩余不足20M,虽然highmem剩余很多,但是由于许多kernel程序只能在lowmem中运行,当lowmem剩余不多时,也会触发oom-killer来杀掉一部分进程保证系统的正常运行。这也是我们机器上出现的情况。
需要注意的是,当看到日志中关于oom-killer的报错时,很多文章建议在oom-killer的参数上做文章,如改变overcommit_memory和overcommit_ratio的值,等等。但是此处的问题不是还有内存的情况下被overcommit了,而是lowmem确实不足了,因此并不适用,如果一不注意改了后果可能十分严重。(顺便提一下有篇关于overcommit的很好的文章, http://url.cn/Duklig )。
针对lowmem不足的问题,主要有以下三种解决方案:
1、升级至64位系统,64位系统中,所有内存都被划分为lowmem,彻底解决了lowmem不足的问题,可惜我们服务器由于客观条件限制,无法进行该项升级;
2、升级至hugemem内核,可以将lowmem的范围扩大,这也是redhat推荐的方法(http://url.cn/BJD0w7),但对于我们的sles来说同样不适用;
3、更改系统配置,将更多的程序分配至highmem区,这是目前状态下最好的方法了。在不同版本的内核上该文件不同,如 lower_zone_protection或者lowmem_reserve_ratio等,在我们的机器上为后者。使用echo命令将新的参数写入即可。
需要注意的是lowmem_reserve_ratio参数的含义。当发起内存请求时,系统会从低段区域开始,逐级尝试进行内存分配(这句属于看了官方文档后的个人理解,个人认为原因是为了充分利用内存空间,避免出现高位内存被大量使用,而低位内存没有使用的浪费情况)。会将该区的水印值(watermark,含义暂时没查清楚,待完善)与protection值相加,如果free pages小于该数值,则不在该区域进行内存分配,会被依次向更高区域申请。而protection数值就是由lowmem_reserve_ratio数值来计算的,计算方法为该区域以上所有区域内存总页数除以lowmem_reserve_ratio的数值。也就是,排除掉watermark因素之后,lowmem_reserve_ratio的数值为权衡时所使用的当前区域以上区域内存的比例。显然是该数值越低,则protection值越大,则更不容易在当前区域进行分配。
最后,附几个命令:
查看分区域的系统内存情况:
free -l
查看各个zone的protection数值:
cat /proc/zoneinfo | grep "zone\|protection"
写入 lowmem_reserve_ratio数值:
echo "128 128 32" > /proc/sys/vm/lowmem_reserve_ratio
永久更改lowmem_reserve_ratio数值:
编辑 /etc/sysctl.conf 并添加
vm.lowmem_reserve_ratio = 256 512 32
(此处很奇怪,如果将该数组加双引号,则更改无效)
- linux服务器lowmem不足引起系统崩溃的解决
- 如何解决ChemDraw引起的系统崩溃
- 解决TextView引起的莫名崩溃
- Android Lolipop AssetAtlasService引起的系统崩溃
- 使用fsck命令修复linux文件系统错误【避开引起系统崩溃,启动不了的"-a"选项】
- JavaScript使用ACTIVEX控件引起崩溃问题的解决
- 解决DialogFragment连续add引起的Crash崩溃
- JAVA类型转换所引起的系统崩溃
- 关于Linux系统下在使用close关闭串口设备时引起的内核崩溃问题解决方法
- 解决linux磁盘空间不足的问题
- 使用类似linux系统滴答时钟解决定时器不足的问题
- 解决Linux系统因TCP端口不足导致mysql数据库无法访问的问题
- QSqlQuery::next() 引起的崩溃
- 一起 select 引起的崩溃
- 指针引起的崩溃分析
- 解决服务器空间不足 项目发布出错的问题
- 诺顿引起系统崩溃!民间详细解决方案
- msSQL 引起磁盘空间不足的解决方法
- oracle 优化(2)
- Java中类名与文件名的关系
- yii快速入门教程10
- 第9期中国智能家居主题沙龙将于4月18日在京举办
- linux下vi操作Found a swap file by the name
- linux服务器lowmem不足引起系统崩溃的解决
- 指定位数 四舍五入
- yii快速入门教程11
- eclipse下的项目加载mysql驱动
- Android JB的reboot流程
- libvlc简单例子(1.1.0以后版本)vs2008
- Winform-NumericUpDown和ComboBox年月日时联动
- IOS 获取时间
- 用PROCEDURE ANALYSE优化MYSQL表结构