Bagaimana saya bisa mengetahui proses menggunakan ruang swap?

10

Saya memiliki laporan teratas server linux tentang 9GB swap yang digunakan: teratas

Tapi saya tidak tahu di mana itu menggunakan swap, beberapa hasil google mengatakan bahwa Okomisi atas diikuti oleh pakan menunjukkan penggunaan swap oleh proses. Tetapi seperti yang ditunjukkan pada gambar di atas, mengambil jumlah singkat dari kolom SWAP menunjukkan bahwa> 10GB swap digunakan, jadi dari mana angka 9GB untuk penggunaan swap berasal?

Top melaporkan bahwa sekitar 96492kb ram digunakan oleh buffer. Apakah ada yang bisa saya lakukan untuk memanfaatkan ini, daripada menggunakan swap?

secmask
sumber
1
top (per halaman manual) menghitung SWAP menjadi VIRTUAL - penggunaan ram FISIK. Tidak sepenuhnya akurat dari eksperimen saya.
lornix

Jawaban:

6

Ada kemungkinan beberapa program akan menggunakan area swap yang sama, sehingga akan dilaporkan dua kali.

Tidak perlu untuk mencoba memberitahu Linux untuk menggunakan area buffer alih-alih swap - sudah sangat pintar tentang apa yang dilakukannya. Jika Anda menggunakan 9gb swap dan 9gb buffer, itu hal yang baik ... itu berarti Linux menyadari bahwa 9gb barang yang dimuat ke dalam memori tidak sedang digunakan secara aktif, jadi lebih efisien untuk menukar itu ke disk sehingga Anda buffer dapat tumbuh lebih besar, dan meningkatkan kinerja Anda.


EDIT: Jika Anda menambahkan semua memori yang digunakan oleh setiap proses, Anda akan mendapatkan lebih dari RAM fisik Anda juga. Hal ini disebabkan oleh pustaka bersama yang digunakan oleh banyak program, serta cara Linux menangani garpu - ini tidak menduplikasi seluruh program dalam memori, itu hanya menduplikasi bagian yang berbeda antara dua contoh. Dalam beberapa kasus, memori video dapat ditampilkan sebagai bagian dari proses X - saya pikir kartu Voodoo3 lama melakukan ini. Mungkin ada kasus lain di mana memori "hantu" dapat muncul di atas, juga.

Flimzy
sumber
Saya tidak berpikir perpustakaan bersama harus dihitung sebagai swap, karena ketika sistem dinyalakan, tidak ada swap digunakan tetapi ada banyak perpustakaan bersama sudah dimuat. Bagaimanapun, saya melihat bahwa sistem saya menggunakan sekitar 9GB partisi swap, saya hanya ingin mengetahui proses mana yang menggunakan sebagian besar swap (tidak termasuk perpustakaan pustaka, file peta memori ...)
secmask
3

Parsing karya subdirektori / proc:

Sebagai skrip bash:

for PROCESS in /proc/*/; do
  swapused=$(awk 'BEGIN { total = 0 } /^Swap:[[:blank:]]*[1-9]/ { total = total + $2 } END { print total }' ${PROCESS}/smaps 2>/dev/null || echo 0)
  if [ $swapused -gt 0 ]; then
    /bin/echo -e "${swapused}k\t$(cat ${PROCESS}/cmdline)"
  fi
done

Output bisa diurutkan Hi-Lo dengan memilah untuk mengurutkan:

{blah}| sort -rn

Tentu saja, tulis ulang ini dalam bahasa favorit Anda setiap minggu sesuai keinginan. Awk-fu saya tidak kuat.

(cut-n-pastable)

#!/bin/bash
#
# show swap used by processes
#
(for PROCESS in /proc/*/; do
  swapused=$(awk 'BEGIN { total = 0 } /^Swap:[[:blank:]]*[1-9]/ { total = total + $2 } END { print total }' ${PROCESS}/smaps 2>/dev/null || echo 0)
  if [ $swapused -gt 0 ]; then
    /bin/echo -e "${swapused}k\t$(cat ${PROCESS}/cmdline)"
  fi
done ) | sort -nr
lornix
sumber
1

Cara alternatif:

smem -s swap -r
Kirill Feoktistov
sumber