|
vmstat komutu, sunucunun durum değerlerini belirli bir zaman aralığında, sunucunun durum değerleri dahil olmak üzere en yaygın Linux/Unix izleme aracıdırCPU kullanımı, bellek kullanımı, sanal bellek değişimi, IO okuma ve yazma işlemleri. Bu komut, Linux/Unix'i kontrol etmek için en sevdiğim komut; biri Linux/Unix'in desteklendiği, diğeri ise en üstteki komuta kıyasla tüm makinenin CPU, bellek ve işlem işlemleri kullanımını görebiliyorum, sadece her işlemin CPU ve bellek kullanımını görebiliyorum (farklı kullanım senaryoları). Genellikle, vmstat aracının kullanımı iki sayısal parametre üzerinden yapılır; birinci parametre örneklenen zaman aralığı sayısı, birim saniyeler ve ikinci parametre örnek sayısıdır, örneğin:
root@ubuntu:~# vmstat 2 1 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 1 0 0 3498472 315836 3819540 0 0 0 1 2 0 0 0 100 0 2, sunucu durumu her iki saniyede bir toplanırken, 1 ise sunucu durumunun sadece bir kez toplandığı anlamına gelir. Aslında, başvuru sürecinde belirli bir süre boyunca izlerizler ve izlemek istemezsek, vmstat'ı doğrudan sonlandırabiliriz, örneğin:
root@ubuntu:~# vmstat 2 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 1 0 0 3499840 315836 3819660 0 0 0 1 2 0 0 0 100 0 0 0 0 3499584 315836 3819660 0 0 0 0 88 158 0 0 100 0 0 0 0 3499708 315836 3819660 0 0 0 2 86 162 0 0 100 0 0 0 0 3499708 315836 3819660 0 0 0 10 81 151 0 0 100 0 1 0 0 3499732 315836 3819660 0 0 0 2 83 154 0 0 100 0
Bu, vmstat'ın her 2 saniyede bir veri topladığı ve programı bitirene kadar devam ettiği anlamına geliyor, ben de burada 5 kez veri topladıktan sonra programı bitiriyorum. Tamam, komut tanıtıldı, şimdi her parametrenin anlamını açıklamaya başlayalım. rBu, kuyruğu çalıştırmak (yani CPU'ya gerçekten tahsis edilen süreç sayısını), test ettiğim sunucunun şu anda nispeten boş olduğunu, hiç programın çalışmadığını ve bu değerin CPU sayısını aştığında bir CPU darboğazı oluşacağı anlamına geliyor. Bu aynı zamanda üst yükle de ilgilidir; genellikle yük 3'ü geçerse daha yüksektir, 5'i geçerse daha yüksektir, 10'u geçerse normal değildir ve sunucunun durumu çok tehlikelidir. Üstteki yük, saniyede koşan kuyruğun yüküne benzer. Çalışan kuyruk çok büyükse, CPU'nuzun meşgul olduğu anlamına gelir ve bu genellikle yüksek CPU kullanımına neden olur. bBu, engellenmiş süreç demek, bu çok fazla söylenecek bir şey değil, süreç engellenmiş, herkes anlıyor. SWPDKullanılan sanal bellek boyutu 0'dan büyükse, bu bilgisayarınızın yetersiz fiziksel belleğe sahip olduğu anlamına gelir ve program bellek sızıntısının nedeni bu değilse, belleği yükseltme veya bellek tüketen görevleri başka bir makineye taşıma zamanı gelmiştir. serbest Boş fiziksel belleğin boyutu, makine belleğimin toplamı 8G ve kalan 3415M. Buff Linux/Unix sistemi, dizindeki içeriği, izinleri vb. önbellek için kullanılıyor, bu makinede muhtemelen 300 milyondan fazla yer tutuyor önbellekcache doğrudan açtığımız dosyaları hatırlamak ve dosyaları tamponlamak için kullanılır, kendi makinemde 300M'den fazla yer alırım (işte Linux/Unix'in zekice özelliği, boş fiziksel belleğin bir kısmını dosyaları ve dizinleri önbellek etmek için alırsınız, program performans artırmak için, program bellek kullandığında, buffer/cached hızlıca kullanılır.) ) si Bu değer 0'dan büyükse, fiziksel hafızanın yeterli olmadığı veya hafızanın sızdırdığı anlamına gelir. Makinemin bolca hafızası var ve her şey yolunda. yani Saniyede sanal belleğe yazılan diskin boyutu, eğer bu değer 0'dan büyükse, yukarıdaki ile aynıdır. Bi Blok ekipmanıSaniyede alınan blok sayısı, burada blok cihazı sistemdeki tüm diskleri ve diğer blok cihazlarını ifade eder, varsayılan blok boyutu 1024 bayttır, makinede herhangi bir IO işlemi yok, yani her zaman 0 olmuştur, ancak büyük miktarda veri (2-3T) işleyen makinelerde 140000/s'ye ulaşabiliyor ve disk yazma hızı saniyede neredeyse 1400M boÖrneğin, bir blok cihazı tarafından saniyede gönderilen blok sayısı, bir dosyayı okuduğumuzda, bo 0'dan büyüktür. Bi ve BO genellikle 0'a yakın, aksi takdirde IO çok sık ve ayarlanması gerekiyor. içindeCPU'nun saniyesindeki kesinti sayısı, zaman kesintileri dahil CSÖrneğin, bir sistem fonksiyonunu çağırdığımızda bağlam anahtarı sayısı, bağlamları ve iş zinciri anahtarlamalarını yapmamız gerekirSüreç bağlamıÖrneğin, Apache ve nginx gibi web sunucularında genellikle binlerce hatta on binlerce eşzamanlılıkla performans testleri yaparız ve web sunucusu seçme süreci sürecin zirvesi veya iş parçacığı stres testi ile düşürülebilir, ta ki cs nispeten küçük bir değere ulaşana kadar, işlem ve iş parçacağı sayısı daha uygun bir değer haline gelir. Sistem çağrıları da aynıdır; her sistem fonksiyonu çağrıldığında, kodumuz çekirdek alanına girer ve bu da bağlam değişimine yol açar, ki bu çok kaynak tüketicidir ve sistem fonksiyonlarına sık çağrılardan kaçınmalıyız. Çok fazla bağlam anahtarı, CPU'nun çoğunun bağlam değiştirmeye harcanmasına neden olur, bu da CPU'nun ciddi işleri yapması için daha az zaman alır ve CPU tam olarak kullanılmaz, bu da tavsiye edilmez. BizkullanıcıCPU süresiBir keresinde US 100'e yakın olduğunu ve r kuyruğunun 80'e ulaştığını gördüm, bu sunucu çok sık şifreleme ve şifre çözme yapıyordu (makine stres testinden geçti ve performansı iyi değildi). sySistem CPU süresi çok yüksekse, sistem çağrıları uzun olur, örneğin sık sık işlem işlemleri gibi. Kimliği Boşta CPU süresi, genel olarak, id + us + sy = 100, genellikle id boşta CPU kullanımı, us kullanıcı CPU kullanımı, sy sistem CPU kullanımı. WTIO CPU zamanını bekle.
|