Konfiguracja ulimit dla użytkownika postgres
: 12 maja 2011, 16:16
Witam.
Wygląda na to, że nie do końca rozumiem w jaki sposób działają limity określane przez ulimit. Zasadniczo chodzi mi o to, żeby zwiększyć limit otwartych deskryptorów (-n, open files) z domyślnej wartości 1024 do 65536 dla użytkownika systemowego postgres.
Rozumiem, że w tym celu najpierw konieczne jest sprawdzenie i ewentualne zwiększenie wartości parametru jądra fs.file-max.
Aby zmienić tę wartość w pliku /etc/sysctl.conf umieszczam
(żeby nie doszło do sytuacji, że PostgreSQL "uzurpuje" cały dostępny zapas) i wykonuje:
Zmiana jest persystentna i przy następnym uruchomieniu systemu fs.file-max będzie miał żądaną wartość.
Natomiast nie wiem w jaki sposób ustawić limit użytkownikowi postgres (który jest właścicielem procesów związanych z PostgreSQL). Owszem jest plik /etc/security/limits.conf, w którym umieszczam np.:
Jednakże, gdy sprawdzam limity, to okazuje, że jest starsza wartość tj. 1024. Jak sprawdziłem, gdy w pliku /etc/pam.d/su odkomentuję
to uruchamiając serwer z konsoli tj. przechodząc na konto root poleceniem su limit jest taki jak trzeba. Problem polega na tym, że PostgreSQL jest uruchamiany przez skrypt /etc/init.d/postgresql-8.3 (przy starcie systemu operacyjnego) i jak sprawdziłem wtedy limit jest nadal 1024.
Z góry dziękuję za wszelkie wytłumaczenia.
Wygląda na to, że nie do końca rozumiem w jaki sposób działają limity określane przez ulimit. Zasadniczo chodzi mi o to, żeby zwiększyć limit otwartych deskryptorów (-n, open files) z domyślnej wartości 1024 do 65536 dla użytkownika systemowego postgres.
Kod: Zaznacz cały
cat /etc/passwd | grep postgres
postgres:x:107:107:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash
su -c "su - postgres" # x w /etc/passwd oznacza, że konto jest zablokowane, czyli tylko root może się na nie dostać
ulimit -n # o ile dobrze rozumiem implicit soft
1024
ulimit -Hn
1024
Kod: Zaznacz cały
sysctl fs.file-max
fs.file-max = 50234
Kod: Zaznacz cały
fs.file-max = 98304
Kod: Zaznacz cały
sysctl -p
fs.file-max = 98304
sysctl fs.file-max
fs.file-max = 98304
Natomiast nie wiem w jaki sposób ustawić limit użytkownikowi postgres (który jest właścicielem procesów związanych z PostgreSQL). Owszem jest plik /etc/security/limits.conf, w którym umieszczam np.:
Kod: Zaznacz cały
postgres hard nofile 65535
postgres soft nofile 65535
Kod: Zaznacz cały
# session required pam_limits.so
Z góry dziękuję za wszelkie wytłumaczenia.