Gatlingの結果に出る「premature close」とは?原因と対策

Gatlingの結果に出る「premature close」とは?原因と対策

Gatlingのレポートで premature close が出る場合、これは端的に言うと、HTTPレスポンスを最後まで受け取り切る前に接続(TCP/SSL/HTTP)が相手都合で閉じられた状態です。途中でFIN/RSTが飛んだり、プロキシがupstreamを切ったりすると、Gatling側は「読み取り中に接続が終わった」と判断してKOになります。


よくある原因(多い順)

1) タイムアウトで切られている(プロキシ/LB/サーバ)

  • Nginx / Apache / LB(ALBなど)の idle timeout / proxy_read_timeout が原因で切断されるパターン。
  • 特徴:毎回ほぼ同じ経過秒数(30秒/60秒/120秒など)で発生しやすい。

対策:最大レスポンス時間+余裕を見て、タイムアウト値を中継~上流で揃えます。

  • Nginx:proxy_read_timeout / proxy_send_timeout / keepalive_timeout
  • Apache(httpd):ProxyTimeout / Timeout / KeepAliveTimeout
  • Tomcat:connectionTimeout / keepAliveTimeout
  • LB:idle timeout(ALB/ELB等の設定)

2) 高負荷でサーバが耐えられず切っている

  • スレッド枯渇、キュー溢れ、接続上限、GC、OOM、アプリ再起動などで「処理しきれず切断」される。
  • 特徴:同時接続やRPSを上げた瞬間から比率が増える/サーバのCPU・メモリ・GCが荒れる。

対策

  • 負荷は段階的ランプアップ(いきなり最大負荷にしない)
  • サーバ側の上限を見直す
    • Tomcat:maxThreads / acceptCount / maxConnections
    • Apache MPM(event/worker):ServerLimit / MaxRequestWorkers など
    • Nginx:worker_processes / worker_connections / upstream keepalive
  • JVMならGCログ・ヒープ・スレッド数の監視(落ちていないか確認)

3) keep-alive(接続再利用)の整合性不一致

  • 中継(Nginx/Apache)と上流(Tomcat)のkeep-alive寿命やidle timeoutが食い違うと、再利用時に切断が表面化します。

対策:keep-alive / idle timeoutを中継と上流で整合させ、upstream keepalive設定を適切に行います。

4) 負荷生成側(Gatling実行マシン)の資源不足

  • ulimit -n(FD上限)不足、エフェメラルポート枯渇、NIC/CPU飽和など。
  • 特徴:サーバは元気そうなのに、負荷生成側のソケット状況が怪しい。

対策

  • ulimit -n を十分大きく(例:65535以上)
  • ソケット状況を確認:ss -sss -tan(TIME-WAITが増えすぎていないか等)
  • 必要なら負荷生成を複数台に分散

まず最短で原因を特定するチェックポイント

  1. 発生タイミングが一定か?(例:いつも60秒前後)→ タイムアウト起因が濃厚
  2. サーバ/プロキシのログに同時刻の痕跡があるか?(upstream timeout / reset / broken pipe 等)
  3. 切断が誰から起きたか(FIN/RST)を追えるなら、短時間のパケットキャプチャやLBログで切り分けが早い

「出ないようにする」ための現実的な方針

原則として、premature closeは切っている側(サーバ/プロキシ/LB)の設定や限界が原因です。まずはそこを是正するのが本筋です。Gatling側でできることは、

  • 負荷のかけ方を滑らかにする(ランプアップ/スロットリング)
  • クライアント側タイムアウトや接続設定を、サーバ側と矛盾しない範囲に整える
  • 負荷生成側の資源(FD/ポート/CPU)を十分に確保する

といった、再現性と安定性を上げる方向になります。


付録:確認コマンド例(Linux)

ulimit -n
ss -s
ss -tan state time-wait | wc -l
cat /proc/sys/net/ipv4/ip_local_port_range

これらで、FD上限・ソケット統計・TIME-WAITの増加・エフェメラルポート範囲を把握できます。

コメント

タイトルとURLをコピーしました