Dovecot: Langsames Speichern von Mails beim Versenden

Postfix, QMail, Sendmail, Dovecot, Cyrus, Courier, Anti-Spam
User avatar
coltseavers
Posts: 187
Joined: 2009-11-04 00:43
Location: NRW

Dovecot: Langsames Speichern von Mails beim Versenden

Post by coltseavers » 2015-04-03 18:14

Hallo zusammen,

ich betreibe einen kleinen Debian-Mailserver mit Postfix und Dovecot 2.1.7 und ca 50 IMAP-Postfächern.

Das Problem ist, dass nach dem Versenden von Mails es manchmal eine ganze Weile, bis die versendete Mail in den Ordner "Sent" abgelegt wurde.
Ein User teilte mir nun mit, dass er dabei manchmal sogar Timeouts bekommt, seiner Beobachtung nach besonders bei Mails mit großen Anhängen.

Ich habe daraufhin in der 10-master.conf (siehe unten) mal das process_limit auf 400 erhöht, aber dennoch: bis eine Mail unter "Sent" abgelegt ist, vergehen bei mir (Ich verwende Thunderbird) manchmal 5-10 Sekunden, auch bei reinen Textmails. An der Bandbreite der Internetverbindung kann es also nicht liegen.

Unter ps aux melden die beiden imap-login-Prozesse zusammen eine Verbindungszahl von grob 40-50 TLS-Verbindungen, also nix, was den Server in die Knie zwingen könnte, würde ich mal meinen.

Könnte Dovecot bzw das System irgendwo einen Flaschenhals haben, oder was könnte die Ursache sein?

Vielen Dank vorab!

Gruß,
Colt Seavers

Code: Select all

10-master.conf

#default_process_limit = 100
#default_client_limit = 1000

# Default VSZ (virtual memory size) limit for service processes. This is mainly
# intended to catch and kill processes that leak memory before they eat up
# everything.
#default_vsz_limit = 256M

# Login user is internally used by login processes. This is the most untrusted
# user in Dovecot system. It shouldn't have access to anything at all.
#default_login_user = dovenull

# Internal user is used by unprivileged processes. It should be separate from
# login user, so that login processes can't disturb other processes.
#default_internal_user = dovecot

service imap-login {
  #Keine neuen Prozesse starten, wenn neue Verbindungen reinkommen...
  service_count = 0
  #...aber trotzdem immer so viele Prozesse wie CPU-Kerne vorhalten:
  process_min_avail = 2

  inet_listener imap {
    #port = 143
  }
  inet_listener imaps {
    #port = 993
    #ssl = yes
  }

  # Number of connections to handle before starting a new process. Typically
  # the only useful values are 0 (unlimited) or 1. 1 is more secure, but 0
  # is faster. <doc/wiki/LoginProcess.txt>
  #service_count = 1

  # Number of processes to always keep waiting for more connections.
  #process_min_avail = 10

  # If you set service_count=0, you probably need to grow this.
  #vsz_limit = $default_vsz_limit
}

service pop3-login {
  service_count = 0
  process_min_avail = 2
  inet_listener pop3 {
    #port = 110
  }
  inet_listener pop3s {
    #port = 995
    #ssl = yes
  }
}

service lmtp {
  unix_listener lmtp {
    #mode = 0666
  }
 
  #Create inet listener only if you can't use the above UNIX socket
  inet_listener lmtp {
    # Avoid making LMTP visible for the entire internet
    address = 127.0.0.1
    port = 24
  }
}

service imap {
  # Most of the memory goes to mmap()ing files. You may need to increase this
  # limit if you have huge mailboxes.
  #vsz_limit = $default_vsz_limit

  # Max. number of IMAP processes (connections)
  process_limit = 400
}

service pop3 {
  # Max. number of POP3 processes (connections)
  #process_limit = 15
}

service auth {
  # auth_socket_path points to this userdb socket by default. It's typically
  # used by dovecot-lda, doveadm, possibly imap process, etc. Users that have
  # full permissions to this socket are able to get a list of all usernames and
  # get the results of everyone's userdb lookups.
  #
  # The default 0666 mode allows anyone to connect to the socket, but the
  # userdb lookups will succeed only if the userdb returns an "uid" field that
  # matches the caller process's UID. Also if caller's uid or gid matches the
  # socket's uid or gid the lookup succeeds. Anything else causes a failure.
  #
  # To give the caller full permissions to lookup all users, set the mode to
  # something else than 0666 and Dovecot lets the kernel enforce the
  # permissions (e.g. 0777 allows everyone full permissions).
  unix_listener auth-userdb {
    #mode = 0666
    #user =
    #group =
  }

  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
  }

  # Auth process is run as this user.
  #user = $default_internal_user
}

service auth-worker {
  # Auth worker process is run as root by default, so that it can access
  # /etc/shadow. If this isn't necessary, the user should be changed to
  # $default_internal_user.
  #user = root
}

service dict {
  # If dict proxy is used, mail processes should have access to its socket.
  # For example: mode=0660, group=vmail and global mail_access_groups=vmail
  unix_listener dict {
    #mode = 0600
    #user =
    #group =
  }
}


Code: Select all

20-imap.conf

##
## IMAP specific settings
##

protocol imap {
  # Maximum IMAP command line length. Some clients generate very long command
  # lines with huge mailboxes, so you may need to raise this if you get
  # "Too long argument" or "IMAP command line too large" errors often.
  #imap_max_line_length = 64k

  # Maximum number of IMAP connections allowed for a user from each IP address.
  # NOTE: The username is compared case-sensitively.
  #mail_max_userip_connections = 10

  # Space separated list of plugins to load (default is global mail_plugins).
  mail_plugins = $mail_plugins imap_quota

  # IMAP logout format string:
  #  %i - total number of bytes read from client
  #  %o - total number of bytes sent to client
  #imap_logout_format = bytes=%i/%o

  # Override the IMAP CAPABILITY response. If the value begins with '+',
  # add the given capabilities on top of the defaults (e.g. +XFOO XBAR).
  #imap_capability =

  # How long to wait between "OK Still here" notifications when client is
  # IDLEing.
  #imap_idle_notify_interval = 2 mins

  # ID field names and values to send to clients. Using * as the value makes
  # Dovecot use the default value. The following fields have default values
  # currently: name, version, os, os-version, support-url, support-email.
  #imap_id_send =

  # ID fields sent by client to log. * means everything.
  #imap_id_log =

  # Workarounds for various client bugs:
  #   delay-newmail:
  #     Send EXISTS/RECENT new mail notifications only when replying to NOOP
  #     and CHECK commands. Some clients ignore them otherwise, for example OSX
  #     Mail (<v2.1). Outlook Express breaks more badly though, without this it
  #     may show user "Message no longer in server" errors. Note that OE6 still
  #     breaks even with this workaround if synchronization is set to
  #     "Headers Only".
  #   tb-extra-mailbox-sep:
  #     Thunderbird gets somehow confused with LAYOUT=fs (mbox and dbox) and
  #     adds extra '/' suffixes to mailbox names. This option causes Dovecot to
  #     ignore the extra '/' instead of treating it as invalid mailbox name.
  #   tb-lsub-flags:
  #     Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g. mbox).
  #     This makes Thunderbird realize they aren't selectable and show them
  #     greyed out, instead of only later giving "not selectable" popup error.
  #
  # The list is space-separated.
  #imap_client_workarounds =
}

User avatar
Joe User
Project Manager
Project Manager
Posts: 11583
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Dovecot: Langsames Speichern von Mails beim Versenden

Post by Joe User » 2015-04-03 20:30

Poste bitte mal die Ausgabe von:

Code: Select all

doveconf -n

und

Code: Select all

mount -v
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

User avatar
coltseavers
Posts: 187
Joined: 2009-11-04 00:43
Location: NRW

Re: Dovecot: Langsames Speichern von Mails beim Versenden

Post by coltseavers » 2015-04-07 11:48

Hallo,

"dovecot -n" ergab:

Code: Select all

# 2.1.7: /etc/dovecot/dovecot.conf
# OS: Linux 3.2.41-042stab094.8 x86_64 Debian 7.8 ext4
auth_mechanisms = plain login
auth_verbose = yes
hostname = bla
mail_location = maildir:/home/vmail/%u
mail_plugins = " quota"
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date ihave
namespace inbox {
  inbox = yes
  location =
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix =
}
passdb {
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
  driver = passwd-file
}
plugin {
  quota = maildir:User quota
  quota_rule = *:storage=5G
  sieve = ~/.dovecot.sieve
  sieve_dir = ~/sieve
}
postmaster_address = bla
protocols = " imap lmtp sieve pop3"
quota_full_tempfail = yes
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
  }
}
service imap-login {
  process_min_avail = 2
  service_count = 0
}
service imap {
  process_limit = 400
}
service lmtp {
  inet_listener lmtp {
    address = 127.0.0.1
    port = 24
  }
}
service managesieve-login {
  inet_listener sieve {
    port = 4190
  }
}
service pop3-login {
  process_min_avail = 2
  service_count = 0
}
ssl = required
ssl_ca = /etc/dovecot/ssl/bla
ssl_cert = </etc/dovecot/ssl/bla
ssl_key = </etc/dovecot/ssl/bla
userdb {
  args = username_format=%u /etc/dovecot/users
  default_fields = quota_rule=*:storage=6G
  driver = passwd-file
  override_fields = home=/home/vmail/%u
}
verbose_proctitle = yes
protocol imap {
  mail_plugins = " quota imap_quota"
}




und "mount -v" ergab:

Code: Select all

/dev/ploop31335p1 on / type ext4 (rw,relatime,barrier=1,data=ordered,balloon_ino=12,jqfmt=vfsv0,usrjquota=aquota.user,grpjquota=aquota.group)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
none on /dev type devtmpfs (rw,nosuid,noexec,relatime,mode=755)
none on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,nosuid,nodev,noexec,relatime)
none on /run type tmpfs (rw,nosuid,noexec,relatime,size=838864k,mode=755)
none on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
none on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=2516580k)
none on /run/user type tmpfs (rw,nosuid,nodev,noexec,relatime,size=102400k,mode=755)
Viele Grüße,
Colt Seavers

User avatar
Joe User
Project Manager
Project Manager
Posts: 11583
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Dovecot: Langsames Speichern von Mails beim Versenden

Post by Joe User » 2015-04-07 21:38

Nach etwas googlen scheint es wohl (mindestens) ein Bug in Thunderbird zu sein, welcher schwer zu reproduzieren und debuggen zu sein scheint, dass es seit Jahren keine zuverlässige Abhilfe gibt.
Einer von mehreren Bugreports: https://bugzilla.mozilla.org/show_bug.cgi?id=413240
Hier gibt es ein paar mögliche Workarounds (IMHO aber teils zweifelhaft, daher dringend vorher Backups sowohl des serverseitigen Mailspool als auch des clientseitigen anlegen!): http://thomas-cokelaer.info/blog/2011/0 ... nt-folder/
Auch in den Kommentaren zum Bugreport und dem Blogpost gibt es mögliche Workarounds, aber auch dort Vorsicht walten lassen.

Ich persönlich würde Thunderbird und alle lokalen Mailboxen einmal komplett von der Platte fegen, Thunderbird neu installieren und manuell konfigurieren (ohne den bekloppten Assistenten) und erst danach die Mailboxen neu syncronisieren lassen. Ist zwar lästig und etwas zeitaufwändig, aber meiner Meinung nach der sauberste Workaround.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.