[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#596031: responds to bad network by using up all memory



Package: offlineimap
Version: 6.2.0.2-2
Severity: important

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
26138 joey      20   0  330m 291m 3124 S   99 29.2   2:54.35 offlineimap     

This isn't good. Each time top updates, it grows by approximatly 4 mb, until
all memory is used.

Here's a transcript of this run:

joey@gnu:~>offlineimap
OfflineIMAP 6.2.0
Copyright (C) 2002 - 2009 John Goerzen <jgoerzen@complete.org>
This software comes with ABSOLUTELY NO WARRANTY; see the file
COPYING for details.  This is free software, and you are welcome
to distribute it under the conditions laid out in COPYING.
Account sync joey:
   ***** Processing account joey
Account sync joey:
   Copying folder structure from IMAP to Maildir
Account sync joey:
   Establishing connection to kitenet.net:993.
Folder sync joey[.]:
   Syncing INBOX: IMAP -> Maildir
Folder sync joey[.]:
   Deleting 1 messages (319244) in IMAP[INBOX], LocalStatus[.]
Copy message 319243 from .:
   Copy message 319243 IMAP[INBOX] -> Maildir[.], LocalStatus[.]
^CMain program terminated with exception:
Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.6/offlineimap/init.py", line 228, in startup
    threadutil.exitnotifymonitorloop(threadutil.threadexited)
  File "/usr/lib/pymodules/python2.6/offlineimap/threadutil.py", line 119, in exitnotifymonitorloop
    time.sleep(1)
KeyboardInterrupt

I got a strace of its main thread, this should include it running for a while
while memory was ballooning, and then being ctrl-c'd. Included below, it was
spewing a lot of futex calls. Something to do with threading gone awry?
(maxsyncaccounts and maxconnections are both 1)

At the same time, tcpdump showed absolutely no network traffic. I
suspect that my ppp dialup is losing some packets, or dropping, and so
offlineimap's connection stalls, more or less indefinitely. When this
happens, at least 3 times today offlineimap has going into this mode where
it balloons in size.

I've run offlineimap with the same configuration on less crummy networks,
for years, without noticing it using much memory. I did use it on dialup
for a long while some years back, and it also behaved ok.

[ I'd try to reproduce this with -d thread, but that causes an immediate
crash on startup:
RuntimeError: maximum recursion depth exceeded while calling a Python object ]


joey@gnu:~>strace -p 26138
Process 26138 attached - interrupt to quit
select(0, NULL, NULL, NULL, {0, 999244}) = 0 (Timeout)
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
select(0, NULL, NULL, NULL, {1, 0})     = 0 (Timeout)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
select(0, NULL, NULL, NULL, {1, 0})     = 0 (Timeout)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
select(0, NULL, NULL, NULL, {1, 0})     = 0 (Timeout)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
select(0, NULL, NULL, NULL, {1, 0})     = 0 (Timeout)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
select(0, NULL, NULL, NULL, {1, 0})     = 0 (Timeout)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
select(0, NULL, NULL, NULL, {1, 0})     = 0 (Timeout)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
select(0, NULL, NULL, NULL, {1, 0})     = 0 (Timeout)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
select(0, NULL, NULL, NULL, {1, 0})     = 0 (Timeout)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
select(0, NULL, NULL, NULL, {1, 0})     = ? ERESTARTNOHAND (To be restarted)
--- SIGWINCH (Window changed) @ 0 (0) ---
select(0, NULL, NULL, NULL, {0, 407953}) = 0 (Timeout)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
select(0, NULL, NULL, NULL, {1, 0})     = ? ERESTARTNOHAND (To be restarted)
--- SIGWINCH (Window changed) @ 0 (0) ---
select(0, NULL, NULL, NULL, {0, 930133}) = 0 (Timeout)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
select(0, NULL, NULL, NULL, {1, 0})     = ? ERESTARTNOHAND (To be restarted)
--- SIGWINCH (Window changed) @ 0 (0) ---
select(0, NULL, NULL, NULL, {0, 915129}) = ? ERESTARTNOHAND (To be restarted)
--- SIGINT (Interrupt) @ 0 (0) ---
sigreturn()                             = ? (mask now [])
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
stat64("/usr/lib/pymodules/python2.6/offlineimap/init.py", {st_mode=S_IFREG|0644, st_size=8850, ...}) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
open("/usr/lib/pymodules/python2.6/offlineimap/init.py", O_RDONLY|O_LARGEFILE) = 5
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
fstat64(5, {st_mode=S_IFREG|0644, st_size=8850, ...}) = 0
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
fstat64(5, {st_mode=S_IFREG|0644, st_size=8850, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb77f4000
read(5, "# OfflineIMAP initialization cod"..., 8192) = 8192
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
read(5, "gnal(signal.SIGUSR2,sig_handler)"..., 4096) = 658
read(5, "", 4096)                       = 0
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
close(5)                                = 0
munmap(0xb77f4000, 4096)                = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
stat64("/usr/lib/pymodules/python2.6/offlineimap/threadutil.py", {st_mode=S_IFREG|0644, st_size=10148, ...}) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
open("/usr/lib/pymodules/python2.6/offlineimap/threadutil.py", O_RDONLY|O_LARGEFILE) = 5
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
fstat64(5, {st_mode=S_IFREG|0644, st_size=10148, ...}) = 0
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
fstat64(5, {st_mode=S_IFREG|0644, st_size=10148, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb77f4000
read(5, "# Copyright (C) 2002, 2003 John "..., 8192) = 8192
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
read(5, "    ExitNotifyThread.run(self)\n "..., 4096) = 1956
read(5, "", 4096)                       = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
close(5)                                = 0
munmap(0xb77f4000, 4096)                = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
write(1, "Main program terminated with exc"..., 355) = 355
write(1, "No debug messages were logged fo"..., 46) = 46
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
rt_sigaction(SIGINT, {SIG_DFL, [], 0}, {0x8110720, [], 0}, 8) = 0
rt_sigaction(SIGHUP, {SIG_DFL, [], 0}, {0x8110720, [], 0}, 8) = 0
rt_sigaction(SIGUSR1, {SIG_DFL, [], 0}, {0x8110720, [], 0}, 8) = 0
rt_sigaction(SIGUSR2, {SIG_DFL, [], 0}, {0x8110720, [], 0}, 8) = 0
rt_sigaction(SIGTERM, {SIG_DFL, [], 0}, {0x8110720, [], 0}, 8) = 0
futex(0x89e4898, FUTEX_WAKE_PRIVATE, 1) = 1
close(3)                                = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x89e4898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0


-- System Information:
Debian Release: squeeze/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'stable'), (1, 'experimental')
Architecture: i386 (i686)

Kernel: Linux 2.6.32-5-686 (SMP w/2 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages offlineimap depends on:
ii  python                        2.6.6-1    interactive high-level object-orie
ii  python-support                1.0.9      automated rebuilding support for P

offlineimap recommends no packages.

Versions of packages offlineimap suggests:
ii  doc-base                      0.9.5      utilities to manage online documen
pn  python-kerberos               <none>     (no description available)

-- no debconf information

-- 
see shy jo

Attachment: signature.asc
Description: Digital signature


Reply to: