Soru Linux: Mümkün olan her şeyi açıkça nasıl geçersiz kılacak?


Çok fazla bellek alan bir şey başlattım ve şimdi her şey çok fazla gecikmiyor. Sanırım hafızayı yoğun bir süreç için biraz alan açmak için tüm uygulamaların hafızası değişti ve şimdi her şey erişildiğinde RAM'e dönüyor.

Değişimden RAM'e geri dönüşü mümkün olan her şeyi açıkça hareket ettirmenin bir yolu var mı? Ya da belki her şey değil, sadece bazı belirli süreçler verileri?


55
2018-02-07 18:24


Menşei


Normal işlemlerin, herhangi bir şeyi el ile yapmaktan ziyade gerçekte ihtiyaç duyulan şeyde değiş tokuş etmesini tavsiye ederim. - Douglas Leeder


Cevaplar:


Normal Linux bellek kontrol takasının kullanılmakta oldukları gibi gerçekte kullanılan şeylere izin vermenizi tavsiye ederim.

Düşünebildiğim tek şey, takası kapatmak ve sonra tekrar açmak.

sudo swapoff -a
sudo swapon -a

Bu, takas içindeki her şeyi içerecek kadar yeterli fiziksel belleğe sahip olduğunuzu varsayar ...


55
2018-02-07 18:38



Olsa da, çok yavaş çalışıyor :) Teşekkürler! Ama yine de daha zarif bir çözüm olduğuna inanıyorum :) - kolypto
Bu çözüme dikkat ederek, takasın zorla çıkarılacağı her şeyi zorlayacak ... eğer fiziksel hafızaya uymazsa, çekirdek ölümcül OOM katili başlayacak. Hiç bir şey bilmiyorum "her şeyi RAM'e taşımaya çalışın, ancak mümkün olmadığında incelikle başarısız olun" komutu. - Juliano
Denedim ve çok yavaş çalıştığını öğrendim. Yani ücretsiz RAM'i izlemek ve öldürmek mümkün swapoff bellek azalırsa: bu durumda, takas alanı işlevsel kalacaktır :) - kolypto
Swapoff'un öldürülmesinin operasyonu gerçekten durduramayacağından emin değilim. Nasıl uygulandığına bağlı. - Douglas Leeder
Swapoff komutunun, "yeni yazmaların takas yapmasına izin verme" gibi bir şey yaptığı görülürken, diğer herhangi bir işlem (takas kullanan / kullanan) hala "takas serbest bırakabilir". Bu yüzden bu kadar yavaş görünüyor. OOM'un başka bir kişi (Ubuntu Bionic kullanıyorum) dediği gibi görünmüyor - muhtemelen "ek (veya varolan) süreçler yeni bellek kullanmaya başlarsa" (yani gerçek OOM'lar) durum böyle olur. Böylece tüm swapoff / swapon, göründüğü harika bir çözümdür. kararlı / Nazik. Bu, işlemleri kullanarak daha fazla bellek başlatmadığınızı varsayar (ya da çalışanlarda tüketimi artırır). - Roel


0 ile 100 arasında bir sayı ekleyerek onu ayarlayabilirsiniz. /proc/sys/vm/swappiness.

Bu kontrol, çekirdeğin ne kadar agresif olacağını takas etmek için kullanılır.   hafıza sayfaları. Daha yüksek değerler agresifliği arttıracak, daha düşük değerler   takas miktarını azaltmak. 0 değeri, çekirdeğe değil   ücretsiz ve dosya destekli sayfaların sayısı az olana kadar takas işlemini başlatır   Bir bölgedeki yüksek su işaretinden daha fazla.

Varsayılan değer 60'tır.


11
2018-02-07 18:31



/ Proc / sys'i doğrudan kullanmayın, sysctl yerine komut. Bu durumda, sysctl vm.swappiness=x. - Juliano
Sıfır takas bile olsa, açıkça taklit edilen sayfaların açıkça ana belleğe alınmasına neden olacağını düşünmüyorum? - Douglas Leeder
@Douglas haklı. vm.swappiness esas olarak, bellek istendiğinde nesnelerin takas veya tampon miktarını değiştirip değiştirmeyeceği kararını kontrol edecektir. - Juliano
@Juliano, neden / proc / sys kullanılmamalıdır? - James
@James Çünkü / proc / sys, çekirdek konfigürasyonunu değiştirmek ve sorgulamak için kullanılan alt seviye arayüzdür ("uygulama detayı" dır). Linux daha üst düzey sağlar sysctl kullanıcı etkileşimi için komut. Son sonuç aynıdır, ancak kullanıcının doğrudan etkileşim kurması için daha yüksek seviyeli arayüzler tercih edilir. Anahtarı çevirmek yerine (daha yüksek seviye), ateşleme tellerini kısa devre ederek motoru çalıştırmak gibi. - Juliano


Linux hafızayı yönetmek için iyi bir iş yapar ve yoluna çıkmamalısınız. Vm.swappiness ayarı (daha önce bahsedildiği gibi) yolunda gitmiyor. Başka bir şey yapmadan tuhaf sorunları yaşama olasılığınız daha yüksektir.

Ne fırlattın ki o kadar hafızan aç oldu? Ayarlanabilir mi? Kendi bellek sınırlama direktifleri yoksa, ulimit'e de bakabilirsiniz.


5
2018-02-08 03:25



Benim durumumda convert -density 200 file.pdf jpegs/file.jpg. Bazı nedenlerden ötürü çok fazla bellek kullanıyor, ancak haklısınız: ayar yapılabilir. Neyse, durum herhangi bir uygulama ile mümkündür :) - kolypto
Bu cevaba katılıyorum - muhtemelen gerekli olan şeyleri değiştirmek için makinede normal işlemleri yapmalısınız. - Douglas Leeder
convert var -limit bellek ve disk kullanımını kontrol etmek için argüman ve bunları okumalısınız. Ayar -limit memory 512MBya da benzer iyi olurdu. Muhtemelen açık bir MAGICK_TEMPORARY_PATH belirtmek ve komutunuz bittikten sonra bunu temizlemek de iyi olacaktır. - slacy


Tüm uygulamalarınız için kullanılabilir belleğiniz varsa, takas durumunu 0'a ayarlamak tamamdır, böylece işler değişmeyecektir. Örneğin, qemu-kvm, VMM'nin çıkarılması gereken büyük bir hedeftir, çünkü çoğu zaman boşta kaldığı için "görünür". Bir qemu-kvm belleğinin belleğinin% 80'ine kadar takas etmek için yazdım. Qemu-kvm'de çalışan VM'ler, takasın bitmesi nedeniyle yanıt vermemeye başlayacaklar (bu konuyla ilgili herhangi bir fikir olmamasına rağmen). Konuk VM, gerçekte korkunç bir şekilde sürüklenmesine rağmen, en mükemmel performansı göstereceğini düşünecektir. VM'lerin bir demetini "uyandırdığımda" ve bir şeyler yapmaya başladığımda, çok hızlı bellek ve disk ile kurumsal sınıftaki donanımlarda bile, yük ortalamasının 30'un üzerinde olduğunu söyleyebilirim. Sanırım bu, kutu dışı qemu-kvm tasarımında başarısız oluyor.

Umarım bu birisine yardım eder.


3
2017-07-17 13:33





Bunu yapması gereken sistemi yeniden başlatabiliyorsanız (ve başka bir çözümü denemekten daha az zaman alabilir).


1
2018-02-07 23:46





Cevabımın bir kısmını kopyalamak için bu soru.

Böylece, takas edilebilmenin nasıl çalıştığını biliyorsunuz. Bu, VM alt sisteminin sayfa sayfalarını işlemek için eşlenen bellek yüzdesi + swappiness değerinin> 100 olması durumunda takas edilecek sayfaları aramasını söyleyerek çalışır. Bu nedenle, 60 ayarı, sistemin eski sayfalarını işlem sayfası tablosundan görüntülemeye başlamasına neden olur. Sisteminizin belleğinin% 40'ından fazlasını kullanıyorsa. Programlarınızın önbellek pahasına daha fazla bellek kullanmasına izin vermek istiyorsanız, swappiness değerini düşürmek isteyeceksiniz.


1
2018-02-08 04:23



Program belleğiyle önbelleğin burada sorun olduğunu sanmıyorum - bence uygulama belleği kullanılmayan bellek. Ve bence swappiness bunu etkileyecektir. - Douglas Leeder


Çekirdekte VM alt sistemini düşünmeye çalışmamaya öneriyorum. Neredeyse mümkün olandan daha iyi kararlar vermek için yeterli bilgiye sahip olmanız son derece olası değildir. Ve eğer bir şekilde yanlış şeyi yapmaya zorlarsanız, o zaman işleri daha da yavaşlatırsınız.


1
2018-02-08 14:18



OP'nin istediği şeyi yapmak istediğim bazı durumlar var. Yanlışlıkla bir işlemin devam etmesine izin verirsem ve tüm RAM + swap'ımı ele geçirirsem, her defasında hafızanın değişmesi için ya da sadece onu zorlamak ve her zamanki gibi hızlı koşmak zorunda kaldığım anlarım için 15 saniye bekleyebilirim. - Alex
@Alex +1, zihnimizde sahip olduğumuz geçerli kullanım durumunu açıkça belirtmek için. - Vortico