ThinkPHP + Supervisor 队列任务丢失:僵尸 Worker 排查全记录

僵尸进程

程序:thinkphp6+think-queue

环境:宝塔linux+Supervisor

问题现象:

我有一个脚本,每半个小时查询需要执行的任务,再通过消费队列的方式,投递执行。

已知,当前半个小时执行数量20,从11:30到14:00,理论上在日志中,至少有120条记录,日志只有不到10条,而且消费的任务名称不一致(我在日志中会输出当前执行的是什么任务),无规律,

也就是出现任务丢失。

查看thinkphp的log,无异常。查看队列的异常log,也无异常。

排查发现,其他队列正常。只有cron这个处理定时任务的队列异常。

在Supervisor重启cron后,14:00那一轮也只有2条。

排查发现

bash 复制代码
[root@iZ8vbhyenz6cZ public]# ps aux | grep -E "queue:work.*cron"
root      197330  0.0  0.5 223276 45300 ?        S    14:13   0:00 php think queue:work --queue cron --tries 1 --timeout 300
root      198191  0.0  0.0   5756   940 pts/1    S+   14:17   0:00 grep --color=auto -E queue:work.*cron
root     1278768  0.0  1.3 321236 104348 ?       S    May25   5:26 php think queue:work --queue cron --tries 1 --timeout 300
root     3919432  0.0  0.4 227376 32128 ?        S    11:24   0:02 php think queue:work --queue cron --tries 1 --timeout 300
[root@iZ8vbhyenz6cZ public]# /www/server/panel/pyenv/bin/supervisorctl status | grep -i cron
cron:cron_00                                                 RUNNING   pid 197330, uptime 0:04:15
[root@iZ8vbhyenz6cZ public]#

发现了,3个进程同时在消费同一个 cron 队列。

Supervisor用的是197330,而我设置的进程数量只有1,理论上就应该只有1个进程。

那就意味着,冒出来的1278768 、3919432是异常的,大概率分发到他们了,进程在但实际未工作。

bash 复制代码
# 杀掉两个僵尸 Worker(1278768 和 3919432)
kill -9 1278768 3919432

# 确认杀干净了
ps aux | grep -E "queue:work.*cron"

重新投递未执行成功的任务。正常。

14:30那一轮也正常执行了。

你好,我是勤勤学长。

相关推荐
刚入门的大一新生9 小时前
Linux-进程控制
linux·运维·服务器·c++
上火的金鱼妹9 小时前
K8S基础组件作用和关系整理
linux·运维·服务器·kubernetes
醉颜凉10 小时前
网络安全必学:粘性MAC地址(Sticky MAC)原理与应用全解析
运维·服务器·网络·安全·web安全
晊晌_h10 小时前
嵌入式从0到精通——Linux C|TCP 并发服务器实现方案详解
服务器·开发语言·tcp/ip
广州灵眸科技有限公司11 小时前
从手动三步到上电即连:4G模组systemd开机自连方案
linux·运维·服务器·开发语言·网络·人工智能·php
深念Y11 小时前
【保姆级教程】Proxmox VE (PVE) 安装 FreeBSD 完整指南
服务器·unix·系统·pve·freebsd·虚拟化平台
子非鱼a12 小时前
【WEB】[SWPU2019]Web1
java·服务器·前端
qq_4523962313 小时前
第十篇:《eBPF 可观测性:零侵扰的深度内核追踪》
服务器·网络·php
Huangjin007_13 小时前
【Linux 系统篇(十八)】进程(六) :环境变量
linux·运维·服务器
w01_02_0314 小时前
linux, 桌面, 自启动。
linux·运维·服务器