Saya memiliki host produksi, di bawah:
Sistem ini menggunakan 1GB swap, sambil mempertahankan hampir 40GB ruang kosong yang tidak digunakan. Haruskah saya khawatir tentang ini, atau sebagian besar normal?
centos
performance
memory
swap
MrDuk
sumber
sumber
free -m
. Grafiknya sulit dibaca.Jawaban:
Ini bukan masalah dan kemungkinan normal. Banyak kode (dan mungkin data) yang digunakan sangat jarang sehingga sistem akan menukar keluar untuk membebaskan memori.
Bertukar sebagian besar hanya masalah jika memori sedang ditukar masuk dan keluar terus menerus. Ini adalah jenis kegiatan yang membunuh kinerja dan menyarankan masalah di tempat lain pada sistem.
Jika Anda ingin memantau aktivitas swap Anda, Anda dapat dengan beberapa utilitas tetapi
vmstat
biasanya cukup berguna misalnyaAbaikan baris pertama karena itu adalah aktivitas sejak sistem dimulai. Perhatikan
si
danso
kolom di bawah---swap--
; mereka umumnya angka yang cukup kecil jika tidak 0 untuk sebagian besar waktu.Juga patut disebutkan adalah bahwa swap preemptive ini dapat dikontrol dengan pengaturan kernel. File at
/proc/sys/vm/swappiness
berisi angka antara 0 dan 100 yang memberitahu kernel seberapa agresif menukar memori. Cat file untuk melihat apa ini diatur. Secara default, sebagian besar distro Linux menetapkan standar ini menjadi 60, tetapi jika Anda tidak ingin melihat pertukaran sebelum kehabisan memori, gema 0 ke dalam file seperti ini:Ini dapat dibuat permanen dengan menambahkan
untuk
/etc/sysctl.conf
.sumber
echo 0 >/proc/sys/vm/swappiness
. Ini bisa dibuat permanen dengan menambahkanvm.swappiness = 0
ke /etc/sysctl.conf.swappiness=7
atau sesuatu, halaman yang tidak terpakai dalam jangka panjang bisa ditukar. Ada perbedaan besar antaraswappiness=0
dan nilai lainnya, bahkan nilai rendah. Kernel-defaultswappiness=60
umumnya baik untuk server, dan itu hanya untuk penggunaan interaktif desktop di mana swappiness rendah baik. Tetapi pengaturan ke 7 atau sesuatu seharusnya tidak terlalu sakit. (Tapi saya belum memeriksa, saya bukan sysadmin server).swappiness
berfungsi dengan baik. Dengan tekanan, Anda akan melihat bahwaswappiness=7
kelaparan file cache hampir sepenuhnya untuk jangka waktu yang lama, sementaraswappiness=60
melikuidasi banyak cache tetapi juga mulai bertukar keluar dalam hitungan detik. Itu masih cache yang mengambil pemukulan, tetapi dengan cara yang jauh lebih seimbang.Linux akan lebih dulu menulis halaman ke disk jika tidak ada yang lebih baik untuk dilakukan. Itu tidak berarti bahwa itu akan mengusir halaman-halaman itu dari memori. Hanya saja kalau-kalau itu harus mengusir halaman-halaman itu di masa depan, tidak perlu menunggu mereka ditulis ke disk, karena mereka sudah ada di sana.
Lagi pula, alasan Anda kehabisan memori, mungkin karena mesin Anda sudah bekerja keras, Anda tidak ingin menambah beban dengan bertukar. Lebih baik melakukan swapping ketika mesin tidak melakukan apa-apa.
Untuk alasan yang sama, memori Anda harus selalu penuh. Halaman memori, cache sistem file
tmpfs
,, ada begitu banyak hal yang dapat disimpan dalam memori. Sungguh, Anda harus khawatir jika ingatan Anda kosong; setelah semua, Anda membayar banyak uang untuk itu (setidaknya dibandingkan dengan jumlah ruang disk yang sama), jadi lebih baik digunakan!sumber
Swap yang digunakan tidak buruk, tetapi banyak aktivitas swap
Kolom swapd tidak ada masalah sama sekali. Nilai bukan nol pada kolom si dan sangat mematikan untuk kinerja server. Khususnya yang memiliki banyak RAM.
Cara terbaik untuk menonaktifkan swapinness pada mesin dengan ram ram beberapa GB:
Ini tidak akan menonaktifkan swap. Ini hanya akan menginstruksikan Linux untuk menggunakan swap sebagai langkah terakhir. Ini akan menyia-nyiakan beberapa MB program yang tidak perlu di RAM ... Tetapi lebih baik untuk menukar kembung antrian akses disk Anda.
Sunting 1: mengapa nilai default swappiness tidak optimal
Kita harus mengingat dua dekade lalu, 486 besar hanya memiliki 32Mb RAM. Algoritma swap dikembangkan ketika seluruh RAM dapat dipindahkan ke disk dalam sepersekian detik. Bahkan dengan disk yang lebih lambat saat itu. Itulah sebabnya kebijakan swap default sangat agresif. RAM adalah hambatan saat itu. Sejak itu ukuran RAM meningkat lebih dari 10.000 kali dan kecepatan disk kurang dari 10 kali. Ini menggeser hambatan ke bandwidth disk.
Sunting 2: mengapa begitu aktivitas berakibat fatal bagi server?
Si dan sebagainya aktivitas di mesin dengan ton RAM adalah mematikan karena berarti sistem sedang berjuang dengan dirinya sendiri untuk RAM. Apa yang terjadi adalah disk, bahkan penyimpanan besar terlalu lambat jika dibandingkan dengan RAM. Pertukaran agresif mendukung cache disk kernel daripada data aplikasi dan merupakan sumber yang paling umum untuk memperjuangkan RAM. Sejak OS harus cache disk gratis pada setiap si , waktu untuk hidup dari cache tambahan yang Swap memberikan terlalu rendah untuk menjadi berguna lagian. Hasilnya adalah Anda mengambil bandwidth disk untuk menyimpan cache yang mungkin tidak akan digunakan dan menjeda program Anda menunggu halaman si . Berarti mengkonsumsi banyak sumber daya kritis dengan sedikit atau tanpa manfaat untuk aplikasi.
Perhatikan judul respons "banyak aktivitas swap di server dengan banyak RAM". Ini tidak berlaku untuk mesin dengan si dan aktivitas sesekali. Ini mungkin tidak berlaku di masa depan jika algoritma pertukaran yang lebih pintar dikembangkan di OS.
Sunting 3: halaman "dingin"
Orang meromantiskan algoritma swapping. Ada yang mengatakan "ini membutuhkan lebih sedikit halaman RAM yang digunakan", tetapi ini bukan yang dilakukan kernel sama sekali. Masalahnya yang sulit dipahami tentang swap adalah kernel tidak tahu apa itu "halaman dingin". Kernel tidak memiliki metrik yang baik untuk menentukan apakah halaman tersebut digunakan atau kemungkinan akan digunakan dalam waktu dekat. Untuk menghindari bahwa kernel menempatkan halaman di swap lebih atau kurang secara acak dan halaman yang tidak diperlukan tetap di sana. Masalah dari algoritma itu adalah bahwa halaman harus pergi ke swap untuk mengetahui apakah mereka diperlukan oleh aplikasi. Dan ini berarti banyak halaman "panas" akan ditukar. Masalah dengan itu adalah disk terlalu lambat dibandingkan dengan RAM.
Saya membuat tolok ukur sendiri yang merupakan skenario realistis yang sangat umum pada banyak aplikasi dengan volume yang layak. Dari pengujian saya, saya tidak melihat manfaat pada throughput atau latensi ketika swap sedang digunakan. Jauh dari itu. Ketika swapping dimulai, memperlambat throughput dan latensi setidaknya dengan urutan besarnya.
Saya melangkah lebih jauh tentang ini: Saya mengerti swap bukan untuk diproses. Swap hanya untuk keadaan darurat. Saat-saat ketika terlalu banyak aplikasi berjalan pada saat yang sama dan Anda mendapatkan lonjakan memori. Tanpa swap ini akan menyebabkan kesalahan kehabisan memori. Saya menganggap penggunaan swap sebagai kegagalan tim pengembangan dan produksi. Ini hanya pendapat yang jauh melampaui apa yang kita bahas di sini, tetapi itulah yang saya pikirkan. Tentu saja aplikasi saya memiliki manajemen memori yang luar biasa.
sumber
si
mematikan server Andabi
? Keduanya berarti beberapa program menunggu 4096 byte untuk dibaca dari disk ke memori. Inibi
dari file apa pun, dansi
dari kategori sempit file tertentu (tetapi byte mereka bergerak sama cepatnya melalui jalur yang sama).swappiness=0
tampaknya sama sekali tidak pantas untuk server. Anda mungkin mempertimbangkannya untuk sistem desktop interaktif (tapi meskipun begitu, ituswappiness=1
adalah pilihan yang lebih baik untuk akhirnya mengganti halaman yang sangat dingin). Lihat komentar pada jawaban lain .swappiness=7
atau sesuatu akan mengurangi aktivitas swap secara dramatis tanpa menyematkan halaman dingin ke dalam RAM hingga OOM, dan patut dipertimbangkan jika Anda pikir60
terlalu berlebihan untuk server tertentu.si
lebih buruk daripadabi
. Sebagian besar perangkat lunak server dirancang dengan asumsi bahwa I / O dari disk mungkin lambat, dan menggunakan utas, I / O async, atau beberapa teknik lain untuk tetap responsif secara umum sambil menunggu I / O. Kesalahan halaman bisa terjadi di mana saja. Dalam kasus terburuk, kesalahan halaman lambat dapat terjadi setelah mengambil kunci, memblokir semua utas lainnya dari memasuki bagian kritis selama ~ 10 ms (dengan swap pada penyimpanan rotasi lambat). Itu mungkin masuk akal jika bagian kritis menyalin data dari struktur data bersama ke halaman yang berpotensi dingin.Ini bukan jawaban untuk pertanyaan Anda; melainkan, hanya informasi tambahan untuk membantu Anda membuat keputusan.
Jika Anda ingin mengetahui proses apa yang secara spesifik menggunakan berapa banyak swap, berikut adalah skrip shell kecil:
Saya juga harus menambahkan bahwa tmpfs juga akan bertukar. Ini lebih umum pada sistem linux modern menggunakan systemd yang membuat overlay ruang-pengguna / tmp menggunakan tmpfs.
sumber
awk '/Swap/ {sw += $2} FNR==1 { /*first line of a new file */ find the command somehow, maybe still fork/exec ps;} END { print totals }' /proc/[0-9]*/smaps
. Itu berjalan memotong dan ps untuk setiap proses, dan grep + awk beberapa kali untuk setiap proses dalam sistem.Saya perhatikan replikasi MySQL Cluster melambat atau gagal ketika agen bertukar banyak. Mungkin beberapa aplikasi tidak keberatan atau bahkan mungkin mendapat manfaat dari beberapa pertukaran tetapi database tampaknya benar-benar menderita karenanya. Namun banyak diskusi yang saya lihat di forum membahas swap yang didekontekstualisasikan dari diskusi beban kerja khusus.
Di dunia DBA, konsensus tampaknya adalah "Ini masuk akal bahwa ketika Anda menjalankan MySQL (atau benar-benar DBMS lainnya) Anda tidak ingin melihat I / O di ruang swap Anda. Menskalakan ukuran cache (menggunakan ukuran innodb_buffer_pool_size dalam kasus MySQL) adalah praktik standar untuk memastikan ada cukup memori kosong sehingga swapping tidak diperlukan.
Tetapi bagaimana jika Anda melakukan kesalahan atau salah perhitungan, dan swapping terjadi? Seberapa besar dampaknya terhadap kinerja? Inilah yang ingin saya selidiki. "
Saya harap pembaca akan menemukan tautan berikut ini.
https://www.percona.com/blog/2017/01/13/impact-of-swapping-on-mysql-performance/
https://www.percona.com/blog/2010/01/18/why-swapping-is-bad-for-mysql-performance/
sumber