Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Не удалось получить анонимную разделяемую память: Невозможно выделить память / 4 сообщений из 4, страница 1 из 1
02.07.2018, 08:46
    #39668154
Visermoz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не удалось получить анонимную разделяемую память: Невозможно выделить память
Добрый день.
Столкнулся с необычной ошибкой.
Конфигурация postgresql 9.6:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
listen_addresses = '*'
max_connections = 1000
shared_buffers = 1GB
effective_cache_size = 2GB
work_mem = 50MB
maintenance_work_mem = 80MB
min_wal_size = 1GB
max_wal_size = 2GB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100
datestyle = 'iso, dmy'
max_locks_per_transaction=40000
#------------------------------------------
logging_collector = on
log_filename = 'postgresql-%Y-%H.log'
log_truncate_on_rotation = on
log_rotation_age = 1h
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
log_temp_files= 1
log_connections= 1
log_duration= on
log_statement = 'all'
#log_min_messages='FATAL'
#log_min_duration_statement=30000
#------------------------------------------
track_activities = on
track_activity_query_size = 19384
#------------------------------------------
autovacuum = on
autovacuum_max_workers = 3


Сервер имеет 8gb оперативной памяти. Реально подключений будет всего 10, не больше, но для эксперимента поставил max_connections=1000.
Также имеется swap размером 50 gb, но для эксперимента его отключил командой swapoff -a.

При попытке запустить службу postgresql: sudo service postgresql-9.6 start
получаю в лог такое сообщение:
Код: sql
1.
2.
3.
2018-07-02 05:32:45 GMT [5851]: [1-1] user=,db=,app=,client= ВАЖНО:  не удалось получить анонимную разделяемую память: Невозможно выделить память
2018-07-02 05:32:45 GMT [5851]: [2-1] user=,db=,app=,client= ПОДСКАЗКА:  Эта ошибка обычно возникает, когда PostgreSQL запрашивает сегмент разделяемой памяти, превышая объём доступной физической либо виртуальной памяти или гигантских страниц. 
Для уменьшения запроса (текущий размер: 18256445440 Б) можно снизить использование разделяемой памяти, возможно, уменьшив shared_buffers или max_connections.


Не могу никак понять каким образом получается цифра 18256445440 Б. Интересно, что уменьшив max_connections до 100, такой ошибки не получаю. Насколько я знаю память для shared_buffers выделяется при запуске основного процесса, а max_connections уже влияет на количество подключений при дальнейшем использовании.
При включенном swapon -a ошибка не появляется. Причем память ни в swap ни оперативная не занята вообще.

Подскажите пожалуйста что я мог упустить? Почему max_connection может влиять на запуск службы?
Не знаю, важно ли, но приведу настройки ядра sudo sysctl -a | grep kernel.sh:
Код: sql
1.
2.
3.
4.
5.
kernel.shm_next_id = -1
kernel.shm_rmid_forced = 0
kernel.shmall = 2097152
kernel.shmmax = 33554432
kernel.shmmni = 4096
...
Рейтинг: 0 / 0
02.07.2018, 11:58
    #39668233
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не удалось получить анонимную разделяемую память: Невозможно выделить память
Visermoz,

Потребный объём разделямой памяти для старта - это не только shared_buffers, а ещё куча всего нужного . Каждый max_connections тоже имеет свою цену в требуемом объёме shared памяти.
Кстати, ваши очень сильно задранные вверх max_locks_per_transaction тоже живут в shared memory и умножаются на число коннектов (см. LockShmemSize() ).
...
Рейтинг: 0 / 0
02.07.2018, 13:00
    #39668282
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не удалось получить анонимную разделяемую память: Невозможно выделить память
MelkijVisermoz,
Кстати, ваши очень сильно задранные вверх max_locks_per_transaction
а у них 100500 таблиц партицированных по дням и часам. например.
вот в итоге и набегает 40 000 братьев == партиций

2ТС этот параметр, если я правильно помню , нужно крутить только для шибко развесистых баз.
это число локов "объектов"(грубо - таблиц и т.п.) запросом , а не записей.

https://postgrespro.ru/docs/postgrespro/9.6/runtime-config-locks
...
Рейтинг: 0 / 0
03.07.2018, 07:44
    #39668578
Visermoz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не удалось получить анонимную разделяемую память: Невозможно выделить память
Melkij, qwwq,
спасибо большое вам за ответы- даже не догадывался, что эти настройки могут влиять на разделяемую память
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Не удалось получить анонимную разделяемую память: Невозможно выделить память / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]