Package: syslog-ng
Version: 3.3.9-1

We have encountered a significant memory leak in syslog-ng when used in
our environment.
We leak around 120MB per day, causing us to restart our syslog-ng.

The bug can be reproduced with the following syslog-ng configuration
file (not 100% sure which options are vital from our environment. All
have been included).

################################################################################
# BEGIN syslog-ng.conf
################################################################################
@version: 3.3

filter f_first8_a {
match("^(?<msg_tag>[a-z0-9A-Z_\-]{0,8})(?<msg_bits>.*)" value("PROGRAM")
type("pcre") flags("store-matches")); };

rewrite first_eight_chars_a {
    set("${msg_tag}", value("PROGRAM"));
    set("${msg_bits} ${MESSAGE}", value("MESSAGE"));
};

template t_default {
    template("$R_ISODATE $HOST $PROGRAM $MESSAGE\n");
};

options
{
        chain_hostnames(0);
        time_reopen(1);
        time_reap(5);
        flush_lines(0);
#       log_fifo_size(8192);
        create_dirs(yes);
        perm(0644);
        dir_perm(0755);
        use_dns(yes);
        dns_cache(yes);
        dns_cache_expire(600);
        dns_cache_expire_failed(60);
        dns_cache_size(500);
        log_msg_size(8192);
        stats_freq(3600);
        bad_hostname("^gconfd$");
        keep_hostname(yes);
        ts_format("iso");
        keep_timestamp(no);
        frac_digits(3);
};

source s_sys
{
        file ("/proc/kmsg"
        program_override("kernel: "));
        unix-stream ("/dev/log");
        internal();
        udp(ip(0.0.0.0) port(514));
};

destination d_sys
{
        file("/tmp/syslog-ng/test/${HOST}_${PROGRAM}-messages.log");
};

log
{
        source(s_sys);
        filter(f_first8_a);
        rewrite(first_eight_chars_a);
        destination(d_sys);
};
################################################################################
# END syslog-ng.conf
################################################################################



The leak can be recreated with the following script:
################################################################################
# BEGIN genleak.sh
################################################################################

#!/bin/bash

x=0
tag_arr=(11111111 22222222 33333333 44444444 55555555 66666666 77777777
88888888 99999999 00000000)
while :; do
        let x=$x+1
        if [[ x -eq 10 ]]; then
                x=0
                # NOTE: This value works best at 6, so that syslog-ng
releases
                # and recreates the memory allocated to the file handles
                # frequently.
                sleep 6
        fi

        logger -t ${tag_arr[$x]}MyPayload and some extra data as well
done

################################################################################
# END genleak.sh
################################################################################

Reply via email to