我在给Lucene写包装纸。当频繁发出搜索请求时,可能会抛出“无法为对象堆保留足够的空间”。如何获得对象堆的大小​​?我该如何解决呢?

最佳答案

我认为基本问题与SO问题Could not reserve enough space for object heap的良好答案中所述的问题相同。

也就是说,JVM试图向操作系统请求堆的内存,而操作系统却拒绝了,因为它已将所有虚拟内存分配给其他进程。

我希望在频繁启动索引器时会发生这种情况,原因是:


它增加了系统的平均负载(正在运行/正在等待运行的进程数),因此
它正在增加系统的平均已承诺虚拟内存资源,因此
当新的JVM开始运行索引器时,操作系统更有可能不得不说“ No”。


当然,这在很大程度上是推测...



你能为这个做什么?


增加用于分页的光盘文件或分区的大小。
向计算机添加更多物理内存。
和/或在系统不忙时,较少运行索引器。
修剪索引器堆的大小。
将其他一些负载移至另一台计算机上。


其中一些需要谨慎进行,因为它们可能以各种方式影响整体系统性能。

(顺便说一句,我认为切换到64位操作系统不一定有帮助,而运行64位JVM当然也无济于事...)

10-06 13:18