1、CPU使用率
CPU使用率是指在一段時(shí)間內(nèi)CPU執(zhí)行程序的百分比,它是衡量系統(tǒng)資源利用率的一種指標(biāo)。
1.1 詳細(xì)說明:
在Elasticsearch中,高的CPU使用率通常意味著節(jié)點(diǎn)正在執(zhí)行大量的計(jì)算任務(wù),這可能是因?yàn)樗饕退阉鞑僮鞯呢?fù)載較大,也可能是因?yàn)楣?jié)點(diǎn)正在進(jìn)行數(shù)據(jù)復(fù)制和分片重新平衡等任務(wù)。因此,高的CPU使用率通常是Elasticsearch性能瓶頸的一個(gè)指標(biāo)。
1.2 注意:
有以下一些情況可能會(huì)導(dǎo)致 Elasticsearch 的 CPU 使用率變高:
-
查詢負(fù)載增加:當(dāng) Elasticsearch 集群承受的查詢負(fù)載增加時(shí),會(huì)導(dǎo)致 CPU 使用率變高。這通常發(fā)生在索引大量新數(shù)據(jù)或者搜索流量增加的情況下。
-
索引負(fù)載增加:當(dāng) Elasticsearch 集群承受的索引負(fù)載增加時(shí),會(huì)導(dǎo)致 CPU 使用率變高。這通常發(fā)生在索引大量新數(shù)據(jù)的情況下。
-
GC:當(dāng) Elasticsearch 的 Java 進(jìn)程發(fā)生垃圾回收(GC)時(shí),會(huì)導(dǎo)致 CPU 使用率變高。GC 是清理 Java 堆內(nèi)存中不再使用的對(duì)象,它是 Java 程序中自帶的機(jī)制,當(dāng) Java 堆內(nèi)存中的對(duì)象數(shù)量增加時(shí),GC 的頻率和時(shí)間也會(huì)相應(yīng)增加。
-
機(jī)器性能不足:當(dāng) Elasticsearch 部署的機(jī)器性能不足時(shí),會(huì)導(dǎo)致 CPU 使用率變高。例如,CPU 處理器的速度較慢,內(nèi)存不足,磁盤 I/O 較慢等。
-
插件/腳本等造成的性能問題:當(dāng) Elasticsearch 使用的插件或腳本存在性能問題時(shí),會(huì)導(dǎo)致 CPU 使用率變高。在某些情況下,某些插件和腳本可能會(huì)影響 Elasticsearch 的性能,例如使用復(fù)雜的腳本或者調(diào)用較慢的第三方庫。
總之,當(dāng) Elasticsearch 集群處理數(shù)據(jù)量增加、索引負(fù)載增加、查詢負(fù)載增加、GC 或者機(jī)器性能不足等情況時(shí),會(huì)導(dǎo)致 CPU 使用率變高。為了避免這種情況的發(fā)生,可以采取一些優(yōu)化策略,如添加更多的節(jié)點(diǎn)、升級(jí)硬件等。
1.3 當(dāng)CPU使用率升高時(shí)如何處理?
-
調(diào)整集群配置??梢酝ㄟ^調(diào)整Elasticsearch集群的配置來減少CPU的使用率。例如,可以調(diào)整查詢的并發(fā)數(shù)、增加分片的數(shù)量、減少索引的副本數(shù)等,來減輕CPU的負(fù)擔(dān)。
-
優(yōu)化查詢語句。復(fù)雜的查詢語句可能會(huì)導(dǎo)致CPU的使用率飆升。因此,可以考慮優(yōu)化查詢語句,使用更簡單、更高效的查詢語句來減少CPU的使用率。
-
關(guān)閉不必要的插件。Elasticsearch的插件可以擴(kuò)展其功能,但某些插件可能會(huì)占用大量的CPU資源。因此,可以考慮關(guān)閉某些不必要的插件來減少CPU的使用率。
-
增加硬件資源。如果Elasticsearch集群的CPU使用率經(jīng)常超過限制,可能需要考慮增加硬件資源,例如增加CPU核心數(shù)量或升級(jí)CPU型號(hào),以提高集群的性能。
-
增加集群規(guī)模。如果Elasticsearch集群的CPU使用率經(jīng)常超過限制,還可以考慮增加集群規(guī)模,將負(fù)載分?jǐn)偟蕉嗯_(tái)機(jī)器上,以提高集群的性能。
-
調(diào)整集群中節(jié)點(diǎn)的負(fù)載均衡策略。Elasticsearch的負(fù)載均衡策略可能會(huì)導(dǎo)致某些節(jié)點(diǎn)的CPU使用率過高。因此,可以考慮調(diào)整負(fù)載均衡策略,將負(fù)載更均衡地分配到各個(gè)節(jié)點(diǎn)上。
1.4 當(dāng)Elasticsearch集群的CPU使用率升高時(shí),可以考慮調(diào)整哪些參數(shù)?
-
indices.store.throttle.max_bytes_per_sec: 索引寫入速度控制參數(shù),用于限制每秒寫入的數(shù)據(jù)量。如果寫入速度太快,可能會(huì)導(dǎo)致CPU使用率過高。可以降低該參數(shù)的值來減緩寫入速度。該參數(shù)的最優(yōu)值取決于硬件配置和寫入負(fù)載,一般建議將其設(shè)置為每秒寫入速率的80%到90%。例如,如果每秒寫入速率為50MB/s,則該參數(shù)的最優(yōu)值可能在40MB/s到45MB/s之間。
-
indices.memory.index_buffer_size: 索引緩沖區(qū)大小。如果該值太小,會(huì)導(dǎo)致頻繁的IO操作,從而增加CPU負(fù)載??梢赃m當(dāng)增大該值來減少IO操作。該參數(shù)的最優(yōu)值取決于可用內(nèi)存、索引大小和查詢負(fù)載等因素,一般建議將其設(shè)置為可用內(nèi)存的20%到30%。例如,如果集群有100GB的可用內(nèi)存,該參數(shù)的最優(yōu)值可能在20GB到30GB之間。
-
indices.fielddata.cache.size: 字段數(shù)據(jù)緩存大小。如果字段數(shù)據(jù)緩存過小,可能會(huì)導(dǎo)致頻繁的磁盤讀取,從而增加CPU負(fù)載??梢赃m當(dāng)增大該值來減少磁盤讀取操作。該參數(shù)的最優(yōu)值取決于字段數(shù)據(jù)大小和查詢負(fù)載等因素,一般建議將其設(shè)置為可用內(nèi)存的20%到30%。例如,如果集群有100GB的可用內(nèi)存,該參數(shù)的最優(yōu)值可能在20GB到30GB之間。
-
indices.queries.cache.size: 查詢緩存大小。如果查詢緩存過小,可能會(huì)導(dǎo)致頻繁的查詢操作,從而增加CPU負(fù)載??梢赃m當(dāng)增大該值來減少查詢操作。該參數(shù)的最優(yōu)值取決于查詢負(fù)載,一般建議將其設(shè)置為查詢緩存占用可用內(nèi)存的20%到30%。例如,如果集群有100GB的可用內(nèi)存,該參數(shù)的最優(yōu)值可能在20GB到30GB之間。
-
indices.recovery.max_bytes_per_sec: 索引恢復(fù)速度控制參數(shù),用于限制每秒恢復(fù)的數(shù)據(jù)量。如果恢復(fù)速度太快,可能會(huì)導(dǎo)致CPU使用率過高。可以降低該參數(shù)的值來減緩恢復(fù)速度。該參數(shù)的最優(yōu)值取決于恢復(fù)速度和集群負(fù)載,一般建議將其設(shè)置為每秒恢復(fù)速率的80%到90%。例如,如果每秒恢復(fù)速率為50MB/s,則該參數(shù)的最優(yōu)值可能在40MB/s到45MB/s之間。
-
indices.search.slowlog.threshold.query.warn: 查詢慢日志告警閾值。如果查詢操作太慢,可能會(huì)導(dǎo)致CPU使用率過高。可以降低該參數(shù)的值來快速發(fā)現(xiàn)查詢慢的問題。該參數(shù)的最優(yōu)值取決于查詢負(fù)載和業(yè)務(wù)需求,一般建議將其設(shè)置為查詢執(zhí)行時(shí)間的90%到95%。例如,如果查詢執(zhí)行時(shí)間的中位數(shù)為1秒,則該參數(shù)的最優(yōu)值可能在900ms到950ms之間。
2、內(nèi)存使用率
當(dāng)前使用的內(nèi)存量占可用內(nèi)存總量的比例。
2.1 詳細(xì)說明:
-
Elasticsearch 會(huì)使用 JVM 來運(yùn)行,因此 JVM 的內(nèi)存分配對(duì) Elasticsearch 的性能非常重要。默認(rèn)情況下,Elasticsearch 的 JVM 內(nèi)存分配為 1GB,但在生產(chǎn)環(huán)境中通常需要將其調(diào)整為更大的值。
-
Elasticsearch 將內(nèi)存分為兩部分:堆內(nèi)存和非堆內(nèi)存。堆內(nèi)存用于存儲(chǔ)文檔、字段和查詢緩存等數(shù)據(jù),非堆內(nèi)存用于存儲(chǔ)索引緩存、文件系統(tǒng)緩存和其他內(nèi)部緩存等數(shù)據(jù)。
-
Elasticsearch 會(huì)自動(dòng)管理緩存,以確保常用的數(shù)據(jù)在內(nèi)存中。當(dāng)內(nèi)存不足時(shí),Elasticsearch 會(huì)將較少使用的數(shù)據(jù)從內(nèi)存中移除,并將其存儲(chǔ)到磁盤上。
-
對(duì)于單個(gè)節(jié)點(diǎn)的 Elasticsearch 集群,通常建議將 JVM 堆內(nèi)存設(shè)置為總內(nèi)存的一半,以留出一定的空間給操作系統(tǒng)和其他進(jìn)程使用。而對(duì)于大型集群,建議將 JVM 堆內(nèi)存設(shè)置為 30GB 到 32GB。
2.2 注意:
關(guān)于Elasticsearch的內(nèi)存使用率,以下因素可能會(huì)對(duì)其產(chǎn)生影響:
-
索引的大小和數(shù)量:索引的大小和數(shù)量會(huì)直接影響 Elasticsearch 使用的內(nèi)存量。較大的索引需要更多的內(nèi)存來處理,而較小的索引則需要較少的內(nèi)存。
-
查詢負(fù)載:查詢負(fù)載是指 Elasticsearch 在任何給定時(shí)刻處理的查詢數(shù)量和類型。更多的查詢負(fù)載需要更多的內(nèi)存來處理和緩存查詢結(jié)果。
-
JVM 堆內(nèi)存大小:Elasticsearch 在 JVM 堆內(nèi)存中緩存文檔、字段和查詢結(jié)果等數(shù)據(jù),堆內(nèi)存的大小直接影響 Elasticsearch 的性能。通常,增加堆內(nèi)存大小可以提高 Elasticsearch 的性能,但是在可用內(nèi)存受限的情況下,過大的堆內(nèi)存大小可能會(huì)導(dǎo)致系統(tǒng)負(fù)載過重,甚至導(dǎo)致 OutOfMemoryError 錯(cuò)誤。
-
硬件資源:Elasticsearch 的內(nèi)存使用率還受限于硬件資源,包括 CPU、磁盤和網(wǎng)絡(luò)帶寬等。如果硬件資源不足,可能會(huì)導(dǎo)致 Elasticsearch 性能下降,甚至無法正常運(yùn)行。
-
Elasticsearch 版本:Elasticsearch 版本之間的內(nèi)存使用率也可能有所不同。較新的版本通常會(huì)更有效地利用內(nèi)存,提高性能和穩(wěn)定性。
綜上所述,Elasticsearch 的內(nèi)存使用率受多種因素影響,需要根據(jù)具體情況進(jìn)行分析和調(diào)整,以優(yōu)化性能和穩(wěn)定性。
2.3 當(dāng)內(nèi)存使用率升高時(shí)如何處理?
-
檢查Elasticsearch集群中是否有索引或搜索查詢的負(fù)載異常,這可能導(dǎo)致內(nèi)存使用率飆升。可以使用Elasticsearch的監(jiān)控工具或REST API來查看負(fù)載和性能指標(biāo),并識(shí)別問題所在。
-
調(diào)整JVM的堆內(nèi)存大小。JVM是Elasticsearch節(jié)點(diǎn)的內(nèi)存管理器,可以通過調(diào)整JVM的堆內(nèi)存大小來控制Elasticsearch的內(nèi)存使用率。可以通過在elasticsearch.yml文件中設(shè)置-Xms和-Xmx參數(shù)來增加或減少JVM的堆內(nèi)存大小。注意,不要將JVM的堆內(nèi)存大小設(shè)置過小,否則會(huì)影響Elasticsearch的性能。
-
減小索引分片的數(shù)量。索引分片是Elasticsearch的分布式存儲(chǔ)機(jī)制,但太多的分片會(huì)占用過多的內(nèi)存資源。可以通過減小索引分片的數(shù)量來降低內(nèi)存使用率。
-
使用更高效的查詢。復(fù)雜的查詢可能需要占用更多的內(nèi)存資源,因此,可以嘗試使用更高效的查詢來降低內(nèi)存使用率。例如,使用過濾器而不是查詢語句來獲取數(shù)據(jù),或使用聚合操作來減少數(shù)據(jù)的返回。
-
增加硬件資源。如果Elasticsearch集群的內(nèi)存使用率經(jīng)常超過限制,可能需要考慮增加硬件資源,例如增加內(nèi)存或CPU,以滿足集群的性能需求。
2.4 當(dāng)Elasticsearch集群的內(nèi)存使用率升高時(shí),可以考慮調(diào)整哪些參數(shù)?
-
indices.memory.index_buffer_size:該參數(shù)控制索引模塊使用的內(nèi)存緩沖區(qū)大小。如果內(nèi)存使用率升高,可以嘗試降低該參數(shù)的值,以減少索引模塊占用的內(nèi)存。不過,降低該參數(shù)的值可能會(huì)降低索引性能。此參數(shù)應(yīng)該根據(jù)索引的大小和使用情況進(jìn)行調(diào)整。建議將其設(shè)置為每個(gè)索引的可用堆內(nèi)存的5%-10%。
-
indices.fielddata.cache.size:該參數(shù)控制字段數(shù)據(jù)緩存的大小。如果內(nèi)存使用率升高,可以嘗試降低該參數(shù)的值,以減少字段數(shù)據(jù)緩存占用的內(nèi)存。不過,降低該參數(shù)的值可能會(huì)降低查詢性能。此參數(shù)應(yīng)該設(shè)置為盡可能大的值,以利用可用的內(nèi)存來緩存字段數(shù)據(jù)。建議設(shè)置為10%-30%的可用堆內(nèi)存。
-
indices.queries.cache.size:該參數(shù)控制查詢緩存的大小。如果內(nèi)存使用率升高,可以嘗試降低該參數(shù)的值,以減少查詢緩存占用的內(nèi)存。不過,降低該參數(shù)的值可能會(huì)降低查詢性能。此參數(shù)應(yīng)該設(shè)置為盡可能大的值,以利用可用的內(nèi)存來緩存查詢。建議設(shè)置為10%-30%的可用堆內(nèi)存。
-
indices.breaker.*:該參數(shù)控制Elasticsearch使用的熔斷器(circuit breaker)閾值。熔斷器是一種保護(hù)機(jī)制,用于防止過度使用內(nèi)存和磁盤等資源。如果內(nèi)存使用率升高,可以嘗試調(diào)整熔斷器閾值,以避免過度使用內(nèi)存。
-
indices.recovery.max_bytes_per_sec:該參數(shù)控制恢復(fù)速度。如果內(nèi)存使用率升高,可以嘗試降低該參數(shù)的值,以降低恢復(fù)操作占用的內(nèi)存。 此參數(shù)應(yīng)該根據(jù)網(wǎng)絡(luò)帶寬進(jìn)行調(diào)整,以確?;謴?fù)操作不會(huì)占用過多的內(nèi)存。建議將其設(shè)置為網(wǎng)絡(luò)帶寬的70%-80%。
3、磁盤使用率
磁盤使用率是指已用磁盤空間和可用磁盤空間之間的比率,通常以百分比形式表示
3.1 詳細(xì)說明:
關(guān)于磁盤使用率可詳細(xì)描述的部分較少,這里說明一下常見的幾種磁盤類型:
-
機(jī)械硬盤(HDD):機(jī)械硬盤是一種傳統(tǒng)的存儲(chǔ)設(shè)備,使用旋轉(zhuǎn)的磁盤和移動(dòng)的磁頭來讀寫數(shù)據(jù)。它們相對(duì)較便宜,但速度較慢,因此不適合對(duì)性能要求較高的應(yīng)用。
-
固態(tài)硬盤(SSD):固態(tài)硬盤使用閃存來存儲(chǔ)數(shù)據(jù),速度比機(jī)械硬盤更快,因此可以提供更好的性能。它們相對(duì)較昂貴,但在需要高性能的應(yīng)用場(chǎng)景中通常更受歡迎。
-
NVMe硬盤:NVMe硬盤是一種專為固態(tài)硬盤設(shè)計(jì)的高速接口,比SATA接口的固態(tài)硬盤更快,因此提供更高的性能。
-
分布式文件系統(tǒng):Elasticsearch還支持使用分布式文件系統(tǒng)作為存儲(chǔ)后端,如Hadoop Distributed File System(HDFS)和Amazon S3。這些系統(tǒng)通常用于大規(guī)模數(shù)據(jù)存儲(chǔ)和分析,但也可以用于Elasticsearch。
3.2 注意:
-
數(shù)據(jù)量:Elasticsearch的磁盤使用率與數(shù)據(jù)量直接相關(guān),因?yàn)閿?shù)據(jù)存儲(chǔ)在磁盤上。如果數(shù)據(jù)量增加,磁盤使用率也會(huì)相應(yīng)增加。
-
索引設(shè)置:Elasticsearch支持多種索引設(shè)置,如分片和副本,這些設(shè)置會(huì)影響數(shù)據(jù)在磁盤上的存儲(chǔ)方式和占用空間的大小。例如,分片數(shù)量越多,每個(gè)分片占用的磁盤空間就越小,但需要更多的分片可能會(huì)導(dǎo)致額外的磁盤空間占用。
-
索引更新頻率:當(dāng)索引頻繁更新時(shí),會(huì)導(dǎo)致Elasticsearch寫入更多的數(shù)據(jù)到磁盤上,從而增加磁盤使用率。
-
刪除操作:在Elasticsearch中,刪除文檔不會(huì)立即釋放磁盤空間,而是通過后臺(tái)的段合并(segment merge)操作來回收空間。如果經(jīng)常刪除文檔,可能需要定期執(zhí)行段合并操作,否則會(huì)導(dǎo)致磁盤使用率持續(xù)增加。
-
數(shù)據(jù)復(fù)制:Elasticsearch支持副本機(jī)制,即將數(shù)據(jù)復(fù)制到其他節(jié)點(diǎn)以實(shí)現(xiàn)高可用性。這意味著每個(gè)副本都需要占用額外的磁盤空間。
-
磁盤類型:不同類型的磁盤對(duì)性能和空間占用有不同的影響。例如,固態(tài)硬盤通常比機(jī)械硬盤更快,但通常也更昂貴,而機(jī)械硬盤則更適合低成本應(yīng)用。
3.3 當(dāng)磁盤使用率升高時(shí)如何處理?
-
添加更多的節(jié)點(diǎn):可以通過添加更多的節(jié)點(diǎn)來擴(kuò)展集群的存儲(chǔ)能力,從而減輕單個(gè)節(jié)點(diǎn)的負(fù)擔(dān)。
-
刪除舊的或不需要的數(shù)據(jù):可以通過刪除舊的或不需要的數(shù)據(jù)來釋放磁盤空間。但是,在刪除數(shù)據(jù)之前,請(qǐng)確保您不再需要這些數(shù)據(jù),因?yàn)閿?shù)據(jù)刪除是不可逆的操作。
-
壓縮索引:Elasticsearch提供了一些工具來壓縮索引,可以在不降低性能的情況下減小索引的大小。
-
增加磁盤空間:如果磁盤使用率升高是由于磁盤空間不足導(dǎo)致的,可以考慮增加磁盤空間。
-
調(diào)整文檔的存儲(chǔ)方式:可以通過調(diào)整文檔的存儲(chǔ)方式來減小磁盤使用率。例如,可以將文檔中的某些字段設(shè)置為不索引,或者將某些字段設(shè)置為壓縮存儲(chǔ)。
4、GC頻次
指垃圾回收器在一定時(shí)間內(nèi)執(zhí)行的次數(shù),它是一個(gè)反映JVM垃圾回收效率的指標(biāo)。
4.1 詳細(xì)說明:
這里指的是老年代的GC頻次,老年代用來存儲(chǔ)較老的對(duì)象空間,這些對(duì)象預(yù)期是長久的并且持續(xù)了很長時(shí)間。在Elasticsearch節(jié)點(diǎn)中最大可以設(shè)置為30GB。
一個(gè)緩慢的GC可能有1s甚至15s以上,從集群穩(wěn)定性的角度來說是不可接受的。一個(gè)頻繁長時(shí)間GC的集群是重負(fù)載并且沒有足夠內(nèi)存的。這些長時(shí)間GC將使節(jié)點(diǎn)短暫離開集群,在Elasticsearch中為了保持集群的穩(wěn)定和可用的副本,這種不穩(wěn)定因素經(jīng)常導(dǎo)致重新遷移分片。當(dāng)集群嘗試服務(wù)正常的索引(寫入)和查詢時(shí),會(huì)增加網(wǎng)絡(luò)流量和磁盤I/O。
??在Elasticsearch集群的垃圾回收器替換成G1后,GC的頻次和持續(xù)時(shí)間均有明顯改善。
4.2 注意:
-
JVM堆內(nèi)存不足:當(dāng)JVM堆內(nèi)存不足時(shí),會(huì)導(dǎo)致GC頻繁觸發(fā),以釋放內(nèi)存空間。這種情況通常是由于索引數(shù)據(jù)量增加或者查詢負(fù)載增加等原因?qū)е碌摹?/p>
-
索引數(shù)據(jù)過多:當(dāng)索引數(shù)據(jù)量過多時(shí),會(huì)占用大量的內(nèi)存空間,導(dǎo)致JVM堆內(nèi)存不足,從而引發(fā)GC頻繁觸發(fā)。
-
查詢壓力過大:當(dāng)查詢壓力過大時(shí),會(huì)導(dǎo)致Elasticsearch集群需要處理大量的查詢請(qǐng)求,從而導(dǎo)致JVM堆內(nèi)存不足,引發(fā)GC頻繁觸發(fā)。
-
代碼邏輯問題:有時(shí)候可能存在代碼邏輯問題,例如內(nèi)存泄漏等,也會(huì)導(dǎo)致JVM堆內(nèi)存占用過高,從而引發(fā)GC頻繁觸發(fā)。
4.3 降低GC頻次的措施?
-
增加JVM堆內(nèi)存大小:GC頻次過高的一個(gè)主要原因是JVM內(nèi)存不足,因此增加JVM堆內(nèi)存大小可以有效降低GC頻次。一般來說,JVM堆內(nèi)存大小應(yīng)該設(shè)置為應(yīng)用程序所需要的最小值加上一定的余量,以確保系統(tǒng)具有足夠的內(nèi)存。
-
優(yōu)化查詢和索引操作:查詢和索引操作是Elasticsearch集群中最耗費(fèi)內(nèi)存和CPU資源的操作,因此可以通過優(yōu)化查詢和索引操作來降低GC頻次。例如,可以使用filter代替query,避免使用過多的聚合操作,避免使用過多的腳本等。
-
使用合適的垃圾回收器:不同的垃圾回收器有不同的GC算法和優(yōu)化策略,選擇合適的垃圾回收器可以降低GC頻次。一般來說,CMS垃圾回收器比較適合應(yīng)用程序的實(shí)時(shí)處理,而G1垃圾回收器則適合大型堆內(nèi)存的應(yīng)用程序。
-
使用合適的JVM參數(shù):合適的JVM參數(shù)可以對(duì)Elasticsearch集群的GC頻次產(chǎn)生重要影響。例如,可以通過設(shè)置合適的堆內(nèi)存大小、調(diào)整垃圾回收器的參數(shù)等方式來降低GC頻次。
5、fielddata內(nèi)存使用量
fielddata內(nèi)存使用量是指已經(jīng)被加載到內(nèi)存中的fielddata的大小。
5.1 詳細(xì)說明:
當(dāng)在Elasticsearch中對(duì)一個(gè)字段使用聚合、排序、腳本或者用于全文搜索時(shí),該字段的fielddata就會(huì)被加載到內(nèi)存中進(jìn)行操作。fielddata是一種用于對(duì)文本類型的字段進(jìn)行排序和聚合的數(shù)據(jù)結(jié)構(gòu)。
如果一個(gè)集群中有大量的字段需要在內(nèi)存中加載fielddata,那么這個(gè)指標(biāo)可能會(huì)對(duì)集群性能產(chǎn)生負(fù)面影響。因此,需要根據(jù)實(shí)際情況來調(diào)整fielddata的使用策略,以平衡內(nèi)存的使用和查詢性能的需求。
5.2 注意:
當(dāng)fielddata內(nèi)存使用量達(dá)到一定程度時(shí),會(huì)對(duì)Elasticsearch集群的性能和穩(wěn)定性產(chǎn)生負(fù)面影響。具體來說,主要有以下幾點(diǎn):
-
內(nèi)存不足:當(dāng)fielddata內(nèi)存使用量過高時(shí),可能會(huì)導(dǎo)致內(nèi)存不足,從而影響Elasticsearch集群的運(yùn)行。這可能會(huì)導(dǎo)致請(qǐng)求被拒絕、節(jié)點(diǎn)故障等問題。
-
垃圾回收:當(dāng)fielddata內(nèi)存使用量過高時(shí),垃圾回收器會(huì)頻繁執(zhí)行,這可能會(huì)導(dǎo)致性能下降。特別是在大型集群中,這可能會(huì)導(dǎo)致所有節(jié)點(diǎn)的性能下降,進(jìn)而影響整個(gè)集群。
-
磁盤使用量:當(dāng)fielddata內(nèi)存使用量過高時(shí),Elasticsearch可能會(huì)將部分?jǐn)?shù)據(jù)寫入磁盤,從而占用更多的磁盤空間。如果磁盤空間不足,可能會(huì)影響Elasticsearch集群的穩(wěn)定性。
5.3 當(dāng)fielddata內(nèi)存使用量增高時(shí)如何處理?
有以下幾種方法可以減少fielddata內(nèi)存使用量:
-
使用 doc values 替代 fielddata:doc values 是一種結(jié)構(gòu)化的、只讀的數(shù)據(jù)結(jié)構(gòu),可以直接被用于排序、聚合和腳本,與 fielddata 相比可以減少內(nèi)存使用。可以使用 doc_values 屬性將字段顯式地配置為使用 doc values。
-
避免過度使用 text 類型的字段:text 類型的字段會(huì)產(chǎn)生 fielddata,如果不需要進(jìn)行全文搜索、聚合、排序等操作,可以考慮使用 keyword 類型的字段來替代。
-
減少不必要的聚合操作:聚合操作會(huì)對(duì) fielddata 進(jìn)行操作,如果聚合操作不是必須的,可以考慮避免使用。
-
增加 fielddata 緩存大小:可以通過在配置文件中設(shè)置 indices.fielddata.cache.size 來增加 fielddata 緩存大小,從而減少 fielddata 的內(nèi)存使用。
-
減少索引的字段數(shù):減少索引的字段數(shù)可以減少 fielddata 的內(nèi)存使用。文章來源:http://www.zghlxwxcb.cn/news/detail-486752.html
注意,以上方法需要根據(jù)具體情況來選擇,不同的情況可能需要不同的方法來減少 fielddata 內(nèi)存使用量。文章來源地址http://www.zghlxwxcb.cn/news/detail-486752.html
到了這里,關(guān)于Elasticsearch:集群關(guān)鍵指標(biāo)及調(diào)優(yōu)指南的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!