W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
優(yōu)化 JVM 可能是從 Solr 安裝中獲得最大的一個關鍵因素。
配置您的JVM可能是一個復雜的話題,完整的討論超出了本文檔的范圍。幸運的是,大多數(shù)現(xiàn)代JVM都非常善于利用默認設置來充分利用可用資源。以下介紹的部分包含一些提示,當默認值對您的情況不是最佳時,這些提示可能會有所幫助。
有關提高Solr性能的更多常規(guī)信息,請參閱:https://wiki.apache.org/solr/SolrPerformanceFactors。
最重要的JVM配置設置是那些確定允許分配的內存量的設置。有兩個主要的命令行選項可以為JVM設置內存限制。這些是-Xms設置JVM內存堆的初始大小,以及-Xmx設置允許堆增長的最大大小。
如果您的Solr應用程序需要的堆空間比使用 Xms 選項指定的多,則堆將自動增長。不指定初始大小并根據(jù)需要讓堆增長是非常合理的。唯一的缺點是啟動時間稍慢,因為應用程序需要更長的時間來初始化。如果將初始堆大小設置為高于默認值,則可能會避免一系列堆擴展,這通常會導致在應用程序向上旋轉時在堆內來回執(zhí)行對象。
用-Xmx設置的最大堆大小更重要,如果內存堆增長到這個大小,對象創(chuàng)建可能開始失敗,并拋出 OutOfMemoryException。將此限制設置得太低可能會在應用程序中造成虛假錯誤,但將其設置得太高也可能是有害的。
當堆達到最大大小時,并不總是會導致錯誤。在發(fā)生錯誤之前,JVM將首先嘗試回收已經存在于堆中的任何可用空間。只有當所有垃圾收集嘗試失敗時,您的應用程序才會看到異常。只要最大值足夠大,您的應用程序將無誤運行,但如果強制垃圾回收頻繁進行,運行速度可能會更慢。
堆越大,執(zhí)行垃圾收集的時間就越長。這可能意味著輕微的隨機停頓,或者在極端的情況下,“freeze the world”暫停一分鐘或更長時間。實際上,即使有更多的物理內存可用,對于超過2GB的堆大小,這也會成為嚴重的問題。在健壯的硬件上,運行多個JVM可能會得到更好的結果,而不僅僅是具有大內存堆的結果。一些專門的JVM實現(xiàn)可能具有自定義的垃圾收集算法,這些算法在大堆中效果更好。請參考您的 JVM 供應商的文檔。
設置最大堆大小時,請注意不要讓JVM占用所有可用的物理內存。如果JVM進程空間增長過大,操作系統(tǒng)將開始交換它,這將嚴重影響性能。另外,操作系統(tǒng)使用未分配給用于文件系統(tǒng)緩存和其他目的的進程的內存空間。這對于I/O密集型應用程序尤其重要,例如 Lucene / Solr。索引越大,操作系統(tǒng)的文件系統(tǒng)緩存就越受益。它可能需要一些實驗來確定JVM的堆空間與OS使用的內存空間之間的最佳權衡。
在具有多個CPU/內核的系統(tǒng)上,調整堆的布局或垃圾收集器的行為也是有益的。調整堆中的生成池的相對大小會影響GC掃描的發(fā)生頻率以及它們是否同時運行。配置垃圾收集器應該如何工作的各種設置可以極大地降低運行時的整體性能影響。Sun的網站上有關于這個主題的很多很好的信息。一個好的開始就在這里:Oracle的Java HotSpot垃圾收集。
如果您使用Sun的JVM,則請在啟動Solr時添加-server命令行選項。這告訴JVM,它應該為長時間運行的服務器進程進行優(yōu)化。如果系統(tǒng)上的Java運行時是JRE,而不是完整的JDK發(fā)行版(包括javac其他開發(fā)工具),則可能不支持-server JVM選項。通過在顯示的使用率消息中運行 java -help 并查找-server作為可用選項來測試這一點。
查看服務器正在使用的JVM設置以及其他有用信息的一個好方法是使用:管理 RequestHandler、solr/admin/system。這個請求處理程序將顯示豐富的服務器統(tǒng)計信息和設置。
您還可以使用與 Java 管理擴展 (JMX) 兼容的任何工具。有關更多信息,請參見使用 JMX 和 Solr 的部分。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: