Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Posgtresql + FreeBSD + более 2gb shared memory грабли / 1 сообщений из 1, страница 1 из 1
12.10.2007, 19:53
    #34866240
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Posgtresql + FreeBSD + более 2gb shared memory грабли
И так есть freebsd 6.2 amd64 c наложеным patch вот отсюда: http://www.sysoev.ru/freebsd/bigshm.html,
8Gb ram


=================================================================================
bash-2.05b$ sysctl -a | grep shm
kern.ipc.shmall: 1572096
...
kern.ipc.shmmax: 6439305216

bash-2.05b$ ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) 33554432
тоесть лимиты впролне себе с запасом стоят...

Никакой shared memory никому другому не выдано:
bash-2.05b$ ipcs -m
Shared Memory:
T ID KEY MODE OWNER GROUP
=================================================================================


При запуске 1Gb shared memory имеем:
/usr/local/pgsql/bin/postgres -D /data/pgdata/ -B 131072 -d 3
...
2007-10-12 19:21:48 MSD 63424 @ DEBUG: invoking IpcMemoryCreate(size=1114759168)
успешно



При запуске с 2gb shared memory получаем облом вида (ipcs -m пустой на момент старта):
/usr/local/pgsql/bin/postgres -D /data/pgdata/ -B 262144 -d 3
...
2007-10-12 19:23:01 MSD 63443 @ DEBUG: invoking IpcMemoryCreate(size=2212626432)
2007-10-12 19:23:01 MSD 63443 @ FATAL: could not create shared memory segment: Cannot allocate memory
2007-10-12 19:23:01 MSD 63443 @ DETAIL: Failed system call was shmget(key=5432001, size=2212626432, 03600).
2007-10-12 19:23:01 MSD 63443 @ HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory or swap space. To reduce the request size (currently 2212626432 bytes), reduce PostgreSQL's shared_buffers parameter (currently 262144) and/or its max_connections parameter (currently 500).
The PostgreSQL documentation contains more information about shared memory configuration.
(оччень странно... по тестам выдается успешно любой сегмент до 2^31-1)


При запуске с 4gb shared memory имеем core dumped (ipcs -m пустой на момент старта):
/usr/local/pgsql/bin/postgres -D /data/pgdata/ -B 524288 -d 3
...
2007-10-12 19:25:30 MSD 63453 @ DEBUG: invoking IpcMemoryCreate(size=4408360960)
Segmentation fault: 11 (core dumped)


=======================================================================
gdb bt показывавет вот что:

#0 0x0000000000672ee0 in hash_create (tabname=0x72e21f "Shared Buffer Lookup Table", nelem=524304, info=0x7fffffffe640,
flags=373) at dynahash.c:449
449 MemSet(hctl, 0, sizeof(HASHHDR));
(gdb) bt
#0 0x0000000000672ee0 in hash_create (tabname=0x72e21f "Shared Buffer Lookup Table", nelem=524304, info=0x7fffffffe640,
flags=373) at dynahash.c:449
#1 0x00000000005bdd0f in ShmemInitHash (name=0x72e21f "Shared Buffer Lookup Table", init_size=524304, max_size=9594307,
infoP=0x7fffffffe640, hash_flags=501) at shmem.c:294
#2 0x00000000005b2420 in InitBufTable (size=9594307) at buf_table.c:65
#3 0x00000000005b5905 in StrategyInitialize (init=1 '\001') at freelist.c:247
#4 0x00000000005b264d in InitBufferPool () at buf_init.c:137
#5 0x00000000005bc615 in CreateSharedMemoryAndSemaphores (makePrivate=0 '\0', port=5432) at ipci.c:181
#6 0x000000000059c2cd in PostmasterMain (argc=7, argv=0x7fffffffec60) at postmaster.c:1804
#7 0x000000000054d2e2 in main (argc=7, argv=0x46) at main.c:188

После core остается естественно неубранная shared memory.

Первая мысль я как то умудрился собрать 32битный postgres на amd64 платформе... откуда и все грабли...
но:

elfdump -e /usr/local/pgsql/bin/postgres

elf header:

e_ident: ELFCLASS64 ELFDATA2LSB ELFOSABI_FREEBSD
e_type: ET_EXEC
e_machine: EM_X86_64
...

Фактически по моим ощущениям ядро выдало не то что postgres просил (4408360960) а 4408360960-2^32 = 113393664 и при этом сказало что мол все ок... ну и когда postgres полез в память которую ему (с его точки зрения) выдали он получает Segmentation fault.
Какой то полный бред помоему.
(Установка postgres из портов, попытка попробовать 8.3 beta, build world не помогают... поведение остается неизменным что приводит меня к мысли что я что то системно не так дела... ничего не меняется при смене сервера на другой аналогичной конфигурации)

Может кто то из совсем гуру подсказать что не так и куда копать.
(по хорошему надо бы написать тестовую утилитку на c которая будет выделять shared memory запршенного размера и забивать ее нулями и смотреть что происходит)
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Posgtresql + FreeBSD + более 2gb shared memory грабли / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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