Mengapa server tidak selalu berjalan maksimal?


12

Ini adalah pertanyaan yang telah mengganggu saya untuk sementara waktu, dan sepertinya saya tidak dapat menemukan apa pun di internet yang membicarakannya. Saya memiliki server yang menjalankan VMware Hypervisor ESXi. Ketika saya mem-boot mesin virtual di atasnya, biasanya butuh 2-3 menit untuk boot; tidak terlalu lama, tetapi tidak instan. Namun, ketika saya melihat log kinerja di server, tidak ada prosesor, RAM, atau penggunaan disk sekitar 100%; biasanya mereka rata-rata sekitar 60% -80% Jadi jika server memiliki pekerjaan yang harus dilakukan, mengapa tidak melakukannya pada 100%?

Sepertinya saya bahwa pada saat tertentu, komponen yang membatasi kinerja harus berjalan pada 100%. Sebagai contoh, jika saya memiliki hard drive yang sangat lambat, maka hampir selalu harus berjalan pada 100%. Oleh karena itu, setidaknya salah satu area (prosesor, RAM, disk, dan jaringan) harus selalu 100%, kecuali jika server berada dalam keadaan idle sepenuhnya.

Mengapa tidak demikian?


Distribusi Linux yang lebih lama, tidak didasarkan pada systemd, tidak dapat memaralelkan startup secara efisien. * BSD masih menderita karenanya. Boot distro Linux modern dan lihat perbedaannya.
Michael Hampton

Jawaban:


18

Latensi akan menjadi satu alasan. Jeda antara "disk memberi saya data ini yang saya butuhkan sebelum saya bisa melakukan hal lain" dan waktu data kembali akan membuat CPU menganggur untuk saat itu.

Sumber daya mungkin berjalan pada 100%, tetapi untuk periode yang sangat singkat. Boot sistem operasi akan mengikuti pola umum "proses atau memutuskan sesuatu, mengambil sesuatu dari disk, melakukan sesuatu dalam memori, melakukan sesuatu dengan perangkat", mengulangi berkali-kali per detik. Jadi, ketika Anda melihat disk pada 25% dalam periode 2 detik yang mungkin berarti itu berjalan pada 100% selama 0,5 detik kemudian menganggur sisa waktu.

Seperti yang ditunjukkan EEAA sistem multicore membuat ini sedikit lebih kompleks. Sepotong tunggal perangkat lunak berulir pada CPU yang dapat menjalankan empat utas hanya dapat mencapai 25% berjalan dengan kecepatan penuh. Bahkan perangkat lunak multithreaded jarang dapat mencapai 100%, karena data harus mengalir (biasanya) dari hard drive, ke RAM, ke cache, ke CPU. Menjaga agar pipa tetap penuh sulit, dan cenderung terjadi sebagian besar dengan beban kerja yang dapat diprediksi seperti pengkodean video. Dalam hal ini sistem operasi dapat mengamati pola baca dan mengambil data sebelum diperlukan, memasukkannya ke dalam cache yang sesuai, seperti cache disk di RAM.


16

Anda memikirkan hal ini dengan cara yang sangat sederhana, yang menyebabkan Anda membuat beberapa asumsi yang salah, yang akan saya coba jelaskan.

Pertama, dan mungkin paling sederhana, pada sistem multicore, untuk memahami penggunaan CPU Anda harus mempertimbangkan apakah proses memuat multithreaded atau tidak, dan dirancang untuk memanfaatkan beberapa core. Jika ini bukan masalahnya, tergantung pada campuran proses yang berjalan, Anda mungkin tidak akan pernah melihat penggunaan 100%. Pernah.

Kedua, Anda perlu mempertimbangkan kinerja perangkat IO. Bagaimana sistem Anda tahu, misalnya, berapa banyak IOps yang mampu dimiliki perangkat Anda? Tidak. Metrik yang lebih bermakna untuk Anda perhatikan adalah iowaitnilai Anda selama boot (yang mungkin sulit diperoleh selama proses boot) atau antrian / latensi disk saat boot (yang seharusnya lebih mudah diperoleh dari hypervisor Anda). Jika Anda melihat antrian atau lonjakan latensi, kemungkinan perangkat IO Anda merupakan faktor penyebab masalah kinerja Anda.


11

Saya telah bekerja dengan server selama sekitar 20 tahun sekarang, ini biasanya bukan hal yang baik ketika komponen berjalan 100% sepanjang waktu.

Sebagai contoh, katakanlah Anda memiliki database SQL yang tidak ingin Anda tukarkan ke disk tetapi ingin kehabisan memori.

Jika database Anda 24GB dan OS membutuhkan 8GB Anda tidak ingin hanya mengalokasikan 32GB RAM untuk mesin, ada banyak "hal-hal" yang bisa salah, kode buruk, DDOS, penggunaan aplikasi yang berat, siapa tahu, tidak memiliki ruang kepala bagaimana Anda tahu server dalam masalah?

Kami memiliki sekitar 2000 server di pusat data kami, kami ingin melihat semuanya berjalan di sekitar 75% CPU dan RAM, ruang hhd ada di SAN kami sehingga bola lilin yang sama sekali berbeda. Kami juga memiliki peringatan untuk memberi tahu kami ketika mereka menekan 85% CPU atau RAM, dan alarm untuk memberi tahu kami ketika mereka mencapai 90%.


Saya pikir Anda punya jalur kecil di sini. Saya katakan saya menjalankan mesin virtual, jadi ada beban yang konsisten yang sangat berbeda dari server database, yang berjalan ketika mendapat permintaan dan mengalokasikan sumber daya. Saya lebih peduli tentang apa pun faktor kinerja yang membatasi, bukan bagaimana sumber daya itu dialokasikan. Tapi terima kasih atas jawabannya!
Kernel Stearns
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.