首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CentOS8上的mariadb oom杀手在EC2 t2中的应用

CentOS8上的mariadb oom杀手在EC2 t2中的应用
EN

Server Fault用户
提问于 2021-04-09 12:24:41
回答 1查看 510关注 0票数 0

我的t2中似乎有内存问题。运行nginx、mariadb、php和WordPress的微实例(1GB)。

我可以看到mariadb.service经常被杀死(我在下面使用了grep -e kill /var/log/messages示例输出)。正如你所看到的,mysqld正在杀死mariadb (这不是自杀吗?)

我尝试过各种针对mariadb的调整和调优,但我认为这是一个更全面的系统问题。

当“崩溃”发生时,我无法隔离。当我切换到一个新的区域(提示一个dbase调用)时,我可以很高兴地登录到WordPress管理,并且站点挂起。SSH连接也同时挂起。

T2是不够强大吗?

代码语言:javascript
复制
Apr  9 11:22:32 ip-172-31-20-68 systemd[1]: mariadb.service: Main process exited, code=killed, status=9/KILL
Apr  9 11:23:25 ip-172-31-20-68 kernel: mysqld invoked oom-killer: gfp_mask=0x6200ca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0
Apr  9 11:23:25 ip-172-31-20-68 kernel: oom_kill_process.cold.28+0xb/0x10
Apr  9 11:23:25 ip-172-31-20-68 kernel: oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/system.slice/mariadb.service,task=mysqld,pid=6383,uid=27
Apr  9 11:23:25 ip-172-31-20-68 systemd[1]: mariadb.service: Main process exited, code=killed, status=9/KILL
Apr  9 11:27:04 ip-172-31-20-68 kernel: tuned invoked oom-killer: gfp_mask=0x6200ca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0
Apr  9 11:27:04 ip-172-31-20-68 kernel: oom_kill_process.cold.28+0xb/0x10
Apr  9 11:27:04 ip-172-31-20-68 kernel: oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/system.slice/mariadb.service,task=mysqld,pid=6483,uid=27
Apr  9 11:27:51 ip-172-31-20-68 NetworkManager[928]: <info>  [1617967671.1410] manager: rfkill: Wi-Fi enabled by radio killswitch; enabled by state file
Apr  9 11:27:51 ip-172-31-20-68 NetworkManager[928]: <info>  [1617967671.1411] manager: rfkill: WWAN enabled by radio killswitch; enabled by state file
Apr  9 12:04:48 ip-172-31-20-68 kernel: mysqld invoked oom-killer: gfp_mask=0x6200ca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0
Apr  9 12:04:48 ip-172-31-20-68 kernel: oom_kill_process.cold.28+0xb/0x10
Apr  9 12:04:48 ip-172-31-20-68 kernel: oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/system.slice/mariadb.service,task=mysqld,pid=1746,uid=27
Apr  9 12:04:48 ip-172-31-20-68 systemd[1]: mariadb.service: Main process exited, code=killed, status=9/KILL
Apr  9 12:06:04 ip-172-31-20-68 kernel: tuned invoked oom-killer: gfp_mask=0x6200ca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0
Apr  9 12:06:04 ip-172-31-20-68 kernel: oom_kill_process.cold.28+0xb/0x10
Apr  9 12:06:04 ip-172-31-20-68 kernel: oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/user.slice/user-1000.slice/session-3.scope,task=dnf,pid=1982,uid=0
Apr  9 12:08:30 ip-172-31-20-68 kernel: php-fpm invoked oom-killer: gfp_mask=0x6200ca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0
Apr  9 12:08:31 ip-172-31-20-68 kernel: oom_kill_process.cold.28+0xb/0x10
Apr  9 12:08:31 ip-172-31-20-68 kernel: oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/system.slice/mariadb.service,task=mysqld,pid=2126,uid=27
Apr  9 12:08:31 ip-172-31-20-68 systemd[1]: mariadb.service: Main process exited, code=killed, status=9/KILL
EN

回答 1

Server Fault用户

回答已采纳

发布于 2021-04-09 12:58:56

OOM杀手是一个内核函数,它代表当前分配内存的进程进行操作。这可以是被选择用来释放内存的相同进程。

选择规则通常选择具有最大的匿名内存映射(即对内存映射文件进行贴现)到物理页(即交换或从未写入的折扣内存)的进程。

通常可以以牺牲性能为代价对数据库进行调优以使用更少的内存,而且我还期望默认的调优假设数据库服务器是一台专用机器,并且应该将其所有资源用于此单个任务,这不是您在这里要做的。

因此,这里有多种途径:

  1. 运行一个专用于数据库的单独VM。
  2. 调优数据库设置以减少内存
  3. 使用更大的VM

数据库通常擅长适应现有内存的多少,并将其用于查询优化器已知的缓存,这些缓存可能是成本计算的一部分(与不可预测的OS级磁盘缓存不同),因此要么将其限制在为其他软件留出足够空间的值上,要么确保没有其他软件需要空间就能很好地解决这个问题。

如果这仍然不够,您将需要一个更大的VM。

添加交换空间是没有帮助的,因为它使数据库内部缓存的访问时间不可预测,因此数据库将开始创建次优的查询计划,因为它假设数据被缓存,访问内存中的副本将比从磁盘重新加载数据更快--但是在VM上为I/O付费的交换空间也不是一个好主意。

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1059879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档