Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Posgtresql + FreeBSD + более 2gb shared memory грабли
|
|||
|---|---|---|---|
|
#18+
И так есть 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 запршенного размера и забивать ее нулями и смотреть что происходит) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2007, 19:53 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=34866240&tid=2004938]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
70ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
35ms |
get tp. blocked users: |
2ms |
| others: | 270ms |
| total: | 424ms |

| 0 / 0 |
