主机内核杀死mysql:5.6容器问题求助(Manjaro Linux)
解决MySQL 5.6容器因OOM被内核杀死的问题
调整MySQL内存配置
MySQL 5.6默认内存配置对容器环境不友好,容易占用过量内存。可通过自定义配置文件限制资源使用:- 在项目目录下创建
.ddev/mysql/my.cnf文件 - 写入以下低内存适配配置:
[mysqld] innodb_buffer_pool_size = 128M key_buffer_size = 32M max_connections = 50 query_cache_size = 16M- 重启容器生效:
ddev restart
- 在项目目录下创建
限制容器内存配额
通过DDEV配置直接约束db容器的内存使用上限:- 编辑项目目录下的
.ddev/config.yaml,添加:
db_image_extra_args: ["--memory=512m", "--memory-swap=1g"]- 重启容器:
ddev restart
- 编辑项目目录下的
排查主机内存状态
先确认主机内存是否充足:free -h如果可用内存不足,可临时关闭非必要进程,或新增交换空间缓解:
sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile使用优化后的MySQL 5.6镜像
官方mysql:5.6镜像未适配现代容器环境,可自行构建优化后的本地镜像:- 创建Dockerfile:
FROM mysql:5.6 COPY my.cnf /etc/mysql/conf.d/- 构建本地镜像:
docker build -t local-mysql56 . - 修改ddev配置使用本地镜像:在
.ddev/config.yaml中设置db_image: local-mysql56 - 重启容器:
ddev restart
临时调整内核OOM触发策略(谨慎操作)
Manjaro 6.3内核的OOM Killer触发阈值较严格,可临时降低mysqld被优先杀死的概率:- 找到mysqld进程PID:
ps aux | grep mysqld - 修改OOM评分:
echo -1000 | sudo tee /proc/<PID>/oom_score_adj
注意:此设置仅临时生效,重启后会重置,不建议长期依赖。
- 找到mysqld进程PID:
内容的提问来源于stack exchange,提问作者Jonas Eberle
相关产品推荐
相关产品推荐

