为proot环境内的WordPress优化访问速度

按照上一篇文章的方法直接在proot环境内搭建Wordpress环境之后,虽然从后台看CPU和内存占用已经非常低了,但实际访问的速度还是很慢。一开始还觉得可能是Cloudflare走到外网绕路的缘故,直到后来尝试了走内网访问后加载网页还是得等个几秒,才想到大概是proot环境内性能受限了。

单请求网页的速度

Apache2和MariaDb经过测试速度都是正常的这边就不放出图片演示了,上方放出的两张图可以看到单个PHP执行的速度就需要1.2秒,由于Wordpress由PHP编写,整体加载速度自然也被严重拖慢了。而在这1.2s中 user+sys 真正处理PHP代码的时间很短,说明瓶颈不在CPU而在proot IO处理上。既然不是CPU的瓶颈那就还有很多优化的方法了,下文也将会提供几种针对此解决方案,收益从高到低可自行选择执行到哪步。

配置OPCache

OPCache在新版本的PHP中一般都已经自带了,这个模块能让执行过的PHP脚本持续缓存在内存中而避免重复的IO读取以提升性能。但有时候可能没有默认开启或是配置还没优化极致,通过调整配置在proot环境下还是能获得显著效果。

编辑php.ini

#php目录可能不同
nano /etc/php/8.4/apache2/php.ini

找到下面的这些功能并修改

opcache.enable=1 - 启用 OPcache

opcache.memory_consumption=256 - 增加到 256MB(原 128MB)
opcache.interned_strings_buffer=16 - 增加到 16MB(原 8MB)

opcache.max_accelerated_files=100000 - 最大值(原 10000)
opcache.max_wasted_percentage=10 - 提高到 10%

opcache.validate_timestamps=0 - 最重要! 禁用时间戳验证,不检查文件更新,获得最佳性能
opcache.enable_file_override=1 - 启用文件存在检查优化

修改后重启Apache2

apache2ctl restart

提升近乎一倍性能

使用Php-fpm

在proot环境内,php-fpm相比apache2内置解析器速度提升也是巨大的,而从Apache2的内置PHP解析器换到Php-fpm也非常简单

首先安装并启动Php-fpm:

apt install php-fpm
php-fpm

修改Apache2的配置文件

nano /etc/apache2/sites-available/000-default.conf

在其中添加:

 <FilesMatch "\.php$">
 SetHandler "proxy:unix:/run/php/php8.4-fpm.sock|fcgi:/"
 </FilesMatch>

按照上面配置OPCache:

#文件夹和Apache2的不同
nano /etc/php/8.4/fpm/php.ini

保存并重启apache2

apache2ctl restart

将Html环境迁移至宿主机的目录下

在proot的内存储读取是存在多层损耗的,把/var/www/html下的文件复制到termux的运行目录内能也够提升部分性能。

启动的时候把termux根目录挂载为/wpfiles:

proot-distro login --bind ~:/wpfiles ubuntu

编辑Apache2配置:

nano /etc/apache2/sites-available/000-default.conf

修改目录到/var/www/html:

<VirtualHost *:8000>
 ServerAdmin webmaster@localhost
 DocumentRoot /var/www/html

 # 让 WordPress 的 .htaccess 能生效
 <Directory /var/www/html>
 Options -Indexes +FollowSymLinks
 AllowOverride All
 Require all granted
 </Directory>

 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

(使用Nginx)

理论上来说Nginx的性能确实会比Apache2强,不过在这里apache2并不是性能的瓶颈,换了提升也不会太大,所以没测试,有兴趣的可以自行问问ChatGPT如何从Apache2迁移到Nginx。

最终优化结果

内网0.5-0.7ms对这台小破机器已经很满意了:

(附测试命令:)

curl -o /dev/null -s -w "DNS Lookup: %{time_namelookup}s\nConnect: %{time_connect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" http://192.168.0.1:8000/

0 条评论

正在加载评论...

发表评论

编辑评论