Eigener Tile Server ist sehr langsam

Hallo zusammen,

ich habe entsprechend der Anleitung einen OSM Tile server auf der Basis debian Squeeze aufgebaut. Ich habe die Anleitungen aus dem Wiki benutzt, und das funktionierte alles ohne Probleme.

Ich verwende tirex, mapnik, mod_tile und apache2.

Nach den Sommerferien habe ich bemerkt, dass der Server die Tiles sehr langsam liefert und bei einem Reload der SlippyMap im Browser die Tiles jedesmal neu rendert.
In den apche logs fand ich dann folgendes:

[Sat Sep 29 20:19:52 2012] [debug] ./mod_tile.c(197): [client 88.111.8.222] request_tile: Request xml(osm) z(7) x(71) y(43) could not be rendered in 3 seconds, referer: http://example.de/myTiles/
[Sat Sep 29 20:19:52 2012] [debug] ./mod_tile.c(864): [client 88.111.8.222] tile_handler_serve: xml(osm) z(7) x(71) y(43), referer: http://example.de/myTiles/
[Sat Sep 29 20:19:52 2012] [debug] ./mod_tile.c(281): [client 88.111.8.222] tile_state_once: File /var/lib/mod_tile/osm/7/0/0/0/66/8.meta is old, referer: http://example.de/myTiles/
[Sat Sep 29 20:19:52 2012] [debug] ./mod_tile.c(325): [client 88.111.8.222] expires(tile_serve), uri(/tiles/osm/7/71/43.png), filename(/var/lib/mod_tile/osm/7/0/0/0/66/8.meta), path_info((null))\n, referer: http://example.de/myTiles/
[Sat Sep 29 20:19:52 2012] [debug] ./mod_tile.c(374): [client 88.111.8.222] Setting tiles maxAge to 1319\n, referer: http://example.de/myTiles/

Ich habe mir dann die Datei /var/lib/mod_tile/osm/7/0/0/0/66/8.meta angesehen und festgestellt, dass diese einen Zeitstempel vom 4.7.2012 hat. Ich habe den Server am 6.5.2012 installiert. Er scheint also bis zum Juli funktioniert zu haben.

Weiß zufällig jemand, wie ich die alte performance wieder herstellen kann ?

Werden auf dem Server diff imports eingespielt? Wenn ja, welche Methode wird verwendet um die Tiles zu expiren? Ist eine planet-import-complete Datei vorhanden? Was sagt der Tirex log? Werden die tiles korrekt gerendert oder schlaegt das rendering mit einem Timeout fehl?

Hallo,

ja auf dem Server werden Imports eingespielt. Ich verwende das Verfahren, dass hier: http://wiki.openstreetmap.org/wiki/DE:HowTo_minutely_hstore dokumentiert wurde. Das expire.rb erzeugt bei mir leider keine Logeinträge in der run.log ist aber nichts auffälliges zu sehen.

Eine planet-import-complete Datei hatte ich nicht, ich habe jetzt eine leere Datei mit diesem Namen unter: /var/lib/mod_tile angelegt.

Die Tirex lopgs sind auch sehr seltsam. Seit dem 7.7. gibt es keine Logs mehr. Das Log vom 7.7 ist jedoch leer.
Wenn ich tirex-status auf rufe finde ich:

 Statistics:
  count_error=0
  count_expired=0
  count_requested=39
  count_timeouted=38

bedeutet das, dass keines der Tiles gerendert werden konnte ?

Im Browser werden alle Tiles korrekt dargestellt. Erst ab einer sehr hohen Zoomstufe schlägt das rendern fehl.

Was mach ich falsch ?

Die planet-import-complete datei wird als Referenz verwendet um zu entscheiden welche tiles veraltet sind und somit neu gerendert werden muessen. Alle tiles die einen Zeitstemple aelter als die planet-import-complete Datei haben, gelten als veraltet und werden neu gerendert. Mod_tile wartet (einstellbar) 3 Sekunden auf das rendering und gibt dann eine alte Tile zurueck. Wenn die tiles also immer als veraltet gelten, laden die Tiles sehr langsam. Wenn keine planet-import-complete Datei vorhanden ist, gelten alle Tiles aelter als 3 Tage als veraltet. Somit werden viel zu viele Tiles zum rendering geschickt.

Die Tirex statistics besagen das von 39 versuchten tiles 38 nicht gerendert wurden da sie zu lange gebraucht habe. Da die tiles nicht erfolgreich gerendert wurden, gelten sie weiterhin als veraltet und werden wieder an den renderer zum renderen gegeben. Damit koennen diese Tiles den renderer “verstopfen” womit auch andere Tiles nicht mehr richtig gerendert werden. Ich wuerde in dem Fall empfehlen den timeout in der tirex.conf Datei deutlich zu erhoehen. Der timeout ist standardmaessig glaube ich bei 10 minuten, ich habe ihn bei 60 minuten eingestellt. Es sind hauptsaechlich die low-zoom tiles die solange benoetigen. Im default style sind insbesondere zoom Stufen Z7 - Z9 problematisch. Hoehere Zoomstufen werden deutlich schneller gerendert. Da diese sich aber nur sehr selten visuell aendern und demzufolge normalerweise nicht automatisch :expired" werden, werden diese tiles nur sehr selten gerendert so das deren lange rendering Zeit normalerweise absolut gesehen wenig ins Gewicht faellt.

Was am 7.7 geschehen ist kann ich nicht sagen, aber startet Tirex denn korrekt?

Hi,

tirex startet ohne Fehler. Was ich nicht verstehe ist, das obwohl tiles korrekt gerendert worden sind und kein timeout gemeldet wurden, liefert mir ein Aufruf von find . -mtime -10 im Ordner /var/lib/mod_tile/osm keine Treffer. Die Timestamps der neu gerenderten Tiles müssten doch eine mtime habe die jünger als 10 Tage ist oder ?

Ich habe den timeout auf 60 Minuten erhöht. Muss ich nach dem diff import das rendern explizit starten oder wird das automatisch getriggert ?

Das ist alles noch ziemlich verwirrend :frowning:

Ciao
Bama

Ein diff import triggert normalerweise kein automatisches neu rendern. Die ueblichen expiry scripts setzen lediglich den Zeitstempel der geaenderten Tiles auf das Jahr 1999 zurueck. Damit erscheinen sie automatisch aelter als die planet-import-complete datei und werden von mod_tile als veraltet gewertet. Das neu-rendering einer veralteten Kachel wird erst beim naechsten Aufruf dieser Kacheln in mod_tile an tirex zum rendering uebergeben. Dies wird gemacht da die wenigsten Tileserver die Kapazitaet haben alle geaenderten Tiles jedes mal zu renderen. Ausserdem aendern sich Kacheln moeglicherweise mehrmals bevor sie wieder betrachtet werden. Insofern werden nur betrachtete Kacheln neu gerendert.

Mit render_old (bzw tirex-batch?) kann man jedoch auch veraltete Kacheln systematisch im Hintergrund neu renderen.

So wie es klingt funktioniert aber tirex ueberhaupt nicht mehr. Waere es moeglich komplette (debug) log files von Tirex und mod_tile zu posten um genauer zu sehen was klappt und was nicht?

Am besten Tirex neu starten dann apache / mod_tile neu starten. Anschliessend ein paar tiles betrachten und dann die log files von tirex und mod_tile fuer diese Session per pastbin (oder aehnliches) hier posten.

Hi,

vielen Dank, deine Tipps haben super geholfen !

ich habe deine Hilfestellungen befolgt und bin dabei auf diese Meldungen gestossen:

tirex-backend-mapnik[29516]: cannot add /etc/tirex/renderer/mapnik/osm.conf
tirex-backend-mapnik[29516]: Could not create datasource. No plugin found for type 'shape' (encountered during parsing of layer 'world')
tirex-backend-mapnik[29516]: using existing socket 5
tirex-backend-mapnik[29515]: cannot add /etc/tirex/renderer/mapnik/osm.conf
tirex-backend-mapnik[29515]: Could not create datasource. No plugin found for type 'shape' (encountered during parsing of layer 'world')
tirex-backend-mapnik[29515]: using existing socket 5
tirex-backend-mapnik[29517]: cannot add /etc/tirex/renderer/mapnik/osm.conf
tirex-backend-mapnik[29517]: Could not create datasource. No plugin found for type 'shape' (encountered during parsing of layer 'world')
tirex-backend-mapnik[29517]: using existing socket 5

Also ist mapnik der Überltäter. Nach einer kurzen google Recherche habe ich in der Datei /etc/tirex/renderer/mapnik.conf einen verwaisten Pfad für die inputs gefunden.
Damit klärt sich auch, was am 7.7. geschehen ist. Ich hatte von einem vorkompilierten Mapnik auf die in Debian enthaltene Version umgestellt. Allerdings verwendet
die in Squeeze verfügbare Version einen anderen Pfad für die inputs.

Nach dem ich den Pfad angespasst hatte und tirex neu gestartet habe läuft alles wieder super schnell !

Vielen Dank nochmal !!!

Ciao
Bama