蓝盾插件问题排查小记

2021年给开发商做了一个移动端版本体验,最近开发商反馈当上传的文件比较大时经常失败。

背景

用户报障说蓝盾插件使用经常失败。

问题分析

1. 插件侧报错: OverflowError: string longer than 2147483647 bytes

报错日志内容如下:

2022-06-28 16:44:19:202 : OverflowError: string longer than 2147483647 bytes
2022-06-28 16:44:19:362 : ##[error]
2022-06-28 16:44:19:362 : Fail to run the plugin because of error(Process exited with an error: 1)
2022-06-28 16:44:19:364 : ##[warning]No output

日志报错分析:该插件是用来上传文件的,使用 requests 库来上传文件,这里报错信息是说明插件上传的文件太大。之前没有考虑到文件太大的情况。

2. 问题一修复后偶尔报错超时504

img.png

日志报错分析:插件日志504,重试了3次。查看后端服务日志发现业务逻辑正常处理完毕,但是请求返回时 write: broken pipe。这里的报错可以基本判断是由于请求处理时间过长,当后端服务返回时 CLB 已经断开了连接。

请求调用链路

蓝盾插件 -> 腾讯云CLB -> 后端服务(CVM上跑的docker)

腾讯云CLB监控

timeout.png

排查到这里可以确定问题根因:CLB 的超时导致的504。

解决方案

1. 插件上传报错解决方案

插件侧优化代码使用 requests-toolbelt 上传文件。同时修改 CLB个性化配置 支持超过2G的大文件上传,不缓存客户端请求体。

client_max_body_size 5120M;
proxy_request_buffering off;
keepalive_timeout 900s;

2. 超时问题解决方案

修改 CLB个性化配置 ,修改超时设置。这里主要修改 proxy_read_timeout

NOTE: proxy_read_timeout 是控制 CLB 至后端服务之间的超时时间。

proxy_read_timeout 900s