GNU/Linux >> Znalost Linux >  >> Linux

MPM Prefork, příliš mnoho procesů Apache2?

Řešení 1:

Na to jsem vám odpověděl v komentářích na serveru, který nereaguje na SSH a HTTP, ale ping funguje, ale zřejmě mi nevěříte. Opravdu, je to pravda!

Potřebujete velikost MaxClients / ServerLimit do vašeho systému. „Nastavení 5–10 pro Min/Max servery“, které uvádíte, jsou v zásadě irelevantní – to je pouze počet navíc servery, které se poflakují a nedělají nic, co si Apache ponechá.

Chcete-li správně nastavit MaxClienty, podívejte se na typickou značku vysoké hladiny pro httpd (nebo apache2 ) procesy a poté tím vydělte dostupnou paměť. Nejlepší je trochu klesnout, aby zbytek systému mohl dýchat. Protože máte 4 GB RAM a 185 MB procesů, znamená to, že máte ServerLimit hodnota by měla být maximálně 21 — pravděpodobně 20 nebo 19.

Nyní se může stát, že 190 MB je atypických. Můžete nastavit ServerLimit vyšší na základě jiného odhadu typického použití, ale pak v podstatě hrajete, že nikdy nebudete mít špičku. Pokud k tomu dojde, váš systém bude mít nedostatek paměti.

Pokud najdete způsob, jak omezit využití paměti na pracovníka, bude to výhra. Vsadím se, že toto je případ PHP Ate My RAM. Můžete naprogramovat svou aplikaci tak, aby žila v nižší memory_limit ? Pokud to nemůžete udělat, potřebujete jiný model, pod kterým budete PHP provozovat. Pokud to nemůžete udělat, musíte si koupit další RAM.

Řešení 2:

Prefork MPM Apache spravuje servery samostatně. Vždy bude začínat StartServers démonů a nikdy nepoběží méně než MinSpareServers jakmile to půjde. Nakonec také vyřadí/zničí servery přesahující MaxSpareServers pokud jsou dostatečně dlouho nečinné (nevzpomínám si, co je v tomto kontextu „Dost dlouho“, ani jestli/jak to lze upravit).

ServerLimit nastavuje maximální počet démonů apache, kteří mohou být spuštěni v kteroukoli danou chvíli – to je důvod, proč ve vaší situaci můžete mít stovky spících procesů apache (vytvořily se, aby obsluhovaly záplavu požadavků a nebyly nečinné dostatečně dlouho, aby být ještě zabit mateřským procesem).

Osobně si myslím, že 1250 je docela vysoká hodnota pro ServerLimit /MaxClients -- 250 může být rozumnější číslo (i když to může mít za následek občasnou chybu 503/Zaneprázdněný server, pokud dostanete masivní záplavu požadavků:pokud se to stane chronickým problémem, můžete zvýšit počet nebo přidat další servery, abyste zvládli zátěž ).

Vztahující tuto otázku k vaší předchozí Re:havárie s nedostatkem paměti, rozhodně postupujte podle pokynů v příručce Apache pro tento parametr:

Most important is that MaxClients be big enough to handle as many simultaneous
requests as you expect to receive, but small enough to assure that there is enough
physical RAM for all processes.

…a můj osobní axiom:It's better to give a client a 503 page than knock the server down . :)

Řešení 3:

Vypněte Keepalive a nastavte MaxClients na 150. Nejpravděpodobnějším důvodem, proč tam máte 260 procesů, je to, že Apache poslušně udržuje připojení prohlížeče otevřená, protože KeepAlive on je nastaven ve vašem konfiguračním souboru Apache.


Linux
  1. Chyba příliš mnoha připojení v MySQL

  2. Proč git selže při push/fetch s příliš mnoha otevřenými soubory

  3. Jak zjistím, zda je v systému nainstalován Apache?

  1. Řešení chyby Mysql:Příliš mnoho otevřených souborů

  2. s3cmd selže příliš mnohokrát

  3. Příliš mnoho otevřených souborů (CentOS7) – již jsem zkusil nastavit vyšší limity

  1. Nainstalovat Apache na Ubuntu 18.04 – proces krok za krokem?

  2. Nainstalovat Apache Maven na Ubuntu 20.04 – proces krok za krokem?

  3. Chcete-li to provést, nainstalovat webový server Apache na CentOS 8 – proces krok za krokem?