Linux duyarlılığı, belleği ve çağrı sistemi nasıl evcilleştirilir?


27

Taşma ile ilgili ilk soru =) ... +100 ödül. Şu ana kadar gerçekten önemsediğim bir şey düşünemedim:

Gerçekten Linux masaüstü yanıt verme durumundan bıktım, örneğin http://brainstorm.ubuntu.com/item/85/ - düşük RAM seviyesi düşük veya disk veriminin yüksek olduğu durumlarda sistem yavaşlar. bir gezinme ; Bu iyi performans gerektiren uygulamalar için kesinlikle korkunç. Ek olarak, kullanıcı arabirimi tamamen yanıt vermiyor. Bunu, örneğin bir uygulamanın kaynakları hogging olması durumunda, OS Quit ile karşılaştırmak için her zaman tıklayabileceğiniz bir seçenek olan OS X ile karşılaştırın; oysa Linux'ta alt-sekme veya masaüstünü değiştiremem, hatta ctrl-alt-f1 terminal - iyi yapabilirim, işlem başına sadece 1-2 dakika sürer.

Gkrellm'i kullanıyorum, böylece durumu ortaya çıktıkça görebiliyorum. Genellikle, bellek kullanımı oldukça yükselir veya disk çıktısı çarpıcı biçimde artar.

2.6GHz'lik dört çekirdekli ve 4GB'lık 800MHz DDR2 RAM (6GB'lık olurdu, ancak donanım uyumsuzluğu nedeniyle eski set ile eşleştirilemedi) kötü bir donanım değil. Kaçınılmaz RAM aldığımda bu sorun çözülebilir, ancak sorunun kalbi olduğunu düşünmüyorum. Hatta farklı disklerde iki adet takas bölmem var.

Sorunun üç yönlü olduğunu hissediyorum:

  • muazzam miktarda bellek barındıran kaçak programlar - bu programlar için
    • (örneğin, her biri 20-50 MB olan ve bazıları yüzlerce MB kullanan, Chrome'daki sekmeler)
    • (örn. cron'dan devre dışı bırakmak ve kaldırmak zorunda kaldığım update-db ve indexers gibi diğer programlar, çalıştırdıkları zaman sistemi yavaşlatıyorlardı, vb.)
  • Çekirdekte veya otobüs çekişmesinde bir tür korkunç çekişme yaşanması, yüksek disk-verim durumlarının tüm sistemi bir taramaya yavaşlatması (belki de önemli programları araştırmak suretiyle).
  • çekirdek, kullanıcı arabirimi veya bellek, çağrı, hatta işlemci kullanımı gibi kaynaklar açısından önemli programlara öncelik vermiyor

Olumlu oylar:

Bu nedenle, tüm bu programların ortadan kalktığı bir çözüm arıyorum. Özellikle, süreçlerin orantılı olarak yavaşlayacağı bir çözüm arıyorum, sistem ve diğer programlar ise tamamen etkilenmeyen ve manuel olarak bir şeyi öldürecek kadar uzun süre duyarlı tepki göstermeye devam ediyor . Ayrıca, pencere yöneticisi süreci (ve UI'nin yanıt vermesini etkileyebilecek herhangi bir şey) her koşulda duyarlı olmalıdır.

Özellikle /etc/security/limits.conf( man limits.conf) meraklıyım , ancak bunun yalnızca kullanıcı başına kontrol sağlamasından endişe duyuyorum ve dosyadaki yorumlanan örnekler açıklama veya nereden başlayacağı konusunda oldukça opak görünüyor. Bunun limits.confişe yaradığını umuyorum , ancak işe yaramadıysa ya da sorunum için uygun bir çözüm olmasaydı ya da başarmaya çalıştığım kadar parçalı olsaydı şaşırmazdım. Bir işlem başına isim limits.conf, limit.conf'un çalıştığını tekrar varsayarsak ideal olacaktır. Bu noktada tüm çözümlere açık olmama rağmen, insanların sağladığı bir sınırlama denemek, çalışıp çalışmadığını test etmek için mutlu olurum.

Ayrıca, OS X'in bu kadar iyi bir UI yanıtını sürdürmek için nasıl yönettiği hakkında herhangi bir görüş sahibi olmak da faydalı olabilir.

Zaten benim /tmpve önbellek klasörlerim açık tweaked ve tmpfsgenel olarak disk kullanımı sıfıra yakın.

Belirsiz ilgili konular:

  • bellek aşımı

Cevaplar işe yarayacağını sanmıyorum:

  • swapoff (bu hala bellek domuz programlarının cinayetten uzak durmasına izin verir ve sistem bellek gerçekten kötü ise kalıcı olarak donar - takas etmeden önce OOM katilini çağıran ve belirli programları hedefleyen bir çimdik önerebilecek herkese yönelir)
  • echo ?? > /sys/.../swappiness (ayırt edilebilir bir etki yok)
  • nice (hiç çalışmadı)
  • ionice (hiç farketmedi)
  • selinux (program uyumsuzluğu bir kabus gibi görünüyor)
  • realtime linux, yani çekirdeği kesintiye uğratabilir (özel çekirdeği derlemek ve güncellemekle uğraşmak istemez; havuza taşınmışsa sorun olmaz)
  • *

hmm, ödül veremiyorum; Sanırım link 48
saatte görünmüyor

1
+1, bu, günlük olarak Linux masaüstünde yaşadığım en büyük sorun. Belki birkaç haftada bir olmak üzere ara sıra donmalar var, ancak bunlar özellikle can sıkıcı olmak için yeterli değil. Ancak, sizin de dediğiniz gibi, yoğun IO kullanımına sahip uygulamalarda bir sorun gibi görünüyor : Ağır CPU kullanımına sahip uygulamaların genel sistem performansı üzerinde hiçbir etkisi yoktur. Ionice hakkında bir şey bilmiyordum, düzgün çalışması için bu sorunun doğru çözümü olacağı görülüyor.
crazy2be

1
3 yıl sonra ve bu hala Linux'ta bir sorun. @ crazy2be veya user76871, bu arada bir çözüm bulduğunuzu sanmıyorum?
Glutanimate

@Glutanimate: evet, 32GB fiziksel RAM ve daha az değil (iyi, belki 16GB ... ama bu iticidir), ayrıca büyük miktarlarda video RAM olabilir. Bu, yüksek CPU veya kesintiler nedeniyle ya da ne olmadığından tepkisizliği gidermez, ancak düşük bellek durumlarında tepkisizliği önler.
user76871

Yanıtlar:


6

Sisteminiz ağır değiş tokuşa gidiyor gibi görünüyor. Kullanmak vmstat 1bazı detayları ortaya çıkarabilir - sadece bir terminal penceresinde çalışmasına izin verin ve yavaşlama devreye girdiğinde devreye alın.

/ Tmp ve "cache" 'yi tmpfs' e koymak yerine, noatimeseçeneğe bağlı normal bir disk dosya sistemi kullanırdım . Genellikle kullanılan veriler önbelleklerde kalır, uygulamalar için bazı RAM'leri boşaltmak için eski veriler diske yazılabilir. Eğer / tmp ve / veya önbellek büyüyerse, bu size çok yardımcı olabilir.


1
Bahsetmek için +1 noatime.
LawrenceC

Bahsettiğiniz için teşekkür ederim noatime, ne yazık ki bu mount seçeneğini kullandım ve yanıt vermenin sağlanmasında çok yardımcı olacağını sanmıyorum (diskin fazla çalışmamasını sağlamak için bir ton yardımcı olsa da); şu anki kurulumumda öğlen saatini yeniden etkinleştirdiğimden emin olmak için. Tpfs olmayan bir öğeye sahip olmak biraz garip görünüyor, çünkü hala büyük yazıların olması gerektiğini hayal ediyorum.
user76871

+1, denedi vmstat 1-
takasın

2
Ahh. Hiç böyle ağır bir değişime ihtiyaç duyan bir linux sistemi görmedim. df -mTmpfs dosya sistemlerinde ne kadar bellek kullanıldığını kontrol ettiniz mi? Bir şey olduğu nispeten hızlı RAM yeme.
Turbo J

öneri ve bana -mseçenek hakkında öğretim için teşekkür ederiz . Maalesef df -h -msadece 100 MB'lık bir hafızamın bulunduğunu gösteriyor gibi görünüyor tmpfs, bu yüzden herhangi birinin tmpfs ve önbellek için hafıza kullanmasıyla ilgili olduğundan şüpheliyim. Bu da pek nadir görünmüyor; RAM sınırlarına yaklaştığında çoklu dağıtımlarda oldu.
user76871

5

Çekirdek geliştiricisi değilim, ancak yıllarca bu meseleyi felsefe ederek geçirdim çünkü bu soooo'yu defalarca karşıladım. Aslında tüm durum için bir metafor buldum, o yüzden size söyleyeyim. Hikayemde "takas" gibi şeylerin var olmadığını varsayacağım. Bu günlerde 32 GB RAM'le takas yapmak pek mantıklı gelmiyor.

Suyun her binaya borularla bağlandığı ve kasabaların kapasiteyi yönetmesi gereken bir mahallenizi hayal edin. Saniyede yalnızca 100 birim su ürettiğinizi varsayalım (ve kullanılmayan tüm kapasite boşa gider çünkü rezervuar tankınız yoktur). Her ev (ev = küçük bir uygulama, bir terminal, saat gereci, vb.) Saniyede 1 birim su gerektirir. Bunların hepsi güzel ve güzel çünkü nüfusunuz 90 gibi, bu yüzden herkes yeterli miktarda su alıyor.

Şimdi belediye başkanı (= siz) büyük bir restoran açmak istediğinize karar verir (= tarayıcı). Bu restoran birden fazla aşçıya ev sahipliği yapacak (= tarayıcı sekmeleri). Her aşçı saniyede 1 birim suya ihtiyaç duyar. 10 aşçıyla başlıyorsunuz, bu nedenle tüm mahalle için toplam su tüketimi hala iyi olan 100 birim su.

Şimdi eğlenceli şeyler başlıyor: restoranınızdaki toplam su ihtiyacını (101) sahip olmayan bir aşçı daha işe alıyorsunuz. Bir şey yapmalısın.

Su yönetimi (= çekirdek) 3 seçeneğe sahiptir.

1. İlk seçenek, son zamanlarda suyu kullanmayan evlerin hizmetini kesmektir. Bu iyi, ancak bağlantısı kesilen ev suyu tekrar kullanmak istiyorsa, tekrar uzun kayıt işleminden geçmeleri gerekecek. Yönetim, daha fazla su kaynağını boşaltmak için birden fazla evin bağlantısını kesebilir. Aslında, son zamanlarda su kullanmayan tüm evlerin bağlantılarını kesecekler ve böylece bir miktar serbest su her zaman kullanılabilir durumda kalacaklar.

Şehriniz çalışmaya devam etse de, dezavantajı, ilerlemenin durma noktasına gelmesidir. Zamanınızın çoğu, hizmetinizi eski durumuna getirmek için su yönetimini beklemeye harcanır.

Bu, çekirdeğin dosya destekli sayfalarla yaptığı şeydir. Büyük bir yürütülebilir dosyayı çalıştırırsanız (krom gibi), dosyası belleğe kopyalanır. Belleği az olduğunda veya yakın zamanda erişilmemiş parçalar varsa, çekirdek bu parçaları düşürebilir, çünkü bunları yine de diskten yeniden yükleyebilir. Bu aşırı yapılırsa, masaüstünüzü durdurur, çünkü her şey sadece disk IO'yu bekleyecektir. Çok fazla GÇ yapmaya başladığınızda çekirdeğin en az kullanılmış sayfaların da düşeceğini unutmayın. Bu nedenle, DVD görüntüleri gibi birkaç büyük dosyayı kopyaladıktan sonra arka plan uygulamasına geçme zaman alır.

Bu benim için en sinir bozucu davranış, çünkü can sıkıntısından nefret ediyorum ve bunun üzerinde hiçbir kontrolünüz yok. Kapatmak güzel olurdu. Ben çizgileri boyunca bir şey düşünüyorum

sed -i 's/may_unmap = 1/may_unmap = (vm_swappiness >= 0)/' mm/vmscan.c

ve sonra vm_swappiness işlevini, bunu devre dışı bırakmak için -1 olarak ayarlayabilirsiniz. Bu benim küçük testlerimde oldukça işe yaradı ama ne yazık ki ben çekirdek geliştiricisi değilim, bu yüzden kimseye göndermedim (ve açıkça yukarıdaki küçük değişiklik tamamlanmadı).

2.Yönetim yeni aşçıların su talebini reddedebilir. Bu başlangıçta iyi bir fikir gibi geliyor. Ancak iki dezavantajı var. İlk olarak, kullanmasalar bile çok fazla su aboneliği isteyen şirketler var. Bunu yapmanın olası bir nedeni, fazladan suya ihtiyaç duyduklarında su yönetimiyle konuşmanın genel giderinden kaçınmaktır. Günün zamanına bağlı olarak su kullanımları artar. Örneğin restoranın durumunda, öğle vakti öğle vakti şirkete kıyasla suya daha çok ihtiyaç duyuyor. Bu yüzden kullanabilecekleri tüm suyu talep ediyorlar ancak bu gece yarısı boyunca su tahsislerini boşa harcıyor. Buradaki sorun, tüm şirketlerin en üst düzeyde kullandıklarını doğru bir şekilde öngörememeleridir, bu yüzden daha fazla talep etmek için endişe etmeyecekleri umuduyla çok daha fazlasını talep ederler.

Java'nın sanal makinesinin yaptığı şey şudur: başlangıçta bir miktar bellek ayırır ve bundan sonra çalışır. Varsayılan olarak, çekirdek yalnızca Java uygulamanız gerçekten kullanmaya başladığında belleği ayırır. Ancak aşırı ödemeyi devre dışı bırakırsanız, çekirdek rezervasyonu ciddiye alır. Tahsisin ancak kaynaklara gerçekten sahip olması durumunda başarılı olmasına izin verecektir.

Ancak, bu yaklaşımla ilgili daha ciddi bir sorun daha var. Diyelim ki bir şirket her gün (10'ar adım yerine) tek bir birim su talep etmeye başladı. Sonunda 0 ücretsiz ünitenizin olduğu bir duruma ulaşacaksınız. Şimdi bu şirket daha fazlasını tahsis edemeyecek. Sorun değil, zaten büyük şirketleri önemseyen. Ancak sorun şu ki, küçük evler de daha fazla su talep edemeyecek! Ani turist akını ile başa çıkmak için küçük umumi banyolar yapamazsınız. Yakındaki ormandaki yangına acil su sağlayamazsınız.

Bilgisayar terimleriyle: Aşırı düşük hafıza koşullarında çok düşük bellek durumlarında, yeni bir xterm açamazsınız, makinenize ssh alamazsınız, aramak için yeni bir sekme açamazsınız düzeltmeleri. Başka bir deyişle, aşırı ödemeyi devre dışı bırakmak da masaüstünüzün hafızası azaldığında işe yaramaz hale getirir.

3. İşte bir şirket çok fazla su kullanmaya başladığında sorunu çözmenin ilginç bir yolu. Su yönetimi onu havaya uçurur! Kelimenin tam anlamıyla: restoranın sitesine gider, dinamitleri içine atar ve patlayana kadar bekler. Bu, kasabanın su ihtiyacını anında çok azaltacak, böylece yeni insanlar taşınabiliyor, ortak banyolar yaratabiliyorsunuz. Belediye başkanı olarak, restoranın bu sefer daha az su gerektireceği umuduyla yeniden inşa edebilirsiniz. Örneğin, içeride çok fazla kişi varsa, insanlara restoranlara girmemelerini söylersiniz (örneğin, daha az tarayıcı sekmesi açarsınız).

Bu aslında, çekirdeğin tüm seçenekleri tükendiğinde ve belleğe ihtiyacı olduğunda yaptığı şeydir: OOM katilini çağırır. Büyük bir uygulamayı seçer (birçok sezgiye dayanarak) ve onu öldürür, çok fazla bellek boşaltır, ancak duyarlı bir masaüstünü korur. Aslında Android çekirdeği bunu daha da agresif bir şekilde yapar: bellek az olduğunda en son kullanılan uygulamayı öldürür (yalnızca son çare olarak kullanan stok çekirdeğine kıyasla). Bu Android Viking Katili denir.

Bence bu, sorunun en basit çözümlerinden biri: bence bundan daha fazla seçeneğe sahip değilsin, neden daha sonra başaramazsın, değil mi? Sorun, çekirdeğin OOM katilini çağırmaktan kaçınmak için oldukça fazla iş yapmasıdır. Bu yüzden masaüstünüzün çok yavaş olduğunu ve çekirdeğin bu konuda hiçbir şey yapmadığını görüyorsunuz. Neyse ki OOM katilini kendiniz çağırmak için bir seçenek var! İlk önce, sihirli sysrq tuşunun etkinleştirildiğinden emin olun (örn. echo 1 | sudo tee /proc/sys/kernel/sysrq), Sonra çekirdeğin hafızanın azaldığını hissettiğinizde, sadece Alt + SysRQ, Alt + f tuşlarına basın.

Tamam, tüm bunlar güzel ama denemek ister misin? Düşük hafıza durumu yeniden üretilmesi çok kolaydır. Bunun için çok basit bir uygulama var. İki kez çalıştırman gerekecek. İlk çalıştırmada ne kadar boş RAM bulunduğunu, ikinci çalıştırmada ise düşük bellek durumu yaratacaktır. Bu yöntemin takas seçeneğinin devre dışı bırakıldığını varsaydığını unutmayın (örn sudo swapoff -a. A ). Kod ve kullanım şu şekildedir:

// gcc -std=c99 -Wall -Wextra -Werror -g -o eatmem eatmem.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char** argv)
{
    int limit = 123456789;
    if (argc >= 2) {
        limit = atoi(argv[1]);
    }
    setbuf(stdout, NULL);
    for (int i = 1; i <= limit; i++) {
        memset(malloc(1 << 20), 1, 1 << 20);
        printf("\rAllocated %5d MiB.", i);
    }
    sleep(10000);
    return 0;
}

Ve işte bunu nasıl kullanıyorsunuz:

$ gcc -std=c99 -Wall -Wextra -Werror -g -o eatmem eatmem.c
$ ./eatmem
Allocated 31118 MiB.Killed
$ ./eatmem 31110
Allocated 31110 MiB.Killed

İlk çağrı 31.118 MiB boş RAM'e sahip olduğumuzu tespit etti. Ben de başvuruya 31.110 MiB RAM tahsis etmesini söyledim, böylece çekirdek onu öldürmeyecek ama neredeyse bütün hafızamı yer. Sistemim dondu: fare imleci bile tomurcuklanmadı. Alt + SysRQ, Alt + f tuşlarına bastım ve eatmem sürecimi öldürdü ve sistem restore edildi.

Düşük bellek durumunda ne yaptığımızı seçeneklerimizi kapsamamıza rağmen, en iyi yaklaşım (diğer tehlikeli durumlar gibi) ilk etapta bunu önlemektir. Bunu yapmanın birçok yolu vardır. Gördüğüm yaygın yollardan biri, yaramazlık uygulamalarını (tarayıcılar gibi) sistemin geri kalanından farklı kaplara koymak. Bu durumda tarayıcı masaüstünüzü etkileyemez. Ancak önlemenin kendisi, sorunun kapsamı dışında olduğundan yazmam.

TL; DR: Şu anda, sayfalamayı tamamen önlemenin bir yolu olmamasına rağmen, aşırı ödemeyi devre dışı bırakarak tam sistem durmasını azaltabilirsiniz. Ancak sisteminiz düşük bellek durumu sırasında yine de kullanılamayacak, ancak farklı bir şekilde olacaktır. Yukarıdakilerden bağımsız olarak, düşük bellek durumunda çekirdek seçiminin büyük bir işlemini öldürmek için Alt + SysRQ, Alt + f tuşlarına basın. Sisteminiz yanıtını birkaç saniye sonra geri yüklemelidir. Bu, sihirli sysrq anahtarının etkin olduğunu varsayar (varsayılan olarak değildir).


Hepinize bu kaynağın lütfu olarak ünümü verdim, bu yüzden bir yorum yapamadım bile :) :) Sonunda, bu harika cevap için teşekkür etmek için biraz teşekkür ettim! Dizüstü bilgisayarımı 8 GB'lıyken her zaman bu meseleyle uğraşıyordum (çılgınca, ancak sistemim o günlerde düzenli olarak hafızadan çıkıyordu). Son zamanlarda, bu projeyi buldum: Çok geç olmadan bazı işlemleri öldürerek sistemin takılmasını önlemeye yardımcı olabilecek github.com/rfjakob/earlyoom .
Vlad Frolov

4

Tüm geçici ve önbellek dosyalarınızı bir a 'ya koymak, sahip tmpfsolduğunuz boş RAM miktarını azaltır; bu nedenle, sistemin bu olmadan gerekenden daha erken değişmesine neden olabilirsiniz.

Bazı çekirdek olanaklarına veya aşırı yüklenmeye neden olan sürücüye dayanan bazı uygulamalarınız var gibi görünüyor. Tarayıcıları ve dizinleyicileri kullanmaktan başka ne tür uygulamalar ve dizinleyicileri devre dışı bıraktığınız hakkında çok fazla ayrıntıya girmiyorsunuz.

LXDE veya IceWM gibi daha az kaynak tüketen bir masaüstü ortamına veya pencere yöneticisine geçmeyi deneyebilirsiniz. İşyerinde LXDE yüklü bir Linux sistemi ve çok az bir masaüstü ortamı için ROX-Filer kullanıyorum. Bu Linux sisteminin amacı, Windows XP ve Windows 7'yi aynı anda çalıştırabilmem için VMWare Player'ı çalıştırmaktır. Söylediklerinize benzer donanım özellikleri var ve bu ağır yük altında çok fazla yanıt verme sorununa sahip değilim. Linux'un kendisiyle ilgili herhangi bir yanıt sorunum yok (genellikle beni bir saniye bekleten ve 2 VM + 1 işletim sistemi arasında 1 disk paylaşması beklenen VM'ler) ve VM'leri ne zaman askıya alabilir veya kapatabildiler? İstiyorum.

Bana göre, çalıştırmakta olduğunuz belirli uygulamalarla ilgili bazı sorunlara işaret ediyor.

Disk sürücüleriniz için DMA etkin mi? (kullanım hdparm) Tam disk şifrelemesi kullanıyorsanız, bu tüm disk trafiğinin DMA'nın yararını büyük ölçüde azaltan CPU'dan geçmesini gerektirir. Bunun etkisi, yüksek disk trafiğinin CPU'nun yükselmesine ve daha sonra tüm sistemi yavaşlatacağı şeklinde olacaktır. (EDIT: netleştirmek, DMA'yı devre dışı bırakmak VEYA kullanmak dm-crypt, yüksek disk trafiği sırasında yüksek CPU'ya neden olacaktır)


2
Sorunun amacı, WM'in şişirilmiş olması ve sistemin yavaşlamasına neden olması (muhtemelen normal kullanım koşullarında mükemmel tepki göstermesi) değil, çekirdeğin bellek yetersiz olduğunda ve belleğe girmesi gerektiğinde uygulamalara öncelik vermemesidir. ağır takas. Bu sorunu şimdiye kadar kullandığım her masaüstünde Linux yaşadım ve daha hafif programlar kullanırken ya da daha fazla ram eklerken yardımcı olabilir, bu sorunun kökenine hitap etmiyor.
crazy2be

Önceki yazımda şunu söyledim: "Bir çeşit çekirdek tesisine veya aşırı yüklenen bir sürücüye dayanan bazı uygulamalarınız var gibi görünüyor." Yani belki darboğaz belirli bir çekirdek modülündedir. Ben bir çekirdek uzmanı değilim, ancak çekirdek tarafından, özellikle de modül tarafından bellek ayırmanın kullanıcı tarafından farklı bir şekilde çalıştığından eminim. Çekirdek tarafındaki CPU kullanımı da muhtemelen farklı şekilde ele alınır (çekirdek işlemlerini "güzel" yapabilir misiniz bilmiyorum). İlgili uygulamaları bilmeden daha fazla yorum yapamam.
LawrenceC

Ayrıca, FUSE NTFS kullanıyorsanız, yavaşlamaya neden olabilir.
LawrenceC

1
Tmpfs gibi RAM tabanlı bir dosya sisteminin RAM'in daha hızlı tükenmesine neden olduğunu ve hafif bir WM'in temel sorunların belirtilerini hafifçe azaltabileceğinin farkındayım. Diske yazma yeteneğinin zayıf olması nedeniyle tmpfs kullanma konusunda baskı hissettim. Yine de öneriniz için, özellikle de ilgili konular listesine eklediğim DMA ile ilgili bölümünüz için teşekkür ederiz. Kayıt için, DMA'nın etkin olduğuna inanıyorum ve şifreleme dosya sistemi kullanmıyorum.
user76871

1

Bu, Linux'un zamanlayıcı ile ilgili ortak bir sorundur. Her ne kadar GÇ ağır aktiviteleri olursa, sistem sürünmeye yavaşlar. Çekirdek korsanlığı yapmadığınız sürece durumu iyileştirmek için yapabileceğiniz pek çok şey yok :)

Belki bunlar yardımcı olabilir:

http://www.phoronix.com/scan.php?page=article&item=linux_2637_video&num=1

http://www.osnews.com/story/24223/Alternative_to_the_200_Lines_Kernel_Patch_that_Does_Wonders_


1
Hatırladığım kadarıyla, bu çekirdek yamaları gerçekten sadece bir programı derliyorsanız ya da GUI uygulamalarıyla etkileşime girmeye çalışırken terminalde çok CPU (ve IO?) Ağır olan başka bir şey yapıyorsanız geçerlidir . Bir GUI uygulamasının ağır bir iş yaptığı ve maalesef başka bir GUI uygulamasıyla çalışmaya çalıştığınız daha yaygın durumlarda yardımcı olmaz.
crazy2be

0

Her ne kadar soru iki yaşın üzerinde olsa ve @ ypsu'nun yanıtı harika olsa da, Linux tabanlı sistemlerin RAM eksikliğinden dolayı kötü gittiği halde hala burada.

İşte sorunla ilgili gözlemim: hiç takas yapmasam bile, sistem belleği kısa tuttuğunda, sabit sürücü göstergem% 100 disk yükü olduğu için yanıyor. Bu gerçeği göz önüne alındığında, asıl nedenin, çekirdeğin diskten geri yüklenebilecek bir şeyi boşaltarak belleği boşaltmaya çalıştığı ve bunun da kesinlikle paylaşılan kütüphaneler olduğu anlaşılıyor. GUI uygulamaları genellikle tonlarca paylaşılan kütüphaneye sahip olduklarından, sistem sadece bir kısmını boşaltmanın yeterli olduğunu düşünebilir, ancak bu yalnızca bu kaldırılmış kütüphaneleri geri gerektiren bir sonraki kullanıcı alanı işlemine kadar çalışır. Bu, paylaşılan kütüphanelerin boşaltılmasının ve geri yüklenmesinin sonsuz döngüsüne neden olan en olası senaryo gibi görünmektedir.

Çok geç kalmadan önce en çok hafızaya aç işlemleri öldüren bir kullanıcı alanı cini olarak çalışan bir proje var: https://github.com/rfjakob/earlyoom

Ayrıca, bellek aç uygulamaları için (örn. Chrome) akılcı bellek sınırlarına sahip Docker kapsayıcılarını kullanırdım.

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.