Linux 主机上出现多个分段错误

Linux 主机上出现多个分段错误

我在 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 日志如下:

http://pastie.org/8127239

更多信息:

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?

相关内容