Node.js客户端请求偶发5秒左右'socket hang up'错误排查咨询
Node.js调用VictoriaMetrics接口偶发socket hangup/EPIPE错误排查疑问
环境与业务场景
- Node.js版本:v14.19.1
- 核心逻辑:数据收集进程通过axios发送HTTP请求,调用VictoriaMetrics的
/api/v1/import接口完成数据写入 - 网络环境:所有虚拟机部署在Azure私有网络中,网络整体可靠
偶发错误详情
socket hang up错误
错误栈如下:
Error: socket hang up at connResetException (internal/errors.js:639:14) at Socket.socketOnEnd (_http_client.js:499:23) at Socket.emit (events.js:412:35) at Socket.emit (domain.js:475:12) at endReadableNT (internal/streams/readable.js:1334:12) at processTicksAndRejections (internal/process/task_queues.js:82:21)
- 错误出现时间:请求发起后5-6秒,偶尔会延长至15秒左右,未触发预设的连接超时配置
- 触发规律:高负载或大请求量时错误频率更高,但小请求也可能偶发
EPIPE错误
错误栈如下:
Error: write EPIPE at afterWriteDispatched (internal/stream_base_commons.js:156:25) at writeGeneric (internal/stream_base_commons.js:147:3) at Socket._writeGeneric (net.js:798:11) at Socket._write (net.js:810:8) at writeOrBuffer (internal/streams/writable.js:358:12) at Socket.Writable.write (internal/streams/writable.js:303:10) at ClientRequest._writeRaw (_http_outgoing.js:351:17) at ClientRequest._send (_http_outgoing.js:327:15) at ClientRequest.end (_http_outgoing.js:849:10)
- 触发规律:当数据库与数据收集进程在同一虚拟机时必然出现,跨虚拟机部署时偶发
倾向于客户端/虚拟机问题的依据
- VictoriaMetrics未记录与这些socket hangup/EPIPE错误对应的日志
- 曾出现过开发机根磁盘占满的情况,期间所有写入数据库的请求均触发上述错误,但数据库所在虚拟机运行正常,其他客户端可正常写入数据
待解决问题
目前怀疑高负载时偶发触发了Node.js或Ubuntu 20.04的连接/文件/网络流量等系统限制,导致连接被提前关闭。请问如何验证这一猜测?除此之外还有哪些可能的根因?
内容的提问来源于stack exchange,提问作者mactyr
相关产品推荐
相关产品推荐

