aws memo

AWS関連の備忘録 (※本ブログの内容は個人的見解であり、所属組織及び企業の意見を代弁するものではありません。1年以上古いエントリは疑ってかかってください)

DynamoDBやSQSといったAPIを高頻度に使うときに忘れずにセットしておきたいカーネルパラメータ

DynamoDB, SQSなどは、Linux内部から高頻度に HTTP APIを叩きに行くことになる。( Fluentdやら、memcachedやらも同じかも)

 

通常のLinuxカーネルパラメータ設定で、本番環境や、負荷テスト環境に使うと、おそらくネットワーク障害のような状況に陥るはず。

その時、「DynamoDBの IOPS不足?」「 SQSのAPIロットリング?「AWSの限界?」と思う前に、これチェック!

netstat -an 

この結果に、大量のTIME_WAITが表示された場合は、 エフェメラルポートが枯渇して socket作れない状態に陥っている。つまり、DynamoDBやSQSまでパケット届いていない状態なのでAWS側は原因ではない。

ということで、エフェメラルポートを最大限使うようにカーネルパラメータを設定しておくことを忘れないようにするためのメモ。

 

$ sudo cp /etc/sysctl.conf /etc/sysctl.conf.bak
$ sudo vi /etc/sysctl.conf
$ sudo diff /etc/sysctl.conf /etc/sysctl.conf.bak #変更内容確認
< net.core.somaxconn = 10240
< net.core.netdev_max_backlog = 10240
< net.ipv4.tcp_max_syn_backlog = 10240
< net.ipv4.tcp_max_syn_backlog = 10240
< net.ipv4.tcp_tw_recycle = 1
< net.ipv4.tcp_tw_reuse = 1
< net.ipv4.ip_local_port_range = 1024 65535
< net.ipv4.tcp_fin_timeout = 10
$ sudo reboot #reboot
# reboot後に再度ログインして確認
$ cat /proc/sys/net/ipv4/tcp_tw_recycle 
1

 

 これでOK