Kjapp og trygg hosting for Wordpress

Hvordan best håndtere trege sider / nedetid?

Driver en nettside med ganske mange brukere, men gammel og utdatert kode som på ingen måte er beregnet på så mange brukere. Problemet er at ting er kodet på en så kronglete måte at sidene sluker vanvittig mye minne - ja, selvsagt jobber jeg med ny og optimalisert versjon hvor disse problemene er en sagablått, men sånt tar alltid veldig mye mer tid enn man planlegger. Det siste halvåret har resultatet av dette problemet vært litt nedetid av og til, men det har kommet i orden igjen når jeg har restartet serveren (VPS). De siste dagene har imidlertid problemet blitt så stort at restart av serveren ikke har noen effekt. Sidene ER stort sett oppe (besøkstallene i statistikken er iallefall tilnærmet lik normale), men ting går usedvanlig sakte, deler av sidene virker ikke, og mange av sidene (inkludert hovedsiden) gir bare feilmelding i 90 % av tilfellene. Og restarter jeg serveren, virker det kanskje som det skal i noen minutter før det er like ille igjen. Men samtidig varierer det, for eksempel virker det hele ganske perfekt akkurat nå.

Hvordan skal jeg løse dette? Slik jeg leser situasjonen har jeg tre valg:

1. Jeg kan oppgradere til en server med mer minne. Dette vil sannsynligvis løse det kortsiktige problemet, at sidene er nede akkurat nå - men det vil ikke gjøre noe for hovedproblemet, at koden min suger. Det blir en behandling av symptomene og ikke sykdommen. Dessuten koster dette penger, det kommer til å være noe jeg ikke trenger når de optimaliserte sidene er på plass, og jeg aner ikke hvor enkelt det er å nedgradere.

2. Jeg kan la sidene ligge slik de er (stort sett virker de jo), og jobbe på spreng for å få optimalisert versjon (eller en helt enkel variant av optimalisert versjon hvor bare det viktigste er på plass) klar så snart som overhodet mulig.

3. Jeg kan ta ned sidene, erstatte dem med en enkel infoside om at sidene sliter litt for tiden og at nye sider er på vei, og slenge inn et skjema der folk kan registrere seg for å få et e-postvarsel når sidene er oppe igjen.

Hva ville dere ha gjort i en slik situasjon? Hadde jeg hatt budsjett til å leie inn en ekstra programmerer for å få fortgang hadde jeg vurdert det som et alternativ 4, men det har jeg ikke økonomi til for øyeblikket. Men kanskje er det andre muligheter jeg har oversett?
 

Tonny Kluften

Administrator
Nr.2, men lagt ut en melding om at siden kan oppleves som trege til tider. SEO-messig ville jeg ha holdt alt av innhold tilgjengelig selv om det er tregt.

Vet du hva du skal gjøre for å optimalisere? Er det spørringer til databasen som går tregt? Bruker du en skikkelig cache?

Ang. nr. 1. Du må sikkert oppgradere med veldig mye minne for at det skal bli bedre.
 

Nutz

Med lem
Få ut info til brukere er første pri.

Finne ut hva som virkelig gjør at det kneler, og stjeler resurser begynn med verstingene.
Hvilke funksjoner kalles oftest, se om disse kan optimeres.
Vurder å fjerne funksjonalitet som koster for mye.
 
Nr.2, men lagt ut en melding om at siden kan oppleves som trege til tider. SEO-messig ville jeg ha holdt alt av innhold tilgjengelig selv om det er tregt.
Hm, ja, sikkert det beste (SEO hadde jeg jo ikke tenkt på en gang ...).

Vet du hva du skal gjøre for å optimalisere? Er det spørringer til databasen som går tregt? Bruker du en skikkelig cache?
Det er egentlig snakk om gjennomgående dårlig koding, så å bare skrive koden på nytt vil nok hjelpe stort. Cache vet jeg ingenting om (tar gjerne imot flere hint om akkurat det), men det er snakk om problemer som at jeg konsekvent har brukt SELECT * i databasesammenheng i stedet for å avgrense på kolonner, jeg har brukt MySQL veldig dårlig i den forstand at jeg ofte henter opp veldig mange flere treff enn jeg trenger og deretter bruker PHP-funksjoner for å avgrense (mye av koden er fem år gammel, og den gangen kunne jeg svært lite MySQL), noen funksjoner kjører jeg svært mange ganger i stedet for å mellomlagre verdier ... Det er generelt snakk om at jeg har gjort veldig mange ting på feil måte. Så det optimaliseringssteget jeg tar akkurat nå er at jeg lager hele siden på nytt med den ekstra kunnskapen jeg har opparbeidet meg på fem år.

Ang. nr. 1. Du må sikkert oppgradere med veldig mye minne for at det skal bli bedre.
Ja, isåfall dobler jeg fra 512 til 1024, og det burde vel hjelpe litt?

Få ut info til brukere er første pri.
Absolutt.

Finne ut hva som virkelig gjør at det kneler, og stjeler resurser begynn med verstingene.
Hvilke funksjoner kalles oftest, se om disse kan optimeres.
Vurder å fjerne funksjonalitet som koster for mye.
Sikkert et svært dumt spørsmål, men hvordan kan jeg finne ut hva det er som tar mest ressurser? Er dette synonymt med det som i Webalizer heter «Top 10 of X Total URLs By KBytes», eller må jeg se et annet sted etter dette?
 

Pong

Jeg selger sʇɥƃıluʍop :)
mysql har en "explain" funksjon som du kunne sett litt på.
Men du kan se litt på caching.

Har du ikke penger så bør du ha tid. Bruk det på å ordne forsiden i det minste, så kan du se hvor det gjør "mest" vondt (= hvor bruker folk mesteparten av tiden). Det har du vel i ga?
 

nag

Medlem
Siden du har en VPS har du MySQL installert på samme VPS? I såfall burde du ha mulighetene for å finne ut om det er på databasesiden det flasker seg.

MySQL har en slow query log (som kan aktiveres) her vil du få ut evt problemspørringer som kan optimaliseres, evt legge på indekser osv for å få speedet det opp. Vanskelig å komme med så veldig mye konkret, men det kan være greit å finne ut om det er databasen "eller andre steder" flaskehalsen er.

MySQL :: MySQL 5.0 Reference Manual :: 5.2.4 The Slow Query Log
 

Nutz

Med lem
Dra ned en komplett kopi av siden din lokalt og kjør test der.
Dette for å ikke få falske data, da en overbelastet server kan gi feil og ukonsise data på "uskyldige" og greie blokker ettersom hvor mye belastning det er på server ellers.

Med jevne mellomrom i koden registrer start og stopp-tid, eller bare regn ut forbruket av tid mellom start og stopp. Kjør resultatene ut til fil for nærmere sjekk.

Ikke sikkert du trenger å registrere antall treff per funksjon eller "programblokk" dersom du kjører en ganske rett frem ovenfra og rett ned-kode.

Vær obs og kritisk på alle uttrykk du har inne i looper av alle slag.

Mener det ligger ute enkle benchmark-klasser slik at du slipper å lage dette selv.
 

nag

Medlem
Ett annet triks, jeg vil anta at datamengden i databasen øker jevnt og trutt. Og det kan da tenkes at den på ett eller annet tidspunkt blir så stor at den ikke får plass i minne / buffere blir for små etc. Når det skjer vil mange av operasjonene kreve mye mer jobbing mot disk som går mye saktere enn om den får lastet opp alt i minnet på serveren. Sjekk parametersettingen, en standardinstallasjon som er tenkt brukt som "utviklermaskin" har alt for lave verdier på mange av bufferene.

Mer om buffere:
MySQL :: MySQL 5.5 Reference Manual :: 7.11.4.1 How MySQL Uses Memory
MySQL :: MySQL 5.5 Reference Manual :: 7.11.2 Tuning Server Parameters

"When tuning a MySQL server, the two most important variables to configure are key_buffer_size and table_open_cache. You should first feel confident that you have these set appropriately before trying to change any other variables."

Kjør CHECK TABLE, OPTIMIZE TABLE, spesielt hvis det ikke er gjort på lenge eller det er slettet mye data. Det vil frigjøre ubrukt plass i datafila og defragmentere denne, noe som kan være bra.

Mer her:
MySQL :: MySQL 5.1 Reference Manual :: 12.4.2.5 OPTIMIZE TABLE Syntax

Hvilke lagringsmotor bruker du? MyISAM eller InnoDB? Husk at ved skriving til MyISAM(update + insert) så settes det writelock på hele tabellen. InnoDB har låsing på radnivå, så her kan flere updates kjøre samtidig.

Indekser er ett must når datavolumene øker. Forskjellen på en spørring som kan bruke indeks versus ett fult tabellskan er så stor at man nesten ikke kan tro det...
 

Nutz

Med lem
Dessuten synes jeg du seriøst bør søke støtte, eller kontakte noen hos Norsk kulturråd.
Vil tro at den siden på en eller annen måte er støtteberettiget dersom de ser hva du oppfordrer og oppmuntrer folk til der inne. Stort tap for mange dersom dette skulle gå i dass på grunn av for lite midler.
 

Bjørnar

Gründer
twitter kjører jo den hvalen hver gang siden er under press, kan det være en løsning å få til? altså en varsel om at siden er under heavy load, prøv igjen om få strakser?
 
Topp