Slide 1

Slide 1 text

1 MySQLのOOMと戦った話 渡部 ⿓⼀ Road to SRE NEXT@広島 渡部⿓⼀

Slide 2

Slide 2 text

技術部プラットフォームグループ 2021年 中途入社 2 自己紹介 渡部 龍一 Watanabe Ryuichi ● ロール: SRE ● 仙台から来ました(楽天ファンです ) ● YAPC::HiroshimaでEOLの話をしてました ● Mackerelアンバサダー

Slide 3

Slide 3 text

3 “MySQLがOOM Killerされた”

Slide 4

Slide 4 text

4 “どうなるか”

Slide 5

Slide 5 text

5 ● データベースはサービスにおいて最もクリティカルなロールの⼀つ ● マルチプライマリやリードレプリカが対象であってもOOM Killerによる死はサービス 側で影響がでる ○ プライマリのフェールオーバーまでにかかる時間書き込みできない ○ リードレプリカの死を検知しても即座に別のレプリカに繋ぐことはTCPを使っている以上難 しい ○ バッファープールも何も乗らずに起動する(or 設定で変更は可能)のでクエリが遅い どうなるか

Slide 6

Slide 6 text

6 “起きないようにしたい”

Slide 7

Slide 7 text

7 ● OOM(Out Of Memory) は、コンピュータシステムにおいて利⽤可能なメモリが不 ⾜し、プロセスが必要なメモリを確保できない状態を指す ● メモリの過剰使⽤やメモリリークが原因となりがち ● OOM Killerとは ○ OOM Killer は、Linuxカーネルに組み込まれている機能 ○ システムがメモリ不⾜の状態になったときに、システム全体の安定性を保つためにプロセス を強制終了する機能 OOMとは?

Slide 8

Slide 8 text

8 “メモリの使⽤を制限しよう!”

Slide 9

Slide 9 text

9 “MySQLの取りうるメモリサイズ”

Slide 10

Slide 10 text

10

Slide 11

Slide 11 text

11 “搭載メモリサイズ以下になればOK?”

Slide 12

Slide 12 text

12 “そんなことはない”

Slide 13

Slide 13 text

13 “malloc”

Slide 14

Slide 14 text

14 ● glibc/malloc ○ 動的メモリを確保するための標準ライブラリ ■ malloc(3)、free(3) ○ https://bugs.mysql.com/bug.php?id=100704 ○ 内部で管理されるヒープメモリプールを使⽤して効率的なメモリ管理 ■ 詳しくは「malloc動画」で検索! ● google/tcmalloc ○ Googleによって開発された⾼性能なメモリアロケータであり ○ マルチスレッド環境での効率的なメモリ管理を⽬的としている ○ 他の選択肢としてはjemalloc/jemallocとかもある malloc

Slide 15

Slide 15 text

15 “virtual memory size”

Slide 16

Slide 16 text

16 ● virtual memory sizeとは ○ プロセスがアクセスできるメモリ領域 ○ プロセスがマッピングしたすべてのメモリ領域の合計(mallocして使わないとrssは増えない) ● Mackerelを⽤いて使⽤量を監視しつつ閾値以上になったらVSSを⼤量消費しているプ ロセスを再起動 ● ありがちだったのが⻑すぎるトランザクションが消費してたりしたので監視 virtual memory size

Slide 17

Slide 17 text

17

Slide 18

Slide 18 text

18 “万事解決!”

Slide 19

Slide 19 text

19 “ではない”

Slide 20

Slide 20 text

20 “FTSのテーブルのrestore中にOOM”

Slide 21

Slide 21 text

21 ● mydumperを使ってFullTextインデックスがあるテーブルをdump/restoreするとOOM Killerで死 ● パラメータを⾊々変えて⾒ても発⽣していた(MySQL 5.7.36) ○ 8.0にしたので今は起きないかもと思いつつバグレポート探すとまだまだ出てくる... ■ https://bugs.mysql.com/bug.php?id=100704 ● MySQL Bugsをみると似たような事象の報告が多数あったが特に解決まで⾄らずに数 年とか経っていそうだったので⼀旦別⽅針で進めることに... Full Text Index(未解決)

Slide 22

Slide 22 text

22 “まとめ”

Slide 23

Slide 23 text

23 ● データベースはサービスにおいて最もクリティカルなロールの⼀つOOMで殺されたく ない!!! ● mallocやvirtual memoryあたりのキーワードは覚えておくと今後も良いかも ● Auroraでも起きるのでaurora_oom_responseとかは有効にしておくと便利 まとめ