Ubuntu, bellek büyük program tarafından aşıldığında kilitleniyor


2

Ubuntu'yu malzemelerin hesaplama simülasyonlarını çalıştırmak için kullanıyorum. Bazen hesaplamalar makinenin toplam hafızasının, 64 GB RAM'in üstesinden gelir ve takas kullanmaya başlar. Bu olduğunda Ubuntu durur ve yeniden başlatılması gerekir. Aynı simulasyonları Linux Slackware ile çalıştırmak, bunun yerine, durdurulmuş simülasyonlar olmadı ve terminalde bir hatam oldu, bunun gibi bir şey: "segmentasyon hatası". Simülasyonları Ubuntu'da çalıştırmak ve Slackware gibi Ubuntu'nun durak problemini yenmek mümkün mü?

Teşekkürler.


segmentasyon hatası almak gerçekten bir gelişme değil, yani programınızın çöktü demektir. Muhtemelen istediğiniz şey, bellek değiştirilirken sistemi kullanılabilir kılmanın bir yolu ... Takas bölümünüz ne tür bir sabit disk kullanıyor ve ne kadar büyük?
ImaginaryRobots

2
@ImaginaryRobots Bir segmentasyon hatası, tüm sistemi yeniden başlatmak zorunda olduğu için kesinlikle çok tercih edilir. Daha az şiddetli ve kurtarılması daha kolay olmasının yanı sıra, özellikle yazılım için hata ayıklama sembolleri varsa, hata ayıklamak da çok daha kolaydır.
Eliah Kagan

Yanıtlar:


3

Simülasyon yazılımınızı bir sistemde çalıştırdığınızda segmentasyon hataları alıyorsanız, başka bir sistemde çalıştırdığınızda büyük yavaşlama yapıyorsanız, simülasyon yazılımınız yeterli belleğe sahip olmamaya yönelik değildir. Herhangi bir segmentasyon hatası, bir hatanın göstergesidir ve genellikle segmentasyon hataları üreten hatalar, gerçekten kod davranışının tanımlanmadığı hatalardır . Farklı sistemlerde farklı (yanlış) şekillerde hareket edebilir.

Yani:

  • Siz veya birlikte çalıştığınız kişi simülasyon yazılımını yazdıysa, performansı iyileştirmek amacıyla hata ayıklamanız gerekir. Segmentasyon hatasının yığın izini oluşturmak için onu hata ayıklama sembolleriyle ( gcc -g ...) derleyerek ve gdbSlackware'de etkileşimli olarak (örneğin, içinde ) hata ayıklamayı başlatarak öneririm .

    Bellek sızıntılarını bulmak için de hata ayıklamanız gerekir. Sen kullanabilirsiniz Valgrind , sızıntı tespit modunda çalışırken Boehm GC veya bu diğer çeşitli araçlar.

    Tabii ki, hata ayıklamanın en uygun yolu nasıl çalıştığının detaylarına ve hangi dilde yazıldığına bağlı olacaktır.

  • Simülasyon yazılımını tamamen ayrı bir partiden aldıysanız, bir hata bildirmelisiniz. Hata ayıklama derlemesi veya hata ayıklama sembolleri sizin için mevcutsa, hata raporu, Slackware sistemine segmentasyon hatasının yığın izini dahil etmekten fayda sağlayacaktır.

Ubuntu'daki simülasyonu sonlandırmak için yapabileceğiniz bazı şeyler olabilir.

Tüm sistem durma noktasına gelmemelidir. Bu, muhtemelen çekirdekte bulunan Ubuntu'da bir hata olduğunu gösterir. Büyük disk G / Ç'leri bile Ubuntu'yu yalnızca ılımlı bir şekilde yavaşlatmalıdır. Ubuntu'nun çekirdeğinde bununla ilgili bir hata bildirmek isteyebilirsiniz.

Bunu yapmak istiyorsanız, önce bunu okuyun . Ardından hata raporlama işlemini çalıştırarak başlatırsınız ubuntu-bug linux(ya da yalnızca komut satırı sistemse apport-cli linux).

Bu soruna geçici bir çözüm bulmak için , içinde sınırları belirterek kullanılabilir belleği sınırlamayı deneyebilirsiniz limits.conf. Ayrıca bu blog gönderisine bakın .

Problemin CPU önceliği ile ilgisi varsa, simülasyonu nice(örneğin ) ile daha düşük bir öncelikte çalıştırabilir veya birlikte çalışırken daha düşük bir değerde çalıştırabilirsiniz .nice -n 15 command...renice

Eğer hiç makineyi kullanabiliyorsa yavaşlarsa ve simülasyon (bazen durdurulması gerek olarak sanal konsol GUI daha iyi tepki), sizinle süreci öldürme deneyebilirsiniz sinyali bir süreç öldürmek için en güçlü yolu olan ( ):KILL

kill -KILL command

İşte commandsadece bir kelime, çalıştırılabilir isim. Bu isimdeki tüm çalıştırılabilirler öldürülecek (bu nedenle " killall"). Eğer PID'niz varsa (dan ps), bunun yerine elbette koşabilirsiniz .kill -KILL PID


Hafıza tükenirken program çekirdek tarafından öldürüldüğü için farklılaşabilir mi? (Bellek
yetersizliği
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.