Elasticsearch ‘de Heap Size ‘a Dikkat Edin !
ElasticSearch için çok önemli bir ayardır ve sistem iyi monitor edilip doğru SET edilmesi gerekmektedir.
Heap Size ayarlamasından önce bunu doğru monitor etmeniz için heap memory kavramına öncesinde değineceğim. Java uygulamaları verileri belleğe kaydetmek için “stack” ve “heap” yöntemlerini kullanır.
Stack türünde verilerin bellekte tutulup silinmesini uygulamanın kendisi değil işletim sistemi yönetir.
Heap türünde ise bellek kullanımını ve temizlenmesini uygulama yönetir. Java’da objeler heap bellekte tutulur ve Garbage Collector denen yapılar sayesinde heap bellek yönetimi sağlanır.
Peki nedir bu Garbage Collector ?
Java’da bellek yönetimi arka planda JVM ve onun içinde yer alan Garbage Collector (Çöp Toplayıcısı) ile yapılır.
Garbage Collector otomatik hafıza yönetimi ile uygulama yazımını kolaylaştırmakta, kodlama süresini kısaltmaktadır.
Yine Garbage Collector, makine koduna derlenen dillere göre kodlama hatalarından dolayı karşılaşılan hafıza alanlarının leak edilmesi problemi ile de bir seviyeye kadar baş edebilmektedir.
Garbage Collection, otomatik bellek yönetimi mekanizmasıdır. Bu işlem heap belleğe bakıp, kullanılan objelerin tespit edilmesi ve referans edilmeyenlerin silinmesi üzerine kuruludur.
Kullanılmayan/referans edilmeyen nesnelerin kapladığı alan bellekte boşa çıkarılır ve bellekte boş yer açılmış olur.
Bu işlemi yapan mekanizmaya da Garbage Collector denir.
Kısaca, ES ‘in başlangıçta ayıracağı ve maksimum kullanabileceği bellek miktarını bu config ile belirleriz.
Heap boyutunu fazla olması caching için kullanılabilir ama çok fazla olması garbage collector üzerinde duraklamalara sebep olabilir.GB durduğunda end-user (son kullanıcıya) dönüşler çok uzun olabilir.
Uzun duraklama yaşandığında ES gibi dağıtık sistemlerde node, cluster’ dan izole olabileceği için erişim gerçekleşmez. Bu node üzerinde herhangi bir okuma ya da yazma işlemi yapılmaz ve node eğer Master node ise yeni bir Master node seçilebilir veya data node ise shard ları diğer data node’ lara yerleştirilmesine neden olabilir. Bu durumda network trafiğini, disk üzerindeki girdi-çıktı işlemleri ve cluster’ ın yükünü artırır. Eğer heap’e verilen değer normalin altındaysa bellek hatalarının dışında başka problemlerle de karşılaşılabilir.
Bazı Best Practice Notları ise ,
- Heap ‘in size ‘ı toplam belleğin yarısından fazla olmaması önemle tavsiye edilir. Yani 64 GB ‘lık bir belleğiniz var ise Heap Size ‘ınızı 48 GB ayarlamamanız gerekmektedir.
- Heap Size ‘ın 32 GB ‘ı geçmesi önerilmemektedir.
- Default ‘ta varsayılan değer Xms1g ve Xmx1g 1 GB ‘tır.
- JVM heap size ‘ını değiştirmek için default path adresi : /etc/elasticsearch/jvm.options dir.
################################################################
## IMPORTANT: JVM heap size
################################################################
##
## You should always set the min and max JVM heap
## size to the same value. For example, to set
## the heap to 4 GB, set:
##
## -Xms4g
## -Xmx4g
##
## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
## for more information
##
################################################################
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms1g
-Xmx1g
Bunların dışında dikkat edilmesi gereken başka faktörleri yorum olarak iletebilirsiniz.
Teşekkürker
Kolay Gelsin.