サーバの負荷テスト
特定のエンドポイントのみレスポンスに時間がかかり、全体の性能が引きずられる場合があります。
これを検知するにはウェブサーバ(Nginx, Apache等)のアクセスログにレスポンスタイムを追加するのが有効です。
アクセスが増えてくると/var/log/messagesに以下のようなメッセージが出てきます。
kernel: Limiting closed port RST response from 2116 to 2000 packets/sec
出てきたら、sysctlコマンドで許容値を増やします。(DOSアタック防止のため低く設定されてるようです)
# sysctl -w net.inet.icmp.icmplim=4000
あとネットワーク周りではこの辺をいじりました。
net.inet.tcp.delayed_ack=0
net.inet.tcp.nolocaltimewait=1
net.inet.tcp.msl=5000
tcp_nopush on;
tcp_nopushディレクティブはsendfileが有効なときに、FreeBSDの場合はTCP_NOPUSHソケットオプション、Linuxの場合はTCP_CORKソケットオプションを使うかを設定します。このオプションを使うと、レスポンスヘッダとファイルの内容をまとめて送るようになり、少ないパケット数で効率良く送ることができます。デフォルトの設定値はoffです。
この例ではtcp_nopushの機能を有効にします。
# sysctl kern.ipc.somaxconn
kern.ipc.somaxconn: 4096
# sysctl net.inet.tcp.blackhole
net.inet.tcp.blackhole: 0