ELK優化之Elasticsearch

目錄

1.ELK優化

2.優化 ES 索引設置

2.1?優化 fsync

2.2?優化 refresh

2.3?優化 merge

2.4?優化設置

2.5?打開索引

3.優化線程池配置

3.1?優化的方案

4.鎖定內存,不讓 JVM 使用 Swap

5.減少分片數、副本數

6.ES優化總結


1.ELK優化

ELK優化可以圍繞著 linux內核優化、JVM優化、ES配置優化、架構優化(filebeat/fluentd代替logstash、加入kafka做消息隊列)來實現。
ES 作為日志存儲時的特性是:高并發寫、讀少、接受 30 秒內的延時、可容忍部分日志數據丟失。

2.優化 ES 索引設置

2.1?優化 fsync

為了保證不丟失數據,就要保護 translog 文件的安全:
Elasticsearch 2.0 之后,每次寫請求(如 index 、delete、update、bulk 等)完成時,都會觸發fsync將 translog 中的 segment 刷到磁盤,然后才會返回 200 OK 的響應;或者: 默認每隔5s就將 translog 中的數據通過fsync強制刷新到磁盤。
該方式提高數據安全性的同時,降低了一點性能。
==> 頻繁地執行 fsync 操作,可能會產生阻塞導致部分操作耗時較久。 如果允許部分數據丟失,可設置異步刷新 translog 來提高效率,還有降低 flush 的閥值, 優化如下:
"index.translog.durability": "async",
"index.translog.flush_threshold_size":"1024mb",
"index.translog.sync_interval": "120s"

2.2?優化 refresh

寫入 Lucene 的數據,并不是實時可搜索的,ES 必須通過 refresh 的過程把內存中的數據轉換成 Lucene 的完整 segment 后,才可以被搜索。
默認 1 秒后,寫入的數據可以很快被查詢到,但勢必會產生大量的 segment,檢索性能會受到影響。所以,加大時長可以降低系統開銷。 對于日志搜索來說,實時性要求不是那么高,設置為 5 秒或者 10s;對于 SkyWalking,實時性要求更低一些,我們可以設置為 30s。
設置如下:
"index.refresh_interval":"5s

2.3?優化 merge

index.merge.scheduler.max_thread_count 控制并發的 merge 線程數,如果存儲是并發性能較好的 SSD,可以用系統默認的 max(1, min(4, availableProcessors / 2)),當節點配置的 cpu 核數較高時,merge 占用的資源可能會偏高,影響集群的性能,普通磁盤的話設為1,發生磁盤 IO 堵塞。設置 max_thread_count 后,會有 max_thread_count + 2 個線程同時進行磁盤操作,也就是設置為 1 允許 3 個線程。
設置如下:
"index.merge.scheduler.max_thread_count":"1"

2.4?優化設置

# 需要先 close 索引,然后再執行,最后成功之后再打開
# 關閉索引
curl -XPOST 'http://localhost:9200/_all/_close'

# 修改索引設置
curl -XPUT -H "Content-Type:application/json" 'http://localhost:9200/_all/_settings?preserve_existing=true' -d '{"index.merge.scheduler.max_thread_count" : "1","index.refresh_interval" : "10s","index.translog.durability" : "async","index.translog.flush_threshold_size":"1024mb","index.translog.sync_interval" : "120s"}'

2.5?打開索引

curl -XPOST 'http://localhost:9200/_all/_open'

3.優化線程池配置

  • write 線程池滿負荷,導致拒絕任務,而有的數據無法寫入。而經過上面的優化后,拒絕的情況少了很多,但是還是有拒絕任務的情況。所以我們還需要優化 write 線程池。
  • write 線程池采用 fixed 類型的線程池,也就是核心線程數與最大線程數值相同。線程數默認等于 cpu 核數,可設置的最大值只能是 cpu 核數加 1,比如 16 核的 CPU, 能設置的線程數最大值為 17。

3.1?優化的方案

●線程數改為 17,也就是 cpu 總核數加 1
●隊列容量加大。隊列在此時的作用是消峰。不過隊列容量加大本身不會提升處理速度,只是起到緩沖作用。此外,隊列容量也不能太大,否則積壓很多任務時會占用過多堆內存。

修改 elasticsearch.yml 文件增加配置
# 線程數設置
thread_pool:
? write:
? ? # 線程數默認等于cpu核數,即16 ?
? ? size: 17
? ? # 因為任務多時存在任務拒絕的情況,所以加大隊列大小,可以在間歇性任務量陡增的情況下,緩存任務在隊列,等高峰過去逐步消費完。
? ? queue_size: 10000

4.鎖定內存,不讓 JVM 使用 Swap

  • Swap交換分區:當系統的物理內存不夠用的時候,就需要將物理內存中的一部分空間釋放出來,以供當前運行的程序使用。那些被釋放的空間可能來自一些很長時間沒有什么操作的程序,這些被釋放的空間被臨時保存到 Swap 中,等到那些程序要運行時,再從 Swap 中恢復保存的數據到內存中。這樣,系統總是在物理內存不夠時,才進行 Swap 交換。
  • Swap 交換分區對性能和節點穩定性非常不利,一定要禁用。它會導致垃圾回收持續幾分鐘而不是幾毫秒,并會導致節點響應緩慢,甚至與集群斷開連接。
    ?

有三種方式可以實現 ES 不使用 Swap 分區

(1)Linux 系統中的關閉 Swap (臨時有效)
執行命令 sudo swapoff -a
可以臨時禁用 Swap 內存,但是操作系統重啟后失效

(2)Linux 系統中的盡可能減少 Swap 的使用(永久有效)
執行下列命令
echo "vm.swappiness = 1" >> /etc/sysctl.conf
正常情況下不會使用 Swap,除非緊急情況下才會 Swap。

(3)啟用 bootstrap.memory_lock
config/elasticsearch.yml 文件增加配置
#鎖定內存,不讓 JVM 寫入 Swap,避免降低 ES 的性能
bootstrap.memory_lock: true

5.減少分片數、副本數

(1)分片
索引的大小取決于分片與段的大小,分片過小,可能導致段過小,進而導致開銷增加;分片過大可能導致分片頻繁 Merge,產生大量 IO 操作,影響寫入性能。
因為我們每個索引的大小在 15G 以下,而默認是 5 個分片,沒有必要這么多,所以調整為 3 個。
"index.number_of_shards": "3"

(2)副本數
減少集群副本分片數,過多副本會導致 ES 內部寫擴大。副本數默認為 1,如果某索引所在的 1 個節點宕機,擁有副本的另一臺機器擁有索引備份數據,可以讓索引數據正常使用。但是數據寫入副本會影響寫入性能。對于日志數據,有 1 個副本即可。 對于大數據量的索引,可以設置副本數為 0,減少對性能的影響。
"index.number_of_replicas": "1"

6.ES優化總結

(1)對索引進行優化:

優化fsync,適當加大刷盤間隔時間(index.translog.sync_interval,默認值為5s,可調整為30s或60s)

優化refresh,適當加大把內存數據寫入Lucene的間隔時間(index.refresh_interval,默認值為1s,可調整為5s或10s)

優化merge,根據硬盤的性能適當調整merge的線程數(index.merge.scheduler.max_thread_count,默認值為max,可調整為1,設置為1可允許最多3個并發的merge線程數)

(2)優化write線程池配置,減少拒絕任務的情況:修改ES配置文件elasticsearch.yml,設置write線程為 CPU核數+1?

(3)鎖定內存,不讓ES使用swap:swapoff -a ,關閉swap

修改內核參數 vm.swappiness=1,使系統盡量不使用swap
?修改ES配置文件:bootstrap.memory_lock: true ,啟動ES鎖定內存

(4)適當的減少索引的分片數、副本數
分片數:index.number_of_shards,默認值為5,索引大小較小時,可調整分片數為3
副本數:index.number_of_replicas,默認值為1,即每個索引會有一份額外的副本數據,對于日志數據不需要太高的安全性,有1個副本即可,所以可調整副本數為0

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

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

相關文章

Python統計實戰:時間序列分析之簡單指數平滑和Holt指數平滑

為了解決特定問題而進行的學習是提高效率的最佳途徑。這種方法能夠使我們專注于最相關的知識和技能,從而更快地掌握解決問題所需的能力。 (以下練習題來源于《統計學—基于Python》。請在Q群455547227下載原始數據。) 練習題 下表是某只股票…

二維平面無中心點的聚類算法

問題描述 二維平面上有許多點p(x , y),按照彼此之間的歐式距離進行分為若干個集合。若點p1(x1, y1)與點p(x2, y2)之間距離小于d,則認為二者是鄰居。 算法思路 給數據集的點進行編號,順序遍歷這些點,找出當前點的鄰居,記住已經遍…

模具監視器的選擇要點介紹

模具監視器的選擇要點涉及多個方面,以確保其能夠滿足實際生產需求并提高生產效率。以下是一些關鍵的選擇要點: 一、性能和穩定性 監控精度:選擇模具監視器時,首先要考慮其監控精度,包括溫度、壓力、注射速度等參數的…

Debezium系列之:JVM參數詳解和Debezium集群JVM監控看板制作

Debezium系列之:JVM參數詳解和Debezium集群JVM監控看板制作 一、JVM參數詳解1.jvm_memory_bytes_used2.jvm_memory_bytes_committed3.jvm_memory_bytes_max4.jvm_memory_bytes_init5.jvm_memory_pool_bytes_used6.jvm_memory_pool_bytes_committed7.jvm_memory_pool_bytes_max…

金屬3D打印如何精準選材

隨著3D打印技術的飛躍發展,模具制造領域迎來了前所未有的創新機遇。在眾多3D打印技術中,SLM金屬3D打印以其精度高、復雜結構成型能力,成為眾多行業的優選。然而,金屬打印材料,如何精準選擇,以最大化滿足項目…

linux 內核打印log太多咋辦?

有時候發現,linux 內核打印太多消息了,對有用消息造成了干擾,如果你一個個源文件去關閉打印太麻煩了,有沒有一種更方便的方式來關閉這些消息呢? 對這個需求,內核提供了一個強大而又靈活的方式,…

開源 WAF 解析:選擇最適合你的防護利器

前言 隨著網絡安全風險的增加,Web 應用防火墻(WAF)成為保護網站和應用程序免受攻擊的關鍵工具。在眾多的選擇中,開源 WAF 以其靈活性、可定制性和成本效益備受青睞。本文將深入探討幾種主流開源 WAF 解決方案,幫助你選…

用html+css設計一個列表清單小卡片

目錄 簡介: 效果圖: 源代碼: 可能的問題: 簡介: 這個HTML代碼片段是一個簡單的列表清單設計。它包含一個卡片元素(class為"card"),內部包含一個無序列表(ul),列表項(li)前面有一個特殊的符號(△)。整個卡片元素設計成300px寬,150px高,具有圓角邊…

從0-1配置一個ROS項目

目標:從0-1配置一個ROS項目,實現hello,world打印,在此基礎上進行功能開發。 步驟1:創建工作空間: mkdir -p ros_workspace/src cd ros_workspace對工作空間進行初始化: catkin_make source devel/setup.…

20.【C語言】初識結構體(重要)

定義&#xff1a;由一批數據組合而成的結構型數據 作用&#xff1a;描述復雜對象&#xff0c;創建新的類型 格式&#xff1a; struct 對象 { …… } 介紹. 用法&#xff1a;結構體變量.成員變量 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> struct hotal…

代碼隨想錄訓練營Day57

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、X的平方根二、有效的完全平方數 前言 提示&#xff1a;這里可以添加本文要記錄的大概內容&#xff1a; 今天是跟著代碼隨想錄刷題的第57天&#xff0c;繼…

Prompt-Free Diffusion: Taking “Text” out of Text-to-Image Diffusion Models

CVPR2024 SHI Labshttps://arxiv.org/pdf/2305.16223https://github.com/SHI-Labs/Prompt-Free-Diffusion 問題引入 在SD模型的基礎之上&#xff0c;去掉text prompt&#xff0c;使用reference image作為生成圖片語義的指導&#xff0c;optional structure image作為生成圖片…

安裝Linux虛擬機

點擊創建新的虛擬機 選擇高級 系統自定義推薦 選擇稍后安裝 選擇Linux 虛擬機命名并且選擇創建位置 系統自定義 系統自定義推薦 系統自定義推薦 選擇安裝好的iOS文件 點擊完成 選擇編輯虛擬機設置 進入后選擇第一個Install red hat enterprise 選擇常用語言 設置…

2024.8月28號杭州電商博覽會,在杭州國博舉辦

2024杭州電商新渠道博覽會暨集脈電商節 時間&#xff1a;2024年08月28-30日 地點&#xff1a;杭州國際博覽中心&#xff08;G20&#xff09; 主辦單位&#xff1a;浙江集脈展覽有限公司、杭州華維展覽有限公司 承辦單位&#xff1a;浙江集脈展覽有限公司 報名參展&#xf…

測試幾個 ocr 對日語的識別情況

測試幾個 ocr 對日語的識別情況 1. EasyOCR2. PaddleOCR3. Deepdoc&#xff08;識別pdf中圖片&#xff09;4. Deepdoc&#xff08;識別pdf中文字&#xff09;5. Nvidia neva-22b6. Claude 3.5 sonnet 識別圖片中的文字7. Claude 3.5 sonnet 識別 pdf 中表格8. OpenAI gpt-4o 識…

網頁計算器的實現

簡介 該項目實現了一個功能完備、交互友好的網頁計算器應用。只使用了 HTML、CSS 和 JavaScript &#xff0c;用于檢驗web前端基礎水平。 開發環境&#xff1a;Visual Studio Code開發工具&#xff1a;HTML5、CSS3、JavaScript實現效果 功能設計和模塊劃分 顯示模塊&#…

Bean類的設計規范:Bean規范

Bean規范 類要求必須含有無參&#xff0c;公共的構造方法屬性必須私有化&#xff0c;然后提供公共的 set 和 get 方法

anaconda命令大全

目錄 查看所有虛擬環境查看某虛擬環境安裝的包創建虛擬環境激活創建好的虛擬環境回到之前的環境刪除創建的虛擬環境查看conda所在的位置、虛擬環境位置等信息conda修改虛擬環境所在的位置 查看所有虛擬環境 conda env list查看某虛擬環境安裝的包 激活要查看的虛擬環境之后&a…

Android 性能優化之啟動優化

文章目錄 Android 性能優化之啟動優化啟動狀態冷啟動溫啟動熱啟動 耗時檢測檢測手段TraceView使用方式缺點 Systrace環境配置使用方式TraceView和Systrace比較 AOP統計耗時環境配置使用 優化白屏優化異步加載優化環境配置使用 延遲加載優化AppStartup 源碼下載 Android 性能優化…

Reid系列論文學習——無人機場景下基于 Transformer 的輕量化行人重識別

今天介紹的一篇論文是針對無人機場景下的行人重識別&#xff0c;論文題目為&#xff1a;"無人機場景下基于 Transformer 的輕量化行人重識別"。該論文針對無人機場景下行人呈現多角度多尺度的特點、以及傳統CNN網絡在行人重識別任務中受限于感受野和下采樣導致的無法…