ClamAV bellek kullanımı nasıl azaltılır?


26

512 MB VPS'de Ubuntu tabanlı bir web sunucusu (Apache, MySQL) kullanıyorum. Bu, çalıştığı web sitesi için fazlasıyla yeterli (küçük forum).

Virüslere karşı koruma sağlamak istediğim için ClamAV'ı yükledim ve yüklenen dosyaları yükleme işleme komut dosyasının (PHP) bir parçası olarak taramak için kullandım.

Clamav-daemon hizmetini kullanıyorum, bu nedenle tanımların her dosya tarandığında yüklenmesi gerekmez. Bu uygulamanın bir dezavantajı, clamav-daemon servisi tarafından kullanılan "büyük" bellek miktarı gibi görünüyor:> 200 MB. Bu, hizmetin durmaya zorlanması ve yüklemelerin reddedilmesiyle sonuçlandı.

VPS hafızasını 1024 MB'a yükseltebilirim, ancak örneğin istenmeyen tanımlamalar yüklemeyerek ClamAV'ın bellek kullanımını azaltmanın bir yolu olup olmadığını bilmek istiyorum.

Yanıtlar:


15

ClamAV, klasik dize (Boyer Moore) ve düzenli ifade (Aho Corasick) algoritmaları kullanarak arama dizelerini tutar. 1970'lerden algoritmalar olduğu için onlar tamamen hafıza açısından verimlidirler.

Sorun, çok sayıda virüs imzasıdır. Bu, algoritmaların veri yapılarının oldukça genişlemesine yol açar.

Bu veri yapılarını değiş tokuş etmek için gönderemezsiniz, çünkü algoritmaların veri yapılarının diğer bölümlerden daha az erişilen bölümleri yoktur. Sayfalarını diski takas etmeye zorlarsanız, birkaç dakika sonra başvuruda bulunacaklar ve sadece doğrudan takas edeceklerdir. (Teknik olarak "veri yapısının rasgele erişimi, tüm veri yapısını işlemin çalışma hafızasında olmaya zorlar." ".)

Komut satırından veya bir servisten tarıyorsanız, veri yapılarına ihtiyaç vardır.

Hangi virüslerin gönderileceğini seçemediğiniz için virüs imzalarının yalnızca bir bölümünü kullanamazsınız ve böylece hangi imzalara ihtiyacınız olacağını söyleyemezsiniz.

İşte Debian Wheezy çalıştıran 32 bit bir makinede kullanılan bellek.

# ps_mem.py 
 Private  +   Shared  =  RAM used   Program
281.7 MiB + 422.5 KiB = 282.1 MiB   clamd

Düzenleme: Birinin yerleşik set boyutunu ayarlamayı önerdiğini görüyorum. Bu başarılı olursa, yerleşik set büyüklüğünün çalışma set büyüklüğünden daha az olması, takas işleminden geçip çıkma sürecine yol açacaktır. Bu, tüm sistem performansını önemli ölçüde düşürür. Her durumda setrlimit için Linux kılavuz sayfası (RLIMIT_RSS, ...), yerleşik set büyüklüğünün ayarlanmasının artık desteklenmediğini ve hiçbir zaman madvise çağırmamayı seçen süreçler üzerinde hiçbir etkisinin olmadığını söylüyor (MADV_WILLNEED, ...).


1

Ben sadece 512 MB ile küçük bir ev NAS kutusunda istiridye çalıştıran benzer bir sorun çarptı. İnternetteki bir anket araştırmasından, bellek kullanımını azaltmanın bir yolu olmadığı görülüyor. Kötü şeylerin veri tabanı daha da büyüyor.

Clamav'ın "clamav-daemon" yerine "clamav" yükleyerek arka plan dışı modda çalışacak şekilde yapılandırılması mümkündür. Bu, çoğu zaman daha fazla belleğe sahip olmanıza izin verebilir. Yüklemeleri tararken her zaman büyük miktarda RAM'e ihtiyaç duyacak.


1
Bu yaklaşımın asıl olumsuz yönü, taramanın daha uzun sürmesidir. Bir dosya her yüklendiğinde, tarama yapılmadan önce veritabanının yüklenmesi gerekir. Kullanıcı için hızlı bir yanıt almak istiyorsanız db'nin yüklenmesi çok değerli dakikalar alır. Ayrıca, birden fazla yükleme aynı anda işlendiğinde, daha fazla RAM kullanımıyla sonuçlanan veritabanını yükleyen birden fazla iş parçacığınız olacaktır. Dolayısıyla daemon kullanımı. Benim çözümüm VPS hizmetimi yükseltmek ve fazladan RAM için aylık 5 USD ödeyerek oldu. Bu maliyet artışıyla yaşayabilirim :)
Niels R.

1

Bu cevap doğrulanmadı ve çalışmayabilir. Ayrıca, bellek kullanımını nasıl azaltacağınıza değil, biraz daha farklı olan bellek kullanımını nasıl sınırlayacağınıza cevap vermiyor.


ClamAV init betiğini düzenleyebilirsiniz ( /etc/init.d/komutu eklemek int ulimit -m amountofram.
ClamAV olasılığını sınırlandırır ve muhtemelen tüm sisteminizi yavaşlatacak şekilde değiştirirsiniz).

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.