GNU/Linux >> Znalost Linux >  >> Linux

Spuštění úlohy cron sběru odpadků Ubuntu pro relace PHP trvá 25 minut, proč?

Řešení 1:

Blahopřejeme k tomu, že máte populární webovou stránku a podařilo se vám ji po celou tu dobu udržet na virtuálním počítači.

Pokud skutečně zaznamenáváte dva miliony zobrazení stránek za den, nahromadíte v souborovém systému HODNĚ relací PHP a jejich odstranění bude trvat dlouho, bez ohledu na to, zda použijete fuser nebo rm nebo vysavač.

V tomto bodě bych vám doporučil podívat se na alternativní způsoby ukládání relací:

  • Jednou možností je ukládat relace do memcached . To je bleskurychlé, ale pokud se server zhroutí nebo restartuje, všechny vaše relace jsou ztraceny a všichni jsou odhlášeni.
  • Relace můžete také ukládat do databáze. Bylo by to o něco pomalejší než memcached, ale databáze by byla trvalá a staré relace byste mohli vymazat jednoduchým dotazem SQL. Chcete-li to však implementovat, musíte napsat vlastní obslužný program relace.

Řešení 2:

Odstranění fuser by měl pomoci. Tato úloha spustí fuser (zkontrolujte, zda je soubor aktuálně otevřen) pro každý nalezený soubor relace, což může na vytíženém systému se 14k relacemi snadno trvat několik minut. Toto byla chyba Debianu (Ubuntu je založeno na Debianu).

Místo memcached můžete také zkusit použít tmpfs (souborový systém v paměti) pro soubory relace. Podobně jako u memcached by to při restartu zneplatnilo relace (to lze obejít zálohováním tohoto adresáře někde ve skriptu vypnutí a obnovením ve spouštěcím skriptu), ale nastavení bude mnohem jednodušší. Ale to nepomůže s fuser problém.

Řešení 3:

Možnosti úložiště Memcached a úložiště databázových relací, které zde uživatelé navrhují, jsou tedy dobrou volbou pro zvýšení výkonu, přičemž každá má své výhody a nevýhody.

Ale testováním výkonu jsem zjistil, že obrovské náklady na výkon této údržby relace jsou téměř zcela způsobeny voláním fuser v práci cron. Zde jsou grafy výkonu po návratu k úloze Natty / Oneiric cron, která používá rm místo fuser pro oříznutí starých relací dojde k přepnutí ve 2:30.

Můžete vidět, že pravidelné snižování výkonu způsobené čištěním relace PHP Ubuntu je téměř úplně odstraněno. Špičky zobrazené v grafu Disk Operations jsou nyní mnohem menší a jsou zhruba tak hubené, jak může tento graf změřit, ukazující malé, krátké přerušení, kde byl dříve výkon serveru po dobu 25 minut výrazně snížen. Extra využití CPU je zcela eliminováno, toto je nyní úloha vázaná na IO.

(nesouvisející IO úloha běží v 05:00 a CPU úloha běží v 7:40, což obě způsobuje své vlastní skoky na těchto grafech)

Upravená úloha cron, kterou nyní spouštím, je:

09 *     * * *     root   [ -x /usr/lib/php5/maxlifetime ] && \
   [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 \
   -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 \
   | xargs -n 200 -r -0 rm

Linux
  1. Nainstalujte IMAP pro PHP 7.1 na operační systém Ubuntu

  2. Nastavení úlohy Godaddy cron pro spouštění php skriptu

  3. Linux:Spusťte úlohu cron v popředí

  1. Jak nastavit úlohu CRON, aby se spouštěla ​​každých 10 sekund v Linuxu?

  2. Jak spustit úlohu cron uvnitř kontejneru dockeru

  3. jak spustit cron job každé 3 měsíce?

  1. Cron Job:Komplexní průvodce pro začátečníky 2022

  2. Použití at pro jednorázové úlohy cron v Linuxu

  3. Jak spustit úlohu cronu každý den v určitou hodinu?