Můj klasický vývoj předpokládá lokální virtuální mašinu (VirtualBox) se stejným systémem, jaký mám pak na druhém - produkčním serveru. Na lokále dost RAMky - ale virtuál často dostane tak 512MB, to na minimální instalaci serveru stačí. Produkčním VPS nejčastěji 1GB. A nikde žádný swap.
Takhle to fungovalo až do pokusů s Drupalem 8 a Composerem.
Composer
Composer je oficiálně "Dependency Manager for PHP". A jelikož Drupal používá hodně různých knihoven, existuje mezi nimi mnoho vazeb a závislostí.
Pro Composer jsou důležité dva soubory: composer.json a composer.lock. První je obyčejný textový soubor s definicí knihoven a jejich závislostí, verzí, vazeb. Při většině operací, jako je instalace, upgrade … knihovny dochází k načtení všech těch vazeb do paměti, výsledkem je pak soubor composer.lock.
Composer k tomu používá PHP. A to často padá na nedostatku paměti.
Jak vyřešit problémy s nedostatkem paměti?
Už při instalaci samotného Drupal přes projekt drupal-composer/drupal-project jsem viděl obě hlášky:
proc_open(): fork failed - Cannot allocate memory
mmap() failed: [12] Cannot allocate memory
Tak co s tím?
Přidávat RAMku, dokud není po problému
Já jsem se dostal z 512MB na 1GB, pak 1,5GB, pak 2GB – to už začalo stačit.
Použít swap oddíl
V dnešní době už swap oddíl nikde nevytvářím, jelikož není třeba zbytečně zpomalovat systém/aplikace zapisováním na disk. Po instalaci systému se už swap oddíl obtížněji vytváří, znamená to nějaké změny partitions. Naštěstí, ale jde swap vytvořit jako soubor, a ten pak namountovat jako swap oddíl.
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
free
https://wiki.debian.org/Swap nebo https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-…
Co dělat na produkčním VPS
Jenže co na produkčním serveru? Kupovat další paměť jen kvůli Composeru je neekonomické, hrát si se swapem je neelegantní. Jak to tedy vyřešit?
Na toto téma více v samostatném článku "Jak aktualizovat Drupal (core či moduly) přes Composer, když produkční server má málo paměti".