@pgsql

Страница 433 из 1062
Darafei
17.08.2017
07:35:54
ну, это не киллер, это рипер :)

https://lwn.net/Articles/666024/

это тред ядра, который начинает разбирать память приложения, которое надо убить через -9, даже если оно повисло на неотменяемом сисколле

Google
Maksim
17.08.2017
07:41:15
@Komzpa получается, segfault невозможен при исчерпании процессом физической памяти и swap'а?

Darafei
17.08.2017
07:42:05
если это не так, то я хотел бы, чтобы мне показали этот путь исполнения :)

сегфолтов в постгресе и без oom хватает

Mike Chuguniy
17.08.2017
07:44:54
Опытным путем установлено, что если постгрес запущен по через pg_ctl без ключика -c (--core-files), то вы хоть заиграйтесь лимитами - корок нет и неизвестно. Странно, но я данный факт в wiki чегой-то не наблюдаю. Плохо смотрю?

Maksim
17.08.2017
07:54:59
Эта опция сама проставляет ulimit. Это можно проследить в коде: src/bin/pg_ctl/pg_ctl.c:810

Mike Chuguniy
17.08.2017
07:56:12
Причём тут выставление юлимитов?

Maksim
17.08.2017
07:58:05
Причём тут выставление юлимитов?
хм... установка лимита на размер core - вызов setrlimit c опцией RLIMIT_CORE

Mike Chuguniy
17.08.2017
07:59:06
Ещё раз: без выставления этой опции ты можешь заиграться с юлимитами на уровне системы вусмерть. Но корку ты не получишь. Мало того! pg_ctl-ю на юлимит, выставленный в системе глубоко плевать, как показывает практика.

Проверяется данное утверждение просмотром соответствующего файлика в /proc.

Mike Chuguniy
17.08.2017
08:04:58
Не знаю как у вас, но у себя на маке корки получаю без этой опции...
Какая прелесть! Так и повеяло чем-то родным и до боли близким. :(

Dmitry
17.08.2017
08:06:01
Какая прелесть! Так и повеяло чем-то родным и до боли близким. :(
У тебя тоже был мак, на котором ты мог получать любые корки?

Mike Chuguniy
17.08.2017
08:06:27
А что, на многих маках используется постгрес?

Google
Stas
17.08.2017
08:13:58
Причём тут выставление юлимитов?
при том что корку пишет ОС, и это управляется ulimit-ом. Да, плохо смотришь. Без '-c' они пишутся, если стоят правильные ulimit-ы

хотя, сейчас подумал, я почти из всех скриптов дергаю непосредственно постргес, а не pg_ctl. Он гипотетически может и перетирать ulimit-ы

Mike Chuguniy
17.08.2017
08:18:59
Стас, без -c "Max core file size" равно нулю в /proc/$pid/limits, независимо от того, что написано в /etc/security/limits.conf Я с этим хорошо так нахлебался, когда с Астрой развлекался.

Stas
17.08.2017
08:19:56
в сессии ставь ulimit

Sergey
17.08.2017
08:24:48
при том что корку пишет ОС, и это управляется ulimit-ом. Да, плохо смотришь. Без '-c' они пишутся, если стоят правильные ulimit-ы
Эт оптимистычны подход. В новомодных Linux'ах есть например такая система https://wiki.ubuntu.com/Apport#Crash_interception

Mike Chuguniy
17.08.2017
08:27:28
в сессии ставь ulimit
В какой сесси, если я запускаю ПГ штатным системным способом?

Т.е. либо по через инит-скрипты, либо по через системд, хвала его создателю?

Maksim
17.08.2017
08:28:57
Stas
17.08.2017
08:29:09
В какой сесси, если я запускаю ПГ штатным системным способом?
да е моё, у тебя система не проставила ulimit-ы, хрен знает почему. Как из этого следует что без pg_ctl -c не получишь корки?

Dmitry
17.08.2017
08:29:52
Эт оптимистычны подход. В новомодных Linux'ах есть например такая система https://wiki.ubuntu.com/Apport#Crash_interception
Ну во-первых, эта приблуда есть только в убунте, а в большинстве остальных дистров будет systemd-coredump. А во-вторых, там написано, что даже при нулевом лимите она все равно соберёт дамп :)

Dmitry
17.08.2017
08:31:02
Ну не все пользуются systemd. Кто-то принципиально сидит на последних версиях с init.d

Mike Chuguniy
17.08.2017
08:40:19
/etc/security/limits.conf ?
test@webdeb:~$ grep -v "^\($\|#\)" /etc/security/limits.conf root soft core unlimited root hard core unlimited * soft core unlimited * hard core unlimited test@webdeb:~$ grep "^Max core file size" /proc/{345,708}/limits /proc/345/limits:Max core file size 0 unlimited bytes /proc/708/limits:Max core file size unlimited unlimited bytes 345 - это постмастер; 708 - это tail -f лога ПГ от имени системного пользователя - владельца ПГ.

После правки лимитс.конф сервачок перезапускался.

Mikhail
17.08.2017
08:41:19
Ребята, для primary key нужно выставлять unique constraint или это тавтология?

Mike Chuguniy
17.08.2017
08:42:05
Это тавтология.

Mikhail
17.08.2017
08:42:27
Ага, спасибо

Mike Chuguniy
17.08.2017
08:42:43
Ключ в таблице именно потому и называется ключом, что он однозначно определяет запись таблицы.

Google
Mikhail
17.08.2017
08:43:29
Ну я тоже так думал, просто в итернете часто в примерах выставляют unique для primary ключа в примерах

Mike Chuguniy
17.08.2017
08:43:31
Этих ключей может быть далеко не один. Но вот примари - он таки да, единственный и неповторимый. :)

Интернеты - оне такие, да...

Mikhail
17.08.2017
08:44:20
Интернеты - оне такие, да...
ну я подумал, может фишка такая :)

Stas
17.08.2017
08:46:39
test@webdeb:~$ grep -v "^\($\|#\)" /etc/security/limits.conf root soft core unlimited root hard core unlimited * soft core unlimited * hard core unlimited test@webdeb:~$ grep "^Max core file size" /proc/{345,708}/limits /proc/345/limits:Max core file size 0 unlimited bytes /proc/708/limits:Max core file size unlimited unlimited bytes 345 - это постмастер; 708 - это tail -f лога ПГ от имени системного пользователя - владельца ПГ.
Ты выше написал, что без pg_ctl -c корку не получишь. Я возражаю именно против этого. На нормальной системе limits.conf достаточно. Если почему-то ОС не реагирует на limits.conf, то pg_ctl тут не виноват. ОС так же может и игнорить ulimit/setrlimit и тогда и '-c' не поможет

Артур
17.08.2017
08:50:57


Darafei
17.08.2017
08:51:29
а что из этого ты создавал?

Артур
17.08.2017
08:51:52
ничего. оно в списке маячит

Stas
17.08.2017
08:52:03
а что из этого ты создавал?
принцип Тараса Бульбы)

Артур
17.08.2017
08:52:19
после работы с EMS sql manager появилось

Artem
17.08.2017
08:54:46
Отпишитесь по результатам.
Значит, на мастере все более-менее. А слейвы как падали каждые 5-10 минут, так и падают.

Artem
17.08.2017
08:55:10
overcommit memory 2

overcommit ratio от 70 до 80

Dmitry
17.08.2017
08:57:47
Artem
17.08.2017
08:58:55
А у вас на слейвах какая нагрузка, кроме рековера?
На мастере падения раз в два часа, т.к. нагрузка в основном на три слейва

Примерно 4к транзакций на одной ноде.

В пике до 7к

Dmitry
17.08.2017
09:01:05
А с памятью на слейвах так же, как на мастере?

Google
Artem
17.08.2017
09:03:26
Dmitry
17.08.2017
09:04:50
И тоже 82Гб используется, как на праймари?

Artem
17.08.2017
09:04:57
Настройки overcommit одинаковые

Но на слейвах ещё HugePages

Dmitry
17.08.2017
09:06:37
Ну тогда надо брать gdb и смотреть корки. Другого способа диагностики я не знаю...

А shared_buffers какой у вас?

Admin
ERROR: S client not available

Dmitry
17.08.2017
09:08:09
pgbouncer используете? Или другой пул коннектов?

Artem
17.08.2017
09:08:23
А shared_buffers какой у вас?
60 на мастере, 90 на слейвах

Dmitry
17.08.2017
09:11:19
Попробуйте на одном из слейвов поставить размер shared_buffers 75% от RAM

Игорь
17.08.2017
09:34:53
Mike Chuguniy
17.08.2017
09:41:52
Игорь, у меня аналогичная картина была и на системах с init-ом.

Ща погуглил - таки да, есть такая безобразия на системд. Штопаный разврат, нет в мире щастья, а в жЫзни совершенства.

Игорь
17.08.2017
09:48:34
с init давно не встерачался в этом плане

Alexander
17.08.2017
09:57:31
Ребята, извините за глупый вопрос, но как поставить pg_pathman? Его нужно клонировать и внутри папки выполнить make?

Alexander
17.08.2017
09:59:31
там же инструкция есть в readme
Мой вопрос касается самого первого пункта этой инструкции

Google
Ildar
17.08.2017
09:59:40
Ildar
17.08.2017
10:00:40
(путь к pg_config нужен только, если его нет в PATH)

Artem
17.08.2017
10:01:18
Есть свиги?
У нас уже 8 вечера, решил оставить до завтра. В любом случае, огромное спасибо за советы, завтра утром будет продолжение эксперимента.

Nikolai
17.08.2017
10:21:30
Здравствуйте

Можете посоветовать решение для postgresql read write splitting?

чтобы запросы на запись шли на мастер, а на слейв только чтение

Alexey
17.08.2017
10:31:13
но это на single-node машине с выключенным swap. на NUMA машине и со свопом ответ на вопрос ещё менее однозначный

нет. это синхронная операция, выполняющаяся на page fault, когда не нашлось новых страниц
я утром несколько торопился и, признаюсь, не очень внятно формулировал мысли. моя мысль в том, что oom killer действует чаще асинхронно по отношении к pagefault-ам, происходящим в каждом конкретном процессе. например, если postgresql выделил больше памяти, чем доступно в системе, то с включенным overcommit с большой вероятностью он будет убит не при собственном pagefault-е, а в какой-то произвольный момент времени. просто потому, что какому-то другому процессу в системе понадобилась память

Dmitry
17.08.2017
10:37:19
возможен: https://gist.github.com/akopytov/28bbbb50e07b65e9d0f2479317f41894
это segfault, вызванный неправильной работой с malloc

Alexey
17.08.2017
10:40:33
это segfault, вызванный неправильной работой с malloc
это segfault вызванный тем, что malloc() возвращает NULL

что возможно с выключенным оверкоммитом, что и демонстрирует мой пример

Dmitry
17.08.2017
10:41:58
это segfault вызванный тем, что malloc() возвращает NULL
ну да, надо как бы проверять на NULL

Alexey
17.08.2017
10:42:17
началось всё с обсуждения того, что segfault может быть вызван нехваткой памяти с дефолтным значением overcommit. и что приложения (включая postgres) редко обрабатывают этот конкретный случай всегда корректно

Dmitry
17.08.2017
10:42:17
другое дело, что во многих случаях это может не иметь смысла

нет памяти - нельзя ничего сделать, поэтому abort(), например

Страница 433 из 1062