Her saat başı değiş tokuşu boşaltan bir cron senaryosu oluşturmak kötü bir fikir midir?


26

Küçük Ubuntu konfigürasyonlarımda da aynı sorunu yaşıyorum: kullanılmış takas alanı zamanla artar. Bunun esasen, tahsis edilen hafızanın RAM'e geri dönmemesi nedeniyle, takasın devre dışı bırakılması gibi bir kullanıcı eylemi dışında, bunun için yeterli alan olmasına rağmen, bu izlenimi edindim.

Bunu cronotomatikleştirmek için kısa bir komut verdim ve iyi sonuçlar aldım:

#! /bin/sh

echo "* */1 * * * root swapoff -a && swapon -a" >> /etc/crontab

Ancak, bu soruna gerçek bir çözümden çok bir hile olduğu için, bunun kötü bir fikir olabileceğinin olası nedenlerini merak ediyorum ya da bu senaryoyu biraz daha akıllı hale getirmek için nasıl geliştirebilirim?


29
Cehaletimi bağışlayın, ama tam olarak ne demek istiyorsunuz SWAP alanı zamanla büyüyor ve tahsis edilen hafızanın RAM'ına boşalıyor ? Normalde, sisteme takas olarak biraz yer ayırır ve bir daha asla duymazsınız. Takasın ne kadarının gerçekten alındığı kimin umrunda? Sorun ne?
tatlı

5
Bunu neden yapmak istiyorsun? Neden takas kullanımının kötü bir şey olduğunu düşünüyorsunuz? Ne kadar takas kullanımından bahsediyoruz?
marcelm

25
Ben biraz şaşırdım. “Sorun” hakkında konuşmaya devam ediyorsun ama aslında herhangi bir türden olumsuz bir etki tanımlamıyorsun. Bunu neden bir problem olarak düşünüyorsunuz?
David Schwartz

17
Bir şey değiş tokuş ederse ve orada kalırsa, bunun nedeni hiçbir şeyin kullanmamasıdır. Hiçbir şey kullanıyor Ve eğer RAM şey için kullanılacak daha iyi olduğunu edilir takas veri geri ziyade, cache gibi erişti.
hobbs

12
Bunun takastan vazgeçmekten daha iyi nasıl olur?
user253751

Yanıtlar:


51

Bu şekilde kullanmak: evet, kötü. Takas kapatmadan önce yeterli bellek olup olmadığını kontrol etmeniz gerekir. Daha iyi bir sürüm için https://askubuntu.com/a/90399/15811 adresine bakın .

Ayrıca: bundan emin misin? Tahsis edilen takas, kullanılan takas anlamına gelmez. Komut vmstat, sütunlar si(takas) ve so(takas). Bunlar 0 kalırsa başka bir problemin olur. Tecrübelerime göre takas pek kullanılmıyor ve boşalmayacağını düşünerek kullanmıyor olabilirsiniz.


3
Bir dakika ne? Eğer swapoff'un başarılı olması için yeterli hafıza yoksa, swapoff ilk önce OOM katili tarafından öldürülecektir. Evet, aslında bunu kodladılar (sistem çağrısına göre kontrol ediyor).
Joshua

@Joshua emin ama otomatik çalışmasını istiyor. Hata değil.
Rinzwind

4
Kendi cevabımı yazmadan ilerlemek için zamanla artan takas kullanımı hiç de fena bir şey değil . Bunun anlamı, çekirdeğin yavaşça hangi bellek tüketen çöpün hiç kullanılmayacağını bulmak ve takas için hareket ettirmektir. Böylece bellek, gerçekten yardımcı olan şeyler için kullanılabilir (daha fazla veriyi saklamak gibi). onu atmaya devam etmek ve diskten yeniden okumak zorunda değildir).
R.,

@Rinzwind cron, hatalı işlerle iyi çalışır ve bağlantılı komut dosyası da kullanmaz vmstat.
jpaugh

41

Kötü bir fikir olduğunu söyleyebilirim. Boş hafızanız olduğunu ve etkin bir işlemin takas konumundan RAM’e taşınmayacağını düşünüyorsanız, o zaman ya da sandığınız kadar boş hafızaya sahip değilsiniz veya işlem sandığınız kadar etkin değil olduğunu.

Aktif bir işlem değişmeye devam ederse, hafıza üzerinde baskıya neden olan şeyi düzeltmelisiniz. Aktif bir işlem değilse, sorun ne?


1
+1: Önemli olan ne? Çalışan bir sistemi hiçbir zaman değiştirmeyin , birinin sistemin bu gibi temel işlevleriyle uğraşması gerektiğini, özellikle de gerek duyulmayacağını düşünmüyorum.
tatlı

3
Bazen, bellek sızıntısı olan (her şeyi değiştirmeye zorlayan) bir işlemi öldürdüğüm, beni ~% 10 RAM kullandığı halde bırakıyorum, ama çalışan tüm programlar yeniden erişene kadar takas yapıyor. Yani bir şeye her dokunduğunda, iki saniyelik bir gecikme var. OP'nin nereden geldiğini görebiliyorum ve otomatik olarak yapılması iyi olurdu, ama bu doğru yol değil.
Başka birileri

1
@BirisiSomewhere Ama yine de, nasıl çalıştığını değil. Süreç hafıza sızdırıyorsa, tanım gereği, aktif olarak bu belleği kullanmıyordur (okuma ve yazma değildir); Sadece kazayla tahsis etti. Etrafında başka aktif işlemler varsa, sızan bellek değişecek ve fiziksel RAM'iniz değil, çöple dolu takasınız olacaktır.
David Richerby

@DavidRicherby Arka planda açık bir programınız varsa, o zaman bu program bellek sızıntısından daha az etkindir - ve programa geri döndüğünüzde, takasın çıkması gerekir.
Birisi bir yerde

@BirisiBaşka Biri Bellek sisteminin nasıl çalıştığını yanlış anladınız. Bir sürecin tamamını fiziksel RAM'de yapmak zorunda değilsiniz: takas, tek sayfaların ayrıntı derecesinde yönetilir. Bir süredir kullanılmayan herhangi bir sayfa değiştirilmekten sorumludur ve tamamen sızdırılmış bellekten oluşan bir sayfa bir daha asla kullanılmayacaktır, bu yüzden değiştirildikten sonra tekrar değiştirilmeyecektir.
David Richerby

34

Bu kötü bir fikir.

Çekirdek, fiziksel belleğin dolmadan çok uzun süre önce takas edilmesi için verileri kopyalamaya (hareket etmemeye) başlar, çünkü bazı işlemler çok fazla bellek gerektiriyorsa, takasta zaten geçerli bir kopyası olan herhangi bir sayfa başka bir yazı gerektirmeden hemen yeniden kullanılabilir diske.

Genelde bu, uzun süredir erişilmeyen sayfalar için olur; bu, yakında erişilmelerinin muhtemel olmadığının iyi bir göstergesidir.

Kopyaları açıkça atarsanız, bu hiçbir fayda getirmez, çünkü veriler hala RAM'de bulunur, ancak bazı işlemler çok fazla bellek ayırmak ve takas etmek gerektiğinde hızınıza mal olabilir.

Çekirdek ayrıca, fiziksel bellek% 50'nin üzerinde olduğu anda her zaman takas alanı kullanacaktır, bu nedenle yeterli bellek takılsa bile bu numaralar sıfır olmayacaktır.


4
her zaman : Sanırım /proc/sys/vm/swappiness, bunun varsayılan değerinde bırakıldığını varsayıyorsunuz ki bu , 70sunucular için iyidir ve bir süredir kendilerine dokunmayan işlemlerden kirli sayfaları daha agresif bir şekilde sayfalandırır. Alt-tab yavaşlayabilir, çünkü bu genellikle masaüstleri için kötü.
Peter Cordes

@PeterCordes, eğer sayfalar gerçekten tahliye edildiyse, önbellekler söz konusu uygulama sayfalarından daha fazla erişim görmüştür, bu yüzden bunları disk önbellekleri olarak kullanmanın bir faydası olmuştur. Alt-Tab performansının, kullanıcılar için örneğin büyük bir projenin derlenme zamanından daha görünür olduğunu görebiliyorum, ancak çok fazla performanstan ödün vermeden anında yanıt sağlayan bir politikayı formüle etmek zor.
Simon Richter

1
Başka bir deyişle: Çekirdek ( swappiness=70) için ayarlanmış , ancak gecikme bir masaüstünde kullanıcı deneyimi için daha önemlidir. Bu bir tradeoff. Sayfada kalmayacak kadar büyük olan şeyleri rutin olarak derlerseniz, emin olun, swappiness5 veya 10 yerine 20 veya 30 gibi biraz daha yüksek bırakın . Ayrıca bkz. Akitaonrails.com yavaş bilgisayarlar . vm.vfs_cache_pressure100'den küçük görmek ayrıca inode / dizin meta verilerini veri sayfalarında önbelleğe almayı da destekler, bu da kullanıcı arabirimi yanıtı için iyidir.
Peter Cordes

1
Diğer ayarlanabilirler: geri yazma eşikleri lonesysadmin.net/2013/12/22/… . Bunlar, Linux dosyalara bir şey yazdıktan sonra diske ne kadar hızlı yazmaya başladığını ve kaç tane kirli sayfaya izin verildiğini kontrol eder. (yani yazma önbelleğe alma konusunda ne kadar bellek harcanabilir)
Peter Cordes

21

Bu kötü bir fikir. Bu yararlı olsaydı, Linux çekirdeği bu şekilde uygulardı. Birkaç ayar parametresinden daha fazlasını değiştirmek için bir neden olduğuna inanmıyorum, çünkü basit bir kabuk betiği büyük olasılıkla çekirdek geliştiricilerin algoritmalarından daha zeki değildir.

Temelde iki durum var:

  • Değişim uzayındaki işlemler yine de kullanılmaz. Neden onları tekrar RAM'e çekmek istiyorsun?
  • Çok az RAM vardır, bu yüzden değiştirilirler ve tekrar RAM'e çekersiniz. O zaman sisteminiz onları mümkün olan en kısa sürede tekrar takas ettirir.

Yani iki ana nokta var:

  1. İlk olarak, tüm programlarınızı bir kerede çalıştırmak için çok az RAM olduğunda sisteminiz yavaş olacaktır. Değiştirme, daha fazla program çalıştırmanıza yardımcı olur, ancak nadiren kullanılan programlara hızlı bir şekilde geçiş yapmanıza gerek kalmayabilir; Hiçbir takas nadiren kullanılan kişinin ölümüne neden olamaz ya da kullanılmış olanı bellek dışı bir istisna gönderemez.
  2. İkincisi, takas yapmak iyi bir şeydir ve takasta bir şeyler olması nedeniyle, halihazırda kullanmadığınız programların maliyeti konusunda ücretsiz RAM’iniz vardır.

Çok fazla programda yetersiz bellek sorunu yaşamamasına rağmen, bazı programlar şu anda ücretsiz olan RAM'e dayalı olarak bellek ayırabilir (belki tarayıcınız daha fazla memcache kullanır ve daha hızlı göz atabilirsiniz) ve çekirdek disk önbelleğe almak için boş RAM kullanabilir ve benzer optimizasyonlar. Takas alanınızı boş bırakmaya zorladığınızda, çekirdek okuma önbelleğini düşürür ve örneğin yeni bir Firefox örneği başlatmak, Firefox'un hala disk önbelleğindeki zamandan daha uzun sürer.

Çekirdeğin davranışını ayarlamak istiyorsanız, bkz. swappiness parametresine bakın .

İki ek kaynak @ peter-cordes'e katkıda bulunuyor:

Eğer gerçekten boş bir takas yapmak istiyorsanız, takas uygulamasını kalıcı olarak kapatabilirsiniz. Neden bir saat boyunca açık tutulduğunu ve sonra boşaltmanın, takas yapmamaktan daha avantajlı olduğunu anlamıyorum.



5

Çekirdeğe önbellekleri serbest bırakmasını söyleyerek aynı sonuçları elde edebilirsiniz:

echo 3 > /proc/sys/vm/drop_caches

Bu şekilde, kısa süreli olası hafıza açlığı anından kaçınır ve neyin gerekli olduğuna ve neyin atılacağına karar vermeden çekirdeği bırakabilirsiniz.


0

Ortak fikrin aksine SWAP kendi içinde fena değil . Sisteminizi
gerçekte yavaşlatan şey, Verileri RAM'den SWAP'a ve RAM'e geri götüren çekirdek etkinliğidir swappiness.
Sistem bunu, ile yapılandırıldığı gibi otomatik olarak yapar swappiness.
Bu, aktif olmayan işlemlerden gelen Hafızanın Sabit Disk Değiştirme Bölümüne atılmasını sağlar.
Yıllar boyunca çok fazla RAM Belleği olmayan bir Makine ile çalıştım ve hep SWAP Belleği kullandım. Yine de, belki açık bir uygulamayı kapatmaya çalışarak belleği tekrar RAM'e taşımaya başlayana kadar makinem iyi çalıştı. Ardından İş Yükü artmaya başladı.

  • Bu nedenle, sürekli olarak temizleyerek, Belleği Takas Ederseniz makinenizdeki İş Yükü önemli ölçüde artacaktır.
  • SWAP Bölümünde Belleği olan Uygulamaları Çalıştırmak yürütmelerinde bozulmalara neden olabilir.

Aksine, hangi uygulamanın uygulama ile komut satırında hafızanızı kullandığını htopyakından incelemenizi ve bir Uygulamayı kapatmaya karar vermenizi öneririm . gnome-system-monitorOnun Süreci-Sekmesinde, sıra size iyi fikir verebilir.
Çok miktarda RAM kullanan büyük uygulamalarınız varsa. Hepsini bir kerede çalıştırmayın.

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.