我们在生产中运行Java应用程序的虚拟机上存在一些内存泄漏问题,旧的Gen堆使用量每天都在快速增长,所以我想创建堆转储来分析它.
但是,我注意到VisualVM将在堆转储之前执行完整的GC,这将清除旧的Gen,在这种情况下,堆转储将是无用的.
我还尝试使用以下命令:
jmap -dump:live,format = b,file = heap.bin
它还将触发完整的GC.
请问是否有一种方法可以在没有完整GC(或没有GC)的情况下创建堆转储?或者有没有更好的方法来分析内存泄漏?
JDK版本:1.7.0_45
谢谢.
我是Jmeter的新手并且对这4个设置感到困惑:
调度程序中的持续时间
Thread Group 1: # of threads:1, ramp up period:0, loop count:5, no scheduler
Thread Group 2: # of threads:5, ramp up period:0, loop count:1, no scheduler
Thread Group 3: # of threads:1, ramp up period:1s, loop count:5, no scheduler
Thread Group 4: # of threads:5, ramp up period:5s, loop count:1, no scheduler
Thread Group 5: # of threads:1, ramp up period:1s, loop count:forever, duration in scheduler:5s
Thread Group 6: # of threads:5, ramp up period:5s, …Run Code Online (Sandbox Code Playgroud)我们有几个在生产环境中运行数据服务的VM,客户端向数据服务发送Restful HTTP请求,负载比较重(通常每主机每秒500个请求),并且每个VM上的负载始终保持平衡。我们在所有主机上都具有相同的配置(2个CPU,-Xms2048m -Xmx4096m -XX:MaxPermSize = 192m -XX:NewSize = 512m -XX:MaxNewSize = 512M -XX:+ UseConcMarkSweepGC -XX:+ CMSClassUnloadingEnabled -XX:+ HeapDumpOnOutOfMemoryError)
两天前,我们看到其中5台VM的旧发电堆使用量开始增长(每天300 MB),其他VM上的旧发电堆使用量保持不变(大约80 MB),我们正在尝试找出根本原因,可能是我问这是内存泄漏问题还是正常情况?老一代的内存使用率增长是否总是意味着Java中的内存泄漏?
谢谢。
更新:我们昨天刚刚重新启动了这5台主机,所有主机上的旧发电堆使用率都与其他主机恢复正常,但是,在今天早晨出现高峰负载之后,其中一台的旧发电堆使用率又开始增长。 ..