Email értesítés magas load esetén

Az első if-ben írj be egy load értéket. Ha a load magasabb, mint a beírt szám akkor küld emailt a jelenlegi load-okról és a legcpuigényesebb processzekről.

Mentsd el a kódot egy php file-ba, majd rakd be cron-ba, ahol beállíthatod, hogy pl fusson le negyedóránként. Így hamar értesülhetsz arról, ha ddos van vagy bármi más szervert terhelő anomália.

<?php

 

$load = sys_getloadavg();

$out = “”;

if ($load[2] > 2) {
$out = “load: “.$load[0].” “.$load[1].” “.$load[2].”\n\n”;
$return = array();
exec(“ps aux | sort -rk 3,3 | head -n 13″, &$return);

for ($i = 0; $i < count($return); $i++) {
$out .= $return[$i].”\n”;
}
mail(“admin@email.cim”, “Server load: “.$load[2], $out);
}

 
?>

e107 memcache (v1.0.1)

Ha esetleg volna valaki még (rajtam kívül) aki annyira elvetemedett, hogy e107-et használ (1.0.1-es verzióról van szó) és szeretne még rajta valamennyit gyorsítani próbálkozzon meg memória cache-eléssel.

 

Annyi a teendő, hogy a /e107_handlers/cache_handler.php filet felülírjuk az alább letölthető zip-ben lévő file-al és bekapcsoljuk a weboldalon a cache funkciót. Természetesen telepítve kell legyen a szerverre a memcached, máskülönben ne várjunk eredményt.

 

LETÖLTÉS

***Megjegyzés***

Ez a patch saját kreálmány, még csak néhány napja tesztelem, felelősséget egyelőre nem vállalok érte. 🙂

File based cache

Képzeld el a helyzetet, hogy van egy óriási adatbázisod, amit jól lehet gyakran kell olvasnod, sokszor ugyanazt. Ha sokat pörgeti a procit a mysql akkor próbáld ki a probléma kiküszöbölésére készült programomat, ami letölthető INNEN.

 

Használata

new cache($name, $timeout = 1800) ;

Segítségével létrehozod a cache objektumot. $name paramétere a kulcs, ami lehet egy key vagy egy mysql lekérdezés is. A $timeout paraméternek olvasáskor van értelme – ezt másodpercben értjük. Lényege, hogy írás/módosítás után ennyi másodperccel érvénytelen lesz a diszken lévő cache file. Fontos megjegyezni, hogy a program erőforráskímélés céljából nem törli a használaton kívüli cache fájlokat. Ha e paramétert nem állítjuk be akkor a default paraméter lesz érvényes, ami 1800 másodperc.

setCache($filestring);

Egyetlen paraméterében egy stringet vagy integert vár. A kapott értéket azonnal beírja az adatbázisba. Visszatérési értéke nincs.

 

setArrayCache($array);

Paraméterében tömböt vár. Lényegében ugyanazt csinálja, mint a setCache(), csak tömböt lehet vele cache-elni. Fontos, hogy nem getCache()-el olvassuk az így beírt értékeket, hanem a getArrayCache()-el.

 

getArrayCache();

Visszatérési értéke a setArrayCache() által beírt érték.

 

getCache();

Visszatérése a setCache() által beírt érték

 

checkCache();

TRUE-val tér vissza, ha létezik érvényes cache file, FALSE-val, ha nincs cache-elve az adat

 

delCacheFile();

Törli a példányosított cache file-t.

 

cache::caching($sql, $timeout = 1800);

Osztályszintű metódus, melynek első paramétere egy mysql lekérdezést vár string-ben, második paramétere pedig a már korábban megismert időtúllépés, illetve, ha -1 akkor nincs cache.

Visszatérése pedig egy többdimenziós asszociatív tömb, mely tartalmazza az adatbázislekérdezés eredményét.

 

cache::cleanup($sql);

Osztályszintű metódus, mely törli a paraméterben megadott sql lekérdezés eredményeit cache-ből.

 

cache::fullCleanup();

Osztályszintű metódus, ami törli a teljes cache adatbázist.

 

Telepítése

1. Hozz létre a htdocs-od felett egy cache mappát (htdocs mellé)

2. Másold be a cache.php file-t a htdocs-ba, majd require_once “cache.php”-al vedd használatba.

Memcached on apache2&php

Őszintén szólva eddig féltem a témától, mint a tűztől. Plusz egy különálló process, kitudja mennyire stabil, ha leáll gáz van és stb. Aztán most, hogy az egyik projektben a munkaadóm már hetek óta hajtogatta, hogy szükség lesz rá, mert gyorsabb, mint a HDD-s cache úgy döntöttem, hogy szabad óráimban felteszek egy linuxot vm-be és próbálkozok.

memcached

Felvetődhet a kérdés, hogy miért is jó ez. Egyszerűen szólva a  Memcache nagy előnye, hogy közvetlenül a memóriában tárolja az adatokat, ami a lehető leggyorsabb módszer az adatok elérésére – írására és olvasására.

 

Tehát az alábbi néhány egyszerű lépéssel végeztem el a telepítést:

apt-get install memcached

Telepítés után megnyitjuk a konfigurációt és megnöveljük a használható megabájtokat. 128 helyett lehet több és kevesebb is, én például 256-ot állítottam be:
nano /etc/memcached.conf

-m 64 sort írjuk át erre: -m 128

Aztán memcache újraindítás:
service memcached restart

php5-be “beépítjük” a memcache-t:
apt-get install php5-memcached

Apacs’ restart és készen is vagyunk:
service apache2 restart

 

Aztán egy php fileba toljuk be ezt:

<?php
$mc = new Memcached();
$mc->addServer(“127.0.0.1”, 11211);

$mc->set(“testkey”, “Mindenki örül, működik a memcache! :)”);
print $mc->get(“testkey”);

 

Ha futtatás után azt látjuk a képernyőn, hogy “Mindenki örül, működik a memcache! :)” akkor már végeztünk is.

A mellékelt kódsorok alapján láthatjuk, hogy OOP szintű a dolog, set-get a beírás és kiolvasás. Kulcs-értékpárokkal dolgozunk, tehát a key az lényegében a kulcs, azonosító – a set második paramétere (value) pedig maga a felvitt adat.

Fontos még megjegyeznem, hogy vannak esetek amikor szeretnénk, hogy egy felvitt adat egy idő után lejárjon. Először ezt manuálisan akartam megoldani, így hosszasan keresgéltem modify/set date után unix időben, de aztán rájöttem, hogy a megoldás sokkal egyszerűbb: a set metódus harmadik paramétere egy integer, ami default 0 – ez állítja be az adat timeout-ját. Tehát ha beállítunk egy >0 értéket akkor a rögzített adat annyi ideig lesz érvényes, utána automatikusan megsemmisül. Így a szemétgyűjtést nem valós időben kell végeznünk, mint a file szintű cache-nél, kódunk ezért is gyorsabb lesz (hurrá!).

 

Memcache admin/stat felület

Jó kis statisztikás app készült hozzá, amit elég kicsomagolnunk és bemásolnunk valahova, majd böngészőben a szerverről megnyitni. Letölthető innen!