Načtení DI kontejneru vs RAM
- ondrej256
- Člen | 187
Ahoj,
u našeho projektu (nette 2.4) jsem narazil na problém s vysokým nárokem na paměť RAM. Zobrazení jedné stráncy spotřebuje běžně 180–400 MB. To sice není zas až takový problém ale v momentě kdy používáme rabbita a běží nám na serveru neustále 10 consumerů z nichž každý spotřebovává zhruba 100 MB RAM tak už to dělá 1 GB RAM.
Snažíme se aby aplikace běžela na RAM 2GB do čehož se nyní nevejdeme. Aplikace sice běží, ale občas paměť přeteče. Rád bych aplikaci optimalizoval aby si consumer vystačil s 20 MB namísto současných 100 MB.
Zkusil jsem tedy spustit nad aplikací profiler, ale z něho bohužel nic nevyčtu.
Začal jsem teda postupně v aplikaci dumpovat alokovanou paměť. Došel jsem do souboru \Nette\DI\ContainerLoader::loadFile, kde v podmínce stojí:
include $file // zde je cesta k souboru v tempu s nazvem: Container_e66cedf11a.php - Soubor má velikost na disku 3.8 MB
Po includování tohoto souboru vzroste alkovaná paměť z 4.87 MB na 34 MB. Proč tam moc?
Při vykonání prvního dotazu na SQL databázi se alokuje dalších 10MB. Je to v pořádku? Není to nějak moc?
Ostatní věci na které jsem přišel už byly pod 10 MB
Nemáte někdo zkušenosti s optimalizací aplikace na nároky paměti RAM? Budu rád za každý příspěvek týkající se buďto těch bodů, které jsem napsal tak i nějakých vašich zkušeností.
Děkuju a přeju pěkný víkend
Editoval ondrej256 (8. 6. 2019 19:15)