Projektowanie stron WWW od podszewki
Losowy artykuł: [PHP] Zagadka Einsteina

Artykuły na każdy temat

Limity hostingowe na CPU = bzdura

Dodano 21.02.2011r. o 04:08
Artykuł dedykuje wszystkim tym, którzy w najbliższym czasie kupują hosting bądź zmieniają go na inny ze względu na limity CPU. Dawno, dawno temu korzystałem z usług firmy hostingowej HEKKONET. Niestety będzie to negatywna reklama, ale takie jest życie. Wszystko było spoko do czasu, kiedy wystąpiły przekroczenia limitu na procesor. Naturalnie zaciekawiony sytuacją starałem się optymalizować skrypty. Zacząłem się dziwić, kiedy miałem zużycie ~2% na dzień przy ruchu około 300-500 wejść. Coś mi ewidentnie nie grało. Nie mogłem napisać aplikacji aż tak niewydajnej. Ta sytuacja zmusiła mnie do małego testu. Zostały zakupione dwa konta o identycznych parametrach. Ruch z zewnątrz został wycięty. Na obu kontach zostały cyklicznie uruchomione skrypty za pomocą CRON'a. Kod pierwszego skryptu wyglądał następująco:
Kod:
<?php
sleep(5);
?>
Natomiast kod drugiego tak:
Kod:
<?php
$start time();

while(time() - $start 5)
{
 // Jakiekolwiek obciążenie procesora
 $data rand(065536);
}
?>
Oba skrypty wykonywały się w tym samym czasie, aby ograniczyć czynniki wpływające na przebieg testu. Pierwszy kod praktycznie nie generuje jakiegokolwiek obciążenia dla procesora. Drugi natomiast logicznie generuje stałe i znaczące obciążenie dla procesora, bo wykonuje dużo operacji losowania liczby. Po miesiącu czasu okazało się, że oba konta mają wręcz identyczne zużycie procesora. Jak się potem dowiedziałem naliczanie bazowało na czasie wykonywania skryptu, a nie na faktycznym obciążeniu procesora. Takie naliczanie można o kant dupy potłuc. Dlatego tak ważnym jest, aby przed kupieniem np. hostingu sprawdzić, na jakiej zasadzie liczony jest limit CPU. Rozmawiając z kilkoma administratorami hostingów dochodzę do wniosku, że bardzo ciężko jest im zbudować mechanizm, który faktycznie zliczałby ile dane konto pożera zasobów. Według mnie powinno to być przydzielane na zasadzie panującej przy VPS'ach, czyli mamy gwarantowany CPU, powyżej, którego możemy, ale nie musimy dostać ekstra moc w zależności od tego czy maszyna jest obciążona czy też nie. Kolejną sprawą jest po prostu kolejkowanie wątków. Jeżeli mamy obciążony procesor na przysłowiowe 100% to kolejne zdarzenia czekają, aż zwolnią się zasoby i tyle w tym temacie.

Procesor procesorowi nierówny

Żeby długo nie rozwodzić się nad architekturą procesora i jego budową to powiem tylko tyle, ze w zależności od typu jednostki obliczeniowej niektóre procesy/obliczenia mogą wykonywać się szybciej bądź wolniej. O ile się nie mylę to rozchodzi się o to ile określonych operacji np. zmiennoprzecinkowych może wykonać jednostka w tej samej chwili.

Do czego zmierzam? Otóż ten sam skrypt może rożnie zachowywać się i tym samym zżerać procesor na rożnych maszynach. Na jednej będzie się wykonywał szybciej a na drugiej wolniej. Warto przed transakcją sprawdzić czy odpowiedni czas reakcji odpowiada nam. Jeżeli na hostingu, który kupujemy występują limity na CPU koniecznie powinniśmy się dowiedzieć, na jakiej zasadzie są liczone. W przypadku "braku limitów" warto zapytać się ile faktycznie możemy wycisnąć z danej maszyny.

Komentarze

Publikowane komentarze są prywatnymi opiniami użytkowników serwisu. Serwis nie ponosi odpowiedzialności za treść opinii. W trosce o zachowanie poziomu dyskusji wszystkie komentarze podlegają akceptacji przed ich publikacją dlatego proszę cierpliwie czekać aż komentarz zostanie opublikowany.

CapaciousCore

Dodano 28.02.2011r. o 22:54
@group5.pl przyznam się szczerze, że przez przypadek znalazłem Waszą ofertę. Jestem ciekaw jak efektywne jest Wasze rozwiązanie. Myślę, że w najbliższym czasie jeden z moich klientów wykupi u Państwa usługę i w ten sposób będę miał okazje sprawdzić Państwa rozwiązania. W swojej karierze miałem wiele okazji, aby przetestować najróżniejsze opcje od hostingów po dedyki włącznie. Nie powiedziałbym, że lista firm hostingowych z usług, których skorzystałem jest uboga. Niejednokrotnie spotkałem się z rożnymi dziwnymi metodami pseudo-naliczania takiego obciążenia. HEKKONET nie jest odosobnionym przypadkiem. Często gęsto aplikacje obliczające takie obciążenie (w tym przestrzeganie limitów) są niedoskonałe i w połączeniu ze złą konfiguracją dają błędne wyniki. Innym dziwnym (ciekawym?) zjawiskiem są hostingi bez limitu obciążenia CPU. Przykładem takiego hostingu jest chociażby LinuxPL na którym stoi ta strona. Osobiście nie doczytałem się, przy jakim procentowym obciążeniu maszyny konto zostanie zawieszone. Moim zdaniem takie informacje powinny być ogólno dostępne. W ten sposób uniknie się zbędnych nieporozumień. Proponuje zapoznać się z przypadkiem @kubofonisty, którego konto zostało zablokowane (przez nadmierne obciążenie) nie z jego winy. Po wymianie mailowej z administracja hostingu LinuxPL.com padło stwierdzenie, że takiego monitu (wykresy obciążeń dla poszczególnych kont i/lub skryptów) nie będzie udostępnione dla zwykłego użytkownika. W przypadku dużego obciążenia podobno mają środki, aby sprawdzić, które konto i skrypt obciąża maszynę najbardziej. Proponuje przeanalizować wątek o LinuxPL na WHT. Odnośnie podawania danych na żądanie to LinuxPL właśnie tak robi, gdy ktoś nagina zasoby maszyny. Może nie tyle na żądanie, co z konieczności poinformowania danej osoby o tym co się dzieje. W ten sposób ofiara ma możliwość dokonania optymalizacji.

Drraven

Dodano 28.02.2011r. o 19:20
#group5.pl:
O RLY?

group5.pl

Dodano 28.02.2011r. o 17:24
Śmiem twierdzić, że autor jest w dużym błędzie lub został po prostu oszukany przez swojego dostawcę hostingu. Twierdzenie "Limity hostingowe na CPU = bzdura" jest słuszne w przypadku 99% hostingów które podają dane na żądanie. W przypadku naszych kont zamykamy procesy klienta w kontenerach wzorowanych na OpenVZ i na poziomie kontenera przyznajemy odpowiednie zasoby CPU i RAM. Dane klient ma na bieżąco w panelu administracyjnym.

Drraven

Dodano 26.02.2011r. o 17:40
Sam sobie sprawdzę ;) ale możesz pokazać - ty tu jesteś specem od php ;)

CapaciousCore

Dodano 26.02.2011r. o 17:26
@Drraven zdziwiłbyś się ile może się wydarzyć w 0,01 sekundy Razz

Coś czuję, że muszę przygotować mały example.

Drraven

Dodano 26.02.2011r. o 17:24
@Luke:
4:59:99 to prawie 5
a w ciągu 0,01 sec i tak dużo się nie zdarzy, a <= oznaczałoby 500 co nie dużo da bo różnica to i tak 0001 ;)

Luke

Dodano 25.02.2011r. o 21:13
I tak myślę, że lepiej byłoby z '<='.

CapaciousCore

Dodano 23.02.2011r. o 21:18
@Luke odnoszę wrażenie, że nie za bardzo rozumiesz Razz Kod wykonuje się do momentu uzyskania różnicy wynoszącej 5 sekund. Czyli 4:59:99 i tak dalej to nadal czas, w którym warunek zostaje spełniony. Więc nie 4 sekundy tylko "prawie" 5 sekund. Zobacz sobie ile operacji wykonuje taka pętla w ciągu sekundy i zobacz ile sekundy generuje się taka pętla w ciągu pięciu sekund.

Luke

Dodano 23.02.2011r. o 19:40
Dobra, już kapuję Smile Tylko, że to dalej nie jest to samo co sleep(5). Raczej jak sleep(4).

CapaciousCore

Dodano 23.02.2011r. o 18:37
@Luke pętla wykonuje się do momentu, kiedy czas jej wykonywania (skryptu) jest mniejszy niż 5 sekund. Jeżeli ten warunek zostaje spełniony wtedy pętla przestaje wykonywać się.

Luke

Dodano 23.02.2011r. o 16:31
Byłoby tak, gdybyś dał znak ">". Tak to ciągle jest prawdziwe (chyba, że czas wykonania pętli jest dłuższy, wtedy w ogóle kończy).

CapaciousCore

Dodano 23.02.2011r. o 16:28
@Luke pierwszy kod wykonuje się określony czas natomiast drugi bez końca (aż np. skończy się limit czasowy na wykonywanie skryptu albo przekroczy się memory lub inne limity).

Luke

Dodano 23.02.2011r. o 16:23
Kod:
<?php while(time() - $start 5?>
czy to nie jest aby równoważne temu
Kod:
<?php while (1?>
?

Sobak

Dodano 22.02.2011r. o 16:18
A ja trafilem na fajne rozwiązanie odnośnie limitów CPU - http://www.group5.pl/.

Cytat:


SEO Premium aktywowane jest w osobnym kontenerze oraz posiada indywidualny limit użycia procesora – 40% rdzenia CPU (5% całego CPU) – przez co konta nie są podatne na przeciążenie z powodu przekroczenia limitu przez innych użytkowników serwera.

...co oznacza nie mniej nie więcej niż to, że jak jeden user zawiesi jeden rdzeń, to reszta osób pracujących na tym rdzeniu nie będzie miała zawieszonych stron.

CapaciousCore

Dodano 21.02.2011r. o 15:13
@Sobak podobną sprawę opisał @kubofonista na swoim blogu we wpisie pod tytułem O tym jak LinuxPL.com mnie załatwił. Też bardzo ładnie go potraktowali nie z jego winy. Do dziś nie usłyszał magicznego słowa "przepraszam".

Sobak

Dodano 21.02.2011r. o 15:08
Powiem szczerze, że jestem zszokowany w jak genialny sposób zostało rozwiązane to liczenie "obciążenia".

I najgorsze w tym jest to, że potem po takich durnych danych często blokują niewinnych userów, bo im się skrypt wykonywał 10 sekund z czego 8 to był sleep(); jak tutaj w przykładzie...

Chore.

Dodaj komentarz

Zostaw komentarz jeżeli możesz! Nie bądź przysłowiowym botem! Nie bądź obojętny! Ciebie to nic nie kosztuje, a mi sprawi uśmiech na twarzy.
Zezwolono używać: BBCode
Zabroniono używać:
znaczników HTML

(Wymagany)

(Wymagany, niepublikowany)

(Nie wymagana)

Token:

Obrazek dla bota

(Przepisz tylko cyfry!)

(Wymagana)