近日,一台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来杀掉一部分进程保证系统的正常运行。这也是我们机器上出现的情况。
需要注意的是,当看到日志中