Sun Java System Messaging Server 6.3 管理指南

20.14.4 常见问题和解决方案

本节列出了常见的消息存储问题和解决方案:

20.14.4.1 Linux - Messaging Server Patch 120230-08 IMAP、POP 和 HTTP 服务器由于每个进程会话过多而未启动

安装该修补程序后,当您尝试启动 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

20.14.4.2 Messenger Express 或 Communications Express 未装入邮件页面

如果用户无法装入任何 Messenger Express 页面或Communications Express 邮件页面,则问题可能是数据压缩后被破坏。如果系统部署了过时的代理服务器,则有时可能会出现这种情况。要解决此问题,请尝试将 local.service.http.gzip.staticlocal.service.http.gzip.dynamic 设置为 0 以禁用数据压缩。如果这样能够解决问题,您可能需要更新代理服务器。

20.14.4.3 使用通配符模式的命令不起作用

某些 UNIX shell 可能需要用引号引起通配符参数,某些则不需要。例如,C shell 尝试将包含通配符(*、?)的参数扩展为文件,如果未找到任何匹配项,则将失败。这些模式匹配参数可能需要包含在引号中,以传递给命令(如 mboxutil)。

例如:

mboxutil -l -p user/usr44*

将在 Bourne shell 中运行,但在 tsch 和 C shell 中将失败。这些 shell 可能需要以下命令:

mboxutil -l -p "user/usr44*"

如果使用通配符模式的命令不起作用请验证是否需要为该 shell 的通配符使用引号。

20.14.4.4 未知/无效分区

如果用户邮箱被移动到刚创建的新分区并且尚未刷新或重新启动 Messaging Server,则用户将会从 Messenger Express 获得消息“未知/无效分区”。此问题仅在新分区中发生。如果现在向此新分区添加其他用户邮箱,则不必刷新/重新启动 Messaging Server。

20.14.4.5 用户邮箱目录问题

当消息存储的损坏仅限于少数用户且没有对系统造成全局损坏时,将出现用户邮箱问题。以下指导建议了识别、分析和解决用户邮箱目录问题的进程:

  1. 查看日志文件、错误消息或用户观察到的任何异常性能。

  2. 要保存调试信息和历史记录,请将整个 store_root/mboxlist/ 用户目录复制到消息存储以外的其他位置。

  3. 要查找可能导致问题的用户文件夹,请运行命令 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 实用程序部分。

  4. 找到文件夹后,请检查文件、检查权限并验证正确的文件大小。

  5. 使用 reconstruct -r(不使用 -n 选项)重建邮箱。

  6. 如果 reconstruct 未检测到您观察到的问题,您可以使用 reconstruct -r -f 命令强制执行对邮件文件夹的重建。

  7. 如果文件夹不在 mboxlist 目录 (store_root/mboxlist) 中,而是在 partition 目录 (store_root/partition) 中,则可能存在全局不一致性。在此情况下,应运行 reconstruct -m 命令。

  8. 如果前面的步骤不起作用,可以删除 store.idx 文件并再次运行 reconstruct 命令。


    注意 – 注意 –

    如果确定是在 reconstruct 命令无法找到的文件中有问题,则应仅删除 store.idx 文件。


  9. 如果问题限制为有问题的邮件,则应将邮件文件复制到消息存储以外的其他位置,并对 mailbox/ 目录运行命令 reconstruct -r

  10. 如果确定文件夹存在于磁盘(store_root/partition/ 目录)上,但是显然不在数据库(store_root/mboxlist/ 目录)中,则运行命令 reconstruct -m 以确保消息存储的一致性。

有关 reconstruct 命令的详细信息,请参见20.14.3 修复邮箱和邮箱数据库

20.14.4.6 store 守护程序不启动

如果 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 和该组。

20.14.4.7 由于邮箱溢出而无法传送邮件

消息存储对 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”)、建立归档系统,或者执行某些操作来控制邮箱大小。