Recommendation for my use case?

Dear ORS community,

I’m having trouble finding a suiteable way of using ORS for my use case. I “just” want to use it to compute car distances (and optionally durations) within Europe, perhaps the entire world. Now I’ve heard that I can run the entire world with just 8 GiB of RAM - but that building the graph takes days and hundreds of GiB of RAM - which I obviously don’t have. I plan to use this server quite agressively e.g. regular 1000 by 1000 matrix queries and alike, so the official instance is not an option. Eventually it will be part of a common-good website service which I hope to be able to run on a cheap and “weak” 8-16 GB RAM VPS server since we can’t afford several hundred euros per year. But obviously, this machine can’t do the build process.

The biggest machines for building I have available is my 6 core laptop with 64GB of RAM and my i7-13700F (8 P, 8 E cores) with 32 GB of RAM. But it seems like my laptop can’t even build europe-latest.pbf (28.4 GB from Geofabrik).

I heard of a new “low RAM mode” and “Cloud native images”. Are docker images available which already have driving-car for Europe built?

What would you do in my case?

Best regards,
Tobi :slight_smile:

Hi @tobs40 ,

since version 8 ORS supports memory-mapping, so you can build and run graphs with much less memory than before (however at the cost of speed). Even without memory mapping I would assume 64GB of memory to be enough for building Europe as we build the planet with about 120GB.

If you run out of memory, you should first check which kind of memory is affected such as system-memory, Java-heap or docker-container’s memory. E.g., if you assign too much memory to the Java-heap, this may eat up your systems-memory, even if ORS could run with less heap space.

In addition, you can reduce memory consumption by disabling unused profiles, unused algorithms and elevation. E.g., ALT and fast isochrones can take up quite some space.

Hope that helps.

Best regards

Hi,

I changed enable: true to false whereever it seemed sensible, including isochrones and set Xms and Xmx for Java to 57g (I have 64g of RAM, using Linux Mint Cinnamon).

Does elevation influence car distances? Does it influence car durations? If yes, by how much?

And how much of a slow down can I expect with the MMAP feature? Could there be less of a difference on a VPS since disk and RAM are virtualized?

Best regards
Tobi

Could you provide the most ram-friendly car distance (don’t care about duration) configuration possible which does not throw some error? (I tried)

In order to use matrix you need to enable the car profile and configure it to use the CH preparation with your desired weighting shortest. (see ors.engine.profiles.*.preparation.methods.ch at ors.engine.profiles | openrouteservice backend documentation, where * is your profile name, i.e., car).

You would also have to enable the matrix endpoint, maybe also the directions endpoint, I am not sure about that.

In case you still face errors, you may also post logs or error messages.

Best regards

Hi,

I just found another error. After setting up a server with this config

# Docker Compose file for the openrouteservice (ORS) application
# Documentation and examples can be found on https://giscience.github.io/openrouteservice/run-instance/running-with-docker
version: '3.8'

services:
  # ----------------- ORS application configuration ------------------- #
  ors-app:
    # Activate the following lines to build the container from the repository
    # You have to add --build to the docker compose command to do so
    build:
      context: ./
    container_name: ors-app
    ports:
      - "8080:8082"  # Expose the ORS API on port 8080
      - "9001:9001"  # Expose additional port for monitoring (optional)
    image: openrouteservice/openrouteservice:v8.0.0
    # Advanced option! If you different ids to 0:0 and 1000:1000, you have to rebuild the container with the build args UID,GID.
    # The user command is useful if you want easier bind mount access or better security.
    #user: "1000:1000" # Run "mkdir -p ors-docker/config ors-docker/elevation_cache ors-docker/files ors-docker/graphs ors-docker/logs && sudo chown -R 1000:1000 ors" before starting the container!
    volumes:  # Mount relative directories. ONLY for local container runtime. To switch to docker managed volumes see 'Docker Volumes configuration' section below.
      - ./ors-docker:/home/ors  # Mount the ORS application directory (for logs, graphs, elevation_cache, etc.) into its own directory
      #- ./graphs:/home/ors/graphs  # Mount graphs directory individually
      #- ./elevation_cache:/home/ors/elevation_cache  # Mount elevation cache directory individually
      #- ./config:/home/ors/config  # Mount configuration directory individually
      #- ./logs:/home/ors/logs  # Mount logs directory individually
      #- ./files:/home/ors/files  # Mount files directory individually
    environment:
      REBUILD_GRAPHS: True  # Set to True to rebuild graphs on container start.
      CONTAINER_LOG_LEVEL: INFO  # Log level for the container. Possible values: DEBUG, INFO, WARNING, ERROR, CRITICAL
      # If you don't want the default ors-config.yml you can specify a custom file name, that should match the file in
      # your 'config' volume mount.
      #ORS_CONFIG_LOCATION: /home/ors/config/my-ors-config.yml  # Location of your ORS configuration file in the docker container

      # ------------------ JAVA OPTS ------------------ #
      # Configure the memory settings for JAVA or pass additional opts
      # Fore more available ENV properties see Prepare CATALINA_OPTS and JAVA_OPTS
      # in https://github.com/GIScience/openrouteservice/blob/main/docker-entrypoint.sh
      XMS: 1g  # start RAM assigned to java
      XMX: 16g  # max RAM assigned to java. Rule of Thumb: <PBF-size> * <profiles> * 2
      # Example: 1.5 GB pbf size, two profiles (car and foot-walking)
      # -> 1.5 * 2 * 2 = 6. Set xmx to be AT LEAST `-Xmx6g`
      ADDITIONAL_JAVA_OPTS: ""  # further options you want to pass to the java command

      # ----------------- Properties configuration ------------------- #
      # Configure your whole container with only property ENVs.
      # These can be set alternatively or additionally to the yml configuration file.
      # Note, that any values set will override the corresponding values from the yml configuration file.
      # See the ors-config.env file for more options.
      # To have a configuration file-less container, uncomment at least the following properties.
      # The values are examples and provide the default configuration.
      ors.engine.source_file: /home/ors/files/germany-latest.osm.pbf
      ors.engine.graphs_root_path: /home/ors/graphs
      ors.engine.elevation.cache_path: /home/ors/elevation_cache
      ors.engine.elevation: false
      ors.engine.init_threads: 1
      ors.endpoints.isochrones.enabled: false
      ors.engine.profiles.car.enabled: true
      ors.engine.profiles.car.elevation: false

      ors.engine.profiles.car.preparation.methods.ch.enabled: false
      ors.engine.profiles.car.preparation.methods.lm.enabled: false
      ors.engine.profiles.car.preparation.methods.core.enabled: false

      ors.engine.graphs_data_access: RAM_STORE

      ors.engine.profile_default.maximum_distance: 1000000000

    # ----------------- ENV file configuration ------------------- #
    # Too many variables for your 'environment:' section?
    # Use an env_file with the ENV properties instead and define everything in there:
    # Values will be overwritten if set in the 'environment' section.
    #env_file: ors-config.env

    # ----------------- Healthcheck configuration ------------------- #
    # The healthcheck is disabled by default. Uncomment the following lines to enable it.
    # The healthcheck allows you to monitor the status of the ORS application.
    # Be careful with long graph builds, as the healthcheck will fail and show 'unhealthy' during this time.
    # This is especially useful if you run your ORS container in a production environment.
    #healthcheck:
    #  test: wget --no-verbose --tries=1 --spider http://localhost:8082/ors/v2/health || exit 1
    #  start_period: 1m
    #  interval: 10s
    #  timeout: 2s
    #  retries: 3
    #  disable: false

# ----------------- Docker Volumes configuration ------------------- #
# Define the Docker managed volumes for the ORS application. For more info on Docker Volumes see https://docs.docker.com/compose/compose-file/07-volumes/
# Volumes are used to persist the data and configuration of the ORS application.
# If you want to use volumes, uncomment the following lines and remove the ./ prefix from the volume paths in 'services.ors-app.volumes'.
#volumes:
#    graphs:
#    elevation_cache:
#    config:
#    logs:
#    files:

and trying to do http://localhost:8080, also with endings /ors and /v2 in the browser, it (expected) gave me a 404 and in the terminal I got a Java exception which sounds like something crashed or bad happened?

tobi@tobi-desktop:~/Desktop/ors$ sudo docker compose up
WARN[0000] /home/tobi/Desktop/ors/docker-compose.yml: `version` is obsolete 
[+] Running 1/0
 ✔ Container ors-app  Created                                                                                                                                                                              0.0s 
Attaching to ors-app
ors-app  | #################
ors-app  | # Container ENV #
ors-app  | #################
ors-app  | ✓ CONTAINER_LOG_LEVEL: INFO. Set CONTAINER_LOG_LEVEL=DEBUG for more details.
ors-app  | ⓘ Any config file settings can be overwritten by environment variables.
ors-app  | ⓘ Use 'CONTAINER_LOG_LEVEL=DEBUG' to see the full list of active environment variables for this container.
ors-app  | ###########################
ors-app  | # Container sanity checks #
ors-app  | ###########################
ors-app  | ⓘ Running container as user root with id 0 and group 0
ors-app  | ✓ ORS_HOME: /home/ors exists and is writable.
ors-app  | ✓ The file /home/ors/config/example-ors-config.env is up to date
ors-app  | ✓ The file /home/ors/config/example-ors-config.yml is up to date
ors-app  | ✓ Using the existing ors-config.yml from: /home/ors/config/ors-config.yml
ors-app  | ✓ Using graphs folder /home/ors/graphs
ors-app  | ⓘ Any ENV variables will have precedence over configuration variables from config files.
ors-app  | ✓ All checks passed. For details set CONTAINER_LOG_LEVEL=DEBUG.
ors-app  | #####################################
ors-app  | # Container file system preparation #
ors-app  | #####################################
ors-app  | ✓ The file /home/ors/files/example-heidelberg.osm.gz is up to date
ors-app  | ✓ Removed graphs at /home/ors/graphs/*.
ors-app  | ✓ Container file system preparation complete. For details set CONTAINER_LOG_LEVEL=DEBUG.
ors-app  | #######################################
ors-app  | # Prepare CATALINA_OPTS and JAVA_OPTS #
ors-app  | #######################################
ors-app  | ✓ CATALINA_OPTS and JAVA_OPTS ready. For details set CONTAINER_LOG_LEVEL=DEBUG.
ors-app  | #####################
ors-app  | # ORS startup phase #
ors-app  | #####################
ors-app  | ✓ 🙭 Ready to start the ORS application 🙭
ors-app  | 
ors-app  |   .   ____          _            __ _ _
ors-app  |  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
ors-app  | ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
ors-app  |  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
ors-app  |   '  |____| .__|_| |_|_| |_\__, | / / / /
ors-app  |  =========|_|==============|___/=/_/_/_/
ors-app  |  :: Spring Boot ::                (v3.1.6)
ors-app  | 
ors-app  | 2024-04-11 13:38:39 INFO                                                  main [ o.h.o.a.Application                      ]   Starting Application v8.0.0 using Java 21.0.2 with PID 1 (/ors.jar started by root in /home/ors)
ors-app  | 2024-04-11 13:38:39 INFO                                                  main [ o.h.o.a.Application                      ]   The following 1 profile is active: "default"
ors-app  | 2024-04-11 13:38:39 INFO                                                  main [ o.h.o.a.ORSEnvironmentPostProcessor      ]   
ors-app  | 2024-04-11 13:38:39 INFO                                                  main [ o.h.o.a.ORSEnvironmentPostProcessor      ]   Configuration lookup started.
ors-app  | 2024-04-11 13:38:39 INFO                                                  main [ o.h.o.a.ORSEnvironmentPostProcessor      ]   Configuration file set by environment variable.
ors-app  | 2024-04-11 13:38:39 INFO                                                  main [ o.h.o.a.ORSEnvironmentPostProcessor      ]   Loaded file '/home/ors/config/ors-config.yml'
ors-app  | 2024-04-11 13:38:39 INFO                                                  main [ o.h.o.a.ORSEnvironmentPostProcessor      ]   Configuration lookup finished.
ors-app  | 2024-04-11 13:38:39 INFO                                                  main [ o.h.o.a.ORSEnvironmentPostProcessor      ]   
ors-app  | 2024-04-11 13:38:40 INFO                                              ORS-Init [ o.h.o.a.s.l.ORSInitContextListener       ]   Initializing ORS...
ors-app  | 2024-04-11 13:38:40 INFO                                              ORS-Init [ o.h.o.r.RoutingProfileManager            ]   Total - 1024 MB, Free - 940.88 MB, Max: 16 GB, Used - 83.12 MB
ors-app  | 2024-04-11 13:38:40 INFO                                              ORS-Init [ o.h.o.r.RoutingProfileManager            ]   ====> Initializing profiles from '/home/ors/files/germany-latest.osm.pbf' (1 threads) ...
ors-app  | 2024-04-11 13:38:40 INFO                                              ORS-Init [ o.h.o.r.RoutingProfileManager            ]   1 profile configurations submitted as tasks.
ors-app  | 2024-04-11 13:38:40 INFO                                            ORS-pl-car [ o.h.o.r.RoutingProfile                   ]   [1] Profiles: 'driving-car', location: '/home/ors/graphs/car'.
ors-app  | 2024-04-11 13:38:40 INFO                                            ORS-pl-car [ o.h.o.r.g.e.ORSGraphHopper               ]   version v4.9.1|2024-01-17T09:08:46Z (7,20,5,4,5,7)
ors-app  | 2024-04-11 13:38:40 INFO                                            ORS-pl-car [ o.h.o.r.g.e.ORSGraphHopper               ]   graph car_ors|RAM_STORE|2D|turn_cost|,,,,, details:edges:0(0MB), nodes:0(0MB), name:(0MB), geo:0(0MB), bounds:1.7976931348623157E308,-1.7976931348623157E308,1.7976931348623157E308,-1.7976931348623157E308
ors-app  | 2024-04-11 13:38:40 INFO                                            ORS-pl-car [ o.h.o.r.g.e.ORSGraphHopper               ]   No custom areas are used, custom_areas.directory not given
ors-app  | 2024-04-11 13:38:40 INFO                                            ORS-pl-car [ o.h.o.r.g.e.ORSGraphHopper               ]   start creating graph from /home/ors/files/germany-latest.osm.pbf
ors-app  | 2024-04-11 13:38:40 INFO                                            ORS-pl-car [ o.h.o.r.g.e.ORSGraphHopper               ]   using car_ors|RAM_STORE|2D|turn_cost|,,,,, memory:totalMB:1024, usedMB:276
ors-app  | 2024-04-11 13:38:41 INFO                                                  main [ o.h.o.a.Application                      ]   Started Application in 1.699 seconds (process running for 2.154)
ors-app  | 2024-04-11 13:38:41 INFO                                                  main [ o.h.o.a.Application                      ]   openrouteservice {"build_date":"2024-03-21T13:55:54Z","version":"8.0.0"}
ors-app  | 2024-04-11 13:38:46 ERROR                                 http-nio-8082-exec-1 [ o.a.c.c.C.[.[.[.[dispatcherServlet]      ]   Servlet.service() for servlet [dispatcherServlet] threw exception
ors-app  | jakarta.servlet.ServletException: Circular view path [error]: would dispatch back to the current handler URL [/ors/error] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)
ors-app  | 	at org.springframework.web.servlet.view.InternalResourceView.prepareForRendering(InternalResourceView.java:210) ~[spring-webmvc-6.0.14.jar!/:6.0.14]
ors-app  | 	at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:148) ~[spring-webmvc-6.0.14.jar!/:6.0.14]
ors-app  | 	at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:314) ~[spring-webmvc-6.0.14.jar!/:6.0.14]
ors-app  | 	at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1415) ~[spring-webmvc-6.0.14.jar!/:6.0.14]
ors-app  | 	at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1159) ~[spring-webmvc-6.0.14.jar!/:6.0.14]
ors-app  | 	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1098) ~[spring-webmvc-6.0.14.jar!/:6.0.14]
ors-app  | 	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974) ~[spring-webmvc-6.0.14.jar!/:6.0.14]
ors-app  | 	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.0.14.jar!/:6.0.14]
ors-app  | 	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.0.14.jar!/:6.0.14]
ors-app  | 	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:527) ~[jakarta.servlet-api-6.0.0.jar!/:6.0.0]
ors-app  | 	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.0.14.jar!/:6.0.14]
ors-app  | 	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614) ~[jakarta.servlet-api-6.0.0.jar!/:6.0.0]
ors-app  | 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.0.14.jar!/:6.0.14]
ors-app  | 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.14.jar!/:6.0.14]
ors-app  | 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) ~[spring-web-6.0.14.jar!/:6.0.14]
ors-app  | 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) ~[spring-web-6.0.14.jar!/:6.0.14]
ors-app  | 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:642) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:410) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:340) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:277) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:362) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:222) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at java.lang.Thread.run(Thread.java:1583) [?:?]
ors-app  | 2024-04-11 13:38:46 ERROR                                 http-nio-8082-exec-1 [ o.a.c.c.C.[.[localhost]                  ]   Exception Processing ErrorPage[errorCode=0, location=/error]
ors-app  | jakarta.servlet.ServletException: Circular view path [error]: would dispatch back to the current handler URL [/ors/error] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)
ors-app  | 	at org.springframework.web.servlet.view.InternalResourceView.prepareForRendering(InternalResourceView.java:210) ~[spring-webmvc-6.0.14.jar!/:6.0.14]
ors-app  | 	at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:148) ~[spring-webmvc-6.0.14.jar!/:6.0.14]
ors-app  | 	at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:314) ~[spring-webmvc-6.0.14.jar!/:6.0.14]
ors-app  | 	at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1415) ~[spring-webmvc-6.0.14.jar!/:6.0.14]
ors-app  | 	at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1159) ~[spring-webmvc-6.0.14.jar!/:6.0.14]
ors-app  | 	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1098) ~[spring-webmvc-6.0.14.jar!/:6.0.14]
ors-app  | 	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974) ~[spring-webmvc-6.0.14.jar!/:6.0.14]
ors-app  | 	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.0.14.jar!/:6.0.14]
ors-app  | 	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.0.14.jar!/:6.0.14]
ors-app  | 	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:527) ~[jakarta.servlet-api-6.0.0.jar!/:6.0.0]
ors-app  | 	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.0.14.jar!/:6.0.14]
ors-app  | 	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614) ~[jakarta.servlet-api-6.0.0.jar!/:6.0.0]
ors-app  | 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.0.14.jar!/:6.0.14]
ors-app  | 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.14.jar!/:6.0.14]
ors-app  | 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) ~[spring-web-6.0.14.jar!/:6.0.14]
ors-app  | 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) ~[spring-web-6.0.14.jar!/:6.0.14]
ors-app  | 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:642) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:410) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:340) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:277) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:362) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:222) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-10.1.16.jar!/:?]
ors-app  | 	at java.lang.Thread.run(Thread.java:1583) [?:?]

Does the matrix endpoint profit only from ch or also from lm and core?

what does http://localhost:8080/ors/v2/status and
http://localhost:8080/ors/v2/health say?

That Circular view path error is “normal” if you request some URL that is not set, due to how the /ors/error thing is done

Oh, I forgot to say. Yeah, health works fine and the server also keeps running and answers stuff. But that was some ugly and scary output.

lm and core are not used with matrix.

As far as I can tell, the matrix endpoint always uses “fastest” doesn’t it? And there is no option to change that, that feature is not yet implemented?