Question & Answer
Question
IBM Java for Linux HowTo: Tracking Native Memory on Java 6 and 7 for Linux
Answer
This document provides step-by-step instructions for enabling tracking of native memory for IBM Java 6 and 7 on Linux.
Generic Term | Replace with |
JAVA_PATH PID |
The parent Java installation directory (e.g. /opt/ibm/java-ppc64_70). The process id of the active Java process (e.g. use "ps" command to check the PID column to identify the process). |
Background
The Java 6 and 7 runtimes allocate native memory for the JIT compiled code, classes, class loaders, JNI allocations, direct byte buffer allocations, and thread stack allocations, etc. If you believe you are running out of native memory, you can use the Linux Native Tracker(LNT) library to trace memory allocations on the native heap. The Linux Native Tracker library, libnative_tracker.so can be built from the Linux Native Trackers source code (LinuxNativeTracker.zip), available at ftp://ftp.software.ibm.com/linux/tools/java/tools/LinuxNativeTracker.zip
Setup
JAVA_PATH/bin/java -verson
Ensure that it shows "Java 7 or Java 6"
Example: java -version
java version "1.7.0"
Unpack the tracker
tar xzf nativetracker.tgz
(Optional )Set the plaform
The makefile will detect the machine type and build the native tracker for the appropriate build. If a different build is desired, for example a 32 bit build while running on a 64 bit machine, set the PLATFORM value.
export PLATFORM=arch where arch is typically i686 or ppc
Enter the tracker directory
cd LinuxNativeTracker
Set the Java directory
export SDK=JAVA_PATH
Build the library
make
Once the build completes, install it
make install
The libnative_tracker.so will be moved to the JAVA_PATH/jre/lib/arch/ directory
Enable LNT on the Linux shell:
export IBM_NATIVETOOLS=memory_tracking
This option enables the memory tracking.
export PROFILER_WRITE_PERIOD_SECONDS=n
where "n" specifies the duration in seconds between writes. By default, data is written every 600 seconds (10 minutes)
export PROFILER_STACK_DEPTH=n
where "n" specifies how many frames will be listed in the stack trace. By default, the stack depth is 7.
Start your java application as normal. For example: java HelloWorld
Tracker output is redirected to the output file, native_memory_PID
Monitor
top -p PID -d delay-time -n iterations
where PID is the process id, delay-time is the time between writes, and iterations is the number of writes
For instance, to monitor a java process id, 10303, every ten minutes for a two days enter:
top -p 10303 -d 600 -n 288 -b >> process_size.log
Once the process size grows to three times the application's Xmx (max heap) value, gracefully exit the application.
Package
tar -cf - process_size.log native_memory_PID | gzip -c >PMR.MM-DD-YY.tgz
where PMR is the pmr number (ex. 44722,333,000)
and MM-DD-YY is the month, day, and year
Upload
Upload the packaged data or individual files to an IBM secured server using one of upload options provided on the "MustGather: How to upload diagnostic data and testcases to IBM" web page:
http://www-01.ibm.com/support/docview.wss?uid=isg3T1022619
ACTION
ACTION
ACTION
ACTION
ACTION
ACTION
ACTION
ACTION
ACTION
ACTION
ACTION
ACTION
ACTION
ACTION
ACTION
ACTION
Document Type: | Instruction |
Content Type: | Howto | Troubleshooting | Mustgather | Workaround | FAQ | Alert |
Hardware: | all Power | Power5 | Power6 | Power7 | Power8 |
Operating System: | all Linux Versions |
IBM Java: | all Java Versions | Java 6.0 | Java 6.1 | Java 7.0 | Java 7.1 | Java 8.0 |
Author(s): | John Carver |
Reviewer(s): | John Carver |
Was this topic helpful?
Document Information
Modified date:
17 June 2018
UID
isg3T1024366