本文档列出了 Fuchsia 设备可能会重新启动的原因。有些指标一目了然,而另一些则需要一些额外的背景信息。
大纲:
术语
非正常重启
不正常重启是指由内核响应错误(例如内核恐慌)而启动的重启,或由硬件在没有软件干预的情况下执行的重启,例如硬件监控计时器超时。
安全重启
正常重启是指由用户空间进程发起的重启。进程可能会因错误(例如设备温度过高)而启动重新启动,但 Fuchsia 应有机会进行有序关机。
列出的重新启动原因
内核崩溃
如果内核无法从内部错误中恢复,则该错误会被视为致命错误,系统将重新启动。
系统内存不足
如果内核检测到可用物理内存量低于某个阈值,系统会重新启动。内核不会在重新启动之前终止进程来尝试回收内存,这意味着单个进程可能会导致整个系统内存不足,并强制设备重新启动。
冷启动
如果设备在关机和重新启动之间断电的时间足够长,系统会判定为冷启动。
服务降级时间
当设备的电压降至可接受的阈值以下时,就会出现电压骤降。只有在设备的电源或与电源相关的硬件出现问题时,才会发生这种情况。
硬件看门狗超时
Zircon 会设置一个硬件看门狗计时器,如果在指定的时间段内未重置该计时器,则会重新启动设备。
软件监控计时器超时
如果有人设置了软件看门狗计时器,该计时器可能会重启设备。
短暂断电
如果设备在短时间内断电,例如用户拔下设备插头并快速重新插上,设备可能无法确定重启是冷启动,而会认为重启是短暂断电造成的。请务必注意,简短的定义没有定量衡量标准,并且取决于硬件。
用户请求
设备最终用户明确请求重新启动设备。
开发者请求
开发者启动了重新启动,通常是通过 shell 命令或类似接口(包括在自动化测试中)启动的。
系统更新
负责系统更新的组件必须更新无法临时更新的软件包或多个软件包。这些软件包通常称为基础软件包。
重试系统更新
负责系统更新的组件未能应用更新,因此设备会重新启动以重试(或可能还原更新)。
ZBI 交换
如果 Zircon 启动映像被替换,设备会重新启动以应用更改。
最高温度
负责电源管理的组件检测到设备温度过高,并且系统无法通过限制 CPU 或降低音量来充分降低设备温度。
会话失败
如果会话管理器无法重启崩溃的会话,或者会话确定自己已以不可恢复的方式失败,设备会重新启动。
严重组件故障
如果标记为 "on_terminate": "reboot"
的组件崩溃,设备会重新启动。
恢复出厂设置
将数据重置为出厂默认设置后,设备会重新启动。
根作业终止
如果用户空间根作业因其某个关键进程崩溃等原因而终止,设备会重新启动。
通用正常
平台可以知道重新启动是否正常,但无法区分是软件更新、用户请求还是某些更高级别的组件检测到设备过热。平台只知道重新启动是优雅的。
未知
在某些情况下,平台无法确定具体的重新启动原因,也无法确定重新启动是正常还是异常。
在哪里可以找到重新启动原因
Fuchsia 通过 FIDL 公开设备上次(重新)启动的原因,并在 Cobalt 和崩溃服务器上跟踪该原因。
原因
因特定组件中的错误而导致的重新启动具有崩溃签名,该签名将该组件归因于重新启动的原因。它们遵循一种通用模式,即组合重启原因和被认为对重启负责的组件(也称为“罪魁祸首”)。
重新启动的原因 | FIDL | Cobalt 事件 | 崩溃签名 |
---|---|---|---|
内核崩溃 | KERNEL_PANIC |
KernelPanic |
负责处理崩溃的函数,与用户空间崩溃报告完全一样 |
系统内存不足 | SYSTEM_OUT_OF_MEMORY |
SystemOutOfMemory |
fuchsia-oom 或 fuchsia-oom-$CULPRIT |
冷启动 | COLD |
Cold |
不适用* |
服务降级时间 | BROWNOUT |
Brownout |
fuchsia-brownout |
硬件看门狗超时 | HARDWARE_WATCHDOG_TIMEOUT |
HardwareWatchdogTimeout |
fuchsia-hw-watchdog-timeout |
软件监控计时器超时 | SOFTWARE_WATCHDOG_TIMEOUT |
SoftwareWatchdogTimeout |
fuchsia-sw-watchdog-timeout |
短暂断电 | BRIEF POWER LOSS |
BriefPowerLoss |
fuchsia-brief-power-loss |
用户请求 | USER_REQUEST |
UserRequest |
不适用* |
开发者请求 | DEVELOPER_REQUEST |
DeveloperRequest |
不适用* |
系统更新 | SYSTEM_UPDATE |
SystemUpdate |
不适用* |
重试系统更新 | RETRY_SYSTEM_UPDATE |
RetrySystemUpdate |
fuchsia-retry-system-update |
ZBI 交换 | ZBI_SWAP |
ZbiSwap |
不适用* |
最高温度 | HIGH_TEMPERATURE |
HighTemperature |
fuchsia-reboot-high-temperature |
会话失败 | SESSION_FAILURE |
SessionFailure |
fuchsia-session-failure |
严重组件故障 | CRITICAL_COMPONENT_FAILURE |
CriticalComponentFailure |
fuchsia-critical-component-failure 或 fuchsia-reboot-$CULPRIT-terminated |
恢复出厂设置 | FACTORY_DATA_RESET |
FactoryDataReset |
不适用* |
根作业终止 | `ROOT_JOB_TERMINATION | RootJobTermination |
fuchsia-root-job-termination 或 fuchsia-reboot-$CULPRIT-terminated |
通用正常 | graceful 字段设置为 true | GenericGraceful |
fuchsia-undetermined-userspace-reboot |
未知 | 未设置 graceful 字段 | Unknown |
fuchsia-reboot-log-not-parseable |
* 不是崩溃。\