Память под коннекты

Привет! На сервере установлено 16GB памяти.

У постгреса выставлено:
shared_buffers = 4GB
work_mem = 5MB
maintenance_work_mem = 128MB
max_fsm_pages = 307200

Но со временем пострегс отъедает всю доступную память на компьютере.
К базе открыто 50 коннектов из приложения и вот atop показывает примерно следующее:

PID SYSCPU USRCPU VGROW RGROW RDDSK WRDSK ST EXC S MEM CMD 1/3
18189 5m51s 227m16s 2.7G 2.3G 0K 0K N- - S 14% java
8309 31m31s 46m13s 4.2G 1.9G 628K 424.7G N- - S 12% postgres
18298 0.90s 31.30s 4.2G 609.4M 0K 17880K N- - S 4% postgres
18282 0.94s 39.99s 4.2G 601.3M 0K 17320K N- - S 4% postgres
...
18225 0.76s 46.31s 4.2G 405.1M 0K 15592K N- - S 3% postgres

Т.е. вот эти процессы postgres (их 50 штук), отвечающие за коннект и отъедают со временем всю память.
Почему? Как их ограничить?

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Уверены, что у вас

Уверены, что у вас shared_buffers немного? В конфиге написано: max_connections*16Kb.

С трудом нашел кнопку

С трудом нашел кнопку ответить :-)

Нет, к сожалению, не уверен. Но разве это много, насколько я понимаю, это некоторая фиксированная по объему разделяемая память, которую используют коннекты. Или это память на один конкретный коннект?

Я так понимаю, что именно

Я так понимаю, что именно фиксированная по объёму память, которую используют все коннекты.
Не случайно она названа SHARED.
Значение по умолчанию составляет 24M. Поэтому значение 4G кажется мне черезчур большим.
Попробуйте ограничиться для начала 512M.
Далее, сколько у вас max_connections и сколько реально юзверей? Может тоже имеет смысл подкорректировать?
Ну и советую ещё прокурить
http://postgresql.ru.net/manual/runtime-config.html
Вдруг чего интересное найдёте?

Да, думаю, надо попробовать

Да, думаю, надо попробовать уменьшить объем.

max_connections = 150, но пользователь один у которого максимальное количество коннектов в пуле = 50.
Т.е., по сути, максимальное количество коннектов к постгресу = 50 + пара psql от человеков.

За ссылку спасибо :-)

Выставил shared_buffers=150MB

Выставил shared_buffers=150MB , в итоге 50 коннектов отъели 7,5 GB памяти.
6 GB осталось системе. Так вот база стала работать заметно шустрее. Видимо, стали работать системные кэши, которые раньше вообще не работали.

Остановился на

Остановился на shared_buffers=50MB :-)

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023