Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odciążenie serwera
Forum PHP.pl > Forum > Serwery WWW
servs
Witam!
Jestem w posiadaniu strony, która strasznie obciąża mi serwer, a konkretnie jego procka.
Strona opiera się na odtwarzaniu utworów z wrzuty (na serwerze mieści się baza ponad 300 tys utworów wraz z odnośnikami do wrzuty), a więc wszystko się cachuje jak mniemam.
Przez to użycie procka nie spada poniżej 60%, a notorycznie skacze 94~99%.. Procesor to AMD Phenom™ 8450 Triple-Core Processor o mocy 2,1 GHz (nie jestem pewien, ale w takim razie 2,1GHz posiada 1 układ HTT, a więc procesor jest mocy łącznej 6,3GHz(?)).
Tak czy siak procek nie jest najgorszy, a jest stale w cholernym użyciu.
Pamięć odpada, bo zużycie waha się w 10-25% (3 GB).

Jaja zaczynają się dziać, kiedy na stronie jest (wg statystyk) ok. 220 userów online - strona albo muli, albo w ogóle się nie włącza, co jest jak dla mnie niedopuszczalne.

Ze względu na to, że nie znam się fachowo na tematyce cachowania, proszę o radę w jaki sposób mogę zmniejszyć przez to zużycie procesora lub czy w ogóle takowe cachowanie ma coś wspólnego z tak wysokim użyciem CPU. Choć nie jestem pewien czy problem stanowi tylko cachowanie, ale bardziej skomplikowanych modułów na stronie już raczej nie ma, bo wątpię, żeby wyświetlanie obrazków zajmowało tyle procka.

Serwer postawiony jest na Debianie.

Proszę o pomoc.
Pozdrawiam!
erix
Po takich danych można powiedzieć tyle, co nic...

Zero o skryptach.
atsuki
zrezygnuj z apache na rzecz lżejszych/lepszych serwerów www - cherokee, nginx itp
nexis
Cytat(servs @ 29.08.2009, 23:24:10 ) *
Jaja zaczynają się dziać, kiedy na stronie jest (wg statystyk) ok. 220 userów online - strona albo muli, albo w ogóle się nie włącza, co jest jak dla mnie niedopuszczalne.

Zdecydowanie jest to wina złych skryptów bądź fatalnej konfiguracji serwera. Pewnie nawet jednego i drugiego. Powiedz coś więcej o swoich skryptach i serwerze, na którym to stoi (chodzi mi o oprogramowanie).
servs
Skrypt wygląda na poprostu wywołujący z adresu... A adres jest bezpośredni do wrzuty.
  1. <embed src="player.swf" width="300" height="60" allowscriptaccess="always" allowfullscreen="true" flashvars="width=300&height=60&file=odtwarzanie/{$mp3.id}.mp3&backcolor=0xff8b02&frontcolor=0xffffff&lightcolor=0xa54e03&screencolor=0xff8b02&showstop=true&showeq=true&type=mp3&autoscroll=true"/></embed>

W rzeczywistości ścieżka odtwarzanie/{$mp3.id}.mp3 prowadzi do odnośnika wygenerowanego przez ten plik:

  1. <?php
  2.  
  3.  
  4. if (isset($_GET['odtwarzanieid']))
  5. {
  6. $did = $_GET['odtwarzanieid'];
  7. if(is_numeric($did)) {
  8. $sql = $db->query('SELECT * FROM '.TABLE_MP3.' WHERE id = "'.$did.'"');
  9. $r = $db->fetch_row($sql);
  10. $link = $r['link'];
  11. //$link = str_replace('aud/file','sr/f',$link);
  12.  
  13. function etitle($content) {
  14. $param1 = array('.', '\'', '&', ':', ';', '`', '"', '</a>', '\'', '#039', '#', ',');
  15. $param2 = array('_', '_', '_', '-', '_', '-', '-quot-', '-quot-', '-', '_', '_', '_');
  16.  
  17. $content = str_replace($param1, $param2, $content);
  18. return $content;
  19. }
  20. $ch=curl_init($link);
  21. curl_setopt($ch, CURLOPT_HEADER, 1);
  22. curl_setopt($ch, CURLOPT_NOBODY, 1);
  23. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  24. $res=curl_exec($ch);
  25. $matches = array();
  26. preg_match('/Location:(.*)\n/', $res, $matches);
  27. $pos = strpos($matches[1],'/',33);
  28. $link = substr($matches[1],0,$pos);
  29.  
  30. $param3 = array('c.wrzuta.pl', 'vn1.wrzuta.pl', 'vn2.wrzuta.pl', 'vn3.wrzuta.pl', 'vn4.wrzuta.pl', 'vn5.wrzuta.pl', );
  31. $param4 = '193.17.41.93';
  32.  
  33. $link = str_replace($param3,$param4,$link);
  34. $tytul = etitle($r['tytul']);
  35. $link .= '/'.$tytul.'(www.mp3h.pl).mp3';
  36.  
  37. header("Location: ".$link."");
  38.  
  39. }
  40. }
  41.  
  42. exit();
  43.  
  44. ?>


Cóż o serwerze..
Dystrybucja: Debian 4.0
Kernel: 2.6.27.10-grsec-xxxx-grs-ipv4-32

Jeśli chodzi o więcej informacji o serwerze, to prosiłbym konkretnie mi napisać o jakie info chodzi.

Pozdrawiam!
vokiel
str_replace może przyjmować jako parametr tablicę. Zamiast 12 przerabiać cały $content można to zrobić raz przekazując jako parametry tablice.
servs
Nie jestem pewien czy dobrze rozumuję... Czy chodzi o coś takiego?

  1. $param1 = array('.', '\'', '&', ':', ';', '`', '"', '</a>', '\'', '#039', '#', ',');
  2. $param2 = array('_', '_', '_', '-', '_', '-', '-quot-', '-quot-', '-', '_', '_', '_');
  3.  
  4. $content = str_replace($param1, $param2, $content);
vokiel
Tak, właśnie tak.
W dokumentacji jest to napisane w pierwszym przykładzie;)

Btw czy nie szybciej było po prostu sprawdzić tongue.gif
servs
Sorry, zabiegany byłem winksmiley.jpg
Wszystko działa, jednak serwer nadal się męczy sad.gif

A jeśli wina byłaby serwerowa... To co i gdzie mógłbym sprawdzić? Bo co do jego konfiguracji miałbym rzeczywiście pewne wątpliwości, jednak nie znam się jeszcze na tym na tyle, aby stwierdzać co i gdzie jest nie tak.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.