[FAQ]: Finetuning Ambience Performance

Ambience Server’s default configuration is set to handle general reporting workloads. Configuration for a use case to generate a single 1-5 GB data file is not the same as a configuration that generates many pdf reports per second per job engine all day.

Some users require very detailed audits and job log reports while others require a pdf to be rendered as fast as possible. There is no one single configuration that fits every requirement, it is important to configure Java and the Ambience Server differently for each use case.

  1. Java Version and configuration
  1. You will need to fine tune Java and our product configuration to match the expected server workload.
  • Ensure you are running the latest version of Java and select performance Garbage Collectors such as the following listed in https://blogs.oracle.com/javamagazine/understanding-the-jdks-new-superfast-garbage-collectors , e.g.
    a) GC1 default from Java version 11
    b) Shenandoah
    c) ZGC with Concurrent Class Unloading

  • The new Garbage collectors handle memory better and are of better performance.

  • As always please do testing on templates if you are migrating to newer version of Java and ensure the version Ambience is compatible to the Java version

  1. Reduce unused Ambience services and logging info:
    a) Disable the Lucene indexer in etc/application.conf:
    00:01:56.470 INFO c.e.v2.dacapo.search.ElxIndexer - Starting with indexers for: ds,pdf,rml,txt

  indexer {
    dir = ${root-dir}"/data/indexer"
    initial-delay = 5 minutes
    update-interval = 15 minutes
    max-results = 1000
    enabled = false
    indexers = ["ds", "pdf","rml", "text"]
  }

b)Do share with us your application.conf file if contacting Elixir support for the above issue.

c) Reduce the size of the log files by changing log configuration levels from ‘info’ to ‘warn’ in etc/logback.xml to cut down IO process which can affect the server performance, e.g.

	<logger name="com.elixirtech" level="info" />
	<logger name="com.elixirtech.ui.SystemStatus" level="warn" />
	<logger name="com.elixirtech.vivace" level="info" />

to

    <logger name="com.elixirtech" level="warn" />
	<logger name="com.elixirtech.ui.SystemStatus" level="warn" />
	<logger name="com.elixirtech.vivace" level="warn" />
  1. Manage report generation workload
    Manage report generation workloads by splitting into different scheduled batches or split the workload amongst servers and cache the report outputs to prevent the report server from generating the same report repeatedly resulting in the hogging of both server and system resources. Kindly provide the use case so that our side is able to determine which approach will be the best for the application.