PG::ConnectionBad でサイトが一時的にクラッシュ

エラーログで、以下のエラーが断続的に発生しています。これにより、サイトが復旧するまでの 15〜30 秒間アクセスできなくなります。

Info エラーメッセージ:

PG::ConnectionBad (FATAL: the database system is in recovery mode) /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/pg-1.2.3/lib/pg.rb:58:in `initialize’

Env エラーメッセージ:


これらのログを見て気づいた非常に奇妙な点は、/var/www/… のフォルダを検索しているように見えることです。しかし、そのフォルダはサーバーには存在しません。存在すべきでしょうか?ご助力いただければ幸いです。

データベースが破損していれば、サイトも必然的に破損します。その原因を特定する必要があります。最も一般的な原因は、RAM不足とディスク容量不足です。私の推測ではRAMの問題でしょう。RAMはどれくらいありますか?free -h の出力結果は何ですか?

それはコンテナ内のパスです。./launcher enter app を実行すると、そこに存在していることが確認できます。

おっしゃる通りだと思います。free -h の出力は以下の通りです。

image

131M の空き容量は、私にはあまり多くないように思えます。

さて、646M のメモリが利用可能です。4GB なら通常はスワップの使用は推奨されません。データベースのサイズはどれくらいですか?トラフィック量はどの程度ですか?サーバー上で Discourse 以外に何か他のサービスが動作していますか?

サーバー上では Discourse 以外は何も実行されていません。

サイズを確認するために以下のコマンドを実行しました。

./launcher enter app
rails db
SELECT pg_size_pretty(pg_database_size(current_database()));

出力結果は 4650 MB(1 行)でした。

トラフィックについては、昨日のページビュー数は 1,200、過去 1 週間で 12,400 です。過去 1 週間のユーザー数は約 160 人、同時接続ユーザー数は約 80 人です。

空きディスクがある場合は、スワップ領域を追加して一時的な余裕を持たせましょう。

そこにスワップ領域を1GB追加しました。今夜の混雑時にどうなるか見てみましょう。

image

本当に助かりました。1GB のスワップ領域を追加したところ、クラッシュの問題がすべて解決しました。DB の問題ではなく、RAM の問題だったと知って本当に安心しています。週末にサーバーの RAM を増設しようと思います。このスレッドで助けをくれた皆さん、本当にありがとうございます!

増設後、discourse-setupを再実行してメモリパラメータをリセットしてください。

最初から正しく調整されていたのか気になります。:man_shrugging:t2:

正直なところ、確信はありません。以前は、ハードウェアを変更した後に再構築とサーバーの再起動を行いました。再起動後であれば、Discourse がシステムの変更を認識したはずです。

スワップファイルのインストール後、4 GB を超える「メモリ」が使用されていた時期があり、これは最も混雑する時間帯と一致し、サーバーがクラッシュした時期とも重なっていました。そのため、これが問題だったことは間違いありません。本日アップグレードを行い、現在はサイトが非常にスムーズに動作しています。

しかし、実際には反映されていません。データベースが使用できる RAM の量などを制御する設定は、app.yml に埋め込まれています。これらは手動で編集するか、discourse-setup を再実行することで変更できます。

discourse-setup 関数を本日再実行しました。それまでその存在に気づいていなかったためです。私にとっては新しい情報でした。