Столкнулся с такой ситуацией - процессы postgresql 9.2.4 при длительных
подключениях непрерывно кушают память.
Заканчивается это тем, что ядро в конечно итоге убивает одного из них:
pid 10725 (postgres), uid 70, was killed: out of swap space
и мастер начинает перезапускать все остальные процессы
Если смотреть через procstat -v - видно, что непрерывно и монотонно растет
область, которая AFAIK соответствует памяти полученной через malloc:
http://shelr.tv/records/51e585ca9660804590000086
(7 Gb в последней строчке - это shared buffers, они шарятся между всеми
процессами, и проблема не в них).
(чтобы procstat -v показывать в более удобном виде написал скриптик
https://bitbucket.org/citrin/scripts/src/tip/procstat-v.pl)
То что это баг в postgresql 9.2.4 сомнительно. Скорее всего есть какая то
проблема в софте работающем с базой. Можно ли это как то выяснить не анализируя
запутанный код приложения?
Первая мысль была, что не освобождаются prepared statements, но вывод
select * from pg_prepared_statements;
пустой...
Висящих очень долго транзакций в
pg_stat_activity
тоже не видно...
В конфиге
work_mem = 4MB
temp_buffers = 8MB
а по выводу procstat -v складывается впечатление, что он аллоцируют меньше 2 Mb
за раз, так что на work_mem или temp_buffers это не похоже.
Что еще можно посмотреть?