前提
AWSのEC2上起動
redash推奨のAMI使用
Setting up a Redash Instance
経緯
redashで少し結果セットが大きいSQLを設定したところ、以下のようなエラーが発生した。
Worker exited prematurely: signal 9 (SIGKILL)
redashのトラブルシューティングにエラーについて記載があったので確認
Troubleshooting
EC2はt2.smallを選択していてメモリ2GIBしかないことから、メモリ不足ではないかと思い調査をした
メモリ不足の調査
redashはDockerで動いていたため、docker stats
でメモリ使用状況を確認した。
LIMITが1.945GiBとなっていたため、Dockerのメモリはすべて割り当てられていると想定。
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
1b402a43d63c redash_nginx_1 0.01% 2.664MiB / 1.945GiB 0.13% 49.2MB / 17.7MB 280MB / 0B 2
21748bb6d284 redash_scheduled_worker_1 0.18% 190.2MiB / 1.945GiB 9.55% 88MB / 47.8MB 1.32GB / 0B 2
b0a705b2111c redash_scheduler_1 2.19% 280MiB / 1.945GiB 14.05% 108MB / 62.9MB 2.07GB / 8.4MB 3
13ddb29d3e6f redash_server_1 37.26% 487.9MiB / 1.945GiB 24.49% 39.8MB / 50.5MB 3.46GB / 1.97MB 5
8e2540af59fe redash_postgres_1 0.01% 5.52MiB / 1.945GiB 0.28% 103MB / 34.7MB 2.15GB / 116MB 7
bc73e56ac9a2 redash_redis_1 1.84% 2.855MiB / 1.945GiB 0.14% 151MB / 275MB 3.98GB / 85.9MB 4
そこでインスタンスのスケールアップを検討したが、Swapfileを作成することをメンバから勧められた。
swapfile の作成の仕方
swapfileとは
https://wa3.i-3-i.info/word1722.html
まぁ「スワップファイル」って単語が出てきたら「メモリの内容を一時的にしまっておくファイルなんだな~」と、お考えください。
ハードディスクを間借りしてメモリの内容を一時保存できる方法みたい。
そこでredashはubuntuであるため、以下サイトを参考にswapfileを作成してみた。
Ubuntu Server 18.04 LTS スワップファイル設定
※ハードディスクの容量を抑えつつ、推奨の2Gbよりも少なめの1GBで設定
sudo dd if=/dev/zero of=/var/swap/swap0 bs=1M count=1024
※一応ubuntuのバージョンが18.04であることを確認。
root@ip-10-30-10-134:/home/ubuntu# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.3 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
結果
再度redashでクエリを実行したら、遅くても頑張って結果を返してくれるようになりました。
勉強になった。
追記
2020/08/12
Swapfileがサーバの容量を圧迫してredashが使えなくなったので追記します。
Swapfileを削除すれば、一旦容量が空きます。
SWAP ファイルを削除する
linuxの不要なパッケージファイルを削除する
[Redash]突然Internal Server Errorが発生