TOP云提供高性价比云服务器租用,有中国内地/港澳台、海外等全球各地节点,TOP云国内云服务器只要有域名备案号就能直接用,无须重复备案;港澳台及海外云服务器不用备案,购买之后直接使用,省时省力省心。价格实惠,续费同价,2核2G5M仅需27元每月,8核8G50M仅需66元每月,更多配置套餐请进入下面网址了解:
TOP云总站云服务器:https://topyun.vip/server/buy.html
TOP云C站云服务器:https://c.topyun.vip/cart
在云服务器上运行的 PHP 应用程序(如 WordPress、Laravel 等)通常会使用 OPcache 来提升性能。OPcache 是 PHP 的一个字节码缓存扩展,它通过将 PHP 脚本编译后的字节码存储在内存中,减少每次请求时重新编译脚本的开销,从而显著提高 PHP 的执行速度。
然而,在某些情况下(如更新了 PHP 文件、修改了代码或配置),你可能需要手动清理 OPcache 缓存,以确保服务器加载的是最新的代码版本,而不是旧的缓存版本。
以下是清理 PHP OPcache 缓存的几种方法,包括通过代码、命令行、PHP-FPM 重启以及自动化脚本等方式。
一、什么是 OPcache?
OPcache 是 PHP 的一个内置扩展(从 PHP 5.5 开始默认集成),用于缓存 PHP 脚本的编译结果(字节码)。它的主要作用包括:
加速 PHP 执行:避免每次请求都重新编译 PHP 脚本。
减少 CPU 和内存开销:通过缓存字节码,降低服务器资源消耗。
提升应用程序性能:显著缩短页面加载时间,尤其是在高流量的网站中。
注意:OPcache 缓存的是 PHP 脚本的编译结果(字节码),而不是文件内容本身。因此,当你修改了 PHP 文件后,OPcache 可能仍然加载旧的缓存版本,导致代码更新未生效。
二、清理 OPcache 缓存的方法
方法一:通过 PHP 脚本清理 OPcache(推荐)
如果你可以通过浏览器访问服务器上的 PHP 文件,可以创建一个简单的 PHP 脚本来清理 OPcache。
步骤 1:创建清理脚本
在你的网站根目录(如 /var/www/html 或 WordPress 的根目录)创建一个 PHP 文件,例如 clear_opcache.php,并将以下代码粘贴到文件中:
<?php
if (function_exists('opcache_reset')) {
echo "OPcache 缓存正在重置...<br>";
if (opcache_reset()) {
echo "OPcache 缓存已成功清理!";
} else {
echo "OPcache 缓存清理失败,请检查 OPcache 是否启用。";
}
} else {
echo "OPcache 扩展未启用,无法清理缓存。";
}
?>
步骤 2:通过浏览器访问脚本
在浏览器中访问该脚本的 URL,例如:
http://你的域名/clear_opcache.php
如果 OPcache 已成功清理,你会看到类似以下的输出:
OPcache 缓存正在重置... OPcache 缓存已成功清理!
步骤 3:删除脚本(可选)
为了安全起见,清理完成后建议删除 clear_opcache.php 文件,避免其他人通过 URL 访问该脚本。
优点:简单易用,适合快速清理 OPcache。
缺点:需要通过浏览器访问脚本,可能不适用于无 Web 访问权限的环境。
方法二:通过命令行清理 OPcache
如果你有服务器的 SSH 访问权限,可以通过命令行直接清理 OPcache。需要注意的是,OPcache 的清理通常需要重启 PHP-FPM 或重新加载 PHP 进程,因为 OPcache 的缓存是存储在内存中的。
方法 2.1:重启 PHP-FPM
PHP-FPM(FastCGI Process Manager)是 PHP 的一种常用运行模式,OPcache 的缓存是与 PHP-FPM 进程绑定的。重启 PHP-FPM 会清空所有 OPcache 缓存。
步骤:
登录到你的云服务器(通过 SSH)。
根据你的服务器环境,执行以下命令之一:
如果你使用的是 Ubuntu/Debian 系统:
sudo service php-fpm restart
或者(取决于 PHP 版本):
sudo service php8.1-fpm restart
如果你使用的是 CentOS/RHEL 系统:
sudo systemctl restart php-fpm
或者(取决于 PHP 版本):
sudo systemctl restart php8.1-fpm
等待 PHP-FPM 重启完成。
注意:重启 PHP-FPM 会导致所有正在运行的 PHP 进程被终止,可能会短暂影响网站的访问速度。建议在低流量时段操作。
优点:彻底清理 OPcache 缓存。
缺点:会导致短暂的服务中断。
方法 2.2:重新加载 PHP-FPM(优雅重启)
如果你希望避免服务中断,可以使用“优雅重启”(Graceful Restart)的方式重新加载 PHP-FPM,而不会终止正在处理的请求。
步骤:
登录到你的云服务器(通过 SSH)。
根据你的服务器环境,执行以下命令之一:
如果你使用的是 Ubuntu/Debian 系统:
sudo service php-fpm reload
或者(取决于 PHP 版本):
sudo service php8.1-fpm reload
如果你使用的是 CentOS/RHEL 系统:
sudo systemctl reload php-fpm
或者(取决于 PHP 版本):
sudo systemctl reload php8.1-fpm
等待 PHP-FPM 重新加载完成。
注意:优雅重启会重新加载 PHP-FPM 配置并清空 OPcache,但不会中断正在处理的请求。
优点:避免服务中断,适合生产环境。
缺点:某些情况下可能无法完全清理 OPcache(取决于 PHP 版本和配置)。
方法三:通过代码调用 opcache_reset() 函数
如果你在 PHP 应用程序中有管理员权限(如 WordPress 的管理员),可以通过代码调用 opcache_reset() 函数来清理 OPcache。
示例代码:
在你的 PHP 文件中添加以下代码:
if (function_exists('opcache_reset')) {
opcache_reset();
echo "OPcache 缓存已成功清理!";
} else {
echo "OPcache 扩展未启用,无法清理缓存。";
}
注意:此方法需要通过浏览器访问该 PHP 文件,或者将其集成到你的管理后台中(如 WordPress 插件或主题的某个功能)。
方法四:通过 WP-CLI 清理 OPcache(适用于 WordPress)
如果你使用的是 WordPress,并且服务器上安装了 WP-CLI(WordPress 命令行工具),可以通过 WP-CLI 执行自定义命令来清理 OPcache。
步骤:
登录到你的云服务器(通过 SSH)。
运行以下命令:
wp eval 'if (function_exists("opcache_reset")) { opcache_reset(); echo "OPcache 缓存已成功清理!"; } else { echo "OPcache 扩展未启用,无法清理缓存。"; }'
注意:此方法需要确保 WP-CLI 已正确安装并配置,且当前用户有权限执行 PHP 函数。
三、自动化清理 OPcache(高级)
在某些场景下(如代码部署后自动清理缓存),你可能需要自动化清理 OPcache 的过程。
方法 1:在部署脚本中加入 OPcache 清理命令
如果你使用自动化部署工具(如 Git、Jenkins、Deployer 等),可以在部署脚本中加入清理 OPcache 的命令。例如:
# 重启 PHP-FPM 清理 OPcache
sudo systemctl restart php-fpm
或者:
# 使用 WP-CLI 清理 OPcache(适用于 WordPress)
wp eval 'if (function_exists("opcache_reset")) { opcache_reset(); echo "OPcache 缓存已成功清理!"; } else { echo "OPcache 扩展未启用,无法清理缓存。"; }'
方法 2:通过插件清理 OPcache(适用于 WordPress)
如果你使用的是 WordPress,可以安装一些插件来管理和清理 OPcache,而无需手动操作。
推荐插件:
WP Rocket
WP Rocket 是一款高级缓存插件,支持自动清理 OPcache。
在插件设置中启用 OPcache 清理功能。
LiteSpeed Cache
如果你的服务器使用 LiteSpeed Web Server,LiteSpeed Cache 插件内置了对 OPcache 的支持。
提供一键清理 OPcache 的功能。
WP Super Cache
虽然 WP Super Cache 主要用于生成静态 HTML 文件,但某些版本支持与 OPcache 配合使用。
优点:无需手动操作,适合非技术用户。
缺点:部分插件可能需要付费或依赖特定环境。
四、验证 OPcache 是否已清理
清理 OPcache 后,你可以通过以下方法验证缓存是否已被清空:
方法 1:通过 PHP 脚本检查
创建一个新的 PHP 文件(如 check_opcache.php),并添加以下代码:
<?php
if (function_exists('opcache_get_status')) {
$status = opcache_get_status();
if ($status['opcache_enabled']) {
echo "OPcache 已启用,缓存信息如下:<br>";
echo "缓存命中次数:" . $status['opcache_statistics']['hits'] . "<br>";
echo "缓存未命中次数:" . $status['opcache_statistics']['misses'] . "<br>";
} else {
echo "OPcache 未启用。";
}
} else {
echo "OPcache 扩展未启用。";
}
?>
访问该脚本的 URL,查看 OPcache 的状态信息。如果缓存已被清理,hits 和 misses 的值可能会重置。
方法 2:通过命令行检查
登录到服务器,运行以下命令:
php -r 'if (function_exists("opcache_get_status")) { $status = opcache_get_status(); if ($status["opcache_enabled"]) { echo "OPcache 已启用,缓存信息如下:<br>"; echo "缓存命中次数:" . $status["opcache_statistics"]["hits"] . "<br>"; echo "缓存未命中次数:" . $status["opcache_statistics"]["misses"] . "<br>"; } else { echo "OPcache 未启用。"; } } else { echo "OPcache 扩展未启用。"; }'
注意:此命令会输出 OPcache 的状态信息,包括缓存是否启用、命中次数等。
五、总结
方法 | 操作内容 | 适用场景 | 优点 | 缺点 |
---|---|---|---|---|
PHP 脚本清理 | 创建 clear_opcache.php 文件调用 opcache_reset() | 有 Web 访问权限的环境 | 简单易用 | 需手动删除脚本 |
重启 PHP-FPM | 使用 systemctl 或 service 命令重启 PHP-FPM | 有 SSH 访问权限的环境 | 彻底清理缓存 | 可能导致短暂服务中断 |
优雅重启 PHP-FPM | 使用 reload 命令重新加载 PHP-FPM | 有 SSH 访问权限的生产环境 | 避免服务中断 | 可能无法完全清理缓存 |
WP-CLI 清理 | 使用 WP-CLI 执行 opcache_reset() | WordPress 环境 | 适合自动化部署 | 需安装 WP-CLI |
插件清理 | 使用缓存插件(如 WP Rocket)管理 OPcache | WordPress 环境 | 无需手动操作 | 可能需要付费插件 |
通过以上方法,你可以根据实际需求选择合适的 OPcache 清理方式,确保 PHP 应用程序始终运行在最新代码的基础上,同时保持最佳性能。