Önbellek ve arabellek için RAM ayır


5

Genellikle masaüstümde pek çok program ve sanal makine çalıştırıyorum. CPU, tıkanıklık değil hafızadır. (Daha fazla bellek satın almak bir çözüm değildir, çünkü kendi bilgisayarım değil.)

Denemeye başladım compcache ve belleği sıkıştırmak için iyi çalışır. Kullanımını 100 takas yoluyla arttırabilirim. Fakat gerçek (sıkıştırılmamış) olduğunda, hafıza dolmaya başlar ve Linux, benim için kötü olanı büyük ölçüde değiştirmeden önce önbellek ve arabellekleri boşaltmaya başlar, çünkü programlar arasında geçiş yapmak acı verici bir şekilde yavaşlar.

Tamponlar ve önbellekler için bellek ayırmanın bir yolunu bulamadım, bu yüzden alternatif yollar aramaya başladım ve gruplar buldum.

Gruplarda, kök kaynaklar için bellek sınırını ayarlayamazsınız, bu yüzden tüm işlemleri sınırlı belleğe sahip bir gruba taşımayı denedim, ancak bir şekilde işe yaramadı.

Lütfen arabellek ve önbellek için nasıl bellek ayırabilirim ve erken bir aşamada sıkıştırmaya nasıl başlayabilirim.


buldum flashcache . Şimdi onunla compcache tarafından desteklenen bazı testler yapıyorum.
Stone

Yanıtlar:


4

Önbellek ve arabellek için bellek ayırmak istiyorsanız: echo 10 & gt; / proc / sys / vm / vfs_cache_pressure, 100 varsayılan değer olduğunda. Ardından, her uygulama tarafından kullanılan maks. Ram'ı sınırlayabilirsiniz: echo 8192 & gt; / Proc / sys / vm / max_map_count. Değişkenlik = 30 ve yüksek / proc / sys / vm / dirty_writeback_centisecs ve / proc / sys / vm / dirty_expire_centisecs değerleri öneririm (ikisi: 1250). Ayrıca dosya sistemini ince ayarlamaya yardımcı olabilir:

echo 8192 > /sys/block/mmcblk0/queue/max_sectors_kb
echo 8192 > /sys/block/mmcblk1/queue/max_sectors_kb
echo 0 > /sys/block/mmcblk0/queue/iosched/slice_idle
echo 0 > /sys/block/mmcblk1/queue/iosched/slice_idle
echo 160 > /sys/block/mmcblk0/queue/iosched/quantum
echo 160 > /sys/block/mmcblk1/queue/iosched/quantum
echo 800 > /sys/block/mmcblk0/queue/iosched/fifo_expire_sync
echo 800 > /sys/block/mmcblk1/queue/iosched/fifo_expire_sync
echo 180 > /sys/block/mmcblk0/queue/iosched/fifo_expire_async
echo 180 > /sys/block/mmcblk1/queue/iosched/fifo_expire_async
echo 1 > /sys/block/mmcblk0/queue/iosched/back_seek_penalty 
echo 1 > /sys/block/mmcblk1/queue/iosched/back_seek_penalty

Bu değerler cep telefonumdan ve dizüstü bilgisayarımdan geliyor ve gerçekten kararlı çalışıyor ve işleri oldukça hızlı hale getiriyor. Cep telefonum hafıza sınırlı ama bu tweaks çok yardımcı oluyor. Cep telefonumun da grupları etkin ve 4k wonderpatch'i öneririm, çünkü bu, bir kullanıcının terminalden (masaüstü değil) çalıştığı her uygulamaya özel cgrouplar ekler ancak cgroups ile belleği nasıl sınırlandıracağımı bilmiyorum.


vfs_cache_pressure bana bazı olumlu değişiklikler veriyor ama beklediğim kadar değil.
Stone

1

Tamponlar ve önbellek için doğrudan bellek ayıramazsınız. Çekirdek, bunun için başka herhangi bir şey için kullanılmayan belleği kullanır, bazen daha fazla yer açmak için çok eski kullanılmayan sayfaları değiştirir, bu nedenle önbellek / arabellek belleklerini geri almanın yolu, RAM uygulamalarının miktarını sınırlamaktır. makineleri) kullanıyor.

Sık karşılaşılan bir sorun, VM'lere gerekenden daha fazla bellek dağıtmaktır, böylece VM'deki işletim sistemi disk önbelleklerine yer açar. Sanal diskleriniz için önbelleğe alma desteğini açarak (bunun nasıl belirteceğinizin sanallaştırma çözümüne bağlı olduğunu), böylece sunucunun önbellekleme için ne kadar bellek kullanılacağına karar vermesine izin vererek bunu yapma gereksinimini kaldırabilirsiniz. Bu şekilde, her VM'ye tahsis edilen bellek miktarını, diğerlerinden daha az G / Ç performansı düşmesiyle azaltabilirsiniz. Yine de bir uyarı kelimesi: bunu yaparak, ana makinenizde temiz olmayan bir kapanma varsa (örneğin, elektrik kesintisi nedeniyle) sanal disklerde dosya sistemi bozulma tehlikesiyle karşı karşıya kalırsınız.


Ne yazdığını anlıyorum ama grup kullanmak mümkün değil mi? Bazı uygulamaların hafızasını cgroups ile sınırlandırdım ve değiştirmelerini sağladım. İyi çalıştı, ancak tüm uygulamaları bir şekilde sınırlı bir gruba zorlamaya çalıştığımda, bir şekilde kök grup, tüm uygulamaların bulunduğu ve hafıza kullanımının grup sınırının üzerinde olduğu grubumdan daha fazla hafıza kullandı. Çekirdek Dokümantasyon / kontrolörleri / memory.txt sais "Sınırlı miktarda bellek içeren bir grup oluşturun, bu mem = XXXX ile önyüklenmeye iyi bir alternatif olarak kullanılabilir." İşte bu yüzden tohum tohumlama gibi çalışması gerektiğini düşündüm.
Stone

1

Sınırlı belleğiniz varsa, bellek kullanımını çekirdeğe dikte etmeye çalışmayın. Çekirdek muhtemelen zaten cgroups veya compcache ile yapabileceğinizden daha iyi bir iş yapıyor.

Bellek artışı bir seçenek değilse, tek gerçek çözüm RAM kullanımınızı sınırlamaktır. Takas alanını arttırmak, sorunu "çözebilir" ancak işlemler arasında uzun süreli takaslara neden olabilir. VM tarafından RAM kullanımını azaltmak, durumu iyileştirebilir.

Makaleye bakın Linux bellek ayak izinizi azaltın . 2007'den itibaren hala yardımcı olabilir.

İhtiyacınız olmayan her hizmeti ve seçeneği kapatarak kendi çekirdeğinizi de derleyebilirsiniz. Bu yazıya bakınız: Çekirdek Boyutu Ayar Kılavuzu .

Bunun yerine, bu makalede olduğu gibi Linux'un küçük bellek sürümüne geçebilirsiniz: En küçük Linux dağıtımlarından 8'i .

Ancak, en azından çok yavaş değişmeden, çok aç bellek kullanan bir bilgisayarda çok fazla bellek kullanmanıza izin verecek mucize bir çözüm olmadığını tekrarlıyorum. Kullanım düzeninizi optimize etmeniz gerekecek. Çekirdeği optimize etmek biraz yardımcı olabilir, ancak sınırları var.


0

Terminale gidin, ardından kök kipine gidin, sonra: nano /etc/sysctl.conf ve altta bunu kopyalayın.

vm.swappiness = 60

vm.overcommit_ratio = 100

vm.min_free_kbytes = 1000000

Bu kullandığım geçerli yapılandırma, 2 alt satır 1 gb'ye eşittir, 12 gb ram'ın 10 gb'i ile sınırlıdır, bu yüzden benim için% 10'luk bir rezerv ayırır ve olması gerektiği gibi ayarlar.


Ne söylemeye çalıştığını anlatmak çok zor. Lütfen cevabınızı daha netleştirmek için dilbilgisi ve biçimlendirme kullanın.
music2myear

1
Maalesef, taslakta nasıl yazdığım, düzenlememden sonra farklı sunuldu, düzenlemem göndermeyi istediğim şeydi.
theman5142
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.