jprofiler线程锁数量和大小一直在增加正常吗

之前内存溢出过一次,现在在排查是哪里的问题,使用jprofiler发现Recorded objects 中包 java.until.concurrent.locks的实例数和size一直在有规律的增加,很慢,memory也一直在缓慢增加,点击GC通知回收资源后,java.until.concurrent.locks的实例数和size恢复至86、2700bytes,memory也会减少,但是之后又是一直增加

第1个回答  2018-05-25
查看GC 及jvm配置的方法:
1、查看GC的工具:
JVisualVM是JDK 6 update 7之后推出的一个工具,它类似于JProfiler的工具,基于此工具可查看内存的消耗情况、线程的执行状况及程序中消耗CPU、内存的动作。
在内存分析上,JVisualVM的最大好处是可通过安装VisualGC插件来分析GC趋势、内存消耗详细状况。
VisualGC的运行如图所示。
从图中可看到各区的内存消耗状况及GC Time的图表,其提供的Histogram视图对于调优也有很大帮助。
2、查看jvm配置
jinfo -flag HeapDumpBeforeFullGC 29167 #查看HeapDumpBeforeFullGC
jinfo: 查看和修改JVM参数
Usage:
jinfo <option> <pid>
(to connect to a running process)
where <option> is one of:
-flag <name> to print the value of the named VM flag
-flag [+|-]<name> to enable or disable the named VM flag
-flag <name>=<value> to set the named VM flag to the given value
-h | -help to print this help message
[@zw-90-156 ——]$ jmap 1282
Attaching to process ID 1282, please wait…
Debugger attached successfully.
Server compiler detected.
JVM version is 20.14-b01
0x0000000040000000 49K /opt/jdk1.6.0_43/bin/java
0x00000037a5600000 140K /lib64/ld-2.5.so
0x00000037a5a00000 1681K /lib64/libc-2.5.so
0x00000037a5e00000 22K /lib64/libdl-2.5.so
0x00000037a6200000 600K /lib64/libm-2.5.so
0x00000037a6600000 142K /lib64/libpthread-2.5.so
0x00000037a6e00000 52K /lib64/librt-2.5.so
0x00000037aa600000 111K /lib64/libnsl-2.5.so
0x00002aaaaaac3000 64K /opt/jdk1.6.0_43/jre/lib/amd64/libverify.so
0x00002aaaaabd2000 229K /opt/jdk1.6.0_43/jre/lib/amd64/libjava.so
0x00002aaaaad1a000 52K /lib64/libnss_files-2.5.so
0x00002aaaaaf25000 90K /opt/jdk1.6.0_43/jre/lib/amd64/libzip.so
0x00002aaaaf3d2000 38K /opt/jdk1.6.0_43/jre/lib/amd64/libmanagement.so
0x00002aaaaf4d9000 110K /opt/jdk1.6.0_43/jre/lib/amd64/libnet.so
0x00002ad21d600000 47K /opt/jdk1.6.0_43/jre/lib/amd64/jli/libjli.so
0x00002ad21d70d000 13050K /opt/jdk1.6.0_43/jre/lib/amd64/server/libjvm.so本回答被网友采纳

华为技术大佬教你使用Jprofile解析dump文件
生成dump文件时,可以使用JProfiler连接到JVM,选择Heap Walker,点击Take snapshot图标等待即可。如果内存很大,JProfiler参数设置不正确导致无法打开,则需要重新生成。内存小的时候可以不考虑这个问题。使用JProfiler生成文件时,连接到JVM后,选择Profiling -> save HPROF snapshot,弹出下拉框保存即可。这时...

java程序内存溢出一般什么原因
如果内存剩余不到40%,JVM就会增大堆到Xmx设置的值,内存剩余超过70%,JVM就会减小堆到Xms设置的值。所以服务器的Xmx和Xms设置一般应该设置相同避免每次GC后都要调整虚拟机堆的大小。假设物理内存无限大,那么JVM内存的最大值跟操作系统有关,一般32位机是1.5g到3g之间,而64位的就不会有限制了。注意:如果Xms超过了Xm...

查看linux物理内存大小查看linux物理内存
1、打开linux系统,在linux的桌面的空白处右击。?2、在弹出的下拉选项里,点击打开终端。?3、在终端窗口中输入free命令,回车后即可查看到系统资源的使用情况。total:总计物理内存的大小 used:已使用多大 free:可用有多少 Shared:多个进程共享的内存总额 Buffers\/cached:磁盘缓存的大小 linux下有什么检测内...

java中为什么实型变量在运算中不会产生溢出的问题 ?
提示:设置NewSize、MaxNewSize相等,"new"的大小最好不要大于"old"的一半,原因是old区如果不够大会频繁的触发"主"GC,大大降低了性能JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1\/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1\/4。解决方法:手动设置Heapsize修改TOMCAT_HOME\/bin\/ca...

如何在api中找到 GC overhead limit exceeded信?
优化代码逻辑也是关键。避免使用循环内部频繁创建和销毁对象,考虑使用集合或数组替代频繁动态调整大小的对象。同时,避免使用递归调用,减少对象引用链,降低垃圾回收压力。在某些情况下,问题可能出在并发处理或线程竞争上。确保线程安全,合理使用线程池和锁机制,避免在高并发环境下资源过度竞争。优化锁的使用...

相似回答