☰
Linux系统日志查看与排查:从tail到journalctl
2026/10/10 6:45:45 网站建设 项目流程

1. 系统日志是什么:先理解日志的底层逻辑

很多刚接触 Linux 的人,第一次听到“系统日志”四个字,脑子里冒出来的多半是两个问题:日志到底存在哪儿?我能拿它干嘛?

说白了,系统日志就是 Linux 运行过程中自己记的“流水账”。内核、系统服务、应用进程、登录记录、硬件事件,全都会往里面写东西。机器不会说话,但它把所有重要动作和异常都记录了下来,等你哪天需要的时候翻出来看。

在 Linux 里,日志最核心的价值就一个:当系统出问题的时候,帮你回答“到底发生了什么”。比如某天凌晨服务器突然重启了,你对着屏幕一脸懵,这时候翻日志就能看到是内核 panic、电源异常、还是某进程把内存打满了。又比如某个服务启动失败了,错误信息不会自己蹦到你面前,但日志里一定写明了失败原因。

这套机制并不是 Linux 独有的发明——Windows 有事件查看器,网络设备有 Syslog 服务,但 Linux 的日志生态更加灵活,也更“程序员友好”。它不会用图形界面去修饰信息,而是把所有真相以文本或二进制格式原样铺开,方便你用各种命令行工具去检索、过滤、统计、甚至写脚本自动化处理。

围绕“查看日志”这个动作,整个生态大致分两个时代:老一代传统方案围绕/var/log下的纯文本文件展开,配合tail、grep、less这些命令使用;而新一代基于 systemd 的journald则引入了二进制日志系统,通过journalctl命令统一查询。两套体系目前在很多发行版上并存,各有适用场景,下面我都会讲到,但journalctl 一定是未来一段时间内你需要优先掌握的工具。

提示:刚上手的人不要急着把所有命令背下来。你先理解“日志在哪儿、怎么查看、怎么过滤”这三件事,比记住几十个参数重要得多。命令忘了可以看man,思路乱了才是真麻烦。

1.1 日志到底存在哪里:目录与文件

传统 Linux 日志集中存放在/var/log目录下。你执行ls /var/log,大概率会看到一堆文件,常见的几个核心文件我列在下面:

日志文件记录内容
/var/log/messages通用系统消息,大部分服务的运行记录都往这里写(面向 CentOS/RHEL 系)
/var/log/syslog相当于 messages 的 Debian/Ubuntu 系版本
/var/log/dmesg内核日志,包含硬件识别、驱动加载、启动早期信息
/var/log/secure安全相关日志,SSH 登录、sudo 授权、用户切换记录(CentOS/RHEL 系)
/var/log/auth.logDebian/Ubuntu 系的认证日志
/var/log/boot.log系统启动过程日志
/var/log/croncrontab 定时任务执行记录
/var/log/kern.log内核日志,和 dmesg 内容高度重叠但有区别

不同发行版的文件名有差异,这是很多人第一次查资料时被搞晕的地方。CentOS 里没找到/var/log/auth.log,因为认证信息写在 secure 文件里;Ubuntu 里没有 messages,因为对应的功能由 syslog 承担。做运维或排查问题,先搞清楚自己用的发行版属于哪个体系,能少走很多弯路。

另外注意,日志文件不是只有一份静态文本。很多日志会产生轮转(logrotate),目录里你会看到messages-20240101、messages.1.gz这样的历史归档。系统会根据配置定期切割旧日志并压缩保存,避免单个文件无限膨胀撑爆磁盘。这一点对长期排查和日志留痕非常重要——发生问题时,如果实时日志已经被轮转掉,就得去历史归档里翻。

1.2 内核日志与用户态日志:两种不同信息来源

日志信息按来源分,又可以分为两大类,理解这个区分对排查方向的选择很有帮助。

第一类是内核日志,由内核本身产生。启动过程中的硬件初始化、驱动加载、文件系统挂载、内存报错、磁盘 I/O 异常,全部走这条通道。早期内核维护了一个固定大小的环形缓冲区,每次新日志写入会覆盖最老的消息,这就是dmesg命令能直接读到的内容。启动阶段完整的内核输出还会被保存到/var/log/dmesg或 kern.log。这类日志的特点是时间跨度短、事件密度高,通常只在排查硬件或底层问题时才用得上。

第二类是用户态日志,由系统服务、应用进程、shell 脚本产生。比如 sshd 记录了一次远程登录、nginx 记了一次 500 响应、python 脚本报了一个 traceback、cron 执行结果写进了 cron 文件——这些都属于用户态。用户态日志通常会经过系统日志守护进程(syslogd/rsyslogd)统一接收、分类、写盘,也就是为什么大量服务的日志最终都汇聚到 messages 或 syslog 这个大池子里。

从排查顺序上说,先查用户态日志判断业务层面发生了什么,再深入内核日志确认有没有底层诱因,是一条比较稳妥的路径。大部分日常故障根本走不到内核日志那一步。

2. 经典方案:文件日志与三个高频命令

老一代 Linux 管理员退役之前,靠的是一套纯文件方案的看家本领。哪怕你现在主力用的是 journald,这套方法依然必须会——很多第三方服务的日志就是直接往/var/log里写文件,有些场景下 journald 根本参与不进来。

2.1 tail:看日志定式和实时滚动跟踪

tail是查看日志文件最常用的命令,没有之一。它默认输出文件的最后 10 行,比如:

tail /var/log/messages

这就把文件最后 10 行内容打出来了。但你基本不会满足于只输出一次——排查故障时,你想盯着日志变化看。这时候用-f参数进入“跟随模式”:

tail -f /var/log/messages

终端会持续输出新写入的行,直到你按Ctrl+C退出。这个操作在调试服务时是灵魂手段。比如 nginx 报错定位,我先开一个终端跑tail -f /var/log/nginx/error.log,然后另开窗口去复现故障,报错立刻就能滚动出来。

tail还有一个实战价值极高的参数-n,用来指定显示的行数。比如:

tail -n 300 /var/log/messages

查看最近 300 行。配合grep稍后再说,这套组合拳在日志量大的环境里比图形工具高效得多,实际使用中我很少去翻完整的大文件,几乎都是靠 tail 截取尾部来做短窗口分析。

注意:用 tail 看实时日志时,如果日志量特别大,比如每秒上百条输出,终端会疯狂刷屏,刚出现的有用信息直接被顶出去。遇到这种情况先别慌,把刷屏窗口的内容重定向到另一个文件里慢慢翻:tail -f /var/log/messages > /tmp/bf.log,跑几秒钟后 Ctrl+C,再取文件分析。这个技巧在并发量上来的生产环境很管用。

2.2 grep:从海量日志里挖出关键线索

日志文件动辄几万行,眼睛硬看根本不现实。grep就是你这双眼睛的“过滤器”。

最普通的用法是全文搜关键字:

grep -i "error" /var/log/messages

-i忽略大小写,避免 “Error”“ERROR”“error” 三种写法把你绊住。

实际排查中,我几乎不会直接全文 grep,都是先过滤这个文件里和故障相关的那一段,否则一个 “error” 能搜出来几千行无关匹配。更实用的做法是配合 tail 做“滚动窗口 + 关键字过滤”:

tail -n 500 /var/log/messages | grep -i "error"

先取最近 500 行原文,再过滤其中的 error 行。这一条命令在绝大多数日常定位场景里都能直接冲到大名,我甚至可以说,如果只教新同事三个排查命令,那一定是tail、grep和journalctl。

更深一级的用法是grep配合正则表达式提取上下文。比如想查某个时间段内 SSH 登录失败的情况:

grep "sshd.*Failed password" /var/log/secure

排除无关干扰用-v:

grep -v "healthcheck" /var/log/messages

把健康检查这类噪音筛掉,剩下的才是值得关注的信号。

2.3 less:大文件翻页阅读的正确姿势

有人问我,日志文件太大,用cat看直接刷屏怎么办?答案是永远不要用 cat 看大日志。正确工具是less,它把文件分页展示,支持键盘上下翻行,最关键是支持在文件里直接按/?搜索关键字,按n跳下一个匹配:

less /var/log/messages

进入 less 界面后,输入/failed回车,光标会跳到第一个匹配处,再按n继续往下找。按G直接跳到文件末尾(相当于看最新日志),按g回到文件开头。退出按q。

less 比 vim 更适合看日志的原因是无修改风险——你看得再花也不会误触按键把文件改了。配合 tail 和 grep,传统日志三件套就齐了。

2.4 dmesg:内核环形缓冲区里的硬件佐证

dmesg直接读取内核环形缓冲区中的消息,无需任何参数就能看全部:

dmesg | tail -n 50

实际使用中极少有人直接裸敲 dmesg,因为输出量太庞大了。最常见的是把它和 grep 组合,查找某个硬件相关的事件:

dmesg | grep -i "error" dmesg | grep -i "usb" dmesg | grep -i "oom"

dmesg显示的时间戳默认是系统启动后的秒数,看起来不太直观。可以用-T参数把它转成人类可读时间:

dmesg -T | grep -i "error"

关于 dmesg 和/var/log/dmesg文件的区别,简单说:dmesg 读的是那块内存缓冲里的当前状态,而/var/log/dmesg是开机早期那一时刻的保存快照。如果你需要倒查启动最初阶段的内核输出,去翻文件;如果你想看当前最新的内核事件,敲 dmesg。

3. 现代主力工具:journalctl 深度上手

从 CentOS 7、Ubuntu 15.04 开始,systemd 成了绝大多数发行版的初始化系统,与之配套的journald也顺势成为了日志管理的核心。journalctl就是查看 journald 日志的前端命令。

journald 的日志默认不是普通文本,而是存储在/var/log/journal/或/run/log/journal/下的二进制文件,好处是查询速度快、能保存结构化的字段信息(比如进程 PID、服务单元名、源码文件名、优先级),坏处是你没法直接用 tail 和 grep 看——strings 都救不回来。但 journalctl 提供了比传统文本过滤强大得多的查询能力。

3.1 起步:无参数查看与会话的日志边界

先看全部日志,直接执行:

journalctl

这条命令会输出当前会话可见的所有日志。因为输出量巨大,它默认会像 less 一样让你分页阅读,按/可以搜索、按q退出。裸跑毫无修饰的journalctl在实际运维中碰都别碰——太多行了。

判断当前 journal 日志占用容量、存放位置和磁盘配额限制,用:

journalctl --disk-usage

输出类似Logs take up 12.3G in the file system.这句话在排查磁盘空间问题时会频繁出现。

日志文件的总量受配置控制,默认可能在多少日志后限制大小,这个我们放到持久化小节展开。

3.2 时间过滤:按时间窗口切割日志流

日志查询最重要的事情之一,就是先把你关心的“窗口”圈出来。journalctl 对时间的支持非常灵活,先说最常用的两种。

指定起始时间:

journalctl --since "2024-06-01 08:30:00"

指定时间范围:

journalctl --since "2024-06-01 08:30:00" --until "2024-06-01 10:00:00"

相对时间也很实用。比如看最近 1 小时的日志:

journalctl --since "1 hour ago"

看昨到今天的全部:

journalctl --since yesterday

看启动之后到现在的:

journalctl --since today

这几个时间参数的组合,基本能把任意一个故障窗口精确地切出来。我处理生产事故时习惯先把时间窗口定好再做事,避免在一整天的日志里盲人摸象。

3.3 服务过滤:只看某一个单元或进程的日志

journald 的最大优势之一,就是日志与 systemd 服务单元天然关联。看某个服务的全天日志:

journalctl -u nginx.service

看某个服务的指定时间范围日志:

journalctl -u sshd --since "2024-06-01 08:30:00" --until "2024-06-01 09:00:00"

同时看多个服务,用多个-u拼接:

journalctl -u nginx.service -u php-fpm.service

这个能力对应的业务场景太常见了:网站突然报 502,说明网关进程连不上后端的应用进程。此时同时拉取 nginx 和 php-fpm 的日志,两边一对照,就能判断是 nginx 拿不到连接还是 php-fpm 进程挂了。如果按传统方式去两个不同目录翻文件,效率低且容易遗漏。

还可以直接看某个 PID 对应的日志:

journalctl _PID=1234

或者看某个可执行文件产生的日志:

journalctl /usr/sbin/nginx

这些按结构化字段过滤的方式,传统 tail/grep 是无法做到的,因为文件日志只是无结构的纯文本行。

3.4 优先级过滤:只取 error 以上的日志

日志信息分为多个优先级(severity level),数字越小越严重:0 为 emergency,1 为 alert,2 为 critical,3 为 error,4 为 warning,5 为 notice,6 为 info,7 为 debug。

用-p参数过滤优先级:

journalctl -p err -b

这条命令的含义是只查看本机当前启动(-b表示本次启动)以来优先级为 err 及更严重(数值比 3 更小)的日志。这个组合拳在系统刚重启后、你想快速确认“这轮启动里有没有顶多严重”的问题时非常高效,早期开机阶段的刷屏日志一下就被压剩几十行了。

具体某个优先级以上的所有消息:

journalctl -p info

包括 info 及所有比他更严重的消息(notice 以下全部包含)。

我想强调一个使用习惯:千万不要把所有日志级别调成 debug 后长期运行。很多人为了排查问题把系统日志级别压到最低,结果日志量暴涨,几天时间就把磁盘写满了。生产环境里 debug 级别只在需要深挖问题的时间段打开,定位完立刻改回去。

3.5 实时跟踪:按服务的 tail -f

journalctl 也支持实时滚动输出:

journalctl -f

跟踪某几个特定服务的实时日志:

journalctl -u nginx.service -f

这条命令相当于“服务级的 tail -f”,在调试服务问题时极为顺手。nginx 一重启,业务请求进来了,日志立刻刷出来,所有状态码尽收眼底。

3.6 持久化配置:journal 日志会消失吗

journald 最坑的一点,很多新人在踩坑之后才意识到:journal 日志默认不持久化。

具体说,如果系统上/var/log/journal/目录不存在,journald 就把日志写到/run/log/journal/下的临时目录里。这个目录挂在内存文件系统 tmpfs 上,重启后立即清空。很多新人某天重启了服务器,然后发现journalctl里只剩这一轮启动的日志,以为日志丢了,其实是没有配置持久化。

要解决这个问题,两步。

第一步创建目录并设权限:

mkdir -p /var/log/journal chown -R root:systemd-journal /var/log/journal chmod g+s /var/log/journal

然后重启 journald:

systemctl restart systemd-journald

注意,设置持久化对历史日志没有回溯能力——之前临时目录里的内容已经随旧启动周期丢失,新配置只在之后生效。

另外控制 journal 日志的体积,在/etc/systemd/journald.conf里可以设置磁盘使用上限。关键参数是SystemMaxUse,比如设成 500M:

SystemMaxUse=500M

然后重启服务。这行配置避免日志无限增长把根分区撑爆,生产环境建议显式设置,不要依赖默认值。

3.7 日志与内核消息的组合查询

journald 会把内核日志一并接管,用-k参数可以看内核日志:

journalctl -k

或者混用 dmesg 风格的时间格式:

journalctl -k --since "2024-06-01 08:30:00"

在日常排障中,同时拉服务日志和内核日志的机会不算太多,但一旦涉及硬件损坏、驱动加载异常、OOM Killer 杀进程,这一步就非常关键。比如某个服务进程无故退出,服务日志可能只说一句“killed”,内核日志里却有完整的 out of memory 信息和进程被 OOM 杀掉的记录。

4. 实操案例:日志排查的三种经典场景

单独记再多命令,不动手排查一次,你很难真正建立感觉。下面三个场景是我在真实运维和开发过程中反复遇到过的典型,沿着我的排查思路走一遍,你就能摸清日志工具该如何组合使用。

4.1 场景一:服务器意外重启后的根因分析

某天早上用户反馈网站跨了,登录服务器发现系统已重启,uptime显示只有十几分钟。你要回答的问题是:为什么重启?

第一步,用 journald 查看上一次启动周期的尾部日志。如果 journald 没开启持久化,那上轮日志已经没了,只能试着从/var/log/messages的历史轮转文件里翻。假设持久化已开启,执行:

journalctl -b -1 --no-pager | tail -n 200

-b -1表示查看上一次启动周期的日志,--no-pager直接输出到终端不做分页。这里的关键是看最后几行内容——如果有reboot: Power down之类的字样,说明是有人主动关机或断电;如果有Kernel panic - not syncing就说明内核崩了;如果看到机器直接断掉没有后续日志,很可能是硬件断电或电源异常。

再看一眼内核消息:

journalctl -k -b -1 | grep -i "error\|panic\|memory"

这一步往往能发现具体硬件问题,比如内存纠错错误 ECC 事件、SCSI 设备掉线、根文件系统 I/O error。整条链路走下来,就算没找到完整答案,也能把排查范围缩小一大半。

实战心得:服务器意外重启后,第一时间不要急着重启服务恢复业务,而是应该先采集现场日志。我踩过好几次坑——业务恢复了,日志也被新的启动周期覆盖了或者被重启后的进程冲掉了,事后想查根因查不出来。正确做法是:采集完日志再恢复业务,时间上通常就差一两分钟,但结论完全不同。

4.2 场景二:应用发布后接口频频报错

部署完新版本后,发现某个接口的 500 率突然升高。此时第一件事不是去看代码,而是把应用自身日志和系统侧日志都拉出来对照。

假设应用是 node.js 服务,由 systemd 管理,服务名是 myapp,执行:

journalctl -u myapp --since "2024-06-01 10:00:00" | grep -i "error"

如果这一层没挖到实质线索,把范围扩大,看系统日志里有没有伴随的异常:

journalctl --since "2024-06-01 10:00:00" | grep -i "error"

这里有个关键认知:应用日志里的异常往往只是表象,系统日志里的伴生异常才是根因之一。比如应用接口突然 500,系统日志里可能同时出现了文件描述符不足(Too many open files)的记录——这属于系统资源层面的限制,应用层日志只会报告连接失败或超时,很具有迷惑性。

更深一步,如果你怀疑是数据库连接问题,那就拉数据库服务的日志:

journalctl -u mysqld --since "2024-06-01 10:00:00"

看连接是否被拒绝、是否有死锁、是否超过了最大连接数。整个排查过程其实就是“在不同角色日志里分别取证,然后拼出完整故事”。

4.3 场景三:系统启动慢——从启动日志中找答案

系统开机越来越慢,想定位到底卡在哪个环节。journald 提供了启动耗时分析能力,一锤定音:

systemd-analyze blame

它会列出所有服务单元启动时所花的时间,从大到小排列。看到哪个服务耗时最长,直接看它的日志细节,例如:

journalctl -u myservice --since "1 hour ago"

blame方法给出的是静态快照。再配合journalctl -b --no-pager | grep "Startup finished"看总启动时间的变化趋势,就能确认问题是出在最近一次配置变更还是新增了服务。

日志在这个场景里的用法总结起来就是:数据帮你定位,日志帮你解释。耗时排第一的 service 不一定就是“罪魁祸首”——它可能在等待一个依赖服务超时,实际拖慢它的是 upstream。这时候查它的日志,看输出里有没有 “timeout waiting for” 之类的话,真相会浮出水面。

5. 常见问题与排查技巧实录

日志排查过程中会反反复复遇到一些固定的坑,我把它们整理成一份速查清单。每条都是我亲自踩过或看别人踩过后总结出来的,按“问题、原因、解法”三步写,方便你抄作业。

5.1 journalctl 查不到上一轮启动的日志

  • 症状:执行journalctl -b -1直接提示无日志可显示。
  • 原因:journald 持久化未开启,历史 journal 文件存放在/run/log/journal的临时内存目录,重启后已清空。
  • 解法:配置持久化(见 3.6 节)。但注意,配置本身无法恢复已经丢失的历史日志。真遇到已丢失场景,只能转向传统文件日志/var/log/messages或/var/log/syslog看历史轮转文件。这也是为什么我建议生产环境尽量同时开 journald 持久化和 rsyslog 文件输出,双保险。

5.2 日志时间戳与实际时间偏差 8 小时

  • 症状:日志显示的时间和当前系统日期不一致,通常相差整小时数。
  • 原因:系统时区未正确设置,或容器环境内时区与宿主机不一致。
  • 解法:检查当前时区:
timedatectl

设置正确的时区:

timedatectl set-timezone Asia/Shanghai

日志文件按本地时间输出,journald 内部则始终用 UTC 存储,查询时自动转换。如果 journalctl 输出的时间不对,优先检查系统时区而不是怀疑日志写错了。

5.3 磁盘被日志写满

这是生产环境里最容易引发二次事故的问题。日志文件无限增长,根分区或/var分区被占满,服务开始报 “No space left on device”,连登录都可能都进不去。

排查命令:

df -h du -sh /var/log/* journalctl --disk-usage

治理手段有几种,从根治到应急排序:

  • 给 journald 设置磁盘上限(SystemMaxUse),防止它无限膨胀。
  • 调整 logrotate 的轮转策略,比如/etc/logrotate.d/里对应配置的rotate次数和size大小。
  • 紧急情况下直接清理 journal 旧数据:
journalctl --vacuum-size=200M

这条命令会把全部 journal 数据压缩到 200M 以内,省下的磁盘立刻归还。还有一种按时间清理的写法:

journalctl --vacuum-time=7d

只保留最近 7 天的日志。

注意:--vacuum-size会直接删除旧日志,属于不可逆操作。执行前确认这些日志不再有审计或追溯需求。等有需要的时候再后悔就来不及了。

5.4 日志中文乱码或乱字符

  • 症状:日志文件里出现大量\x7f之类的转义字符,或者应用输出中文变成乱码。
  • 原因:journald 默认对非 UTF-8 的不可打印字符做了转义显示;应用本身没有按 UTF-8 输出。
  • 解法:临时关闭字符转义用--no-pager加环境变量:
SYSTEMD_PAGERSECURE=true journalctl --no-pager

想彻底处理乱码,得去改应用日志输出的编码为 UTF-8,这不是给 journalctl 加参数能根治的。传统文件日志里中文乱码则多半是 LANG 环境变量在导出这些日志时的服务进程里没设置对,可以检查系统默认 locale:

locale

5.5 journal 数据损坏与 journalctl 卡住不动

journald 的二进制日志库偶尔会因异常断电或磁盘 I/O 故障发生数据损坏。表现是journalctl执行后长时间没有输出,或者报类似 “Cannot open journal file” 的错误。

常规解法是先检查 disk 状态:journalctl --verify会校验索引和数据完整性,但注意它在大日志文件上可能会跑很久。遇到损坏且已经影响正常查询的,可以清理重启 journald:

systemctl stop systemd-journald systemctl start systemd-journald

如果严重到服务无法正常运行,可以考虑删除/var/log/journal下的损坏目录——但这是下策,会丢日志。动手之前一定再次权衡保留价值与可用性。

5.6 容器日志看不了“实时”变化

现在好多人都把业务跑在 Docker 容器里,日志情况会再复杂一层。docker 容器内的 stdout 由 docker 引擎接管,journalctl -u docker只能看到 docker 服务层面的日志,看不到容器内应用输出。想看容器日志得用:

docker logs -f --tail=200 容器名

如果你用 docker-compose 管理的项目,则用下面的命令看对应服务日志:

docker compose logs -f 服务名

这个坑我反复强调的原因在于:很多人以为是 systemd 日志的问题,查了半天 journald,结果发现容器标准输出走的根本不是 journald 通道。明确谁负责收集日志,才能确定去哪看日志。

5.7 日志太多:写一个快速过滤的 shell 函数

日常操作多到一定程度后,我越来越觉得每次敲长命令太浪费时间。于是我在~/.bashrc里加了一个极简的日志查看函数:

function lg() { journalctl -u "$1" -n 200 -f --no-pager "$@" }

用法:lg nginx直接盯着 nginx 服务滚动输出最近 200 行。这个函数虽然简陋,但日常调试时cursor点一下就行,实用得很。类似的思路还可以延伸到查询当前各服务的运行状态、按服务统计今日错误次数等场景——重要的不是命令本身,而是你形成了一套“随身携带的日志工作流”。

6. 根据个人经验:日志是排障的第一现场

写了这么多,最后聊点个人体会。

我在 Linux 环境里排查问题,十次里有八次是靠日志解决的。八次里面又有六次,问题根本不复杂——只是没去看日志,或者不知道怎么高效看日志。很多人对日志工具本身并没有掌握,遇到故障习惯性先去查资料、问同事、甚至瞎猜重启服务,唯独忘了日志里很可能已经躺着一行明明白白的错误描述。

掌握日志查看这件事,其实不止是学几条命令那么简单。本质上是建立一种工程思维:承认软件会出错,提前预留可观测的现场。你在生产环境部署服务时,应该顺手确认日志有没有持久化、磁盘上限够不够、logrotate 策略合理不合理——这些准备工作花不了多少时间,但遇到事故时会省下几小时的痛苦排查时间。

另外一个小建议:不要等到出问题才去看日志。日常维护时花十分钟翻一翻/var/log/messages或跑一遍journalctl -p err -b --no-pager,看看有没有被忽略的系统问题。很多“偶发”现象,其实早就悄悄出现在日志里了,只是没人看,直到它从“潜在问题”变成“生产事故”。

最后分享一个调优过的小功能:把 journalctl 输出的日子加上颜色或按优先级排序,说实话这些花哨配置我试过又关掉了,因为生产环境要的不是炫技,是稳定可靠、容易复现。一套命令、一套流程、固定节奏,比任何高级技巧都管用。

去终端里敲一遍dmesg和journalctl -p err -b --no-pager,这两条命令会陪你走很久。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询