AWS免费层EC2实例中MariaDB服务自动停止问题求助
问题原因分析
核心原因是1GB内存的EC2实例资源不足,默认配置的LAMP组件(Apache、PHP、MariaDB)会占用大量内存,当系统剩余内存耗尽时,Linux的OOM Killer(内存不足进程杀手)会自动终止内存占用最高的进程,而MariaDB(mysqld)通常是内存消耗大户,因此会被优先终止。
排查验证步骤
先确认是否是OOM Killer导致的服务停止:
- 查看系统日志:
如果输出中包含dmesg | grep -i "out of memory" # 或者 cat /var/log/messages | grep -i oommysqld被终止的记录,即可确认是内存不足触发的OOM。
解决办法
一、精准优化MariaDB内存配置
针对1GB内存实例,大幅削减MariaDB的内存分配,修改/etc/my.cnf(或/etc/mysql/my.cnf,依系统而定):
[mysqld] # InnoDB缓冲池,1GB内存建议设为128M-256M innodb_buffer_pool_size = 128M # 降低单连接内存占用 sort_buffer_size = 64K read_buffer_size = 64K read_rnd_buffer_size = 64K join_buffer_size = 64K # 限制最大连接数,避免连接过多耗尽内存 max_connections = 50 # 关闭已废弃的查询缓存 query_cache_type = 0 query_cache_size = 0 # 关闭不必要的性能统计 performance_schema = OFF
修改后重启MariaDB:
systemctl restart mariadb
二、优化Apache资源占用
调整Apache的MPM(多处理模块)配置,限制进程数以降低内存消耗:
- 编辑
/etc/httpd/conf.modules.d/00-mpm.conf,确保启用prefork模块(注释掉其他MPM模块):LoadModule mpm_prefork_module modules/mod_mpm_prefork.so # LoadModule mpm_worker_module modules/mod_mpm_worker.so # LoadModule mpm_event_module modules/mod_mpm_event_module.so - 在
/etc/httpd/conf/httpd.conf末尾添加:<IfModule mpm_prefork_module> StartServers 2 MinSpareServers 2 MaxSpareServers 5 MaxRequestWorkers 20 MaxConnectionsPerChild 1000 </IfModule> - 重启Apache:
systemctl restart httpd
可选:换成Nginx替代Apache,内存占用会降低50%以上
三、添加Swap分区缓解内存压力
给实例创建1GB的Swap文件,作为内存的临时补充:
# 创建Swap文件 fallocate -l 1G /swapfile # 设置权限 chmod 600 /swapfile # 格式化Swap mkswap /swapfile # 启用Swap swapon /swapfile
设置开机自动挂载Swap:
编辑/etc/fstab,添加一行:
/swapfile swap swap defaults 0 0
四、优化PHP-FPM配置(如果使用)
修改/etc/php-fpm.d/www.conf,限制PHP进程数量:
pm = dynamic pm.max_children = 10 pm.start_servers = 2 pm.min_spare_servers = 2 pm.max_spare_servers = 5
重启PHP-FPM:
systemctl restart php-fpm
五、监控资源消耗
- 用
htop实时查看内存、CPU占用,定位资源消耗最高的进程; - 用
mysqladmin status查看MariaDB的连接数、线程数,确认是否存在异常连接。
内容的提问来源于stack exchange,提问作者Dhirender
相关产品推荐
相关产品推荐

