View Issue Details

IDProjectCategoryView StatusLast Update
0005884SOGoActiveSyncpublic2024-02-09 10:39
Reporterleecher Assigned Toqhivert  
PrioritynormalSeveritymajorReproducibilityalways
Status closedResolutionfixed 
Platform[Client] MicrosoftOSWindowsOS Version7
Product Version5.9.0 
Fixed in Version5.9.1 
Summary0005884: Huge memory leak in ActiveSync when syncing a Mailbox with >1000 folders
Description

I have a memory exhaustion problem with SOGO ActiveSync with
large mailboxes and judging by the memory that gets used up, the amount
of memory needed is insane and looks like a bug to me.

So here we have a Mailbox with approx. 1100 Folders (including subfolders):

MariaDB [sogo]> select count() from sogo_cache_folder_username where c_path like '/0719227322A744D180EEC2476AC6FA65%';
+----------+
| count(
) |
+----------+
| 1143 |
+----------+
1 row in set (0,004 sec)

Now let's check how much memory the cached entries use up in encoded form:

MariaDB [sogo]> select sum(length(c_content)) from sogo_cache_folder_username where c_path like '/0719227322A744D180EEC2476AC6FA65%';
+------------------------+
| sum(length(c_content)) |
+------------------------+
| 3166553 |
+------------------------+
1 row in set (0,020 sec)

This is 3MB, not that much.
However when the MS Outlook client tries to sync the mailbox, the sogod process constantly blows up:

Oct 05 10:37:46 sogod [21946]: |SOGo| terminating app, vMem size limit (1024 MB) has been reached (currently 1717 MB)
Oct 05 10:39:43 sogod [22214]: |SOGo| terminating app, vMem size limit (1024 MB) has been reached (currently 1710 MB)
Oct 05 10:41:39 sogod [23618]: |SOGo| terminating app, vMem size limit (1024 MB) has been reached (currently 1717 MB)
Oct 05 10:43:35 sogod [24654]: |SOGo| terminating app, vMem size limit (1024 MB) has been reached (currently 1721 MB)
Oct 05 10:45:34 sogod [24988]: |SOGo| terminating app, vMem size limit (1024 MB) has been reached (currently 1720 MB)
Oct 05 10:47:35 sogod [23931]: |SOGo| terminating app, vMem size limit (1024 MB) has been reached (currently 1717 MB)
Oct 05 10:49:31 sogod [25633]: |SOGo| terminating app, vMem size limit (1024 MB) has been reached (currently 1716 MB)
Oct 05 10:51:28 sogod [25947]: |SOGo| terminating app, vMem size limit (1024 MB) has been reached (currently 1725 MB)
Oct 05 10:53:25 sogod [26250]: |SOGo| terminating app, vMem size limit (1024 MB) has been reached (currently 1716 MB)
Oct 05 10:55:22 sogod [26511]: |SOGo| terminating app, vMem size limit (1024 MB) has been reached (currently 1716 MB)
Oct 05 10:57:18 sogod [26825]: |SOGo| terminating app, vMem size limit (1024 MB) has been reached (currently 1725 MB)
Oct 05 10:58:16 sogod [21941]: |SOGo| terminating app, vMem size limit (1024 MB) has been reached (currently 1717 MB)
Oct 05 11:00:13 sogod [27281]: |SOGo| terminating app, vMem size limit (1024 MB) has been reached (currently 1716 MB)

We have the following settings (as can be seen from error msg):

SxVMemLimit = 1024;
SOGoMaximumSyncWindowSize = 100;
SOGoMaximumSyncResponseSize = 10240;
WOWatchDogRequestTimeout = 60;
WOWorkersCount = 10;

Now in order to find the cause for this ridiculous amount of memory being used, strace has been used.
We see:

strace: Process 28020 attached
brk(0x560f8b0c0000) = 0x560f8b0c0000
brk(0x560f8b0e1000) = 0x560f8b0e1000
sendto(13, "]\0\0\0\3SELECT FROM sogo_cache_folder_user WHERE cpath = '/0719227322A744D180EEC2476AC6FA65';", 97, MSG
recvfrom(13, 0x560f4ea0a2f0, 16384, MSG_DONTWAIT, NULL, NULL) = -1 EAGAIN (Die Ressource ist zur Zeit nicht verfügbar)
poll([{fd=13, events=POLLIN}], 1, -1) = 1 ([{fd=13, revents=POLLIN}])
recvfrom(13, "\2\0\0\1\10\1[\0\0\2\3def\4sogo\32sogo_cache_folder_user\32sogo_cache_folder_user\6c_path\6c_path\0\f!
recvfrom(13, "Y1N2Q1\nZjAwMDBl...
brk(0x560f8b125000) = 0x560f8b125000
recvfrom(13, "\5\0\0\f\376\0\0\2\0", 16384, MSG_DONTWAIT, NULL, NULL) = 9
brk(0x560f8b17d000) = 0x560f8b17d000
brk(0x560f8b1a9000) = 0x560f8b1a9000
brk(0x560f8b1d5000) = 0x560f8b1d5000
brk(0x560f8b1f6000) = 0x560f8b1f6000
brk(0x560f8b217000) = 0x560f8b217000
sendto(13, "]\0\0\0\3SELECT
FROM sogo_cache_folder_user WHERE cpath = '/0719227322A744D180EEC2476AC6FA65';", 97, MSG
recvfrom(13, 0x560f4ea0a2f0, 16384, MSG_DONTWAIT, NULL, NULL) = -1 EAGAIN (Die Ressource ist zur Zeit nicht verfügbar)
poll([{fd=13, events=POLLIN}], 1, -1) = 1 ([{fd=13, revents=POLLIN}])
recvfrom(13, "\2\0\0\1\10\1[\0\0\2\3def\4sogo\32sogo_cache_folder_user\32sogo_cache_folder_user\6c_path\6c_path\0\f!
recvfrom(13, "Y1N2Q1\nZjAwMDBl...
brk(0x560f8b25b000) = 0x560f8b25b000
recvfrom(13, "\5\0\0\f\376\0\0\2\0", 16384, MSG_DONTWAIT, NULL, NULL) = 9
brk(0x560f8b2b4000) = 0x560f8b2b4000
brk(0x560f8b2e0000) = 0x560f8b2e0000
brk(0x560f8b30c000) = 0x560f8b30c000
brk(0x560f8b32d000) = 0x560f8b32d000
brk(0x560f8b34e000) = 0x560f8b34e000
sendto(13, "]\0\0\0\3SELECT * FROM sogo_cache_folder_user WHERE cpath = '/0719227322A744D180EEC2476AC6FA65';", 97, MSG
recvfrom(13, 0x560f4ea0a2f0, 16384, MSG_DONTWAIT, NULL, NULL) = -1 EAGAIN (Die Ressource ist zur Zeit nicht verfügbar)
poll([{fd=13, events=POLLIN}], 1, -1) = 1 ([{fd=13, revents=POLLIN}])
recvfrom(13, "\2\0\0\1\10\1[\0\0\2\3def\4sogo\32sogo_cache_folder_user\32sogo_cache_folder_user\6c_path\6c_path\0\f!
recvfrom(13, "Y1N2Q1\nZjAwMDBl...
brk(0x560f8b392000) = 0x560f8b392000
recvfrom(13, "\5\0\0\f\376\0\0\2\0", 16384, MSG_DONTWAIT, NULL, NULL) = 9
brk(0x560f8b3ea000) = 0x560f8b3ea000
brk(0x560f8b416000) = 0x560f8b416000
brk(0x560f8b442000) = 0x560f8b442000
brk(0x560f8b463000) = 0x560f8b463000
brk(0x560f8b484000) = 0x560f8b484000

...
This goes on and on, presumably one call for each folder and this is just the Root path folder, not the
actual folder!
...

sendto(13, "]\0\0\0\3SELECT * FROM sogo_cache_folder_user WHERE cpath = '/0719227322A744D180EEC2476AC6FA65';", 97, MSG
recvfrom(13, 0x560f4ea0a2f0, 16384, MSG_DONTWAIT, NULL, NULL) = -1 EAGAIN (Die Ressource ist zur Zeit nicht verfügbar)
poll([{fd=13, events=POLLIN}], 1, -1) = 1 ([{fd=13, revents=POLLIN}])
recvfrom(13, "\2\0\0\1\10\1[\0\0\2\3def\4sogo\32sogo_cache_folder_user\32sogo_cache_folder_user\6c_path\6c_path\0\f!
recvfrom(13, "Y1N2Q1\nZjAwMDBlNDk2ZjljZQB0bQAAEFN5bmNSZXF1ZXN0K21haWwvNzA1MDExMDY0NmI1MTk2NTdk\nNWYwMDAwZTQ5NmY5Y2UAdG0AABBT
brk(0x560fa5248000) = 0x560fa5248000
recvfrom(13, "\5\0\0\f\376\0\0\2\0", 16384, MSG_DONTWAIT, NULL, NULL) = 9
brk(0x560fa52a0000) = 0x560fa52a0000
brk(0x560fa52cc000) = 0x560fa52cc000
brk(0x560fa52f8000) = 0x560fa52f8000
brk(0x560fa5319000) = 0x560fa5319000
brk(0x560fa533a000) = 0x560fa533a000

MariaDB [sogo]> select length(c_content) FROM sogo_cache_folder_username WHERE c_path = '/0719227322A744D180EEC2476AC6FA65';
+-------------------+
| length(c_content) |
+-------------------+
| 180257 |
+-------------------+

180kb Expands to about 1MB in memory according to brk()! Quite a lot!

So if we assume 1100 folders and 1 call for each folder, we are wasting 1.1 GB without loading the actual folder object.
Then it goes on with loading the actual cached folder objects:

sendto(12, "71 status \"INBOX.Archiv.Sample\" (UIDVALIDITY)", 44, MSG_NOSIGNAL, NULL, 0) = 44
sendto(12, "\r\n", 2, MSG_NOSIGNAL, NULL, 0) = 2
recvfrom(12, 0x560f4d603c20, 512, 0, NULL, NULL) = -1 EAGAIN (Die Ressource ist zur Zeit nicht verfügbar)
poll([{fd=12, events=POLLRDNORM}], 1, 3600000) = 1 ([{fd=12, revents=POLLRDNORM}])
recvfrom(12, " STATUS INBOX.Archiv.Sample (UIDVALIDITY 1696172129)\r\n71 OK Status completed (0.001 + 0.000 secs).\r\n", 512
sendto(13, "\204\0\0\0\3SELECT
FROM sogo_cache_folder_user WHERE c_path = '/0719227322A744D180EEC2476AC6FA65+folder00c
recvfrom(13, 0x560fa5961d80, 16384, MSG_DONTWAIT, NULL, NULL) = -1 EAGAIN (Die Ressource ist zur Zeit nicht verfügbar)
poll([{fd=13, events=POLLIN}], 1, -1) = 1 ([{fd=13, revents=POLLIN}])
recvfrom(13, "\2\0\0\1\10\1[\0\0\2\3def\4sogo\32sogo_cache_folder_user\32sogo_cache_folder_user\6c_path\6c_path\0\f!
sendto(13, "\226\0\0\0\3SELECT * FROM sogo_cache_folder_user WHERE c_path = '/0719227322A744D180EEC2476AC6FA65+folder00c
recvfrom(13, 0x560fa5961d80, 16384, MSG_DONTWAIT, NULL, NULL) = -1 EAGAIN (Die Ressource ist zur Zeit nicht verfügbar)
poll([{fd=13, events=POLLIN}], 1, -1) = 1 ([{fd=13, revents=POLLIN}])
recvfrom(13, "\2\0\0\1\10\1[\0\0\2\3def\4sogo\32sogo_cache_folder_user\32sogo_cache_folder_user\6c_path\6c_path\0\f!
poll([{fd=12, events=POLLIN}], 1, 5) = 0 (Timeout)
sendto(12, "72 unselect", 11, MSG_NOSIGNAL, NULL, 0) = 11
sendto(12, "\r\n", 2, MSG_NOSIGNAL, NULL, 0) = 2
recvfrom(12, 0x560f4d603c20, 512, 0, NULL, NULL) = -1 EAGAIN (Die Ressource ist zur Zeit nicht verfügbar)
poll([{fd=12, events=POLLRDNORM}], 1, 3600000) = 1 ([{fd=12, revents=POLLRDNORM}])
recvfrom(12, "72 OK Unselect completed (0.001 + 0.001 secs).\r\n", 512, 0, NULL, NULL) = 48
sendto(12, "73 select \"INBOX.Archiv.Sample\"", 30, MSG_NOSIGNAL, NULL, 0) = 30
sendto(12, "\r\n", 2, MSG_NOSIGNAL, NULL, 0) = 2
recvfrom(12, 0x560f4d603c20, 512, 0, NULL, NULL) = -1 EAGAIN (Die Ressource ist zur Zeit nicht verfügbar)
poll([{fd=12, events=POLLRDNORM}], 1, 3600000) = 1 ([{fd=12, revents=POLLRDNORM}])
recvfrom(12, " FLAGS (\Answered \Flagged \Deleted \Seen \Draft)\r\n OK [PERMANENTFLAGS (\Answered \Flagged \Delete
sendto(13, "\226\0\0\0\3SELECT FROM sogo_cache_folder_user WHERE c_path = '/0719227322A744D180EEC2476AC6FA65+folder00c
recvfrom(13, 0x560fa5961d80, 16384, MSG_DONTWAIT, NULL, NULL) = -1 EAGAIN (Die Ressource ist zur Zeit nicht verfügbar)
poll([{fd=13, events=POLLIN}], 1, -1) = 1 ([{fd=13, revents=POLLIN}])
recvfrom(13, "\2\0\0\1\10\1[\0\0\2\3def\4sogo\32sogo_cache_folder_user\32sogo_cache_folder_user\6c_path\6c_path\0\f!
poll([{fd=12, events=POLLIN}], 1, 5) = 0 (Timeout)
poll([{fd=12, events=POLLIN}], 1, 5) = 0 (Timeout)
poll([{fd=12, events=POLLIN}], 1, 5) = 0 (Timeout)
poll([{fd=12, events=POLLIN}], 1, 5) = 0 (Timeout)
poll([{fd=12, events=POLLIN}], 1, 5) = 0 (Timeout)
poll([{fd=12, events=POLLIN}], 1, 5) = 0 (Timeout)
sendto(12, "74 status \"INBOX.Diverses.Sample2\" (UIDVALIDITY)", 46, MSG_NOSIGNAL, NULL, 0) = 46
sendto(12, "\r\n", 2, MSG_NOSIGNAL, NULL, 0) = 2
recvfrom(12, "
STATUS INBOX.Diverses.Sample2 (UIDVALIDITY 1696171750)\r\n74 OK Status completed (0.001 + 0.000 secs).\r\n", 5
brk(0x560fa66d7000) = 0x560fa66d7000

The allocated memory for these calls isn't that much as above, judging by brk(), some use more, some less,
according to size, but usual around a few hundered kb.
Together with the additional 1MB per folder from above, it is clear, that it blows up with not enough memory.

Here is what I could spot with the debugger:
(please refer to attachment, as pasting it here causes internal sever error due to known problems with filtering html tags)

I don't know anything about Objective-C memory management, as I only understand C, which is
far simple with its malloc/free functions, but I guess the statement

globalMetadata = [self globalMetadataForDevice];

cannot just be put outside the loop and one needs to have a "fresh" state for every folder to sync?
But as can be seen in strace, it clearly leaks loads of memory by doing so.
Do we just need a RELEASE(globalMetadata) at the end of the loop?

Whatever, the current behaviour makes EAS barely usable on large mailboxes with a lot of folders
in its folder structure and causes severe problems for me.

Steps To Reproduce

Create a mailbox with approx. 1000 folders and try to sync it with i.e. Microsoft Outlook via EAS protocol
Set SxVMemLimit <= 1024;

Additional Information

Even though I set priority "Normal", it currently makes it impossible for me to properly use EAS sync due to this problem as it bails out on every sync.

TagsNo tags attached.

Activities

leecher

leecher

2023-10-05 23:07

reporter   ~0017340

Uploading .txt file with stacktrace causes an internal Server error.
How to upload it?

leecher

leecher

2023-10-05 23:08

reporter   ~0017341

0000001 0x00007f97c23f9ebe in -[NSString(Base64Coding) dataByDecodingBase64] (self=0x560fa059fe60,
_cmd=0x7f97c2ea9be0 <_OBJC_SELECTOR_TABLE+384>) at NGBase64Coding.m:158
0000002 0x00007f97c2e020e7 in -[SOGoCacheGCSObject setupFromRecord:] (self=0x560fa0584130,
_cmd=0x7f97c2ea9e80 <_OBJC_SELECTOR_TABLE+1056>, record=0x560fa05867b0) at SOGoCacheGCSObject.m:182
0000003 0x00007f97c2e038ba in -[SOGoCacheGCSObject reloadIfNeeded] (self=0x560fa0584130,
_cmd=0x7f97bd788f70 <_OBJC_SELECTOR_TABLE+272>) at SOGoCacheGCSObject.m:489
0000004 0x00007f97bd731bb9 in -[SOGoActiveSyncDispatcher globalMetadataForDevice] (self=0x560f4d518b00,
_cmd=0x7f97bd78d8e0 <_OBJC_SELECTOR_TABLE+480>) at SOGoActiveSyncDispatcher.m:210
0000005 0x00007f97bd760b9b in -[SOGoActiveSyncDispatcher(Sync) processSync:inResponse:] (self=0x560f4d518b00,
_cmd=0x560f4d0713f0, theDocumentElement=0x560f4d034fd0, theResponse=0x560f5b0cfe10)
at SOGoActiveSyncDispatcher+Sync.m:2639
0000006 0x00007f97bd750013 in -[SOGoActiveSyncDispatcher dispatchRequest:inResponse:context:] (self=0x560f4d518b00,
_cmd=0x7f97bd7e4d20 <_OBJC_SELECTOR_TABLE+128>, theRequest=0x560f4e8fe280, theResponse=0x560f5b0cfe10,
theContext=0x560f4d4cc5f0) at SOGoActiveSyncDispatcher.m:4442
0000007 0x00007f97bd7dac2a in -[SOGoMicrosoftActiveSyncActions microsoftServerActiveSyncAction] (self=0x560f4d374e00,
_cmd=0x560f4d071420) at SOGoMicrosoftActiveSyncActions.m:59
0000008 0x00007f97c274b295 in -[WODirectAction performActionNamed:] (self=0x560f4d374e00,
_cmd=0x7f97c2922ca0 <_OBJC_SELECTOR_TABLE+928>, _actionName=0x560f4dae97f0) at WODirectAction.m:97
0000009 0x00007f97c27e51a6 in -[SoActionInvocation callOnObject:withPositionalParametersWhenNotNil:inContext:] (
self=0x560f4cc67620, _cmd=0x7f97c2922cd0 <_OBJC_SELECTOR_TABLE+976>, _client=0x560f4cf0a5a0, _positionalArgs=0x0,
_ctx=0x560f4d4cc5f0) at SoActionInvocation.m:300
0000010 0x00007f97c27e52ef in -[SoActionInvocation callOnObject:inContext:] (self=0x560f4cc67620,
_cmd=0x7f97c291c9a0 <_OBJC_SELECTOR_TABLE+672>, _client=0x560f4cf0a5a0, _ctx=0x560f4d4cc5f0)
at SoActionInvocation.m:318
0000011 0x00007f97c27df069 in -[SoObjectMethodDispatcher dispatchInContext:] (self=0x560f4d04ec60,
_cmd=0x7f97c291ee40 <_OBJC_SELECTOR_TABLE+1536>, _ctx=0x560f4d4cc5f0) at SoObjectMethodDispatcher.m:192
0000012 0x00007f97c27e1804 in -[SoObjectRequestHandler handleRequest:inContext:session:application:] (self=0x560f4cc401b0,
_cmd=0x7f97c28a8c10 <_OBJC_SELECTOR_TABLE+848>, _rq=0x560f4e8fe280, _ctx=0x560f4d4cc5f0, _sn=0x0, app=0x560f4cf0a5a0)
at SoObjectRequestHandler.m:584
0000013 0x00007f97c275e716 in -[WORequestHandler handleRequest:] (self=0x560f4cc401b0,
_cmd=0x7f97c2871190 <_OBJC_SELECTOR_TABLE+1616>, _request=0x560f4e8fe280) at WORequestHandler.m:240
0000014 0x00007f97c27198d6 in -[WOCoreApplication dispatchRequest:usingHandler:] (self=0x560f4cf0a5a0,
_cmd=0x7f97c28711e0 <_OBJC_SELECTOR_TABLE+1696>, _request=0x560f4e8fe280, handler=0x560f4cc401b0)
at WOCoreApplication.m:712
0000015 0x00007f97c2719c41 in -[WOCoreApplication dispatchRequest:] (self=0x560f4cf0a5a0,
_cmd=0x560f4bab06a0 <_OBJC_SELECTOR_TABLE+1664>, _request=0x560f4e8fe280) at WOCoreApplication.m:752
0000016 0x0000560f4baa68fc in -[SOGo dispatchRequest:] (self=0x560f4cf0a5a0, _cmd=0x7f97c290ed00 <_OBJC_SELECTOR_TABLE+1760>,
_request=0x560f4e8fe280) at SOGo.m:584
0000017 0x00007f97c27ce226 in -[WOHttpTransaction _run] (self=0x560f4d04ef30, _cmd=0x7f97c290ed30 <_OBJC_SELECTOR_TABLE+1808>)
at WOHttpTransaction.m:566
0000018 0x00007f97c27ce5ec in -[WOHttpTransaction run] (self=0x560f4d04ef30, _cmd=0x7f97c290b250 <_OBJC_SELECTOR_TABLE+1168>)
at WOHttpTransaction.m:619
0000019 0x00007f97c27c9cd3 in -[WOHttpAdaptor runConnection:] (self=0x560f4ce26e00,
_cmd=0x7f97c290b2f0 <_OBJC_SELECTOR_TABLE+1328>, _socket=0x560f4cf6e700) at WOHttpAdaptor.m:373
0000020 0x00007f97c27c9f2a in -[WOHttpAdaptor _handleAcceptedConnection:] (self=0x560f4ce26e00,
_cmd=0x7f97c290b300 <_OBJC_SELECTOR_TABLE+1344>, _connection=0x560f4cf6e700) at WOHttpAdaptor.m:407
0000021 0x00007f97c27ca3a3 in -[WOHttpAdaptor _handleConnection:] (self=0x560f4ce26e00,
_cmd=0x7f97c290b3a0 <_OBJC_SELECTOR_TABLE+1504>, connection=0x560f4cf6e700) at WOHttpAdaptor.m:466
0000022 0x00007f97c27ca6c1 in -[WOHttpAdaptor acceptControlMessage:] (self=0x560f4ce26e00,
_cmd=0x7f97c290b0f0 <_OBJC_SELECTOR_TABLE+816>, aNotification=0x560f5897b000) at WOHttpAdaptor.m:505
0000023 0x00007f97c1ec6ccb in -[NSNotificationCenter _postAndRelease:] (self=0x560f4cc29d90, _cmd=<optimized out>,
notification=0x560f5897b000) at ./Source/NSNotificationCenter.m:1198
0000024 0x00007f97c241cc6e in -[NSObject(FileObjectWatcher) receivedEvent:type:extra:forMode:] (self=0x560f4d07a9a0,

leecher

leecher

2023-10-05 23:09

reporter   ~0017342

As can be seen we have the following loop in SOGoActiveSyncDispatcher+Sync.m:

  // We first check of any of the collections we want to sync are already
  // in an other sync process. If that's the case, we do not do anything
  // and we return immediately. So we'll let the other sync process terminate
  for (j = 0; j &lt; [allCollections count]; j++)
    {
      aCollection = [allCollections objectAtIndex: j];
      globalMetadata = [self globalMetadataForDevice];

The globalMetadataForDevice causes the leak, it seems

leecher

leecher

2023-10-06 10:04

reporter   ~0017343

FYI, putting

globalMetadata = [self globalMetadataForDevice];

outside of the for-loops seems to have helped. Not sure if this is OK, but I guess there won't be a lot of updates between the point in time when DB gets queried and the 1000 folders are checked in the loop.

qhivert

qhivert

2023-10-06 11:50

administrator   ~0017344

Hello!
Interesting, with this change is it just "better" but the sync still failed or it works?

qhivert

qhivert

2023-10-06 11:53

administrator   ~0017345

Last edited: 2023-10-06 11:56

And also what happens with the uploading? is your file under 5Mb? If yes, could you send it to bugs@sogo.nu so I can test it?

leecher

leecher

2023-10-06 13:06

reporter   ~0017346

From what I can see, sync now works fine with the change. Maybe GNUStep framework frees the memory on function exit and not on reassignment of pointer in the loop?
MAYBE it's still leaking, but 1MB per request doesn't add up a lot compared with 1GB per request. However I don't think it does.
Running sogod for approx. 6 hours now and memory usage of each process is currently around 200-300MB, looks like mem usage now remains pretty stable and can be considered normal avg.
Would be interesting, if you can reproduce this leak on your side.

Uploading fails because it contained sourcecode to show the call chain and it didn't like the part with the sourcecode in it. I'll drop you a mail.

qhivert

qhivert

2023-10-11 08:18

administrator   ~0017359

Hello leecher,
Could you make a pull request on our repo with your modifications so we can discuss it and review it?

leecher

leecher

2023-10-11 19:03

reporter   ~0017368

Don't you want to try to reproduce it first?
Well, here you go: https://github.com/Alinto/sogo/pull/347

leecher

leecher

2023-10-13 14:54

reporter   ~0017377

After about a week, sogod processes are at approx. 700 MB memory usage each. May or may not be related, any hint on how to find out what is leaking here?

sebastien

sebastien

2023-10-18 07:03

administrator   ~0017386

Commit : https://github.com/Alinto/sogo/commit/063fb2be3d39c7e12d3bd260f0116707efbb559d

Thank you @leecher

Sebastien

Issue History

Date Modified Username Field Change
2023-10-05 23:05 leecher New Issue
2023-10-05 23:07 leecher Note Added: 0017340
2023-10-05 23:08 leecher Note Added: 0017341
2023-10-05 23:09 leecher Note Added: 0017342
2023-10-06 10:04 leecher Note Added: 0017343
2023-10-06 11:50 qhivert Note Added: 0017344
2023-10-06 11:53 qhivert Note Added: 0017345
2023-10-06 11:53 qhivert Assigned To => qhivert
2023-10-06 11:53 qhivert Status new => feedback
2023-10-06 11:56 qhivert Note Edited: 0017345
2023-10-06 13:06 leecher Note Added: 0017346
2023-10-06 13:06 leecher Status feedback => assigned
2023-10-11 08:18 qhivert Note Added: 0017359
2023-10-11 08:18 qhivert Status assigned => feedback
2023-10-11 19:03 leecher Note Added: 0017368
2023-10-11 19:03 leecher Status feedback => assigned
2023-10-13 14:54 leecher Note Added: 0017377
2023-10-18 07:03 sebastien Note Added: 0017386
2023-10-18 07:03 sebastien Status assigned => resolved
2023-10-18 07:03 sebastien Resolution open => fixed
2023-10-18 07:03 sebastien Fixed in Version => 5.10.0
2023-12-13 12:56 qhivert Fixed in Version 5.10.0 => 5.9.1
2024-02-09 10:39 qhivert Status resolved => closed