Portál AbcLinuxu, 1. června 2025 04:17
ps ax | grep apache2 | grep -v grep | wc -lPotom pomocí příkazem
free
zjistěte použitou paměť (sloupec used
ve 2. řádku - tedy bez započtení bufferů a cache).
Následně Apache stopněte a proveďte znovu free
. Odečtete použitou paměť od hodnoty získané při běžícím Apachi, vydělte počtem procesů a získáte přibližnou průměrnou hodnotu paměti na jeden proces Apache.
Nyní odečtěte použitou paměť bez Apache od celkové velikosti RAM, dále odečtete cca 200MB pro diskovou cache a buffery (tohle číslo jsem si vycucal z prstu, prostě odhad) a konečně 50-100MB jako rezervu. Výsledkem bude velikost paměti zbývající pro Apache, kterou následně vydělíte průměrnou velikostí pro jeden proces, čímž zhruba získáte maximální počet procesů Apache. Toto číslo použijete v konf. direktivě Apache MaxClients
. IMHO vám vyjde daleko menší číslo než 150.
Takto docílíte toho, že server nepřestane být dostupný při běžném provozu, ale je možné, že určité HTTP požadavky nárokující si násobky zjištěného průměru ho stejně vytíží. V tom případě bude potřeba vhodně limitovat PHP (memory_limit
) či MySQL, ale to už budete zřejmě muset o problému zjistit víc (začal bych s error a access logy Apache).
Je také možné, že se jedná o DDOS útok, kterému se ale rozumně bez součinnosti poskytovatele nedá bránit (a málokterý poskytoval má pro to potřebné vybavení).
echo 2 > /proc/sys/vm/overcommit_memory echo 80 > /proc/sys/vm/overcommit_ratioPrvní příkaz říká "alokuj jen paměť, kterou máš fyzicky k dispozici". Druhý parametr znamená "maximálně 80% fyzické RAM + swap pro aplikace, zbytek jádru na buffery". V Lennym se to dá trvale nastavit v /etc/sysctl.conf. Přesný popis je v dokumentaci jádra. Výsledek je, že jádro nepřidělí víc, než si může bezpečně dovolit. Pokud nějaký program chce alokovat příliš paměti, prostě jí nedostane a skončí s chybou. Jádro tak má pořád dost RAM pro běh všeho, nikdy tak nedojde k uswapování ani spuštění OOM killera. (V mém případě tedy klekl jen potížista AcrobatReader, čehož jsem přesně chtěl docílit.) Možná ještě lepší alternativa je udělat swap na cca 90% velikosti RAM a nastavit overcommit_ratio na 0. Jádro pak přidělí aplikacím maximálně 90% RAM, ale zůstane mu možnost odswapovat spící procesy. To jsem ale nezkoušel - RAMky mám dost.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.