Skip to content

Strange memory issue raster tile rendering #1565

@MichielMortier

Description

@MichielMortier

Memory leak when serving raster tiles

Description

When using tileserver-gl (v5.3.1) for serving raster tiles, there appears to be a memory leak. The server's memory usage steadily increases when loading raster tiles, unlike with vector tiles where memory usage remains stable.

Observed Behavior

  1. When using vector tiles, memory usage is stable regardless of the number of requests
  2. When switching to raster tiles (by changing vector to raster in the URL), memory usage spikes with each new request
  3. Memory increases when viewing different areas/zoom levels that require loading new tiles
  4. Memory appears to stabilize after most tiles have been loaded, but is never released
  5. When requesting tiles from a new data source, memory usage spikes again

Evidence

Memory usage graph

Environment

  • tileserver-gl version: v5.3.1
  • Running in Docker: maptiler/tileserver-gl:v5.3.1
  • Command used: docker run --rm -it -v "$SCRIPT_DIR/tileserver-gl:/data" -p 8080:8080 maptiler/tileserver-gl:v5.3.1

Configuration

tileserver-gl config.json:

{
  "options": {
    "paths": {
      "fonts": "fonts",
      "styles": "styles"
    }
  },
  "styles": {
    "tiles-4": {
      "style": "tiles-4/style.json"
    },
    "tiles-5": {
      "style": "tiles-5/style.json"
    }
  },
  "data": {
  }
}

Example style.json:

{
  "version": 8,
  "name": "Style",
  "sources": {
    "tiles": {
      "type": "vector",
      "tiles": ["https://XXX/{z}/{x}/{y}.pbf"],
      "maxzoom": 14,
      "minzoom": 5
    }
  },
  "sprite": "https://XXX/sprites/osm-bright/icons",
  "glyphs": "https://XXX/fonts/{fontstack}/{range}.pbf",
  "layers": [
    {
      "id": "roads-casing",
      "type": "line",
      "source": "tiles",
      "source-layer": "default",
      "filter": [
        "all", 
        ["has", "testValue"]
      ],
      "layout": {
        "line-cap": "round",
        "line-join": "round",
        "visibility": "visible"
      },
      "paint": {
        "line-color": "#000000",
        "line-width": [
          "interpolate", ["linear"], ["zoom"],
          5, 4,
          8, 5,
          11, 5.5,
          14, 6,
          18, 7
        ],
        "line-opacity": 1
      }
    },
    {
      "id": "roads-fill",
      "type": "line",
      "source": "tiles",
      "source-layer": "default",
      "filter": [
        "all", 
        ["has", "testValue"]
      ],
      "layout": {
        "line-cap": "round",
        "line-join": "round",
        "visibility": "visible"
      },
      "paint": {
        "line-color": [
          "step",
          ["get", "testValue"],
          "#660000", 0,
          "#FF7700", 50,
          "#FFFF00", 75,
          "#00FF00", 100,
          "#0099FF", 150,
          "#00FF00"
        ],
        "line-width": [
          "interpolate", ["linear"], ["zoom"],
          5, 2,
          8, 3,
          11, 3.5,
          14, 4,
          18, 5
        ],
        "line-opacity": 1
      }
    }
  ]
}

Steps to Reproduce

  1. Set up tileserver-gl with the above configuration
  2. Load vector tiles for a while - observe stable memory usage
  3. Switch to raster tiles (changing vector to raster in the URL)
  4. Pan/zoom around the map to load different tiles - observe memory increasing
  5. Switch to a different style/data source - observe another memory spike

Expected Behavior

Memory usage should remain stable for raster tiles just as it does for vector tiles, or the memory should be released after tiles are no longer needed.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions