16.07.2013 21:15, Anton Yuzhaninov пишет:
> Столкнулся с такой ситуацией - процессы 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 это не похоже.
>
> Что еще можно посмотреть?
Попробуйте помониторить состояние напр. с помощью pg_top, порт под
freebsd правда давно не обновлялся.