Steru

Problemy z cronami na serwerze, optymalna konfiguracjaj

Polecane posty

Witam,

 

Posiadam kilka dedykowanych serwerów (administrowanych przeze mnie, z wsparciem administracyjnym firmy) w jednej z większych Polskich firm hostingowych. Jeden z serwerów jest wykorzystywany jako platforma do wykonywania różnego rodzaju skryptów php, których zadaniem są różne operacje na plikach i na bazie danych. Specyfika tych skryptów jest taka, że poszczególne moduły wymagają osobnego uruchamiania cronami skryptów, które wpierw przygotowują zestawy danych, a następnie uruchamiane są skrypty, które te dane obrabiają, wywołują w efekcie kwerendy które wykonują się na bazie danych etc.

Problem pojawił się w momencie kiedy ilość modułów i przez co skryptów wzrósł na tyle, że serwer nie wyrabia i ilość cronów uruchomionych jednocześnie dochodzi do ilości 1.5 tysiąca, na kilku różnych użytkownikach. Docelowo zadań tych może być nawet 3-4 krotnie więcej.

Administratorzy podają jako propozycję optymalizacji zmniejszenie ilości zdań cron i uruchamianie skryptów paczkami ale ze względu na specyfikę modułów i potrzebę ich niezależnego działania nie widzę takiej możliwości.

Nigdzie nie mogę znaleźć przykładów optymalnej konfiguracji ilości cronów na serwerze. Dostałem jedynie informację, że procesor musi dzielić zasoby na każde z zadań, co powoduje bardzo dużą liczbę przełączań kontekstu (context switching) co wpływa również na wolniejsze ich wywoływanie.

 

Z możliwości optymalizacji opracowałem plan rozbicia serwera na osobne dedyki z podzieleniem ilości zadań między nimi aby działały niezależnie od siebie z optymalną ilością zadań na każdym z nich ale obecnie taki proces nie jest możliwy z przyczyn niezależnych. Szukam sposobu na optymalizację tego co jest do czasu możliwości przebudowy architektury serwerowej w sposób opisany powyżej.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dzień dobry,

Czy wszystkie moduły i skrypty korzystają ze współdzielonej bazy danych? Jakie parametry ma serwer na którym te skrypty są uruchamiane?


simpleideas.pl | tel. 327970707 biuro@simpleideas.pl | Serwery SEO, migracje, optymalizacje pagespeed/SEO oraz wydajnościowe, odwirusowywanie stron, konfiguracja i administracja serwerami, modyfikacje stron i sklepów i inne usługi

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zainteresuj sie php cli oraz serwerem kolejkowania jak RabbitMQ.

Jak i architektura opartą o mikroserwisy.

---

Wysłano z tabletu 


HTTP 200 usługi IT - Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Node.js / MySQL :chatownik:

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
5 godzin temu, simpleideas napisał:

Dzień dobry,

Czy wszystkie moduły i skrypty korzystają ze współdzielonej bazy danych? Jakie parametry ma serwer na którym te skrypty są uruchamiane?

 

Tak wszystkie skrypty korzystają z tej samej bazy. Baza jest na osobnym serwerze z postawioną pod nią wirtualką (jest to postgresql, cała baza zajmuje obecnie w granicach 120GB) w konfiguracji:

 

Procesor: Intel Xeon E3-1230
4 rdzenie / 8 wątków
Pamięć: 8GB DDR4
Dysk: 2* SSD w RAID 1

 

Serwer na którym uruchamiane są skrypty php:

Procesor: Intel Xeon E3-1230
4 rdzenie / 8 wątków
Pamięć: 16 GB DDR3
Dysk: 2 SATA w RAID 1

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
8 godzin temu, Steru napisał:

Nigdzie nie mogę znaleźć przykładów optymalnej konfiguracji ilości cronów na serwerze.

IMHO Nie ma czegoś takiego. Cron uruchamia zadania jakie ma w crontab w czasie / interwale ustawionym przez administratora serwera. To programisty (oprogramowania) może zależeć czy kolejne zadanie się uruchomi jeśli poprzednie jeszcze się nie skończyły lub z powodu błędu procesy się nie kończą.

cron tylko uruchamia procesy jakie mu zostaną zdefiniowane.

 

Cytat

cron jest opartym na czasie programem do harmonogramowania zadań w systemach operacyjnych z rodziny Unixa. Może zostać wykorzystany do uruchamiania zadań (programów, komend, skryptów) o określonych godzinach, datach albo regularnie zgodnie z określonym interwałem.

 

Pisząc skrypty PHP jako CLI pętla while() możesz sterować zadaniami realizowanymi w  liniowo, czyli następny się zaczyna jak poprzedni się kończy.

Lub jak chcesz odpalać z zastosuj jakiś mechanizm informowania o tym ile jest aktualnie zadań (można odczytać liczbę procesów)  ... i jeśli są w nadmiarze skrypt kończy zadanie przez co nie dochodzi o przeciążenia zasobów dłuższego wykonywania poszczególnych i kolo się zamyka.

 

8 godzin temu, Steru napisał:

Witam, Szukam sposobu na optymalizację tego co jest do czasu możliwości przebudowy architektury serwerowej w sposób opisany powyżej.

Co do tego to przyjrzeć się samej bazie danych jakie indeksy np za mało lub możliwe, że za dużo (zależny od kontekstu wykorzystania) . Mesli jest dużo operacji delete wykonać

Optimize Table xxxx;

 


HTTP 200 usługi IT - Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Node.js / MySQL :chatownik:

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Napisano (edytowany)
38 minut temu, Mion napisał:

IMHO Nie ma .....

 

Źle się wyraziłem, administrator twierdzi że ze względu na ilość cronów, dochodzimy do granic możliwości sprzętu i ze względu na to ile ich jest uruchamianych zasoby procesora są na tyle mocno zużywane, że nie wyrabia.

 

Co do samego mechanizmu uruchamiania skryptów, to mam zabezpieczenie cli, które monitoruje czy dany skrypt zakończył już się wykonywać, jeśli nie to nie zostaje uruchomiony ponownie i jeśli np. skrypt x o id 101 pracuje, a cron dla niego jest ustawiony w interwale co 5 minut, wówczas ponowna próba jego uruchomienia nastąpi po kolejnych 5 minutach, o ile poprzednio odpalony się skończy.

 

Nie mniej jednak obecnie jestem w kropce bo nie wiem gdzie jest limit sprzętu, którym dysponuję i czy należy iść w rozbudowę obecnej maszyny zmieniając np na mocniejszego dedyka z prockiem 8 rdzeni / 16 wątków czy może obrać kierunek.

Edytowano przez MaxPan
nie cytuj w całości !!!

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Najpierw Musisz zdiagnozować co i dla czego wykonuje się długo mówiąc kolokwialnie co stanowi wąskie gardło.

Zdiagnozujecie ile trwają zapytania do bazy ... i dlaczego tak długo i co można z tym zrobić .

Zastanówcie się czy nie można pewnych danych władować do pamięci mmecache / Redis ..

 

26 minut temu, Steru napisał:

i ze względu na to ile ich jest uruchamianych zasoby procesora są na tyle mocno zużywane, że nie wyrabia.

I jak już pisałem kolo się zamyka, bo im "mniej procesora" tym dłużej wykonuje się proces . Wzmocnienie maszyny na pewno w jakimś stopniu rozwiąże problem ... przynajmniej do czasu gdy znowu zabraknie zasobów.

 

Jakie macie PHP ? Jeśli .li nie 7.x polecam od tego zacząć


HTTP 200 usługi IT - Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Node.js / MySQL :chatownik:

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
32 minuty temu, Steru napisał:

 

Nie mniej jednak obecnie jestem w kropce bo nie wiem gdzie jest limit sprzętu, którym dysponuję i czy należy iść w rozbudowę obecnej maszyny zmieniając np na mocniejszego dedyka z prockiem 8 rdzeni / 16 wątków czy może obrać kierunek.


Ciężko jest stwierdzić bardziej precyzyjną przyczynę - nie wiadomo ile realnie danych jest do przetworzenia i czy to jest wina serwera z brakującą ilością zasobów, czy może nieprawidłowo zoptymalizowanej/źle działającej aplikacji.

Tak jak @Mion zaproponował, spróbujcie zacząć od przejścia na php7 o ile już z niego nie korzystacie. Czy serwer z mysqlem nie jest obciążony? Bo jak rozumiem, głównie obciążenie przypada na serwer wykonawczy.


simpleideas.pl | tel. 327970707 biuro@simpleideas.pl | Serwery SEO, migracje, optymalizacje pagespeed/SEO oraz wydajnościowe, odwirusowywanie stron, konfiguracja i administracja serwerami, modyfikacje stron i sklepów i inne usługi

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

  • Kto przegląda   0 użytkowników

    Brak zalogowanych użytkowników przeglądających tę stronę.