[ロ] PostgreSQL が停止している。そんなとき。

このエントリーをはてなブックマークに追加
はてなブックマーク - [ロ] PostgreSQL が停止している。そんなとき。
Facebook にシェア
[`yahoo` not found]
[`livedoor` not found]
[`friendfeed` not found]
[`tweetmeme` not found]

PHPのMDB2が下記のようなエラーをはいている。そんなとき。


At prepare(): MDB2 Error: connect failed

# あぁ、こうやって公の場にさらそうと操作ログを確認すると、自分の行動の不可思議さに気がつきますね。何でログ見てないんだとか、場当たりてきな対応にすごい反省する。操作ログはいつもとっているものの見返すことなんてめったにないからね。書いてみるだけでも勉強になります。
詳細は恥ずかしいので→


PostgreSQLに接続できないということなので、ローカルでコマンドラインから接続を試みる。


# psql -l -U postgres
psql: FATAL:  the database system is in recovery mode

データベースシステムがリカバリモードで動いてる?よくわからんが再起動。


# /etc/rc.d/init.d/postgresql restart
postgresql サービスを停止中:                               [失敗]
postgresql サービスを開始中:                               [  OK  ]
# tail /var/lib/pgsql/pgstartup.log
LOG:  logger shutting down
LOG:  logger shutting down
LOG:  logger shutting down
LOG:  logger shutting down
LOG:  logger shutting down
LOG:  logger shutting down
LOG:  logger shutting down
LOG:  logger shutting down
FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 12808) running in data directory "/var/lib/pgsql/data"?

再起動失敗です。サービス開始中がOKになっていkるけれど、ログを見ると失敗しています。まぁ、停止が失敗してますからね。
とりあえず再起動ではなく停止を試みますがやっぱりだめです。


# /etc/rc.d/init.d/postgresql stop
postgresql サービスを停止中:                               [失敗]
# /etc/rc.d/init.d/postgresql stop
postgresql サービスを停止中:                               [失敗]

kill -TERMして見ますがだめだったのでkill -KILL で強制終了


# ps aux | grep postgres
postgres  6751  0.0  0.1  11616   268 ?        S    Jul02   0:21 postgres: logger process                          
postgres 12595  0.0  0.1  22860   460 ?        S    Jul02   0:00 postgres: postgres svsv_sendai 127.0.0.1(3749) startup
postgres 12808  0.1  0.1  21836   404 ?        S    Jul02   3:48 /usr/bin/postmaster -p 5432 -D /var/lib/pgsql/data
root     27173  0.0  0.2   4964   740 pts/0    R+   11:21   0:00 grep postgres
# kill -TERM 12595
# kill -TERM 12808
postgres  6751  0.0  0.1  11616   268 ?        S    Jul02   0:21 postgres: logger process                          
postgres 12595  0.0  0.1  22860   460 ?        S    Jul02   0:00 postgres: postgres svsv_sendai 127.0.0.1(3749) startup
postgres 12808  0.1  0.1  21836   404 ?        S    Jul02   3:48 /usr/bin/postmaster -p 5432 -D /var/lib/pgsql/data
root     27173  0.0  0.2   4964   740 pts/0    R+   11:21   0:00 grep postgres
# kill -KILL 12808
# kill -KILL 12595
# ps aux  | grep postgres
root     27364  0.0  0.2   4964   736 pts/0    R+   11:34   0:00 grep postgres

きちんとプロセスいなくなった。
強制終了したのでpidが残ってしまっています。なので手動削除してから起動を試みます。


# sudo rm /var/lib/pgsql/data/postmaster.pid
# /etc/rc.d/init.d/postgresql start
postgresql サービスを開始中:                               [  OK  ]

ちゃんと起動したようです。


# ps aux | grep postgres
postgres 27438  1.1  1.1  21832  2852 ?        S    11:34   0:00 /usr/bin/postmaster -p 5432 -D /var/lib/pgsql/data
postgres 27440  0.0  0.2  11612   592 ?        S    11:34   0:00 postgres: logger process                          
postgres 27442  0.0  0.3  21832   860 ?        S    11:34   0:00 postgres: writer process                          
postgres 27443  0.0  0.2  12612   588 ?        S    11:34   0:00 postgres: stats buffer process                    
postgres 27444  0.0  0.3  11844   768 ?        S    11:34   0:00 postgres: stats collector process                 
root     27460  0.0  0.2   4968   740 pts/0    R+   11:35   0:00 grep postgres
# psql -l -U postgres
          List of databases
     Name      |  Owner   | Encoding
---------------+----------+----------
postgres      | postgres | UTF8
serverxserver | postgres | UTF8
ss_test       | postgres | UTF8
svsv_sapporo  | postgres | UTF8
svsv_sendai   | postgres | UTF8
template0     | postgres | UTF8
template1     | postgres | UTF8
(7 rows)

OKつながった。後はDBに接続して、SQL発行して値が取れるかチェックして完了。
ログをきちんと確認していなかったのだけど、症状的にはPostgreSQL エラー (recovery modeって何だ)が原因だと思われる。スペックの悪いVMWareゲストでコネクションは相当はってたので、それのせいでコネクションがたまっていったのかなと。
と思って冷静に過去ログを見てみるとメモリ不足ですね。コネクション以前(w
やっぱりVMWareで無理してるから。


# cat ./messages.1 | grep post
Jul  2 00:08:12 lowtech kernel: Out of memory: Killed process 24280 (postmaster).
Jul  2 01:09:31 lowtech kernel: postmaster invoked oom-killer: gfp_mask=0x201d2, order=0, oomkilladj=0
Jul  2 01:07:09 lowtech kernel: Out of memory: Killed process 12811 (postmaster).
Jul  2 01:07:56 lowtech kernel: Out of memory: Killed process 26344 (postmaster).
Jul  2 01:26:21 lowtech kernel: Out of memory: Killed process 26345 (postmaster).
Jul  2 01:44:15 lowtech kernel: Out of memory: Killed process 26378 (postmaster).
Jul  2 03:54:28 lowtech kernel: Out of memory: Killed process 28422 (postmaster).
Jul  2 03:55:08 lowtech kernel: Out of memory: Killed process 28463 (postmaster).
Jul  2 03:58:23 lowtech kernel: Out of memory: Killed process 28464 (postmaster).
Jul  2 04:25:33 lowtech kernel: Out of memory: Killed process 31981 (postmaster).
Jul  2 04:39:42 lowtech kernel: postmaster invoked oom-killer: gfp_mask=0x201d2, order=0, oomkilladj=0
Jul  2 06:31:22 lowtech kernel: Out of memory: Killed process 1345 (postmaster).
Jul  2 06:32:05 lowtech kernel: Out of memory: Killed process 1375 (postmaster).
Jul  2 06:35:22 lowtech kernel: Out of memory: Killed process 1376 (postmaster).
Jul  2 06:39:55 lowtech kernel: postmaster invoked oom-killer: gfp_mask=0x201d2, order=0, oomkilladj=0
Jul  2 06:54:41 lowtech kernel: postmaster invoked oom-killer: gfp_mask=0x201d2, order=0, oomkilladj=0
Jul  2 06:54:41 lowtech kernel: Out of memory: Killed process 5151 (postmaster).
Jul  2 08:19:25 lowtech kernel: postmaster invoked oom-killer: gfp_mask=0x201d2, order=0, oomkilladj=0
Jul  2 08:32:10 lowtech kernel: Out of memory: Killed process 10250 (postmaster).
Jul  3 21:08:14 lowtech kernel: PCI: If a device doesn't work, try "pci=routeirq".  If it helps, post a report
Jul  3 21:08:14 lowtech kernel: FDC 0 is a post-1991 82077

Popular Posts:

“[ロ] PostgreSQL が停止している。そんなとき。” への2件の返信

  1. 内部サーバー用のサービスが原因不明な落ち方をして,ログを見たらPostgreSQLであり,調べたら,そちらのサイトに行き当たりました。大変参考になりました。ありがとうございました。

  2. こんな記事でも参考になったのであればうれしい限りです。
    たまには役に立つこともあるみたいなので、最近さぼってますがネタがあれば更新していこうとおもいます!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*