有一台客户的服务器近期经常遇到数据库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
