ClamAV hält die Suchstrings unter Verwendung der klassischen String- (Boyer Moore) und regulären Ausdrucksalgorithmen (Aho Corasick). Als Algorithmen aus den 1970er Jahren sind sie extrem speichereffizient.
Das Problem ist die große Anzahl von Virensignaturen. Dies führt dazu, dass die Datenstrukturen der Algorithmen ziemlich groß werden.
Sie können diese Datenstrukturen nicht zum Austauschen senden, da auf Teile der Datenstrukturen der Algorithmen seltener zugegriffen wird als auf andere Teile. Wenn Sie Seiten davon zwingen, die Festplatte auszutauschen, werden sie einen Moment später referenziert und einfach wieder eingelagert. (Technisch gesehen sagen wir:„Der wahlfreie Zugriff auf die Datenstruktur zwingt die gesamte Datenstruktur dazu, sich im Arbeitsspeicher des Prozesses zu befinden ".)
Die Datenstrukturen werden benötigt, wenn Sie von der Befehlszeile oder von einem Daemon aus scannen.
Sie können nicht nur einen Teil der Virensignaturen verwenden, da Sie nicht auswählen können, welche Viren Ihnen gesendet werden, und daher nicht sagen können, welche Signaturen Sie benötigen.
Hier ist der Speicher, der auf einem 32-Bit-Rechner verwendet wird, auf dem Debian Wheezy läuft, und es ist clamd.
# ps_mem.py
Private + Shared = RAM used Program
281.7 MiB + 422.5 KiB = 282.1 MiB clamd
Bearbeiten:Ich sehe, dass jemand vorschlägt, die Resident-Set-Größe festzulegen. Wenn dies erfolgreich ist, führt eine Größe des residenten Satzes, die kleiner als die Größe des arbeitenden Satzes ist, dazu, dass der Prozess zum und vom Austauschen zerschmettert wird. Dadurch wird die gesamte Systemleistung erheblich verringert. Auf jeden Fall sagt die Linux-Handbuchseite für setrlimit(RLIMIT_RSS, ...), dass das Festlegen der residenten Satzgröße nicht mehr unterstützt wird und niemals Auswirkungen auf Prozesse hatte, die entschieden haben, madvise (MADV_WILLNEED, ...) nicht aufzurufen.
Diese Antwort ist nicht verifiziert und funktioniert möglicherweise nicht. Es beantwortet auch nicht, wie man die Speichernutzung reduziert, sondern wie man die Speichernutzung begrenzt, was etwas anders ist.
Sie können das ClamAV-Init-Skript (int/etc/init.d/
um den Befehl ulimit -m amountofram
hinzuzufügen . Es wird die Möglichkeit von ClamAV einschränken und Sie werden wahrscheinlich wechseln, was wahrscheinlich Ihr gesamtes System verlangsamen wird.
Ich bin auf ein ähnliches Problem gestoßen, als ich clamd auf einer kleinen Heim-NAS-Box mit nur 512 MB ausgeführt habe. Aus einer Umfrage im Internet geht hervor, dass es keine Möglichkeit gibt, die Speichernutzung zu reduzieren. Die Datenbank mit fiesen Dingen wird immer größer.
Es ist möglich, clamav so zu konfigurieren, dass es im Nicht-Daemon-Modus läuft, indem man "clamav" anstelle von "clamav-daemon" installiert. Dies kann Ihnen ermöglichen, die meiste Zeit über mehr Speicher zu verfügen. Wenn Sie Uploads scannen, wird immer ein großer Teil des Arbeitsspeichers benötigt.