低配服务器优化指南 宝塔+WordPress

最近鉴于实在受不了WordPress+PHP的性能,还有服务器的MySQL频繁未知原因宕机重启,整顿一波服务器。

本服务器运行于1C1T1G的配置上,使用

Swap篇

swap即服务器的虚拟内存大小,太小会导致系统杀进程(上述的MySQL频繁停止原因就是此)。若你swap已经正常配置,跳过这一步。

  1. 检查服务器虚拟内存使用情况
%Cpu(s): 41.3 us, 6.0 sy, 0.0 ni, 49.7 id, 2.3 wa, 0.0 hi, 0.0 si, 0.7 st
 
MiB Mem : 961.5 total, 67.9 free, 833.4 used, 204.6 buff/cache 
MiB Swap: 1452.0 total, 1452.0 free, 0.0 used. 128.1 avail Mem

可以看到上面swap使用率为0,说明服务器根本没有尝试压缩内存到swap内,导致WordPress上传文件的时候kswapd0会尝试疯狂换页,导致MySQL被杀死。(下为上传一个文件时的性能情况)

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
     44 root      20   0       0      0      0 R  57.0   0.0   0:08.97 kswapd0
   2014 mysql     20   0  941260 322240   2944 S  12.3  32.7   0:09.34 mysqld
   3169 www       20   0  120552  36784   2432 R   4.6   3.7   0:02.42 php-fpm
    947 www       20   0  151924  28504   2304 R   3.3   2.9   0:00.91 nginx
   2446 root      20   0  247048  12132   2560 S   3.3   1.2   0:01.69 python3
   3168 www       20   0  127208  43780   2304 R   3.3   4.4   0:03.04 php-fpm
   3197 www       20   0   97428  12364   1920 R   2.3   1.3   0:00.21 php-fpm
   2249 root      20   0  426436  73312   2816 R   2.0   7.4   0:05.16 BT-Panel
   3192 root      20   0   38376  21144   2688 R   2.0   2.1   0:00.82 python3
   3200 root      20   0   12392   3456   2304 R   1.7   0.4   0:00.09 sshd
    755 root      20   0   80712   2688   2432 R   1.3   0.3   0:00.49 qemu-ga
   3202 root      20   0   12020   3328   2304 S   1.3   0.3   0:00.09 sshd

解决方案:

cat /proc/sys/vm/swappiness

先用这条指令查看swappiness,若为10或更低就执行:

echo 'vm.swappiness=60' | sudo tee -a /etc/sysctl.conf
// 下面这条命令的=0改成你在cat时看到的swappiness值
sudo sed -i '/vm.swappiness=0/d' /etc/sysctl.conf 
sudo sysctl -w vm.vfs_cache_pressure=100
sudo sysctl -p

之后可以看到系统内存有很明显的缓解。

PHP性能调优

通过限制PHP并发达到控制内存使用,打开PHP的FPM配置文件,找到下列左侧key,分别这么写入:

pm = dynamic
pm.max_children = 2
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 2
pm.max_requests = 100

此法会限制FPM开启的最大进程数。同时在php.ini配置文件中找到memory_limit并修改为:

memory_limit=64M

接下来安装PHP的OPCache扩展:

随后继续打开php.ini,滑倒最底下可以看到新增的OPCache配置内容。

除了zend_extension,可以直接copy本配置到php.ini替换原来的Opcache配置。

[Zend Opcache]
zend_extension=/www/server/php/84/lib/php/extensions/no-debug-non-zts-20240924/opcache.so
opcache.enable = 1
opcache.memory_consumption=64
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
opcache.jit_buffer_size=64m
opcache.jit=1205
opcache.validate_timestamps=1

MySQL优化

如图。注意innodb_buffer_pool_size不能太小,否则性能会出现问题。

end

至此,服务器从原来的响应一个小链接要2~4s,到现在能做到缓存后秒开,可喜可贺,可喜可贺。

发表回复