网站首页 > 博客文章 正文
公司一个需求版本开发、测试结束,升级到灰度环境之后频繁出现502
公司使用的是php + nginx 所以分析也是按照这个方向来分析的。
nginx报错:
NGINX ERROR 10.9.95.75 !!!
2020/07/21 17:05:12 [error] 7#7: *38808 recv() failed (104: Connection reset by peer) while reading response header from upstream
这里的意思是,nginx已经和php-cgi(就是php-fpm进程)连接成功,并且发送了消息, 但是php-cgi进程由于某些原因关闭了,发送了一个reset包通知nginx进程。
状态码解释
- 504 nginx超过了自己设置的超时时间,不等php-fpm返回结果,就结束了
- 502 是php-cgi执行了, 但是没有读取到数据就超时了。php-fpm超时 php-fpm主进程会认为这个 php-fpm进程有问题会重启。
如果是程序性能问题导致的,php-fpm进程将会不停的kill && fork,此操作很消耗系统资源, 而且会给nginx进程带来影响,所以nginx会频繁的给客户端返回 502, 再之后, 如果nginx的连接数被占满了,客户端将会收到 504错误码。
Connection reset by peer
表示当前服务器接收到了服务器对端发送过来的TCP RST信号。也就是对端已经关闭了连接, 接收方需要关闭连接,然后根据自己的逻辑处理。
让我们来理解下RST信号:
上图中画“红线”的位置是TCP的标识位,每个标志位占用一个bit。以下是6个标志位的解释:
- UGR: URG为1时,表明该包中有需要紧急处理的数据
- ACK: 确认应答是否有效,为1为有效
- PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走;PSH为1时就是将缓冲区中的数据交给上层协议。PSH为0时,就是数据不需要立即传先进行缓存
- RST: RST为1,表示连接出现异常必须重更新连接,会将连接断开重新连接
- SYN: 用于建立连接,为1表示希望重新建立连接
- FIN: FIN为1时,表明之后不再会有数据发送了要断开连接,本端要关闭了,FIN标识为结束报文段
- 这里的RST就是上面 nginx抛出错误 Connection reset by peer 的解释
查看php-fpm的慢日志:
[21-Jul-2020 17:12:10] [pool www] pid 975
script_filename = /data/xmq_api_alpha//api/v1.10/index.php
[0x00007f99db6219b0] pconnect() /data/xmq_api_alpha/common/Redis/RedisManager.php:83
[0x00007f99db621910] _createRedis() /data/xmq_api_alpha/common/Utils.php:952
[0x00007f99db6218a0] call_user_func() /data/xmq_api_alpha/common/Utils.php:952
[0x00007f99db6217e0] retry() /data/xmq_api_alpha/common/Redis/RedisManager.php:98
[0x00007f99db621770] createRedis() /data/xmq_api_alpha/common/Redis/RedisManager.php:122
[0x00007f99db6216e0] tokensRedis() /data/xmq_api_alpha/api/v1.10/app/plugins/SecurityPlugin.php:816
[0x00007f99db621570] auth() /data/xmq_api_alpha/api/v1.10/app/plugins/SecurityPlugin.php:670
[0x00007f99db621380] beforeExecuteRoute() /data/xmq_api_alpha/api/v1.10/index.php:270
[0x00007f99db621310] fireQueue() /data/xmq_api_alpha/api/v1.10/index.php:270
[0x00007f99db6212a0] fire() /data/xmq_api_alpha/api/v1.10/index.php:270
[0x00007f99db621250] dispatch() /data/xmq_api_alpha/api/v1.10/index.php:270
[0x00007f99db621200] handle() /data/xmq_api_alpha/api/v1.10/index.php:270
php-fpm慢日志查看表明,某个 pod 连接到 Redis 超时导致问题。
这是 K8S集群内部网络通信的问题,尝试重启pod,重启之后问题得到解决。
- 上一篇: 如何关闭CPU的超线程
- 下一篇: Nacos 配置中心变更利器:自定义标签灰度
猜你喜欢
- 2024-12-11 对于运维小白来说,公司一般需要多少个K8s集群?
- 2024-12-11 【云原生】Kubernetes(k8s)Istio Gateway 介绍与实战操作
- 2024-12-11 Kubernetes笔记(二):了解k8s的基本组件与概念
- 2024-12-11 不背锅运维:一文搞清楚应用发布到k8s集群的基本流程
- 2024-12-11 全链路灰度的挑战、实现思路与解决方案
- 2024-12-11 基于Istio的灰度发布架构方案实践之路
- 2024-12-11 Nacos 配置中心变更利器:自定义标签灰度
你 发表评论:
欢迎- 最近发表
-
- 比GoPro 13更强的大疆Action 5 Pro,到底强在哪里?
- 信号和槽(信号和槽的实现原理)
- 在响应式项目中连接设计与开发(请简述实现响应式设计包括哪些技术点)
- 【C#】委托、Action、Func 和 Event 之间的关系
- 如何使用JavaScript实现Prompt弹窗?
- 谷歌Magic Actions功能曝光:AI革新安卓16通知交互
- 基于目标TPS的性能测试,如何通过手动设置场景进行测试?
- IOS基础学习之输出口和动作(io口输入输出实验总结及体会)
- 《Java语言程序设计》期末考试模拟试题——判断题和问答题
- Android学习之Touch事件的处理(android触摸事件实例)
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)