Laravel缓存还是服务器缓存?已删Job日志仍输出问题排查
Laravel Job日志残留问题排查与解决
核心原因分析
日志残留最常见的原因有两个:
- 队列Worker进程未重启:Laravel队列Worker启动后会将Job类加载到内存,后续即使修改了Job文件,Worker仍会沿用内存中的旧代码逻辑执行,自然会输出已删除的日志。
- 缓存未清理:包括Laravel自身的类缓存、配置缓存,或是PHP的OPcache缓存,导致旧代码逻辑被缓存复用。
缓存清理命令的必要性
不是每次代码更新都必须执行所有清理命令,按需选择即可:
- 修改配置文件:执行
php artisan config:clear - 修改路由定义:执行
php artisan route:clear - 修改Blade视图:执行
php artisan view:clear - 修改类文件(如Job、控制器):执行
php artisan optimize:clear(会清理类映射缓存、OPcache等),或针对性清理对应缓存
你列出的命令组合可以一次性清理大部分Laravel缓存,但更高效的是根据变更内容选择对应命令。
问题归属:Laravel缓存还是服务器缓存?
Laravel端缓存排查
队列Worker检查与重启
- 查看运行中的Worker进程:
ps aux | grep php artisan queue:work - 重启所有Worker:执行
php artisan queue:restart,或直接kill进程后重新启动队列服务
- 查看运行中的Worker进程:
Laravel类缓存清理
执行php artisan optimize:clear,该命令会清理包括类映射在内的多种Laravel缓存
服务器缓存排查(Ubuntu 20.04.5 LTS + Nginx + PHP 8.0)
服务器端主要是PHP OPcache缓存(Nginx静态缓存不会影响PHP代码逻辑),排查步骤:
找到OPcache配置文件
- PHP-FPM模式配置:
/etc/php/8.0/fpm/conf.d/10-opcache.ini - CLI模式配置(队列Worker用CLI模式,需重点检查):
/etc/php/8.0/cli/conf.d/10-opcache.ini
- PHP-FPM模式配置:
关键配置项检查
opcache.enable=1:确认OPcache是否开启opcache.enable_cli=1:若开启,CLI进程(如队列Worker)会缓存类文件,导致代码更新不生效,建议关闭或调整验证规则opcache.validate_timestamps=1:开启后OPcache会定期检查文件修改时间,若为0则完全不检查,需手动清理缓存opcache.revalidate_freq=2:文件更新检查间隔(单位:秒),数值越小越及时
清理OPcache
- 重启PHP-FPM:
sudo systemctl restart php8.0-fpm - 清理CLI模式OPcache:执行
php -r "opcache_reset();" - 若配置了
opcache.validate_timestamps=1,等待配置的间隔时间后缓存会自动更新
- 重启PHP-FPM:
内容的提问来源于stack exchange,提问作者magicianiam
相关产品推荐
相关产品推荐

