Saya ingin tahu apakah output dari linux berbasis Red-Hat dapat diinterpretasikan berbeda oleh linux berbasis Debian.
Untuk membuat pertanyaan lebih spesifik, apa yang saya cari, adalah memahami bagaimana "rata-rata muat" dari baris pertama top
perintah pada sistem Red-Hat ditafsirkan dan bagaimana memverifikasi ini dengan kode ro dokumentasi dokumentasi resmi.
[Ada banyak cara untuk mendekati subjek ini, yang semuanya merupakan jawaban yang dapat diterima untuk pertanyaan]
Salah satu pendekatan potensial, adalah menemukan di mana informasi ini didokumentasikan secara resmi.
Yang lain, akan menemukan versi kode yang top
dibangun dari dalam distribusi spesifik dan versi yang saya kerjakan.
Output perintah yang saya dapatkan adalah:
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
Dalam hal ini, bagaimana saya bisa mengartikan nilai rata-rata beban ?
Saya telah berhasil menemukan bahwa beban rata-rata adalah sekitar menit terakhir, dari satu sumber dokumentasi dan harus ditafsirkan setelah dikalikan dengan 100, oleh sumber dokumentasi lain.
Jadi, pertanyaannya adalah:
Apakah 0,02% atau 2% dimuat?
Sumber dan versi dokumentasi:
1) Bintang pertama dengan
TOP(1) Linux User’s Manual TOP(1)
NAME
top - display Linux tasks
Sumber: man top
dalam distribusi RedHat saya
Ubuntu juga memiliki versi dengan "tugas" yang tidak menjelaskan rata-rata beban di:
http://manpages.ubuntu.com/manpages/precise/man1/top.1.html
2) Yang kedua dimulai dengan
TOP(1) User Commands TOP(1)
NAME top
top - display Linux processes
Sumber:
http://man7.org/linux/man-pages/man1/top.1.htm
3) Yang ini dimulai dengan:
TOP(1)
NAME
top - display and update information about the top cpu processes
Sumber: http://www.unixtop.org/man.shtml
Yang pertama , dapat dilihat man top
di dalam RHEL
atau di online ubuntu documentation
dan tidak memiliki penjelasan untuk format output (atau tentang rata-rata beban di mana saya tertarik) .
Yang kedua , berisi penjelasan singkat, menunjukkan bahwa rata-rata beban ada hubungannya dengan 1 menit terakhir, tetapi tidak ada tentang interpretasi nilainya!
Saya mengutip langsung dari sumber kedua:
2a. Rata-rata UPTIME dan LOAD
Bagian ini terdiri dari satu baris yang berisi:
nama program atau jendela, tergantung pada mode tampilan
waktu saat ini dan lamanya waktu sejak
jumlah total boot terakhir dari pengguna
yang memuat sistem rata-rata selama 1, 5 dan 15 menit terakhir
Jadi, jika penjelasan ini memang benar, itu hanya cukup untuk memahami bahwa rata-rata beban sekitar 1 menit terakhir.
Tapi itu tidak menjelaskan format angka.
Dalam penjelasan ketiga , dikatakan bahwa:
Saat menentukan angka untuk rata-rata muat, angka itu harus dikalikan dengan 100.
Penjelasan ini menunjukkan bahwa 0,02 berarti 2% dan bukan 0,02%. Tetapi apakah ini benar? Selain itu, apakah benar untuk semua distribusi linux dan implementasi yang berpotensi berbeda top
?
Untuk menemukan jawaban atas pertanyaan ini, saya mencoba membaca kode dengan mencarinya secara online. Tapi saya menemukan, setidaknya, dua versi berbeda top
terkait dengan RHEL di luar sana! yang builtin-top.c
dan refactored top.c
. Keduanya dilindungi hak cipta oleh Red-Hat sebagaimana pemberitahuan mengatakan di awal kode dan dengan demikian tampaknya logis bahwa RHEL menggunakan salah satunya.
http://lxr.free-electrons.com/source/tools/perf/builtin-top.c
http://lxr.free-electrons.com/source/tools/perf/util/top.c
Jadi, sebelum mempelajari kode sebanyak itu, saya ingin pendapat tentang di mana fokus untuk membentuk pemahaman yang akurat tentang bagaimana cpu load diinterpretasikan?
Dari informasi yang diberikan dalam jawaban di bawah ini, di samping beberapa pencarian pribadi, saya telah menemukan bahwa:
1 - Yang top
saya gunakan terkandung dalam paket procps-3.2.8. Yang dapat diverifikasi dengan menggunakan top -v
.
2 - Dalam versi procps-3.2.8
yang saya unduh dari situs web resmi, tampaknya alat tersebut uptime
mendapatkan informasi dari procfs
file /proc/loadavg
secara langsung (tidak menggunakan fungsi linux getloadavg()
).
3 - Sekarang untuk top
perintah itu juga tidak menggunakan fungsi getloadavg()
. Saya berhasil memverifikasi bahwa top
memang melakukan hal yang sama denganuptime
alat untuk menampilkan rata-rata beban. Ini sebenarnya memanggil fungsi uptime
alat, yang mendapat informasinya dari procfs
file /proc/loadavg
.
Jadi, semuanya menunjuk ke /proc/loadavg
file! Jadi, untuk membentuk pemahaman yang akurat tentang yang load average
dihasilkan oleh top
, seseorang harus membaca kode kernel untuk melihat bagaimana file loadavg
tersebut ditulis.
Ada juga artikel bagus yang ditunjukkan dalam salah satu jawaban yang memberikan penjelasan istilah tiga orang awam tentang tiga nilai loadavg
.
Jadi, terlepas dari kenyataan bahwa semua jawaban sama bermanfaat dan membantu, saya akan menandai jawaban yang menunjuk ke artikel
http://www.linuxjournal.com//article/9001 sebagai "the" jawaban untuk pertanyaan saya. Terima kasih atas kontribusi Anda!
Selain itu dari pertanyaan Memahami rata-rata atas dan memuat , saya telah menemukan tautan ke kode sumber kernel yang menunjuk ke tempat di mana loadavg
dihitung. Sepertinya ada komentar besar yang menjelaskan cara kerjanya, bagian kode ini juga ada C
!
Tautan ke kode adalah http://lxr.free-electrons.com/source/kernel/sched/loadavg.c
Sekali lagi saya tidak mencoba terlibat dalam segala bentuk plagiarisme, saya hanya menambahkan ini untuk kelengkapan. Jadi, saya mengulangi bahwa tautan ke kode kernel ditemukan dari salah satu jawaban dalam Memahami rata-rata teratas dan memuat ...
sumber
top -v
)Jawaban:
Beban CPU adalah panjang antrian proses, yaitu panjang antrian proses yang menunggu untuk dijalankan.
The
uptime
perintah dapat digunakan untuk melihat rata-rata panjang antrian run selama menit terakhir, lima menit terakhir, dan yang terakhir 15 menit, seperti apa yang biasanya ditampilkan olehtop
.Nilai beban tinggi berarti antrian run panjang. Nilai yang rendah berarti pendek. Jadi, jika rata-rata muatan satu menit adalah 0,05, itu berarti bahwa rata-rata selama menit itu, ada 0,05 proses yang menunggu untuk dijalankan dalam antrian proses. Ini bukan persentase. Ini, AFAIK, sama pada semua Unices (walaupun beberapa Unices mungkin tidak menghitung proses yang menunggu I / O, yang menurut saya dilakukan oleh Linux; OpenBSD, untuk sementara saja, juga menghitung utas kernel, sehingga beban selalu 1 atau lebih).
top
Utilitas Linux mendapatkan nilai-nilai load dari kernel, yang menuliskannya/proc/loadavg
. Melihat sumber untukprocps-3.2.8
, kita melihat bahwa:sprint_uptime()
fungsi ini disebut dalamtop.c
.proc/whattime.c
dan panggilanloadavg()
diproc/sysinfo.c
.LOADAVG_FILE
untuk membaca rata-rata beban.LOADAVG_FILE
didefinisikan sebelumnya sebagai"/proc/loadavg"
.sumber
top
danuptime
utilitas tidak POSIX utilitas dangetloadavg()
fungsi perpustakaan juga tidak didefinisikan dalam POSIX (memiliki keturunan BSD meskipun).top
file procfs loadavg ...Rata-rata beban biasanya dihitung oleh kernel. Aplikasi seperti
top
danuptime
dapat menggunakangetloadavg(3)
panggilan perpustakaan untuk mengakses ini (itu dimaksudkan untuk portable di berbagai versi Unix). Di Linux ini biasanya menghasilkan membaca dari/proc/loadavg
. Di FreeBSD itu adalah panggilan sistem.Sebagai contoh:
uptime
dantop
keduanya melakukan panggilan serupa untuk mendapatkan data mereka.Sekarang rata-rata memuat 1/5/15 menit adalah jumlah proses pada antrian proses. Sistem operasi yang berbeda dapat menghitung ini dengan cara yang berbeda; perbedaan terbesar biasanya adalah apakah proses menunggu I / O (misalnya diblokir pada disk) dihitung sebagai runnable atau tidak. Di Linux mereka.
Jadi rata-rata beban 3,4 berarti ada rata-rata 3,4 proses pada antrian run dalam jendela sampel (1, 5, 15 menit).
Namun, rata-rata beban tinggi tidak berarti server kelebihan beban. Jika Anda memiliki 16 core maka rata-rata beban Anda dapat 16 tanpa stres. Anda juga dapat memiliki banyak
fork()
panggilan aplikasi yang dapat menghasilkan sejumlah besar proses yang dibuat / dihancurkan, yang mengarah ke rata-rata beban tinggi, tetapi tanpa secara besar-besaran memengaruhi kinerja server. Seharusnya hanya digunakan sebagai panduan, bersama dengan metrik lain seperti% CPU busy.sumber
Rata-rata beban bukanlah sesuatu yang spesifik untuk alat atau distribusi tertentu, ini adalah pengukuran yang disediakan oleh Kernel, atau lebih tepatnya, penjadwal, oleh karena itu ini adalah pengukuran independen distribusi. Pengukuran direkam di dalam sistem file proc
/proc
Ke interpretasi itu, metrik rata-rata memuat bukan indikasi seberapa keras CPU bekerja tetapi berapa banyak pekerjaan yang harus dilakukan. Saya tidak berpikir benar-benar ada kebutuhan untuk melipatgandakannya dengan apa pun karena ini merupakan pengukuran langsung dari jumlah proses baik dalam kondisi runnable atau uninterruptible.
Coba periksa dua halaman manual berikut:
getloadavg(3)
danuptime
untuk informasi lebih lanjut.Metrik beban rata-rata bisa menjadi konsep yang sulit untuk dipahami pada awalnya, saya pikir banyak orang berpikir ini merupakan indikasi betapa sulitnya CPU bekerja, tetapi bukan itu yang sebenarnya.
sumber
getloadavg()
deskripsi fungsi, apakah rata-rata beban yang sama dengan yangtop
diperlihatkan oleh perintah di rhel? Saya menanyakan hal ini karena saya melakukan pencarian teks lengkap dalam isi un-tarred dari paket procps-3.2.8 (yang ditunjukkan oleh perintahtop -v
) dan tidak ada satupun yang menyebutkan fungsi getloadavg ()! Jadi, mungkin top menghitung rata-rata beban dengan cara yang berbeda ....