いつもお世話になっております。
Rails + Nginx + AWS + RDS環境でwebページを作成しております。
管理画面のようなページを作成しており、20カラム、20000行程度のデータベースの内容をViewに表示しており、もっと見る機能でページを下にどんどん表示することができる状況です。
ページネーションは100ページずつでGemのKaminariを使用しています。
AWSのインスタンスタイプt2micro(メモリ1G vCPU 1)で運用しているのですが、もっと見るを繰り返し押してどんどん表示してくとPumaが落ちてしまいます。
vmstatで監視していると、Pumaの起動時でメモリは700M程度あり、20000行のページを表示(kaminariで最初の100行分が表示)すると一気に200M程度まで下がり、もっと見るを繰り返し進めていると50M程度まで下がった後Pumaが落ちてしまいます。
インスタンスタイプをt2midium(メモリ4G vCPU 2)に変更してみると、Pumaの起動時でメモリは3.5G程度であり、ページ表示で3G、もっと見るで2.6G程度となります。
ここで質問なのですが、20000行程度のテーブルを扱う場合にメモリ1Gというのは一般的にはよくないのでしょうか。
また、4Gにt2midium(メモリ4G vCPU 2」に変更した場合でも表示に5秒程度かかり、「もっと見る」で次の100件を表示するたびに5秒ほどかかり、かなり遅いように感じたのですが、Viewにモデルを渡す場合にもっと効率的な方法などがあるのでしょうか。
参考になるサイトでも構いませんので、適切な方法をご教示いただけますと幸いです。
よろしくお願いいたします。
# コントローラー def show # kaminariでページを区切る @users = User.all.page(params[:page]).per(100) render 'xxxx_xxxs/show' end # ビュー <% @users.each do |user| %> <% user.id %> <% user.name %> ・ ・ ・ <% end %> <%= link_to_next_page @users, 'もっと見る', remote: true, id: 'more_link' %>
環境
Amazon Linux release 2 (Karoo)
Rails 5.2.3
Ruby version: 2.6.1
回答2件
あなたの回答
tips
プレビュー