Very slow deletion of user mailboxes?

Andrew McNamara andrewm at object-craft.com.au
Wed Jul 9 05:59:33 EDT 2003


We're having a problem where deletion of a user by the admin is taking
about 30 seconds. I've attached an abreviated truss of the imapd while
this is taking place. It shows a long string of:

    18679:  stat("/mail/vmb1/var/mailboxes.db", 0xFFBEEA68) = 0
    18679:  fcntl(5, F_SETLKW, 0xFFBEEAE0)                  = 0
    18679:  fcntl(5, F_SETLKW, 0xFFBEE9C8)                  = 0
    18679:  fstat(5, 0xFFBEEAF0)                            = 0

This is with 2.1.9, --with-mboxlist-db=skiplist --enable-fulldirhash.
Anyone have any suggestions on what might be wrong, or where to look next?

mailboxes.db is a bit under 2MB, and contains around 10k entries (as
counted by "ctl_mboxlist -d | wc -l").

The truss output with more context:

18679:  poll(0xFFBEEEE8, 1, 1800000)    (sleeping...)
18679:  poll(0xFFBEEEE8, 1, 1800000)                    = 1
18679:  time()                                          = 1057743572
18679:  read(0, " 2   d e l e t e   u s e".., 4096)     = 36
18679:  fcntl(5, F_SETLKW, 0xFFBEE920)                  = 0
18679:  fstat(5, 0xFFBEEA48)                            = 0
18679:  stat("/mail/vmb1/var/mailboxes.db", 0xFFBEE9C0) = 0
18679:  fcntl(5, F_SETLKW, 0xFFBEEA38)                  = 0
18679:  open("/mail/vmb1/spool/A/user/test9772__foo_net_au/cyrus.header", O_RDWR) = 9
18679:  fstat(9, 0xFFBEDAD8)                            = 0
18679:  mmap(0x00000000, 203, PROT_READ, MAP_SHARED, 9, 0) = 0xFEFF0000
18679:  fcntl(9, F_SETLKW, 0xFFBEDA30)                  = 0
18679:  fstat(9, 0xFFBEDAD8)                            = 0
18679:  stat("/mail/vmb1/spool/A/user/test9772__foo_net_au/cyrus.header", 0xFFBED9A8) = 0
18679:  open("/mail/vmb1/spool/A/user/test9772__foo_net_au/cyrus.index", O_RDWR) = 10
18679:  fstat(10, 0xFFBED9D8)                           = 0
18679:  mmap(0x00000000, 16384, PROT_READ, MAP_SHARED, 10, 0) = 0xFED70000
18679:  open("/mail/vmb1/spool/A/user/test9772__foo_net_au/cyrus.cache", O_RDWR) = 11
18679:  fstat(11, 0xFFBEDAD8)                           = 0
18679:  mmap(0x00000000, 16384, PROT_READ, MAP_SHARED, 11, 0) = 0xFED60000
18679:  fstat(10, 0xFFBED9D8)                           = 0
18679:  fcntl(10, F_SETLKW, 0xFFBED9B8)                 = 0
18679:  fstat(10, 0xFFBEDAD8)                           = 0
18679:  stat("/mail/vmb1/spool/A/user/test9772__foo_net_au/cyrus.index", 0xFFBEDA50) = 0
18679:  fstat(10, 0xFFBED958)                           = 0
18679:  fcntl(5, F_SETLKW, 0xFFBEE9C0)                  = 0
18679:  fstat(5, 0xFFBEEA68)                            = 0
18679:  stat("/mail/vmb1/var/mailboxes.db", 0xFFBEE938) = 0
18679:  lseek(5, 987556, SEEK_SET)                      = 987556
18679:  write(5, "\00F1214", 4)                         = 4
18679:  lseek(5, 1959640, SEEK_SET)                     = 1959640
18679:  write(5, "\0\0\004\00F11AC", 8)                 = 8
18679:  fdsync(5, O_RDONLY|O_DSYNC)                     = 0
18679:  lseek(5, 1959648, SEEK_SET)                     = 1959648
18679:  write(5, "\0\0\0FF", 4)                         = 4
18679:  fdsync(5, O_RDONLY|O_DSYNC)                     = 0
18679:  fcntl(5, F_SETLKW, 0xFFBEEAC0)                  = 0
18679:  open("/mail/vmb1/var/quota/A/user.test9772__foo_net_au", O_RDWR) = 12
18679:  fcntl(12, F_SETLKW, 0xFFBECA38)                 = 0
18679:  fstat(12, 0xFFBECAD8)                           = 0
18679:  stat("/mail/vmb1/var/quota/A/user.test9772__foo_net_au", 0xFFBEC9B0) = 0
18679:  fstat(12, 0xFFBEB958)                           = 0
18679:  mmap(0x00000000, 10, PROT_READ, MAP_SHARED, 12, 0) = 0xFED50000
18679:  munmap(0xFED50000, 10)                          = 0
18679:  open("/mail/vmb1/var/quota/A/user.test9772__foo_net_au.NEW", O_RDWR|O_CREAT|O_TRUNC, 0666) = 13
18679:  fcntl(13, F_SETLKW, 0xFFBEB6C8)                 = 0
18679:  write(13, " 0\n 2 0 0 0 0\n", 8)                = 8
18679:  fdsync(13, O_RDONLY|O_SYNC)                     = 0
18679:  rename("/mail/vmb1/var/quota/A/user.test9772__foo_net_au.NEW", "/mail/vmb1/var/quota/A/user.test9772__foo_net_au") = 0
18679:  close(12)                                       = 0
18679:  fcntl(13, F_SETLKW, 0xFFBEDB38)                 = 0
18679:  open64("/mail/vmb1/spool/A/user/test9772__foo_net_au", O_RDONLY|O_NDELAY) = 12
18679:  fcntl(12, F_SETFD, 0x00000001)                  = 0
18679:  fstat64(12, 0xFFBEDAD8)                         = 0
18679:  getdents64(12, 0x0014A288, 1048)                = 168
18679:  unlink("/mail/vmb1/spool/A/user/test9772__foo_net_au/cyrus.header") = 0
18679:  unlink("/mail/vmb1/spool/A/user/test9772__foo_net_au/cyrus.index") = 0
18679:  unlink("/mail/vmb1/spool/A/user/test9772__foo_net_au/cyrus.cache") = 0
18679:  unlink("/mail/vmb1/spool/A/user/test9772__foo_net_au/1.") = 0
18679:  getdents64(12, 0x0014A288, 1048)                = 32
18679:  unlink("/mail/vmb1/spool/A/user/test9772__foo_net_au/.nfs0DA") = 0
18679:  getdents64(12, 0x0014A288, 1048)                = 0
18679:  close(12)                                       = 0
18679:  rmdir("/mail/vmb1/spool/A/user/test9772__foo_net_au") Err#17 EEXIST
18679:  close(9)                                        = 0
18679:  munmap(0xFEFF0000, 203)                         = 0
18679:  close(10)                                       = 0
18679:  munmap(0xFED70000, 16384)                       = 0
18679:  close(11)                                       = 0
18679:  munmap(0xFED60000, 16384)                       = 0
18679:  close(13)                                       = 0
18679:  fcntl(5, F_SETLKW, 0xFFBEEA48)                  = 0
18679:  fstat(5, 0xFFBEEB70)                            = 0
18679:  stat("/mail/vmb1/var/mailboxes.db", 0xFFBEEAE8) = 0
18679:  fcntl(5, F_SETLKW, 0xFFBEEB60)                  = 0
18679:  unlink("/mail/vmb1/var/user/A/test9772__foo_net_au.seen") Err#2 ENOENT
18679:  fstat(8, 0xFFBEEBE8)                            = 0
18679:  time()                                          = 1057743572
18679:  getpid()                                        = 18679 [7702]
18679:  putmsg(8, 0xFFBEE2A0, 0xFFBEE294, 0)            = 0
18679:  open("/var/run/syslog_door", O_RDONLY)          = 9
18679:  door_info(9, 0xFFBEE1D8)                        = 0
18679:  getpid()                                        = 18679 [7702]
18679:  door_call(9, 0xFFBEE1C0)                        = 0
18679:  close(9)                                        = 0
18679:  unlink("/mail/vmb1/var/user/A/test9772__foo_net_au.sub") Err#2 ENOENT
18679:  open64("/mail/vmb1/var/quota/A/", O_RDONLY|O_NDELAY) = 9
18679:  fcntl(9, F_SETFD, 0x00000001)                   = 0
18679:  fstat64(9, 0xFFBEEBB8)                          = 0
18679:  getdents64(9, 0x0014A288, 1048)                 = 960
18679:  getdents64(9, 0x0014A288, 1048)                 = 960
18679:  getdents64(9, 0x0014A288, 1048)                 = 960
18679:  getdents64(9, 0x0014A288, 1048)                 = 960
18679:  getdents64(9, 0x0014A288, 1048)                 = 928
18679:  unlink("/mail/vmb1/var/quota/A/user.test9772__foo_net_au") = 0
18679:  getdents64(9, 0x0014A288, 1048)                 = 1016
18679:  getdents64(9, 0x0014A288, 1048)                 = 976
18679:  getdents64(9, 0x0014A288, 1048)                 = 976
18679:  getdents64(9, 0x0014A288, 1048)                 = 968
18679:  getdents64(9, 0x0014A288, 1048)                 = 976
18679:  getdents64(9, 0x0014A288, 1048)                 = 992
18679:  getdents64(9, 0x0014A288, 1048)                 = 984
18679:  getdents64(9, 0x0014A288, 1048)                 = 960
18679:  getdents64(9, 0x0014A288, 1048)                 = 992
18679:  getdents64(9, 0x0014A288, 1048)                 = 984
18679:  getdents64(9, 0x0014A288, 1048)                 = 952
18679:  getdents64(9, 0x0014A288, 1048)                 = 968
18679:  getdents64(9, 0x0014A288, 1048)                 = 976
18679:  getdents64(9, 0x0014A288, 1048)                 = 984
18679:  getdents64(9, 0x0014A288, 1048)                 = 960
18679:  getdents64(9, 0x0014A288, 1048)                 = 968
18679:  getdents64(9, 0x0014A288, 1048)                 = 1008
18679:  getdents64(9, 0x0014A288, 1048)                 = 984
18679:  getdents64(9, 0x0014A288, 1048)                 = 952
18679:  getdents64(9, 0x0014A288, 1048)                 = 960
18679:  getdents64(9, 0x0014A288, 1048)                 = 992
18679:  getdents64(9, 0x0014A288, 1048)                 = 984
18679:  getdents64(9, 0x0014A288, 1048)                 = 1000
18679:  getdents64(9, 0x0014A288, 1048)                 = 968
18679:  getdents64(9, 0x0014A288, 1048)                 = 376
18679:  getdents64(9, 0x0014A288, 1048)                 = 0
18679:  close(9)                                        = 0
18679:  fcntl(5, F_SETLKW, 0xFFBEE9C8)                  = 0
18679:  fstat(5, 0xFFBEEAF0)                            = 0
18679:  stat("/mail/vmb1/var/mailboxes.db", 0xFFBEEA68) = 0
18679:  fcntl(5, F_SETLKW, 0xFFBEEAE0)                  = 0
18679:  fcntl(5, F_SETLKW, 0xFFBEE9C8)                  = 0
18679:  fstat(5, 0xFFBEEAF0)                            = 0
18679:  stat("/mail/vmb1/var/mailboxes.db", 0xFFBEEA68) = 0

[...last 4 lines repeated about 10k times, then...]

18679:  fcntl(5, F_SETLKW, 0xFFBEEAE0)                  = 0
18679:  fcntl(5, F_SETLKW, 0xFFBEE9C8)                  = 0
18679:  fstat(5, 0xFFBEEAF0)                            = 0
18679:  stat("/mail/vmb1/var/mailboxes.db", 0xFFBEEA68) = 0
18679:  fcntl(5, F_SETLKW, 0xFFBEEAE0)                  = 0
18679:  open64("/mail/vmb1/var/sieve/t/test9772__foo_net_au", O_RDONLY|O_NDELAY) Err#2 ENOENT
18679:  poll(0xFFBEEEE8, 1, 0)                          = 0
18679:  write(1, " 2   O K   C o m p l e t".., 16)      = 16
18679:  time()                                          = 1057743623
18679:  poll(0xFFBEEEE8, 1, 1800000)    (sleeping...)

-- 
Andrew McNamara, Senior Developer, Object Craft
http://www.object-craft.com.au/




More information about the Info-cyrus mailing list