我的t2中似乎有内存问题。运行nginx、mariadb、php和WordPress的微实例(1GB)。
我可以看到mariadb.service经常被杀死(我在下面使用了grep -e kill /var/log/messages示例输出)。正如你所看到的,mysqld正在杀死mariadb (这不是自杀吗?)
我尝试过各种针对mariadb的调整和调优,但我认为这是一个更全面的系统问题。
当“崩溃”发生时,我无法隔离。当我切换到一个新的区域(提示一个dbase调用)时,我可以很高兴地登录到WordPress管理,并且站点挂起。SSH连接也同时挂起。
T2是不够强大吗?
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发布于 2021-04-09 12:58:56
OOM杀手是一个内核函数,它代表当前分配内存的进程进行操作。这可以是被选择用来释放内存的相同进程。
选择规则通常选择具有最大的匿名内存映射(即对内存映射文件进行贴现)到物理页(即交换或从未写入的折扣内存)的进程。
通常可以以牺牲性能为代价对数据库进行调优以使用更少的内存,而且我还期望默认的调优假设数据库服务器是一台专用机器,并且应该将其所有资源用于此单个任务,这不是您在这里要做的。
因此,这里有多种途径:
数据库通常擅长适应现有内存的多少,并将其用于查询优化器已知的缓存,这些缓存可能是成本计算的一部分(与不可预测的OS级磁盘缓存不同),因此要么将其限制在为其他软件留出足够空间的值上,要么确保没有其他软件需要空间就能很好地解决这个问题。
如果这仍然不够,您将需要一个更大的VM。
添加交换空间是没有帮助的,因为它使数据库内部缓存的访问时间不可预测,因此数据库将开始创建次优的查询计划,因为它假设数据被缓存,访问内存中的副本将比从磁盘重新加载数据更快--但是在VM上为I/O付费的交换空间也不是一个好主意。
https://serverfault.com/questions/1059879
复制相似问题