降低85%的gc發生率:ES的GC調優實踐!

#大數據/ES #經驗 #性能

ES的服務日志出現一些gc overhead現象,經過調優對比,gc發生率顯著下降了85%,分享參數如下:

ES的G1GC參數(多實例)

-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:InitiatingHeapOccupancyPercent=40
-XX:+ParallelRefProcEnabled
-XX:+ExplicitGCInvokesConcurrent
-XX:ParallelGCThreads=8

切記!注意行尾不能帶任何空格或者亂七八糟的換行符!

否則可能遇到如下啟動失敗報錯(行尾有空格,沒注意到):

Unrecognized?VM?option?'UseG1GC??'
Did?you?mean?'(+/-)UseG1GC'?

參數介紹:

  • -XX:+UseG1GC:啟用G1垃圾收集器。

  • -XX:MaxGCPauseMillis=200:設置最大GC暫停時間為200毫秒。這個值可以根據實際情況進行調整,以實現更好的系統性能。

  • -XX:InitiatingHeapOccupancyPercent=35:當堆的使用率達到35%時,G1垃圾收集器將啟動混合收集。這個值也可以根據實際情況進行調整。

  • -XX:+ParallelRefProcEnabled:啟用并行引用處理。

  • -XX:+ExplicitGCInvokesConcurrent:顯式GC調用并發處理。

G1GC的參數介紹

JVM G1GC(Garbage-First Garbage Collector)是Java虛擬機中的一種垃圾收集器,它以高吞吐量和可預測的停頓時間為目標,特別適合需要大內存和多核處理器的服務器應用。針對G1GC的設置,以下是一些建議的最佳實踐方案:

  1. 初始堆大小(-Xms)和最大堆大小(-Xmx)
    • 根據應用的內存需求設定這兩個值,以確保應用在啟動和運行過程中有足夠的內存資源。

    • 通常建議將-Xms和-Xmx設置為相同的值,以減少運行時堆內存的動態調整,從而降低額外的性能開銷。

    • 具體數值依賴于應用的具體需求,可以通過性能測試來確定合適的值。

  2. 新生代大小
    • G1GC中新生代的大小是動態調整的,不需要顯式設置。

    • 但可以通過調整-XX:G1NewSizePercent(新生代最小占比)和-XX:G1MaxNewSizePercent(新生代最大占比)來控制新生代大小的上下限。

    • 默認情況下,G1GC會根據應用的運行情況自動調整新生代的大小。

  3. 老年代大小
    • G1GC中老年代的大小也是動態調整的。

    • 老年代的大小主要受到總堆大小和新生代大小的影響,不需要顯式設置。

  4. 垃圾收集線程數(-XX:ParallelGCThreads)
    • 這個參數設置并行垃圾收集時使用的線程數。

    • 默認情況下,G1GC會根據系統的邏輯處理器數量自動調整垃圾收集線程數。

    • 通常情況下,不需要手動設置這個參數,除非有特定的性能調優需求。

  5. 其他相關參數
    • -XX:+UseG1GC:啟用G1GC垃圾收集器。

    • -XX:MaxGCPauseMillis:設置G1GC的目標停頓時間,即每次垃圾收集過程中應用線程的最大停頓時間。這個參數對G1GC的性能有很大的影響,需要根據應用的需求和性能測試結果來設定。

    • -XX:InitiatingHeapOccupancyPercent(簡稱IHOP):設置觸發并發GC周期的Java堆占用的百分比閾值。當老年代的使用率達到這個閾值時,G1GC會觸發一次混合收集(Mixed GC),以清理老年代和新生代的垃圾對象。

具體推薦配置值

由于具體的應用場景和需求差異較大,很難給出適用于所有情況的推薦配置值。建議根據應用的具體需求和性能測試結果來調整上述參數。例如,可以先使用默認配置進行性能測試,然后根據性能測試結果逐步調整-Xmx-XX:MaxGCPauseMillis-XX:InitiatingHeapOccupancyPercent等關鍵參數,以達到最佳的性能表現。

G1GC的配置是一個復雜的過程,需要綜合考慮應用的需求、硬件資源、性能目標等多個因素。在實際操作中,建議結合官方文檔、性能測試結果和社區經驗來進行配置和優化。

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

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

相關文章

Redis緩存雙寫一致性之更新策略

文章目錄 1. 經典面試題2. 雙寫一致性3. 更新策略4. canal簡介5. Redis與Mysql數據雙寫一致性工程落地案例 1. 經典面試題 上面的業務邏輯你用java代碼如何實現?你只要用緩存,就可能會涉及到redis緩存與數據庫雙存儲雙寫,你只要是雙寫&#x…

嵌入式學習day29 指針復習

1.指針: 1.提供一種間接訪問數據的方法 2.空間沒有名字,只有一個地址編號 2.指針: 1.地址:區分不同內存空間的編號 2.指針:指針就是地址,地址就是指針 3.指針變量:存放指針的變量稱為指針變量,簡稱為指針 3.指針的定義: int *p NULL; …

MyBatis中 #{} 和 ${} 區別

Mybatis的Mapper映射文件中,有兩種方式可以引用形參變量進行取值: #{} 和 ${}。本文將簡述兩種方式的區別和適用場景 取值引用 #{} 方式 #{}: 解析為SQL時,會將形參變量的值取出,并自動給其添加引號。 例如:當實參username&quo…

AI 筆記助手,你的思路整理助手

大家好,今天給大家介紹一款非常實用的 AI 筆記助手——AI Note。這款助手就像是一個貼心的小助手,能幫助我們整理筆記,提高學習和工作效率。 🤖 AI Note 可以智能總結筆記內容,準確標記重點,讓我們更快地獲…

final關鍵字有什么作用

final關鍵字在Java中用于聲明變量、方法和類,表示它們的值或行為不能被修改。 被 final 修飾的類不可以被繼承 被 final 修飾的方法不可以被重寫 被 final 修飾的變量不可變,被 final 修飾的變量必須被顯式第指定初始值,還得注意的是&#…

學習助手:借助AI大模型,學習更高效!

在當今的數字時代,人工智能(AI)的崛起已經徹底改變了我們獲取信息、處理數據以及學習新知識的方式。AI大模型,特別是如OpenAI開發的GPT-4這類先進的技術,已成為學習和教育領域的一大助力。本文旨在探索如何借助AI大模型…

了解 SYN Flood 攻擊

文章目錄: 什么是 SYN Flood 攻擊?對網絡的影響SYN Flood 發生的跡象如何解決? 什么是 SYN Flood 攻擊? SYN Flood(SYN 洪水攻擊)是一種常見的分布式拒絕服務(DDoS - Distributed Denial of Se…

購買騰訊云服務器請先領取代金券,2024騰訊云優惠

騰訊云優惠代金券領取入口共三個渠道,騰訊云新用戶和老用戶均可領取8888元代金券,可用于云服務器等產品購買、續費和升級使用,阿騰云atengyun.com整理騰訊云優惠券(代金券)領取入口、代金券查詢、優惠券兌換碼使用方法…

FL Studio選購指南:新手小白應該選擇哪個版本FL Studio?

很多打算入手正版FL Studio的新手朋友都會糾結一個問題:哪個版本的FL Studio更適合我,到底應該入手哪一款FL Studio?本文會介紹每個版本之間的差異點,并帶大家選擇適合自己的FL Sudio版本。 FL Studio全版本 在選購前有一些小知識…

UE5常見問題處理筆記

一、C工程中的文件出現很多頭文件找不到,比如:#include CoreMinimal.h文件提示找不到。 解決方法:在UE編輯器中選擇菜單Tools -> Refresh Visual Studio Project。 二、莫名其妙的編譯錯誤。 解決方法,找到工程根目錄下的Bi…

GO流程控制

1. if else 在Go語言中,關鍵字if是用于測試某個條件(布爾型或邏輯型)的語句,如果該條件成立,則會執行 if 后由大括號{}括起來的代碼塊,否則就忽略該代碼塊繼續執行后續的代碼。 if condition {// 條件為真…

qwen.cpp

1、Release模式 git clone --recursive https://github.com/QwenLM/qwen.cpp && cd qwen.cpp git submodule update --init --recursive python3 qwen_cpp/convert.py -i /mnt/workspace/qwen.cpp/Qianwen/qwen/Qwen-7B-Chat -t q4_0 -o qwen7b-ggml.bincmake -B buil…

什么是MAC地址? win10電腦查看MAC地址的多種方法

您是否知道連接到家庭網絡的每件硬件都有自己的身份?正如每個設備都分配有自己的 IP 地址一樣,每個硬件都有一個唯一的網絡標識符。 該標識符稱為MAC 地址。MAC 代表媒體訪問控制。您可能需要 MAC 地址來解決網絡問題或配置新設備。在 Windows 中查找您…

three.js 點乘判斷平行向量方向異同

效果&#xff1a; 代碼&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs"></div><div>判斷的前提是兩個向量平行<el-button click"judge"…

一文掌握大模型提示詞技巧:從戰略到戰術

作者&#xff1a;明明如月學長&#xff0c; CSDN 博客專家&#xff0c;大廠高級 Java 工程師&#xff0c;《性能優化方法論》作者、《解鎖大廠思維&#xff1a;剖析《阿里巴巴Java開發手冊》》、《再學經典&#xff1a;《Effective Java》獨家解析》專欄作者。 熱門文章推薦&am…

pytest 的 request fixture:實現個性化測試需求

在前文章中&#xff0c;我們看到pytest_repeat源碼中有這樣一段 pytest.fixture def __pytest_repeat_step_number(request):marker request.node.get_closest_marker("repeat")count marker and marker.args[0] or request.config.option.count......看到參數為r…

Stable Cascade又升級了,現在只需要兩個模型

Stable Cascade這個模型&#xff0c;大家如果還有印象的話&#xff0c;是需要下載三個模型的&#xff0c;分別是Stage_a,Stage_b和Stage_c,如果全都下載下來&#xff0c;需要20多個G&#xff0c;但是最近使用ComfyUI做嘗試的時候&#xff0c;發現官方的案例中已經沒有用到單獨的…

手擼AI-2: 設置腳本參數與設置隨機種子

一.設置腳本參數 1. 代碼示例 在完整的模型訓練代碼中,我們時常能看到通過python train.py --params 來訓練模型,這也是在無UI界面的服務器上訓練模型最主要的方法,因此使用腳本并設置腳本參數尤為重要. 我們通常會將腳本設置的代碼寫在config,py中,再用訓練主函數main.py進行…

P4715 【深基16.例1】淘汰賽題解

題目 有&#xff08;n≤7&#xff09;個國家參加世界杯決賽圈且進入淘汰賽環節。已經知道各個國家的能力值&#xff0c;且都不相等。能力值高的國家和能力值低的國家踢比賽時高者獲勝。1號國家和2號國家踢一場比賽&#xff0c;勝者晉級。3號國家和4號國家也踢一場&#xff0c;…

C++用臨時對象構造新對象

C用臨時對象構造新對象 //用臨時對象構造同類型的新對象&#xff0c;該臨時對象不產生&#xff1b; // 直接用生成臨時對象的方法構造新對象&#xff0c;這是編譯器對代碼的優化&#xff0c;效率更高 #include<iostream> using namespace std; class MyClass { public:…