2011-04-05 57 views
0

我在寫Lucene的包裝器。當頻繁發出搜索請求時,可能會出現「無法爲對象堆預留足夠的空間」。我如何獲得對象堆的大小​​?我該如何解決這個問題?無法爲對象堆預留足夠的空間

+1

[沒有訂的可能重複足夠的空間對象堆](http://stackoverflow.com/questions/4401396/could-not-reserve-enough-space-for-object-heap)(重複甚至具有相同的標題;)) – 2011-04-05 10:55:10

+0

好吧,標題是一樣的,但情況不同。被引用副本中的用戶每次都會得到錯誤。雖然在這裏我們遇到了麻煩,只要我們經常使用launchind索引器 – Eugeny89 2011-04-05 11:01:35

+0

但解決方案可能適用:碎片內存可防止創建足夠的對象堆。你的操作系統是什麼? 32位Windows系統對堆大小有一些未知的限制... – 2011-04-05 11:03:44

回答

2

我相信底層問題與SO問題Could not reserve enough space for object heap的良好答案中所描述的相同。

也就是說,JVM試圖向操作系統請求堆內存,操作系統正在拒絕,因爲它已經將所有內存虛擬分配給其他進程。

我期望這是因爲發生在你頻繁地索引:

  • 它增加了系統平均負荷(進程數運行/等待運行),因此
  • 是增加系統的平均承諾虛擬內存資源因此
  • 當新的JVM開始運行索引器時,它使得操作系統更可能說「否」。

當然,這在很大程度上是猜測...


你能做些什麼呢?

  1. 增加用於分頁的光盤文件或分區的大小。
  2. 向機器添加更多物理內存。
  3. 較少運行索引器和/或系統不忙時。
  4. 修剪索引器堆的大小。
  5. 將一些其他負載移到另一臺機器上。

其中一些需要謹慎處理,因爲它們可能會以各種方式影響整體系統性能。

(順便說一句,我不認爲切換到64位操作系統將一定能幫助的,肯定運行64位JVM 不會幫助...)

+0

那麼,我執行「免費-m」。事實的變化是測試服務器上只有256Mb的內存。 – Eugeny89 2011-04-05 11:40:48

相關問題