環境
- Ubuntu 20.04
- docker 20.10.5
- docker-compose 1.28.6
問題
バーチャルプライベートサーバー(VPS)にdockerとdocker-composeを
- UbuntuへDockerをインストール
- How To Install and Use Docker on Ubuntu 20.04
- How To Install and Use Docker Compose on Ubuntu 20.04
辺りを参考にしてインストールしたところ、インストール自体はうまく行ったが、docker-compose が異常に遅い。ほとんどハングしている感じになった。
$ time docker-compose --version
docker-compose version 1.28.6, build 5db8d86f
real 0m55.659s
user 0m0.827s
sys 0m0.144s
このくらいで済む時もあるし、もっと遅かったり、もうちょっと早い時もある。
原因
乱数を作るデバイス /dev/random が、VPSだとエントロピーが足りないらしく、docker-compose が乱数を使おうとしたときにたっぷり待たされてしまうことが原因らしい。以下に該当しそうな議論があった。
実際それが原因かどうかは、entropy の大きさを調べて見ればいい。
$ cat /proc/sys/kernel/random/entropy_avail
45
この数字が小さい(< 1000)と python の乱数生成が遅くなって、python で書かれている docker-compose が遅くなるということらしい。
解決策
haveged と言うパッケージをインストールする。
$ sudo apt-get install -y haveged
解決したか確認。
$ time docker-compose --version
docker-compose version 1.28.6, build 5db8d86f
real 0m0.906s
user 0m0.784s
sys 0m0.121s
1秒以下ということで、こんなもんかな。
この haveged は、https://wiki.archlinux.jp/index.php/Haveged に説明がある通りで、「haveged は仮想環境で質の高いエントロピーを作れるのかどうか疑問があります。Haveged は rdtsc 命令を使用していますが、仮想マシンでこの命令が仮想化されるとエントロピーが低品質になってしまいます。」と言うことです。/dev/random で得られる乱数の質に影響があるかもしれないことを理解した上で使ってください。