Abel'Blog

我干了什么?究竟拿了时间换了什么?

0%

**CPU“偶尔飙高”**这种,最怕的就是:你不在现场,它已经恢复了,然后啥线索都没留下。

你有 root 权限,这就很爽了,能把事情一次性“抓现行”。我按 从快到准 给你一套实战路线,你可以直接照着来。

一、先搞清楚:CPU 是“谁”在高?

1️⃣ 实时看(马上用)

top

重点看这几列:
• %CPU:谁在吃
• us / sy / wa
• us 高:用户态程序(你的服务、Java、Go、Node)
• sy 高:内核 / 系统调用
• wa 高:I/O 卡住(磁盘 / 网络)

👉 如果你看到的是 Java 300% / postgres 200%,事情就简单多了。

更推荐:

htop

(可视化 + 能看到线程)

二、问题在于:你不在的时候它才高

所以我们要 “持续采样 + 留证据”

三、必装工具(root 权限必备)

apt install -y sysstat dstat htop

yum install -y sysstat dstat

四、持续监控 CPU(核心)

1️⃣ 开启 sysstat(非常重要)

systemctl enable sysstat
systemctl start sysstat

它会每 10 分钟自动采样一次,数据保存在:

/var/log/sysstat/

2️⃣ 事后回看 CPU 历史(关键)

看某一天 CPU 是否异常:

sar -u -f /var/log/sysstat/sa05

重点关注:
• %usr
• %sys
• %iowait
• %idle

如果 %idle 掉到 0,那就是满负载了。

五、定位到“哪个进程”

1️⃣ 看历史中哪个进程吃 CPU(神器)

sar -q -f /var/log/sysstat/sa05

2️⃣ 按进程统计(更狠)

pidstat -u 1

持续输出:
• 哪个 PID
• 每秒吃多少 CPU

如果你怀疑是 Java / PostgreSQL:

pidstat -u -p $(pgrep java) 1
pidstat -u -p $(pgrep postgres) 1

六、CPU 高的时候自动抓现场(推荐你一定要做)

方案:超过 80% 自动记录 top

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cat << 'EOF' > /root/cpu_watch.sh
#!/bin/bash
while true; do
CPU=$(top -bn1 | awk '/Cpu/ {print 100 - $8}')
if (( $(echo "$CPU > 80" | bc -l) )); then
echo "==== $(date) CPU=$CPU ====" >> /var/log/cpu_spike.log
top -b -n 1 >> /var/log/cpu_spike.log
fi
sleep 10
done
EOF

chmod +x /root/cpu_watch.sh
nohup /root/cpu_watch.sh &

📌 你之后只需要看:

less /var/log/cpu_spike.log

就能知道:

是哪一个进程、哪个线程,把 CPU 干爆了

七、如果是 Java / Go / PostgreSQL(你很可能会遇到)

🔥 Java
• top 里看到 Java 高
• 用:

top -H -p

找线程 → 再用 jstack

🔥 PostgreSQL(你最近就老在搞这个 😄)

1
2
3
SELECT pid, query, state
FROM pg_stat_activity
WHERE state != 'idle';

配合系统:

pidstat -u -p $(pgrep postgres) 1

🔥 Go 程序
• 大概率是:
• 死循环
• goroutine 泄露
• GC 抖动
• 可以临时加:

curl http://localhost:6060/debug/pprof/profile?seconds=30 > cpu.pprof

八、我给你一个最省事组合

如果你只想 今天就落地:

✅ sysstat
✅ pidstat
✅ 自动 cpu_watch.sh

这三样,99% 的 CPU 问题都能破案

九、下一步我可以直接帮你“对症下药”

你可以直接告诉我其中一个👇
• CPU 高的时候 top 里看到的进程名
• 是 Java / PostgreSQL / Go / Node
• 是 us 高 / sy 高 / wa 高

概述

现在是ai时代。需要掌握一些ai工具否则会落后。

OpenCode 是一个开源的 AI Agent 编码工具。它可以通过终端界面、桌面应用程序或 IDE 扩展来使用。

  • 核心定位:它是一个开源、隐私优先且高度可定制的 AI 编码代理。
  • 支持多种使用场景:不仅支持 TUI(终端图形界面)模式,也支持通过 CLI、桌面应用和 VS Code 扩展插件运行。
  • 生态数据:目前 GitHub 上已有 50k+ Star,拥有 650k+ 月活开发者。

OpenCode 最大的吸引力在于它的开放性和多场景支持,不仅支持完全本地化的模型部署,还支持 75+ 种 LLM 提供商,如 Anthropic、Github Copilot、OpenAI、Google、智谱 AI 等。使用起来更加灵活。

阅读全文 »

概述

Mermaid 是一个基于 JavaScript 的图表绘制工具。它的核心理念是:用简单的文本和 Markdown 类似的语法,就能快速生成各种专业图表。 无论您是写技术文档、项目报告,还是仅仅想在 GitHub Readme 中展示流程,Mermaid 都是一个极佳的选择,因为它能直接集成到 Markdown 文件中。

阅读全文 »

概述

最近项目里面的按照时区来计算的时候存在少计算了8小时的问题;

timestamptz 是 PostgreSQL 中的一种时间/日期类型,完整名称是 timestamp with time zone。它和普通的 timestamp(即 timestamp without time zone)有一些区别:

timestamptz 带时区的时间戳(推荐)PostgreSQL 内部会存储为 UTC 时间;查询时会根据你的 会话时区(TimeZone 配置) 自动转换显示;

timestamp:不带时区;只存储一个绝对时间,不做时区转换;

阅读全文 »

简介


Tmux 新手入门指南

Tmux(Terminal Multiplexer)是一个强大的终端复用工具,可以让你在一个终端窗口中创建、管理和切换多个终端会话。它最大的好处是,即使你关闭了终端或者断开了 SSH 连接,后台的会话和程序仍然会继续运行。

这份文档将教会你如何开始使用 Tmux,以及掌握一些最核心的概念和命令。

阅读全文 »

简介

记录vim编辑器。
现代 Vim + coc.nvim + fzf + treesitter 真的已经可以做到接近 IDE 的体验了,尤其是多语言(Go/C++/Rust/TS/JS)开发的时候:

•	自动补全、跳转、重构一应俱全
•	文件搜索/历史/Buffer 搜索比 cscope 强多了
•	自动格式化和 LSP 实时提示让开发更流畅
•	加上你熟悉的快捷键,几乎不用切出 Vim
阅读全文 »