会社のテックブログに記事を書きました: ペパボ トラブルシュート伝 - TCP: out of memory -- consider tuning tcp_mem の dmesg から辿る 詳解 Linux net.ipv4.tcp_mem

以下の記事です。

tech.pepabo.com

  • TCP our of memory
  • memory pressure モード
  • net.ipv4.tcp_mem

以上の三つの詳細を扱ったエントリです。TCP で大規模なトラフィックを扱っているサーバを扱われている場合、問題がないかどうかを確かめてみるとよいかと思います。

本文長いです。何に気をつけたらいいんでしょう?

ラクティカルな話だけをまとめると、以下の4行です。

  • memory pressure モードに入ってしまうと warning です
  • TCP out of memory が出てしまうと critical です
  • 監視は /proc/ 以下のファイルを見ましょう
  • チューニングは net.ipv4.tcp_mem で行いましょう

LVS はどうなの?

LVS でロードバランシングしている場合は、TCP スタックを通らないため TCP oom や memory pressure モードは問題にならないと思います ( LVS のソースは呼んだことないので、確実ではないですが ... )

定量的な評価はしなかったのか?

Q「パフォーマンス」に触れているが、はたして、どれくらい性能に影響する問題なのですか?
A. すいません。測定してないです。

ソースを読んだ上での定性的な評価のみです。

定量的な評価はできませんでした。ツールの選定を始め、どのようにシミュレート環境を作るべきかが分からず 手を出せませんでした。力不足に尽きますね。

落穂拾い的な話

  • TCP/IP の理解が浅いところからスタートで、初歩の初歩から学び直しが必要だった。
  • ソースと書籍を読みあさって、お正月から 一ヶ月〜二ヶ月くらい費やしました。(コロナのせいでしばらく記事を寝かせていた)
  • 調査の過程で「TCP のパケットドロップってどういう条件で起きるんだ?」という長年の疑問が解決されたのもよかった

記事を書いた時に頻繁に参照したのが、以下の書籍です。

https://www.amazon.co.jp/dp/0470147733www.amazon.co.jp

TCP/IP Architecture, Design, and Implementation in Linux は、Linux カーネル 2.4系のソースを併記しながら TCP/IP スタックを細かく解説するカーネル本です。2.4 系であっても参考となる箇所は多く、この本がないと調べきるのは難しかったなと思います。編集や校正が詰めきれてないのか、ところどころアラが目立つ書籍ではあるので、ご注意を ... 。