Sistem Kullanımını, Kesintileri ve Linux Sunucularındaki Sorunları Giderme - Bölüm 9


Linux çok güvenilir olmasına rağmen, akıllı sistem yöneticileri sistemin davranışını ve kullanımını her zaman göz önünde bulundurmanın bir yolunu bulmalıdır. Mümkün olduğunca %100'e yakın bir çalışma süresinin sağlanması ve kaynakların kullanılabilirliği birçok ortamda kritik ihtiyaçlardır. Sistemin geçmişini ve mevcut durumunu incelemek olası sorunları öngörmemize ve büyük olasılıkla önlememize olanak sağlayacaktır.

Linux Vakfı Sertifikasyon Programına Giriş

Bu makalede, sistem durumunu kontrol etmek, kesintileri analiz etmek ve devam eden sorunları gidermek için çoğu yukarı akış dağıtımında bulunan birkaç aracın bir listesini sunacağız. Özellikle mevcut sayısız veriden CPU, depolama alanı ve bellek kullanımı, temel süreç yönetimi ve günlük analizine odaklanacağız.

Depolama Alanı Kullanımı

Linux'ta depolama alanı kullanımını denetlemek için kullanılan iyi bilinen 2 komut vardır: df ve du.

İlki, df (disksiz anlamına gelir), genellikle dosya sistemine göre genel disk alanı kullanımını raporlamak için kullanılır.

Örnek 1: Disk alanı kullanımını bayt cinsinden ve insan tarafından okunabilir biçimde raporlama

Seçenekler olmadan, df disk alanı kullanımını bayt cinsinden bildirir. -h bayrağıyla aynı bilgiyi MB veya GB kullanarak görüntüleyecektir. Bu raporun ayrıca her dosya sisteminin toplam boyutunu (1-K bloklar halinde), boş ve kullanılabilir alanları ve her depolama aygıtının bağlama noktasını da içerdiğini unutmayın.

df
df -h

Bu kesinlikle hoş - ancak bir dosya sistemini kullanılamaz hale getirebilecek başka bir sınırlama daha var ve bu da inode'ların bitmesidir. Bir dosya sistemindeki tüm dosyalar, meta verilerini içeren bir inode ile eşlenir.

Örnek 2: Dosya sistemi tarafından insan tarafından okunabilen formatta inode kullanımının incelenmesi
df -hTi

kullanılan ve mevcut inode miktarını görebilirsiniz:

Yukarıdaki görsele göre /home'da 146 kullanılmış inode (%1) var, bu da o dosya sisteminde hala 226K dosya oluşturabileceğiniz anlamına geliyor.

Örnek 3: Boş dosya ve dizinlerin bulunması ve/veya silinmesi

Düğümleriniz tükenmeden çok önce depolama alanınızın tükenebileceğini veya bunun tersinin de geçerli olabileceğini unutmayın. Bu nedenle sadece depolama alanı kullanımını değil aynı zamanda dosya sistemi tarafından kullanılan inode sayısını da izlemeniz gerekir.

Sebepsiz yere inode kullanan boş dosyaları veya dizinleri (0B'yi kaplayan) bulmak için aşağıdaki komutları kullanın:

find  /home -type f -empty
find  /home -type d -empty

Ayrıca, boş dosyaları ve dizinleri de silmek istiyorsanız, her komutun sonuna -delete işaretini ekleyebilirsiniz:

find  /home -type f -empty --delete
find  /home -type f -empty

Önceki prosedür 4 dosyayı sildi. /home'da kullanılan/kullanılabilir düğümlerin sayısını tekrar kontrol edelim:

df -hTi | grep home

Gördüğünüz gibi, şu anda 142 kullanılmış inode var (öncesine göre 4 daha az).

Örnek 4: Dizine göre disk kullanımının incelenmesi

Belirli bir dosya sisteminin kullanımı önceden tanımlanmış bir yüzdenin üzerindeyse, en fazla alanı kaplayan dosyaların hangileri olduğunu bulmak için du (disk kullanımının kısaltması) komutunu kullanabilirsiniz.

Örnek, yukarıdaki ilk resimde gördüğünüz gibi %67 oranında kullanılan /var için verilmiştir.

du -sch /var/*

Not: Yukarıdaki alt dizinlerden herhangi birine geçerek içlerinde tam olarak ne olduğunu ve her bir öğenin ne kadar yer kapladığını öğrenebilirsiniz. Daha sonra bu bilgiyi, gerekmiyorsa bazı dosyaları silmek veya gerekiyorsa mantıksal birimin boyutunu genişletmek için kullanabilirsiniz.

Ayrıca Oku

  1. Disk Alanını Kontrol Etmek İçin 12 Faydalı “df” Komutu
  2. Dosya ve Dizinlerin Disk Kullanımını Bulmak için 10 Faydalı “du” Komutu

Bellek ve CPU Kullanımı

Linux'ta CPU/bellek kullanımı ve süreç yönetiminin genel kontrolünü gerçekleştirmek için kullanılan klasik araç top komutudur. Ayrıca üstte çalışan bir sistemin gerçek zamanlı görünümü görüntülenir. Aynı amaç için kullanılabilecek başka araçlar da var, örneğin htop, ama ben top'a razı oldum çünkü o herhangi bir Linux dağıtımında hazır olarak kurulur.

Örnek 5: Sisteminizin canlı durumunun top ile görüntülenmesi

En baştan başlamak için komut satırınıza aşağıdaki komutu yazıp Enter tuşuna basmanız yeterlidir.

top

Tipik bir üst çıktıyı inceleyelim:

1'den 5'e kadar olan satırlarda aşağıdaki bilgiler görüntülenir:

1. Geçerli saat (20:41:32) ve çalışma süresi (7 saat 41 dakika). Sistemde yalnızca bir kullanıcının oturum açtığı ve son 1, 5 ve 15 dakikadaki yük ortalaması sırasıyla. 0,00, 0,01 ve 0,05, bu zaman aralıklarında sistemin %0 oranında boşta kaldığını (0,00: CPU'yu bekleyen hiçbir işlem yoktu), ardından %1 oranında aşırı yüklendiğini (0,01: ortalama 0,01 işlem) gösterir. CPU'yu bekliyorduk) ve %5 (0,05). 0'dan küçükse ve sayı ne kadar küçükse (örneğin 0,65), sistem, 0,65'in nerede göründüğüne bağlı olarak son 1, 5 veya 15 dakika boyunca %35 boşta kaldı.

2. Şu anda çalışan 121 işlem var (listenin tamamını 6'da görebilirsiniz). Bunlardan yalnızca 1 tanesi çalışıyor (bu durumda en üstte, %CPU sütununda görebileceğiniz gibi) ve geri kalan 120 tanesi arka planda bekliyor ancak "uyuyor" ve biz onları çağırıncaya kadar bu durumda kalacaklar. Nasıl? Bunu bir MySQL istemi açarak ve birkaç sorgu yürüterek doğrulayabilirsiniz. Çalışan işlemlerin sayısının nasıl arttığını fark edeceksiniz.

Alternatif olarak, bir web tarayıcısı açabilir ve Apache tarafından sunulan herhangi bir sayfaya gidebilirsiniz; aynı sonucu elde edersiniz. Elbette bu örneklerde her iki hizmetin de sunucunuzda kurulu olduğu varsayılmaktadır.

3. us (değiştirilmemiş önceliğe sahip kullanıcı işlemlerini çalıştıran süre), sy (çekirdek işlemlerini çalıştıran süre), ni (değiştirilmiş önceliğe sahip kullanıcı işlemlerini çalıştıran süre), wa (G/Ç'nin tamamlanması için beklenen süre), hi (donanım kesintilerine hizmet vermek için harcanan süre), si (yazılım kesintilerine hizmet etmek için harcanan süre), st (hiper yönetici tarafından mevcut sanal makineden çalınan süre - yalnızca sanallaştırılmış ortamlarda).

4. Fiziksel bellek kullanımı.

5. Alan kullanımını değiştirin.

Örnek 6: Fiziksel bellek kullanımını inceleme

RAM belleğini incelemek ve kullanımını değiştirmek için free komutunu da kullanabilirsiniz.

free

Elbette aynı bilgileri insan tarafından okunabilir biçimde görüntülemek için -m (MB) veya -g (GB) anahtarlarını da kullanabilirsiniz:

free -m

Her iki durumda da, çekirdeğin mümkün olduğu kadar çok bellek ayırdığını ve bunu süreçler talep ettiğinde kullanılabilir hale getirdiğini bilmeniz gerekir. Özellikle “-/+ buffers/cache” satırı bu I/O önbelleği dikkate alındıktan sonraki gerçek değerleri gösterir.

Başka bir deyişle, işlemler tarafından kullanılan bellek miktarı ve diğer işlemlerin kullanabileceği bellek miktarı (bu durumda sırasıyla 232 MB kullanılır ve 270 MB kullanılabilir). İşlemler bu belleğe ihtiyaç duyduğunda çekirdek, G/Ç önbelleğinin boyutunu otomatik olarak azaltacaktır.

Ayrıca Okuyun: Linux Bellek Kullanımını Kontrol Etmek için 10 Faydalı “ücretsiz” Komut

Süreçlere Yakından Bakmak

Herhangi bir zamanda Linux sistemimizde çalışan birçok işlem vardır. Süreçleri yakından izlemek için kullanacağımız iki araç var: ps ve pstree.

Örnek 7: Sisteminizdeki tüm süreç listesinin ps ile görüntülenmesi (tam standart format)

-e ve -f seçeneklerini tek bir seçenekte (-ef) birleştirerek, sisteminizde o anda çalışmakta olan tüm işlemleri listeleyebilirsiniz. Çıktıyı istediğiniz işlemlere göre daraltmak için bu çıktıyı grep (LFCS serisinin 1. Bölümünde açıklandığı gibi) gibi diğer araçlara aktarabilirsiniz:

ps -ef | grep -i squid | grep -v grep

Yukarıdaki süreç listesi aşağıdaki bilgileri gösterir:

sürecin sahibi, PID, Ana PID (ana süreç), işlemci kullanımı, komutun başlatıldığı zaman, tty (? bunun bir arka plan programı olduğunu gösterir), kümülatif CPU zamanı ve süreçle ilişkili komut.

Örnek 8: ps çıktısını özelleştirme ve sıralama

Ancak, belki de tüm bu bilgilere ihtiyacınız yoktur ve işlemin sahibini, onu başlatan komutu, PID'sini, PPID'sini ve şu anda kullandığı bellek yüzdesini bu sırayla göstermek ve sıralamak isteyebilirsiniz. azalan sırada bellek kullanımı (varsayılan olarak ps'nin PID'ye göre sıralandığını unutmayın).

ps -eo user,comm,pid,ppid,%mem --sort -%mem

%mem'in önündeki eksi işareti, azalan düzende sıralamayı gösterir.

Herhangi bir nedenle bir süreç çok fazla sistem kaynağı almaya başlarsa ve sistemin genel işlevselliğini tehlikeye atması muhtemelse, kill programını kullanarak aşağıdaki sinyallerden birini ona ileterek yürütülmesini durdurmak veya duraklatmak isteyeceksiniz. Bunu yapmayı düşünmenizin diğer nedenleri, ön planda bir işlemi başlatmış olmanız ancak onu duraklatıp arka planda devam ettirmek istemenizdir.

Signal name Signal number Description
 SIGTERM 15  Kill the process gracefully.
 SIGINT 2  This is the signal that is sent when we press Ctrl + C. It aims to interrupt the process, but the process may ignore it.
 SIGKILL 9  This signal also interrupts the process but it does so unconditionally (use with care!) since a process cannot ignore it.
 SIGHUP 1  Short for “Hang UP”, this signals instructs daemons to reread its configuration file without actually stopping the process.
 SIGTSTP 20  Pause execution and wait ready to continue. This is the signal that is sent when we type the Ctrl + Z key combination.
 SIGSTOP 19  The process is paused and doesn’t get any more attention from the CPU cycles until it is restarted.
 SIGCONT 18  This signal tells the process to resume execution after having received either SIGTSTP or SIGSTOP. This is the signal that is sent by the shell when we use the fg or bg commands.
Örnek 9: Çalışan bir işlemin yürütülmesini duraklatma ve arka planda devam ettirme

Belirli bir işlemin normal yürütülmesi, çalışırken ekrana hiçbir çıktı gönderilmeyeceği anlamına geldiğinde, işlemi arka planda başlatmak isteyebilirsiniz (komutun sonuna bir ve işareti ekleyerek).

process_name &

veya
Ön planda çalışmaya başladıktan sonra duraklatın ve ile arka plana gönderin.

Ctrl + Z
kill -18 PID

Örnek 10: “Çıldırmış” bir süreci zorla öldürmek

Lütfen her dağıtımın, SysV tabanlı sistemlerde service veya systemd tabanlı sistemlerde systemctl gibi yaygın hizmetleri sorunsuz bir şekilde durdurmak/başlatmak/yeniden başlatmak/yeniden yüklemek için araçlar sağladığını unutmayın.

Bir süreç bu yardımcı programlara yanıt vermezse, ona SIGKILL sinyali göndererek onu zorla öldürebilirsiniz.

ps -ef | grep apache
kill -9 3821

Peki.. Ne Oldu/Oluyor?

Sistemde herhangi bir kesinti olduğunda (elektrik kesintisi, donanım arızası, bir sürecin planlı veya plansız kesintisi veya herhangi bir anormallik olabilir), /var/log ne olduğunu veya karşılaştığınız sorunlara neyin sebep olabileceğini belirleyen en iyi arkadaşlarınızdır.

cd /var/log

/var/log dosyasındaki öğelerin bazıları normal metin dosyalarıdır, diğerleri dizinlerdir ve diğerleri döndürülmüş (geçmişsel) günlüklerin sıkıştırılmış dosyalarıdır. Adında hata sözcüğü geçenleri kontrol etmek isteyeceksiniz, ancak geri kalanını incelemek de işinize yarayabilir.

Örnek 11: Günlükleri işlemlerdeki hatalar açısından inceleme

Bu senaryoyu hayal edin. LAN istemcileriniz ağ yazıcılarına yazdıramıyor. Bu durumu gidermenin ilk adımı /var/log/cups dizinine gidip orada ne olduğuna bakmaktır.

error_log dosyasının son 10 satırını görüntülemek için tail komutunu veya günlüğün gerçek zamanlı görünümü için tail -f error_log komutunu kullanabilirsiniz.

cd /var/log/cups
ls
tail error_log

Yukarıdaki ekran görüntüsü, sorununuza neyin sebep olabileceğini anlamanız için bazı yararlı bilgiler sağlar. Adımları izlemenin veya süreçteki arızayı düzeltmenin yine de genel sorunu çözmeyebileceğini unutmayın; ancak her sorun ortaya çıktığında (yerel veya ağ kaynaklı olsun) en başından itibaren günlükleri kontrol etmeye alışırsanız, Kesinlikle doğru yolda olacağız.

Örnek 12: Günlükleri donanım arızaları açısından inceleme

Donanım arızalarının giderilmesi zor olsa da, hatalı olduğu varsayılan donanım parçasıyla ilgili sözcükler için dmesg'i, mesaj günlüklerini ve grep'i kontrol etmelisiniz.

Aşağıdaki resim, aşağıdaki komut kullanılarak hata kelimesi arandıktan sonra /var/log/messages adresinden alınmıştır:

less /var/log/messages | grep -i error

İki depolama aygıtıyla sorun yaşadığımızı görebiliyoruz: /dev/sdb ve /dev/sdc, bu da RAID dizisiyle ilgili bir soruna neden oluyor.

Çözüm

Bu makalede, sisteminizin genel durumunun her zaman farkında olmanıza yardımcı olabilecek bazı araçları araştırdık. Ayrıca işletim sisteminizin ve kurulu paketlerinizin en son kararlı sürümlerine güncellendiğinden emin olmanız gerekir. Ve asla ama asla günlükleri kontrol etmeyi unutmayın! O zaman herhangi bir soruna kesin çözüm bulmak için doğru yöne yönlendirileceksiniz.

Aşağıdaki formu kullanarak yorumlarınızı, önerilerinizi veya varsa sorularınızı bırakmaktan çekinmeyin.