首页
下载
文档
问答社区
视频
捐赠
源代码
AI 助理
赞助商
CRMEB
Apipost
腾讯云
微擎
禅道
51Talk
商业产品
Swoole AI 智能文档翻译器
Swoole-Compiler PHP 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
worker进程出现随机卡死现象
### 问题描述 生产环境时,worker进程会出现cpu 占用过高, 之后进程出现卡死现象 ### Swoole版本,PHP版本,以及操作系统版本信息 用的hyperf1.1 框架, swoole 版本4.5+ PHP版本7.2.33 操作系统版本: docker Alpine Linux 3.9 ### 相关代码 堆栈信息 ![](/storage/article-column/WEmYcUqZpUabfLndNe0Genwb6yK7Wshx5Equ77G1.png) 进程一直在睡眠 ![](/storage/article-column/7QTwuTm7lF8AAVe8cSDd39wI8Fuydaj5JzIzso3r.png) cpu 占用 相比其它worker 进程过高, 只有cpu占用过高的进程会发现卡死现象 ![](/storage/article-column/TCnXXE0Hc6XWq6pt1K729OwhzJmcSai7SauqUWb6.png) ### 你期待的结果是什么?实际看到的错误信息又是什么? 在生产环境观察几天后发现, worker 进程 每40分钟左右会重启一次, 但是某个worker 进程 在被卡死的时候 不会被重启, 需要手动杀死, 卡死的进程会一直占用CPU不释放
发布于4年前 · 36 次浏览 · 来自
开发框架
rock2018
### 问题描述 生产环境时,worker进程会出现cpu 占用过高, 之后进程出现卡死现象 ### Swoole版本,PHP版本,以及操作系统版本信息 用的hyperf1.1 框架, swoole 版本4.5+ PHP版本7.2.33 操作系统版本: docker Alpine Linux 3.9 ### 相关代码 堆栈信息 ![](/storage/article-column/WEmYcUqZpUabfLndNe0Genwb6yK7Wshx5Equ77G1.png) 进程一直在睡眠 ![](/storage/article-column/7QTwuTm7lF8AAVe8cSDd39wI8Fuydaj5JzIzso3r.png) cpu 占用 相比其它worker 进程过高, 只有cpu占用过高的进程会发现卡死现象 ![](/storage/article-column/TCnXXE0Hc6XWq6pt1K729OwhzJmcSai7SauqUWb6.png) ### 你期待的结果是什么?实际看到的错误信息又是什么? 在生产环境观察几天后发现, worker 进程 每40分钟左右会重启一次, 但是某个worker 进程 在被卡死的时候 不会被重启, 需要手动杀死, 卡死的进程会一直占用CPU不释放
赞
0
分享
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
评论
2020-09-30
rock2018
![](/storage/article-column/K0WhwFuAiquM2VM2c18NmZnKM3eWKAfopT0iwek7.png) 根据堆栈信息排查 swoole 的138 行的代码 怀疑是参数传入有问题,排查自身服务的代码后发现: ![](/storage/article-column/IIyb6akLbJ8yl5dnolI6nomMqAgT8mNJiasO57GG.png) 目前怀疑是变量赋值为null, 再通过& 去引用, 此时swoole 调用该代码 _this->private_data_ 的值 实际是null void Context::context_func(void *arg) { Context *_this = (Context *) arg; _this->fn_(_this->private_data_); _this->end_ = true; _this->swap_out(); } 先记录下来,明天验证一下
赞
0
回复
微信公众号
热门内容
暂无回复的问答
- CodeGalaxy K3s 轻量集群节点之间如何实现负载均衡
- 关于openssl CURL WARNING swSSL_connect: SSL_connect(fd=69) failed. Error: error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small[1|394]
- 多个模型如何进行事务异常回退?
- websocket开启wss报错
- 协程tcp服务器如何使用多进程?recv()方法接收信息,打印出来的pid一直是同一个。没用使用到多进程啊。