Som utvecklare lägger du ner mycket möda på att mejsla fram applikationer, för att ibland upptäcka att de har dåliga prestanda när de tas i drift. Trots att allt fungerade bra när du satt vid din egen dator och kodade.

Det finns många skäl till att det kan bli så här. Här beskriver Infoworld de tre vanligaste.

Prestandatjuv 1: En enda stor tråd
Om du råkar ut för det här problemet, till exempel om du kör en tung algoritm med Javascript som körs på Node.js, så bör du fråga dig om du har valt rätt teknikplattform. Du bör i alla fall ta reda på hur du kan hantera samtidighet (concurrency) och undvika att blockera händelseslingan. Lär dig att använda köer och kanske till och med att hantera trådar.

Prestandatjuv 2: Databasen är !@#$
Det finns gott om anledningar till att databaser strular. Den mest uppenbara är att det saknas index. Om du använder en relationsdatabas måste du lära dig hur index fungerar.

Ett annat problem är dåliga datamodeller. Ett exempel på det är att använda en dokumentdatabas som MongoDB och utforma databasmodellen som om det var en relationsdatabas, med joins mellan ”tabeller”.

Läs också: Vi frågade fem tunga utvecklare: vad är nästa stora grej?

Än värre är det om man försöker bygga ”tabeller” i en key-value-databas eller att implementera vänners-vänner-lösningar i en relationsdatabas (använd en grafdatabas i stället). Överväg att använda en sökmotor som Apaches Solr om du gör mycket fritextsökningar.

Ett knepigt problem är om man har för många öppna anslutningar till en databas. Tänk på att om du har 15 instanser av en tjänst i gång som alla öppnar 100 anslutningar, så blir det 1 500 anslutningar. Och det kan bli problematiskt.

Använd övervakningsverktyg och analysverktyg för databasfrågor. Lyssna på en erfaren databasadministratör, om du kan hitta någon. I vissa fall kanske hårdvara kan bidra till lösningar.

Prestandatjuv 3: Minnet är feldimensionerat
De flesta moderna applikationer körs på någon sorts virtuell maskin, som den virtuella Javamaskinen (JVM). Nästan alla sådana kräver att man allokerar en viss mängd minne, kallas ”heap”, och de använder dessutom ytterligare minne när de kör i gång trådar.

Om sådana här virtuella maskiner får ont om heapminne kommer de att lägga mycket tid på minneshantering (garbage collection), med följden att applikationer blir långsammare.

Läs också: Nu ska AI hitta buggarna i koden

Om det händer kan man slå på loggning av minneshantering för att undersöka vad som händer. Det går också att allokera mer minne, men det är inte alltid det hjälper. Eftersom det inte bara är heapminne som används, utan även minne för trådar och annat, så kan minnesproblematiken bli väldigt komplicerad och behöva undersökas närmare.

Gräv vidare
Det finns hur många fler anledningar till långsamma applikationer som helst. Felaktig dimensionering av ”pooler” för trådar och anslutningar är ett exempel, felaktiga värden för antalet tillåtna trådar och öppna filer ett annat.

Det krävs noggranna undersökningar och erfarenhet för att komma till rätta med problemen. Och det skadar inte att ta del av andras kunskaper.