AWSインスタンスのパフォーマンス高速化

はじめに:AWSって遅くない?

AWSのEC2インスタンス、スペックの割に「なんか遅い」って感じたことない? 特にI/Oまわりとか、TCPの接続がもっさりとか。あれ、実はデフォルトのカーネル設定がボトルネックになってる可能性が大やねん。

AWSって便利やけど、実際のカーネルチューニングまではやってくれん。
だから、「自分で速くする」しかないよな!!!!!


AWSでsysctlってどうやって使うん?

sysctlはLinuxカーネルのパラメータを操作するコマンドだぜ。サーバのパフォーマンスにガッツリ効いてくる。

基本的な使い方:

sudo vim /etc/sysctl.d/99-custom.conf
sudo sysctl -p /etc/sysctl.d/99-custom.conf

再起動しても設定が消えんように:

  • /etc/sysctl.confに書く
  • または cloud-initrc.localsysctl -p を追記しとく

インスタンスタイプ(t系、m系など)によっても効き方が違うので、微調整は必要。


3. 現場叩き上げのsysctlテンプレ(十円玉式)

# ファイルシステム設定
fs.inotify.max_user_watches = 524288
fs.file-max = 2097152

# 仮想メモリ設定
vm.swappiness = 10
vm.vfs_cache_pressure = 50
vm.dirty_ratio = 20
vm.dirty_background_ratio = 5

# ネットワーク設定 - 一般
net.core.rmem_max = 33554432
net.core.wmem_max = 33554432
net.core.netdev_max_backlog = 250000
net.core.somaxconn = 4096

# ネットワーク設定 - 特定キューイング規律と輻輳制御
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

# ネットワーク設定 - TCP
net.ipv4.tcp_rmem = 4096 262144 33554432
net.ipv4.tcp_wmem = 4096 262144 33554432
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_sack = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_rfc1337 = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_mtu_probing = 2
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_max_tw_buckets = 360000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_abort_on_overflow = 0

4. Before/After:チューニングの効果を実測

ネットワーク速度:

iperf3 -c サーバIP
  • Before: 300Mbps
  • After: 880Mbps

ディスクI/O:

dd if=/dev/zero of=test bs=1M count=1024 oflag=dsync
  • Before: 80MB/s
  • After: 150MB/s

体感でも「あ、はやっ」てなる。


5. なぜシニアでもやってないの??

  • 既存のナレッジがない
  • クラウド=使い捨て前提で最適化されない
  • 誰も責任を持ちたくない「触らぬカーネルに祟りなし」

でも、sysctlは最も簡単で効果が出るSREテクやで!


6. まとめ:AWSでも「職人芸」は生きている

クラウド時代やからって、全部マネージド任せにしたらアカン。

たった数行のsysctlで、

  • ネット高速化
  • I/O高速化
  • レイテンシちっこくなる

こんなん、やらな損やろ?

今すぐ sudo nano /etc/sysctl.d/aws.conf や!

コメント

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