Tuesday, April 02, 2024

Re: opensmtpd-filter-dkimsign: high memory usage

Hello Songbo,

On Mon, 2024-04-01 at 13:32 +0200, Songbo Wang wrote:
> Hi,
>
> I am running an OpenSMTPD server with opensmtpd-filter-dkimsign-0.5p2 on OpenBSD 7.4 (amd64). I noticed recently that the dkimsign program was using a lot of memory:
>
> $ ps ax -orss,command | grep dkimsign
> 110920 /usr/local/libexec/smtpd/filter-dkimsign -d wsb.onl -s viper1 -k /etc/mai
> 304 grep dkimsign
>
> I am not a C programmer so maybe I am wrong, but it seems to me that over 100 MB is a lot for the simple program.

I'm aware of this, and I've also managed to track the reason down. I
haven't spend the time yet to find a good solution yet.

The problem is that after every line libopensmtpd does an event_del/
event_add dance, which libevent queues up for the next kqueue call
without doing any deduplication. This means that if it receives a lot
of lines to send before returning to the event loop (which happens
when you flush a complete cached file from /tmp as dkimsign does) it
can grow to an unreasonable amount of kqueue events. The second part
of the problem is that this array is never freed/shrunk by libevent.

So it shouldn't grow further, unless you sign even larger mails, but
I agree that it's far from ideal.
>
> And of course the relevant line in my smtpd.conf is the following:
>
> filter "dkimsign" proc-exec "filter-dkimsign -d wsb.onl -s viper1 \
> -k /etc/mail/dkim/private.key" user _dkimsign group _dkimsign
>
> I am not sure if this memory usage is related to how long the program is being ran (server's uptime is over 100 days), so I didn't restart the dkimsign program to investigate. But I will be happy to provide more information if needed.
>
> Thanks,
> --
> Songbo Wang
>
martijn@

No comments:

Post a Comment