Linux oom MySQL被杀

本文探讨了Linux系统中MySQL因内存不足被系统杀死的问题,分析了系统日志,提出了调整MySQL的oom_score_adj参数以避免被OOM killer选中杀掉的方法,并尝试了减少php-fpm子进程数量作为解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux系统,2G内存,MySQL经常被杀,

查看系统日志:

less /var/log/messages

以下是部分日志内容:

Apr  7 10:24:45 localhost kernel: Out of memory: Kill process 53320 (mysqld) score 93 or sacrifice child
Apr  7 10:24:45 localhost kernel: Killed process 53320 (mysqld) total-vm:1445004kB, anon-rss:16532kB, file-rss:0kB, shmem-rss:0kB
Apr  7 10:24:52 localhost kernel: mysqld invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0
Apr  7 10:24:52 localhost kernel: mysqld cpuset=/ mems_allowed=0
Apr  7 10:24:52 localhost kernel: CPU: 1 PID: 57992 Comm: mysqld Kdump: loaded Not tainted 3.10.0-957.21.3.el7.x86_64 #1
Apr  7 10:24:52 localhost kernel: Hardware name: Red Hat KVM, BIOS 0.5.1 01/01/2011
Apr  7 10:24:52 localhost kernel: Call Trace:
Apr  7 10:24:52 localhost kernel: [<ffffffffa4b63107>] dump_stack+0x19/0x1b
Apr  7 10:24:52 localhost kernel: [<ffffffffa4b5db2a>] dump_header+0x90/0x229
Apr  7 10:24:52 localhost kernel: [<ffffffffa4501292>] ? ktime_get_ts64+0x52/0xf0
Apr  7 10:24:52 localhost kernel: [<ffffffffa45584df>] ? delayacct_end+0x8f/0xb0
Apr  7 10:24:52 localhost kernel: [<ffffffffa45ba834>] oom_kill_process+0x254/0x3d0
Apr  7 10:24:52 localhost kernel: [<ffffffffa45ba2dd>] ? oom_unkillable_task+0xcd/0x120
Apr  7 10:24:52 localhost kernel: [<ffffffffa45ba386>] ? find_lock_task_mm+0x56/0xc0
Apr  7 10:24:52 localhost kernel: [<ffffffffa45bb076>] out_of_memory+0x4b6/0x4f0
Apr  7 10:24:52 localhost kernel: [<ffffffffa4b5e62e>] __alloc_pages_slowpath+0x5d6/0x724
Apr  7 10:24:52 localhost kernel: [<ffffffffa45c1454>] __alloc_pages_nodemask+0x404/0x420
Apr  7 10:24:52 localhost kernel: [<ffffffffa460e308>] alloc_pages_current+0x98/0x110
Apr  7 10:24:52 localhost kernel: [<ffffffffa45b6697>] __page_cache_alloc+0x97/0xb0
Apr  7 10:24:52 localhost kernel: [<ffffffffa45b92f8>] filemap_fault+0x298/0x490
Apr  7 10:24:52 localhost kernel: [<ffffffffc03ce186>] ext4_filemap_fault+0x36/0x50 [ext4]
Apr  7 10:24:52 localhost kernel: [<ffffffffa45e47ea>] __do_fault.isra.59+0x8a/0x100
Apr  7 10:24:52 localhost kernel: [<ffffffffa45e4d9c>] do_read_fault.isra.61+0x4c/0x1b0
Apr  7 10:24:52 localhost kernel: [<ffffffffa45e9744>] handle_pte_fault+0x2f4/0xd10
Apr  7 10:24:52 localhost kernel: [<ffffffffa45ec27d>] handle_mm_fault+0x39d/0x9b0
Apr  7 10:24:52 localhost kernel: [<ffffffffa4b70603>] __do_page_fault+0x203/0x4f0
Apr  7 10:24:52 localhost kernel: [<ffffffffa4b709d6>] trace_do_page_fault+0x56/0x150
Apr  7 10:24:52 localhost kernel: [<ffffffffa4b6ff62>] do_async_page_fault+0x22/0xf0
Apr  7 10:24:52 localhost kernel: [<ffffffffa4b6c798>] async_page_fault+0x28/0x30

调整mysql 的oom_score值。

我们可以在用户空间通过操作每个进程的 oom_adj 内核参数来决定哪些进程不这么容易被 OOM killer 选中杀掉。比如,如果不想 MySQL 进程被轻易杀掉的话可以找到 MySQL 运行的进程号后,调整 oom_score_adj 为 -15(注意 points 越小越不容易被杀)

查看当前mysql 的oom_score值:

cat /proc/$(pidof mysqld)/oom_score

当前配置mysql的值:

cat /proc/$(pidof mysqld)/oom_score_adj

修改配置:

echo '-20' > /proc/$(pidof mysqld)/oom_score_adj

 

先观察观察运行情况吧,不知道是否有用。

参考:https://www.cnblogs.com/luckyall/p/11946943.html

http://blog.chinaunix.net/uid-25206403-id-3549190.html

 

更新:2020.4.8好像不是这个的问题,MySQL再次停止了。

试试减少php-fpm子进程数量,将max_children的值由50改为25。

 

参考:【解决Linux下php-fpm进程过多导致内存耗尽问题】https://www.jb51.net/article/129528.htm

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值