Este contenido no está disponible en el idioma seleccionado.
Chapter 3. Diagnosing Performance Issues
3.1. Enabling Garbage Collection Logging Copiar enlaceEnlace copiado en el portapapeles!
Examining garbage collection logs can be useful when attempting to troubleshoot Java performance issues, especially those related to memory usage.
Other than some additional disk I/O activity for writing the log files, enabling garbage collection logging does not significantly affect server performance.
Garbage collection logging is already enabled by default for a standalone JBoss EAP server running on OpenJDK or Oracle JDK. For a JBoss EAP managed domain, garbage collection logging can be enabled for the host controller, process controller, or individual JBoss EAP servers.
Get the correct JVM options for enabling garbage collection logging for your JDK. Replace the path in the options below to where you want the log to be created.
NoteThe Red Hat Customer Portal has a JVM Options Configuration Tool that can help you generate optimal JVM settings.
For OpenJDK or Oracle JDK:
-verbose:gc -Xloggc:/path/to/gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime
-verbose:gc -Xloggc:/path/to/gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTimeCopy to Clipboard Copied! Toggle word wrap Toggle overflow For IBM JDK:
-verbose:gc -Xverbosegclog:/path/to/gc.log
-verbose:gc -Xverbosegclog:/path/to/gc.logCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Apply the garbage collection JVM options to your JBoss EAP server.
See the JBoss EAP Configuration Guide for instructions on how to apply JVM options to a standalone server or servers in a managed domain.
3.2. Java Heap Dumps Copiar enlaceEnlace copiado en el portapapeles!
A Java heap dump is a snapshot of a JVM heap created at a certain point in time. Creating and analyzing heap dumps can be useful for diagnosing and troubleshooting issues with Java applications.
Depending on which JDK you are using, there are different ways of creating and analyzing a Java heap dump for a JBoss EAP process. This section covers common methods for Oracle JDK, OpenJDK, and IBM JDK.
3.2.1. Creating a Heap Dump Copiar enlaceEnlace copiado en el portapapeles!
3.2.1.1. OpenJDK and Oracle JDK Copiar enlaceEnlace copiado en el portapapeles!
Create an On-Demand Heap Dump
You can use the jcmd command to create an on-demand heap dump for JBoss EAP running on OpenJDK or Oracle JDK.
- Determine the process ID of the JVM that you want to create a heap dump from.
Create the heap dump with the following command:
jcmd JAVA_PID GC.heap_dump -all=true FILENAME.hprof
$ jcmd JAVA_PID GC.heap_dump -all=true FILENAME.hprofCopy to Clipboard Copied! Toggle word wrap Toggle overflow This creates a heap dump file in the HPROF format, usually located in
EAP_HOMEorEAP_HOME/bin. Alternatively, you can specify a file path to another directory.
Create a Heap Dump Automatically on OutOfMemoryError
You can use the -XX:+HeapDumpOnOutOfMemoryError JVM option to automatically create a heap dump when an OutOfMemoryError exception is thrown.
This creates a heap dump file in the HPROF format, usually located in EAP_HOME or EAP_HOME/bin. Alternatively, you can set a custom path for the heap dump using -XX:HeapDumpPath=/path/. If you specify a file name using -XX:HeapDumpPath, for example, -XX:HeapDumpPath=/path/filename.hprof, the heap dumps will overwrite each other.
See the JBoss EAP Configuration Guide for instructions on how to apply JVM options to a standalone server or servers in a managed domain.
3.2.1.2. IBM JDK Copiar enlaceEnlace copiado en el portapapeles!
When using the IBM JDK, heap dumps are automatically generated when an OutOfMemoryError is thrown.
Heap dumps from the IBM JDK are saved in the /tmp/ directory as a portable heap dump (PHD) formatted file.
3.2.2. Analyzing a Heap Dump Copiar enlaceEnlace copiado en el portapapeles!
Heap Dump Analysis Tools
There are many tools that can analyze heap dump files and help identify issues. Red Hat Support recommends using the Eclipse Memory Analyzer tool (MAT), which can analyze heap dumps formatted in either HPROF or PHD formats.
For information on using Eclipse MAT, see the Eclipse MAT documentation.
Heap Dump Analysis Tips
Sometimes the cause of the heap performance issues are obvious, but other times you may need an understanding of your application’s code and the specific circumstances that cause issues like an OutOfMemoryError. This can help to identify whether an issue is a memory leak, or if the heap is just not large enough.
Some suggestions for identifying memory usage issues include:
- If a single object is not found to be consuming too much memory, try grouping by class to see if many small objects are consuming a lot of memory.
-
Check if the biggest usage of memory is a thread. A good indicator of this is if the
OutOfMemoryError-triggered heap dump is much smaller than the specifiedXmxmaximum heap size. -
A technique to make memory leaks more detectable is to temporarily double the normal maximum heap size. When an
OutOfMemoryErroroccurs, the size of the objects related to the memory leak will be about half the size of the heap.
When the source of a memory issue is identified, you can view the paths from garbage collection roots to see what is keeping the objects alive.
3.3. Identifying High CPU Utilization by Java Threads Copiar enlaceEnlace copiado en el portapapeles!
For customers using JBoss EAP on Red Hat Enterprise Linux or Solaris, the JVMPeg lab tool on the Red Hat Customer Portal helps collect and analyze Java thread information to identify high CPU utilization. Follow the instructions for using the JVMPeg lab tool instead of using the following procedure.
For OpenJDK and Oracle JDK environments, Java thread diagnostic information is available using the jstack utility.
Identify the process ID of the Java process that is utilizing a high percentage of the CPU.
It can also be useful to obtain per-thread CPU data on high-usage processes. This can be done using the
top -Hcommand on Red Hat Enterprise Linux systems.Using the
jstackutility, create a stack dump of the Java process. For example, on Linux and Solaris:jstack -l JAVA_PROCESS_ID > high-cpu-tdump.out
jstack -l JAVA_PROCESS_ID > high-cpu-tdump.outCopy to Clipboard Copied! Toggle word wrap Toggle overflow You might need to create multiple dumps at intervals to see any changes or trends over a period of time.
- Analyze the stack dumps. You can use a tool such as the Thread Dump Analyzer (TDA).