笔者在 WSL 2 下运行 ThinkPHP 反应非常慢, 做了一些分析,并解决了此问题

一 WSL2 下性能下降的原因

  1. 重复编译:

    每次请求时,PHP 解释器都会从源代码开始解析和编译 PHP 文件。这个过程在高并发环境下尤其耗时。

  2. 磁盘 I/O:

    每次请求都需要从磁盘读取 PHP 文件,这对于 I/O 速度较慢的存储介质(如某些类型的 SSD 或者硬盘)来说,可能会成为瓶颈。

  3. 网络延迟:

    WSL 2 的磁盘 I/O 是通过虚拟化层进行的,这意味着数据在主机和 WSL 之间传输时可能会引入额外的延迟。

  4. 内存占用:

    如果 PHP 代码需要大量的内存来运行,而你的系统内存有限,那么频繁的内存分配和回收也会导致性能下降。

二 安装OPCache 后解决的原理

  1. 减少重复编译:

    OPCache 会在内存中缓存 PHP 代码的编译结果(字节码)。相同的代码再次被执行时,PHP 解释器直接从缓存中加载已编译的字节码,而不重新编译源代码,减少了编译时间。

  2. 降低磁盘 I/O:

    由于代码不再需要频繁地从磁盘读取,减少了磁盘 I/O 的次数和总量。这在WSL2下 I/O 速度受限的环境下非常重要。

  3. 提高并发处理能力:

    通过缓存编译后的代码,每个请求不再需要单独编译代码,而是可以从缓存中加载。

  4. 优化内存使用:

    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限制或其他资源瓶颈。


汤青松
5.2k 声望8.3k 粉丝

《PHP Web安全开发实战》 作者


引用和评论

0 条评论