Etikettarkiv: memcache

Någon som kan knäcka nöten?

Jag gillar memcache och använder det flitigt här och var. Men tyvärr så stängs inte kopplingen ner korrekt någonstans i koden och jag vet inte riktigt var. Detta resulterar i att massor av TCP-koppel hamnar i TIME_WAIT:

$ netstat -n|grep -c TIME_WAIT

5449

Har du någon lösning på mitt problem eller tips på hur jag kan hitta vart kopplet inte stängs ner korrekt i PHP-koden?

Uppgradering av Ubuntu

Den Co-Location server som har hand om nästan samtliga av mina projekt körde tidigare Ubuntu 6.04 LTS så jag kände att det var dags att uppgradera till den nyare versionen Ubuntu 8.04 LTS Server Edition. LTS står för Long Term Suport och betyder att det kommer att släppas patchar till denna version fram till år 2013.

Genom att följa uppgraderingsförfarandet som presenteras på Ubuntu:s sida så gick uppgraderingen näst intill smärtfritt:

Steg 1, uppgradera till version 7.10

sudo aptitude install update-manager-core
sudo do-release-upgrade

Svara på frågor, starta om.

Steg 2, uppgradera till version 8.04

sudo do-release-upgrade

Svara på frågor, starta om.

De problem jag stötte på var enligt följande:

AppArmor

AppArmor är påslaget standard i version 8.04 och aktiverat i ”complain” mode för exempelvis MySQL och har du annat än standarsökvägar till filerna där databaserna ligger så får du följande felmeddelande:

audit(1210329486.124:240): type=1502 operation=”inode_permission” requested_mask=”r::” denied_mask=”r::” name=”/u0/mysql/domaintool/title.frm” pid=10822 profile=”/usr/sbin/mysqld” namespace=”default”

Genom att lägga till en rad /etc/apparmor.d/usr.sbin.mysqld som förklarar att även sökvägen /u0/mysql/ skall innefattas så slutar felmeddelandet att dyka upp.

Vill du läsa mer om AppArmor kan du göra det här:

Memcache

Av någon konstig anledning så försvinner raden extension=memcache.so som återfinns längst ner i /etc/php5/apache2/php.ini vilket resulterar i att memcache inte fungerar och följande felmeddelande dyker upp i webbserver loggarna:

PHP Fatal error: Class ’Memcache’ not found in /var/www/bloggnytt.se/docs/memcacheAPI.inc.php on line 33

Klart!

Uppgraderingen genomfördes med en knacklig 3G-uppkoppling över ssh.

Installation av memcached

Har nu äntligen fått tummen ur **** och tagit mig tid att installera memcached:

”memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.

Danga Interactive developed memcached to enhance the speed of LiveJournal.com, a site which was already doing 20 million+ dynamic page views per day for 1 million users with a bunch of webservers and a bunch of database servers. memcached dropped the database load to almost nothing, yielding faster page load times for users, better resource utilization, and faster access to the databases on a memcache miss.”

För att installera under Ubuntu:

$ sudo apt-get install memcached

$ sudo apt-get install php5-memcache

Under Ubuntu 7.04 så blev jag tvungen att ändra i /etc/php5/apache2/php.ini pga en bugg. Starta sedan om Apache.

Sedan så gick det mesta relativt snabbt efter att jag hittat ett bra API som automagiskt använder MySQL om objektet som frågas efter inte finns lagrat i memcache. Efter att ha fixat så att UTF-8 lirade så behövde jag enbart ändra den while-loopen som itererade över resultatet från MySQL att istället iterera över resultatet från API:t.

Den första av mina sajter att använda memcache är BloggNytt.

Memcached för att snabba upp SQL-frågor

Har sneglat rätt länge på memcached som används mycket flitigt av Facebook. Memcached fungerar som en cache innan frågor går in till SQL-databasen och på så sätt så minskar belastningen. Det är också möjligt att sätta ett timeout-värde hur länge frågor skall cachas.

Min tanke för att implementera memcached är att låta en funktion ta hand om alla MySQL-frågor och där anropa memcached eller MySQL.

Står en del intressant på Webmasters Network här samt hos Linux Journal.

Så här skriver Facebook om memcached:

”a distributed memory object caching system. Memcached was not originally developed at Facebook, but we have become the largest user of memcached and actively contribute modifications back to the project. We have contributed substantial changes back to the project, boosting the software’s performance by over 20% and increasing its memory efficiency by over 30% while adding new functionality. ”