Ich verwende SpamAssassin unter Debian (die Standardkonfiguration mit Pyzor, AWL und Bayes ist deaktiviert und Sa-Compile ist aktiviert), und jeder der untergeordneten Spam-Prozesse belegt ungefähr 100 bis 150 MB Speicher (ungefähr 50 MB realer Speicher) auf dem 32 Bit-Server und etwa doppelt so viel (logischerweise) auf den 64-Bit-Servern. In der Regel gibt es zwei untergeordnete Prozesse, in Stoßzeiten können jedoch maximal fünf ausgeführt werden.
ISTM, dass 200 bis 600 MB viel Speicher für diese Aufgabe ist. Ich möchte SA weiterhin als Teil meiner Filterstruktur verwenden, aber es wird schwierig, so viel Speicher zu rechtfertigen.
Gibt es Möglichkeiten, den Speicherbedarf der einzelnen untergeordneten Prozesse zu verringern? (Oder machen Sie alternativ einen einzelnen untergeordneten Prozess so schnell, dass ich die maximale Anzahl untergeordneter Elemente auf 2 festlegen kann?). Ich bin bereit, alle Optionen in Betracht zu ziehen, einschließlich solcher, die zu einer verminderten Genauigkeit führen oder führen können.
Ich habe bereits die Seite "Out of Memory Problems" im SA-Wiki gelesen . da nützt nichts. Nachrichten, die größer als 5 MB sind, werden mit SA nicht gescannt.
quelle
Antworten:
Ich glaube, Sie verstehen falsch, wie Linux die Speichernutzung meldet. Wenn sich ein Prozess teilt, führt dies zu einem zweiten Prozess, der viele Ressourcen mit dem ursprünglichen Prozess teilt. Darin enthalten ist Speicher. Linux verwendet hierfür jedoch eine Technik, die als Copy On Write (COW) bezeichnet wird. Dies bedeutet, dass für jeden untergeordneten Zweigprozess dieselben Daten im Speicher angezeigt werden wie für den ursprünglichen Prozess. Wenn sich diese Daten jedoch ändern (durch das untergeordnete oder übergeordnete Element), werden die Änderungen kopiert und zeigen nur dann auf einen neuen Speicherort.
Bis einer der Prozesse Änderungen an diesen Daten vornimmt, verwenden sie dieselbe Kopie gemeinsam. Infolgedessen könnte ich einen Prozess haben, der 100 MB RAM verwendet, und es 10-mal gabeln. Jeder dieser gespaltenen Prozesse würde 100 MB RAM verbrauchen. Wenn Sie sich jedoch die Gesamtspeicherauslastung der Box ansehen, wird möglicherweise nur 130 MB RAM verbraucht (100 MB werden von den Prozessen gemeinsam genutzt, plus ein paar MB Overhead plus ein weiteres Dutzend MB oder zwei für den Rest des Systems).
Als letztes Beispiel habe ich momentan eine Box mit 30 laufenden Apache-Prozessen. Jeder Prozess belegt 22 MB RAM. Wenn ich jedoch free -m ausführe , um meine gesamte RAM-Auslastung anzuzeigen, erhalte ich:
Wie Sie sehen, verfügt diese Box nicht über genügend RAM, um 30 Prozesse auszuführen, die jeweils 18 MB "echten" RAM verwendeten. Wenn Ihnen nicht buchstäblich der Arbeitsspeicher ausgeht oder Ihre Apps stark wechseln, würde ich mir keine Sorgen machen.
UPDATE: Schauen Sie sich auch dieses Tool namens smem an , das von jldugger in der Antwort auf eine andere Frage zur Speichernutzung unter Linux hier erwähnt wurde .
quelle
Mit sa-compile können Sie möglicherweise die Übereinstimmungsgeschwindigkeit vieler Regeln verbessern.
quelle
Folgendes habe ich getan.
Ich habe eine Einrichtung, in der viele Nachrichten ungefähr gleichzeitig zugestellt werden. Für eine Reihe von Experimenten führe ich SA für Nachrichten aus, die auf einen temporären Spool kopiert und dann alle fünf Minuten von einem Cron-Job zugestellt werden.
spamd
Ich würde weiter drucken "Vielleicht sollten Sie den Parameter max-children erhöhen", und ich ließ ihn an einem Punkt auf 40 erhöhen, aber der Server verbrauchte all seinen Auslagerungsspeicher und stürzte ab.Jetzt habe ich ein anderes Regime implementiert, bei dem die Zustellung durch eine Procmail-Sperrdatei gesteuert wird. Da dies einfach zu bewerkstelligen war, verwende ich nur die letzte Ziffer der Prozess-ID und starte mit 10 Kindern. Ich bin mir nicht sicher, ob dies optimal ist, aber es hat bereits dazu beigetragen, die wahnsinnigen Belastungsspitzen zu vermeiden, die ich von Zeit zu Zeit erlebt habe.
Außerdem starte ich
spamd
mit einigenulimit
Einschränkungen. Die Nummern wurden aus http://svn.apache.org/repos/asf/spamassassin/trunk/contrib/run-masses entfernt, außer ich habe dieulimit -u
Einschränkung aufgehoben. (Ich bin mir nicht sicher, was los ist. 32 ist auf jeden Fall viel zu klein. Mit so etwas wie 500 könnte ichspamd
eine Weile weitermachen , aber irgendwann bis zum Limit.)Ich schätze, ich werde mit Auslieferungsfehlern enden, wenn die Last für längere Zeit zu hoch ist, aber bisher scheint es mir gelungen zu sein, die Last auf ein handhabbares Maß zu reduzieren. und ein Haufen fehlgeschlagener Lieferungen ist immer noch viel besser, als wenn die Maschine keinen Swap mehr hat.
quelle
Hochlastdurchschnitte sind (manchmal) ein indirektes Symptom dafür, dass auf Ihrem Computer nicht genügend RAM zur Verfügung steht (und viele CPU-Auslagerungsprozesse vom virtuellen Speicher aus ausgeführt werden). Sie können also versuchen, Ihren Mailserver so zu konfigurieren, dass keine E-Mails über SpamAssassin weitergeleitet werden Lastmittelwerte sind zu hoch.
Sie erwähnen nicht, welchen MTA Sie ausführen, aber wenn Sie SA über eine Zugriffssteuerungsliste in exim4 aufrufen, ist der Vorschlag am Ende dieser Nachricht wirksam.
Außerdem können Sie die Belastung der Sicherheitszuordnung verringern und damit die Speichernutzung verringern, indem Sie andere, weniger ressourcenintensive Spam-Filtermethoden aktivieren (dh, sie verarbeiten Spam und lehnen ihn ab, bevor er die Sicherheitszuordnung erreicht). Zum Beispiel belegen Greylisting- und Absender-Überprüfungs-Callouts relativ wenig RAM.
quelle
Wir waren vor einigen Monaten in einer ähnlichen Situation. SpamAssassin und ClamAV verwendeten viel Speicher auf einem gehosteten Server. Wir hatten die Möglichkeit, dem Server mehr Speicher hinzuzufügen, aber die Umstellung auf Postini erwies sich als kostengünstiger und zeitsparender. YMMV.
quelle