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