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()

Reply via email to