Hi all,
we're running a switch2osm-package Ubuntu serving tiles. The PostGIS is located
on another machine and communicates with the tile server via TCP.
For a couple of months now we've been running against a Sweden-only database
without any problems. When now installed planet on a new PostGIS-VM and get
these sort of errors when requesting tiles in densely mapped areas on zoom
levels that are less than 15 or so:
Feb 16 21:11:51 modtile2 renderd[1353]: reason: Postgis Plugin: out of
memory for query result#012#012in executeQuery Full sql was: 'SELECT
ST_AsBinary("way") AS geom,"feature" FROM (select way, religion,#012coalesce
(aeroway, amenity, landuse, leisure, military, "natural", power, tourism,
highway) as feature from (#012select way,#012('aeroway_' || (case when aeroway
in ('apron', 'aerodrome') then aeroway else null end)) as
aeroway,#012('amenity_' || (case when amenity in ('parking', 'university',
'college', 'school', 'hospital', 'kindergarten', 'grave_yard') then amenity
else null end)) as amenity,#012('landuse_' || (case when landuse in ('quarry',
'vineyard', 'orchard', 'cemetery', 'grave_yard', 'residential', 'garages',
'field', 'meadow', 'grass', 'allotments', 'forest', 'farmyard', 'farm',
'farmland', 'recreation_ground', 'conservation', 'village_green', 'retail',
'industrial', 'railway', 'commercial', 'brownfield', 'landfill', 'greenfield',
'construction') then landuse else n
ull end)) as landuse,#012('leisure_' || (case when leisure in
('swimming_pool', 'playground', 'park', 'recreation_ground', 'common',
'garden', 'golf_course', 'picnic_table') then leisure else null end)) as
leisure,#012('military_' || (case when military in ('barracks', 'danger_area')
then military else null end)) as military,#012('natural_' || (case when
"natural" in
('field','beach','desert','heath','mud','grassland','wood','sand','scrub') then
"natural" else null end)) as "natural",#012('power_' || (case when power in
('station','sub_station','generator') then power else null end)) as
power,#012('tourism_' || (case when tourism in ('attraction', 'camp_site',
'caravan_site', 'picnic_site', 'zoo') then tourism else null end)) as
tourism,#012('highway_' || (case when highway in ('services', 'rest_area') then
highway else null end)) as highway,#012case when religion in
('christian','jewish') then religion else 'INT-generic'::text end as
religion#012 from planet_osm_polygon#012
where landuse is not null#012 or leisure
My question is, what process is it that runs out of memory? PostgreSQL? Mapnik?
Renderd? My guess is that PostgreSQL manage just fine, passes down a result set
with a couple of hundred MB data to Renderd which is not able to allocate this
amount of data. Or perhaps it's Mapnik that can't handle the data passed down
from Renderd.
The PostgreSQL VM has some 16GB of RAM and plenty of shared- and work memory
for the processes, the tile rendering VM has 8GB RAM.
Most of the time this error get caught and ignored by Renderd, but every fifth
time or so it causes Renderd to simply die on us.
After upping shmax to 1GB it works a bit better. After upping it to 4GB we see
these in the renderd log:
Feb 16 22:01:16 modtile2 renderd[3065]: DEBUG: Connection 0, fd 12 closed, now
9 left
Feb 16 22:01:38 modtile2 renderd[3065]: ERROR: failed to render TILE osm_planet
13 4208-4215 2688-2695
Feb 16 22:01:38 modtile2 renderd[3065]: reason: std::bad_alloc
Feb 16 22:01:38 modtile2 renderd[3065]: DEBUG: DONE TILE osm_planet 13
4208-4215 2688-2695 in 22.315 seconds
What's up here?
Could it simply be that we really really should be running the PostgreSQL on
the same machine as the tile renderer? If so, what is the reason?
karl
_______________________________________________
dev mailing list
[email protected]
https://lists.openstreetmap.org/listinfo/dev