cap_add
即可[root@localhost etl]# cat docker-compose.yml version: ‘2‘ services: powerEtl: image: power-etl:1.0 network_mode: "host" volumes: - /root/etl/:/root/etl/ cap_add: - SYS_PTRACE
打印Java堆概要信息,包括使用的GC算法、堆配置参数和各代中堆内存使用情况
1:jmap -heap pid(下面例子中的pid是1)
[root@localhost /]# docker exec -it 2cf384 /bin/sh / # jps 1 jar 102 Jps / # jmap -heap 1 Attaching to process ID 1, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.202-b08 using thread-local object allocation. Parallel GC with 4 thread(s) Heap Configuration: //堆内存初始化配置 MinHeapFreeRatio = 0 //对应jvm启动参数-XX:MinHeapFreeRatio设置JVM堆最小空闲比率(default 40) MaxHeapFreeRatio = 100 //对应jvm启动参数 -XX:MaxHeapFreeRatio设置JVM堆最大空闲比率(default 70) MaxHeapSize = 2051014656 (1956.0MB) //对应jvm启动参数-XX:MaxHeapSize=设置JVM堆的最大大小 NewSize = 42991616 (41.0MB) //对应jvm启动参数-XX:NewSize=设置JVM堆的‘新生代’的默认大小 MaxNewSize = 683671552 (652.0MB) //对应jvm启动参数-XX:MaxNewSize=设置JVM堆的‘新生代’的最大大小 OldSize = 87031808 (83.0MB) //对应jvm启动参数-XX:OldSize=<value>:设置JVM堆的‘老生代’的大小 NewRatio = 2 //对应jvm启动参数-XX:NewRatio=:‘新生代’和‘老生代’的大小比率 SurvivorRatio = 8 //对应jvm启动参数-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的大小比值 MetaspaceSize = 21807104 (20.796875MB) CompressedClassSpaceSize = 1073741824 (1024.0MB) MaxMetaspaceSize = 17592186044415 MB G1HeapRegionSize = 0 (0.0MB) Heap Usage: //堆内存使用情况 PS Young Generation Eden Space: capacity = 325058560 (310.0MB) //Eden区总容量 used = 241188112 (230.01490783691406MB) //Eden区已使用 free = 83870448 (79.98509216308594MB) //Eden区剩余容量 74.19835736674648% used //Eden区使用比率 From Space: //其中一个Survivor区的内存分布 capacity = 9437184 (9.0MB) used = 7042944 (6.7166748046875MB) free = 2394240 (2.2833251953125MB) 74.62972005208333% used To Space: //另一个Survivor区的内存分布 capacity = 9961472 (9.5MB) used = 0 (0.0MB) free = 9961472 (9.5MB) 0.0% used PS Old Generation //当前的Old区内存分布 capacity = 62390272 (59.5MB) used = 14477120 (13.80645751953125MB) free = 47913152 (45.69354248046875MB) 23.20413028492647% used 21711 interned Strings occupying 2094576 bytes.
2:查看jvm(堆栈)配置
jmap -heap 1(1为pid) 方式一 jinfo -flags 1(1为pid) 方式二
/usr/local/data # jmap -heap 1 Attaching to process ID 1, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.202-b08 using thread-local object allocation. Parallel GC with 4 thread(s) Heap Configuration: MinHeapFreeRatio = 0 MaxHeapFreeRatio = 100 MaxHeapSize = 2051014656 (1956.0MB) NewSize = 42991616 (41.0MB) MaxNewSize = 683671552 (652.0MB) OldSize = 87031808 (83.0MB) NewRatio = 2 SurvivorRatio = 8 MetaspaceSize = 21807104 (20.796875MB) CompressedClassSpaceSize = 1073741824 (1024.0MB) MaxMetaspaceSize = 17592186044415 MB G1HeapRegionSize = 0 (0.0MB) Heap Usage: PS Young Generation Eden Space: capacity = 656408576 (626.0MB) used = 159059424 (151.69088745117188MB) free = 497349152 (474.3091125488281MB) 24.231771158334166% used From Space: capacity = 13631488 (13.0MB) used = 0 (0.0MB) free = 13631488 (13.0MB) 0.0% used To Space: capacity = 13631488 (13.0MB) used = 0 (0.0MB) free = 13631488 (13.0MB) 0.0% used PS Old Generation capacity = 119013376 (113.5MB) used = 26036112 (24.829971313476562MB) free = 92977264 (88.67002868652344MB) 21.876626707908866% used 22674 interned Strings occupying 2488024 bytes. /usr/local/data # jinfo -flags 1 Attaching to process ID 1, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.202-b08 Non-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=130023424 -XX:MaxHeapSize=2051014656 -XX:MaxNewSize=683671552 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=42991616 -XX:OldSize=87031808 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC Command line: -Djava.security.egd=fele:/dev/./urandom
3:jmap分析堆,定位内存溢出的具体类
jmap -histo:live 1 (1:pid)
上图可以看出 导致内存溢出的是Test类
将定位详情输出到指定文件中查看 /usr/local/data # jmap -histo:live 1 > 1.txt (1.txt为要输出的文件内容) /usr/local/data # ls 1.txt /usr/local/data #
4:打印等待回收的对象
/usr/local/data # jmap -finalizerinfo 1 (1为pid) Attaching to process ID 1, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.202-b08 Number of objects pending for finalization: 0
//说明当前F-QUEUE队列中并没有等待Fializer线程执行finalizer方法的对象
jvm调优-jmap工具jinfo工具(在docker容器中使用)
原文:https://www.cnblogs.com/s6-b/p/14814531.html