まひろ量子のハックログ

プログラミングや機械学習などの知識を記録・共有します

EC2インスタンス変更後にPostgreSQLやRailsが動かない時の対処法

f:id:twx:20190427125137p:plain
AWS EC2変更後にPostgreSQLが動かない…?

EC2インスタンスの変更方法

インスタンスが起動中であれば、まず停止します。 その後、「アクション」→「インスタンスの設定」→「インスタンスタイプの変更」をクリックすればOK。簡単すぎてびっくりします。 変更が完了したら起動してください。

f:id:twx:20190427125511p:plain
インスタンスの停止
f:id:twx:20190427125531p:plain
インスタンスタイプの変更

変更後のインスタンスでRailsが動いていない…?

Railsアプリをデーモンで起動しようとしたところ、うまくいっていない模様。

$ sudo service hogehoge status
● hogehoge.service - LSB: starts hogehoge (a rails app)
   Loaded: loaded (/etc/init.d/hogehoge; bad; vendor preset: enabled)
   Active: active (exited) since Sat 2019-04-27 10:18:14 JST; 10s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 2490 ExecStop=/etc/init.d/hogehoge stop (code=exited, status=0/SUCCESS)
  Process: 2494 ExecStart=/etc/init.d/hogehoge start (code=exited, status=0/SUCCESS)

Apr 27 10:18:12 ip-172-31-11-246 systemd[1]: Stopped LSB: starts hogehoge (a rails app).
Apr 27 10:18:12 ip-172-31-11-246 systemd[1]: Starting LSB: starts hogehoge (a rails app)...
Apr 27 10:18:14 ip-172-31-11-246 hogehoge[2494]: master failed to start, check stderr log for details
Apr 27 10:18:14 ip-172-31-11-246 systemd[1]: Started LSB: starts hogehoge (a rails app).

ふむ、master failed to start, check stderr log for detailsとのこと。しかし、ログを見ても原因はわからずでした。困った…

しばらく原因を調査したところ、メモリ不足のせいで落ちていると分かりました。 インスタンス変更時にこれまでよりもメモリが少ないタイプに変更していたのです。

PostgreSQLの設定ファイルをいじって、使用するメモリの量を以下のように変更しました。 これまでT2.largeインスタンス(8GB)だったので、shared_buffersに2GBを割り当てていたのですが、今回T2.micro(1GB)に変更したのでshared_buffersは256MBにしました。

sudo vi /etc/postgresql/9.4/main/postgresql.conf 
# - Memory -

shared_buffers = 256MB                  # min 128kB

PostgreSQLを再起動すると、今度はうまくいきました。

$ sudo service hogehoge status
● hogehoge.service - LSB: starts hogehoge (a rails app)
   Loaded: loaded (/etc/init.d/hogehoge; bad; vendor preset: enabled)
   Active: active (running) since Sat 2019-04-27 10:34:23 JST; 2h 31min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 3628 ExecStop=/etc/init.d/hogehoge stop (code=exited, status=0/SUCCESS)
  Process: 3632 ExecStart=/etc/init.d/hogehoge start (code=exited, status=0/SUCCESS)
    Tasks: 5
   Memory: 130.3M
      CPU: 4.987s
   CGroup: /system.slice/hogehoge.service
           ├─3695 unicorn_rails master -c /home/hogehoge/hogehoge-atsume/config/unicorn.rb -D -E production
           └─3700 unicorn_rails worker[0] -c /home/hogehoge/hogehoge-atsume/config/unicorn.rb -D -E production

Apr 27 10:34:20 ip-172-31-11-246 systemd[1]: Starting LSB: starts hogehoge (a rails app)...
Apr 27 10:34:23 ip-172-31-11-246 systemd[1]: Started LSB: starts hogehoge (a rails app).

めでたし、めでたし。

インスタンスタイプを変更してメモリが少なくなったら、これまで動いていたアプリケーションの使用メモリも小さくすべきというお話でした。

以上、 良い記事だと思っていただけた方は下の「★+」ボタンのクリック、SNSでのシェア、「読者になる」ボタンのクリックをお願いいたします。 それではまた〜

Kozuko Mahiro's Hacklog ―― Copyright © 2018 Mahiro Kazuko