一个Laravel队列引发的报警
作者从一次诡异的服务器报警说起:集群中某台服务器内存飙高,但通过常规命令却查不到内存大户。通过对比不同服务器的进程列表,线索最终指向了 Laravel 队列。 深入排查后发现,问题的根源并非进程自身,而是 Laravel 队列在默认的监听模式下,其子进程会频繁重启。每次重启都会创建并删除大量临时文件,导致 Linux 系统内核中的 dentry 缓存(目录项缓存)被急剧撑大,从而“吃掉”了大量内存。文章通过 strace 跟踪清晰地捕捉到了这一过程。 针对这一问题,作者提供了两个层面的解决方案:一是应用层面,强烈推荐启用 Laravel 队列的守护进程模式,避免不必要的进程重启;二是系统层面,在无法避免频繁文件操作时,可以通过调整内核参数如 `vfs_cache_pressure` 来尝试缓解。整篇文章完整展现了从现象入手,借助工具抽丝剥茧,最终定位到内核缓存层面问题的精彩排查思路。