Red Hat Linux neden sistemde mevcut olandan daha az boş bellek bildiriyor?


9

Nispeten küçük bir ev Red Hat Linux sunucum var (yaklaşık 8 GB RAM). Çeşitli şeyleri takip etmek için evde yetiştirilen bazı uygulamaları çalıştırmaktan başka bir şey için kullanmıyorum. Kutu üzerinde çalışan tek gerçek şey bir veritabanı ve bir web sunucusudur.

NMON ve TOP gibi araçları kullanarak sistem sayaçlarını kontrol ederken, toplam sistem boş belleğinin nispeten düşük olduğunu (birkaç yüz MB civarında), veritabanı ve web sunucusu için etkin bellek hala düşükken (sadece kombine 3 GB tüketen). Çalışan tüm işlemleri dahil ederken bile toplam tüketilen bellek 4 GB'den azdır.

Red Hat Linux neden çalışan bellekten toplam kullanılan bellek toplamının toplam işlem belleğinden daha az boş bellek bildirdi?

Yanıtlar:


19

Boş belleği, kullanılmayan bellekle karıştırmayın. Boş bellek, unix dünyasında, eşlenmiş hiçbir mantıksal veri bulunmayan bir fiziksel bellek sayfasıdır. Kullanılmayan bellekte bazı veriler eşleştirilir, ancak şu anda çalışan bir işlem tarafından etkin kullanımda değildir .

% free -m
             total       used       free     shared    buffers     cached
Mem:           997        942         55          0         71        366
-/+ buffers/cache:        504        492
Swap:         2015        618       1397

Linux (ve tüm Unix OS'ler) mümkün olduğunca az boş hafızaya sahip olmaya çalışır. Bunun yerine, çeşitli IO aktarım işlemleri için dosya önbelleği ve arabellekler gibi şeyler için çalışan işletim sistemindeki işlemlerle etkin olarak eşlenmeyen belleği kullanırlar.

Kafa karıştırıcı olabilecek başka bir şey, kullanımda olan toplam belleği elde etmek için çalışan tüm işlemler tarafından kullanılan belleği toplayamazsınız. Bunu denediyseniz, uygulamalarınızın makinede gerçekte olduğundan daha fazla bellek kullandığını çabucak keşfedersiniz. Bu iki nedenden dolayı

  1. Bellek, Yazarken Kopyala bellek ayırma, bellek eşlemeli G / Ç ve paylaşılan dinamik kütüphaneler aracılığıyla çeşitli işlemler arasında paylaşılabilir .
  2. İşletim sistemi, uygulamaya gerçekte sağlandığından daha fazla bellek vaat etme özgürlüğüne sahiptir. Teori, çoğu uygulama yazarının tek seferde büyük miktarlarda bellek istemeyi tercih etmesidir, ek yükü önlemek için ve aslında tüm bu belleği kullanamayabilir.

Lwn.net'te bu konuyu tartışan yeni bir makale var .


1
Burada basit bir açıklama da verilmiştir: linuxatemyram.com
Steven T. Snyder

4

Linux, daha hızlı disk erişim süreleri sağlamak için dosya sistemine erişimleri aktif olarak önbelleğe alır. Endişelenecek bir şey yok.

Kutuda free -m çalıştırmak, belleğin nerede kullanıldığı hakkında daha iyi bir fikir verecektir.

Aşağıda kutularımdan birinden çıkan çıktı. Ücretsiz bellek 147Meg'dir ve dosya sistemi erişim istekleri için neredeyse 4G önbelleğe alınır.

free -m
             total       used       free     shared    buffers     cached
Mem:          6035       5888        147          0         77       4116
-/+ buffers/cache:       1693       4341
Swap:         4722          0       4722

1

Ayrıca "arabelleğe alınmış" ve "önbelleğe alınmış" alanları da dahil ediyor musunuz?


1

Linux ile, / proc / meminfo'daki Comended_AS'a bakın, bu, çekirdeğin gerçekte işlemlere vaat ettiği bellek miktarıdır (gerçek + takas).

Linux belleği çok verimli kullanır, bazı işlemlere söz vermeyen tüm bloklar son zamanlarda / sık erişilen dosyaları önbelleğe almak için kullanılır. Bu nedenle, Linux'un önyüklemeden kısa bir süre sonra kullanılabilir tüm fiziksel belleğin% 90'ını kullanması tipiktir.

Çekirdeğin .. ve kirli (takas) kullanımı sağlamaya kendini adamış olduğuna bakın, bu size daha iyi bir genel resim verir.

Bu davranışı ayarlamanız gerekiyorsa, lütfen sorunuzu güncelleyin :)

Bu Linux için standart MO .. bazı dağıtımlar sysctl aracılığıyla ihtiyaçlarına uygun bellek yönetimi tweak. Bununla birlikte, rapor ettiğiniz şey herkes arasında oldukça tipiktir.


1

Sistemde ne tür bir çekirdek kullanıyorsunuz? 32 bit çekirdek, PAE etkin olarak derlenmedikçe yalnızca 3,6 GB bellek bildirir.

Bu, Redhat Enterprise Linux'un (veya CentOS) - v3'ten sonraki modern bir sürümü ise, varsayılan 32 bit çekirdeğin bunu etkinleştireceğini varsayar.

Yukarıda açıklanan 'free' komutunun çıktısını gönderebiliyorsanız, sorunun bu olup olmadığını görebileceğiz.

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.