最近ではコンテナ環境で利用することが増えた。
APIのパフォーマンスチューニングすることがあったので、起動時のコンテナのbacklogを変更する方法を書き溜め。
alpine linux イメージのbacklogは基本的に128が多いと思う。例えば8192にする場合、起動時のsysctlsで指定する。
backlog変更はnet.core.somaxconnを指定する。
net.core.somaxconn は acceptまちのソケット数に関するカーネルパラメータのこと。
1 2 3 4 5 6 7 8 9 10 11 12 |
version: "3" services: app: build: context: ./ dockerfile: Dockerfile volumes: - ./:/app:z environment: - APP_ENV=development sysctls: net.core.somaxconn: 8192 |
これだけ。簡単
実際にコンテナを起動して設定ファイルが変更されているか確認。
1 2 |
# /etc/sysctl.conf net.core.somaxconn=8192 |
1 2 |
# cat /proc/sys/net/core/somaxconn 8192 |
変更されているね。
じゃあね〜〜〜。
参照
backlog 引数は、 sockfd についての保留中の接続のキューの最大長を指定する。 キューがいっぱいの状態で接続要求が到着すると、クライアントは ECONNREFUSED というエラーを受け取る。下位層のプロトコルが再送信をサポート していれば、要求は無視され、これ以降の接続要求の再送信が成功するかもしれない。
https://linuxjm.osdn.jp/html/LDP_man-pages/man2/listen.2.html
backlog 引数が /proc/sys/net/core/somaxconn の値より大きい場合、その値まで静かに切り捨てられます。Linux 5.4以降では、このファイルのデフォルトは4096です。以前のカーネルでは、デフォルト値は128です。2.4.25 以前のカーネルでは、この制限は SOMAXCONN というハードコードされた値で、値は 128 であった。