- Running the profiler
- Profiler activation
- Running applications with the profiler
- Connect to profiled application
- Troubleshoot connection problems
- Solving performance problems
- CPU profiling
- Deadlock detector
- Memory profiling
- Garbage collection
- Monitor profiling
- Exception profiling
- Probes: monitor events of various kinds
- Performance Charts
- Inspections: automatic recognition of typical problems
- Automatically trigger actions on event
- Summary, snapshot annotation, automatic deobfuscation
- IDE integration
- Time measurement (CPU time, wall time)
- Snapshot directory customization
- Export of profiling results to HTML, CSV, XML, plain text
- Profiler API
- Command line tool to control profiling
- FAQ: How to profile in my scenario?
- Profiling in Docker container
- Profiling in Amazon EC2 instance
Profiling in Docker container
To profile a Java application or a server running in a Docker container, you should run it with the profiler agent, and then use remote profiling in the profiler UI, as described below.
On Docker side
(1) Add few lines to your image's
(1.1) Install YourKit Java Profiler agents:
RUN wget https://www.yourkit.com/download/docker/YourKit-JavaProfiler-2021.3-docker.zip -P /tmp/ && \ unzip /tmp/YourKit-JavaProfiler-2021.3-docker.zip -d /usr/local && \ rm /tmp/YourKit-JavaProfiler-2021.3-docker.zip
(1.2) If you use Alpine Linux, install
RUN apk add --no-cache libc6-compat
libc6-compatinstalls some shared libraries to
/lib64. This directory should be explicitly added to the shared library search path.
(1.3) Expose the profiler agent port. For example, if you specify the port with the agent startup option
port=10001(see below), add the following line.
Note: we use the same example port 10001 throughout these instructions. If you decide to change it, please ensure you have changed it everywhere.
(1.4) Load the agent to the JVM by adding the Java command line option
For example, if you start your application with
java -jar my-app.jar
...do it like this:
java -agentpath:/usr/local/YourKit-JavaProfiler-2021.3/bin/linux-x86-64/libyjpagent.so=port=10001,listen=all -jar my-app.jar
Please find detailed description of how to specify
-agentpathand choose the agent startup options here.
(2) After modifying
Dockerfile, don't forget to build the container.
(3) While running your Docker container make the agent port visible with the option
docker run -p 10001:10001 your-docker
Connect to the profiled application
When the application is running in the container, connect to it from the profiler UI to perform profiling.
Note: if you're running Docker locally on your developer machine,
create a remote connection to
Notes on a special case: a container with restricted home directory
For security reasons, the user home directory in a docker container may not exist or be read-only.
The profiler agent log file neither can be created in its normal location
Should you need the agent log file for troubleshooting purposes, specify a writable
directory for it with the startup option logdir.