net.core.somaxconn を変更すべき判断基準

  • URLをコピーしました!

Linux のチューニングで頻繁に登場するのが

net.core.somaxconn

ですが、

  • なぜ必要なのか
  • いつ変更すべきか
  • 変更しないと何が起きるのか

を正しく理解しないまま、

「接続が多いから上げる」

という対応は非常に危険です。

本記事では、

  • somaxconn の役割
  • 変更が必要な具体条件
  • 判断に使う指標

を実務目線で整理します。

目次

net.core.somaxconn とは何か

net.core.somaxconn は、

accept キューの最大長の上限値

を決めるカーネルパラメータです。

アプリケーションが

listen(fd, backlog)

を指定しても、

最終的に somaxconn が上限として適用

されます。

somaxconn が関係する接続フロー

TCP 接続確立は以下の順で進みます。

  1. SYN を受信
  2. SYN-ACK を返却
  3. ACK を受信
  4. accept キューに格納
  5. アプリが accept()

somaxconn は

④の accept キューの最大数

に影響します。

変更を検討すべき代表的な症状

  • 接続が時々失敗する
  • アクセス集中時だけエラーが出る
  • listen overflow のログが出る

ただし、

これだけで somaxconn を疑うのは早計

です。

判断指標①:accept キューの溢れ

確認コマンド

netstat -s | grep -i listen

注目ポイント

  • listen queue overflow
  • listen queue drops

これが増加している場合、

somaxconn 不足の可能性

があります。

判断指標②:SYN-RECV ではなく ESTABLISHED が多いか

確認コマンド

ss -ant

読み取り

  • SYN-RECV が多い → somaxconn 以前の問題
  • ESTABLISHED が多い → accept 側の滞留

somaxconn が関係するのは

接続確立後

です。

判断指標③:アプリケーションの accept 処理速度

somaxconn を上げる前に必ず確認します。

  • accept() が詰まっていないか
  • ワーカースレッド不足ではないか

アプリが遅いだけなのに

somaxconn を上げると、

  • 遅延が隠れる
  • 障害が長時間化

します。

変更すべき明確な条件

以下をすべて満たす場合のみ、

somaxconn の変更を検討

します。

  • listen overflow が発生している
  • SYN-RECV が溜まっていない
  • アプリの accept が正常
  • 一時的な接続集中が原因

変更例

現在値の確認

sysctl net.core.somaxconn

一時変更

sysctl -w net.core.somaxconn=1024

永続化

/etc/sysctl.conf
net.core.somaxconn = 1024

段階的に上げるのが基本です。

変更後に必ず確認すること

  • listen overflow が止まったか
  • レイテンシが悪化していないか
  • アプリ応答が遅れていないか

やってはいけない対応

  • 根拠なく 65535 にする
  • 他のキューを見ない
  • 攻撃と混同する

「解決した」と判断する基準

  • 接続失敗が消える
  • listen overflow が増えない
  • 負荷時も応答が安定

まとめ

  • somaxconn は accept キューの上限
  • 変更には明確な条件がある
  • アプリ性能確認が最優先

somaxconn は

「最後に触るパラメータ」

これを守るだけで、

不要な障害を確実に減らせます。

目次