Назад | Перейти на главную страницу

В чем причина сбоев процессов imapd?

У нас есть почтовый сервер Mac OS X 10.5 Leopard Server, который недавно в эти выходные начал получать проблемы с почтовыми ящиками IMAP, имеющими "недопустимый формат [ы]". Выяснилось, что на томе, содержащем данные IMAP, было некоторое количество плохих блоков, и проблема не возникла повторно после восстановления тома и поврежденных почтовых ящиков. Однако новая проблема, которая сохраняется, часто дает сбой. imaps процессы и постоянно увеличивающиеся db4 "шкафчики" ошибки, подобные следующим:

Apr 13 17:01:12 host lmtpunix[31509]: DBERROR db4: 1134 lockers

Ошибки при сбое imaps процессы из /var/log/system.log являются следующими:

Apr 12 13:43:10 host imaps[11792]: starttls: TLSv1 with cipher AES128-SHA (128/128 bits new) no authentication
Apr 12 13:43:12 host imaps[11792]: starttls: TLSv1 with cipher AES128-SHA (128/128 bits new) no authentication
Apr 12 13:43:13 host imaps[11792]: login: pool-72-92-XXX-XXX.burl.east.myfairpoint.net [72.92.XXX.XXX] user3 CRAM-MD5+TLS User logged in
Apr 12 13:43:15 host ReportCrash[14362]: Formulating crash report for process imapd[11792]
Apr 12 13:43:15 host master[94896]: process 11792 exited, signaled to death by 11
Apr 12 13:43:15 host ReportCrash[14362]: Saved crashreport to /Library/Logs/CrashReporter/imapd_2011-04-12-134315_host.crash using uid: 0 gid: 0, euid: 0 egid: 0

И следующее из /var/log/mailaccess.log:

Apr 12 13:43:10 host imaps[11792]: accepted connection
Apr 12 13:43:10 host imaps[11792]: mydelete: starting txn 2147495107
Apr 12 13:43:10 host imaps[11792]: mydelete: committing txn 2147495107
Apr 12 13:43:10 host imaps[11792]: mystore: starting txn 2147495108
Apr 12 13:43:10 host imaps[11792]: mystore: committing txn 2147495108
Apr 12 13:43:10 host imaps[11792]: starttls: TLSv1 with cipher AES128-SHA (128/128 bits new) no authentication
Apr 12 13:43:12 host imaps[11792]: accepted connection
Apr 12 13:43:12 host imaps[11792]: mydelete: starting txn 2147495112
Apr 12 13:43:12 host imaps[11792]: mydelete: committing txn 2147495112
Apr 12 13:43:12 host imaps[11792]: mystore: starting txn 2147495113
Apr 12 13:43:12 host imaps[11792]: mystore: committing txn 2147495113
Apr 12 13:43:12 host imaps[11792]: starttls: TLSv1 with cipher AES128-SHA (128/128 bits new) no authentication
Apr 12 13:43:12 host imaps[11792]: AOD: user options: no lookup required for: user3
Apr 12 13:43:13 host imaps[11792]: login: pool-72-92-XXX-XXX.burl.east.myfairpoint.net [72.92.149.161] user3 CRAM-MD5+TLS User logged in
Apr 12 13:43:13 host imaps[11792]: quota set to "unlimited" for mailbox user.user3
Apr 12 13:43:13 host imaps[11792]: open: user user3 opened Other Users/listmaster
Apr 12 13:43:15 host master[94896]: process 11792 exited, signaled to death by 11
Apr 12 13:43:15 host master[94896]: service imaps pid 11792 in BUSY state: terminated abnormally
Apr 12 13:43:15 host master[94896]: process 11792 exited, signaled to death by 11
Apr 12 13:43:15 host master[94896]: service imaps pid 11792 in BUSY state: terminated abnormally

Все отчеты о сбоях выглядят следующим образом:

Process:         imapd [39069]
Path:            /usr/bin/cyrus/bin/imapd
Identifier:      imapd
Version:         ??? (???)
Code Type:       X86 (Native)
Parent Process:  master [38605]

Date/Time:       2011-04-13 18:25:24.068 -0400
OS Version:      Mac OS X Server 10.5.7 (9J61)
Report Version:  6
Anonymous UUID:  223C4DD1-2AE2-4381-8A28-DEB9082281A8

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000077a0ca64
Crashed Thread:  0

Thread 0 Crashed:
0   imapd                               0x0003090c process_records + 588
1   imapd                               0x00031362 mailbox_expunge + 2146
2   imapd                               0x00006fde cmd_close + 179
3   imapd                               0x00018cf8 cmdloop + 2940
4   imapd                               0x0001c1b7 service_main + 1498
5   imapd                               0x00002e73 main + 3502
6   imapd                               0x00002006 start + 54

Thread 0 crashed with X86 Thread State (32-bit):
  eax: 0x61766970  ebx: 0x000306cb  ecx: 0x00000008  edx: 0x77a0ca64
  edi: 0x00bfffa4  esi: 0x162a5fa4  ebp: 0xbfffad48  esp: 0xbfffac90
   ss: 0x0000001f  efl: 0x00010202  eip: 0x0003090c   cs: 0x00000017
   ds: 0x0000001f   es: 0x0000001f   fs: 0x00000000   gs: 0x00000037
  cr2: 0x77a0ca64

Да, они все врезаются process_records в mailbox_expunge.

На самом деле я не вижу никаких других ошибок в журналах, по крайней мере, которые кажутся так или иначе связаны с сбойными процессами или безобидны, например SQUAT failed to open index file и IOERROR: fstating sieve script /usr/sieve/u/user/defaultbc: No such file or directory.

Должен признать, я не перестраивал Other Users/listmaster почтовый ящик, ни user3 почтового ящика пока нет. Это не всегда один и тот же пользователь.

У нас есть некоторые пользователи, которые обнаружили, что отправленное электронное письмо не сохраняется в их почтовом ящике «Отправленные сообщения» и не сохранялось с даты первоначальной проблемы. Восстановление их почтового ящика (в настоящее время используется sudo mailbfr -m username поскольку он делает некоторые дополнительные разрешения, исправленные в дополнение к sudo /usr/bin/cyrus/bin/reconstruct -r user/username который я обычно запускал), похоже, позволяет сохранять в нем вновь отправленное электронное письмо, но мне не удается найти корреляцию между этой проблемой и этой (или любыми другими ошибками в журналах).

Любые предложения будут ценны. Действительно ли происходит сбой при попытке удалить сообщения? Должен ли я просто перестраивать почтовые ящики всех пользователей по отдельности? я действительно не хотят полностью перестраивать базу данных Cyrus и терять все помеченные / прочитанные статусы для всех сообщений.

Я давно решил эту проблему.

Я не помню точных команд, но я нашел способ разумно соотнести конкретный сбой с конкретным пользователем, после чего я мог бы запустить mailbfr -m для восстановления почтового ящика этого пользователя. В конце концов я смог восстановить все проблемные почтовые ящики и избавить сервер от проблемы.

Я считаю, что поврежденные блоки попали в неправильные индексы db, которые вызывают сбои при хранении новых данных. Кроме восстановления базы данных, вы мало что можете сделать. Вы можете создавать резервные копии файлов .seen пользователей и попробовать их использовать, но протестируйте эту идею на тестовом пользователе. Честно говоря, думаю, что харрдрайв с плохими блоками в любом случае нужно убрать с сервера как можно скорее.