On 13/12/2018 10:18, Arkadiusz Miśkiewicz wrote:
>
> Hello.
>
> The problem with dovecot/config processes never ending and spawning new
> one on each reload
> (https://www.dovecot.org/list/dovecot/2016-November/106058.html) is
> becoming a problem here:
>
> # ps aux|grep dovecot/config|wc -l
> 206
>
> That's a lot of wasted memory - dovecot/config processes ate over 30GB
> of ram on 64GB box.
If anyone else uses shutdown_clients = no and has the same problem here
is a script that needs to be run from cron and it kills old, unneeded
config processes.
Works fine here.
--
Arkadiusz Miśkiewicz, arekm / ( maven.pl | pld-linux.org )
#!/usr/bin/python3
import psutil
import sys
import syslog
syslog.openlog(logoption=syslog.LOG_PID, facility=syslog.LOG_DAEMON)
program = sys.argv[0]
dovecot_pid = int(open('/var/run/dovecot/master.pid', 'r').read())
procs = []
for proc in psutil.process_iter():
if proc.name() != "config":
continue
if proc.ppid() != dovecot_pid:
msg = "%s: Found process: %s but parent is not dovecot master pid (%d). Skipping." % (program, repr(proc), dovecot_pid)
syslog.syslog(msg)
print(msg, file=sys.stderr)
continue
procs.append(proc)
procs = sorted(procs, key=lambda p: p.create_time())
# terminate all processes but leave latest
for i in range(0, len(procs) - 1):
proc = procs[i]
syslog.syslog("%s: Terminating process: %s with TERM signal." % (program, repr(proc)))
proc.terminate()
syslog.closelog()