LFCS: Linux Süreçlerinin Kaynak Kullanımını İzleyin ve Kullanıcı Bazında Süreç Sınırlarını Ayarlayın - Bölüm 14


2 Şubat 2016 tarihinden itibaren geçerli olmak üzere LFCS sertifikasyon sınavı hedeflerinde yapılan son değişiklikler nedeniyle, gerekli makaleleri burada yayınlanan LFCS serisine ekliyoruz. Bu sınava hazırlanmak için LFCE serisini de tamamlamanız önemle tavsiye edilir.

Her Linux sistem yöneticisinin donanımın, kaynakların ve önemli süreçlerin bütünlüğünü ve kullanılabilirliğini nasıl doğrulayacağını bilmesi gerekir. Ayrıca kaynak sınırlarını kullanıcı bazında belirlemek de onun beceri setinin bir parçası olmalıdır.

Bu makalede, beklenmedik üretim kesintilerine ve para kaybına neden olabilecek olası sorunlardan kaçınmak için sistemin hem donanımının hem de yazılımının doğru şekilde davranmasını sağlamanın birkaç yolunu inceleyeceğiz.

Linux Raporlama İşlemcileri İstatistikleri

mpstat ile her bir işlemcinin etkinliklerini ayrı ayrı veya bir bütün olarak sistem için hem tek seferlik anlık görüntü olarak hem de dinamik olarak görüntüleyebilirsiniz.

Bu aracı kullanmak için sysstat'ı yüklemeniz gerekir:

yum update && yum install sysstat              [On CentOS based systems]
aptitutde update && aptitude install sysstat   [On Ubuntu based systems]
zypper update && zypper install sysstat        [On openSUSE systems]

sysstat ve yardımcı programları hakkında daha fazla bilgiyi Learn Sysstat and It Utilities'de okuyabilirsiniz Linux'ta mpstat, pidstat, iostat ve sar

mpstat'ı yükledikten sonra işlemci istatistiklerine ilişkin raporlar oluşturmak için bunu kullanın.

Tüm CPU'lar için (-P ALL ile gösterildiği gibi) 2 saniyelik aralıklarla 3 genel CPU kullanımına ilişkin rapor (-u) görüntülemek için , Yapmak:

mpstat -P ALL -u 2 3
Örnek Çıktı
Linux 3.19.0-32-generic (linux-console.net) 	Wednesday 30 March 2016 	_x86_64_	(4 CPU)

11:41:07  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:41:09  IST  all    5.85    0.00    1.12    0.12    0.00    0.00    0.00    0.00    0.00   92.91
11:41:09  IST    0    4.48    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   94.53
11:41:09  IST    1    2.50    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   97.00
11:41:09  IST    2    6.44    0.00    0.99    0.00    0.00    0.00    0.00    0.00    0.00   92.57
11:41:09  IST    3   10.45    0.00    1.99    0.00    0.00    0.00    0.00    0.00    0.00   87.56

11:41:09  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:41:11  IST  all   11.60    0.12    1.12    0.50    0.00    0.00    0.00    0.00    0.00   86.66
11:41:11  IST    0   10.50    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   88.50
11:41:11  IST    1   14.36    0.00    1.49    2.48    0.00    0.00    0.00    0.00    0.00   81.68
11:41:11  IST    2    2.00    0.50    1.00    0.00    0.00    0.00    0.00    0.00    0.00   96.50
11:41:11  IST    3   19.40    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   79.60

11:41:11  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:41:13  IST  all    5.69    0.00    1.24    0.00    0.00    0.00    0.00    0.00    0.00   93.07
11:41:13  IST    0    2.97    0.00    1.49    0.00    0.00    0.00    0.00    0.00    0.00   95.54
11:41:13  IST    1   10.78    0.00    1.47    0.00    0.00    0.00    0.00    0.00    0.00   87.75
11:41:13  IST    2    2.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   97.00
11:41:13  IST    3    6.93    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   92.57

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all    7.71    0.04    1.16    0.21    0.00    0.00    0.00    0.00    0.00   90.89
Average:       0    5.97    0.00    1.16    0.00    0.00    0.00    0.00    0.00    0.00   92.87
Average:       1    9.24    0.00    1.16    0.83    0.00    0.00    0.00    0.00    0.00   88.78
Average:       2    3.49    0.17    1.00    0.00    0.00    0.00    0.00    0.00    0.00   95.35
Average:       3   12.25    0.00    1.16    0.00    0.00    0.00    0.00    0.00    0.00   86.59

Belirli bir CPU için aynı istatistikleri görüntülemek için (aşağıdaki örnekte CPU 0) şunu kullanın:

mpstat -P 0 -u 2 3
Örnek Çıktı
Linux 3.19.0-32-generic (linux-console.net) 	Wednesday 30 March 2016 	_x86_64_	(4 CPU)

11:42:08  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:42:10  IST    0    3.00    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   96.50
11:42:12  IST    0    4.08    0.00    0.00    2.55    0.00    0.00    0.00    0.00    0.00   93.37
11:42:14  IST    0    9.74    0.00    0.51    0.00    0.00    0.00    0.00    0.00    0.00   89.74
Average:       0    5.58    0.00    0.34    0.85    0.00    0.00    0.00    0.00    0.00   93.23

Yukarıdaki komutların çıktısı şu sütunları gösterir:

  1. CPU: Tamsayı olarak işlemci numarası veya tüm işlemciler için ortalama olarak tümü kelimesi.
  2. %usr: Kullanıcı düzeyindeki uygulamaları çalıştırırken CPU kullanımının yüzdesi.
  3. %nice: %usr ile aynı, ancak iyi önceliğe sahip.
  4. %sys: Çekirdek uygulamaları yürütülürken meydana gelen CPU kullanımının yüzdesi. Bu, kesintilerle uğraşmak veya donanımı işlemek için harcanan zamanı içermez.
  5. %iowait: Belirtilen CPU'nun (veya tamamının) boşta olduğu ve bu CPU üzerinde kaynak yoğun bir G/Ç işleminin planlandığı zamanın yüzdesi. Daha ayrıntılı bir açıklamayı (örneklerle birlikte) burada bulabilirsiniz.
  6. %irq: Donanım kesintilerine hizmet vermek için harcanan zamanın yüzdesi.
  7. %soft: %irq ile aynı, ancak yazılım kesintileri var.
  8. %steal: Konuk olarak bir sanal makine, CPU(lar) için rekabet ederken hipervizörün dikkatini "kazanırken" istemsiz beklemede (çalma veya çalınma süresi) harcanan zamanın yüzdesi. Bu değer mümkün olduğu kadar küçük tutulmalıdır. Bu alandaki yüksek değer, sanal makinenin durduğu veya yakında duracağı anlamına gelir.
  9. %guest: Bir sanal işlemciyi çalıştırmak için harcanan zamanın yüzdesi.
  10. %idle: CPU'ların herhangi bir görevi yürütmediği sürenin yüzdesi. Bu sütunda düşük bir değer görüyorsanız bu, sistemin ağır yük altında olduğunun göstergesidir. Bu durumda, birazdan tartışacağımız gibi, buna neyin sebep olduğunu belirlemek için süreç listesine daha yakından bakmanız gerekecektir.

İşlemciyi biraz yüksek bir yük altına sokmak için aşağıdaki komutları çalıştırın ve ardından mpstat'ı (belirtildiği gibi) ayrı bir terminalde çalıştırın:

dd if=/dev/zero of=test.iso bs=1G count=1
mpstat -u -P 0 2 3
ping -f localhost # Interrupt with Ctrl + C after mpstat below completes
mpstat -u -P 0 2 3

Son olarak, "normal" koşullar altında mpstat çıktısını karşılaştırın:

Yukarıdaki resimde görebileceğiniz gibi, %idle sütununda belirtildiği gibi, CPU 0 ilk iki örnekte ağır yük altındaydı.

Bir sonraki bölümde kaynağa aç olan bu süreçlerin nasıl tanımlanacağını, bunlar hakkında daha fazla bilginin nasıl elde edileceğini ve uygun önlemlerin nasıl alınacağını tartışacağız.

Linux Süreçlerini Raporlama

İşlemleri CPU kullanımına göre sıralayarak listelemek için iyi bilinen ps komutunu -eo (kullanıcı tanımlı formattaki tüm işlemleri seçmek için) ve ile birlikte kullanacağız. --sort (özel bir sıralama düzeni belirtmek için) seçenekleri şöyle:

ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu

Yukarıdaki komut yalnızca PID, PPID, işlemle ilişkili komut ve azalan sırada CPU kullanım yüzdesine göre sıralanmış CPU ve RAM kullanım yüzdesini gösterecektir. . .iso dosyasının oluşturulması sırasında yürütüldüğünde çıktının ilk birkaç satırı şöyledir:

İlgilendiğimiz bir süreci belirledikten sonra (PID=2822'li süreç gibi), /proc/PID (/proc/2822 ) dizinine gidebiliriz. bu durumda) ve bir dizin listesi yapın.

Bu dizin, bu özel işlem hakkında ayrıntılı bilgi içeren çeşitli dosya ve alt dizinlerin, işlem sırasında tutulduğu yerdir.

Örneğin:
  1. /proc/2822/io, sürece ilişkin GÇ istatistiklerini içerir (diğerlerinin yanı sıra, GÇ işlemleri sırasında okunan ve yazılan karakter ve bayt sayısı).
  2. /proc/2822/attr/current, işlemin mevcut SELinux güvenlik özelliklerini gösterir.
  3. /proc/2822/cgroup, aşağıdakilerle doğrulayabileceğiniz CONFIG_CGROUPS çekirdek yapılandırma seçeneği etkinse, işlemin ait olduğu kontrol gruplarını (kısaca cgroups) açıklar:
cat /boot/config-$(uname -r) | grep -i cgroups

Seçenek etkinse şunları görmelisiniz:

CONFIG_CGROUPS=y

Red Hat Enterprise Linux 7 Kaynak Yönetimi kılavuzunun 1'den 4'e kadar olan Bölümlerinde, openSUSE Sistem Analizi'nin 9. Bölümünde açıklandığı gibi, cgroups kullanarak, izin verilen kaynak kullanım miktarını işlem bazında yönetebilirsiniz. ve Ayarlama kılavuzunda ve Ubuntu 14.04 Sunucu belgelerinin Kontrol Grupları bölümünde.

/proc/2822/fd, işlemin açtığı her dosya tanımlayıcı için bir sembolik bağlantı içeren bir dizindir. Aşağıdaki resimde, .iso görüntüsünü oluşturmak için tty1'de (ilk terminal) başlatılan işleme ilişkin bu bilgiler gösterilmektedir:

Yukarıdaki resimde stdin (dosya tanımlayıcı 0), stdout (dosya tanımlayıcı 1) ve gösterilmektedir. >stderr (dosya tanımlayıcı 2) /dev/zero, /root/test.iso ve /dev/tty1, sırasıyla.

/proc hakkında daha fazla bilgi Kernel.org tarafından tutulan ve bakımı yapılan “/proc dosya sistemi” belgesinde ve Linux Programcı Kılavuzu'nda bulunabilir.

Linux'ta Kaynak Sınırlarının Kullanıcı Başına Göre Ayarlanması

Dikkatli olmazsanız ve herhangi bir kullanıcının sınırsız sayıda işlem çalıştırmasına izin vermezseniz, sonunda beklenmedik bir sistem kapanmasıyla karşılaşabilir veya sistem kullanılamaz duruma girdiğinde kilitlenebilirsiniz. Bunun olmasını önlemek için kullanıcıların başlatabileceği işlem sayısına bir sınır koymalısınız.

Bunu yapmak için /etc/security/limits.conf dosyasını düzenleyin ve sınırı ayarlamak için dosyanın altına aşağıdaki satırı ekleyin:

*   	hard	nproc   10

İlk alan bir kullanıcıyı, bir grubu veya hepsini belirtmek için kullanılabilir (*), ikinci alan ise işlem sayısına (nproc) şeklinde kesin bir sınır uygular. 10. Değişiklikleri uygulamak için çıkış yapıp tekrar giriş yapmanız yeterlidir.

Böylece, root dışında belirli bir kullanıcı (meşru olsun ya da olmasın) bir kabuk çatal bombası başlatmaya çalışırsa ne olacağını görelim. Eğer limitleri uygulamamış olsaydık, bu başlangıçta bir fonksiyonun iki örneğini başlatacak ve daha sonra her birini bitmeyen bir döngüde kopyalayacaktı. Böylece, sonunda sisteminizi taramaya getirir.

Ancak yukarıdaki kısıtlama uygulandığında çatal bombası başarılı olmaz ancak sistem yöneticisi onunla ilişkili işlemi sonlandırana kadar kullanıcı yine de kilitlenir:

İPUCU: ulimit tarafından mümkün kılınan diğer olası kısıtlamalar limits.conf dosyasında belgelenmiştir.

Linux Diğer Süreç Yönetimi Araçları

Daha önce tartışılan araçlara ek olarak, bir sistem yöneticisinin ayrıca şunları yapması gerekebilir:

a) Renice'i kullanarak bir işlemin yürütme önceliğini (sistem kaynaklarının kullanımı) değiştirin. Bu, çekirdeğin, atanan önceliğe (genellikle "nezaket" olarak bilinen, -20 aralığında bir sayı) dayalı olarak daha fazla veya daha az sistem kaynağını sürece tahsis edeceği anlamına gelir. 19).

Değer ne kadar düşük olursa yürütme önceliği de o kadar yüksek olur. Normal kullanıcılar (root dışındakiler) yalnızca sahip oldukları süreçlerin güzelliğini daha yüksek bir değere (yani daha düşük yürütme önceliğine) değiştirebilirken, root bu değeri herhangi bir süreç için değiştirebilir ve artırabilir veya azaltabilir.

Renice'nin temel sözdizimi aşağıdaki gibidir:

renice [-n] <new priority> <UID, GID, PGID, or empty> identifier

Yeni öncelik değerinden sonraki argüman mevcut değilse (boş), varsayılan olarak PID'ye ayarlanır. Bu durumda PID=identifier ile işlemin güzelliği olarak ayarlanır.

b) Gerektiğinde bir sürecin normal yürütülmesini kesintiye uğratın. Bu genellikle süreci "öldürmek" olarak bilinir. Temelde bu, sürecin yürütülmesini düzgün bir şekilde tamamlamak ve kullanılan kaynakları düzenli bir şekilde serbest bırakmak için sürece bir sinyal göndermek anlamına gelir.

Bir işlemi sonlandırmak için kill komutunu şu şekilde kullanın:

kill PID

Alternatif olarak, belirli bir (-u) sahibine veya bir grup sahibi (-G)'ye ait tüm işlemleri, hatta PPID'ye sahip olan işlemleri sonlandırmak için pkill'i kullanabilirsiniz. ortak (-P). Bu seçeneklerin ardından tanımlayıcı olarak sayısal gösterim veya gerçek ad gelebilir:

pkill [options] identifier

Örneğin,

pkill -G 1000

GID=1000'e sahip grubun sahip olduğu tüm süreçleri sonlandıracak.

Ve,

pkill -P 4993 

PPID'si 4993 olan tüm işlemleri sonlandıracaktır.

pkill'i çalıştırmadan önce, sonuçları ilk olarak pgrep ile test etmek iyi bir fikirdir, belki de -l seçeneğini kullanarak listeleyebilirsiniz. süreçlerin adları. Aynı seçenekleri kullanır ancak yalnızca pkill kullanıldığında sonlandırılacak süreçlerin PID'lerini (başka bir işlem yapmadan) döndürür.

pgrep -l -u gacanepa

Bu, bir sonraki resimde gösterilmektedir:

Özet

Bu makalede, bir Linux sistemindeki kritik donanım ve yazılım bileşenlerinin bütünlüğünü ve kullanılabilirliğini doğrulamak amacıyla kaynak kullanımını izlemenin birkaç yolunu araştırdık.

Ayrıca olağandışı koşullar altında uygun eylemi (belirli bir sürecin yürütme önceliğini ayarlayarak veya sonlandırarak) nasıl gerçekleştireceğimizi de öğrendik.

Bu eğitimde açıklanan kavramların faydalı olduğunu umuyoruz. Herhangi bir sorunuz veya yorumunuz varsa aşağıdaki iletişim formunu kullanarak bize ulaşmaktan çekinmeyin.