23 Ekim 2022 Pazar

Linux tabanlı sistemlerde uygulamaların hafıza kullanımı

 Günümüzün en büyük sorunlarından iki tanesi cpu kullanımı ve hafıza(ram kullanımı).

Böyle sorunlar ile karşılaştığımızda uygulamanın gerçekte ne kadar hafıza kullanığı veya kullanabileceğini bilmemiz gerekiyor. Genelde uygulamalar başlarken sistemden bana şu kadar  ram ver diye istekde bulunur, uygulama çalışırkende hafiza isteğinde bulunabilir. Bunu görmek için ps komutunda vzs ye bakmamız gerekir. Uygulama çalıştığı sürece aktif olarak kullandığı hafıza içinde rss değerine bakmamız gerekiyor.


Şimdi aşağıyı inceleyelim;

remzi@fedora:~$ ps ax --format ppid,pid,%mem,vsz,rss,%cpu,cmd --sort -%mem | head -5

vsz         VSZ       virtual memory size of the process in KiB (1024-byte units).  Device mappings are currently excluded; this is subject to change.  (alias vsize)

rss         RSS       resident set size, the non-swapped physical memory that a task has used (in kilobytes).  (alias rssize, rsz).

Yukarıda gördüğümüz gibi teams yolun başında  virtual olarak  9704496 KiB ram istemiş, fakat aktif olarak komutu çalıştırdığımız anda kullandığı  hafıza ise 731832KiB.

Anlamlı olması için KiB ye MiB çevirecek olursak, 

istekte bulunulan hafıza  9704496/10^3 = 9704.49MB 
aktif olarak kullanılan hafıza 731832/10^3 = 731MB

Buradan ne anlamalıyız diyecek olursak, program 9704 MB kadar ram kullanabileceğini belirtmiş, fakat aktif olarak kullandığı alan 731MB.

Şayet sistemimizde 9704MB kullanılabilir hafıza yoksa, bir an gelir tüm sistemimiz çuvallayabilir.

remzi@fedora:~$ free -m
               total                 used         free      shared    buff/cache    available
Mem:           64054       11473       34373        2357       18207          49529
Swap:          16383           0            16383
remzi@fedora:~$ 

Sistemimizde bu kadar kullanılabilir alan yoksa ne olur? vm.overcommit_memory ayarına bağlı olarak uygulama çalışır veya yeterli hafıza yok hatası vererek çuvallar.

 

Nedir bu vm.overcommit_memory?

Gerçekte olmayan hafıza kapasitemiz varmış gibi gösterip, uygulamaya tamam senin için bu kadar alan ayırdığımız belirtiriz, uygulama çalışmaya başlar.  Fakat günün sonunda istediği kadar alanı kullanmayı denediği zaman hem uygulama çuvallar, hemde sistem çuvallayabilir.  Biraz daha detaya inelim;

https://www.kernel.org/doc/Documentation/vm/overcommit-accounting

Canlı ve önemli işler için çalışan sunucularda bu değer daima iki veya sıfır olmalı.

 vm.overcommit_memory=0

Şeklinde sıfır yaparsak normal kullanıcılarımız, kullanılabilir alandan daha fazla istek yaptığında uygulama çalışmadan, yeterli hafıza yok mesajını vererek çalışmaya başlamaz.  Fakat istisnai durumlar içir root kullanıcısı kullanılabilir hafızadan daha fazla bir alan isteğinde bulunabilir. swap kullanımıda en aza indirilir.

 vm.overcommit_memory=1

Kullanılabilir alandan daha fazla alanı herkes isteyebilir. Lab ortamları hariç kullanmayın derim.

 vm.overcommit_memory=2

 Kişisel bilgisayarlarımızda kullanabileceğimiz güzel bir özellik.

Kullanılabilir Ram + Kullanılabilir Swap alanı kadar ram tahsisi yapılabilir.

Burada ikinci bir parametre  olarak swapin ne kadarının ram olarak kullanılabilirliğinin ayarlanması. Zorunlu değil fakat ayarlamak faydalı olur.

Bunuda ayarlamak  vm.overcommit_ratio ile yapabiliriz.

Daha fazla detay için kernel dökümanlarına ve arama motorlarına bakmak faydalı olur.


Hiç yorum yok:

Yorum Gönder