優化 Elasticsearch JVM 參數配置指南

一、概述

Elasticsearch 是基于 JVM 的搜索和分析引擎。JVM 參數的合理配置直接影響著 Elasticsearch 的性能和穩定性。盡管 Elasticsearch 已經提供了默認的 JVM 設置,但在某些特定場景下,我們可能需要進行適當的調整和優化。

本文將詳細講述如何安全、高效地配置 Elasticsearch JVM 參數,以提高系統性能并保證運行穩定。

二、配置 JVM 參數的方法

Elasticsearch 支持通過 JVM 參數文件和環境變量兩種方式來設置 JVM 選項。

1. JVM 參數文件(推薦)

推薦的做法是使用 JVM 參數文件覆蓋默認配置:

  • 文件擴展名為 .options
  • 文件路徑取決于 Elasticsearch 的安裝方式:
安裝方式JVM 參數文件路徑
tar.gz 或 zip 包config/jvm.options.d/
Debian 或 RPM 包/etc/elasticsearch/jvm.options.d/
Docker 容器/usr/share/elasticsearch/config/jvm.options.d/

例如,設置堆內存為 2GB:

-Xms2g
-Xmx2g

2. 環境變量方式(僅限測試和開發環境)

在生產環境不建議使用環境變量,但測試環境中可采用以下方式:

export ES_JAVA_OPTS="-Xms2g -Xmx2g"
./bin/elasticsearch

注意:

  • Elasticsearch 會忽略 JAVA_TOOL_OPTIONSJAVA_OPTS 變量。
  • 使用 ES_JAVA_OPTS 將覆蓋所有其他 JVM 設置,因此生產環境避免使用。

三、JVM 參數文件語法規則

JVM 參數文件支持如下語法規則:

  • 每個 JVM 參數獨占一行,以短橫線(-)開頭。
  • 可以指定特定的 Java 版本:
# 適用于所有版本
-Xmx2g# 僅適用于 Java 17
17:-Xmx2g# 適用于 Java 17 到 18
17-18:-Xmx2g# 適用于 Java 17 及以上版本
17-:-Xmx2g
  • # 開頭的行視作注釋。
  • 文件名的字典順序決定文件加載順序。

四、設置 JVM 堆內存最佳實踐

默認情況下,Elasticsearch 會根據節點角色和總內存自動設置堆大小,官方推薦使用默認配置。但如果需要手動設置,應遵循以下原則:

  • 堆內存大小不超過節點總內存的 50%,以便為操作系統文件緩存和 JVM 本身預留足夠的空間。
  • 當多個 Elasticsearch 節點在同一臺主機或容器中運行時,所有節點的堆內存總和不得超過總內存的 50%。
  • 建議堆大小不超過 26GB,以保持開啟壓縮對象指針(compressed ordinary object pointers, OOPs)功能。某些系統最大可設置 30GB,需通過 Elasticsearch 日志或 API 確認:
GET _nodes/_all/jvm

日志示例:

heap size [1.9gb], compressed ordinary object pointers [true]

合理配置:

-Xms8g
-Xmx8g

五、配置 JVM 堆轉儲路徑

默認情況下,堆內存溢出時會自動轉儲到 Elasticsearch 日志目錄。如果想自定義路徑,可在 JVM 參數文件添加:

-XX:HeapDumpPath=/your/custom/path

注意:

  • 如果路徑指定目錄,則 JVM 自動生成文件名。
  • 如果路徑指定文件名,則在執行堆轉儲時該文件不得已存在。

六、垃圾回收(GC)日志配置

默認情況下,Elasticsearch 會開啟 GC 日志:

  • 日志默認保存在 Elasticsearch 日志目錄。
  • 每個日志文件大小為 64MB,最多占用 2GB 磁盤空間。

若需自定義 GC 日志位置或格式,示例如下:

jvm.options.d/gc.options 中:

# 禁用默認GC日志配置
-Xlog:disable# 使用UTC時間,輸出警告及以上信息至標準錯誤流
-Xlog:all=warning:stderr:utctime,level,tags# 自定義 GC 日志位置和詳細信息
-Xlog:gc*,gc+age=trace,safepoint:file=/opt/my-app/gc.log:utctime,level,pid,tags:filecount=32,filesize=64m

Docker 容器示例:

MY_OPTS="-Xlog:disable -Xlog:all=warning:stderr:utctime,level,tags -Xlog:gc=debug:stderr:utctime"
docker run -e ES_JAVA_OPTS="$MY_OPTS"

七、JVM 致命錯誤日志配置

默認情況下,JVM 遇到致命錯誤(如分段錯誤)時,會輸出到 Elasticsearch 日志目錄。若需調整,可通過以下設置:

-XX:ErrorFile=/custom/path/jvm_fatal_error.log

八、性能和穩定性注意事項

  • JVM 堆內存過大會導致 GC 停頓更長,降低性能。
  • JVM 堆內存設置不合理可能引發節點頻繁重啟或內存不足(OOM)。
  • 強烈建議使用官方推薦的默認設置,僅在明確性能瓶頸和優化需求時再做調整。

九、總結

本文從實際操作出發,全面介紹了 Elasticsearch JVM 參數的配置方法、最佳實踐、日志與堆轉儲路徑的設置方法,強調了堆內存設置和 GC 調優的關鍵點。通過遵循本文的指導,可以有效避免 JVM 配置不當引發的性能問題,確保 Elasticsearch 的高效穩定運行。

以上內容希望能幫助各位在實際的 Elasticsearch 部署和運維中更加得心應手。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/92856.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/92856.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/92856.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python, Go 開發如何進入心流狀態APP

要開發一款基于Python和Go語言、幫助用戶進入“心流”狀態(高度專注、高效愉悅的心理狀態)的應用,需結合兩種語言的技術優勢(Go的高并發與性能、Python的靈活性與AI生態)及心流觸發機制(清晰目標、即時反饋…

一文詳解手機WiFi模塊與連接

目錄 1 硬件模塊 1.1 Wifi射頻模 1.2 電源管理模塊 2 軟件與協議棧 2.1 系統服務層 2.2 認證與協議處理 3 連接流程 3.1 開啟WiFi與掃描 3.2 選擇網絡與認證 3.3 連接與IP分配 4 特殊連接方式 4.1 WPS快速連接 4.2 熱點模式(AP模式) 4.3 U…

Java 網絡編程詳解:從基礎到實戰,徹底掌握 TCP/UDP、Socket、HTTP 網絡通信

作為一名 Java 開發工程師,你一定在實際開發中遇到過需要與遠程服務器通信、實現客戶端/服務端架構、處理 HTTP 請求、構建分布式系統等場景。這時,Java 網絡編程(Java Networking) 就成為你必須掌握的核心技能之一。Java 提供了豐…

Java面試題(中等)

1. 計算機網絡傳輸層有哪些協議?分別適用于什么場景?TCP協議(傳輸控制協議)?:面向連接、可靠傳輸,流量控制、擁塞控制。適用于要求數據完整性的場景,如文件傳輸、網頁瀏覽、電子郵件等。UDP協議 (用戶數據報協議)?&a…

Apache 消息隊列分布式架構與原理

消息隊列 基本概念 定義 消息隊列(Message Queue, MQ)是一種分布式中間件,通過異步通信、消息暫存和解耦生產消費雙方的機制,提供消息的順序性保證、可靠投遞和流量控制能力,廣泛應用于微服務解耦、大數據流處理等場景…

ModernBERT如何突破BERT局限?情感分析全流程解析

自2018年推出以來,BERT 徹底改變了自然語言處理領域。它在情感分析、問答、語言推理等任務中表現優異。借助雙向訓練和基于Transformer的自注意力機制,BERT 開創了理解文本中單詞關系的新范式。然而,盡管成績斐然,BERT 仍存在局限…

股票Level2逐筆成交及十檔訂單簿分鐘級Tick歷史行情數據詳細解析

本地股票數據處理與分析實戰指南 在量化投資與金融數據分析領域,高效處理本地存儲的股票數據是核心能力之一。本文將從數據類型定義、解析流程及實際應用角度,系統介紹如何基于CSV文件管理股票分鐘數據、高頻Tick數據、逐筆數據、Level2歷史行情等多樣化…

面向互聯網2C業務的分布式類Manus Java框架

本文介紹了阿里巴巴推出的分布式類ManusAgent框架——ali-langengine-dflow,旨在解決現有Agent架構在互聯網2C業務場景中的局限性。文章從背景出發,分析了當前主流Agent架構(如Manus、字節TARS、AutoGLM)存在的問題,如…

Java-82 深入淺出 MySQL 內部架構:服務層、存儲引擎與文件系統全覆蓋

點一下關注吧!!!非常感謝!!持續更新!!! 🚀 AI篇持續更新中!(長期更新) AI煉丹日志-30-新發布【1T 萬億】參數量大模型!Kim…

開發避坑短篇(6):Vue+Element UI 深度選擇器實現表單元素精準對齊的技術實踐

需求 el-form 表單的el-input和el-select默認寬度度不一致&#xff0c;導致不對齊&#xff0c;如下圖。那么如何設置讓el-input和el-select的寬度度一致并對齊&#xff1f;<el-form class"page-form" :model"addForm" :rules"rules" :disable…

rust-參考與借用

參考與借用 在清單4-5中的元組代碼的問題在于&#xff0c;我們必須將String返回給調用函數&#xff0c;這樣我們才能在調用calculate_length之后繼續使用String&#xff0c;因為String已經被移動到了calculate_length中。相反&#xff0c;我們可以提供一個對String值的引用。引…

深入解析HDFS Federation:如何有效解決單NameNode瓶頸問題

HDFS Federation簡介與背景在Hadoop分布式文件系統&#xff08;HDFS&#xff09;的經典架構中&#xff0c;NameNode作為核心組件承擔著整個文件系統的元數據管理職責。這一設計雖然簡潔高效&#xff0c;但隨著數據規模的爆炸式增長&#xff0c;單NameNode架構逐漸暴露出難以克服…

為什么選擇EasyGBS?

作為集 算法倉、算力設備接入、視頻云平臺 于一體的綜合性智能安防監控平臺&#xff0c;EasyGBS有哪些優勢是您的必選理由呢&#xff1f;一、設備與協議的兼容性EasyGBS不挑設備品牌型號。只要支持GB28181、RTSP、ONVIF、RTMP標準協議里的任一種&#xff0c;就能將視頻接入。但…

【形態學變換】——圖像預處理(OpenCV)

目錄 1 核 2 腐蝕 3 膨脹 4 開運算 5 閉運算 6 禮帽運算 7 黑帽運算 8 形態學梯度 形態學變換是一種基于形狀的簡單變換&#xff0c;處理對象是二值化后的圖像。有兩個輸入&#xff1a;原圖像和核&#xff0c;一個輸出&#xff1a;形態學變換后的圖像。基本操作有以下四…

一次“非法指令”(SIGILL)問題的完整調試過程:CPU指令集兼容性探秘

一次"非法指令"問題的完整調試過程&#xff1a;CPU指令集兼容性探秘一、問題概述二、問題現象與初步分析1. 環境與現象2. 官方文檔的線索3. 重現問題4. 懷疑方向&#xff1a;CPU指令兼容性5. 關鍵發現&#xff1a;AVX512指令三、詳細調試過程1. 搭建調試環境 (KVM虛擬…

Node.js - 創建 Express 項目

創建 Express 項目 安裝 npm i -g express-generatorornpm i -g express-generator4# 注意&#xff1a;Windows有可能碰到提示&#xff1a;npm : 無法加載文件 C:\Program Files\nodejs\npm.ps1&#xff0c;因為在此系統上禁止運行腳本。 # 如果碰到這個錯誤&#xff0c;需要…

高并發系統設計面試題

高并發系統設計面試題&#x1f525;&#x1f525;&#x1f525; 超高頻問題&#xff08;幾乎必問&#xff09;讓你設計一個秒殺系統&#xff0c;你會考慮哪些問題&#xff1f;如果你的業務量突然提升100倍QPS你會怎么做&#xff1f;庫存扣減如何避免超賣和少賣&#xff1f;訂單…

【通識】如何看電路圖

1. 電路圖 1.1 基礎概念 電路圖即電原理圖。 電路圖第一種是說明模擬電子電路工作原理&#xff0c;用圖形符號表示電阻器、電容器、開關、晶體管等實物&#xff0c;用線條把元器件和單元電路按工作原理的關系連接起來。 第二種則是說明數字電子電路工作原理的。用圖形符號表示…

SpringBoot實戰指南:從快速入門到生產級部署(2025最新版)

一、為什么SpringBoot依然是Java開發的首選&#xff1f; SpringBoot自2014年發布以來&#xff0c;已成為Java企業級開發的事實標準框架。根據2025年最新調研數據顯示&#xff0c;全球78%的Java微服務項目基于SpringBoot構建&#xff0c;其核心優勢在于&#xff1a; 約定優于配置…

新房裝修是中央空調還是壁掛空調好?

這個要看戶型和投資金額&#xff0c;大戶型空間適合裝中央空調&#xff0c;因為空間大有足夠的地方安裝&#xff0c;功率也可以根據面積大小進行配置&#xff0c;整體配置一個外機就行了&#xff0c;整體的裝修效果比較規整&#xff0c;就是多花點&#xff0c;使用成本也稍高點…