“Yük ortalaması” “üst” çıktıda nasıl yorumlanır? Tüm dağıtımlar için aynı mıdır?


12

Red-Hat tabanlı bir linux çıktısının Debian tabanlı bir linux tarafından farklı yorumlanıp yorumlanamayacağını bilmek istiyorum.

Soruyu daha da spesifik hale getirmek için, neyin toppeşindeyim, bir Red-Hat sistemindeki komutun ilk satırındaki "yük ortalamasının" nasıl yorumlandığını ve bunun resmi dokümantasyon ro koduyla nasıl doğrulanacağını anlamaktır .

[Bu soruya, tümü soruya kabul edilebilir cevaplar olan pek çok yol vardır]

Potansiyel bir yaklaşım, bu bilgilerin resmi olarak nerede belgelendiğini bulmak olacaktır.
Bir diğeri, topüzerinde çalıştığım belirli dağıtım ve sürümde oluşturulan kod sürümünü bulmak olacaktır .

Aldığım komut çıktısı:

    top - 13:08:34 up  1:19,  2 users,  load average: 0.02, 0.00, 0.00
    Tasks: 183 total,   1 running, 182 sleeping,   0 stopped,   0 zombie
    Cpu(s):  0.2%us,  0.2%sy,  0.0%ni, 96.8%id,  2.7%wa,  0.0%hi,  0.0%si,  0.0%st
    Mem:   3922520k total,   788956k used,  3133564k free,   120720k buffers
    Swap:  2097148k total,        0k used,  2097148k free,   344216k cached


Bu durumda yük ortalama değerini nasıl yorumlayabilirim ?
Ortalama yükün yaklaşık bir dakika olduğunu, bir dokümantasyon kaynağından olduğunu ve 100 ile çarpıldıktan sonra başka bir dokümantasyon kaynağı tarafından yorumlanması gerektiğini tespit ettim.
Yani soru şu:
% 0.02 veya% 2 yüklü mü?
Dokümantasyon kaynakları ve versiyonları:

1) İlk yıldız

    TOP(1)                        Linux User’s Manual                       TOP(1)

    NAME
           top - display Linux tasks

Kaynak: man topRedHat dağıtımımda
Ubuntu'nun yük görevini şu şekilde açıklamayan "görevler" içeren bir sürümü var:
http://manpages.ubuntu.com/manpages/precise/man1/top.1.html

2) İkincisi ile başlar

    TOP(1)                          User Commands                         TOP(1)

   NAME         top

   top - display Linux processes

Kaynak:
http://man7.org/linux/man-pages/man1/top.1.htm

3) Bu şunlarla başlar:

   TOP(1)

   NAME

   top - display and update information about the top cpu processes

Kaynak: http://www.unixtop.org/man.shtml ilk bir, görebileceği içinde veya ve çıkış biçimi için herhangi bir açıklama yoktur (ne de hakkında yük ortalamasının ben ilgileniyorum hangi) . İkinci bir yük ortalama son 1 dakika ile ilgisi var olduğuna işaret ederek, kısa bir açıklama içerir, ancak değeri yorumlanması hakkında hiçbir şey!

man topRHELonline ubuntu documentation


Doğrudan ikinci kaynaktan alıntı yapıyorum:

2a. UPTIME ve LOAD Ortalamaları
Bu bölüm aşağıdakileri içeren tek bir satırdan oluşur:
ekran modu
geçerli süresine ve son önyüklemeden bu yana geçen
toplam kullanıcı sayısı
son 1, 5 ve 15 dakika boyunca sistem yükü ortalama sayısına bağlı olarak program veya pencere adı

Dolayısıyla, bu açıklama gerçekten doğruysa, yük ortalamasının son 1 dakika civarında olduğunu anlamak yeterlidir.
Ancak sayının biçimini açıklamaz.

In üçüncü açıklama, o diyor ki:

Yük ortalamaları için sayılar belirlenirken, 100 ile çarpılmalıdır.

Bu açıklama, 0.02'nin% 0.02 değil% 2 anlamına geldiğini göstermektedir. Ama bu doğru mu? Ayrıca, linux'un tüm dağıtımları ve potansiyel olarak farklı uygulamaları için doğru topmu?
Bu sorunun cevabını bulmak için, kodu çevrimiçi arayarak geçmeye çalıştım. Ama en azından topRHEL ile ilgili iki farklı versiyon buldum ! builtin-top.cve refactored top.c. Her ikisi de Red-Hat tarafından bildirimin kodun başında söylediği gibi telif hakkıyla korunmaktadır ve dolayısıyla RHEL'in bunlardan birini kullanması mantıklı görünmektedir.
http://lxr.free-electrons.com/source/tools/perf/builtin-top.c
http://lxr.free-electrons.com/source/tools/perf/util/top.c

Yani, bu kadar kod girmeden önce, cpu yükünün nasıl yorumlandığına dair doğru bir anlayış oluşturmak için nereye odaklanılması gerektiği hakkında bir fikir istedim?

Aşağıdaki cevaplarda verilen bilgilerden bazı kişisel aramalara ek olarak şunları buldum:

1 - Kullandığım topprocps-3.2.8 paketinde yer alıyor. Hangi kullanılarak doğrulanabilir top -v.
2 - procps-3.2.8Resmi web sitesinden indirdiğim versiyonda , aracın uptimebilgilerini doğrudan procfsdosyadan alıyor /proc/loadavg(linux işlevini kullanmadan getloadavg()).
3 - Şimdi topkomut için işlevi de kullanmıyor getloadavg(). topGerçekten de aynı şeyleri yaptığını doğrulamayı başardım .uptimeyük ortalamalarını göstermek için bir araç. Aslında uptimearacın bilgilerini procfsdosyadan alan işlevini çağırır /proc/loadavg.

Yani, her şey /proc/loadavgdosyayı gösteriyor! Böylece, load averagetarafından üretilen hakkında doğru bir anlayış oluşturmak için top, dosyanın nasıl loadavgyazıldığını görmek için çekirdek kodunu okumak gerekir .
Bir layman'ın üç değerinin terimlerinin açıklamasını sağlayan cevaplardan birinde işaret edilen mükemmel bir makale de var loadavg.
Bu nedenle, tüm cevapların eşit derecede yararlı ve yararlı olmasına rağmen, http://www.linuxjournal.com//article/9001 makalesine işaret eden cevabı sorumun "cevabı" olarak işaretleyeceğim . Katkınız için hepinize teşekkürler!

Ayrıca üst ve yük ortalamasını anlama sorusundan loadavg, hesaplanan noktayı gösteren çekirdeğin kaynak koduna bir bağlantı buldum . Görüldüğü gibi, nasıl çalıştığını açıklayan büyük bir yorum var, ayrıca kodun bu kısmı da var C!
Kodun bağlantısı http://lxr.free-electrons.com/source/kernel/sched/loadavg.c
Yine herhangi bir intihalle uğraşmaya çalışmıyorum, bunu sadece bütünlük için ekliyorum. Yani, çekirdek koduna bağlantı üst ve yük ortalamasını anlama bölümündeki cevaplardan birinden bulundu tekrar ediyorum ...


Sürümler size ne anlatıyor? ( top -v)
Fiximan

top: Procps sürüm 3.2.8
Angelos Asonitis

Yanıtlar:


19

CPU yükü çalıştırma kuyruğunun uzunluğu, yani çalıştırılmayı bekleyen işlem kuyruğunun uzunluğudur.

uptimeKomut sadece genellikle tarafından görüntülenen ne gibi son dakikada üzerinde çalışma kuyruğuna ortalama uzunluğunu, son beş dakika ve son 15 dakika, görmeye kullanılabilir top.

Yüksek yük değeri çalışma kuyruğunun uzun olduğu anlamına gelir. Düşük bir değer, kısa olduğu anlamına gelir. Yani, bir dakikalık yük ortalaması 0.05 ise, o dakika boyunca ortalama olarak, çalışma kuyruğunda çalıştırılmayı bekleyen 0.05 işlem olduğu anlamına gelir. Bu bir yüzde değil. Bu AFAIK, tüm Unices için aynıdır (bazı Unices, Linux'un yaptığını düşündüğüm I / O için bekleyen işlemleri sayamayabilir; ancak OpenBSD, bir süre için çekirdek konularını da saydı, böylece yük her zaman 1 veya Daha).

Linux topyardımcı programı, yük değerlerini çekirdeğe yazan çekirdekten alır /proc/loadavg. Kaynaklara procps-3.2.8baktığımızda şunu görüyoruz:

  1. Yük ortalamalarını görüntülemek için sprint_uptime()işlev çağrılır top.c.
  2. Bu fonksiyon yaşayan proc/whattime.cve çağrılar loadavg()içinde proc/sysinfo.c.
  3. Bu fonksiyon sadece LOADAVG_FILEyük ortalamalarını okumak için açılır .
  4. LOADAVG_FILE, daha önce olarak tanımlanır "/proc/loadavg".

Cevabınız için çok teşekkür ederim, bu resmi olarak bir yerde belgelendi mi?
Angelos Asonitis

1
@AgelosAssonitis 2006'daki bu LinuxJournal makalesi ilginç olabilir. Linux Çekirdeği kaynak ağacında bakmak isteyebileceğiniz birkaç kaynak dosyasını işaret eder. Ben Linux kullanıcısı değilim, bu yüzden bu dosyaların hala çekirdeğin en son enkarnasyonunda olup olmadığını söyleyemem: linuxjournal.com/article/9001
Kusalananda

Gerçekten ilginç bir yazı! Sadece üst komutun değerini / proc / loadavg dosyasından alıp almadığını ve bu getloadavg () işlevinin sonucu ile aynı olup olmadığını görmek için procps paketine bakıyorum.
Angelos Asonitis

@AgelosAssonitis Yük ortalamalarının belgelenmesi için kesin yer çekirdek kaynak ağacınızdır. POSIX, CPU yükünün ne olduğunu tanımlamaz ve hiçbir yerde "yük ortalaması" sözcüklerinden bahsetmez. topVe uptimekamu POSIX programları değildir ve getloadavg()kütüphane işlevi de (o BSD soya sahiptir) POSIX'deki tanımlanmamıştır.
Kusalananda

Yani, topladığımdan, çekirdek değerlerinin kendisinden başka bu değerlerin oluşumunu anlayan resmi bir belge yok, doğru mu? Oraya varmadan önce, yine topde procfs dosya loadavg sunulan değeri bağlamak gerekir ...
Angelos Asonitis

7

Yük ortalaması tipik olarak çekirdek tarafından hesaplanır. Buna erişmek için kütüphane çağrısı gibi topve uptimekullanabilen uygulamalar getloadavg(3)(farklı Unix sürümlerinde taşınabilir olması gerekir). Linux'ta bu genellikle bir okuma sonucunu verir /proc/loadavg. FreeBSD'de bir sistem çağrısıdır.

Örneğin:

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>

int main()
{
  double ld[3];

  int i=getloadavg(ld,3);
  printf("Load %.2f %.2f %.2f\n",ld[0],ld[1],ld[2]);
}

uptimeve topher ikisi de verilerini almak için benzer çağrılar yapar.

1/5/15 dakikalık yük ortalamaları çalışma kuyruğundaki süreç sayısıdır. Farklı işletim sistemleri olabilir farklı şekillerde bu hesaplamak; en büyük fark normalde G / Ç için bekleyen işlemlerin (örneğin diskte engellenmiş) çalıştırılabilir olarak sayılıp sayılmayacağıdır. Linux'ta öyleler.

Bu nedenle 3.4 yük ortalaması, örnek penceresinde çalışma kuyruğunda ortalama 3.4 işlem olduğu anlamına gelir (1, 5, 15 dakika).

Yüksek yük ortalaması, aşırı yüklenmiş bir sunucu anlamına gelmeyebilir. 16 çekirdeğiniz varsa, yük ortalamanız stres olmadan 16 olabilir. Ayrıca, çok fork()sayıda işlemin oluşturulmasına / yok edilmesine neden olarak, yüksek bir yük ortalamasına neden olan, ancak sunucu performansını büyük ölçüde etkilemeden birçok uygulama çağrısına da sahip olabilirsiniz. Meşgul% CPU gibi diğer metriklerle birlikte yalnızca kılavuz olarak kullanılmalıdır.


4

Yük ortalaması, herhangi bir belirli araca veya dağılıma özgü bir şey değildir, Çekirdek tarafından sağlanan bir ölçümdür veya daha doğrusu zamanlayıcıdır, bu nedenle dağıtımdan bağımsız bir ölçümdür. Ölçüm, proc dosya sistemine kaydedilir/proc

Bunun yorumlanması üzerine, yük ortalaması metriği CPU'nun ne kadar çok çalıştığının değil, ne kadar işin yapılması gerektiğinin bir göstergesi değildir . Gerçekten herhangi bir şeyle çarpmaya ihtiyaç olduğunu düşünmüyorum, çünkü ya çalışılabilir ya da kesintisiz bir durumdaki süreç sayısının doğrudan ölçümü.

Aşağıdaki iki kılavuz sayfasına göz atın: getloadavg(3)ve uptimedaha fazla bilgi için.

Yük ortalama metriği başlangıçta anlaşılması zor bir kavram olabilir, bence birçok insan CPU'nun ne kadar zor çalıştığının bir göstergesi olduğunu düşünüyor, ama bu gerçekten değil.


1
Tamam, ancak getloadavg()işlev açıklamasında açıklanan yük ortalamasının, toprhel'deki komutun gösterdiği yük ortalamasının kesinlikle olduğundan emin miyiz? Bunu soruyorum çünkü paket procps-3.2.8'in (komutla belirtilmiştir top -v) tarlanmamış içeriğinde tam metin araması yaptım ve getloadavg () işlevinin tek bir sözü yok! Yani, belki de üst yük ortalamasını farklı bir şekilde hesaplar ....
Angelos Asonitis
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.