添加Swap突发内存缓解内存不足停机问题

麦子
麦子
管理员
1281
文章
0
粉丝
运维技术5字数 441阅读1分28秒阅读模式

有一台客户的服务器近期经常遇到数据库MySQL、Nginx、PHP 轮番的停止工作,然后需要手工重启软件才可以网站正常使用。当前的服务器采用的是宝塔面板架设的,2GB内存,理论上应该是够用的,以前我们很多时候用512M或者1GB内存都可以运行,只能说现在的软件占用比较高。好比我们电脑以前512M内存也够用,现在8-16G是基本。

在不升级服务器的情况下,准备暂时添加突发内存Swap来解决这个问题。以及对于PHP和MySQL并发参数优化缓解。

这里,我们给当前2GB内存的云服务器添加突发内存。

sudo fallocate -l 2G /swapfile

创建Swap文件。如果 fallocate报错,改用:

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048

设置权限:

sudo chmod 600 /swapfile

格式化并且启用:

sudo mkswap /swapfile
sudo swapon /swapfile

设置开机启动:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

检查是否生效:

free -h

这里我用的MariaDB 数据库,参数进行调整:

[mysqld]
# 核心——InnoDB 缓冲池,2G 内存建议 256M~384M
innodb_buffer_pool_size = 256M
innodb_buffer_pool_instances = 1
innodb_log_file_size = 32M

# 限制连接数(防 PHP 疯狂连库)
max_connections = 50
thread_cache_size = 8

# 单连接排序/连接缓冲别设大
sort_buffer_size = 256K
join_buffer_size = 256K
read_buffer_size = 128K
read_rnd_buffer_size = 128K

tmp_table_size = 32M
max_heap_table_size = 32M

# 关闭无用开销
skip_name_resolve = ON
query_cache_type = 0
query_cache_size = 0

PHP进程也设置:

; pm 模式用 dynamic 更省内存
pm = dynamic
pm.max_children = 5        ; ← 关键!2G 内存 WordPress 建议 5~8,绝不超 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 500     ; 防内存泄漏累积

; 超时保护
request_terminate_timeout = 30

 

投上你的一票
 
  • 本文由 麦子 发表于2026年6月23日 09:55:24
  • 转载请务必保留本文链接:https://www.zhujipingjia.com/swap.html