无法为对象堆保留足够的空间

时间:2011-04-05 10:50:58

标签: java lucene

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

1 个答案:

答案 0 :(得分:2)

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

也就是说,JVM正在尝试向操作系统询问堆内存,并且操作系统正在拒绝,因为它已经将所有虚拟内存分配给其他进程。

我希望您经常启动索引器时会发生这种情况,因为:

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

当然,这主要是猜想......


你能做些什么?

  1. 增加用于分页的光盘文件或分区的大小。
  2. 为机器添加更多物理内存。
  3. 不经常运行索引器和/或系统不忙时运行。
  4. 修剪索引器堆的大小。
  5. 将部分其他负载移至另一台机器上。
  6. 其中一些需要小心谨慎,因为它们可能以各种方式影响整体系统性能。

    (顺便说一下,我认为切换到64位操作系统不一定会有所帮助,运行64位JVM肯定不会帮助......)