我在 Ubuntu 10.10 上使用 VPS 来服务我的私人网站,Apache 2.2.16 一直崩溃,没有任何痕迹。服务器负载很轻,每天大约有 300 次访问。
为了解决这个问题,我设置了 monit 来定期检查 apache,但它也不断崩溃。
我已经检查了我的资源消耗并且远低于临界水平:
我检查了 /etc/apache2/errors.log 和 /var/log/syslog,但找不到任何错误痕迹。我几乎束手无策了。
我该如何调试这个问题?我使用的是相当便宜的 VPS。这可能是导致不稳定的原因吗?
答案1
您使用的是 Virtuozzo 实例,它实际上不是 VPS,而是一个容器,基本上是一个内核强制 chroot。从我使用它的经历来看,它的对象对象模型管理器非常狡猾。由于其工作方式,同一硬件节点上的另一个容器可能会占用内存,但由于您的进程在导致问题的进程之后启动,因此您的进程会被终止。
不幸的是,您只能看到主机服务器上的 OOM 情况,因此您必须与提供商核实。他们很可能超卖了您所使用的服务器上的内存,比他们应该卖的多一点。
引用Linux 内存管理器页:
因此,清算的理想候选对象是最近启动的非特权进程,该进程及其子进程使用大量内存,已得到良好处理,并且不执行原始 I/O。类似于 nohup 的并行内核构建(这不是一个坏选择,因为所有结果都保存到磁盘,并且当“make”终止时,很少会丢失工作)。
我的理论是,Virtuozzo 并未触碰主机内核中的 OOM 管理器,因此无法让其意识到正在运行虚拟化进程,因此它无法意识到正在终止“VPS”中的特权进程。不过,这只是猜测,因为我无法向负责 Virtuozzo 的 Parallels 核实。