[syslog-ng] Memory not freeing up in syslog-ng-3.6.2 during reload

Peter Kokai (pkokai) Peter.Kokai at oneidentity.com
Wed Jan 8 10:58:29 UTC 2020


Hello,

Please first of all correct me if I am wrong. But my assumption is that you build an application using one of the library in syslog-ng that provides the patterndb functionality.

In that case reading the syslog-ng administrators guide is not the most useful thing to read, well there is no real development documentation focusing on patterndb.


> 1) Is this because of the message contexts that are persisted on reload, the memory is not freeing up at the time of reload of patterndb ?

In case of syslog-ng the LogDBParser own's a PatternDB. In case of reload the LogDBParser are destroyed (deinit, free) and the PatternDB is stored in a kinda map.
When the new LogDBParser is created, it looks up that map if there is a PatternDB in it and if there is it uses the PatternDB (which holds the context and messages).

> 2) Is  there a way we can free-up these message contexts without a restart ?

Probably there is. A proper free of PatternDB object should suffiece. Try that and if not, check out what is leaked.
Please not that we do not update old releases like your 3.6.2 version. Even if you found a valid leak, it won't be fixed by us.

On the other hand if that same issue applies to upstream, that is going to be solved sooner or later on upstream so reporting that might be beneficial.


--
Kokan

On Wed, Jan 08, 2020 at 11:11:20AM +0530, Nitish Saboo wrote:
> CAUTION: This email originated from outside of the organization. Do not follow guidance, click links, or open attachments unless you recognize the sender and know the content is safe.
> 
> Hi,
> 
> I was going through syslog-ng administrators guide and came across the following point from the given link:
> 
> "NOTE:Message contexts are persistent and are not lost when syslog-ng OSE is reloaded (SIGHUP), but are lost when syslog-ng OSE is restarted."
> 
> https://nam05.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.syslog-ng.com%2Ftechnical-documents%2Fdoc%2Fsyslog-ng-open-source-edition%2F3.18%2Fadministration-guide%2F72%23TOPIC-1044162&data=02%7C01%7CPeter.Kokai%40oneidentity.com%7C98e50b9febb94766906408d793fd6cc9%7C91c369b51c9e439c989c1867ec606603%7C0%7C0%7C637140588987560053&sdata=TYRUPe088j8cP%2Br8e034XO9J46yY%2FMtlbcEeRisuyno%3D&reserved=0
> 
> 1) Is this because of the message contexts that are persisted on reload, the memory is not freeing up at the time of reload of patterndb ?
> 
> 2) Is  there a way we can free-up these message contexts without a restart ?
> 
> Please correct me if I am wrong or missing something here.
> 
> Thanks,
> Nitish
> 
> 
> 
> On Tue, Jan 7, 2020 at 5:37 PM Nitish Saboo <nitish.saboo55 at gmail.com<mailto:nitish.saboo55 at gmail.com>> wrote:
> Hi Peter,
> 
> Thanks for your response :)
> I am seeing the memory usage getting increased ONLY at the time of reload of patterndb.
> All other operation are having constant memory consumption.
> Hence, my question is specific to reload operation if it is by default that patterndb component is not freeing up the memory on reload operation ? If it is by default, why is it so ?
> 
> The init and deinit can be repeated multiple times (init, deinit, init, deinit, ...) also usually the repeation of single init is fine (init, init, ...).
> >> With this you meant initialising syslog-ng  every-time for every reload operation?
> 
> Thanks,
> Nitish
> 
> On Tue, Jan 7, 2020 at 5:05 PM Peter Kokai (pkokai) <Peter.Kokai at oneidentity.com<mailto:Peter.Kokai at oneidentity.com>> wrote:
> Hello,
> 
> Yes, we like to keep memory for ourselfs ;)[1]
> 
> This is in fact not syslog-ng reload, and mostly about patterndb component. You could verify leak with valgrind or sanitizer. Please if you find a leak check it on upstream and report if you have any.
> 
> Regarding the question that your application does leak or not is hard to tell withouth knowing it.
> Please share your application and we might be able to help you.
> 
> Just a hint: things in syslog-ng usually like to be called like this:
> 
> new
> init
> deinit
> free
> 
> In case of reference counted object also use unref instead of free, and ref well to reference stuff.
> 
> The init and deinit can be repeated multiple times (init, deinit, init, deinit, ...) also usually the repeation of single init is fine (init, init, ...).
> (This is of course not a contract by any means.)
> 
> Have fun.
> 
> [1] Not really true.
> 
> --
> Kokan
> 
> On Tue, Jan 07, 2020 at 02:35:43PM +0530, Nitish Saboo wrote:
> > CAUTION: This email originated from outside of the organization. Do not follow guidance, click links, or open attachments unless you recognize the sender and know the content is safe.
> >
> > Hi,
> >
> > I am using syslog-ng version 3.6.2:
> >
> > syslog-ng --version
> > syslog-ng 3.6.2
> > Installer-Version: 3.6.2
> > Revision:
> > Compile-Date: May  2 2019 01:20:32
> > Available-Modules: afmongodb,afstomp,afuser,csvparser,afprog,afamqp,cryptofuncs,afsocket,graphite,dbparser,affile,syslogformat,afsocket-notls,system-source,confgen,pseudofile,linux-kmsg-format,basicfuncs
> > Enable-Debug: off
> > Enable-GProf: off
> > Enable-Memtrace: off
> > Enable-IPv6: on
> > Enable-Spoof-Source: off
> > Enable-TCP-Wrapper: off
> > Enable-Linux-Caps: off
> >
> >
> > I initialised syslog-ng with the following configuration:
> >
> > int initialize_engine(const gchar* filename, const gchar* _module_path)
> > {
> >   module_path = _module_path;
> >   app_startup();
> >   msg_init(TRUE);
> >
> >   configuration = cfg_new(0x0302);
> >   plugin_load_module("basicfuncs", configuration, NULL);
> >   plugin_load_module("syslogformat", configuration, NULL);
> >
> >   pattern_db_global_init();
> >   return 0;
> >   }
> >
> >   int reload_pattern_db(const gchar* filename, key_value_cb cb)
> > {
> >   if(patterndb!= NULL){
> >     pattern_db_free(patterndb);
> >   }
> >   patterndb = pattern_db_new();
> >   pattern_db_reload_ruleset(patterndb, configuration, filename);
> >   pattern_db_set_emit_func(patterndb, pdbtool_pdb_emit_accumulate, cb);
> >   return 0;
> > }
> >
> > When I reload the syslog-ng, the memory keeps on increasing.Looks like syslog-ng is not freeing up the memory.It continues to occupy the memory unless the process is restarted.
> > Just want to understand if it is a sign of memory leak or default behavior of syslog-ng to not free-up memory during reload ?
> >
> > Thanks,
> > Nitish
> >
> 
> > ______________________________________________________________________________
> > Member info: https://nam05.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.balabit.hu%2Fmailman%2Flistinfo%2Fsyslog-ng&data=02%7C01%7CPeter.Kokai%40oneidentity.com%7C98e50b9febb94766906408d793fd6cc9%7C91c369b51c9e439c989c1867ec606603%7C0%7C0%7C637140588987560053&sdata=80UrMalZmN5IOI8fIcul18oeWhcSmGC5Qm3sOATy%2BGo%3D&reserved=0
> > Documentation: https://nam05.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.balabit.com%2Fsupport%2Fdocumentation%2F%3Fproduct%3Dsyslog-ng&data=02%7C01%7CPeter.Kokai%40oneidentity.com%7C98e50b9febb94766906408d793fd6cc9%7C91c369b51c9e439c989c1867ec606603%7C0%7C0%7C637140588987560053&sdata=h2VSO0%2FE6Jya03KEkZHW6EHtZ7VxdWBaO8677wvc73Q%3D&reserved=0
> > FAQ: https://nam05.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.balabit.com%2Fwiki%2Fsyslog-ng-faq&data=02%7C01%7CPeter.Kokai%40oneidentity.com%7C98e50b9febb94766906408d793fd6cc9%7C91c369b51c9e439c989c1867ec606603%7C0%7C0%7C637140588987560053&sdata=RiKxeKjeug6xqe6rbgjM182HcRY8s%2FfEwXOoRB1hK0I%3D&reserved=0
> >
> ______________________________________________________________________________
> Member info: https://nam05.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.balabit.hu%2Fmailman%2Flistinfo%2Fsyslog-ng&data=02%7C01%7CPeter.Kokai%40oneidentity.com%7C98e50b9febb94766906408d793fd6cc9%7C91c369b51c9e439c989c1867ec606603%7C0%7C0%7C637140588987570048&sdata=Z3g3ZFjOX96kzak8gx87cjSW6on2lLquFk2ZhR7ND%2FE%3D&reserved=0
> Documentation: https://nam05.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.balabit.com%2Fsupport%2Fdocumentation%2F%3Fproduct%3Dsyslog-ng&data=02%7C01%7CPeter.Kokai%40oneidentity.com%7C98e50b9febb94766906408d793fd6cc9%7C91c369b51c9e439c989c1867ec606603%7C0%7C0%7C637140588987570048&sdata=hzVDeYj%2BYUniHgbmzlmbIhucKeweGlR5%2BJc%2Bm70lFvY%3D&reserved=0
> FAQ: https://nam05.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.balabit.com%2Fwiki%2Fsyslog-ng-faq&data=02%7C01%7CPeter.Kokai%40oneidentity.com%7C98e50b9febb94766906408d793fd6cc9%7C91c369b51c9e439c989c1867ec606603%7C0%7C0%7C637140588987570048&sdata=wakZRruKQpuezhA1fU8LPnL5SOpin6bvHB2O5mbf8Ls%3D&reserved=0
> 

> ______________________________________________________________________________
> Member info: https://nam05.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.balabit.hu%2Fmailman%2Flistinfo%2Fsyslog-ng&data=02%7C01%7CPeter.Kokai%40oneidentity.com%7C98e50b9febb94766906408d793fd6cc9%7C91c369b51c9e439c989c1867ec606603%7C0%7C0%7C637140588987700002&sdata=iY32Y9gzDT72OLmOWoZBlDrAmu5%2F5AqXF6mX3cEzfTU%3D&reserved=0
> Documentation: https://nam05.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.balabit.com%2Fsupport%2Fdocumentation%2F%3Fproduct%3Dsyslog-ng&data=02%7C01%7CPeter.Kokai%40oneidentity.com%7C98e50b9febb94766906408d793fd6cc9%7C91c369b51c9e439c989c1867ec606603%7C0%7C0%7C637140588987700002&sdata=fVrlGkOS7wkLp%2FuJ8%2Fvvr%2BF223svv64NxyHabEpJS7w%3D&reserved=0
> FAQ: https://nam05.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.balabit.com%2Fwiki%2Fsyslog-ng-faq&data=02%7C01%7CPeter.Kokai%40oneidentity.com%7C98e50b9febb94766906408d793fd6cc9%7C91c369b51c9e439c989c1867ec606603%7C0%7C0%7C637140588987700002&sdata=GGqYNSsa%2Bnw6fy5EROhlJbzkFaCOI7EpUiuCRFFX%2FOY%3D&reserved=0
> 


More information about the syslog-ng mailing list