Tek bir işlemi askıya alın / devam ettirin


22

Bazen, diğer işlerde RAM'in birazını boşaltmak için Ubuntu ve OS X sunucularımızdaki yoğun bellek gerektiren işlemleri askıya almak istiyoruz. Tek endişe ettiğimiz şey CPU kullanımı Ctrl-Zolsaydı , basit bir işe yarardı. Bununla birlikte, RAM'i boşaltabilir (diske yazarak) ve ardından işlemi yeniden başlatabiliriz (disk -> RAM) veya başka bir deyişle tek bir işlemi "hazırda bekletme". Bunun nasıl yapılacağı hakkında herhangi bir ipucu var mı? (Tercihen CLI'den.) Teşekkürler.


7
Bir işlem askıya alınmış bir durumdayken, kullanılan hafızasının, gerekirse, diske yerleştirilmiş bir aday olduğunu ve bunun çekirdekten otomatik olarak yapılması gerektiğini varsayalım.
enzotib

1
@enzotib - Bunun meydana gelip gelmediği hakkında hiçbir fikrim yok ve teoride bu kulağa hoş geliyor. Ancak, sadece zor bir test yaptım ve pratikte işe yaramadı. 'RAM yiyenler' askıya alındığında ortaya çıkan yeni işlemler son derece halsiz ve RAM diske aktarılırsa beklenebilecek herhangi bir disk aktivitesi algılamıyorum.
Mike Covington

1
@frozenwithjoy Bunun olduğunu onaylayabilirim. Askıya alınmış bir sürecin yavaş yavaş değiştirilemeyeceğini düşünebilmemin tek nedeni, değiştirilemeyen bellek (çok nadir ve (çoğunlukla) root için ayrılmış) talep edilmesi veya eşleştirdiği belleğin başka bir aktif işlemle paylaşılmasıdır. .
Gilles 'SO- kötülük yapmayı bırak'

1
Burada yardımcı olabilecek bir terim "denetim noktası" dır (evet, çirkin bir fiil formu). Bu genellikle zor bir problemdir çünkü program uykudayken durumu değiştirebilecek bazı kaynaklar kullanıyor olabilir. Bu sorunu yönetmek eskiden Big Iron ile küçük bilgisayarlardan oluşan ayrımlardan biriydi.
dmckee

Yanıtlar:


8

Tek bir işlemi kış uykusuna yatabilmek için genel bir tesis yoktur, sadece tüm sistem.

Bununla birlikte, işlem görüntüsünün bir yeniden başlatma işleminde hayatta kalmasını önemsemiyorsanız, işlem görüntüsünü diske kaydetmek için yerleşik bir tesis vardır: takas. Yeterli değişim alanına sahip olduğunuzdan emin olun ve hafıza basıncı varsa ve işlem aktif değilse (örneğin askıya alındığından), hafızası değiştirilecektir.

Sürecin uzun süre etkin olmayacağını ve belirli bir noktada hızlı bir yanıt süresine ihtiyaç duyacağınızı biliyorsanız, bir bölgeye çok miktarda RAM ayırarak çok fazla RAM boşaltabilirsiniz. kısa süreli süreç, örneğin

perl -e '$tmp = "a" x 999999999' # allocate about 1GB

Neyin değişip değişmediğine dair hiçbir kontrol elde edemezsiniz, bu nedenle diğer işlemler değişebilir. Linux'ta, eşleştiği sayfalara zorla erişerek bir işlemi geri alabilirsiniz. Komut dosyası Bu yanıt yapacak: belleğe bir işlemle eşlenen tüm sayfaları yükü (not bu açık dosyaları içerdiğini; size ihtiyacı olmaz biliyorum verilerinde takas önlemek için seçici harita bilgilere dayanarak bölgeleri geçebilirler , daha fazla bilgi için bu cevaba bakınız ).



5

Bol miktarda takas alanınız olduğundan emin olun. Sisteminizin etkin olmayan sayfaları değiştirmeyi tercih edecek şekilde ayarlandığından emin olun ( vm.swappiness = 100 ). O zaman süreci askıya almak yeterli olacaktır. Çekirdek etkin olmayan sayfaları çıkarmayı tercih eder.


-1

Mac OS X'te, purgebazı (etkin olmayan) RAM'leri boşaltmak için komutu (Xcode ile birlikte verilir) kullanmayı deneyebilirsiniz .

vm_stat
purge
vm_stat

2
purgeburada yardımcı olmaz. Disk önbelleğini kaldırır, ancak işlem belleğinin değiştirilmesine neden olmaz ve başka bir işlemin RAM almasını hızlandırmaz.
Gilles 'SO- kötü olmayı'
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.