本节列出了常见的消息存储问题和解决方案:
20.14.4.1 Linux - Messaging Server Patch 120230-08 IMAP、POP 和 HTTP 服务器由于每个进程会话过多而未启动
20.14.4.2 Messenger Express 或 Communications Express 未装入邮件页面
安装该修补程序后,当您尝试启动 Messaging Server 时,IMAP、POP 和 HTTP 服务器无法启动,并可能发送以下示例错误日志:
http server - log: [29/May/2006:17:44:37 +051800] usg197 httpd[6751]: General Critical: Not enough file descriptors to support 6000 sessions per process; Recommend ulimit -n 12851 or 87 sessions per process. pop server - log: [29/May/2006:17:44:37 +051800] usg197 popd[6749]: General Critical: Not enough file descriptors to support 600 sessions per process; Recommend ulimit -n 2651 or 58 sessions per process. Once these values setting in /opt/sun/messaging/sbin/configutil then imap server failed to start imap server - log: [29/May/2006:17:44:37 +051800] usg197 imapd[6747]: General Critical: Not enough file descriptors to support 4000 sessions per process; Recommend ulimit -n 12851 or 58 sessions per process. |
为所有三个服务器会话设置相应数目的文件描述符。通过向 /etc/sysctl.conf 添加类似以下代码的行并使用 sysctl -p 重读该文件,即可使用附加的文件描述符:
fs.file-max = 65536 |
还必须向 /etc/security/limits.conf 添加类似以下代码的行:
* soft nofile 65536 * hard nofile 65536 |
如果用户无法装入任何 Messenger Express 页面或Communications Express 邮件页面,则问题可能是数据压缩后被破坏。如果系统部署了过时的代理服务器,则有时可能会出现这种情况。要解决此问题,请尝试将 local.service.http.gzip.static 和 local.service.http.gzip.dynamic 设置为 0 以禁用数据压缩。如果这样能够解决问题,您可能需要更新代理服务器。
某些 UNIX shell 可能需要用引号引起通配符参数,某些则不需要。例如,C shell 尝试将包含通配符(*、?)的参数扩展为文件,如果未找到任何匹配项,则将失败。这些模式匹配参数可能需要包含在引号中,以传递给命令(如 mboxutil)。
例如:
mboxutil -l -p user/usr44*
将在 Bourne shell 中运行,但在 tsch 和 C shell 中将失败。这些 shell 可能需要以下命令:
mboxutil -l -p "user/usr44*"
如果使用通配符模式的命令不起作用请验证是否需要为该 shell 的通配符使用引号。
如果用户邮箱被移动到刚创建的新分区并且尚未刷新或重新启动 Messaging Server,则用户将会从 Messenger Express 获得消息“未知/无效分区”。此问题仅在新分区中发生。如果现在向此新分区添加其他用户邮箱,则不必刷新/重新启动 Messaging Server。
当消息存储的损坏仅限于少数用户且没有对系统造成全局损坏时,将出现用户邮箱问题。以下指导建议了识别、分析和解决用户邮箱目录问题的进程:
查看日志文件、错误消息或用户观察到的任何异常性能。
要保存调试信息和历史记录,请将整个 store_root/mboxlist/ 用户目录复制到消息存储以外的其他位置。
要查找可能导致问题的用户文件夹,请运行命令 reconstruct -r -n。如果使用 reconstruct 找不到该文件夹,则该文件夹可能不在 folder.db 中。
如果使用 reconstruct -r -n 命令找不到该文件夹,请使用 hashdir 命令确定位置。有关 hashdir 的详细信息,请参见20.11.2.3 hashdir 实用程序,以及《Sun Java System Messaging Server 6.3 Administration Reference》的 "Messaging Server Command-line Utilities" 一章中的 hashdir 实用程序部分。
找到文件夹后,请检查文件、检查权限并验证正确的文件大小。
使用 reconstruct -r(不使用 -n 选项)重建邮箱。
如果 reconstruct 未检测到您观察到的问题,您可以使用 reconstruct -r -f 命令强制执行对邮件文件夹的重建。
如果文件夹不在 mboxlist 目录 (store_root/mboxlist) 中,而是在 partition 目录 (store_root/partition) 中,则可能存在全局不一致性。在此情况下,应运行 reconstruct -m 命令。
如果前面的步骤不起作用,可以删除 store.idx 文件并再次运行 reconstruct 命令。
如果确定是在 reconstruct 命令无法找到的文件中有问题,则应仅删除 store.idx 文件。
如果问题限制为有问题的邮件,则应将邮件文件复制到消息存储以外的其他位置,并对 mailbox/ 目录运行命令 reconstruct -r。
如果确定文件夹存在于磁盘(store_root/partition/ 目录)上,但是显然不在数据库(store_root/mboxlist/ 目录)中,则运行命令 reconstruct -m 以确保消息存储的一致性。
有关 reconstruct 命令的详细信息,请参见20.14.3 修复邮箱和邮箱数据库。
如果 stored 不启动,并显示以下错误消息:
# msg-svr-base/sbin/start-msg msg-svr-base: Starting STORE daemon ...Fatal error: Cannot find group in name service |
这表示找不到 local.servergid 中配置的 UNIX 组。Stored 和其他命令需要将其 gid 设置到该组。有时 local.servergid 定义的组可能会被无意删除。在此情况下,请创建已删除的组,将 mailsrv 添加到该组,将 instance_root 及其文件的拥有权更改为 mailsrv 和该组。
消息存储对 store.idx 文件设置了 2 千兆字节的硬性限制,这等效于在一个邮箱(文件夹)中可以存放一百万封邮件。当邮箱增长到 store.idx 文件将超过 2 千兆字节的那一点时,用户将停止接收任何新的电子邮件。此外,处理该邮箱的其他进程(如 mapd、popd、mshttpd)的性能也会降低。
如果出现该问题,您将在 mail.log_current 中看到如下错误:
05-Oct-2005 16:09:09.63 ims-ms Q 7 ...System I/O error.Administrator, check server log for details.System I/O error.
此外,MTA 日志文件将出现如下错误:
[05/Oct/2005:16:09:09 +0900] jmail ims_master[20745]:Store Error:Unable to append cache for user/admin:File too large
通过查看用户消息存储目录中的文件,或者在 imta 查看更详细的信息,您可以准确地确定该问题。
应立即着手减小文件的大小。可以删除一些邮件,或者将一些邮件移动到另一个邮箱。要解决此问题,您也可以使用 mboxutil -r 重命名该文件夹,或者使用 mboxutil -d 删除该文件夹(请参见20.11.2.1 mboxutil 实用程序)。
从长远来看,您应该向用户通知邮箱大小限制、实现生存期策略(请参见20.9 设置自动删除邮件(过期和清除)功能)和配额策略(请参见20.8 关于消息存储配额)、通过设置 local.store.maxmessages 来设置邮箱限制(请参见《Sun Java System Messaging Server 6.3 Administration Reference》中的“configutil Parameters”)、建立归档系统,或者执行某些操作来控制邮箱大小。