Takas hafızası nedir?


26

Bazı veritabanı tablolarımı saklamak için RAM kullanıyorum, diğerleri ise sabit diskte saklanıyor.

Bugün süreçlerimin takas belleği kullandığını öğrendim. Şimdi takas hafızası nedir ve takas hafızasının hangi işlemin kullanıldığını nasıl algılayabilirim ve kullanmalarını nasıl durdurabilirim?


hangi işlemlerin takas belleği kullandığını bulmanın bir yolu yok mu ???

kullanılan sayfa dosyası ve sayfa hataları için Windows görev yöneticisine (veya benzer araçlara) bakın.

Değişim işlem başına bir şey değil, tüm işletim sistemi için. "vmstat" kullandığınız takas miktarı hakkında size bilgi gösterecektir.
jrockway

wuxdows üzerinde değil linux üzerinde çalışıyorum

bu takas kullanımının nedenini aldım ..... birisi siteme ayrılmaya çalışıyordu, bu yüzden bütün THG'lerin neden bizim tarafımızdan bir sebep olmadan gerçekleştiği. Cevaplarınız için teşekkürler, her zaman olduğu gibi bana çok yardımcı oldu :-)

Yanıtlar:


41

Fiziksel belleği tükenirse, verileri diskte bellekte depolayan sanal belleği kullanırsınız. Diskten okumak, bellekten okumaktan daha yavaş birkaç büyüklük emridir, bu yüzden her şey yolunda yavaşlar. (Gerçek bellek ile sanal bellek arasındaki veri alışverişi "değiş tokuş" tir. Diskteki alan "takas alanı" dır.)

Uygulamanız "takas kullanıyorsanız", ya daha az bellek kullanmanız ya da daha fazla RAM satın almanız gerekir.

(Kullanılmayan uygulamalar kullanılıncaya kadar diskte depolanabildikleri için takas faydalıdır. Ardından "sayfalandırılabilir" ve normal şekilde tekrar çalıştırılabilir. Bellekte olmasa da, işletim sistemi bu belleği kullanabilir. disk önbellek gibi başka bir şey için. Bu çok kullanışlı bir özellik, ancak programınızı çalıştırmak için yeterli fiziksel belleğiniz yoksa, kesinlikle daha fazla belleğe ihtiyacınız var. Neyse ki, bellek bugünlerde gerçekten çok ucuz.)


1
Doğruluk uğruna: sanal bellek, sanal bellek adreslerini (ne kadar kullanılabilir RAM'e sahip olursanız olun, modern CPU'da her zaman etkin olan bir şey) kullanmak anlamına gelir ve doğrudan takasla ilgili değildir (birlikte kullanılmasına rağmen) temelde farklı kavramlar).
fortran


7

Bir bilgisayarın belirli bir miktarda fiziksel belleği vardır. Ama çoğu zaman daha fazlasını istiyoruz. Bu yüzden diskte biraz hafıza değiştiriyoruz.

Her ne zaman bu belleğe ihtiyacımız olursa, tekrar belleğe (başka bir parçayı değiştirerek) değiştirmemiz gerekir. Gecikmeyi en aza indirecek son derece akıllı algoritmalar var, ancak bazen beklemek zorundayız.

Windows'ta görev yöneticisine bakarsanız, sütun sayfası hatalarını gösterebilirsiniz. Bu, sürenin sayısını gösterir; bir uygulama diskte bulunan ve değiştirilmesi gereken bir bellek parçası ister. Çok sayıda sayfa hatası = yavaş uygulama.

Bu işlem birkaç seviyede kullanılır. Hızlıdan yavaşa doğru bir özet:

  • CPU düzeyinde, kayıtlar var. Bunlar en hızlı hafızadır ancak miktarı sınırlıdır.
  • Ayrıca CPU'da küçük bir bellek önbelleği var. Burada çalışan programın küçük bir parçası hızlı erişim için saklanır. Daha fazla bilgi edinmek istiyorsanız şube tahmin algoritmalarında arama yapın.
  • Bazen CPU ve ana bellek arasında seviye 2 önbellekleri vardır.
  • Bir sonraki seviye ana hafızadır (RAM).
  • En son seviye ve hepsinden daha yavaş olan disk, bazen USB bellekleri ekstra bellek olarak kullanabilirsiniz.

3
cat /proc/pid/smaps

Eğer bir takas kullanmak istemiyorsanız, bir takas bölümü kullanmayın (satırdaki yorumu yapın /etc/fstab), ancak bu yeni bir işlem başlatmayı önler ve fiziksel hafızanız tükenirse malloc'un başarısız olmasına neden olur. Genel olarak bu iyi bir fikir değildir ... OS, sıcak sayfaları bellekte tutacağı ve son zamanlarda kullanılmayanları diske yerleştireceği için çok güvenli ve çok da kullanışlı değil.

Başka bir çözüm de veritabanınızı hacklemek olabilir, böylece sayfaları belleğe kilitler (bunun yapılabildiğini biliyorum, ama şimdi tam olarak nasıl söyleyeceğimi bilemedim), ama yine de, veritabanının kendi değiştirdiğini ve önbellek mekanizmaları.

Takasın ne olduğunu ve sanal belleğin nasıl çalıştığını bilmek için, bazı İşletim Sistemi derslerine bir göz atmanızı tavsiye ederim, belki MIT Open Courseware yardımcı olabilir.


Pek çok linux dağıtımında varsayılan yapılandırma hafızayı aşmak olduğundan, gerçekleşecek "en kötü" OOM katilinin büyük olasılıkla iyi olmayan DBMS (ve "RAM'de saklanan" tablolarıyla) başlayan en büyük olasılıkla iyi olmayan DBMS ile başlayan işlemlerdir. şey).
symcbean

1

Kısmen bir cevap buldum. Takas Belleği, bilgisayarınızın Sabit Diski'nde, İşletim Sistemlerinin gerçekte RAM'deki bilgiyi koymak için kullanacağı, başka bir uygulama için serbest bırakmak için kullanacağı bir alandır. Bu, sistem yeni bir işlem için belleğe ihtiyaç duyduğunda yapılmalı ve hiçbiri olmadığından, sistemimizde bol miktarda RAM varsa, belki de SWAP belleğe ihtiyaç duymayacağını görebiliriz.

GÜNCELLEŞTİRME

Alan değiştirmeyi (veya sanal belleği) nerede bulacağınızı bulmak için Görev Yöneticisi'ne (CTRL + ALT + DEL) gidebilir ve VIEW -> COLUMNS -> VIRTUAL MEMORY öğesinden açabilirsiniz. Şimdi sadece bellek kullanımı ve sanal bellek arasındaki farkı hesaplayın. Ayrıca Vista kullanıyorsanız nasıl göreceğinize dair bir talimat: http://www.ehow.com/how_5067693_increase-swap-space.html


-1

Değişim RAM olarak kullanılan sabit disk alanıdır. Oldukça yavaş (nispeten konuşuyor) çok yavaş, ancak daha fazla veri ile uğraşmaya çalışırken RAM'lerinin kaldırabileceği bilgisayarların çökmesini engelliyor.

İşlemlerin takas kullanımını engellemek için - daha fazla RAM yükleyin.


1
Takas etmek istemiyorsanız, bir sayfa dosyası kullanmayı bırakın. Ancak başka sorunlar bekleyin.

1
Değil. Değiştirme veri bloğunu hareket gelen fiziksel belleğe harddisk. Tek seferlik okuma, normalde yeterince hızlı.

@ xtofl cevap takastan bahsetmedi, sadece bölümleri değiştirdi ve gamecat'ın yorumunun söylediklerinizle ilgisi yok mu? : P
RapidWebs

-1

İşlemlerinizin takas belleği kullanmasını istemiyorsanız, takas belleğini tamamen devre dışı bırakmanız yeterlidir. Ne yazık ki, hiç bellek tükenirse, Linux çekirdeği kullanım için biraz bellek açmak için çalışan işlemlerinizi öldürecektir.

Sisteminiz için yeterli RAM’iniz varsa, gerçekte takas belleği olmadan gidebilirsiniz.

Takas belleği kullanmayan 768 MB RAM'e sahip bir dizüstü bilgisayarım var. İhtiyaçlarım için yeterince iyi. 256 MB RAM'e sahip bir sunucum var ve takas belleği kullanmıyor. OpenVZ sanallaştırma kullanarak 8 sanal sunucu da sorunsuz çalışıyor.

Yani, takas belleğine ihtiyacınız varsa size kalmış.


Sadece 256 megabayt RAM'e sahip bir makinede NASIL 8 VM çalıştırıyorsunuz ?!?
warren

VZ ile mümkündür, çünkü RAM, ortak kütüphaneler VM'ler arasında paylaşıldığından ya da bunun için etkili bir şey olduğundan, tamamen bölünmez. Yani, 8 x 64M, mutlaka 512M olmak zorunda değildir. :)
sybreon

Bununla birlikte - temel alınan cihaz nasıl stabil çalışıyor?
warren

Etkin olmayan programları değiştirerek, dosya önbelleği için daha fazla belleğiniz olur. Ve bu işleri hızlandırıyor. Bu bir kez okunan genellikle oldukça hızlı ve genel olarak ihmal edilebilir bir etkiye sahiptir. Sadece mevcut RAM'inizin sınırları dışına çıktığınızda kullanılmaz. 16GB RAM'e sahip makinelerin zaman zaman SWAP kullandığını gördüm.
RapidWebs

dahası, bir veritabanı sunucusundaki SWAP'ı devre dışı bırakmanızı tavsiye etmem. Müşterileri veya web uygulaması, OOM basit bir gece yedekleme işlemi ya da benzeri bir şey boyunca arka ucunu öldürdüğünde çok memnun olmaz mıydı? Uygulama kullanımı ve kullanılabilir hafızaya bağlı olarak veritabanı önbelleğini ayarlamak daha akıllıca olacaktır. eğer zaten değişiyorsa, daha fazla ram'a ihtiyacı vardır veya DB sunucusunu daha iyi yapılandırmak için. Aksi takdirde, SWAP’ı devre dışı bırakmak OOM’u, her takas işleminde DB sunucusunu öldürmeye zorlar. sorusuyla karar veren, genellikle.
RapidWebs
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.