Načtení DI kontejneru vs RAM

ondrej256
Člen | 187
+
+1
-

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)

norbe
Backer | 405
+
+1
-

Těžko říct jestli je 10MB na jeden dotaz moc nebo málo, záleží co tam taháš za data…

Zkus si rozchodit blackfire.io (na localhostu je zdarma), tam by jsi měl být schopný dohledat, co konkrétně ti nejvíc žere paměť.