Förhindra att PHP-FPM sänker din server

Igår kväll hade jag problem med att en av våra servrar höll på att gå under, vi har nyligen satt igång ett ganska prestandakrävande script på maskinen, och av någon anledning så verkar det ha hängt sig. Eftersom jag inte är skaparen av scriptet så låter jag det förbli osagt varför.

För att förhindra att PHP-FPM sänker din server så finns det en inbyggd funktion för att sätta max_execution_time, PHP har en egen variabel för det i php.ini, men om den inte funkar så kommer FPM döda workern åt dig. Det finns också en fin funktion som loggar vilka phpscript som kör för länge, på så sätt kan man hålla utkik och enkelt felsöka sina applikationer.

request_terminate_timeout = 30m
; The timeout for serving a single request after which a PHP backtrace will be
; dumped to the 'slowlog' file. A value of '0s' means 'off'.
; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
; Default Value: 0
request_slowlog_timeout = 5s

; The log file for slow requests
; Default Value: /var/log/php5-fpm.log.slow
slowlog = /var/log/php5-fpm.log.slow

Jag väljer att ha 30minuters gräns för hur länge ett script får lov att köra, och det loggas i php5-fpm.log.slow efter 5s, på så sätt får jag snabbt information om ifall det är något som gått snett. Glöm inte starta om php5-fpm för att ändringarna ska slå igenom.


					

Generera iCalendar med Codeigniter

Mitt senaste projekt är att skriva ett enkelt bibliotek(library) i CodeIgniter för att generera iCalendar(http://en.wikipedia.org/wiki/ICalendar) filer. jag har ännu inte bestämt mig för om den ska generera riktiga filer, eller om jag ska låta den generera allt dynamiskt och bara skicka med lite headers. Det senare är det smartaste alternativet, men jag vet inte riktigt hur det är prestandamässigt. Det hade ju varit smidigt att kunna lagra all data i databasen istället för att hålla på och mecka med filer.

iCalendar är ett öppet och vedertaget sätt att dela kalenderposter, det används i både Outlook och iPhone samt Sunbird(kalender plugin/add-on) för Thunderbird, ett mozilla projekt med andra ord.

Återkommer med mer info när jag har det, planen är att släppa biblioteket som GPL så att alla kan ta del av det:)

Problem med att ladda upp ODT med CodeIgniter

Upptäckte precis att CodeIgniter 1.7.2 inte har .ODT tillagt i filen config/mimes.php, vilket gör att man inte kan ladda upp .odt filer med de inbyggda funktionerna. För att lösa det, lägg till den här raden:

'odt'   =>       array('application/x-vnd.oasis.opendocumet.text',
'application/vnd.oasis.opendocument.text'),

Det är viktigt att det skrivs på samma rad!

Ovanför raden som inleds med ‘eml’ i filen application/config/mimes.php

..mer om .ODT i PHP

Jag har de senaste dagarna använt systemet i den här posten(http://www.abergman.se/skapa-odt-dokument-med-odtphp/) för att kunna generera dokument on the fly från variabler som jag själv anger, både placeholders i form av %PLACEHOLDER% och fördefinierad text. Allt är databasbaserat och fint.

Jag lärde mig att man inte kan deklarera variabler on-the-fly med php, MEN man kan använda arrayer, jag löste det såhär:

$variabel = data;
$array[$variabel] = $variabel;

Det innebär att $array[data]  = data. Det är ett smidigt sätt när man till exempel vill döpa variabler från värden i en databas. Den här lösningen kommer att användas för att generera bla avtal i Ngcrm.

Benchmarktest Nginx vs Apache2 och Cherokee

Jag ska under natten och morgondagen företa mig att göra benchmarktester av Nginx, Apache2 och Cherokee. De två första är jag väldigt bekant med, men Cherokee bli en ny bekantskap för mig. Cherokee ska jag också passa på att presentera lite mer utförligt och se hur det fungerar med PHP, så det blir en benchmark av WordPress och PHP också, precis om i den här posten: http://www.abergman.se/w3-total-cache-och-nginx/

Precis som förra gången så kommer jag att publicera resultatet dels här och på www.cmsdirekt.se, stay tuned!

W3 total cache och Nginx

Inom kort kommer www.cmsdirekt.se att publicera en jämförelse mellan apache2 och Nginx prestanda på en wordpress installation, dock så kan jag redan nu(eftersom det var jag som gjorde testerna) avslöja att skillanden i prestanda på siten med och utan W3 total cache är några 100%, sedan följer siege resultat från Nginx.

Med W3 total cache:

Transactions:                    1888 hits
Availability:                  100 %
Elapsed time:                  60.24 secs
Data transferred:               8.30 MB
Response time:                  0.84 secs
Transaction rate:              31.31 trans/sec
Throughput:                     0.14 MB/sec
Concurrency:                   26.22
Successful transactions:        1888
Failed transactions:               0
Longest transaction:           29.90
Shortest transaction:           0.05

Utan W3 total cache

Transactions:                      90 hits
Availability:                 100.00 %
Elapsed time:                  60.10 secs
Data transferred:               0.39 MB
Response time:                 16.57 secs
Transaction rate:               1.50 trans/sec
Throughput:                     0.01 MB/sec
Concurrency:                   24.81
Successful transactions:          90
Failed transactions:               0
Longest transaction:           21.02
Shortest transaction:          15.08

Som tydligt framgår så är det en enorm skillnad! Mer detaljer kommer dock i artikeln på www.cmsdirekt.se. Se det här som en liten preview:)