Soru Top - Sanal bellek boyutu ne anlama geliyor? ... linux / ubuntu


Ben çalıştırıyorum top sunucu performansımı izlemek için ve java işlemlerimden 2 tanesi 800MB-1GB'a kadar olan sanal belleği gösterir. Bu kötü bir şey mi?

Sanal bellek ne anlama geliyor?

Ve oh btw, 1GB takas var ve% 0 kullanılır. Bu yüzden kafam karıştı.

Java süreci = 1 Tomcat sunucusu + kendi java daemon Sunucum = Ubuntu 9.10 (karmik)


100
2018-05-04 15:37


Menşei


Görmek: serverfault.com/questions/48582/... - Juliano


Cevaplar:


Sanal hafıza zorunlu hafıza değildir. Örneğin, bir işlem belleği büyük bir dosyayla eşleşiyorsa, dosya aslında diskte saklanır, ancak hala işlemde "adres alanı" alır.

Adres alanı (yani işlem listesindeki sanal bellek) hiçbir şeye mal olmaz; Bu gerçek değil. Gerçek olan, yerleşik hafıza olan RSS (RES) sütundur. Gerçek hafızanızın ne kadarı bir süreç işgal ediyor.

Ama bu bile cevap değil. Bir süreç fork () işlevini çağırırsa, iki bölüme ayrılır ve her ikisi de başlangıçta tüm RSS'lerini paylaşır. Dolayısıyla, RSS başlangıçta 1 GB olsa bile, forking sonrası sonuç, her biri 1 GB'lık bir RSS'ye sahip iki işlem olacaktır, ancak yine de yalnızca 1 GB'lık bellek kullanıyor olmalısınız.

Şaşkın mı? Gerçekten bilmeniz gerekenler: free programınıza başlamadan önce ve sonra sonuçları kontrol edin ve +/- buffers/cache hat). Bu fark ne kadar yeni Yeni başlatılan programınızı hafızaya alın.


119
2018-05-05 01:17



"Programınıza başlamadan önce ve sonra sonuçları kontrol edin", alternatif olarak, USS (Benzersiz Set Boyutu) seçeneğini kullanarak smem. - Hubert Kario
Yani, kullanılan gerçek bellek miktarını üçüncü taraf olmayan araçlar sağlayan bir araç var. - CMCDragonkai
@ CMCDragonkai Evet, bedava. - deviantfan
Eğer bir java sürecini java -Xmx16g RunLongjava süreci için 16Gb bellek ayırır, sonra VIRT yukarı, 16Gb sayılır gibi görünüyor. Bu durumda, bu 16Gb belleğin türü nedir, eşlenen bellek mi, yoksa ..? - Eric Wang


Üstteki (1) man sayfasından:

o: VIRT  --  Virtual Image (kb)
      The  total  amount  of  virtual  memory  used  by the task.  It
      includes all code, data and shared libraries  plus  pages  that
      have been swapped out.

      VIRT = SWAP + RES.

RES, RESEP bellek anlamına gelir (kullanılan fiziksel hafıza).

Aslında bu doğru değil (artık). "Takas" yazdığında, programın kendi adres alanına eşlenmiş olduğu dosyaları da içerir. Bu bellek dosya destekli ancak gerçekten takas değil.

VIRT, ayrılan ancak henüz bir şey için kullanılmayan sayfaları da içerir. Bu durumda herhangi bir sayfa çekirdeği Sıfır Sayfa ile eşleştirilir (parlak konsept - yukarı bakmalısınız), bu yüzden VIRT içinde görünür, ancak aslında herhangi bir bellek tüketmez.


22
2018-05-04 15:43



iyi thats ilginç, yani VİRT = SWAP + RES, nasıl benim SWAP kullanımım sıfır, 2 java işlemleri için sanal bellek 1GB'a yakın mı? - kapso
Temel olarak Üst gösterileri .... Değiştir: 1048568k toplam, 0k kullanılmış, 1048568k ücretsiz, 505728k önbelleğe alınmış - kapso
@ user42159 Bu cevap YANLIŞ! Adamın üstünde 'VIRT = SWAP + RES' yok! -m : VIRT/USED toggle Reports USED (sum of process rss and swap total count) instead of VIRT. Bu cevabı reddetmemem üzücü. - duleshi
Bu cevap yanlış. KULLANILMIŞ = Res + Swap Boyutu (üstte iken f tuşuna basılarak erişilen Üst Alan Yönetimi'nden. Ayrıca üst düzey sayfadan). - Jason S


Bunu buldum Mugurel Sumanariu'dan açıklama çok açık:

VIRT toplamı olan bir işlemin sanal boyutu anlamına gelir.   aslında kullandığı bellek, kendisine eşlenmiş bellek (için   Örneğin video kartının X sunucusu için RAM'i), diskteki dosyalar   ona (en çok paylaşılan kütüphaneler) ve hafızaya eşlenmiş   diğer süreçlerle paylaşılır. VIRT ne kadar hafıza olduğunu gösterir.   Program şu anda erişebiliyor.

RES doğru bir temsil olan yerleşik büyüklüğü temsil eder   Bir işlemin ne kadar gerçek fiziksel belleğe sahip olduğu. (Bu ayrıca   doğrudan% MEM sütununa karşılık gelir.) Bu hemen hemen her zaman   Çoğu program C'ye bağlı olduğundan VIRT boyutundan daha az olmalıdır   kütüphane.

SHR VIRT boyutunun ne kadarının gerçekten paylaşılabileceğini gösterir (bellek   veya kütüphaneler). Kütüphaneler söz konusu olduğunda, bu mutlaka demek değildir.   kütüphanenin tamamı yerleşiktir. Örneğin, sadece bir program   kütüphanede birkaç işlev kullanır, tüm kütüphane haritalanır ve   VIRT ve SHR'de sayılacak, ancak sadece kütüphanenin parçaları   Kullanılan işlevleri içeren dosya aslında yüklenir   ve RES altında sayılmalıdır.


8
2018-01-27 17:53





Bellek kullanımını ölçmek için ps / üst çıkıştaki VIRT sütunu neredeyse hiç önemsizdir. Endişelenme. Apache ağır yükü VIRT vs RES hafıza

https://stackoverflow.com/questions/561245/virtual-memory-usage-from-java-under-linux-too-much-memory-used


5
2018-05-04 15:41



Teşekkürler, endişe ve şaşkın, çünkü swap kullanımı% 0 iken, sanal bellek sütunu çok yüksek. Ayrıca, toplam 2,7GB'lık fiziksel belleğin sadece 1.7GB'lık kısmı var, sanal bellek ise yüksek mi? - kapso


Linux, sanal belleği destekler; yani, RAM'in bir uzantısı olarak bir disk kullanarak, kullanılabilir bellek boyutunun uygun şekilde büyür. Çekirdek, kullanılmayan bir bellek bloğunun içeriğini sabit diske yazacak, böylece bellek başka bir amaç için kullanılabilir. Orijinal içeriklere tekrar ihtiyaç duyulduğunda, tekrar belleğe okunurlar. Bu tamamen kullanıcı için tamamen şeffaf hale getirilmiştir; Linux altında çalışan programlar yalnızca daha fazla bellek miktarına sahiptir ve disk bölümlerinin zaman zaman diskte yer aldığını fark etmez. Tabii ki, sabit diskin okunması ve yazılması, gerçek hafızayı kullanmaktan daha yavaştır (bin kat daha yavaş), bu yüzden programlar hızlı çalışmamaktadır. Sanal bellek olarak kullanılan sabit disk kısmına takas alanı denir.

Linux dosya sistemindeki normal bir dosyayı veya takas alanı için ayrı bir bölüm kullanabilir. Bir takas bölümü daha hızlıdır, ancak takas dosyasının boyutunu değiştirmek daha kolaydır (tüm sabit diski yeniden bölümlemeye gerek yoktur ve her şeyi sıfırdan kurmanız gerekmez). Ne kadar takas alanı gerektiğini bildiğinizde, bir takas bölümüne gitmelisiniz, fakat emin değilseniz, önce bir takas dosyası kullanabilirsiniz, sistemi bir süreliğine kullanabilirsiniz, böylece ne kadar takas alacağınıza dair bir fikir edinebilirsiniz. İhtiyacınız var ve büyüklüğünden emin olduğunuzda bir takas bölümü hazırlayın.

Linux'un aynı anda birden fazla takas bölümü ve / veya takas dosyası kullanmasına izin vereceğini de bilmelisiniz. Bu, nadiren olağandışı miktarda takas alanına ihtiyacınız varsa, her zaman tahsis edilen tutarı tutmak yerine, bu tarihlerde ekstra bir takas dosyası oluşturabileceğiniz anlamına gelir.

İşletim sistemi terminolojisine dair bir not: bilgisayar bilimi, genellikle (tüm işlemi dışarıdan takas alanına yazarak) takas etme ile sayfalama (bir kerede yalnızca birkaç kilobaytlık, yalnızca sabit boyuttaki bölümleri yazma) arasında ayrım yapar. Sayfalama genellikle daha verimlidir ve Linux'un yaptığı budur, ancak geleneksel Linux terminolojisi zaten takas hakkında konuşuyor.

Kaynak: http://www.faqs.org/docs/linux_admin/x1752.html


2
2018-05-04 15:43



Bu cevap, sanal belleğin, takas veya sayfalama ile aynı olduğu hakkındaki yanılsamayı yayar. Diskin bir RAM uzantısı olarak kullanılması sanal belleği önler. Ve sanal belleğe sahip olan ancak RAM'in bir uzantısı olarak disk kullanmayan pek çok sistem (çoğu SoHo yönlendiricisi gibi) vardır. (Ve bu OP'in sorusunun cevabı değildir, çünkü herhangi bir swap kullanmıyor.) - David Schwartz


VIRtual Üstteki sütun, sürecin gerçekten çalışma zamanında alınamayacağı sürecin süper-uzayını (süper tüketim alanı) ifade eder. Başka bir sütun var RESidentSüreçte, işlem tarafından ayrılan gerçek fiziksel bellek / alan anlamına gelir.

İki arasındaki farkın nedeni, örnekle anlaşılabilir: eğer süreç belirli bir kütüphane kullanıyorsa, kütüphane boyutu da yardımcı olacaktır. virtual-size. bununla birlikte, kütüphanenin sadece bir kısmı kullanılacağı için (yani, kullanımda olan bazı yöntemler), resident-size.

İçin başvur Daha fazla bilgi


2
2018-02-26 14:27





"VIRT" sadece adres alanını, RES "gerçek" hafızadır, fakat "RES" nin "SHR" (= paylaşımlı) miktarı, diğer süreçlerle paylaşılan RES'nin parçasıdır. Pek çok süreç için, SHR'yi RES'den çıkararak, bu belirli sürece gerçekten atfedilebilecek bellek miktarını verdiğine inanıyorum.


0
2018-04-18 23:03