我注意到我的一些 Linux 服务器上的 Linux 服务会挂起。我知道它挂起的唯一方法是依赖该服务的操作失败,当我重新启动该服务时,它无法停止,但它可以正常启动。
如果我这样做,service <servicename> status
它会说它正在运行,如果我这样做,ps -ef | grep <servicename>
它只显示该服务正在运行一个进程,这是正确的。
我还可以检查什么来了解它是否挂起?我正在尝试主动恢复这些服务,并确定它们挂起的原因。
作为参考,服务主要是 openstack-nova-compute 和 openstack-cinder-volume。我可以通过 rabbitMQ 检测到 cinder volume 服务开始建立,但 nova-compute 不会发生同样的事情。
这很难测试,因为就像我说的,我知道的唯一方法是,如果我尝试在 OpenStack 中的该节点上执行某些操作,并且失败或挂起,然后我重新启动服务。我有一个脚本正在运行以测试一些 OpenStack 服务,但使用 nova 调度程序可能需要一段时间才能在该主机上放置一个实例,或者主机可能已满,因此它永远不会在该主机上放置另一个实例。
答案1
使用 Zabbix 或 Nagios 等监控解决方案,为服务编写脚本/检查,包括监控进程存在性、进程 CPU 使用率、进程内存使用率、API 响应等
答案2
您可以编写一个脚本(cron 作业?)来检查要监控的 OpenStack 服务的日志的时间戳。我认为大多数服务都会执行某种审计并记录下来。任何操作也都应该生成日志。这样,如果日志一段时间后没有更新,您可以尝试重新启动服务。
正如您提到的,确定它们被挂起的原因至关重要。