![如何检测虚拟机冻结](https://linux22.com/image/646838/%E5%A6%82%E4%BD%95%E6%A3%80%E6%B5%8B%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%86%BB%E7%BB%93.png)
在云平台上,您经常会听说由于邻近虚拟机负载过高、以太网磁盘超额认购、备份或实时迁移到其他硬件,虚拟机可能会暂时“冻结”。
我怀疑这种情况发生在我们某个云提供商的 Ubuntu 虚拟机上,我不想公开羞辱它。
每天晚上外部监控服务都无法使用。机器本身在负载、流量等方面看起来都很健康。但提供商表示网络没有问题。
我希望能够证明(反证)虚拟机冻结导致了这些寻呼机的出现。
我有一个想法,就是每秒将日期写入日志,在短暂不可用之后查看是否跳过了一个“节拍”。
但是,这似乎有缺陷,因为如果虚拟机维护自己的时钟并允许主机硬件发生偏移,该怎么办?
如果我们的内部时钟与虚拟机一起冻结,我们仍然会在日志文件中看到一个不错的秒数序列,而时钟现在落后于实际时间。
有没有更好的方法/工具可以用来确定机器是否冻结?
我猜想真实时间和我们的时间会有所暗示,但话又说回来,时钟漂移还有其他原因。
答案1
我认为您每秒将时间写入日志文件的做法是正确的,但出于您指出的原因,这种方法可能并不可靠。除了将时间写入本地磁盘之外,为什么不让您的 cron 进程通过网络联系到已知的稳定系统并让该系统将请求记录到磁盘呢?假设您正在向系统发出 http 请求并且该系统正在记录请求,那么像 wget 这样简单的东西就可以起作用。当然,您理想情况下希望目标系统相对“接近”您怀疑在网络方面存在问题的系统,但这至少可以帮助您获得一些调试数据。
答案2
您可以使用 Nagios,这是一种 IT 监控解决方案。借助它,您可以检查CPU 负载(以及许多其他事情),并通过邮件或 Web 控制台接收警报。您必须在您的 PC 中安装服务器,并在虚拟机中安装远程插件执行器。
这是一个非常酷的教程: http://www.tecmint.com/how-to-add-linux-host-to-nagios-monitoring-server/
答案3
我会从外部主机 ping 虚拟机。如果虚拟机冻结,其网络堆栈也应该冻结,并且应该显示在记录的 ping 序列中。