Linux ve Swap alanlarındaki sürekli artan takas boyutu geri kazanılmıyor mu?


10

4 Tomcat sunucusunun çalıştığı 8GB RAM linux kutum var. Bunlardan biri 3000MB belleğe (jvm -Xms ve -Xmx ayarı), diğerleri ise 1500MB olarak ayarlanmıştır. Takas bölümü de 8Gig olarak ayarlanmıştır. Bu sunucuları başlattığımda takas dosyası kullanımı düşük. Ancak günler boyunca ve sunuculardan birinin / tümünün en yoğun faaliyette olduğu belirli zamanlarda takas kullanımı artmaya başlar. İşte tipik bir sar-r çıktısı.

kbmemfree kbmemused% memused kbbuffers kbcached kbswpfree kbswpused % swpused kbswpcad

48260 8125832 99,41 196440 2761852 7197688 1190912 14.20 316044

75504 8098588 99.08 198032 2399460 7197688 1190912 14.20 316032

Şu anda kullanılan% 14.2 swapı göstermektedir. Komik olan şey bu% ASLA azalmaz . % 30-40'a kadar artmaya ve ulaşmaya devam ediyor . Sunucularımızı haftalık olarak yeniden başlatıyoruz.

Ben swp%% tepe aktivite dönemlerinde artış ve düşük aktivite dönemlerinde azalma varsayıyorum varsayalım .. Ya da en azından sabit kalır. Bu takas alanı asla işletim sistemi tarafından geri kazanılmış gibi görünüyor.

Serbest çıktı: serbest -m toplam kullanılmış serbest paylaşılan tamponlar önbelleğe alınan Mem: 7982 7937 45 0 32 2088 - / + tamponlar / önbellek: 5816 2166 Takas: 8191 1163 7028

Yani en az 2 g serbest Ram var. Öyleyse soru şudur: Takas alanı neden artmaya devam ediyor ve işletim sistemi tarafından geri kazanılmıyor? Ya da ne olduğunu anlamak için bu hata ayıklama ..

Yanıtlar:


12

Bilgi diske gönderilir ve daha sonra tekrar belleğe okunursa, takas alanı azalıncaya kadar genellikle takas alanında ayrılır. Bu, aynı bilgilerin daha sonra tekrar değiştirilmesi gerekiyorsa ve değişmediyse, işletim sisteminin disk tasarrufu zamanına herhangi bir şey yazmaya gerek kalmadan sayfaları ayrılmış RAM'den bırakabileceği anlamına gelir.

Belleğe geri okunan öğelere tahsis edilen takas serbest bırakılacak

  1. Alakalı sayfalara artık ihtiyaç duyulmadığında (yani uygulama tarafından serbest bırakıldığında)
  2. ilgili sayfalar değiştirildiğinde (böylece diskteki kopya artık güncel değildir)
  3. makine takas alanında az çalışıyor, bu nedenle yer açmak için zaten RAM'de olan bazı şeyleri temizliyor

/proc/meminfo"SwapCached" adlı bir satır arayın . Bu giriş, hem RAM'de hem de takas bölümlerinde bulunan sayfaları sayar. Örneğin, rastgele küçük bir VM seçerek, VM'lerimden /proc/meminfobiri olan sanal dosya şunları gösterir:

SwapTotal:        698816 kB
SwapFree:         624520 kB
SwapCached:        17232 kB

74268K takas alanı tahsis edildiğini, ancak bu sayfaların 17232K değerinde de şu anda RAM'e de eşlendiğini gösterir (bu, alan başka bir şey tarafından ihtiyaç duyulursa, bir an önce takastan çıkarılabilir).

Ayrıca şüphe yok ki orada oturdu sayfalar eskiden takas edildi ve o zamandan beri tekrar kullanılmadı. Çekirdek, yalnızca RAM'in önbellek veya arabellekler için daha iyi kullanılabileceği için yeniden okunacak bazı boş RAM olduğu için sayfaları takastan yeniden yüklemez - takas için yazılan sayfalar genellikle yalnızca bir sonraki ihtiyaç duyulduğunda tekrar okunur.

Eğer takasta ne olduğunu temizlemek için, yeterli boş ve / veya serbest kaldığınız sürece (yani, ücretsiz + önbellek + arabellekleri (c + b sayımlarının serbest bırakılamayan kısımlarından daha az)), sadece çevirin ile tekrar ve tekrar aç swapoff -a && swapon -a.

Tabii ki bir yerlerde de bir bellek sızıntısı olabilir, ancak gördüğünüz davranış için tek açıklama bu değildir.


Mükemmel cevap.Teşekkürler. Yani benim sistem şu anda SwapTotal gösterir: 8388600 kB SwapFree: 7197688 kB SwapCached: 595724 kB Yani Gerçek Swap Ücretsiz = 7197688 + 595724 = 7793412. Actul Swap Kullanılan = 8388600 - 7793412 = 595188 == 581MB. 4 uygulama çalışan bir 8GB sistem için 581MB takas dosyası kullanımı makul sanırım. Bunu önümüzdeki birkaç gün boyunca izleyeyim ve swapCached figürünün% swapUsed ile orantılı olarak artmaya devam edip etmediğini göreyim.
Zenil

2

Temel olarak, bunu önemsemenize gerek yok. Bilmeniz gereken önemli olan IO'nun swap'a ne kadar gittiğidir ('vmstat' komutuna bakın). Takasta daha fazla şey olması hiçbir şeye mal olmaz. Tek maliyet, swap (sayfa içeri) içine şeyler koymak veya dışarı çıkarmak (sayfa dışarı). Bu yüzden işletim sisteminin takasın büyümesine izin vermesi mükemmel bir nedendir.


1
Takasın neden büyüdüğünü ve asla azalmadığını bilmek önemlidir .. Sunucularımızın haftalarca çalışmaya devam etmesine izin verirsek ne olur? Takas sınırın ötesine geçecek ve hafıza sorunlarına neden olacak mı? Swapin / swapout "makul" görünüyor. En yoğun aktivite dönemlerinde yüksek swapin / swapout (ve ayrıca swapused artışların yüzdesi) vardır. Normal dönemlerde swapin / swapout minimumdur, ancak swapused% azalmaz
Zenil

0

takas alanınız olduğu sürece, işletim sisteminin takas alanı boşaltmasına gerek yoktur. Boş alan kalmadığında serbest bırakılacaktır. Bu durumda, kesinlikle bir sorun var.


0

Bir sunucuyu sorun olup olmadığını görmek için yeterince uzun çalıştırmazsanız, bunun bir sorun haline gelip gelmeyeceğini anlamanın bir yolu yoktur.

Temel olarak işletim sistemi, yeni bir programın başlatılması durumunda hafızayı her zaman boş tutmak için kullanılmayan şeyleri değiştirir. Takas alanı gerekli olana kadar serbest bırakılmaz, yani% 100 takas alanınız olabilir ve performans sorunu yaşayabilirsiniz. Endişelenilecek şey, bunun bir bellek sızıntısından kaynaklanıp kaynaklanmadığıdır. Mutlaka bir bellek sızıntısı değildir, ancak olabilir.

Java, bellek sızıntılarına eğilimli değildir, ancak özellikle karmaşık uygulamalarda olabilir.

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.