postgresqlでToo many open files in system

RHEL4での話。PostgreSQLは8.3。

postgresqlが落ちた。
 ↓
ログに、
FATAL: could not open file "global/pg_database": Too many open files in system
 ↓
調べる。
 lsof |grep postgre |wc -l
 ↓
ファイルディスクリプタ数が足りない?
 ↓
ulimit -a
 ↓
1024。小さい。
 ↓
cat /proc/sys/fs/file-max
 ↓
1533837。まだいける。
 ↓
とりあえず、
/etc/init.d/postgresqlのstart()の冒頭に、
 ulimit -n 4096
を入れて、再起動。
 ↓
(上述の /etc/init.d/postgresql は元に戻す)
/etc/initscript を以下の内容で作成して、サーバー再起動。
ulimit -n 4096
eval exec "$4"
 ↓
反映結果は、サーバー再起動後、cat /proc/13945/limits | grep "open files"で
調べればいいんだけれど、limitsはKernel 2.6.24からしか使えないのであきらめる。

参考
 Linuxのファイルディスクリプタ数を変更・確認する方法

以上です。