我正在运行一个 linux 盒子(ubuntu),每隔几个月它就会冻结,我别无选择(SysRq-F 和其他键盘快捷键不起作用),只能重新启动它,从而丢失所有数据。
我想知道为什么内核不杀死占用内存或 CPU 的进程?
让系统保持冻结/无响应状态有什么意义?
答案1
如果 SysRq 组合键在系统“冻结”时不起作用,并且您已验证它们在系统正常运行时确实起作用,则问题比资源耗尽更严重。可能是内核错误;可能是间歇性硬件问题。需要更多信息。
如果系统是服务器级硬件,则可能有一个单独的管理处理器,可用于远程访问系统控制台、获取硬件问题警报或打开/关闭系统电源。即使更便宜的服务器系统也可能有某种硬件错误日志。您可能需要ipmitool
或可能需要特定于供应商的工具来访问它,但它可能会告诉您更多信息。
答案2
了解服务器的功能以及它拥有哪些资源会很有趣;可能需要调整某些配置或可能需要额外的资源来缓解服务器处于无响应状态的问题;或者某个进程经常被监控并在一段时间后重新启动;您的帖子不清楚,这将是第一种方法。
然而,作为恢复无响应服务器的对策,有所谓的看门狗。
如果机器是物理的,你甚至可以购买 Linux 内核支持的硬件看门狗。
一些物联网设备甚至在 SoC 中内置了看门狗。
对于物理服务器或虚拟机,您可以(我过去曾为有问题的服务器)配置软件看门狗(例如,学生服务器、进行计算甚至躲避硬币挖掘的机器(不是我自己!)) -因为我更喜欢重新启动而不是让这些服务无响应。
软件看门狗基本上是一个周期性中断,监视服务器的某些资源以及与之通信的应用程序。当配置的验证失败和/或应用程序停止发送数据时,它会强制重新启动服务器。
什么是看门狗定时器?
看门狗定时器是一种在检测到系统挂起时触发系统重置的设备。系统上运行的程序应该通过写入“服务脉冲”定期为看门狗定时器提供服务。如果看门狗在特定时间段内未得到服务,则看门狗认为系统已挂起,并触发系统重置。
什么是软狗?
通常,看门狗定时器作为附加卡或微控制器内的片上外设来实现。但如果没有硬件看门狗,Linux内核可以提供使用内核定时器实现的软件看门狗。
Linux看门狗机制
在Linux中,看门狗驱动程序向用户空间提供字符驱动程序接口。当一些数据写入看门狗驱动程序时,看门狗驱动程序为看门狗硬件提供服务。用户空间应用程序根据看门狗超时周期定期将一些数据写入看门狗驱动程序。如果由于某种原因用户空间应用程序挂起,看门狗设备不会得到服务,从而触发系统重置。
通常写入看门狗驱动程序的应用程序是看门狗守护程序,它监视系统中的进程以及其他参数,例如CPU利用率、内存利用率等。
软狗的工作原理
当软狗驱动程序打开时,软狗会安排一个内核定时器在指定的定时器裕度后到期。当一些数据写入驱动程序时,软狗驱动程序会重新调度定时器。用户空间看门狗守护程序定期写入驱动程序,并且计时器不断重新调度,因此永远不会调用计时器回调。如果看门狗守护程序停止写入驱动程序,则计时器到期并调用回调。在定时器回调中,系统重新启动。
也可以看看Debian - 软件包:watchdog - 系统健康检查器和软件/硬件看门狗处理程序
看门狗程序每十秒写入/dev/watchdog。如果设备已打开但在一分钟内未写入,机器将重新启动。当内核构建为支持“软件看门狗”(Debian 内核中的标准)或者机器配备了硬件看门狗(在这种情况下,该软件包也可用于“宠爱”它,重置其计时器)时,此功能可用)。
内核软件看门狗重新启动的能力将取决于机器的状态和中断。
看门狗工具本身会运行多项运行状况检查,并在系统状况不佳时采取适当的措施。
我还建议配置 syslog 守护进程,将日志发送到远程 syslog 服务器,以便在系统正常或不正常工作时可以仔细阅读日志。