Postfix-Leistung


11

Ausführen von Postfix auf Ubuntu, Senden einer Menge E-Mails (~ 1 Million Nachrichten) pro Tag. Die Lasten sind extrem hoch, aber nicht viel in Bezug auf CPU- und Speicherlast. Jemand in einer ähnlichen Situation und weiß, wie man den Engpass beseitigt?

Alle E-Mails auf diesem Server sind ausgehend.

Ich müsste davon ausgehen, dass der Engpass die Festplatte ist.

Nur ein Update, so sieht iostat aus:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.12   99.88    0.00    0.00

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00    12.38    0.00    2.48     0.00   118.81    48.00     0.00    0.00   0.00   0.00
sdb               1.49    22.28   72.28   42.57   629.70  1041.58    14.55   135.56  834.31   8.71 100.00

Stimmen diese Zahlen mit der Leistung überein, die Sie von einer einzelnen Festplatte erwarten würden?

sdb widmet sich dem postfix.

Ich denke, es ist Warteschlangenmischen, von eingehend-> aktiv-> zurückgestellt

Weitere Details aus Fragen:

Server: Quad-Core-Xeon (R) -CPU E5405 bei 2,00 GH mit 4 GB RAM

Lastdurchschnitt: 464,88, 489,11, 483,91, 4 Kerne. Die Speicherauslastung und die CPU sind jedoch minimal

Postfix-Instanzen zwischen 16 und 32


Mit mehr als 400 Ladevorgängen bin ich überrascht, dass die Systeme alles tun. Wenn Sie 1 Million Nachrichten pro Tag über ein System senden, würde ich definitiv vorschlagen, Ihre Festplatten-E / A (Ramdisk, Raid) zu verbessern und wahrscheinlich zu einer Cluster-Option zu wechseln. Ich bin mir sicher, dass bei 400 die beweglichen E-Mails Ihres Servers ziemlich langsam geladen werden.
Grufftech

@ Brian G: Sie können einen Kommentar markieren, aber ich glaube nicht, dass Sie ihn löschen können. Ich stimme ihm jedoch zu.
womble

Antworten:


9

Das klingt vielleicht ein bisschen verrückt, aber Sie sollten:

  1. Verringern Sie die Protokollierung auf das Nötigste. Machen Sie syslog nur log mail.err oder höher.
  2. Fügen Sie mehr RAM hinzu. Ja, Postfix benötigt es nicht, aber zusätzlicher RAM bedeutet zusätzlichen Seiten-Cache für den Kernel.
  3. Sie haben nicht erwähnt, welches Dateisystem sich in / dev / sdb befindet (was auch wichtig ist), aber auf jeden Fall auf umgeschaltet noatime, was die Last zumindest ein wenig reduzieren sollte.
  4. Sehen Sie, wie groß Ihr / var / spool / postfix ist. Wenn es weniger als ein paar Konzerte gibt, sollten Sie es auf eine Ramdisk verschieben.

Hätte ich nicht besser sagen können. Ich habe auch festgestellt, dass 3. sda und sdb ohne Partitionen eine gewisse Verlangsamung verursachen können oder zumindest die Festplatten im System nicht effizient nutzen.
Grufftech

Nevermind - ich bin zurückgeblieben, sieht aus wie ein Iostat -x statt nur ein Iostat. mein Fehler!
Grufftech

Es sollte keinen Grund geben, den Umfang der Protokollierung zu reduzieren, solange Sie die Syslog-Protokollierung asynchron haben und (vorzugsweise) die Protokolle und die Spule auf verschiedenen Spindeln haben. Stellen Sie jedoch sicher, dass Sie für den normalen Betrieb keine ausführliche Protokollierung durchführen.
Rob Chanter

4

Ich muss mit denen nicht einverstanden sein, die vorgeschlagen haben, eine RAM-Disk für "/ var / spool / postfix" zu verwenden. Dies bedeutet, dass Ihre gesamte E-Mail-Warteschlange im RAM gespeichert wird. Wenn Ihr Server abstürzt oder die Stromversorgung verliert, sind Nachrichten in der Warteschlange für immer verschwunden. Dies ist aus Sicht des Kunden / Benutzers sehr schlecht, da die Nachricht bereits erfolgreich zur Zustellung angenommen wurde. Schlimmer noch, Ihr Server sendet keine Benachrichtigung, dass eine E-Mail zurückgeschickt wurde oder nicht zugestellt werden konnte, da die Warteschlange leer ist, wenn der Server wieder hochgefahren wird.

Stattdessen würde ich so viele schnelle Festplatten hinzufügen, wie Sie sich leisten können. Ich kann mit den gegebenen Informationen nicht wirklich abschätzen, wie viele Sie benötigen. Aus der obigen Ausgabe von "iostat" geht hervor, dass Sie ~ 120 IOPS für 'sdb' (Summe von r / s und w / s) ausführen. Sie können davon ausgehen, dass eine einzelne SCSI- oder FC-Festplatte mit 15.000 U / min 150 IOPS verarbeiten kann. Ich würde mit 5 SCSI-Festplatten mit 15.000 U / min und einem anständigen RAID-Controller beginnen. Richten Sie es als RAID-10 auf 4 Laufwerken mit 1 Ersatzlaufwerk ein. Ich bin nicht sicher, ob dies Ihr Problem vollständig lösen wird, aber es wird es definitiv nicht schlimmer machen.


2

Führen Sie postfix unter einem Profiler (gprof?) Aus oder sehen Sie in den Protokollen nach. Postfix protokolliert viele Timing-Informationen, die Ihnen möglicherweise mitteilen, wo sich die Verzögerung befindet. Gemeinsame Orte zu suchen sind:

  1. Festplattenleistung. Könnte Zeit für RAID-10 für Ihre Warteschlange sein.
  2. Jede Art von Netzwerk-E / A für Nachrichten. DNS-Blacklists? SAV?
  3. Milters und andere Filter, die Sie installiert haben.
  4. Authentifizierung und UID-Suche werden über das Netzwerk oder einen Prozess (ldap, sql) durchgeführt.
  5. Proxy nicht verwenden: für langsame Karten (wie oben)

Verwenden Sie so etwas wie iostat -x -v 3, um die Festplattenauslastung zu überprüfen.
Moshen

mit dem iostat -x, seiner definitiven Festplattenleistung, lol, 100% Util auf der Festplatte.
Grufftech

Kaufen Sie 4 15k SAS-Laufwerke, wenn Ihr Computer sie benötigt, oder 4 Velociraptor SATA-Laufwerke, wenn kein SAS vorhanden ist. RAID-10 sie als Postfix-Warteschlange mounten. Wenn dies nicht der Fall ist, schauen Sie sich die Intel SSDs an, aber Ihre Welt wird an diesem Punkt teuer.
Bill Weiss

2

Eine Million Nachrichten pro Tag entspricht ungefähr 11 pro Sekunde, vorausgesetzt, der Durchsatz ist konstant. Postfix selbst sollte in der Lage sein, mindestens eine Größenordnung größer zu verarbeiten als Server-Hardware der Einstiegsklasse. Ich vermute also, dass mehr als nur Postfix ausgeführt wird oder sehr ungleichmäßig verteilte Durchsatzspitzen.

Ihre Situation sieht auf jeden Fall wie ein stark E / A-gebundener Server aus. Dies ist bei einem MTA zu erwarten, der viele kleine Schreibvorgänge ausführen muss, um sicherzustellen, dass keine E-Mails verloren gehen.

Nehmen Sie sich Zeit, um die E / A auf beiden /var/spool/postfixund einzustellen /var/log. Die beste Vorgehensweise für ausgelastete Postfix-Server besteht darin, die beiden über verschiedene Spindeln zu trennen und sicherzustellen, dass die asynchrone Protokollierung aktiviert ist. Stellen Sie dem Namen der Protokolldatei für Ihr E-Mail-Protokoll unter Linux einen Bindestrich voran.

mail.info                              -/var/log/mail.log

o.ä.

Wenn Sie amavisd-new verwenden, stellen Sie sicher, dass sich der Arbeitsbereich in einem tmpfs-Dateisystem befindet. Wir ziehen es normalerweise an /tmp/vscan/. Dies ist sicher, da amavisd-new keine Antwort auf Datenende zurückgibt, bis der Downstream-Hop (nach dem Filter) die Nachricht akzeptiert hat.

Einige Leute empfehlen noatimeMount-Optionen für die Postfix-Spool. Dies ist möglicherweise unklug, da Postfix von der Semantik des Dateisystems abhängt. Siehe zum Beispiel http://archives.neohapsis.com/archives/postfix/2006-01/1916.html .


1

Es sieht definitiv so aus, als ob Ihr Festplattensubsystem zumindest als Teil des Problems betrachtet werden sollte. Aufgrund der Art und Weise, wie Postfix Dateien um / var mischt, würde ich empfehlen, nach "ext3-Dateisystem optimieren" (zumindest Noatime und Writeback einstellen) zu googeln, um festzustellen, ob Sie die Leistung auf Dateisystemebene nicht steigern können.

Ich habe zwei Cluster von Servern, die DNS und ausgehendes SMTP für kundenspezifische E-Mails verdoppeln und täglich 250.000 Nachrichten (2.000 bis 10.000 pro Stunde) ausführen, wobei diese Art von E / A-Bindung bei weitem nicht erreicht wird.


0

Sieht für mich aus wie ein Flaschenhals mit Speicherleistung.

Das iowait von 99,88 zeigt an, dass Ihr System viel Zeit damit verbringt, auf Ihren Speicher zu warten.

Ich stimme Bill Weiss zu. Sie sollten sich ein raid10-Setup für die Warteschlange ansehen.


0

oder beginnen mit

vmstat 1

"iostat 1" von moshen vorgeschlagen ist auch gut

Von Ihren Statistiken aus wäre ein deutlich schnelleres Festplattensubsystem schön. raid-10 auf 6-8 15k U / min-Festplatten, möglicherweise mit etwas Cache, ein paar Gigs Speicher an Bord.

Hängen Sie Ihr Spool-Verzeichnis mit den Optionen noatime und nodiratime ein. Erwägen Sie, Ihr Dateisystem so zu optimieren oder zu ändern, dass es viele kleine [ich nehme an] Dateien verarbeitet.


0

Brian

Sie müssen wirklich eine schnellere Festplatte kaufen oder vorzugsweise zu einer RAID-Lösung wechseln. Was für ein Server ist das?

James


Quad-Core-Xeon (R) -CPU E5405 bei 2,00 GHz 4 GB RAM
Brian G

0

Wenn Sie amavis für die Spam + Virusfilterung ausführen, sollten Sie die Anzahl der gleichzeitigen amavis-Prozesse erhöhen. Je nach Einrichtung müssen Sie möglicherweise sowohl die Anzahl der smtp-amavis-Prozesse in postfix master.cf als auch die entsprechende Einstellung in amavis.conf erhöhen.


danke aber nicht amavis laufen.
Brian G

0

Wie viele Kerne in der Box und wie hoch ist die tatsächliche Last? Wie hoch ist die tatsächliche Rate, mit der Sie Nachrichten erhalten?

Wie die meisten ist mein erster Gedanke die Festplatte, also überprüfen Sie das.

Die Netzwerkauslastung kann jedoch die Ursache sein, ebenso wie eine hohe Interruptlast (fehlerhafte Karte?). Überprüfen Sie diese. Ich habe festgestellt, dass selbst für einen bescheidenen Mailserver ein schneller Caching-DNS-Server (ich bin teilweise "ungebunden") auf derselben Box hilft, Latenz und Netzwerklast zu verringern.


Lastdurchschnitt: 464,88, 489,11, 483,91, 4 Kerne. Die Speicherauslastung und die CPU sind jedoch minimal.
Brian G

Autsch. Wie viele Postfix-Prozesse laufen zu einem bestimmten Zeitpunkt? Wenn Sie die Anzahl der gleichzeitig ausgeführten Prozesse verringern, wird der E / A-Konflikt auf der Festplatte möglicherweise etwas geringer. Weniger Procs, aber jeder kann etwas schneller gehen. Das oder ein anderer Postfix-Drosselmechanismus, wie die Begrenzung der Lastabschaltung auf etwas Vernünftiges.
Geoff Fritz

16-32 Postfix-Instanzen.
Brian G

3
4xx Lastdurchschnitt ist nicht "extrem hoch", es ist "mein Server ist abgespritzt" :)
Bill Weiss

0

Wenn Sie 630 Lesevorgänge und 1042 Schreibvorgänge pro Sekunde ausführen, empfehle ich auf jeden Fall, Ihren Arbeitsspeicher im System zu erhöhen (um das Betriebssystem und ein RAM-Laufwerk besser zu handhaben) und Ihren Postfix-Ordner dann zu einer Ramdisk zu machen.

Ich würde auch vorschlagen, Ihre E-Mail-Protokolle auf einer eigenen Partition abzulegen, wenn nicht auf einer eigenen Festplatte.


0

Dies ist kein E / A-Problem, sondern ein Postfix-Konfigurationsproblem. Sie fordern es auf, zu viel auf einmal zu tun und einen Engpass für sich selbst zu schaffen. Lesen Sie die Readme-Datei zur Optimierung der Postfix-Leistung und / oder veröffentlichen Sie Ihre main.cf, damit wir Ihnen helfen können.


0

Sieht aus wie Sie eine zwielichtige Scheibe haben. Ihr Server führt nur 72 Leseanforderungen / Sek. Und 42 Schreibanfragen / Sekunde aus. Meine Desktop-Festplatte mit 7200 U / min von seagate kann mehr als 100 zufällige Lese- / Schreibanforderungen pro Sekunde ausführen und trotzdem damit umgehen.

Versuchen Sie, die Spule auf sda zu montieren und prüfen Sie, ob die Last besser wird.

Bevor Sie jedoch mehr Geld auf die Festplatte spritzen, gehen Sie wie folgt vor:

  1. Führen Sie qshape active, qshape deferred und qshape incoming aus und teilen Sie uns die Summe aller Befehle mit.

    Eine ungewöhnlich hohe Anzahl von E-Mails in der zurückgestellten Warteschlange bedeutet, dass Ihr Mailserver möglicherweise von Spammern verwendet wird, um deren Spam weiterzuleiten (z. B. das Senden von E-Mails an eine nicht vorhandene Domain, wodurch Ihr Postfix immer wieder wiederholt wird).

  2. Stellen Sie sicher, dass Ihr Mailserver nicht auf der schwarzen Liste steht ( http://www.mxtoolbox.com/blacklists.aspx ).

  3. Überprüfen Sie die DNS-Antwortzeit und führen Sie einen lokalen DNS-Cache aus.

    Mailserver verwenden DNS ziemlich häufig. Do dig somedomain.com mx Run es über einige verschiedene Hosts. Im Allgemeinen sollte die Reaktionszeit weniger als 100 - 400 ms betragen. Wenn Sie eine höhere Antwort erhalten, funktioniert Ihr DNS möglicherweise nicht gut. Probieren Sie verschiedene DNS aus (Sie können Googles 8.8.8.8 oder OpenDNS: 208.67.222.222 ausprobieren).

  4. Überprüfen Sie Ihr Netzwerk. (zB ifconfig) und sehen, wie viele Fehlerpakete. Überprüfen Sie, ob Ihr Link gesättigt oder geformt ist. Überprüfen Sie, ob in E-Mail-Protokollen häufig Zeitüberschreitungen aufgetreten sind. Führen Sie tcpdump aus und stellen Sie sicher, dass keine Pakete verloren gehen oder erneut übertragen werden.

  5. Können Sie uns sagen, ob die Konsole reagiert (z. B. wenn Sie einen Befehl eingeben, wie schnell das System Ihnen Feedback gibt)?

    Im Allgemeinen führt ein Netzwerkproblem (z. B. DNS) dazu, dass die Last sprunghaft ansteigt, das System jedoch weiterhin reagiert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.