You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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端缓存排查

  1. 队列Worker检查与重启

    • 查看运行中的Worker进程:ps aux | grep php artisan queue:work
    • 重启所有Worker:执行php artisan queue:restart,或直接kill进程后重新启动队列服务
  2. Laravel类缓存清理
    执行php artisan optimize:clear,该命令会清理包括类映射在内的多种Laravel缓存

服务器缓存排查(Ubuntu 20.04.5 LTS + Nginx + PHP 8.0)

服务器端主要是PHP OPcache缓存(Nginx静态缓存不会影响PHP代码逻辑),排查步骤:

  1. 找到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
  2. 关键配置项检查

    • opcache.enable=1:确认OPcache是否开启
    • opcache.enable_cli=1:若开启,CLI进程(如队列Worker)会缓存类文件,导致代码更新不生效,建议关闭或调整验证规则
    • opcache.validate_timestamps=1:开启后OPcache会定期检查文件修改时间,若为0则完全不检查,需手动清理缓存
    • opcache.revalidate_freq=2:文件更新检查间隔(单位:秒),数值越小越及时
  3. 清理OPcache

    • 重启PHP-FPM:sudo systemctl restart php8.0-fpm
    • 清理CLI模式OPcache:执行php -r "opcache_reset();"
    • 若配置了opcache.validate_timestamps=1,等待配置的间隔时间后缓存会自动更新

内容的提问来源于stack exchange,提问作者magicianiam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 18:55:13