注目★★★★★GitHub Advisory
node-opcua 2.169.0、TCPソケット枯渇でコンテナ停止
30秒で把握
- 1node-opcua 2.169.0 が再接続時に TCP ソケットを無制限蓄積
- 23 秒間隔で約 20 ソケット/分を漏出し OOM kill に到達
- 3時計ずれによる BadInvalidTimestamp 誤認と socket.end() が原因
要約
node-opcua 2.169.0 は、時計ずれした OPC UA サーバーへの自動再接続で TCP ソケットを無制限に蓄積し、メモリ枯渇や OOM kill を引き起こす。既定の keepSessionAlive: true で、BadInvalidTimestamp を通信障害と誤認して 3 秒ごとに再接続する。失敗時に socket.end() が FIN-WAIT-2 を残すため、約 20 ソケット/分、約 1,200 ソケット/時のペースで資源を消費する。修正案は socket.destroy() の使用と、時刻検証エラーを再接続対象から分離することだ。
あなたへの影響
node-opcua 2.169.0 を使う日本の運用チームは、時計同期と FIN-WAIT-2 の増加を確認し、修正版が公開されるまで keepSessionAlive の無効化など影響回避策を検証すべきです。
推奨:BadInvalidTimestamp はサーバー到達後の時刻検証エラーで、ネットワーク断とは異なります。