The type of flag. Possible values are:
-
Boolean: the flag requires a boolean value of true (+) or false (-).
-
Integer or Unsigned Integer: the flag requires an integer value.
-
String: the flag requires a string.
Note
|
As of Azul Platform Prime 23.08.0.0, ZVision and ZVRobot components have been deprecated and are no longer actively developed. While we still support these components, we encourage users to switch to Java Flight Recorder(https://docs.azul.com/prime/Java-Flight-Recorder), as ZVision and ZVRobot are planned for End-of-life with Azul Platform Prime 24.02.0.0 (February 2024). |
The following sections describe configuring and using the Azul ZVision Robot (ZVRobot) profiling and diagnostic snapshot collection tool for Azul Zing Builds of OpenJDK (Zing).
ZVRobot provides a method to collect metrics about the state of a running application and the underlying JVM. It uses the same data collection mechanisms as ZVision but stores each data snapshot persistently to a file. ZVRobot automates collecting and persistently storing the data displayed with a manual ZVision page refresh. The data stored in the files can be viewed through a browser, simulating the ZVision environment. You can set which ZVision pages to collect and, how often and how many times you want to capture the page data.
Use the ZVRobot data to help you determine how to tune command line options and optimize your code performance. ZVRobot data includes:
Complete internal and environment settings inventory
Sample-based method profiling
JVM internal subsystem behavior, including GC and the runtime compiler
Lock and monitor usage metrics
Thread behavior
ZVRobot is a simple http client that collects ZVision data from the ARTAPort according to the criteria specified in the ZVRobot.prop
file and outputs it to a specified directory as a set of time stamped XML files. It has a very low impact on performance. The ZVRobot client can be started and stopped at any time during a JVM session.
ZVRobot requires JVM host connection information:
JVM host IP address and JVM host ARTA port
The Azul Run Time Analysis (ARTA) port is the application host port specified with the -XX:ARTAPort command line.
ZVRobot output is viewable from supported Web browsers with network access to the file system where the ZVRobot files are located. The supported browsers include:
Microsoft® Internet Explorer 6 (or later) on Windows 2000, Windows XP, Windows Vista, or Windows 7
Mozilla Firefox 1.0.3 (or later) on all supported operating systems
Apple Safari™ 2.0 (or later) for macOS
If you are providing data for problem resolution for a case with Azul customer support:
Capture the requested data in its entirety using ZVRobot.
Compress the data into zip or gzipped tar file.
Send it by e-mail to [email protected] or FTP upload for analysis.
ZVRobot can be used in a few ways, think of ZVRobot as a flight recorder, persisting away data that can be reviewed later for offline analysis.
ZVRobot data includes:
Complete internal and environment settings inventory
Sample-based method profiling
JVM internal subsystem behaviour, including GC and the runtime compiler
Lock and monitor usage metrics
Thread behavior
In development, use the ZVRobot data to help you optimize your code performance by monitoring locking behavior, finding hot methods, and monitoring other behaviors such as: per thread stack trace; tick profile; I/O wait; object size and count profile; live objects type velocity; deadlocks; monitor contention; memory usage; GC; Compilation; etc.
In the Operations Center, when an alert is triggered, use a script in the management tool to start an instance of ZVRobot to record what is going on for a set period (controllable in the ZVRobot.prop
file). This ensures that ZVRobot has data from when the incident occurred.
In preproduction, use ZVRobot to take samples of the application before implementing major changes or code changes. Compare the ZVRobot data with samples taken with previous application code versions. This helps to identify if code changes have changes the code profile, locking or allocation rates.
Periodically (weekly) take a few minutes of samples as a reference point, these reference points can be used to compare peak request loads as well as be used for long term capacity planning with your other tools.
ZVRobot must be connected to the JVM you are monitoring. The following command enables ZVRobot to communicate with the JVM on the specified port of the host where the JVM is running.
Add the following command line option to your Java command string that starts the JVM and your Java application.
-XX:ARTAPort={off|<port>|any}
Supply a port number or set this option to any to enable the communication between JVM and ZVRobot. The ARTA (Azul Run Time Analysis) port provides internal API communication between ZVision, ZVRobot, and JVM.
Valid options include:
off
: Default. JVM does not open a communication port and ZVRobot cannot communicate.
<port>
: port number for ZVRobot to use on the host.
any
: ZVRobot uses any free port.
The port number opened by the JVM is echoed to stderr at startup. This setting is useful when starting multiple JVMs on the same host.
From Azul Platform Prime 23.07.0.0, ZVTools is not included in the Azul Platform Prime package and must be downloaded separately.
ZVTools distribution can be found here:
Install ZVRobot and modify the ZVRobot properties file to specify the connection to the JVM and select the type of data to collect.
Locate the ZVRobot directory within ZVTools.zip.
Copy the ZVRobot
directory to a host machine where either a Java Development Kit (JDK) or Java Runtime Environment (JRE) is installed.
Note
|
For efficient use, move the ZVRobot files to a different machine than the JVM host or Java application you are monitoring. The ZVRobot machine must be networked to the JVM host machine it is monitoring.
|
Locate and open the ZVRobot.prop
file. The file is in the top level ZVRobot directory. The file has two sections:
Configuration – contains required information you must provide for ZVRobot to communicate with the JVM and options that control collection behavior. See Step 4.
Page Types to Collect – contains a list of ZVision pages. Some pages are already configured to be collected. You can turn on or off the collection of any ZVision page.
Provide the configuration information. In the top section of the file, enter appropriate values for the following variables:
ZVRobotVars.HOST
: IP address of the application host where the JVM is running.
ZVRobotVars.PORT
: Port on the host machine that was specified with the -XX::ARTAPort command line option when the JVM was started.
ZVRobotVars.THSIZE
: The number of top-level items to request for display in a page. For example, for:
IO_OPEN_SOCKETS
, this is the number of sockets.
THREADS_LIST
and THREADS_STACK_TRACE
, this is the number of threads to list in a single page.
LEAK_SITES
, this is the per page number of location in the code identified as sites where memory is being leaked.
ZVRobotVars.SECONDS
: The interval in seconds between sequential requests by ZVRobot to the JVM.
ZVRobotVars.COUNT
: The number of snapshots to gather. A negative number is interpreted as a request for an infinite number of snapshots. If you use this option, stop the ZVRobot process with CTRL-C from the command line.
Select the metrics to collect. In the third section of the file, remove or add the pound (#) character to enable or disable, respectively, collecting a page’s data. For example:
To enable a <metric_name>
metric, the line in the file should be:
<metric_name>=http://${HOST}:${PORT} ${SECONDS} ${COUNT}
To disable the <metric_name> metric, comment out the line by adding the pound sign (#
) in the line. The line in the file should be:
# <metric_name>=http://${HOST}:${PORT} ${SECONDS} ${COUNT}
ZVRobot communicates with the JVM using the host:port combination specified in the ZVRobot.prop
file. The collected metric snapshots are written to a directory suffixed with the date and time when ZVRobot starts.
In the command line for the machine where ZVRobot is installed, type the following command to run ZVRobot:
java -jar ZVRobot-<version>.jar <directory> ZVRobot.prop
where:
ZVRobot-<version>.jar
is the JAR file that contains the ZVRobot classes
<directory>
is the directory in which ZVRobot creates the metric collection directory. You must have write permission for this top level directory. Use any as the directory and ZVRobot creates the metric collection directory in the current working directory.
ZVRobot.prop
is the edited ZVRobot property file
A directory is created that contains the XML-formatted metric snapshot files as well as manifest files that contain a list of hyperlinks to these metric files.
Note
|
A sample start up script startsample.sh is provided to run ZVRobot. The script uses the provided sample ZVRobot.prop file that has a set of default metrics selected. To run this test script, modify the configuration variables in the sample ZVRobot.prop file, particularly the host and port name.
|
The Tick Profiler is enabled and disabled using the Java command line option, UseTickProfiler
. Default for UseTickProfiler
is false, which means the Tick Profiler will not collect profiling information.
To enable the Tick Profiler, use -XX:+UseTickProfiler
. (set to true
)
To disable the Tick Profiler, use -XX:-UseTickProfiler
. (default, set to false
)
ZVRobot outputs two sets of files: manifest .html
files and page .xml
files. View the files through a browser.
Navigate through your directories to the ZVRobot directory.
Select a date/time stamp directory
Select a manifest or page file to view.
Select Open with a browser.
The ZVRobot interface consists of a series of windows that format the collected information for a given metric in the same manner as the equivalent metric that is collected in ZVision. The rest of the section describes the ZVRobot windows.
Sample AzulZVRobotIndex.html file
The ZVRobot manifest, AzulZVRobotIndex.html
, lists hyperlinks to the manifest files specified by the appropriate metric for the corresponding ZVision window in the ZVRobot properties file, ZVRobot.prop
. Click a hyperlink to display the manifest file for a specific ZVRobot metric. The following table describes:
ZVRobot metric. Click the associated hyperlink to display a description of the metric.
Name of the corresponding ZVRobot metric specified in ZVRobot.prop.
Name of the corresponding manifest file listed in AzulZVRobotIndex.html.
See Section | Metric Page Name | File Created |
---|---|---|
ZVRobot Snapshot Data (this section) |
ZVProperties.prop Metric |
AzulZVRobotIndex.html Manifest File Name |
Configuration Window |
ZVRobotPage.CONFIG_ PROCESS |
Manifest.Frame.CONFIG_PROCESS.html |
Environment Variables Window |
ZVRobotPage. ENVIRONMENT_VARIABLES |
Manifest.Frame.ENVIRONMENT_ VARIABLES.html |
HotSpot Flags Window |
ZVRobotPage.HOTSPOT_ FLAGS |
Manifest.Frame.HOTSPOT_FLAGS.html |
Statistics Window |
ZVRobotPage.RUNTIME_ STATISTICS |
Manifest.Frame.RUNTIME_ STATISTICS.html |
Settings Window |
ZVRobotPage.SETTINGS_ GC_LOG |
Manifest.Frame.SETTINGS_ GC_LOG.html |
Features Window |
ZVRobotPage.FEATURES |
Manifest.Frame.FEATURES.html |
Threads List Window |
ZVRobotPage.THREADS_ LIST |
Manifest.Frame.THREADS_ LIST.html |
Stack Trace Window |
ZVRobotPage.THREADS_ STACK_TRACE |
Manifest.Frame.THREADS_STACK_TRACE.html |
Deadlocks Window |
ZVRobotPage.THREADS_ DEADLOCKS |
Manifest.Frame.THREADS_ DEADLOCKS.html |
Contention Window |
ZVRobotPage.THREADS_ MONITOR_CONTENTION |
Manifest.Frame.THREADS_ MONITOR_CONTENTION.html |
Tick Profile Window |
ZVRobotPage.TICKS_ PROFILE_TAG |
Manifest.Frame.TICKS_PROFILE_TAG.html |
Tick Profile Window |
ZVRobotPage.TICKS_ PROFILE_FLAG |
Manifest.Frame.TICKS_PROFILE_LOG.html |
Memory Summary Window |
ZVRobotPage.MEMORY_ SUMMARY |
Manifest.Frame.MEMORY_SUMMARY.html |
GC Summary Window |
ZVRobotPage.MEMORY_GC_ SUMMARY |
Manifest.Frame.MEMORY_GC_ SUMMARY.html |
GC History Window |
ZVRobotPage.MEMORY_GC_ HISTORY |
Manifest.Frame.MEMORY_GC_ HISTORY.html |
Compilers – Task Window |
ZVRobotPage.COMPILER_ TASKS |
Manifest.Frame.COMPILER_ TASKS.html |
Class List Window |
ZVRobotPage. APPLICATIONS_CLASS_ LIST |
Manifest.Frame.APPLICATIONS_ CLASS_LIST.html |
The Configuration window provides a detailed view of all the process settings for the JVM.
Click a hyperlink in the left column to display the collected information for a snapshot. The number of snapshots and the interval between snapshot collection is specified by the ZVRobotVars.COUNT and ZVRobotVars.SECOND variables in the ZVRobot.prop
file.
The following table describes the Configuration window elements.
Element | Description |
---|---|
Version |
JVM version. |
Command line |
List of classes and command line options used to launch the Java application. |
Prepended flags / filename |
List of option flags from the identified file that were inserted into the front of the Java command line. |
Appended flags / filename |
List of option flags from the identified file that were appended to the end of the Java command line. |
Current working directory |
Current working directory. |
Java Home |
Path to the location of the JVM’s files on disk - location of the bin directory that contains the java executable. |
Class path |
Paths to the location of the classes and/or jar files. |
Boot class path |
Paths to the location of the classes and/or jar files on the boot class path. |
Extensions directories |
Directories for extensions. |
Endorsed directories |
Directories for classes implementing newer versions of endorsed standards. |
Library path |
Native library path. |
Boot library path |
Boot library path. |
ARTA Version |
Version of the instrumentation in the JVM that provides data to the ZVRobot server. |
Open descriptor count limit |
Limit in bytes for open file descriptors for the JVM front end. |
Core file size limit |
Maximum size in bytes for a core dump file. |
Environment Variables Window
The Environment variables window provides a detailed view of all environmental variables set by the shell that launched the JVM.
Since the information in this window does not change over time, set the ZVRobotVars.COUNT
variable in the ZVRobot.prop
file to 1
. This tells ZVRobot to collect only one snapshot. By default, this one snapshot is displayed in work area of the page.
HotSpot Flags Window
The HotSpot flags window displays all -XX
flags that the JVM uses, their description, and current values. This screen is for advanced diagnostics and is not intended for beginning users. Azul customer support might instruct users to look up flag values in this window.
Since the information in this window does not change over time, set the ZVRobotVars.COUNT
variable in the ZVRobot.prop
file to 1
. This tells ZVRobot to collect only one snapshot. By default, this one snapshot is displayed in work area of the page.
Element | Description |
---|---|
Type |
The type of flag. Possible values are:
|
Name |
The name of the flag. |
Value |
The value configured for the flag. |
Description |
The description of the flag. |
Statistics Window
The Statistics window displays information about running applications.
Click a hyperlink in the left column to display the collected information for a snapshot. The number of snapshots and the interval between snapshot collection is specified by the ZVRobotVars.COUNT
and ZVRobotVars.SECOND
variables in the ZVRobot.prop
file. The following table describes the Statistics window elements.
Element | Description |
---|---|
SystemDictionary Stats |
Displays the number of Java classes loaded in the JVM. |
Thread Count Stats |
Displays the number of running threads. |
Settings Window
The Settings window provides controls for enabling GC logging, choosing the level of detail logged, and whether the output is sent to standard out or saved to a new or existing file. ZVRobot captures the state of this window’s settings.
Since the information in this window does not change over time, set the ZVRobotVars.COUNT variable in the ZVRobot.prop
file to 1. This tells ZVRobot to collect only one snapshot. By default, this one snapshot is displayed in work area of the page.
The following table describes the Settings window elements.
Element | Description |
---|---|
Off |
Disables GC logging for this JVM instance. This is the default setting. |
Print GC |
Enables GC logging with summarized output. Output is equivalent to using the command line option -XX:+PrintGC. |
Print GC details |
Enables GC logging with detailed output. Output is equivalent to using the command line option -XX:+PrintGCDetails. |
Options: File name |
Type a file name to send GC log output instead of sending it to standard out. Select the check box and type an existing file name to append the output to the end of an existing file. |
Features Window
The Features window provides controls for user access to certain ZVision and ZVRobot features in a running JVM. ZVRobot captures the state of his window’s settings.
Since the information in this window does not change over time, set the ZVRobotVars.COUNT
variable in the ZVRobot.prop
file to 1
. This tells ZVRobot to collect only one snapshot. By default, this one snapshot is displayed in work area of the page.
Element | Description |
---|---|
Azul Support |
Enables user access to Azul Customer Support Options. Use of this feature is at your risk because some of these diagnostic features can interfere with the proper functioning of the JVM, or cause the system to crash. |
Browse Instance |
Enables users to browse a class instance, potentially exposing sensitive data within the object. |
Browse Class |
Enables users to browse the static class data, potentially exposing sensitive data within the class. |
Browse Method |
Enables users to browse a class method, potentially exposing sensitive sensitive data within the method. |
Environment variables |
Enables users to view the Environment Variables, potentially exposing sensitive sensitive data. |
Stack trace |
Enables users to use the Stack Trace window, potentially exposing sensitive sensitive data. |
Threads List Window
The Threads List window displays all threads, status of each thread, and links to detailed information about a thread.
Click a hyperlink in the left column to display the collected information for a snapshot. The number of snapshots and the interval between snapshot collection is specified by the ZVRobotVars.COUNT
and ZVRobotVars.SECOND
variables in the ZVRobot.prop
file.
The following table describes the Threads List window elements.
Element | Description |
---|---|
Name |
Lists the name of the thread as assigned by the application. |
State |
The most common states for threads are:
Other states, such as idle, semaphore wait, waiting on JVM monitor Threads lock, or Waiting on Monitor SLT lock indicate threads that are internal to the JVM. These states are not normally useful for analysis of application performance. Also, during start up, compiler threads might be running. The time (in seconds) that the thread has spent since entering the state is provided in parenthesis after the waiting state indicators. |
Details |
Provides links to a stack trace, tick profile, and object profile for the selected thread. These functions are the same as the regular tick and profile features, except that only information on the selected thread displays. The following links appear inline with threads listed in this window: *Stack: displays a thread execution details window. *Ticks: displays a per-thread profile. *Allocations: displays a thread-level Object profile. This window displays real-time counters for allocated bytes, allocated count, and average object size per object type allocated by the thread since the most recent GC cycle start. |
The Stack Trace window lists all threads and displays whether a thread is executing or is blocked. This can help to determine changes to make in the application code. CPU time displays for each thread.
Click a hyperlink in the left column to display the collected information for a snapshot. The number of snapshots and the interval between snapshot collection is specified by the ZVRobotVars.COUNT
and ZVRobotVars.SECOND
variables in the ZVRobot.prop
file.
The Deadlocks window lists detected deadlock cycles. Threads involved for each cycle of locks are listed with the monitor type the thread is trying to acquire and the thread that is the current owner.
Click a hyperlink in the left column to display the collected information for a snapshot. The number of snapshots and the interval between snapshot collection is specified by the ZVRobotVars.COUNT
and ZVRobotVars.SECOND
variables in the ZVRobot.prop
file.
The Contention window provides statistical information for each monitor and sorts monitors by total acquire time. To sort by field, click on the column heading.
Click a hyperlink in the left column to display the collected information for a snapshot. The number of snapshots and the interval between snapshot collection is specified by the ZVRobotVars.COUNT
and ZVRobotVars.SECOND
variables in the ZVRobot.prop
file.
The following types of monitors appear in the Contention window:
Java-level monitors: identified by their class name.
Internal JVM monitors: identified with the extension _lock. If there are a high number of internal JVM monitors, examine the verbose garbage collection (GC) logs. Observe if there are a large number of GC pauses. Contact Azul customer support if this becomes a problem.
The total acquire time parameter is the time, in milliseconds, for acquires to occur for a given internal or Java-level monitor.
The following table describes the Contention List window elements.
Element | Description |
---|---|
Name |
The name of the monitor. |
Acquire Time (ms) |
|
Blocking acquires |
|
Waits |
|
Tick Profile Window
The Tick Profile window provides information to allow calculation of how processor resources are used for a recorded period of time.
The time interval over which the shown ticks are collected depends on the number and activity of the threads in the Java process. The busier the threads, the faster the data is collected into the fixed-size structures that hold the data.
Note
|
Method names in the tick profiler represent compiled methods, those no longer being interpreted. All time spent by methods being interpreted is summed as one entry named Interpreter. |
Click a hyperlink in the left column to display the collected information for a snapshot. The number of snapshots and the interval between snapshot collection is specified by the ZVRobotVars.COUNT
and ZVRobotVars.SECOND
variables in the ZVRobot.prop
file.
The following table describes the Tick Profile window elements.
Element | Description |
---|---|
Percent |
The percentage of CPU resources (% of the total number of ticks collected) the method or function used. |
Ticks |
The number of (ticks) attributed to the function or method. |
Source |
A description of the function being counted. The following are definitions for specific functions:
|
The Memory Summary window provides a summary of total memory usage and Contingency memory usage.
Click a hyperlink in the left column to display the collected information for a snapshot. The number of snapshots and the interval between snapshot collection is specified by the ZVRobotVars.COUNT
and ZVRobotVars.SECOND
variables in the ZVRobot.prop
file.
The following tables describe the Memory Summary window elements.
Memory Summary Window Elements – Java Heap Usage
Element | Description |
---|---|
Used |
The amount of memory currently used by the JVM. |
Capacity |
The amount of memory allocated for use by the JVM. |
Requested capacity |
The maximum amount of memory requested for use by the JVM (-Xmx). |
GC cycle count |
The number of garbage collection cycles. |
Memory Summary Window Elements – Memory Accounts
Element | Description |
---|---|
VM internal |
Shows allocated, balance, Reserved, and Contingency memory usage for the JVM. |
Java heap |
Shows allocated, balance, Reserved, and Contingency memory usage for the Java heap. |
Java Pause Prevention |
Shows allocated, balance, Reserved, and Contingency memory usage for the Java Pause Prevention memory. |
The GC Summary window provides a cumulative summary of the recent GC cycle history.
Click a hyperlink in the left column to display the collected information for a snapshot. The number of snapshots and the interval between snapshot collection is specified by the ZVRobotVars.COUNT
and ZVRobotVars.SECOND
variables in the ZVRobot.prop
file.
The following table describes the Memory Summary window elements.
Element | Description |
---|---|
New generation cycles |
Lists the summary values for memory usage during current cycle. |
Old generation cycle |
Lists the summary values for memory usage during generational cycle. |
The GC history window provides a detailed summary of the recent GC cycle history with a row per cycle. Click column titles to sort by relevance.
Click a hyperlink in the left column to display the collected information for a snapshot. The number of snapshots and the interval between snapshot collection is specified by the ZVRobotVars.COUNT
and ZVRobotVars.SECOND
variables in the ZVRobot.prop
file.
The following table describes the GC Memory History window elements.
Element | Description |
---|---|
Cycle |
Interval (sec): elapsed time between successive GC cycle starts. Pause ratio: ratio of time application spent in safe point pauses during the cycle to cycle interval time. |
Mode |
|
Heap |
|
Reserved |
|
Pause |
These values are used for internal Azul Platform Prime diagnostic purposes only. |
Generations |
|
Garbage |
|
Pages |
These values are used for internal Azul Platform Prime diagnostics purposes only. |
Pauses |
|
Pauses (garbage collector only) |
|
Intercycle |
|
Intercycle (garbage collector only) |
|
Intracycle |
|
Intracycle (garbage collector only) |
|
App threads |
|
The Compilers Task window of ZVRobot displays the status of Server and Client compiler tasks. Click a hyperlink in the left column to display the collected information for a snapshot. The number of snapshots and the interval between snapshot collection is specified by the ZVRobotVars.COUNT
and ZVRobotVars.SECOND
variables in the ZVRobot.prop
file.
The following table describes the Compilers Tab window elements.
Element | Description |
---|---|
Compiling |
Status of threads compiling. |
Waiting |
Status of threads waiting compiling. |
The Class List window displays a list of application and Java class library classes that are loaded in the JVM.
Click a hyperlink in the left column to display the collected information for a snapshot. The number of snapshots and the interval between snapshot collection is specified by the ZVRobotVars.COUNT
and ZVRobotVars.SECOND
variables in the ZVRobot.prop
file.