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.
Yorumlar
Yorum Gönder