0

我正在用 Java 编写一个简单的服务器应用程序,现在我正在使用Apache 基准进行一些基准测试。

启动后服务器使用的常驻内存大约为40M。我提出了一系列 1000 个请求(100 个并发请求)。在每个系列之后,我再次检查内存使用情况。结果对我来说似乎很奇怪。

在基准测试的第一次运行期间,99% 的请求在大约 20 毫秒内处理,其余 1% 的请求在大约 300 毫秒内处理(!)。同时内存使用量增长。在 5-7 次运行后,这种增长停止在 120M 并且请求开始运行得更快——每个请求大约 10 毫秒。此外,当我增加请求数时,时间和内存值保持不变。

为什么会发生这种情况?如果发生内存泄漏,那么我的服务器将需要越来越多的资源。我只能建议这是因为一些自适应 JVM 内存分配机制会提前增加堆大小。

4

1 回答 1

2

堆从 开始Xms并根据需要增长到指定的 limit Xmx

JVM 需要一段时间来“警告”是正常的——各种优化都发生在运行时。

如果记忆爬升到一个点然后停止爬升,你就没事了。

如果内存无限增长并且程序最终抛出 anOutOfMemoryError那么你就有问题了。

从您的描述看来,前者是真的,所以没有内存泄漏。

于 2013-04-21T23:21:48.383 回答