Container OS 上でDocker Swarm を使ってサービスを運用していると、時々CPUの負荷が高まって応答が返って来なくなる状態になることがある。
sshでログインしてtopコマンドで原因を調べると、kswapd0というスレッドの負荷が高くなっている。スワップに関するカーネルのスレッドらしいのだけど、そもそもContainer OSにはスワップが有効にされていない。
Container OSはDockerに特化したOSであり、メモリ管理は各コンテナ内できっちり行えば、ホストOSがメモリ不足になるようなことは無い、ということなのかどうかは知らないけれど、とにかくContaner OSにはスワップが設定されていない。
この問題の困った点は、DockerのコンテナのCPUやメモリのリソースをきっちり制限して メモリに余裕を持たせた運用をしていても、 メモリ不足が原因と思われるkswapd0の高負荷問題が発生してしまうことだ。
再起動すれば解消するのだけど、その頻度を小さくしたい、できれば解消したいと思い、Container OSにswapを設定して様子を見ることにした。
設定方法は、Container OSの公式サイトに記載のとおりに行った。
まずは、スワップファイルを用意する。
$ mkdir -p /var/vm
$ fallocate -l 1024m /var/vm/swapfile1
$ chmod 600 /var/vm/swapfile1
$ mkswap /var/vm/swapfile1
次に、systemd ユニットファイルを記述していく。
$ vi /etc/systemd/system/var-vm-swapfile1.swap
[Unit]
Description=Turn on swap
[Swap]
What=/var/vm/swapfile1
[Install]
WantedBy=multi-user.target
準備はこれでOK。
次のコマンドでスワップの使用を開始する。
$ systemctl enable --now var-vm-swapfile1.swap
これで、スワップが利用可能になり、リブート時にも自動的に有効になる。
スワップがアクティブになっているか、swaponコマンドで確認できる。
$ swapon
NAME TYPE SIZE USED PRIO
/var/vm/swapfile1 file 1024M 268K -2
OK。アクティブになってる。
さて、これで高負荷問題が解消するといいのだけど…
ホームページの制作(デザイン・コーディング・プログラミング)に加え、ネットショップの販売促進に関するアドバイスも致します。 20年以上に渡って実際にネットショップを運営した経験を生かし、聞きかじりではない実績を伴ったノウハウを、自分の言葉でお伝えいたします。 プログラミングの経験は30年以上。HTML、CSS、JavaScript、TypeScript、Vue、NuxtJS、Node.js、MySQL、MongoDB、Elasticsearch、WordPress、PHP、Docker、Electronなど、幅広く対応します。
コメント