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, ...).