PostgreSQL + OpenVZ + Bus error
Потратил два дня на эти песни и пляски с Postgres и виртуализацией OpenVZ. Суть проблемы — Postgres падает по signal 7 Bus error при любых значениях shared_buffers больше 96MB и записями в логах вида
2013-07-05 03:06:15 UTC ERROR: could not read block 7 in file "base/11921/11687": Bad address
Самый глубокий анализ, что удалось найти в интернет — в этом сообщении. Собственно, он и помог найти причину в конечном итоге. Что характерно, на копии контейнера с той же базой с большими значениями shared_buffers поломать базу не получилось. И тут меня озарило — ВСЕ ИЗМЕНЕНИЯ НАСТРОЕК РАЗДЕЛЯЕМОЙ ПАМЯТИ Я ДЕЛАЛ НА ГОРЯЧУЮ!!!1111111 Перезапустил контейнер — работает как часы. Блядь…. Пишу об этом здесь, чтобы идущие вослед смогли нагуглить решение своих проблем.
В конфиге виртуалки выставляем любое значение, большее или равное требуемому. Это — лимит сверху (одна страницы — 4096 байт на большинстве платформ, в этом примере я разрешил выделять 8Гб разделяемой памяти)
SHMPAGES=»2097152″
Внутри контейнера выставляем такое значение, какое требуется. У меня вот так:
kernel.shmmax = 804519936
kernel.shmall = 196608
Two days spent with strange behavior of Postgres and OpenVZ virtualization. Postgres crashed with signal 7 Bus error with any values of shared_buffers greater than больше 96MB and writes such logs:
2013-07-05 03:06:15 UTC ERROR: could not read block 7 in file "base/11921/11687": Bad address
Most deep analysis of problem I found on internet — in this message. I noticed I can’t crash database on container copy, it worked well with any shared_buffers values. «Aha reaction» — ALL CHANGES I DID TO CONTAINER WAS ON THE FLY!!!111 I restart container and crashes gone!
Добавить комментарий