Ubuntu 22.04.2 LTS中MariaDB被oom-kill终止,求可行解决方案
MariaDB被OOM-kill终止的解决办法
1. 确认内存使用情况
先排查系统内存状态及OOM触发细节:
- 查看当前内存与swap占用:
free -h - 实时监控内存使用:
htop - 查看系统OOM杀手日志,确认MariaDB被终止时的内存环境:
journalctl -k | grep -i oom
2. 调整MariaDB内存配置(核心解决方法)
默认配置可能超出系统可用内存,针对性修改配置文件:
- 打开MariaDB主配置文件(通常路径):
nano /etc/mysql/mariadb.conf.d/50-server.cnf - 根据系统内存修改关键参数(示例针对2G内存服务器):
innodb_buffer_pool_size = 1G(建议设为物理内存的50%-70%,不超过总内存80%)max_connections = 80(减少冗余连接,避免内存过度占用)tmp_table_size = 64Mmax_heap_table_size = 64M- 无需查询缓存时设置
query_cache_size = 0(新版本已废弃该功能)
- 保存配置后重启服务:
systemctl restart mariadb
3. 设置OOM优先级,避免MariaDB被优先终止
通过systemd调整进程OOM分数,降低被系统查杀的优先级:
- 编辑MariaDB服务配置:
systemctl edit mariadb.service - 在编辑器中添加:
[Service] OOMScoreAdjust=-1000 - 重新加载配置并重启服务:
systemctl daemon-reload systemctl restart mariadb
4. 排查异常查询与连接泄漏
内存耗尽可能由低效查询或连接泄漏导致:
- 登录MariaDB查看当前进程:
定位长时间运行、资源占用高的查询,优化或终止它们。SHOW PROCESSLIST; - 开启慢查询日志定位低效SQL:
在配置文件中添加以下内容后重启服务:
分析慢日志,优化SQL语句或添加索引。slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2
5. 扩展系统内存(终极方案)
若上述调整仍频繁触发OOM,考虑扩展系统内存:
- 增加物理内存(最有效)
- 配置swap交换空间(临时缓解):
编辑# 创建2G swap文件 fallocate -l 2G /swapfile chmod 600 /swapfile mkswap /swapfile swapon /swapfile/etc/fstab添加以下内容,让swap永久生效:/swapfile none swap sw 0 0
内容的提问来源于stack exchange,提问作者Pooja Yadav
相关产品推荐
相关产品推荐

