Rumah > Artikel > Tutorial sistem > Mendedahkan sebab mengapa cakera perlahan menyebabkan beban Linux yang melambung tinggi
Di sini kita perlu membezakan antara beban CPU dan penggunaan CPU Ia adalah dua konsep yang berbeza, tetapi maklumatnya boleh dipaparkan dalam arahan atas yang sama. Penggunaan CPU menunjukkan peratusan CPU yang diduduki oleh program dalam masa nyata semasa berjalan Ini adalah statistik penggunaan CPU dalam tempoh masa Melalui penunjuk ini, anda boleh melihat berapa banyak CPU diduduki dalam tempoh masa tertentu. Jika ia diduduki Jika masa sangat tinggi, maka anda perlu mempertimbangkan sama ada CPU sudah terlebih beban. Beban CPU menunjukkan maklumat statistik jumlah bilangan proses yang sedang diproses oleh CPU dan menunggu CPU memproses dalam tempoh masa, yang juga merupakan maklumat statistik panjang baris gilir penggunaan CPU.
Penggunaan CPU yang tinggi tidak bermakna beban mesti besar. Adakah Purata Beban yang tinggi akan berlaku di bawah situasi penggunaan CPU rendah yang sama? Dengan memahami masa pekerjaan dan masa penggunaan, anda boleh mengetahui bahawa apabila CPU memperuntukkan sekeping masa, sama ada untuk menggunakannya bergantung sepenuhnya kepada pengguna, jadi sangat mungkin untuk mempunyai penggunaan yang rendah dan Purata Beban yang tinggi. Di samping itu, peranti IO juga boleh menyebabkan beban CPU yang tinggi.
Dari sudut ini, tidak cukup untuk menilai sama ada CPU berada dalam keadaan kerja yang berlebihan berdasarkan penggunaan CPU sahaja. Ia mesti digabungkan dengan Purata Beban untuk melihat penggunaan CPU secara global. Terdapat contoh di Internet untuk menggambarkan perbezaan antara kedua-duanya: di pondok telefon awam, terdapat satu orang yang menelefon dan empat orang menunggu Setiap orang terhad untuk menggunakan telefon selama satu minit menelefon dalam masa satu minit, mereka hanya boleh meletakkan telefon dan pergi beratur, menunggu pusingan seterusnya. Telefon di sini adalah bersamaan dengan CPU, dan orang yang memanggil atau menunggu untuk menelefon adalah bersamaan dengan bilangan tugas. Semasa menggunakan pondok telefon, pasti ada yang keluar selepas membuat panggilan, ada yang beratur semula tanpa menghabiskan panggilan, malah ada orang baru yang beratur di sini menambah atau mengurangkan bilangan tugas. Untuk mengira purata beban, kami mengira bilangan orang setiap 5 saat dan purata statistik pada minit ke-1, ke-5 dan ke-15 untuk membentuk beban purata pada minit ke-1, ke-5 dan ke-15. Sesetengah orang mengangkat telefon dan menghubungi serta-merta, dan panggilan berlangsung selama satu minit, manakala sesetengah orang mungkin mencari nombor telefon dalam tiga puluh saat pertama, atau teragak-agak sama ada untuk membuat panggilan, dan kemudian benar-benar menelefon dalam tiga puluh saat terakhir. Jika telefon dianggap sebagai CPU dan bilangan orang dianggap sebagai tugas, kami mengatakan bahawa penggunaan CPU orang terdahulu (tugas) adalah tinggi dan penggunaan CPU orang terakhir (tugas) adalah rendah. Sudah tentu, CPU tidak akan berfungsi dalam tiga puluh saat pertama, dan akan berehat dalam tiga puluh saat seterusnya CPU akan terus berfungsi. Cuma sesetengah program melibatkan banyak pengiraan, jadi penggunaan CPU adalah tinggi, manakala sesetengah program melibatkan pengiraan yang sangat sedikit, jadi penggunaan CPU secara semula jadi rendah. Tetapi sama ada penggunaan CPU tinggi atau rendah, ia tidak ada kaitan dengan berapa banyak tugasan yang akan beratur kemudian.
Bilangan CPU dan bilangan teras CPU (iaitu bilangan teras) akan mempengaruhi beban CPU, kerana tugas akhirnya diberikan kepada teras CPU untuk diproses. Dua CPU lebih baik daripada satu CPU, dan dwi teras lebih baik daripada teras tunggal. Oleh itu, kita perlu ingat bahawa selain daripada perbezaan prestasi CPU, beban CPU dikira berdasarkan bilangan teras, iaitu, "berapa banyak teras, iaitu, berapa banyak beban yang ada". adalah yang terbaik untuk tidak melebihi 100% untuk teras tunggal, iaitu, beban adalah 1.00, dan seterusnya.
Terdapat direktori /proc dalam Linux, yang menyimpan pemetaan maya sistem yang sedang berjalan Terdapat fail yang dipanggil cpuinfo, yang menyimpan maklumat CPU. Fail /proc/cpuinfo memaparkan maklumat dalam bahagian mengikut CPU logik dan bukannya CPU sebenar Maklumat setiap CPU logik menduduki satu bahagian, dan pengecam CPU logik pertama bermula dari 0.
$ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family: 6 model : 63 model name: Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz stepping: 2 microcode : 0x36 cpu MHz : 2399.998 cache size: 20480 KB physical id : 0 siblings: 2 core id : 0 cpu cores : 2 apicid: 0 initial apicid: 0 fpu : yes fpu_exception : yes cpuid level : 15 wp: yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr ...... bogomips: 4799.99 clflush size: 64 cache_alignment : 64 address sizes : 42 bits physical, 48 bits virtual power management:
Untuk memahami maklumat CPU dalam fail ini, terdapat beberapa konsep berkaitan yang perlu diketahui, seperti: pemproses mewakili pengenalan CPU logik, nama model mewakili maklumat model CPU sebenar, id fizikal mewakili CPU sebenar dan pengenalan , dan teras cpu mewakili sebenar Bilangan teras CPU dan sebagainya.
Penerangan CPU logik: Pelayan hari ini biasanya menggunakan teknologi "Hyper-Threading" (HT) untuk meningkatkan prestasi CPU. Teknologi hyper-threading membolehkan CPU melaksanakan berbilang program pada masa yang sama dan berkongsi sumber dalam CPU Secara teori, ia harus melaksanakan dua utas pada masa yang sama seperti dua CPU. Walaupun teknologi hyper-threading boleh melaksanakan dua utas pada masa yang sama, ia tidak seperti dua CPU sebenar, setiap CPU mempunyai sumber bebas. Apabila dua utas memerlukan sumber pada masa yang sama, salah satu daripadanya mesti dihentikan buat sementara waktu dan menyerahkan sumber tersebut sehingga sumber ini terbiar sebelum meneruskan. Oleh itu, prestasi hyper-threading tidak sama dengan prestasi dua CPU. CPU dengan Teknologi Hyper-Threading mempunyai batasan lain.
Konsep purata beban berasal dari sistem UNIX Walaupun formula setiap syarikat adalah berbeza, semuanya digunakan untuk mengukur bilangan proses menggunakan CPU dan bilangan proses menunggu CPU bilangan proses yang boleh dijalankan. Oleh itu, purata beban boleh digunakan sebagai penunjuk rujukan untuk kesesakan CPU Jika ia lebih besar daripada bilangan CPU, ini bermakna CPU mungkin tidak mencukupi.
Walau bagaimanapun, ia sedikit berbeza di Linux!
Sebagai tambahan kepada bilangan proses menggunakan CPU dan bilangan proses menunggu CPU, purata beban pada Linux juga termasuk bilangan proses dalam tidur tanpa gangguan. Biasanya apabila menunggu peranti IO dan rangkaian, proses akan berada dalam keadaan tidur yang tidak terganggu. Logik pereka Linux adalah bahawa tidur tanpa gangguan haruslah sangat singkat dan akan beroperasi semula tidak lama lagi, jadi ia disamakan dengan runnable. Walau bagaimanapun, tidur tanpa gangguan masih tidur walaupun pendek, apatah lagi tidur tanpa gangguan mungkin tidak terlalu singkat di dunia nyata Sebilangan besar atau tidur tanpa gangguan yang lama biasanya bermakna peranti IO telah mengalami kesesakan. Seperti yang kita sedia maklum, proses dalam keadaan tidur tidak memerlukan CPU Walaupun semua CPU melahu, proses tidur tidak dapat dijalankan Oleh itu, bilangan proses tidur pasti tidak sesuai untuk digunakan sebagai penunjuk untuk mengukur beban CPU mengira proses tidur yang tidak terganggu kerana Amalan memasukkan purata beban secara langsung mengubah maksud asal purata beban. Oleh itu, pada sistem Linux, penunjuk purata beban pada dasarnya tidak berguna kerana anda tidak tahu maksudnya Apabila anda melihat purata beban yang tinggi, anda tidak tahu sama ada terdapat terlalu banyak proses yang boleh dijalankan atau terlalu banyak proses tidur yang tidak terganggu. Adalah mustahil untuk menentukan sama ada CPU tidak mencukupi atau peranti IO mempunyai kesesakan.
Sebaliknya, ia juga boleh menjelaskan mengapa beban CPU akan melambung apabila cakera perlahan (apabila sejumlah besar cakera digunakan). Pada asasnya, apabila saya menghadapi beban CPU yang tinggi, terdapat dua situasi: CPU itu sendiri mengendalikan terlalu banyak tugas, ditambah dengan gangguan lembut dan suis konteks terlalu kerap, mengakibatkan beban tinggi dan cakera terlalu perlahan, menyebabkan terlalu banyak tidur tidak terganggu; yang menyebabkan CPU Load adalah tinggi.
Atas ialah kandungan terperinci Mendedahkan sebab mengapa cakera perlahan menyebabkan beban Linux yang melambung tinggi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!