“หน่วยความจำเป็นทรัพยากรที่จำเป็นแต่มีจำกัดเมื่อทำงานกับ Elasticsearch เนื่องจาก Lucene จะใช้หน่วยความจำที่มีอยู่ทั้งหมด อย่างไรก็ตาม เมื่อกำหนดค่าผิดพลาด การตั้งค่าหน่วยความจำอาจทำให้ประสิทธิภาพต่ำและการใช้หน่วยความจำไม่มีประสิทธิภาพ”
ในบทช่วยสอนนี้ เราจะแสดงการกำหนดค่า JVM Heap Size สูงสุดและต่ำสุดเมื่อทำงานกับ Elasticsearch
มาเริ่มกันเลย.
หน่วยความจำฮีปคืออะไร?
ในบริบทของ Elasticsearch หน่วยความจำฮีปหมายถึงจำนวนหน่วยความจำทั้งหมดที่จัดสรรให้กับ Java Virtual Machine ภายในโหนด Elasticsearch
Elasticsearch จะกำหนดขนาดเริ่มต้นของ JVM Heap ตามหน่วยความจำทั้งหมดของระบบฐานและบทบาทของโหนด ซึ่งหมายความว่าการจัดสรรขนาดหน่วยความจำฮีพอาจแตกต่างกันไปขึ้นอยู่กับว่าเป็นโหนดหลัก ข้อมูล การนำเข้า data_cold เป็นต้น
สำหรับสภาพแวดล้อมการผลิตส่วนใหญ่ ขอแนะนำให้อนุญาตให้ Elasticsearch จัดการขนาดฮีพและมากเกินพอ
บันทึก : หากคุณใช้งาน Elasticsearch ใน Docker หน่วยความจำฮีปทั้งหมดจะขึ้นอยู่กับขนาดรวมของคอนเทนเนอร์นักเทียบท่า ไม่ใช่โฮสต์ของ Docker
การกำหนดค่าขนาดฮีปต่ำสุดและสูงสุด
ในการกำหนดค่าขนาดฮีปต่ำสุดและสูงสุด เราสามารถใช้พารามิเตอร์ Xms และ Xmx Probits ของ Elasticsearch กำลังตั้งค่าหน่วยความจำสูงสุดเป็นไม่เกิน 50% ของหน่วยความจำทั้งหมด เนื่องจากนอกเหนือจาก JVM Heap แล้ว Elasticsearch ยังต้องการหน่วยความจำเพิ่มเติมสำหรับการดำเนินการอื่นๆ เช่น แคชของระบบไฟล์ การสื่อสารเครือข่าย ฯลฯ ในทำนองเดียวกัน JVM จะใช้ส่วนของหน่วยความจำ 50% ที่เหลือ
ประการที่สอง อย่าตั้งค่า xms และ xmx ให้เกินขีดจำกัดของอ๊ะ สำหรับการกำหนดค่าที่ปลอดภัย ให้จำกัดไว้ที่ 26GB หรือ 30GB ในบางระบบ
คุณสามารถตรวจสอบขีดจำกัดได้ในบันทึกของ Elasticsearch
cat elasticsearch.log | grep 'ตัวชี้วัตถุ'คุณควรเห็นรายการตามที่แสดง:
[2022-08-19T20:01:50,275][INFO ][o.e.NodeEnvironment ] [debian11] ขนาดฮีป [1.9gb] ตัวชี้อ็อบเจ็กต์ธรรมดาที่ถูกบีบอัด [จริง][2022-08-19T20:08:07,207][INFO ][o.e.NodeEnvironment ] [debian11] ขนาดฮีป [1.9gb] ตัวชี้อ็อบเจ็กต์ธรรมดาที่ถูกบีบอัด [จริง]
[2022-08-19T20:36:47,244][INFO ][o.e.NodeEnvironment ] [debian11] ขนาดฮีป [1.9gb] ตัวชี้อ็อบเจ็กต์ธรรมดาที่ถูกบีบอัด [จริง]
คุณยังสามารถสืบค้น API ข้อมูลโหนดสำหรับค่า xms และ xmx:
curl -X GET localhost:9200/_nodes/_all/jvm?prettyคุณควรเห็นผลลัพธ์ตามที่แสดง:
ตั้งค่าขนาดฮีปต่ำสุดและสูงสุด
ในการแก้ไขค่าของ JVM Heap Size คุณต้องเพิ่มไฟล์คอนฟิกูเรชันในไดเร็กทอรี /etc/elasticsearch/jvm.options.d ไฟล์นี้ควรลงท้ายด้วยนามสกุล .options
ตัวอย่างเช่น:
$ sudo touch /etc/elasticsearch/jvm.options.d/heap.optionsแก้ไขไฟล์
$ sudo nano /etc/elasticsearch/jvm.options.d/heap.optionsเพิ่มขนาดหน่วยความจำฮีปต่ำสุดและสูงสุดที่ต้องการ
ตัวอย่างเช่น รายการด้านล่างกำหนดค่าขนาดฮีปต่ำสุดและสูงสุดเป็น 4GB
บันทึกไฟล์และเริ่มต้นบริการ Elasticsearch ใหม่
บทสรุป
ในบทช่วยสอนนี้ คุณได้เรียนรู้ JVM Heap ในบริบทของ Elasticsearch วิธีที่ Elasticsearch กำหนดค่า JVM Heap และวิธีแก้ไขขนาดฮีป
ขอบคุณที่อ่าน!!