Wie muss ein Tileserver Dimensioniert sein

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 ?

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

Vielleicht helfen dir auch die Links noch:
http://wiki.openstreetmap.org/wiki/Osm2pgsql/benchmarks
https://help.openstreetmap.org/questions/11949/server-spec-for-running-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.

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 ?

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_Your_PostgreSQL_Server und http://www.postgresql.org/docs/current/static/kernel-resources.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.

Die DB geht knapp auf eine 240GB SSD drauf, siehe http://wiki.openstreetmap.org/wiki/Osm2pgsql/benchmarks#No_hstore.2C_persistent_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

Hi!

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?

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.

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.

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. :slight_smile:

bye, Nop

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 ?