[pgsql-jp: 30275] ERROR: out of free buffers: time to abort !
Y.Watanabe
yuw @ msj.biglobe.ne.jp
2003年 6月 30日 (月) 15:59:12 JST
ども。渡辺と申します。
PHP4.3.0, postgreSQL7.1.1 Apache1.3.27 Redhat6.2
という構成でWebサイトを組んでおります。
最近アクセス数が増えてきて、例によって23時ごろの高負荷
がかなりヤバイところまできてしまいました。
具体的には、ブラウザからの同時アクセスが増えてくると、
以下のようなログが出て、事実上アクセスできない
状態になることがあるようです。
高負荷のときのpostgreSQLのログの例:
※まともに動いている時間帯には何も出ない。
Jun 24 23:17:15 host postgres[13333]: [1-1] ERROR: out of free buffers: time to abort !
Jun 24 23:17:30 host postgres[13394]: [1-1] ERROR: out of free buffers: time to abort !
Jun 24 23:17:30 host postgres[13370]: [1-1] ERROR: out of free buffers: time to abort !
Jun 24 23:18:52 host postgres[13363]: [1-1] ERROR: out of free buffers: time to abort !
Jun 24 23:18:52 host postgres[13404]: [1-1] ERROR: out of free buffers: time to abort !
Jun 24 23:19:07 host postgres[13361]: [1-1] ERROR: out of free buffers: time to abort !
Jun 24 23:19:10 host postgres[13379]: [1-1] ERROR: out of free buffers: time to abort !
Jun 24 23:19:10 host postgres[13356]: [1-1] ERROR: out of free buffers: time to abort !
Jun 24 23:19:10 host postgres[13430]: [1-1] ERROR: out of free buffers: time to abort !
Jun 24 23:20:02 host postgres[13442]: [1-1] ERROR: out of free buffers: time to abort !
Jun 24 23:20:02 host postgres[13455]: [1-1] FATAL 1: out of free buffers: time to abort !
Jun 24 23:20:02 host postgres[13348]: [1-1] ERROR: out of free buffers: time to abort !
Jun 24 23:20:02 host postgres[13400]: [1-1] ERROR: out of free buffers: time to abort !
Jun 24 23:20:02 host postgres[13383]: [1-1] ERROR: out of free buffers: time to abort !
高負荷のときのtopコマンドの例(抜粋です):
※低負荷時にはDB接続もhttpdも一つか二つずつくらいしかない。
※Apacheのmaxcliantsは8に絞ってるのに
なんでこんなにDB接続が増えちゃうんだろ?・・・。
PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND
13445 postgres 12 0 2888 2852 1900 R 0 7.0 4.4 0:16 postgres: user01 db01
13451 postgres 12 0 2888 2852 1904 R 0 7.0 4.4 0:16 postgres: user01 db01
13496 postgres 12 0 2924 2888 1920 R 0 6.2 4.5 0:11 postgres: user01 db01
13550 postgres 13 0 2468 2432 1812 R 0 6.2 3.8 0:03 postgres: user01 db01
13554 postgres 12 0 2832 2796 1900 R 0 6.2 4.3 0:02 postgres: user01 db01
13486 postgres 12 0 2928 2892 1920 R 0 5.5 4.5 0:12 postgres: user01 db01
13487 postgres 12 0 2908 2876 1928 R 0 5.5 4.4 0:12 postgres: user01 db01
13495 postgres 12 0 2920 2884 1920 R 0 5.5 4.5 0:12 postgres: user01 db01
13508 postgres 12 0 2868 2832 1904 R 0 5.5 4.4 0:09 postgres: user01 db01
13503 postgres 12 0 2916 2880 1920 R 0 4.7 4.5 0:09 postgres: user01 db01
13509 postgres 12 0 2872 2836 1904 R 0 4.7 4.4 0:09 postgres: user01 db01
13522 postgres 12 0 2892 2856 1916 R 0 4.7 4.4 0:06 postgres: user01 db01
13575 postgres 8 0 2472 2436 1780 R 0 4.7 3.8 0:00 postgres: user01 db01
13450 postgres 11 0 2964 2928 1944 R 0 3.9 4.5 0:15 postgres: user01 db01
13534 postgres 12 0 2892 2856 1920 R 0 3.9 4.4 0:04 postgres: user01 db01
13468 postgres 10 0 2880 2844 1900 R 0 3.1 4.4 0:13 postgres: user01 db01
13458 postgres 11 0 2888 2852 1904 R 0 2.3 4.4 0:15 postgres: user01 db01
13551 postgres 10 0 2492 2456 1820 R 0 2.3 3.8 0:01 postgres: user01 db01
4 root 3 0 0 0 0 SW 0 1.5 0.0 31:03 kswapd
32578 root 5 0 1012 256 212 S 0 1.5 0.4 0:05 /usr/local/apache/bin/httpd
13546 postgres 10 0 2764 2744 1972 R 0 1.5 4.2 0:02 postgres: user01 db01
13547 postgres 9 0 2764 2748 1968 D 0 1.5 4.2 0:02 postgres: user01 db01
32574 postgres 1 0 448 336 256 S 0 0.0 0.5 0:09 /usr/local/pgsql/bin/postmas
13511 nobody 0 0 1660 1024 900 S 0 0.0 1.6 0:00 /usr/local/apache/bin/httpd
13521 nobody 0 0 3024 2808 2036 S 0 0.0 4.3 0:00 /usr/local/apache/bin/httpd
13539 nobody 0 0 1876 1320 1172 S 0 0.0 2.0 0:00 /usr/local/apache/bin/httpd
13552 nobody 0 0 1660 1024 900 S 0 0.0 1.6 0:00 /usr/local/apache/bin/httpd
13564 nobody 2 0 3040 2832 2076 S 0 0.0 4.4 0:00 /usr/local/apache/bin/httpd
13565 nobody 0 0 1660 1024 912 S 0 0.0 1.6 0:00 /usr/local/apache/bin/httpd
13576 nobody 3 0 1660 1024 920 S 0 0.0 1.6 0:00 /usr/local/apache/bin/httpd
13577 nobody 4 0 1660 1024 920 S 0 0.0 1.6 0:00 /usr/local/apache/bin/httpd
httpd.confは以下のとおり。(抜粋)
Timeout 60
KeepAlive On
MaxKeepAliveRequests 50
KeepAliveTimeout 3
MinSpareServers 5
MaxSpareServers 5
StartServers 5
MaxClients 8
MaxRequestsPerChild 100
postgresql.confはほとんどデフォルトのまま
(=ほとんどコメントアウトされたまま)です。以下抜粋。
#log_connections = on
#fsync = off
#max_connections = 64
#max_connections = 32 # 1-1024
#sort_mem = 512
#shared_buffers = 2*max_connections # min 16
#fsync = true
silent_mode = on
syslog = 2 # range 0-2
syslog_facility = 'LOCAL2'
PostgreSQL自体が古い(7.1.1)のでバージョンアップも考えたのですが、
実運用にはいってるのですぐにはむずかしい状況です。
個人的には、postgresql.confをに何らかの適切な値をちゃんと
設定すべきかなとは思っているのですが、
ちょっとno ideaです。
「いいチューニング方法がここに載ってるよ」
というポインタだけでも結構ですのでアドバイス求むです。
# 石井さんのpg_poolが真剣に欲しくなってきた・・・
pgsql-jp メーリングリストの案内