我正在用Java编写一个简单的服务器应用程序,并且我正在使用Apache基准现在做一些基准测试。
启动后,服务器使用的驻留内存约为40M。我发出1000个请求(100个并发请求)。每个系列结束后,我会再次检查内存使用情况。这个结果在我看来很奇怪。
在基准测试的第一次运行期间,99%的请求在约20 msecs内处理,其余1%的请求在约300 msecs内处理。与此同时,内存使用量也在增长。在5-7次运行之后,这种增长停止在120M,请求开始运行得更快——每个请求大约10毫秒。此外,当我增加请求数时,三个time和mem值保持不变。
为什么会发生这种情况?如果存在内存泄漏,那么我的服务器将需要越来越多的资源。我只能认为这是因为一些自适应的JVM内存分配机制提前增加了堆大小。
堆从Xms
开始,并根据需要增长,直到指定的限制Xmx
。
JVM需要一段时间来"警告"是正常的——所有的优化都发生在运行时。
如果内存上升到某一点,然后停止上升,则没有问题。
如果内存无限攀升,程序最终抛出OutOfMemoryError
,那么你就有问题了。
从你的描述来看,似乎前者是真的,所以没有内存泄漏。