Managing Picos with Topo

This section describes how to create, update, remove, and view pico configurations.

Each pico configuration consists of a set of attributes, including templates, system properties, JVM arguments, and classpaths. When you change these attributes in a configuration, the corresponding pico instance must be restarted.

A configuration may also include "settings" attributes. Unlike e g properties, this type of attribute may contain array values and changes do not require restart of pico instances.


{
	template=<template name space>.<template file name>
	settings {
		state=enabled
	    tags=[]
	}
 	config {
  		classpath {
			#classpaths...
  		}
  		jvmargs {
			#jvmargs...
		}
		properties {
			#properties... {
			pico
				#picos.. {
				groups {
					#groups...
				}
			}
		}
 	}
}

Settings

At the time of writing, there are three available settings:

  • state - If set to disabled, this pico will not be started by the system command    
  • tags - Add tags to group pico instances in the mzsh command system.

Classpaths

The default classpath attributes that are set in the pico configuration of the Platform. Agents that are installed on the system may require that additional classpaths are set in the pico configuration of ECs. 

JVM Arguments

A number of JVM arguments controlling the memory usage are set in the default template standard, which is inherited by all other default templates.

config {
...
    jvmargs {
        args=[
            "-server"
        ]
        maxDirect=[
            "-XX:MaxDirectMemorySize=4096M"
        ]
        maxMetaspace=[
            "-XX:MaxMetaspaceSize=196M"
        ]
        xms=[
            "-Xms64M"
        ]
        xmx=[
            "-Xmx256M"
        ]
    }
...    
}

 You can add additional JVM arguments in a custom template or override the default values in your pico configurations.

Each of the JVM arguments in the template has unique label. This makes it possible to edit individual JVM arguments via the mzsh command topo.

It is highly recommended that you follow this pattern and consistently use the same labels in all configurations. Omitting or mixing labels may lead to unpredictable results. For instance, the following labels are used in the standard template.

LabelJVM Argument
maxDirect
MaxDirectMemorySize
maxMetaspace
maxMetaspace
xms
Xms
xmxXmx

If you set set any of the above JVM arguments in a custom template, but with different labels. Pico instances may start with conflicting JVM arguments.

mzsh topo set topo://container:<container>/pico:<pico>/obj:config.jvmargs \
'<label>: ["argument1","argument2"]'

Example - Setting JVM arguments

mzsh topo set topo://container:main1/pico:platform/obj:config.jvmargs \
'xmx:["-Xmx256M"]
xms:["-Xms64M"]
maxMetaspace:["-XX:MaxMetaspaceSize=196M"]
maxDirect:["-XX:MaxDirectMemorySize=4096M"]
args : ["-server"]'

If you have a large block of APL code, e g 300 lines or more, add the JVM argument -XX:DontCompileHugeMethods to pico configurations of ECs. This causes the the JIT compilation to take effect:

mzsh topo set topo://container:<container>/pico:<pico>/obj:config.jvmargs \
'dontCompileHugeMethods:["-XX:DontCompileHugeMethods"]'

System Properties

For information about the available system properties, see System Properties.