Apa yang menggunakan swap saya (Ubuntu)?

30

Saya memiliki server Ubuntu 8.04 yang menjalankan database dan banyak server aplikasi Java. Konfigurasi dan penggunaan memorinya adalah:

             total       used       free     shared    buffers     cached
Mem:      16456176   15930028     526148          0      81372    9674196
-/+ buffers/cache:    6174460   10281716
Swap:      1951888     366100    1585788

Saya perhatikan bahwa swap naik setiap sore, dan dirilis beberapa waktu di malam hari. Permintaan tidak sama pada semua hari, dan dimulai pada waktu yang berbeda. Jadi ini cukup acak, kecuali untuk batas "siang-malam" yang kabur.

Beban pada mesin ini bervariasi pada siang hari. Ini sangat rendah antara tengah malam dan 6-7 pagi, jauh lebih tinggi (tapi stabil) sampai 6-8 malam, kemudian turun secara bertahap.

Sekarang saya punya pertanyaan berikut:

  1. Bagaimana saya bisa melihat proses mana yang menggunakan swap?
  2. Mengapa lebih suka bertukar daripada mengambil sebagian memori dari cache?
Konrad Garus
sumber

Jawaban:

25

Pola penggunaan swap yang Anda gambarkan tidak terdengar mengejutkan. Mereka konsisten dengan beberapa proses yang berjalan secara permanen memiliki halaman yang jarang digunakan. Pada siang hari, karena aktivitas yang tinggi, halaman yang jarang digunakan hampir selalu dalam swap. Di malam hari, ada lebih banyak ruang untuk mereka dalam RAM.

Anda bisa melihat sekilas berapa banyak memori dari berbagai jenis yang digunakan oleh setiap proses dalam topatau htop. Tidak ada yang menunjukkan penggunaan swap secara default, tetapi keduanya dapat dikonfigurasi untuk (atas: tekan fdan aktifkan SWAPkolom; htop: tekan F2, tambahkan NSWAPkolom). Anda bisa mendapatkan informasi lebih lanjut tentang proses tertentu dengan di cat /proc/12345/vmstatmana 12345ID proses. Perhatikan bahwa "berapa banyak swap yang digunakan suatu program" tidak sepenuhnya terdefinisi dengan baik, karena beberapa halaman dibagikan oleh beberapa proses.

Ada dua jenis pesaing utama untuk RAM: memori proses (yang dapat ditukar) dan cache disk (yang dapat dibaca kembali dari file). Tidak ada alasan untuk selalu memprioritaskan memori proses daripada cache disk: lebih baik menukar sebagian dari memori proses yang jarang digunakan daripada terus membaca file ke dalam memori berulang kali. Angka yang Anda berikan, dengan sekitar setengah (katakanlah 30% -70%) dari memori yang digunakan untuk cache disk, adalah tipikal untuk sistem yang memiliki jumlah RAM yang masuk akal untuk tugas-tugas yang seharusnya mereka lakukan.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
6
Saya tidak dapat menemukan NSWAPkolom (Ubuntu 16.04: /).
jjmontes
1
@jjmontes Sudah dihapus . Saya tidak tahu kenapa.
Gilles 'SO- stop being evil'
The htop FAQ menyatakan bahwa penulis tidak percaya itu mungkin untuk secara akurat melaporkan penggunaan swap, dan bahwa top metrik tidak akurat.
Oliver Evans
0

Di StackOverflow, sudah ada jawaban yang bagus untuk pertanyaan pertama Anda ("Proses mana yang sebenarnya menggunakan swap?").

/programming//a/7180078/1442301

Singkatnya, alat suka topatau htoptidak memberikan informasi akurat sama sekali tentang penggunaan swap. Anda harus masuk ke /procfolder (dalam file pseudo /proc/$PID/smaps) untuk mendapatkan informasi yang lebih akurat.

The posting yang disebutkan di atas mengandung shell script singkat untuk mendapatkan informasi ini bergema dalam cara yang baik.

Xavier
sumber
0

Dengan htop v1.01, aku menekan "S" untuk menambahkan NSWAPkolom bukan "F2" (sebagai Gilles disarankan), maka Columns> Available Columns> dan F5untuk menambahkannya.

masukkan deskripsi gambar di sini

Genjo
sumber
Saya memiliki htop 2.0.1 dan saya tidak melihat opsi NSWAP :(
Adam
1
@Adam Pemelihara tidak ingin menampilkan kolom ini lagi karena tidak ada cara yang dapat diandalkan untuk mendapatkan informasi ini; lihat Mengapa tidak menampilkan kolom SWAP, seperti teratas?
Genjo
0

Tanpa polling dan parsing output alat seperti vmstat, freedan top, tempat terbaik untuk melihat mungkin crontab dari pengguna root atau pengguna lain pada sistem. Jika beban umum pada sistem lonjakan andal pada waktu tertentu, kemungkinan ada proses dalam cron yang menciptakan kebutuhan akan sumber daya. Kalau tidak, Anda selalu dapat membuat utilitas pembuatan log pembuangan sampah ghetto dengan scriptutilitas tersebut, yang hanya mencatat semua yang masuk ke STDOUT.

Jadi jika saya perlu membuat skrip sekali pakai sekali pakai untuk mendapatkan hasil untuk pemeriksaan nanti, di satu terminal saya akan mengetik:

script /tmp/free.txt

lalu

while (true); do date; free; sleep 30; done

dan di terminal lain

script /tmp/top.txt

lalu

while (true); do date; top -n 1; sleep 30; done

dan kemudian keesokan paginya, bunuh baik scriptdoa dan cocok dengan output dari topdanfree

sekali lagi ini adalah pendekatan ghetto tetapi sepertinya Anda hanya perlu satu kali saja

Anda mungkin juga ingin membaca panduan swap ubuntu

Brad Clawsie
sumber