笔者在 WSL 2 下运行 ThinkPHP 反应非常慢, 做了一些分析,并解决了此问题
一 WSL2 下性能下降的原因
重复编译:
每次请求时,PHP 解释器都会从源代码开始解析和编译 PHP 文件。这个过程在高并发环境下尤其耗时。
磁盘 I/O:
每次请求都需要从磁盘读取 PHP 文件,这对于 I/O 速度较慢的存储介质(如某些类型的 SSD 或者硬盘)来说,可能会成为瓶颈。
网络延迟:
WSL 2 的磁盘 I/O 是通过虚拟化层进行的,这意味着数据在主机和 WSL 之间传输时可能会引入额外的延迟。
内存占用:
如果 PHP 代码需要大量的内存来运行,而你的系统内存有限,那么频繁的内存分配和回收也会导致性能下降。
二 安装OPCache 后解决的原理
减少重复编译:
OPCache 会在内存中缓存 PHP 代码的编译结果(字节码)。相同的代码再次被执行时,PHP 解释器直接从缓存中加载已编译的字节码,而不重新编译源代码,减少了编译时间。
降低磁盘 I/O:
由于代码不再需要频繁地从磁盘读取,减少了磁盘 I/O 的次数和总量。这在WSL2下 I/O 速度受限的环境下非常重要。
提高并发处理能力:
通过缓存编译后的代码,每个请求不再需要单独编译代码,而是可以从缓存中加载。
优化内存使用:
OPCache 可以通过优化内存分配和使用来减少内存碎片,提高内存使用的效率。
三 安装配置opcache
笔者安装的WSL2版本是 Ubuntu 22.04,安装opcache方式如下
步骤 1: 安装 PHP OPCache
首先,确保你的环境中已经安装了 PHP 和相关模块。接着安装 php-opcache
:
bash
浅色版本
sudo apt update
sudo apt install php-opcache
步骤 2: 配置 PHP OPCache
编辑 /etc/php/7.4/cli/php.ini
文件(如果你使用的是 PHP 7.4 版本,如果是其他版本请相应修改路径),并启用 OPCache 设置。
打开 php.ini
文件,找到或添加以下行来确保 OPCache 已启用:
[opcache]
; Enable opcache
opcache.enable=1
opcache.enable_cli=1
; 缓存大小
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
; 重启 PHP 进程之前缓存的存活时间
opcache.revalidate_freq=60
; 开启文件更改时间戳的检查
opcache.revalidate_path=1
; 启用 OPCache 的优化器
opcache.optimizer=loops,arrays,notices,unused,concat
保存并关闭文件。
步骤 3: 重启 PHP
对于命令行 PHP (php-cli
),你需要重启终端会话或整个系统。但是,通常不需要特别的重启操作。
步骤 4: 验证 OPCache 是否启用
你可以使用下面的命令来验证 OPCache 是否已正确启用:
php -i | grep opcache
如果一切正常,你会看到类似于这样的输出:
浅色版本
...
opcache.blacklist_filename => no value => no value
opcache.cache_size => 128M => 128M
opcache.enable => On => On
opcache.enable_cli => On => On
...
步骤 5: 运行 think scan nmap
命令
现在你应该可以运行 think scan nmap
命令了。但是,在运行该命令前,请确保你已经安装了 ThinkPHP 的扩展工具,例如 think-scan
。如果还没有安装,可以通过 Composer 安装:
composer require topthink/think-scan
然后,你可以通过以下命令来运行 think scan nmap
:
php think scan nmap
如果遇到任何问题,请检查你的命令是否正确,以及你的项目中是否正确配置了 think-scan
。如果 think scan nmap
命令与网络扫描有关,确保你有适当的权限和网络访问权限。
如果命令执行仍然缓慢,可能需要进一步调查是否有其他因素影响性能,比如网络延迟、磁盘I/O限制或其他资源瓶颈。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。