FlexiBee: nastavení sdílené pamětí na Mac OS X

V poslední době se nám začali ozývat uživatelé s Mac OS X s tím, že mají potíže při aktualizaci na novou verzi. Při hlubším zkoumání jsme přišli na to, že se problém projevuje jen u zákazníků, kteří aktualizují ze velmi staré verze na novou. Nakonec jsme
přišli na to, že je problém v nastavení sdílené paměti, kterou využívá databázový stroj PostgreSQL, který vnitřně používáme. Řešením tedy je, tuto paměť zvýšit.

Co je sdílená paměť?

Samozřejmě to neznamená, že máte rozbitý počítač. Jedná se pouze o maximální limit na paměť, kterou může použít aplikace pro komunikaci s dalšími aplikacemi. Tento způsob komunikace není příliš často využíván, ale databázový systém PostgreSQL jej využívá intenzivně. Tento limit je implicitně na počítačích Mac OS X nastaven na velmi nízké číslo (cca 4MB).

Jak to opravit?

Do instalátoru jsme dodali nástroj MemoryEnhancer, který provede nastavení. Změna se projeví až po restartování počítače a může jej volat pouze uživatel s administrátorskými oprávněními.

Technické detaily

Pokud jste tedy dělali aktualizaci přes několik minoritních verzí systému WinStrom, mohlo u Vás dojít k problému s aktualizací schématu databáze. Tato aktualizace se nepovedla a databáze zůstala v původním stavu (výhoda plně transakčního zpracování). Tento problém byl způsoben nedostatkem zámků pro zamčení databáze WinStrom-PostgreSQL. Řešením je navýšit počet zámků v konfiguraci WinStrom-PostgresSQL. Jenže počet zámků spolu s počtem spojení povolených do databáze PostgreSQL ovlivňuje velikost sdílené paměti.

Konfigurace

Následující řádky popisují změny, které provádí nástroj MemoryEnhancer přibalený v instalačním balíku.
Nastavení sdílené paměti se provádí nastavením 5 proměnných do souboru /etc/sysctl.conf. Aby se změna projevila je zapotřebí restartovat systém. (uvedeny jsou současné požadavky na WinStrom-PostgreSql)

kern.sysv.shmmax=33554432    # maximální velikost segmentu sdílené paměti
kern.sysv.shmmin=1            # minimální velikost segmentu sdílené paměti
kern.sysv.shmmni=256           # maximální počet oddělených idček sdílené paměti
kern.sysv.shmseg=64           # maximální počet segmentů sdílené paměti pro jednoho uživatele
kern.sysv.shmall=8192         # maximální množství sdílené paměti v počtu stránek (kern.sysv.shmmax / 4096)

Maximální velikost aktuálně nastavené sdílené paměti lze zjistit příkazem sysctl kern.sysv.shmmax. Případně příkazem sysctl -A | grep kern.sysv.sh zjistit všechny tyto atributy.

Odkazy

One thought on “FlexiBee: nastavení sdílené pamětí na Mac OS X”

  1. Podobný problém jsme měli při vývoji Java ME SDK 3.0 pro Mac. Instalátor jsme nechtěli, takže nezbylo než přepsat některé kusy IPC.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *