前提条件:
CATALINA_OPTS="$CATALINA_OPTS -Xms128m -Xmx512m -XX:NewSize=64m -XX:MaxNewSize=128m -Xss512k -XX:+UseParallelGC -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:MaxMetaspaceSize=512m -XX:-TieredCompilation -XX:ReservedCodeCacheSize=512m"top util用于java进程内存使用情况跟踪当我连续3次开始加载测试时,我观察(使用top)java进程增加了大量已用内存:
所有这些时间堆大小都是有限的,JProfiler确认 - 堆大小不超过512Mb.
这是JProfiler的截图.底部的红色数字是java进程使用的内存大小(根据top).

问题是:为什么java进程在工作时始终不断增加内存使用量?
谢谢!
UPD#1:关于可能的重复:他们have confirmed that this only happens on Solaris.但我使用的是Ubuntu 16.10.同样,尖锐的问题没有一个可以解释问题原因的答案.
UPD#2:暂停一段时间后我不得不回到这个问题.现在我使用pmaputil来进行java进程使用的内存转储.我有三个转储:在测试运行之前,在第一次测试执行之后和在执行一些N次测试之后.测试它们会为应用程序产生大量流量.所有转储都在这里:https://gist.github.com/proshin-roman/752cea2dc25cde64b30514ed9ed9bbd0.它们非常庞大,但最有趣的东西是第8行的堆大小:它需要282.272 Kb在测试之前,3.036.400 Kb最后 - 超过10倍的差异!每次运行测试时它都在增长.同时堆大小是恒定的(根据JProfiler/VisualVM).我有什么选择才能找到导致此问题的原因?调试JVM?我试图找到任何方法来"看"这段内存,但失败了.所以:
[heap]内存段的内容吗?我会很感激有关此问题的任何提示.谢谢大家!
UPD#3:使用jemalloc(感谢@ivan的想法)我得到了下一张图片: 

看起来我的问题与此处描述的几乎相同:http …