x

Wie muss ein Tileserver Dimensioniert sein


  1. Wie muss ein Tileserver Dimensioniert sein · tfrank (Gast) · 03.04.2013 15:39 · [flux]

    Ich versuche seit einigen Wochen einen Teileserver zu betreiben.
    Habe mit Virtual Box angefangen und musste schnell feststellen dass da mehr Leistung her muss.

    Inzwischen habe ich das ganze auf einen Rootserver bei HostEurope unter Ubuntu Laufen:

    8Vcores, 48GB RAM, Raid5 1000 GB

    Je größer das Hostingpaket desto schneller geht das einlesen der Files.

    ABER beim Aufruf dauert es immer ziemleich lange bis die Kacheln geleifert werden (Timeout greift)

    Später werden ca 20-30 User darauf zugreifen
    World würde ich einlesen, 95% aller user würden mit D, AT, CH auskommen.
    wie bekommt man das ganze performanter hin ? kann man beim Rendern was optimieren ?


    • Re: Wie muss ein Tileserver Dimensioniert sein · Nop (Gast) · 03.04.2013 15:59 · [flux]

      Hi!

      Dein Server ist mehr als ausreichend dimensioniert. Eine dicke Maschine macht aber noch keinen schnellen Tileserver.

      Welche Renderrules und welche Renderchain benutzt du? Wie lange ist Dein Timeout und in welchen Zoomleveln tritt er auf?

      Was Du tun kannst:
      - Fehlersuche: Wenn immer Timeout kommt ist meist der Renderer abgeraucht
      - DB-Parameter optimieren. Du hast sehr viel Haupspeicher. Wird der von der DB voll genutzt?
      - DB auf SSD laufen lassen, brachte bei mir Bescheunigung um Faktor 5.
      - Renderregeln optimieren, dann DB-Optimierung dafür. Mit den default OSM-Mapnikrules werden keine Indices genutzt und Renderzeiten > 20 Minuten für schwierige Zoomlevels sind normal.

      bye, Nop


    • Re: Wie muss ein Tileserver Dimensioniert sein · !i! (Gast) · 03.04.2013 16:13 · [flux]

      Vielleicht helfen dir auch die Links noch:
      http://wiki.openstreetmap.org/wiki/Osm2pgsql/benchmarks
      https://help.openstreetmap.org/question … unning-osm
      Der Frederik Ramm hatte bei der FOSSGIS mal einen Vortrag, bei dem er untersucht hatte, welche Parameter/Hardware sich wie auf die Performance auswirken.


    • Re: Wie muss ein Tileserver Dimensioniert sein · tfrank (Gast) · 04.04.2013 08:39 · [flux]

      Nop wrote:

      Hi!

      Dein Server ist mehr als ausreichend dimensioniert. Eine dicke Maschine macht aber noch keinen schnellen Tileserver.

      Welche Renderrules und welche Renderchain benutzt du? Wie lange ist Dein Timeout und in welchen Zoomleveln tritt er auf?

      Was Du tun kannst:
      - Fehlersuche: Wenn immer Timeout kommt ist meist der Renderer abgeraucht
      - DB-Parameter optimieren. Du hast sehr viel Haupspeicher. Wird der von der DB voll genutzt?
      - DB auf SSD laufen lassen, brachte bei mir Bescheunigung um Faktor 5.
      - Renderregeln optimieren, dann DB-Optimierung dafür. Mit den default OSM-Mapnikrules werden keine Indices genutzt und Renderzeiten > 20 Minuten für schwierige Zoomlevels sind normal.

      bye, Nop

      Hallo Danke für die Infos - anbei noch ein paar Fragen:

      - Timout renderer abgeraucht eher nein nach 2-3 Zooms kommen die Tiles

      Ich benutze das package von Kai Krüger: DB Einstellungen lt. Switch to OSM was wäre besser ?

      shared_buffers = 128MB
      checkpoint_segments = 20
      maintenance_work_mem = 256MB
      autovacuum = off

      in den Benchmarks ist da viel mehr eingestellt wenn ich das mache startet SQL aber nicht mehr oder muss man am Kernel dann was ändern
      Momentan: kernel.shmmax=268435456

      Wie groß müsste die SSD sein und gibt es Hoster die mir SSD bieten HostEurope habe ich nichts gefunden , Strato auch nicht, Hetzner nur relativ kleine da würde ich ja die DB nicht komplett draufbekommen.

      Gibt es konkretere Infos wie ich die Renderregeln optimieren kann ? Kann man z.B Deutschland vorrendern ?


    • Re: Wie muss ein Tileserver Dimensioniert sein · wambacher (Gast) · 04.04.2013 09:09 · [flux]

      tfrank wrote:

      Ich benutze das package von Kai Krüger: DB Einstellungen lt. Switch to OSM was wäre besser ?

      shared_buffers = 128MB
      checkpoint_segments = 20
      maintenance_work_mem = 256MB
      autovacuum = off

      in den Benchmarks ist da viel mehr eingestellt wenn ich das mache startet SQL aber nicht mehr oder muss man am Kernel dann was ändern
      Momentan: kernel.shmmax=268435456

      Oh Mann, das sind Werte, die für einen Laptop mit 512 MB passen aber doch nicht für deine Kiste!

      - setze den kernel.shmmax erheblich höher und starte postgresql neu

      Anleitung: http://wiki.postgresql.org/wiki/Tuning_ … SQL_Server und http://www.postgresql.org/docs/current/ … urces.html (*)

      hier einige meiner Parameter: (8-Core, 32 Gb Mem, 6 Tb Disk)

      root@wno-server:~#␣cat␣/proc/sys/kernel/shmmax;␣cat␣/proc/sys/kernel/shmall
      17179869184
      4194304
      root@wno-server:~#
      
      postgresql.conf:
      
      #␣RESOURCE␣USAGE␣(except␣WAL)
      #------------------------------------------------------------------------------
      
      #␣-␣Memory␣-
      
      shared_buffers␣=␣4096MB			#␣was␣24MB
      #␣(change␣requires␣restart)
      temp_buffers␣=␣8MB			#␣min␣800kB
      #max_prepared_transactions␣=␣0		#␣zero␣disables␣the␣feature
      #␣(change␣requires␣restart)
      #␣Note:␣␣Increasing␣max_prepared_transactions␣costs␣~600␣bytes␣of␣shared␣memory
      #␣per␣transaction␣slot,␣plus␣lock␣space␣(see␣max_locks_per_transaction).
      #␣It␣is␣not␣advisable␣to␣set␣max_prepared_transactions␣nonzero␣unless␣you
      #␣actively␣intend␣to␣use␣prepared␣transactions.
      work_mem␣=␣2MB				#␣min␣64kB
      maintenance_work_mem␣=␣64MB		#␣min␣1MB
      max_stack_depth␣=␣2MB			#␣min␣100kB
      

      weiterhin unbedingt autovacuum anschalten:

      track_counts␣=␣on
      
      #------------------------------------------------------------------------------
      #␣AUTOVACUUM␣PARAMETERS
      #------------------------------------------------------------------------------
      
      autovacuum␣=␣on␣			#␣Enable␣autovacuum␣subprocess?␣␣'on'
      #␣requires␣track_counts␣to␣also␣be␣on.
      autovacuum_max_workers␣=␣4		#␣max␣number␣of␣autovacuum␣subprocesses
      

      gibt bestimmt noch einige andere Parameter, aber das sind die wichtigsten.

      Gruss
      walter

      • ) Bei solchen Fragen beachte ich immer die Primärliteratur des Herstellers und nicht irgend welche "obskuren" Wikis.

    • Re: Wie muss ein Tileserver Dimensioniert sein · SimonPoole (Gast) · 04.04.2013 09:16 · [flux]

      tfrank wrote:

      ....
      Wie groß müsste die SSD sein und gibt es Hoster die mir SSD bieten HostEurope habe ich nichts gefunden , Strato auch nicht, Hetzner nur relativ kleine da würde ich ja die DB nicht komplett draufbekommen.

      Die DB geht knapp auf eine 240GB SSD drauf, siehe http://wiki.openstreetmap.org/wiki/Osm2 … node_cache (den node cache muss man aber wo anders hin tun).

      Je nach deiner Anwendung brauchst du ev allerdings ev. zusätzliche Indices die dann halt wo anders plazierst. Generell würde ich bis mindestens zoom 12 wenn nicht mehr vorrendern.

      Simon


    • Re: Wie muss ein Tileserver Dimensioniert sein · Nop (Gast) · 04.04.2013 09:24 · [flux]

      Hi!

      tfrank wrote:

      - Timout renderer abgeraucht eher nein nach 2-3 Zooms kommen die Tiles

      Das klingt so als ob Du mit Timeout den für das Ausliefern der Tiles meinst. Es gibt auch noch einen für das Rendern von Tiles selbst, wenn der überschritten wird sind hinterher keine Tiles da.
      Wieviele Sekunden meinst Du konkret? Welche Zoomlevel?

      tfrank wrote:

      Ich benutze das package von Kai Krüger: DB Einstellungen lt. Switch to OSM was wäre besser ?

      shared_buffers = 128MB
      checkpoint_segments = 20
      maintenance_work_mem = 256MB
      autovacuum = off

      in den Benchmarks ist da viel mehr eingestellt wenn ich das mache startet SQL aber nicht mehr oder muss man am Kernel dann was ändern
      Momentan: kernel.shmmax=268435456

      Ich kenne das package nicht, mußtest schon konkrete Ausagen machen.

      Du mußt die Settings und den kernel auf jeden Fall aufbohren, momentan nutzt die DB Deine 48GB praktisch überhaupt nicht. SChau mal mit htop nach, wieviel bzw. wie wenig die DB verwendet.

      tfrank wrote:

      Wie groß müsste die SSD sein und gibt es Hoster die mir SSD bieten HostEurope habe ich nichts gefunden , Strato auch nicht, Hetzner nur relativ kleine da würde ich ja die DB nicht komplett draufbekommen.

      Ich hab bei Hetzner 2x256GB SSD als eine virtuelle Platte laufen. Während des Imports für 3/4 Europa ist die SSD allerdings schon zu 80% voll, für eine World-DB bräuchtest Du noch was größeres.

      tfrank wrote:

      Gibt es konkretere Infos wie ich die Renderregeln optimieren kann ? Kann man z.B Deutschland vorrendern ?

      Das ist eine Wissenschaft für sich. Kurz gesagt sind die Filter in den normalen OSM Rules so unterschiedlich und komplex daß die DB so ziemlich alle Objekte in der Bounding Box liefert bzw. ohne Index über alle diese Objekte sequentiell drübergehen muß. Oft wird viel zu viel geholt und erst in Mapnik alles was nicht auf die Regeln paßt weggeworfen. Das heißt es wird erst mal ne Million Objekte im Zielbereich untersucht, um dann 100 davon zu rendern. Und das für jede Kartenebene nochmal von vorn. Das ist sehr komfortabel beim Erstellen von Regeln aber extrem ineffizient beim Rendern.

      Um es schneller zu bekommen muß man zusätzliche Kriterien oder Gruppierungen finden/schaffen und in der Datenbank einen Index anlegen, der für die Auswahl nach Geoposition und diesem Kritierum geeignet ist. Dann die DB die benötigten Daten direkt ermitteln und es läuft wesentlich schneller, je nachdem wie schlecht die Auswahl vorher war kann das Faktor 100 oder 1000 bringen. Als Anregung kannst Du den oben angeführten Artikel von Frederik mal durchlesen.

      Ich gehe bei meinem eigenen Server noch viel weiter: Meine Renderregeln basieren überhaupt nicht auf den OSM-Stilen sondern sind komplett neu geschrieben. Nachdem ich weiß, daß sich meine Renderegeln nicht ändern, werden in einem Vorverarbeitungsschritt bereits beim Import jedes Objekt mit der Information versehen, in welche Renderebene der Karte es gehört. Die Ebenen sind so aufgeteilt, daß sie soweit möglich ähnliche Objekte und Zoomlevel enthalten. Die Datenbank hat für jede Kartenebene einen eigenen Subindex. Dadurch kann die DB alle erfordlichen Daten für die Ebene blitzschnell ermitteln und Mapnik bekommt wesentlich weniger Daten die dann auch größtenteils tatsächlich gerendert werden. Für so eine Aktion sollte man sich aber ein paar Monate Zeit nehmen. :-)

      bye, Nop


    • Re: Wie muss ein Tileserver Dimensioniert sein · tfrank (Gast) · 10.04.2013 11:07 · [flux]

      SimonPoole wrote:

      tfrank wrote:

      ....
      Wie groß müsste die SSD sein und gibt es Hoster die mir SSD bieten HostEurope habe ich nichts gefunden , Strato auch nicht, Hetzner nur relativ kleine da würde ich ja die DB nicht komplett draufbekommen.

      Die DB geht knapp auf eine 240GB SSD drauf, siehe http://wiki.openstreetmap.org/wiki/Osm2 … node_cache (den node cache muss man aber wo anders hin tun).

      Je nach deiner Anwendung brauchst du ev allerdings ev. zusätzliche Indices die dann halt wo anders plazierst. Generell würde ich bis mindestens zoom 12 wenn nicht mehr vorrendern.

      Simon

      Hallo Inzwischen habe ich an der DB optimiert und auch mehr speicher gegeben. Allerdings ist noch wenig gerendert. Da später ja nur 20 User auf das Teil zugreifen würde ich ja immer in das Problem laufen dass alles on the Fly erst ereugt wird, die Tiles Expired sind und bein nä. Aufruf wieder neu gebaut werden.

      Gibt es Infos wie man das mit dem Vorrendern korrekt einstellt - render_list wie müsste man das benutzen um D bis Zoomm 12 zu rendern ?