Ubuntu hızlı bir şekilde RAM'in dışına çıkıyor ve bilgisayarım donmaya başlıyor. Bunu hangi komut çözecek?

72

Arka planda yazılım derlediğimde bana oldukça sık geliyor ve aniden her şey hem RAM'in hem de takas alanının tükendiği gibi [hiçbir şey yapmazsam] donuyor ve sonunda donuyor.

Bu soru, Gnome Terminali'ni açmak, geçmişimde arama yapmak ve bir sudo komutunu çalıştırmak için yeterli zaman ve kaynağa sahip olduğumu varsayar.

Beni ne kadar zor bir yeniden başlatma veya herhangi bir yeniden başlatma yapmak zorunda kalmamdan kurtarabilirim?

    
sordu Akiva 03.07.2017 11:15

11 cevap

84

Deneyimimde Firefox ve Chrome, ilk 7 bilgisayarımdan daha fazla RAM kullanıyor. Muhtemelen bundan daha fazla ama ben noktadan uzaklaşıyorum. Yapmanız gereken ilk şey tarayıcınızı kapatmanız . Bir komut?

killall -9 firefox google-chrome google-chrome-stable chromium-browser

En popüler tarayıcıları tek bir komutta bir araya getirdim ancak açıkçası başka bir şey çalıştırıyorsanız (veya bunlardan birini kullanmadığınızı biliyorsanız) sadece komutu değiştirin. % Co_de%, önemli bittir. Kullanıcılar killall -9 ... (sinyal numarası 9) hakkında fikir alışverişinde bulunur ancak tarayıcılar aşırı esnekdir. Dahası, SIGKILL yoluyla yavaş yavaş sona erdirme, tarayıcının bir temizleme hatası yüklemesi anlamına gelir - bu da ilave RAM patlaması gerektirir - ve bu durumda karşılayamayacağınız bir şeydir.

Bunu zaten çalışan bir terminale veya Alt + F2 diyaloga alamıyorsanız, bir TTY'ye geçmeyi düşünün. Kontrol + Alt + F2 sizi giriş yapmanıza izin veren (yavaş olsa da) TTY2'ye ulaştıracak ve hatta kullanmanıza izin vermeli Sorunu hata ayıklamak için SIGTERM gibi bir şey. Sanırım htop 'si alamadığım bir noktaya hiç RAM tükettim.

Uzun vadeli çözüm, daha fazla RAM satın almayı, uzak bir bilgisayarla kiralamayı veya şu anda yapmakta olduğunuz şeyi yapmamanızı içerir. Karmaşık ekonomik argümanları size bırakacağım ama genel olarak konuşursak, satın almak ucuzdur, ancak sadece bir seriye ihtiyaç duyarsanız, dakikada bir faturalanan VPS sunucusu veya saat iyi bir seçimdir.

    
verilen cevap Oli 03.07.2017 11:30
66

Sihirli Sistem İstek Anahtarı etkinleştirilmiş bir sistemde, Alt + Sistem İsteği + f 'e basılması (klavyenizde işaretlenmemişse, Sistem İsteği genellikle Baskı Ekranında tuşuna basılır) kernel'i bellek kullanımı ve öldürmek için en kötü saldırı sürecini seçmeye çalışan bellek katilinden çıkar (oomkiller). o. Bunu, belki de tanımladığınızdan daha kısa bir süreye sahipseniz ve sistem daha yeni başlıyorsa (ya da belki de başladı bile), belki de tam olarak neyin öldüğünü tam olarak bilemezseniz, bunu yapabilirsiniz. kullanılabilir bir sistemle. Bazen bu X'i öldürebilir, ama çoğu zaman bu günlerde olduğundan daha kötü bir süreç seçmede çok daha iyidir.

    
verilen cevap Muzer 03.07.2017 12:44
20

Diğer cevapların aksine, bunu yaparken takas işlemini devre dışı bırakmanızı öneririz. Değişim, sisteminizin öngörülebilir bir şekilde devam etmesini sağlar ve genellikle diske erişen uygulamaların iş hacmini artırmak için kullanılır (kullanılmayan sayfalar disk önbelleğine yer açmak için evrilerek), bu durumda sisteminiz yavaşlatılır gibi görünür. Kullanılamayacak seviyelerde, çünkü çok fazla aktif olarak kullanılan bellek, takas etmek için zorla tahliye ediliyor.

Bu görevi yaparken takas işlemini tamamen devre dışı bırakmanızı öneririm, böylece bellek dolgusu katil RAM'ın dolduğu anda harekete geçer.

Alternatif çözümler:

  • Takas bölümünüzü RAID1'e yerleştirerek takas okuma hızını artırın
      Riskliyse
    • Ya da RAID0, ancak disklerinizden herhangi biri arızalanırsa, çok sayıda çalışan program getirecektir.
  • Eşzamanlı oluşturma işlerinin sayısını azaltın ("daha fazla çekirdek = daha fazla hız", hepimizin, RAM üzerinde doğrusal bir ücret aldığını unuttuğumuzu söyleriz)
  • Bu iki yoldan da olabilir, ancak çekirdeğin zswap 'sini etkinleştirmeyi deneyin. Bu, takas yollanmadan önce sayfaları sıkıştırır, bu da makinenizi hızlandırmak için yeterli miktarda kıskaçlı oda sağlayabilir. Öte yandan, sadece ekstra sıkıştırma / dekompresyon ile bir engel oluşturabilirdi.
  • Optimizasyonları kapatın veya farklı bir derleyici kullanın. En iyileştirme kodu bazen birkaç gigabaytlık bellek alabilir. LTO açıksa, bağlantı aşamasında da çok miktarda RAM kullanacaksınız. Her şey başarısız olursa, derlenmiş üründe hafif bir çalışma süresi performansı isabetiyle projenizi daha hafif bir derleyici (ör.% Co_de%) ile derlemeyi deneyebilirsiniz. (Bu, geliştirme / hata ayıklama amaçları için bunu yapıyorsanız genellikle kabul edilebilir.)
verilen cevap Score_Under 03.07.2017 19:47
14

Sisteminizdeki en fazla RAM'i kullanarak işlemi sonlandırmak için aşağıdaki komutu (gerekirse art arda) kullanabilirsiniz:

ps -eo pid --no-headers --sort=-%mem | head -1 | xargs kill -9

ile

  • ps -eo pid --no-headers --sort=-%mem : tüm çalışan işlemlerin işlem kimliklerini, bellek kullanımına göre sıralar.
  • head -1 : sadece ilk satırı koru (işlem en fazla belleği kullanarak)
  • xargs kill -9 : işlemi durdurun

Dmitry'nin doğru yorumundan sonra düzenle:

Bu, hassas görevler olmadığında çalıştırılması gereken hızlı ve kirli bir çözümdür ( kill -9 yapmak istemediğiniz görevler).

    
verilen cevap Gohu 03.07.2017 17:12
11

Kaynak tüketim komutlarınızı çalıştırmadan önce, setrlimit (2) sistem çağrısı, muhtemelen, bash kabuğunuzun ulimit dizini ile veya limit için -v ile özellikle. Sonra çok büyük sanal adres alanı tüketimi (ör. mmap (2) veya sbrk (2) malloc (3) ) başarısız olur ( errno (3) RLIMIT_AS olmaktır.

Sonra (yani, ENOMEM yazdıktan sonra kabuğunuzdaki aç süreçleri), sisteminizi dondurmadan önce sonlandırılacaktır.

Ayrıca okuyun Linux RAMimi Yedim ve devre dışı bırakmayı düşünün bellek fazlalığı ( ulimit komutunu root olarak çalıştırdığınızda, bkz. proc (5) ...).

    
verilen cevap Basile Starynkevitch 04.07.2017 07:42
11
  

yazılım derlediğimde

  Arka plan

Bu durumda, "killall -9 make" gibi bir şey (ya da derlemenizi yönetmek için ne kullanıyor olursanız olun). Bu, derleme işlemini daha da ilerletecek, SIGHUP'un başlattığı tüm derleyici süreçlerini (umarız da durmalarına da neden olur) ve bonus olarak, oturum açtığınız kullanıcı olarak derlediğiniz varsayılarak sudo'ya ihtiyaç duymaz. olarak Ve web tarayıcınız, X oturumunuz veya rasgele bir süreç yerine sorununun gerçek nedenini öldürdüğü için, o anda sisteminizde yaptığınız her şeye müdahale etmeyecektir.

    
verilen cevap fluffysheap 05.07.2017 09:34
9

Kendiniz için daha fazla takas oluşturun.

Aşağıdakiler 8G takasını ekleyecektir:

dd if=/dev/zero of=/root/moreswap bs=1M count=8192
mkswap /root/moreswap
swapon /root/moreswap

Yine de yavaş olacak (siz değişiyorsunuz) ama aslında bitmemelisiniz. Linux'un modern sürümleri dosyalara takas edebilir. Takas bölümü için tek kullanımlık olan bu gün, dizüstü bilgisayarınızı hazırda bekletmek içindir.

    
verilen cevap William Hay 03.07.2017 16:35
4

Kısa bir sürede ücretsiz RAM yığınını elde etmenin bir yolu zram . Herhangi bir yarı-iyi işlemci ile, bu normal takas daha hızlı ve sıkıştırma oranları, web tarayıcıları gibi birçok modern RAM yuvası ile oldukça yüksektir.

Zram'ın kurulu ve yapılandırılmış olduğunu varsayalım, yapmanız gereken tek şey çalıştırmaktır

sudo service zramswap start
    
verilen cevap Dmitry Grigoryev 04.07.2017 15:01
3

Yapılabilecek başka bir şey, bu komutla bellek sayfası önbelleğini boşaltmaktır:

echo 3 | sudo tee /proc/sys/vm/drop_caches

kernel.org dokümantasyonundan (vurgu eklenmiştir):

  

drop_caches

     

Buna yazıldığında, çekirdeğin temiz önbelleklere ve ayrıca   dişçilik ve inode gibi geri dönüşümlü döşeme nesneleri. Bırakıldığında,   hafızaları serbest kalır .

     

Boş bir pagecache için: echo 1 & gt; / proc / sys / vm / drop_caches Ücretsiz   geri kazanılabilir levha nesneler (dişçilik ve inode'ları içerir): echo 2 & gt;   / proc / sys / vm / drop_caches Döşeme nesnelerini ve pagecache'yi boşaltmak için: echo 3 & gt;   / Proc / sys / vm / drop_caches

     

Bu yıkıcı olmayan bir işlemdir ve herhangi bir kirliliği serbest bırakmayacak   nesneler. Bu işlem tarafından serbest bırakılan nesnelerin sayısını artırmak için,   Kullanıcı / proc / sys / vm / drop_caches dosyasına yazmadan önce 'sync' çalıştırabilir.   Bu, sistemdeki kirli nesnelerin sayısını en aza indirecek ve   düşürülecek daha fazla aday oluşturun.

    
verilen cevap Sergiy Kolodyazhnyy 03.07.2017 17:13
2

sudo swapoff -a , takası devre dışı bırakacak ve çekirdeğin otomatik olarak işlemi durdurması en yüksek skoru . Bunu kullanırsam, eğer kontrol dışı kalırsa, takas içine girip sonsuza dek takılıp kalmasın diye öldürmeyi tercih ederim. Daha sonra yeniden etkinleştirmek için sudo swapon -a kullanın.

Sonra, takas ayarlarınıza bir göz atmak isteyebilirsiniz. Takasınız, takas sistemine bastığınızda sisteminizi yavaşlatacak olan kök disk bölümüyle aynı disk üzerindeymiş gibi geliyor. Ayrıca, bence, modern sistemler genellikle çok fazla takasla yapılandırılıyor. 32GiB RAM genellikle 32GiB takasını, takas alanına 32GiB koymak istediğiniz gibi varsayılan olarak tahsis edilmiş demektir.

    
verilen cevap sudo 07.07.2017 19:02
1

"Arka planda derleme" dedin. Ön planda ne yapıyorsun? Eclipse veya başka bir kaynak ağır IDE ile geliştiriyorsanız, her şeyin konsolda sonlandırılıp sonlandırılmadığını kontrol edin.

Geliştirme ortamları genellikle geliştirme aşamasında birden çok işlem başlatmaya izin verir, artık bunlarla ilgilenmedikten sonra da asılı kalabilir (hata ayıklayıcıda veya düzgün şekilde tamamlanmadığında). Geliştiricinin dikkat etmemesi durumunda, onlarca çok sayıda gigabayt kullanarak birlikte onlarca süreç unutulabilmektedir.

IDE’de sonlandırılması gereken her şeyin sonlandırıldığını kontrol edin.

    
verilen cevap h22 08.07.2017 10:00

Etiketlerdeki diğer soruları oku