我在 Linode.com 的虚拟机上有一个旧的 Slackware 9.0 邮件服务器。它上面托管了大约 130GB 的邮件,采用 Maildir 格式,位于分区的独立 Ext3 文件系统上(最大的文件系统为 92GB)。我正计划在 2 周左右的时间内进行服务器升级(使用最新的 Slackware 进行全新安装),但这不是一件容易的事,因此希望在情况恶化之前解决当前的问题。
在过去的几个月里,各种实用程序开始出现分段错误,一些进程偶尔会关闭。服务器上运行的主要应用程序是 qpsmtpd、qmail、Dovecot、ClamAV 和 bogofilter,服务器的系统负载通常很低,尽管大约有 300 个活跃的 IMAP 用户,每秒大约有 1 封邮件进入或离开系统。
大约 3 周前,虚拟机被移至 8GB Linode,问题似乎更加严重。我猜测,问题与运行 32 位操作系统有关,该操作系统的内存超过操作系统可以使用的内存。我对内核及其处理内存的方式了解有限。
ClamAV 每天重启 2-3 次,qpsmptpd(以 Perl 编写,但预先分叉)每隔几个小时重启一次。
另外,在 Maildirs 中运行“ls”时,会出现大量消息(文件)段错误,示例 strace 日志如下:
更多信息:
Linux 内核 = 3.9.3-x86
内存 = 8GB
$ free
total used free shared buffers cached
Mem: 8286016 3672400 4613616 0 266632 2442144
-/+ buffers/cache: 963624 7322392
Swap: 1048572 0 1048572
我将非常感谢您的指点,并乐意提供更多详细的诊断信息。
答案1
它在这里停止了:
mremap(0xb7504000, 3075489792, 745472, MREMAP_MAYMOVE) = -1 EINVAL (Invalid argument)
让我们看看 mremap 是如何工作的:
mremap(old_address, old_size, new_size, int flags);
EINVAL错误的描述:
EINVAL An invalid argument was given. Possible causes are:
old_address was not page aligned; a value other than
MREMAP_MAYMOVE or MREMAP_FIXED was specified in flags;
new_size was zero; new_size or new_address was invalid; or the
new address range specified by new_address and new_size
overlapped the old address range specified by old_address and
old_size; or MREMAP_FIXED was specified without also
specifying MREMAP_MAYMOVE.
看起来像是 SW 错误。解决方法是使用 64 位操作系统来扩展虚拟内存寻址。
你使用哪个版本的 clamav?