Fórum Root.cz
Hlavní témata => Server => Téma založeno: Martin 10. 10. 2010, 19:58:40
-
Mam Debian, Apache 2.2 s modulem php, a posledni dobou se stava, ze se server zahlti, sezere 4 GB ram a spadne. Nemuzu dohledat, ktera z domen to dela. Vsiml jsem si jen v htopu v prislusnou chvili, jak jeden thread mel 70% vyuzite ram. Snizil jsem pocet soubezne bezicich threadu, ale pokud to dela pouze jeden thread tohle mit vliv nebude...
Podezreni mam na 2 domeny, roundcube mail (s limitem 100MB na jeden pozadavek). A pro me neznamou domenu, kde se vyviji neco s PDF prevodem na bazi IMAGICKu (rozsireni pro php), tato domena ale zadne vetsi pametove limity nema.
Otazka tedy zni, mohu nejak ziskat statistiky, ktera domena a jak zatezuje server? Pripadne mohu to nejak limitovat, napada me prechod na suexec, ale o tom vim velice malo.
Diky za rady.
-
pokud requesty trvají delší dobu a jste schopný identifikovat id apache procesu, který spotřebovává větší množství systémových prostředků, můžete se zkusit podívat na status stránku, jaký zrovna zpracovává request
http://httpd.apache.org/docs/2.2/mod/mod_status.html
se zapnutým ExtendedStatus On
Alternativně můžete zkusit pustit na daný proces strace a dívat se, s čím pracuje, případně mrknout do otevřených filedesriptorů v /proc, resp. udělat to samé přes htop, pokud máte verzi z testingu.
-
Mel jsem stejny problem na slabem virtualserveru. (384 MB ramm)
Rovnez jsem laboroval s ExtendedStatus On, ale nic moc mi to neukazalo.
Htop taky nenapovedel a tejden to bylo beznadejny (jak vylit swap nad 200M, load vystoupl k nebezskym vysinam).
Taky jsem hledal nejaky povsechny analyticky nastroj, jak hrisniky objevit, ale nenasel.
nicmene, PHP ma snad nejaky memory_limit, dokonce v defaultu snad na 32M, takze bych necekal, ze 4GB ramm sezere jeden thread jednoho spatnyho skriptu.
V mem pripade problem spocival ve 2 webech na Joomla/VirtueMart, ktery byly zatezujici a kdyz si je zacal indexovat Yahoo, Google, Baidu a Seznambot ve stejne chvili naraz, pozadavek kazdy 2s, problem byl na svete. ... tedy, obecny pretizeni.
Nevim, zda Vam to pomuze, ale mala napoveda Vam treba precijen pomuze: do apache logu se stranky/logy zanesou az po dokonceni zpracovani skriptu, ale s casem zahajeni skriptu. Ve chvili, kdy dochazi k pretizeni a nektere pozadavky jdou pres sekundu, zatimco jine ne, casova souslednost v apache logu je porusena (log radek 12:00:00 nasleduje az za radkem 12:00:10).
Kdyz napisete nejakej shell skriptik, kterej si proleze accesslogy na vsech virtualech anebo vygrepuje, kde v jaky cas lezl nejaky UserAgent /bot/, treba vam to znacne napovi.
-
Strasne jednoduchy, staci pouzit mpm_itk a pak to bude fungovat klasickej BSD accounting... Neni co resit.
-
HonzaC, ako si to riešil?
Ja totiž mám teraz rovnaký problém, tiež jeden web s Joomla/VirtueMart. Okrem neho mám na serveri aj ďalšie stránky a minimálne jeden crawler skenuje stále a Google si teraz prelieza všetky weby už druhý deň. Už som raz úplne zamrzol. Teraz priebežne sledujem htop, a keď mi začne silno dochádzať swap, tak reštartujem Apache. Problém je v tom že naposledy my dokázal Apache zožrať za cca. 2 a pol hodiny 4GB RAM aj 4GB swap, čo je úplne choré.
-
Joomla/VritueMart jsou nenazrany hovada.
Trochu pomuze cachovani stranek.
Ale v zasade, jedinym spravnym resenim je predelam Joomlu >:(
Ale vazne: snizil jsem maximalni pocet apache threadu (muzu si to dovolit, je to VS s 5 prezentacemi) a hlavne pridal do index.php cele prezentace toto
<?
$ua = $_SERVER['HTTP_USER_AGENT'];
// OK bots
if (StrPos($ua, "twenga") !== false) sleep(10);
if (StrPos($ua, "Googlebot") !== false) sleep(15);
if (StrPos($ua, "SeznamBot") !== false) sleep(10);
if (StrPos($ua, "YandexBot") !== false) sleep(10);
if (StrPos($ua, "msnbot") !== false) sleep(10);
if (StrPos($ua, "Heurekabot") !== false) sleep(10);
if (StrPos($ua, "Tagoobot") !== false) sleep(10);
if (StrPos($ua, "Jyxobot") !== false) sleep(10);
if (StrPos($ua, "Exabot") !== false) sleep(10);
// bad bots
if (StrPos($ua, "Java/1.5.0_07") !== false) sleep(15);
?>
... jinymi slovy, kdyz prijde Bot, at si pocka, nemilosrdne.
Povazoval jsem to nejdriv za prasarnu, ale po googlovani jsem zjistil, ze vetsine botu to nevadi.
Teoreticky existuje v robots.txt neco jako crawl-delay, ale dost botu to proste nerespektuje anebo pro me nerozkrytelne.
Lepsi reseni neznam...
-
BTW: Nechce sa mi citat vsetko, ale mohol by pre vas byt zaujimavy mod_ruid...
*PHP by som aj tak s worker mpm radsej nepustal
1) Cize nasavit prefork
2) kazda domena iny UID
3) Pozerat pekne ktory uzivatel vytazuje + nastavit limity ;)