{"id":20986,"date":"2026-08-25T11:50:02","date_gmt":"2026-08-25T09:50:02","guid":{"rendered":"https:\/\/webhosting.de\/php-fpm-slowlog-richtig-auswerten-performance-optimierung-debugging-analyse\/"},"modified":"2026-08-25T11:50:02","modified_gmt":"2026-08-25T09:50:02","slug":"php-fpm-slowlog-korrekt-utvaerdering-prestandaoptimering-felsoekning-analys","status":"publish","type":"post","link":"https:\/\/webhosting.de\/sv\/php-fpm-slowlog-richtig-auswerten-performance-optimierung-debugging-analyse\/","title":{"rendered":"Att korrekt analysera PHP-FPM:s slowlog: hitta prestandaflaskhalsar p\u00e5 ett s\u00e4kert s\u00e4tt"},"content":{"rendered":"<p>Jag ska visa dig hur du g\u00f6r <strong>PHP-FPM:s slowlog<\/strong> analyserar m\u00e5linriktat, tolkar backtraces korrekt och utleder tydliga \u00e5tg\u00e4rder f\u00f6r att minska latensen. P\u00e5 s\u00e5 s\u00e4tt kan du p\u00e5 ett tillf\u00f6rlitligt s\u00e4tt hitta prestandaflaskhalsar, prioritera \u00e5tg\u00e4rder och g\u00f6ra laddningstiderna m\u00e4rkbart snabbare f\u00f6r anv\u00e4ndarna.<\/p>\n\n<h2>Centrala punkter<\/h2>\n\n<ul>\n  <li><strong>Backtrace<\/strong> L\u00e4s: Ram #0 visar den aktuella bromsbel\u00e4gget.<\/li>\n  <li><strong>Tidsgr\u00e4ns<\/strong> V\u00e4lj: b\u00f6rja h\u00f6gt och s\u00e4nk sedan gradvis.<\/li>\n  <li><strong>Korrelation<\/strong> Med \u00e5tkomstlogg: s\u00e4kert identifiera l\u00e5ngsamma URL:er.<\/li>\n  <li><strong>Prov<\/strong> r\u00e4kna: prioritera \u00e5terkommande funktioner.<\/li>\n  <li><strong>Kodkorrigeringar<\/strong> utleda: Arbeta m\u00e5lmedvetet med databaser, API:er, loopar och plugins.<\/li>\n<\/ul>\n\n<h2>Vad \u00e4r PHP-FPM:s slowlog?<\/h2>\n\n<p>Slowlog skriver in en <strong>Backtrace<\/strong> i en loggfil och registrerar d\u00e4rmed den aktuella k\u00f6rningspunkten utan att avbryta f\u00f6rfr\u00e5gan. Jag ser omedelbart vilket skript, vilken URL och vilken funktion som blockerar v\u00e4gen. Posterna inneh\u00e5ller tidsst\u00e4mpel, pool, skriptfilnamn, beg\u00e4ran-URI och kedjan av funktionsanrop. D\u00e4rmed skiljer sig slowloggen tydligt fr\u00e5n klassiska felloggar, eftersom den dokumenterar prestanda, inte fel. F\u00f6r h\u00e5rt belastade sidor som WordPress-backends ger den snabbt anv\u00e4ndbara ledtr\u00e5dar om kostsamma f\u00f6rfr\u00e5gningar, omfattande rendering eller blockerande I\/O-operationer. Den som f\u00f6rst\u00e5r dessa \u00f6gonblicksbilder kan mycket snabbt <strong>Huvudorsak<\/strong> avgr\u00e4nsa och planera \u00e5tg\u00e4rder.<\/p>\n\n<h2>S\u00e5 h\u00e4r fungerar Slowlog i vardagen<\/h2>\n\n<p>Efter aktivering skriver PHP-FPM ut en <strong>\u00d6gonblicksbild<\/strong> fr\u00e5n stacken till loggen medan beg\u00e4ran forts\u00e4tter. Varje post b\u00f6rjar vanligtvis med \u201e#0\u201c, det vill s\u00e4ga vid den punkt d\u00e4r tid just g\u00e5r f\u00f6rlorad. Mellan blocken ser jag ofta tomma rader, vilket underl\u00e4ttar avgr\u00e4nsningen av h\u00e4ndelserna. Metoden ger stickprov ist\u00e4llet f\u00f6r fullst\u00e4ndiga profiler, men d\u00e4remot tr\u00e4ffs\u00e4kra indikationer p\u00e5 verkliga flaskhalsar s\u00e5som kr\u00e5ngliga mallv\u00e4gar, \u00f6vergivna hookar eller tr\u00f6ga n\u00e4tverksanrop. Under perioder med h\u00f6g belastning kopplar jag dessa indikationer till belastningstoppar och kan p\u00e5 s\u00e5 s\u00e4tt tydligt klassificera kodavsnitt. S\u00e5 snart jag ser \u00e5terkommande m\u00f6nster anpassar jag till exempel <strong>pm.max_barn<\/strong> och anv\u00e4nd informationen fr\u00e5n <a href=\"https:\/\/webhosting.de\/sv\/php-fpm-processhantering-pm-max-barn-optimera-kaerna\/\">St\u00e4lla in pm.max_children korrekt<\/a>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/php-slowlog-analyse-6392.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Aktivera och konfigurera Slowlog<\/h2>\n\n<p>Jag aktiverar funktionen i respektive pool och anger s\u00f6kv\u00e4g, timeout och sp\u00e5rningsdjup s\u00e5 att <strong>Utv\u00e4rdering<\/strong> f\u00f6rblir hanterbar. D\u00e4refter startar jag om PHP-FPM och kontrollerar om loggfilen g\u00e5r att skriva till med poolanv\u00e4ndarens beh\u00f6righeter. Som utg\u00e5ngsv\u00e4rde s\u00e4tter jag ofta 5 sekunder f\u00f6r att f\u00f6rst f\u00e5nga upp grova avvikelser utan att \u00f6versv\u00e4mma systemet med loggdata. D\u00e4refter s\u00e4nker jag v\u00e4rdet stegvis s\u00e5 snart de st\u00f6rsta problemen \u00e4r l\u00f6sta. F\u00f6r \u00f6versk\u00e5dliga loggar begr\u00e4nsar jag sp\u00e5rningsdjupet till 20 till 30 ramar, vilket i praktiken oftast r\u00e4cker. P\u00e5 s\u00e5 s\u00e4tt h\u00e5ller jag <strong>Filstorlek<\/strong> under kontroll och missar inga viktiga detaljer.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Inst\u00e4llning<\/th>\n      <th>Syfte<\/th>\n      <th>Startv\u00e4rde<\/th>\n      <th>Anteckningar<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td><code>slowlog<\/code><\/td>\n      <td>S\u00f6kv\u00e4g till loggfilen<\/td>\n      <td>\/var\/log\/php-fpm\/www-slow.log<\/td>\n      <td>Kontrollera s\u00f6kv\u00e4garna beroende p\u00e5 distribution; skrivr\u00e4ttigheter f\u00f6r <strong>www-data<\/strong> s\u00e4kerst\u00e4lla<\/td>\n    <\/tr>\n    <tr>\n      <td><code>beg\u00e4ran_slowlog_timeout<\/code><\/td>\n      <td>Tr\u00f6skelv\u00e4rde f\u00f6r \u201el\u00e5ngsamt\u201c<\/td>\n      <td>5 sekunder<\/td>\n      <td>B\u00f6rja h\u00f6gt, senare <strong>s\u00e4nka<\/strong> (t.ex. 2\u20133 s)<\/td>\n    <\/tr>\n    <tr>\n      <td><code>request_slowlog_trace_depth<\/code><\/td>\n      <td>Max. djup f\u00f6r bak\u00e5tsp\u00e5rningen<\/td>\n      <td>20\u201330<\/td>\n      <td>Se till att sp\u00e5ren f\u00f6rblir l\u00e4sbara, utan att <strong>Viktig information<\/strong> att f\u00f6rlora<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>Hitta loggfilen och granska den snabbt<\/h2>\n\n<p>Jag kontrollerar f\u00f6rst de konfigurerade s\u00f6kv\u00e4garna och \u00f6ppnar loggen med <strong>mindre<\/strong> eller kontrollera de sista raderna med <code>tail -40<\/code>. P\u00e5 s\u00e5 s\u00e4tt ser jag direkt om det kommer in poster och vilka skript som \u00e5terkommande sticker ut. F\u00f6r att snabbt f\u00e5 en \u00f6verblick tittar jag p\u00e5 filnamn, ber\u00f6rda pooler och URI:er som sticker ut. Om jag inte hittar n\u00e5gra poster aktiverar jag alternativen i poolen, laddar om tj\u00e4nsten och kontrollerar \u00e4gare och beh\u00f6righeter. I hanterade milj\u00f6er konsulterar jag dessutom panelen eller startskripten f\u00f6r att s\u00e4kerst\u00e4lla att slowloggen verkligen <strong>f\u00f6ljer med<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/phpfpm_slowlogs4357.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Identifiera block och r\u00e4kna m\u00f6nster<\/h2>\n\n<p>Varje post visas som ett block, ofta \u00e5tskilda av en <strong>Tom rad<\/strong>, vilket underl\u00e4ttar r\u00e4kningen. Jag utg\u00e5r fr\u00e5n \u201e#0\u201c-raderna, eftersom de markerar den aktuella exekveringspunkten d\u00e4r tid g\u00e5r \u00e5t. Med hj\u00e4lp av enkla shell-pipelines filtrerar jag fram de viktigaste funktionerna och ser vilka st\u00e4llen som oftast bromsar ner systemet. P\u00e5 s\u00e5 s\u00e4tt prioriterar jag specifikt de funktioner som sammantaget tar mest tid. D\u00e4refter kontrollerar jag om dessa flaskhalsar endast uppst\u00e5r vid belastningstoppar eller om de orsakar problem genomg\u00e5ende. Denna klassificering avg\u00f6r <strong>Sekvens<\/strong> mina \u00e5tg\u00e4rder.<\/p>\n\n<h2>L\u00e4sa poster: fr\u00e5n ram #0 till b\u00f6rjan<\/h2>\n\n<p>N\u00e4r jag l\u00e4ser inl\u00e4ggen b\u00f6rjar jag h\u00f6gst upp vid <strong>#0<\/strong> och g\u00e5r steg f\u00f6r steg ned\u00e5t f\u00f6r att f\u00f6rst\u00e5 v\u00e4gen fr\u00e5n startpunkten till den aktuella platsen. L\u00e5nga mallkedjor tyder p\u00e5 resurskr\u00e4vande rendering, m\u00e5nga hooks p\u00e5 on\u00f6diga plugins och en h\u00f6g andel SQL-kod p\u00e5 saknade index. Jag markerar radnummer, funktionsnamn och filv\u00e4gar s\u00e5 att jag snabbt kan hitta koden. Om stacken ser ut att inneh\u00e5lla v\u00e4nteslingor eller upprepade operationer kontrollerar jag mellanlagring och caching. P\u00e5 s\u00e5 s\u00e4tt sl\u00f6sar jag inte tid p\u00e5 att <strong>Lokalisering<\/strong> problemet i koden.<\/p>\n\n<h2>Korrelera Slowlog med \u00e5tkomstloggar<\/h2>\n\n<p>Jag kopplar ihop Slowlog med webbserverns loggar s\u00e5 att jag kan se de l\u00e5ngsamma f\u00f6rfr\u00e5gningarna fr\u00e5n en specifik <strong>URL<\/strong> kan koppla ihop. Med hj\u00e4lp av tidsst\u00e4mplar och, i f\u00f6rekommande fall, PID:er hittar jag de relevanta posterna i Nginx- eller Apache-loggen. P\u00e5 s\u00e5 s\u00e4tt kan jag identifiera parametrar, anv\u00e4ndaragenter och svarstider utanf\u00f6r PHP. Om \u00e5terkommande bes\u00f6kare eller identiska fr\u00e5gestr\u00e4ngar dyker upp startar jag en testk\u00f6rning med just dessa scenarier. P\u00e5 s\u00e5 s\u00e4tt hittar jag snabbt reproducerbara fall och h\u00e5ller <strong>Analystid<\/strong> kort.<\/p>\n\n<h2>S\u00e4nk tr\u00f6skelv\u00e4rdet stegvis<\/h2>\n\n<p>Jag b\u00f6rjar med en gener\u00f6s tr\u00f6skel och \u00e5tg\u00e4rdar f\u00f6rst de st\u00f6rsta <strong>Utbrytare<\/strong> och s\u00e4nker sedan stegvis. Denna process minskar loggvolymen och riktar min energi mot v\u00e4rdefulla korrigeringar. Efter varje optimeringsomg\u00e5ng v\u00e4ljer jag en l\u00e4gre tr\u00f6skel och samlar in data igen. P\u00e5 s\u00e5 s\u00e4tt arbetar jag mig fram fr\u00e5n grovjustering till finjustering utan att fastna i bruset. Resultatet blir m\u00e5linriktade justeringar och en <strong>klar<\/strong> \u00d6versikt \u00f6ver kvarvarande flaskhalsar.<\/p>\n\n<h2>Fr\u00e5n slowlog till l\u00f6sning: typiska \u00e5tg\u00e4rder<\/h2>\n\n<p>Om toppramen visar databasfunktioner kontrollerar jag SQL-kommandona med <strong>F\u00d6RKLARA<\/strong>, l\u00e4gger till saknade index och begr\u00e4nsar resultatupps\u00e4ttningarna. Vid avl\u00e4gsna tj\u00e4nster minskar jag tidsgr\u00e4nserna, hanterar svaren asynkront eller cachelagrar resultaten. Om jag hittar resurskr\u00e4vande loopar f\u00f6renklar jag logiken, minskar antalet genomg\u00e5ngar och anv\u00e4nder effektivare strukturer. I WordPress markerar jag \u00e5terkommande hooks, byter ut tunga till\u00e4gg och v\u00e4ljer ett l\u00e4ttare tema. Om antalet PHP-processer blockerar bearbetningen h\u00e5ller jag koll p\u00e5 v\u00e4ntetiderna och l\u00e4ser kompletterande information om <strong>Baksp\u00e5r<\/strong> \u00e4ven k\u00f6er, till exempel via <a href=\"https:\/\/webhosting.de\/sv\/php-begaeran-koe-max-barn-bearbetning-graenser-prestanda\/\">K\u00f6hantering av PHP-f\u00f6rfr\u00e5gningar<\/a>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/PHP-FPM-Slowlog-Analyse-4958.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Kontinuerlig drift: effektiv logghantering<\/h2>\n\n<p>Jag st\u00e4ller inte in loggningen p\u00e5 max hela tiden, s\u00e5 att <strong>I\/O-belastning<\/strong> f\u00f6rblir hanterbar. Ist\u00e4llet arbetar jag i faser: aktiv utv\u00e4rdering, optimering, f\u00f6r att sedan \u00e5terg\u00e5 till en m\u00e5ttlig niv\u00e5. Med Logrotate h\u00e5ller jag filerna smidiga och arkiverar gamla data i komprimerat format. N\u00e4r en analys \u00e4r klar h\u00f6jer jag tr\u00f6skeln eller st\u00e4nger av slowlogging tillf\u00e4lligt. Dessutom dokumenterar jag insikter och korrigeringar s\u00e5 att senare granskningar ger en tydlig <strong>sp\u00e5r<\/strong> finna.<\/p>\n\n<h2>Diagnos av webbhotell: Skilja mellan server och applikation<\/h2>\n\n<p>M\u00e5nga identiska Slowlog-ramar vid h\u00f6g CPU-belastning tyder p\u00e5 <strong>Applikationskod<\/strong>, medan saknade poster p\u00e5 en tr\u00f6g sida snarare tyder p\u00e5 problem med I\/O, n\u00e4tverket eller databasservern. I s\u00e5dana fall j\u00e4mf\u00f6r jag TTFB, PHP-tider och uppstr\u00f6mslatens f\u00f6r att lokalisera flaskhalsen. Om jag ser k\u00f6er och l\u00e5nga v\u00e4ntetider f\u00f6re exekvering kontrollerar jag gr\u00e4nsv\u00e4rden och antalet processer. Dessutom kompletterar jag min diagnos med information om hur f\u00f6rfr\u00e5gningarna hanteras och tar h\u00e4nsyn till eventuella gr\u00e4nsv\u00e4rden som saktar ner bearbetningen. F\u00f6r en v\u00e4lgrundad bed\u00f6mning l\u00e4ser jag, ut\u00f6ver loggarna, \u00e4ven information om <a href=\"https:\/\/webhosting.de\/sv\/php-fpm-processhantering-pm-max-barn-optimera-kaerna\/\">St\u00e4lla in pm.max_children korrekt<\/a> eller artiklar som handlar om v\u00e4ntetider, s\u00e5 att jag kan <strong>Kapacitet<\/strong> p\u00e5 ett meningsfullt s\u00e4tt.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/phpfpm_slowlog_analysis_4732.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Praktiskt exempel: l\u00e5ngsam WordPress-administrationspanel<\/h2>\n\n<p>Jag st\u00e4ller in <strong>beg\u00e4ran_slowlog_timeout<\/strong> Inledningsvis st\u00e4ller jag in tiden p\u00e5 5 sekunder, startar om PHP-FPM och samlar in data under 30 till 60 minuter under verklig belastning. D\u00e4refter r\u00e4knar jag de vanligaste \u201e#0\u201c-funktionerna och letar efter \u00e5terkommande hooks eller kostsamma WP_Query-anrop. Om externa tj\u00e4nster f\u00f6rekommer m\u00e4ter jag svarstider och cachelagrar resultaten p\u00e5 ett m\u00e5linriktat s\u00e4tt. Om sidvisningar bromsas av sessions\u00e5tkomst kontrollerar jag l\u00e5sningsbeteendet och flyttar, om m\u00f6jligt, sessionsrelaterat arbete bort fr\u00e5n den kritiska v\u00e4gen. S\u00e4rskilt vid inloggningar och administrat\u00f6rs\u00e5tg\u00e4rder testar jag inst\u00e4llningar och inaktiverar vissa meddelanden <a href=\"https:\/\/webhosting.de\/sv\/php-sessionslasning-wordpress-inloggning-langsam-optimering-serverfix\/\">L\u00e5sning av PHP-session<\/a> f\u00f6r att min <strong>Backend<\/strong> reagerar snabbare.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/server-analyse-php-4782.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Pool-design och r\u00e4ttigheter: en ren grund f\u00f6r anv\u00e4ndbara slowloggar<\/h2>\n<p>Jag delar upp applikationerna i separata <strong>pooler<\/strong> med tydliga namn (t.ex. www, admin, api), ange unika <code>lyssna<\/code>-uttag och individuella <code>slowlog<\/code>-s\u00f6kv\u00e4gar. P\u00e5 s\u00e5 s\u00e4tt kan jag l\u00e4ttare koppla ihop poster och undvika att de blandas ihop. Det \u00e4r viktigt med konsekventa <strong>Filr\u00e4ttigheter<\/strong>: Poolanv\u00e4ndaren (ofta www-data) beh\u00f6ver skrivr\u00e4ttigheter till loggv\u00e4gen och i katalogen. I container- eller chroot-milj\u00f6er kontrollerar jag om v\u00e4garna finns i namnomr\u00e5det och \u00e4r permanenta \u2013 annars f\u00f6rsvinner loggarna vid omstart.<\/p>\n\n<h2>Att l\u00e4sa och automatiskt analysera ett Slowlog-inl\u00e4gg i detalj<\/h2>\n<p>Vanligtvis inleds posterna med tidsst\u00e4mpel, pool, skriptfilnamn och beg\u00e4ran-URI, f\u00f6ljt av ramarna. Jag r\u00e4knar \u201e#0\u201c-raderna och grupperar dem efter funktionsnamn f\u00f6r att synligg\u00f6ra flaskhalsar. Med enkla piper extraherar jag bromsblocken:<\/p>\n<pre><code>grep -E \"^#0|request.uri|script_filename\" \/var\/log\/php-fpm\/www-slow.log | sed 's\/  *\/ \/g'\n<\/code><\/pre>\n<p>Eller s\u00e5 r\u00e4knar jag upp de vanligaste toppramarna:<\/p>\n<pre><code>grep \"^#0\" \/var\/log\/php-fpm\/www-slow.log | awk -F\": \" '{print $2}' | awk '{print $1}' | sort | uniq -c | sort -nr | head\n<\/code><\/pre>\n<p>Om jag vill inkludera URL och fil f\u00f6rbereder jag block med hj\u00e4lp av <code>awk<\/code> och skriv ner de b\u00e4sta kombinationerna av funktion, URI och skript \u00e5t mig. P\u00e5 s\u00e5 s\u00e4tt prioriterar jag de korrigeringar som ger st\u00f6rst nytta.<\/p>\n\n<h2>Timeout-karta: hur Slowlog, PHP och webbservern samverkar<\/h2>\n<p>F\u00f6r att st\u00e4lla en korrekt diagnos ordinerar jag <strong>alla<\/strong> Timeouts: <code>beg\u00e4ran_slowlog_timeout<\/code> utl\u00f6ser \u00f6gonblicksbilden, <code>max_exekveringstid<\/code> begr\u00e4nsar PHP-k\u00f6rningstiden i skriptet, <code>beg\u00e4ran_avsluta_timeout<\/code> kan avsluta FPM-arbetaren p\u00e5 ett tv\u00e4rt s\u00e4tt. P\u00e5 webbserverns sida <em>fastcgi<\/em>\u2013 eller. <em>proxy<\/em>-Timeouts (t.ex. <code>fastcgi_read_timeout<\/code>) och klient-timeouts. Om jag s\u00e4tter slowlog <em>ovanf\u00f6r<\/em> om serverns tidsgr\u00e4nser \u00f6verskrids, sl\u00e4pper jag ut data; om den <em>bland annat<\/em>, f\u00e5r jag anv\u00e4ndbara \u00f6gonblicksbilder innan f\u00f6rfr\u00e5gningarna avbryts. Jag h\u00e5ller d\u00e4rf\u00f6r medvetet fast vid f\u00f6ljande ordning: webbserverns timeout &gt; PHP-avslutning &gt; slowlog &gt; m\u00e5llatens.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/php-fpm-slow-logs-analysis-7125.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Inkludera FPM-status, k\u00f6 och processhantering<\/h2>\n<p>Slowlog visar att, <em>d\u00e4r<\/em> tid g\u00e5r till spillo \u2013 FPM-statusen avsl\u00f6jar, <em>varf\u00f6r<\/em> F\u00f6rfr\u00e5gningar v\u00e4ntar. Jag aktiverar status-\u00e4ndpunkten och \u00f6vervakar <strong>tomg\u00e5ng<\/strong>, <strong>aktiv<\/strong> och <strong>lyssna k\u00f6<\/strong> och j\u00e4mf\u00f6r dem med Slowlog-tidsst\u00e4mplarna. Om k\u00f6n v\u00e4xer medan m\u00e5nga arbetare fastnar i samma funktioner \u00e4r koden flaskhalsen; om k\u00f6n v\u00e4xer utan att Slowlog-v\u00e4rdena \u00f6kar saknas kapacitet eller s\u00e5 bromsar n\u00e5got uppstr\u00f6ms. Utifr\u00e5n detta justerar jag <code>pm<\/code>-Inst\u00e4llningar (dynamisk\/p\u00e5 beg\u00e4ran), <code>pm.max_barn<\/code> och eventuellt. <code>pm.max_f\u00f6rfr\u00e5gningar<\/code>, f\u00f6r att uppt\u00e4cka minnesl\u00e4ckor eller fragmentering.<\/p>\n\n<h2>S\u00e4rdrag i containrar och hanterade milj\u00f6er<\/h2>\n<p>I Docker\/Kubernetes loggar FPM ofta till <strong>stdout\/stderr<\/strong> eller i s\u00f6kv\u00e4gar som samlas in av loggaggregatorer. Jag v\u00e4ljer medvetet en <em>en<\/em> Bort, s\u00e5 att jag inte f\u00e5r dubbla eller saknade poster. Med <code>error_log = \/proc\/self\/fd\/2<\/code> och en s\u00e4rskild <code>slowlog<\/code>-Snapshots f\u00f6rblir tillg\u00e4ngliga p\u00e5 en s\u00f6kv\u00e4g som pekar p\u00e5 en persistent volym. I hanterade milj\u00f6er kontrollerar jag om v\u00e4rdleverant\u00f6ren har aktiverat eller begr\u00e4nsat slowlogs \u2013 och justerar intervallen s\u00e5 att jag inte st\u00f6ter p\u00e5 rotationsscheman.<\/p>\n\n<h2>Dataskydd och s\u00e4kerhet: Loggar utan risk<\/h2>\n<p>Backtraces kan inneh\u00e5lla k\u00e4nslig <strong>Parametrar<\/strong>, filv\u00e4gar eller sessions-ID:n. Jag minimerar riskerna genom att undvika att spara fr\u00e5gestr\u00e4ngar i \u00e5tkomstloggar, inaktivera fels\u00f6kningsutdata i koden och begr\u00e4nsa kretsen av personer med l\u00e4sbeh\u00f6righet. Vid utbyte med tredje part anonymiserar jag s\u00f6kv\u00e4gar och tar bort token. I produktionsmilj\u00f6er fastst\u00e4ller jag korta lagringstider och inf\u00f6r loggrotation och komprimering i hela systemet.<\/p>\n\n<h2>WordPress: snabbt uppt\u00e4cka \u00e5terkommande m\u00f6nster<\/h2>\n<ul>\n  <li><strong>WP_Query\/WP_Meta_Query<\/strong>: Saknas index p\u00e5 <code>postmeta<\/code> eller om man filtrerar efter f\u00e4lt som inte \u00e4r indexerade, \u00f6kar k\u00f6rtiden kraftigt. Jag minimerar metaf\u00f6rfr\u00e5gningar, anv\u00e4nder taxonomier eller skapar riktade index.<\/li>\n  <li><strong>Transienter och objektcache<\/strong>: M\u00e5nga likartade ber\u00e4kningar tyder p\u00e5 att det saknas en permanent cache. Jag aktiverar objektcachen och optimerar cache-nycklarna och TTL-v\u00e4rdena.<\/li>\n  <li><strong>Hooks\/filter<\/strong>: L\u00e5nga kedjor i stacken tyder p\u00e5 on\u00f6diga plugins. Jag m\u00e4ter de dyraste hookarna och tar bort eller byter ut till\u00e4gg.<\/li>\n  <li><strong>HTTP-f\u00f6rfr\u00e5gningar<\/strong>: Interna API-anrop (wp_remote_get) b\u00f6r utnyttja timeout, keep-alive och caching; svaren b\u00f6r om m\u00f6jligt inte blockera beg\u00e4randetr\u00e5den.<\/li>\n  <li><strong>Mallrendering<\/strong>: Djup <code>get_template_part<\/code>-Kaskader med fil\u00e5tkomst drar nytta av cachelagring och mindre fragmentering.<\/li>\n<\/ul>\n\n<h2>Undvika feltolkningar: vad Slowlog inte visar<\/h2>\n<p>Snapshot \u00e4r en <strong>\u00d6gonblicksbild<\/strong>. Den beskriver inte hela beg\u00e4ranens livsl\u00e4ngd, utan dess tillst\u00e5nd vid den tidpunkt d\u00e5 den utl\u00f6ses. Vanliga fallgropar:<\/p>\n<ul>\n  <li><strong>Samplingsfel<\/strong>: S\u00e4llsynta men extremt dyra v\u00e4gar kan g\u00e5 f\u00f6rlorade om tidsgr\u00e4nsen \u00e4r f\u00f6r kort eller om fasen var kort.<\/li>\n  <li><strong>Systemanrop som blockerar<\/strong>: <code>fopen<\/code>, <code>stat<\/code> eller DNS-uppslag visas som PHP-funktioner, men den egentliga v\u00e4ntetiden \u00e4ger rum i k\u00e4rnan eller i n\u00e4tverket.<\/li>\n  <li><strong>Automatisk inl\u00e4sning<\/strong>: M\u00e5nga sm\u00e5 inkluderingar utan Opcache orsakar spridningsf\u00f6rluster som verkar ofarliga i stacken. En titt p\u00e5 Opcache-hitrate hj\u00e4lper till att s\u00e4tta detta i sitt sammanhang.<\/li>\n<\/ul>\n\n<h2>H\u00e5lla koll p\u00e5 CLI, Cron och webhooks<\/h2>\n<p>Det \u00e4r inte alla prestandaproblem som hanteras via FPM. Tunga <strong>Cronjobs<\/strong> (t.ex. wp-cron), k\u00f6hanterare eller webbhooks belastar CPU, I\/O eller databasen och f\u00f6rs\u00e4mrar d\u00e4rmed indirekt svarstiderna. Jag isolerar s\u00e5dan belastning i egna processer, schemal\u00e4gger dem utanf\u00f6r trafiktopparna och kontrollerar att de k\u00f6rs via FPM-triggad HTTP ist\u00e4llet f\u00f6r CLI \u2013 annars snedvrider det slowlog-vyn.<\/p>\n\n<h2>Att genomf\u00f6ra logrotation p\u00e5 ett praktiskt s\u00e4tt<\/h2>\n<p>F\u00f6r att f\u00f6rhindra att loggfilerna v\u00e4xer sig f\u00f6r stora roterar jag dem ofta och komprimerar \u00e4ldre data. En typisk rotation beh\u00e5ller n\u00e5gra generationer, signalerar till FPM att \u00f6ppna filen p\u00e5 nytt och undviker luckor. Viktigt: Efter rotationen m\u00e5ste FPM \u00f6ppnas p\u00e5 nytt (HUP) s\u00e5 att nya poster inte hamnar i tomrummet. De konkreta inst\u00e4llningarna anpassar jag efter trafik, timeout och sp\u00e5rningsdjup.<\/p>\n\n<h2>Checklista f\u00f6r snabba resultat<\/h2>\n<ul>\n  <li>Aktivera Slowlog per pool, kontrollera s\u00f6kv\u00e4gar och beh\u00f6righeter.<\/li>\n  <li>Starta med 5 sekunder, samla in poster, r\u00e4kna de b\u00e4sta bildrutorna.<\/li>\n  <li>Korrelera med Access-loggar: tidsst\u00e4mpel, URI, User-Agent.<\/li>\n  <li>Kontrollera tidsgr\u00e4nserna f\u00f6r uppstr\u00f6ms- och webbservrar.<\/li>\n  <li>\u00d6vervaka FPM-status och k\u00f6, <strong>pm<\/strong>- Justera gr\u00e4nserna.<\/li>\n  <li>\u00c5tg\u00e4rda f\u00f6rst de kritiska punkterna: SQL-index, caching, resurskr\u00e4vande hookar, I\/O.<\/li>\n  <li>S\u00e4nk timeout-tiden stegvis och m\u00e4t igen.<\/li>\n  <li>Rotera loggar, dokumentera insikter, sp\u00e5ra \u00e4ndringar.<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/phpfpm_slowlogs4357.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>I korthet: din v\u00e4g till b\u00e4ttre prestanda<\/h2>\n\n<p>Jag aktiverar Slowlog och l\u00e4ser <strong>Toppramar<\/strong>, j\u00e4mf\u00f6r med \u00e5tkomstloggarna och \u00e5tg\u00e4rdar f\u00f6rst de st\u00f6rsta avvikelserna. D\u00e4refter s\u00e4nker jag tr\u00f6skelv\u00e4rdet, kontrollerar \u00e5terkommande m\u00f6nster och genomf\u00f6r riktade korrigeringar i koden, konfigurationen och cachelagringen. Med loggrotation och rimliga tidsgr\u00e4nser h\u00e5ller jag driftsbelastningen l\u00e5g. F\u00f6r WordPress fokuserar jag p\u00e5 resurskr\u00e4vande s\u00f6kfr\u00e5gor, plugins, hooks och eventuella sessionsl\u00e5s. P\u00e5 s\u00e5 s\u00e4tt hittar jag p\u00e5 ett tillf\u00f6rlitligt s\u00e4tt de verkliga <strong>Flaskhalsar<\/strong> och ger m\u00e4rkbart snabbare svar.<\/p>","protected":false},"excerpt":{"rendered":"<p>L\u00e4r dig hur du tolkar PHP-FPM:s slowlog p\u00e5 r\u00e4tt s\u00e4tt och analyserar l\u00e5ngsamma f\u00f6rfr\u00e5gningar i detalj. Med den h\u00e4r guiden kan du optimera prestandan hos din PHP-applikation p\u00e5 ett m\u00e5linriktat s\u00e4tt \u2013 den perfekta introduktionen till effektiv PHP-fels\u00f6kning.<\/p>","protected":false},"author":1,"featured_media":20979,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[780],"tags":[],"class_list":["post-20986","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administration-anleitungen"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"147","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"PHP-FPM Slowlog","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"20979","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/posts\/20986","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/comments?post=20986"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/posts\/20986\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/media\/20979"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/media?parent=20986"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/categories?post=20986"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/tags?post=20986"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}