[PHP] Sprawdzenie obciązenia serwera

0

Witam.
Piszę CMS'a i chcę, gdy na przykład serwer jest przeciążony w 75% wyłączał niektóre funkcję i zwiększał żywotność plików cache.

Teraz pytanie jak to zrobić optymalnie? Jak to ma wyglądać?

Wiem - Jest funkcja w php która właśnie podaje status obciążenia, ale to działa tylko na serwerach na linuxie.

0

na jakim systemie stoi serwer? Linux?
Poczytaj o poleceniu php system. Pozwala na wykonanie polecen na serwerze. Nie jestem pewien ale linuxowe polecenie 'top' ma chyba przełącznik pozwalający na zwrócenie użycia procesora. Jak nie to musiałbyś parsować wynik tej komendy (co aż tak trudne też nie będzie przy użyciu RegExp). Jak <ort>na razie </ort>to jedyny pomysł jaki mi przychodzi do głowy oczywiście skrypt zadziała dopiero wtedy gdy go ktoś uruchomi (chociaż można podpiąć strone php pod crone, takie zadania regularne jak w windows i wywoływać go co jakiś określony czas).

Musiał bys się jakiegoś linuksiarza dopytać czy nie ma komendy, która w łatwiejszy sposób zwróciłaby to użycie procesora, poza tym chyba wszystko jest już jasne :)

0
bordeux napisał(a)

Witam.
Wiem - Jest funkcja w php która właśnie podaje status obciążenia, ale to działa tylko na serwerach na linuxie.

Sprawa ma chodzić na serwerach na windowsie i też na linuxie. I cms chodzi na darmowych hostingach (czyli bez shella, cmd itp)

0
bordeux napisał(a)

Sprawa ma chodzić na serwerach na windowsie i też na linuxie. I cms chodzi na darmowych hostingach (czyli bez shella, cmd itp)

na moje oko... jestes w dupie [diabel]

0

Istnieje funkcja sys_getloadavg() która na platformach z linuxem (wyłącznie) zwraca load avg, ale nie jest to obiektywny wskaźnik obciążenia systemu :P na niektórych maszynach load 5 sprawiał problemy przy pracy z putty, a czasem 140 było praktycznie nieodczuwalne (i szczerze nie mam pojęcia czemu tak sie dzieje :P)

IMO stworzenie takiej funkcjonalnosci która ma działać pod każda platforma i każdym hostingiem będzie trudne. Można by przygotować jakiś prosty skrypto/benchmark, uruchamiać go z crona co np. 5 min, i sprawdzając czas odpowiedzi określać (na oko) jak obciążony jest serwer, ale było by to rozwiązanie mocno na około :P

0

Może ustawić w .htaccess strony błędów 503 i 500 w php, gdzie skrypt będzie logował błąd. Następinie przy ładowaniu silnika CMS'a analizować własnoręcznie obciążenie.

Tylko mam jeden problem.
Nie mam jak sprawdzić, czy php będzie działało, jak wywali bład 500.

Pytanie
ErrorDocument 500 /500.php
Czy taka reguła w .htaccess wykona skrypt w pliku 500.php w przypadku błędu 500?

0

błąd 500 może być spowodowany niepoprawną konfiguracją serwera, więc pewności mieć nie możesz. Może w pewnych sytuacjach zostanie wywołane.

0
Rezor napisał(a)

Istnieje funkcja sys_getloadavg() która na platformach z linuxem (wyłącznie) zwraca load avg, ale nie jest to obiektywny wskaźnik obciążenia systemu :P na niektórych maszynach load 5 sprawiał problemy przy pracy z putty, a czasem 140 było praktycznie nieodczuwalne (i szczerze nie mam pojęcia czemu tak sie dzieje :P)

IMO stworzenie takiej funkcjonalnosci która ma działać pod każda platforma i każdym hostingiem będzie trudne. Można by przygotować jakiś prosty skrypto/benchmark, uruchamiać go z crona co np. 5 min, i sprawdzając czas odpowiedzi określać (na oko) jak obciążony jest serwer, ale było by to rozwiązanie mocno na około :P

load avg nie zwraca czasem obciazenia cpu tylko? imho temat conajmniej trudny dlatego ze realne obciazenie systemu zalezy od wlasciwie wszystkich glownych komponentow, cpu, pamiec, swap, dysk, do tego zaleznosc od innych uruchomionych uslug itd itd...

0

Tzn chodziło mi o błąd 503 :D

0

może to was na coś naprowadzi:)

<h2>Server load</h2>
<table width=100% border=1 cellspacing=0 cellpadding=10><tr><td align=center>
<table class=interiortable border=0 width=402><tr><td style='padding: 0px; background-repeat: repeat-x'>
<? $percent = min(100, round(exec('ps ax | grep -c apache') / 256 * 30 ));
echo "<br>Obci±żenie Trackera ($percent %)<table class=interiortable border=0 width=400><tr><td style='padding: 0px; background-image: url(pic/loadbarbg.gif); background-repeat: repeat-x'>";

    if ($percent <= 70) $pic = "pic/loadbargreen.gif";
     elseif ($percent <= 90) $pic = "pic/loadbaryellow.gif";
      else $pic = "pic/loadbarred.gif";
           $width = $percent * 8;
echo "<img height=15 width=$width src=\"/$pic\" alt='$percent%'></td></tr></table>";
echo "" . trim(exec('uptime')) . "<br>";


  $percent = min(100, round(exec('ps ax | grep -c apache') / 256 * 150));
echo "<br>Globalne obci±żenie serwera ($percent %)<table class=interiortable border=0 width=400><tr><td style='padding: 0px; background-image: url(pic/loadbarbg.gif); background-repeat: repeat-x'>";

    if ($percent <= 70) $pic = "pic/loadbargreen.gif";
     elseif ($percent <= 90) $pic = "pic/loadbaryellow.gif";
      else $pic = "pic/loadbarred.gif";
           $width = $percent * 8;
echo "<img height=15 width=$width src=\"$pic\" alt='$percent%'></td></tr></table>"; ?>
0
Jervice napisał(a)

może to was na coś naprowadzi:)

exec('ps ax | grep -c apache') / 256 * 30
bordeux napisał(a)

Sprawa ma chodzić na serwerach na windowsie i też na linuxie. I cms chodzi na darmowych hostingach (czyli bez shella, cmd itp)

Widzę pewien problem ;-P

0

Witam.
Potrzebował bym taki skrypt który sprawdza obciążenie ale zewnętrznego serwera dedykowanego/vps's.
Da się coś takiego wykonać?

0

Da, o ile masz jakiś dostęp do tego serwera. Bezpośrednio przez SSH albo pośrednio przez dodatkowy skrypt, który wywoła lokalnie np. uptime i wypisz na stdout.

1 użytkowników online, w tym zalogowanych: 0, gości: 1