Bagaimana memahami penggunaan memori dan rata-rata memuat di server linux

57

Saya menggunakan server linux yang memiliki memori 128GB dan 24 core. Saya menggunakan top untuk melihat berapa banyak digunakan. Keluarannya ditempel di akhir tulisan. Inilah dua pertanyaan:

(1) Saya melihat bahwa setiap proses yang berjalan menempati persentase memori yang sangat kecil (% MEM tidak lebih dari 0,2%, dan sebagian besar hanya 0,0%), tetapi bagaimana total memori hampir digunakan seperti pada baris keempat output ( "Mem: total 130766620k, digunakan 130161072k, 605548k gratis, buffer 919300k")? Jumlah persentase memori yang digunakan untuk semua proses tampaknya tidak mungkin mencapai hampir 100%, bukan?

(2) bagaimana memahami rata-rata beban pada baris pertama ("rata-rata muatan: 14,04, 14,02, 14,00")?

Terima kasih dan salam!

Sunting:

Terima kasih!

Saya juga sangat suka mendengar beberapa angka kasar berdasarkan persentase memori yang digunakan untuk menentukan apakah server dimuat banyak, karena saya pernah menjadi orang yang menjejalkan server tanpa memahami beban saat ini.

Apakah swap dianggap hampir sama dengan memori? Sebagai contoh, ketika memori dan swap ukurannya hampir sama, jika memori hampir habis tetapi swap sebagian besar masih bebas, mungkin saya hanya melihatnya seolah-olah persentase memori yang digunakan + swap masih tidak tinggi dan menjalankan yang baru lainnya proses?

Bagaimana Anda mempertimbangkan penggunaan CPU atau memori (atau memori + swap) bersama? Apakah Anda menjadi khawatir jika salah satu dari mereka mencapai terlalu tinggi atau keduanya?

Output atas:

$ top

 
top - 12:45:33 hingga 19 hari, 23:11, 18 pengguna, rata-rata memuat: 14.04, 14.02, 14.00
Tugas: total 484, 12 lari, 472 tidur, 0 berhenti, 0 zombie
Cpu (s): 36,7% kami, 19,7% sy, 0,0% ni, 43,6% id, 0,0% wa, 0,0% hi, 0,0% si, 0,0% st
Mem: 130766620k total, 130161072k digunakan, 605548k gratis, buffer 919300k
Swap: 63111312k total, 500556k digunakan, 62610756k gratis, 124437752k di-cache

  PID PENGGUNA PR NI VIRT RES SHR S% CPU% MEM TIME + COMMAND
 6529 sanchez 18 -2 1075m 219m 13m S 100 0.2 13760: 23 MATLAB
13210 timotius 18 -2 48336 37m 1216 R 100 0,0 3: 56,75 absurditas
13888 timotius 18 -2 48336 37m 1204 R 100 0,0 2: 04,89 absurditas
14542 timotius 18 -2 48336 37m 1196 R 100 0,0 1: 08,34 absurditas
14544 timotius 18 -2 2888 2076 400 R 100 0,0 1: 06,14 kumpulkan Data
 6183 sanchez 18 -2 1133m 195m 13m S 100 0.2 13676: 04 MATLAB
 6795 sanchez 18 -2 1079m 210m 13m S 100 0.2 13734: 26 MATLAB
10178 timotius 18 -2 48336 37m 1204 R 100 0,0 11: 33,93 absurditas 
12438 timotius 18 -2 48336 37m 1216 R 100 0,0 5: 38,17 absurditas
13661 timotius 18 -2 48336 37m 1216 R 100 0,0 2: 44,13 absurditas
14098 timotius 18 -2 48336 37m 1204 R 100 0,0 1: 58,31 absurditas
14335 timotius 18 -2 48336 37m 1196 R 100 0,0 1: 08,93 absurditas
14765 timotius 18 -2 48336 37m 1196 R 99 0,0 0: 32,57 absurditas
13445 timotius 18 -2 48336 37m 1216 R 99 0,0 3: 01,37 absurditas
28990 root 20 0 0 0 0 S 2 0.0 65: 50.21 pdflush
12141 tim 18 -2 19380 1660 1024 R 1 0,0 0: 04,04 teratas
 1240 root 15 -5 0 0 0 S 0 0.0 16: 07.11 kjournald
 9019 root 20 0 296m 4460 2616 S 0 0,082: 19,51 kdm_greet
    1 root 20 0 4028 728 592 S 0 0.0 0: 03.11 init
    2 root 15 -5 0 0 0 S 0 0.0 0: 00.00 kthreadd
    3 root RT -5 0 0 0 S 0 0.0 0: 01.01 migrasi / 0
    4 root 15 -5 0 0 0 S 0 0.0 0: 08.13 ksoftirqd / 0
    5 root RT -5 0 0 0 S 0 0.0 0: 00.00 anjing penjaga / 0
    6 root RT -5 0 0 0 S 0 0.0 17: 27.31 migrasi / 1
    7 root 15 -5 0 0 0 S 0 0.0 0: 01.21 ksoftirqd / 1
    8 root RT -5 0 0 0 S 0 0.0 0: 00.00 anjing penjaga / 1
    9 root RT -5 0 0 0 S 0 0.0 10: 02.56 migrasi / 2
   10 root 15 -5 0 0 0 S 0 0.0 0: 00.34 ksoftirqd / 2
   11 root RT -5 0 0 0 S 0 0.0 0: 00.00 anjing penjaga / 2
   12 root RT -5 0 0 0 S 0 0.0 4: 29.53 migrasi / 3
   13 root 15 -5 0 0 0 S 0 0.0 0: 00.34 ksoftirqd / 3
Tim
sumber
2
Lihat ini untuk jawaban yang baik tentang memori. serverfault.com/questions/38065/#38074
Zoredache
Dan jawaban ini untuk rangkuman singkat tentang rata-rata beban (atau bacaan panjang ini untuk detailnya).
Nickolay

Jawaban:

56

(1) Saya melihat bahwa setiap proses yang berjalan menempati persentase memori yang sangat kecil (% MEM tidak lebih dari 0,2%, dan sebagian besar hanya 0,0%), tetapi bagaimana total memori hampir digunakan seperti pada baris keempat output ( "Mem: total 130766620k, digunakan 130161072k, 605548k gratis, buffer 919300k")? Jumlah persentase memori yang digunakan untuk semua proses tampaknya tidak mungkin mencapai hampir 100%, bukan?

Untuk melihat berapa banyak memori yang Anda gunakan saat ini, jalankan free -m. Ini akan memberikan output seperti:

             total yang digunakan buffer bersama gratis di-cache
Mem: 2012 1923 88 0 91 515
- / + buffer / cache: 1316 695
Tukar: 3153 256 2896

Nilai baris 'bekas' (1923) hampir selalu hampir sama dengan nilai mem baris atas (2012). Sejak Linux suka menggunakan memori cadangan untuk cache blok disk (515).

Angka kunci yang digunakan untuk melihat adalah nilai buffer / baris cache digunakan (1316). Ini adalah berapa banyak ruang yang digunakan aplikasi Anda saat ini. Untuk kinerja terbaik, jumlah ini harus kurang dari total memori (2012) Anda. Untuk mencegah kesalahan memori, itu harus kurang dari total memori (2012) dan ruang swap (3153).

Jika Anda ingin melihat dengan cepat berapa banyak memori yang kosong lihat pada nilai buffer baris cache / cache (695). Ini adalah total memori (2012) - yang sebenarnya digunakan (1316). (2012 - 1316 = 696, bukan 695, ini hanya akan menjadi masalah pembulatan)

(2) bagaimana memahami rata-rata beban pada baris pertama ("rata-rata muatan: 14,04, 14,02, 14,00")?

Artikel ini memuat rata-rata menggunakan analogi lalu lintas yang bagus dan merupakan yang terbaik yang saya temukan sejauh ini: Memahami Beban CPU Linux - kapan Anda harus khawatir? . Dalam kasus Anda, seperti yang ditunjukkan orang:

Pada sistem multi-prosesor, beban relatif terhadap jumlah inti prosesor yang tersedia. Tanda "pemanfaatan 100%" adalah 1,00 pada sistem single-core, 2,00, pada dual-core, 4,00 pada quad-core, dll.

Jadi, dengan rata-rata muatan 14.00 dan 24 core, server Anda jauh dari kelebihan beban.

Thivent Pascal
sumber
17

Sistem seperti Unix, termasuk linux, dirancang untuk membuat penggunaan RAM yang tersedia seefisien mungkin. Dalam istilah yang sangat umum, ada 3 status setiap MB RAM dapat di:

  1. Gratis
  2. Digunakan oleh suatu Proses
  3. Digunakan untuk Buffer

Ke-3 negara hanya digunakan sebagai ruang awal dan dimaksudkan untuk dipindahkan kapan pun diperlukan, yaitu total memori Anda yang tersedia untuk program benar-benar Gratis + Digunakan untukBuffers. Dengan demikian, Anda tidak akan benar-benar melihat buffer space yang dialokasikan muncul sebagaimana ditugaskan untuk proses spesifik apa pun.

Pertanyaan rata-rata memuat Anda sedikit lebih menarik, karena dapat dengan mudah disalahartikan. Untuk cerita selengkapnya, lihat artikel jurnal linux ini . Penjumlahan terbaik adalah kutipan langsung dari artikel,

Perhitungan rata-rata beban paling baik dianggap sebagai rata-rata bergerak dari proses dalam antrian run Linux yang ditandai berjalan atau tidak terputus

Artinya, Anda dapat menganggap rata-rata beban Anda sebagai (# proses yang berjalan) + (# proses yang menunggu di IO). Perlu diingat bahwa pada waktu tertentu Anda dapat memiliki sejumlah proses CORE $ dieksekusi, saya akan mengatakan bahwa rata-rata beban Anda dari 14 cukup rendah.

Scott Pack
sumber
Terima kasih! Berapa persentase memori yang digunakan (atau memori + swap) dianggap sebagai beban berat dan lebih baik tidak menjalankan proses baru? Apakah Anda melihat memori atau memori + swap? Apakah swap yang digunakan ditampilkan di atas ukuran swap yang sebenarnya digunakan? Mengenai rata-rata beban CPU, apakah Anda mengukur beban aktual dengan "load average / core number"? Berapa banyak untuk itu yang Anda anggap server ini banyak dimuat? Terima kasih dan salam!
Tim
2
Hanya memuat indikator. Sebagai aturan umum, beban yang lebih besar dari inti adalah hal yang buruk. Umumnya persentase tinggi memori yang digunakan adalah hal yang buruk. Ini bukan nilai biner yang bisa Anda katakan 'ini baik-baik saja'. Jika Anda kehabisan RAM, Anda tidak memiliki cukup untuk menjalankan lebih banyak proses. Jika Anda tidak kehabisan, Anda punya banyak. Ini sangat tergantung pada situasi Anda secara spesifik.
Cian
4

Dari sarhalaman manual:

       Rata - rata beban dihitung sebagai jumlah rata - rata runnable atau 
       menjalankan tugas (status R), dan jumlah tugas dalam keadaan tidak terputus
       sleep (D state) selama interval yang ditentukan.

Dari uptimehalaman manual:

       Sistem memuat rata-rata adalah jumlah rata-rata proses yang baik
       dalam keadaan runnable atau uninterruptable. Suatu proses dalam kondisi runnable
       baik menggunakan CPU atau menunggu untuk menggunakan CPU. Suatu proses dalam penyatuan
       keadaan terruptable sedang menunggu beberapa akses I / O, misalnya menunggu disk.
       Rata-rata diambil selama tiga interval waktu. Memuat rata-rata
       tidak dinormalisasi untuk jumlah CPU dalam suatu sistem, jadi beban rata-rata-
       usia 1 berarti sistem CPU tunggal dimuat sepanjang waktu saat pada usia 4
       Sistem CPU itu berarti idle 75% dari waktu.
Dennis Williamson
sumber
3
  1. Linux, untuk beberapa waktu sekarang, telah mengelola memorinya sedemikian rupa sehingga membuat garis yang toppada dasarnya tidak berguna, umumnya menjaga sebagian besar memori mesin dialokasikan untuk berbagai keperluan ketika tidak diperlukan oleh proses pengguna.
  2. Rata-rata beban adalah jumlah rata-rata proses yang berjalan atau menunggu untuk berjalan. Biasanya memiliki korelasi negatif yang kuat dengan latensi / respons sistem, jadi Anda ingin serendah mungkin. Karena masing-masing CPU Anda dapat menjalankan sesuatu pada waktu tertentu, Anda tampaknya melakukannya dengan cukup baik pada usia 14.
kekacauan
sumber
Terima kasih! Mengenai 1, maksud Anda beberapa proses tidak muncul di atas tetapi menggunakan banyak memori? Atau bahwa baris keempat output tentang memori ("Mem: total 130766620k, 130161072k digunakan, 605548k gratis, buffer 919300k") menyesatkan, saya harus melihat jumlah persentase memori yang digunakan oleh semua proses yang ditunjukkan di atas dan dalam kasus saya Saya dapat dengan aman menjalankan beberapa proses yang menghabiskan banyak memori?
Tim
2
Seperti yang ditunjukkan oleh jawaban lain, rata-rata beban harus dibandingkan dengan jumlah prosesor, sehingga 14 tidak terlalu banyak pada sistem 24-inti. Ini akan menjadi seperti 14/24 = 0,58 pada sistem single-core (baik jenis).
David Z
@ Tim: Maksud saya yang terakhir.
kekacauan