İşlemlerin takas alanı kullandığını nasıl öğrenebilirim?


10

Ben kullanılan takas hakkında bir linux sunucu üst raporları var: üst

Ancak takasın nerede kullanıldığını Oanlayamıyorum , bazı google sonuçları üst düzey commad takibinin pişlemle takas kullanımını göstereceğini söyledi . Ancak yukarıdaki resimde gösterildiği gibi, SWAP sütununun kısa bir toplamı, 10GB'tan fazla takasın kullanıldığını gösterir, bu yüzden takas kullanımı için 9GB rakamı nereden geliyor?

Üst raporlar tamponlar tarafından yaklaşık 96492kb koç kullanıldığını bildiriyor. Takas kullanmak yerine bunu kullanmak için yapabileceğim bir şey var mı?


1
üst (man sayfası başına) SWAP'ı SANAL - FİZİKİ koç kullanımı olarak hesaplar. Deneylerimden tamamen doğru değil.
lornix

Yanıtlar:


6

Birden fazla programın aynı takas alanını kullanması mümkündür, bu nedenle iki kez raporlanır.

Linux'a takas yerine tamponlu alanı kullanmasını söylemeye gerek yoktur - zaten ne yaptığı konusunda çok akıllıdır. 9 gb takas ve 9 gb tampon kullanıyorsanız, bu iyi bir şey ... Linux, belleğe yüklenen 9 gb'lık öğelerin aktif olarak kullanılmadığını fark ettiğinden, diske takas etmenin daha verimli olduğu anlamına gelir. arabellek büyüyebilir ve performansınızı artırabilir.


DÜZENLEME: Her işlem tarafından kullanılan tüm belleği toplarsanız, fiziksel RAM'inizden çok daha fazlasını alırsınız. Bunun nedeni, birden fazla program tarafından kullanılan paylaşılan kitaplıkların yanı sıra Linux'un çatalları işleme biçimidir - tüm programı bellekte çoğaltmaz, yalnızca iki örnek arasında farklılık gösteren bölümleri çoğaltır. Bazı durumlarda, video belleği bir X işleminin parçası olarak gösterilebilir - sanırım eski Voodoo3 kartları bunu yaptı. "Hayalet" hafızanın da üstte görülebileceği başka durumlar da olabilir.


Paylaşılan kitaplıkların takas olarak sayılması gerektiğini düşünmüyorum, çünkü sistem başlatıldığında, takas kullanımı yok, ancak önceden yüklenmiş birçok paylaşılan kitaplık var. Her neyse, sistemimin takas bölümü yaklaşık 9GB kullandığını görüyorum, sadece takasın en çok hangi sürecin kullanıldığını bulmak istiyorum (paylaşım kütüphanelerini, hafıza haritası dosyasını hariç tut) ...
secmask

3

/ Proc alt dizinini ayrıştırma çalışır:

Bir bash betiği olarak:

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

Çıktı, sıralamak için boru ile Hi-Lo olarak sıralanabilir:

{blah}| sort -rn

Elbette, bunu istediğiniz hafta en sevdiğiniz dilde yeniden yazın. Awk-fu'm güçlü değil.

(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


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.