今天我遇到了服务器问题,CPU 利用率为 100%。我必须硬重置服务器才能将其恢复,现在我正在尝试确定高负载的原因。
不幸的是,journalctl 在重新启动之前不会显示任何日志信息。我这样做了journalctl --verify
,它显示一个损坏的文件。我假设这与问题有关,但是如何查看损坏之前的日志?我尝试过journalctl --since yesterday
,甚至从两天前就尝试过,但仍然没有成功。
答案1
尝试创建一个相对较小的日志分区,并将其添加到选项和挂载路径/etc/fstab
中:sync
/var/log
...<previos fstab lines>...
UUID=<UUID of created partition> /var/log ext4 rw,sync 0 0
这将强制您的系统直接在块设备上写入日志,而不缓存写入,因此日志消息在出现时写入,并且不会在重新启动时被丢弃。但请记住,同步日志写入可能会非常消耗 IO,并且不适合在生产服务器上长期使用。
答案2
首先,我们来谈谈损坏(由 检测到的损坏journalctl --verify
)。
从磁盘格式不存在冗余的意义上来说,日志中的损坏是无法修复的。此外,在某些情况下,文件中间的损坏使其“尾部”不可读(这实际上是另一个主题)。但是,journald
永远不要写入不干净关闭的日志文件,因此不干净关闭导致的所有损坏都不会造成损害。
但这实际上是无关紧要的。
您可以使用 来查看上次启动的日志journalctl -b -1
。
你的情况的问题是你在硬件重置之前永远不会看到最后 N 个条目,因为块 I/O 通常是回写缓存的。除了使 I/O 同步之外,您对此无能为力。