Skip to content

Commit 070f690

Browse files
committed
在进阶教程中的故障应急手册里添加《CPU 负载过高》小节
1 parent 1af0d00 commit 070f690

File tree

8 files changed

+82
-19
lines changed

8 files changed

+82
-19
lines changed

docs/user_manual/operation_and_maintenance/emergency_handbook/01_emergency_overview.md

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,39 +13,37 @@ weight: 1
1313

1414
在《故障应急手册》中,会把用户在使用 OceanBase 的过程中可能遇到的问题,以及对应的解决方案进行汇总,目录大致会是:
1515

16-
* 1 系统响应时间不符合预期
16+
* 系统响应时间不符合预期
1717

18-
* 2 SQL 执行报错
18+
* CPU 负载异常
1919

20-
* 3 CPU 负载异常
20+
* 节点宕机
2121

22-
* 4 节点宕机
22+
* 生产库故障切容灾库
2323

24-
* 5 生产库故障切容灾库
24+
* 硬件 & 基础环境故障应急处理
2525

26-
* 6 硬件 & 基础环境故障应急处理
26+
* 负载变化导致的问题
2727

28-
* 7 负载变化导致的问题
28+
* 集群内部其他问题
2929

30-
* 8 集群内部其他问题
30+
* 租户转储阻塞
3131

32-
* 8.1 租户转储阻塞
32+
* 集群合并阻塞
3333

34-
* 8.2 集群合并阻塞
34+
* SYS 租户/ RS 服务问题
3535

36-
* 8.3 SYS 租户/ RS 服务问题
36+
* 磁盘泄漏
3737

38-
* 8.4 磁盘泄漏
38+
* 内存泄漏
3939

40-
* 8.5 内存泄漏
40+
* 长事务
4141

42-
* 8.6 长事务
42+
* 悬挂事务
4343

44-
* 8.7 悬挂事务
44+
* coredump
4545

46-
* 8.8 coredump
47-
48-
* 8.9 无主
46+
* 无主
4947

5048
* 未完待续……
5149

@@ -65,4 +63,11 @@ weight: 1
6563

6664
- 如果轮流重启之后还有问题,那就进行 failover 操作,切换备集群。
6765

68-
- 分析问题永远放在止血和恢复之后。
66+
- 分析问题永远放在止血和恢复之后。
67+
68+
69+
## 参考资料
70+
71+
- 社区博客[《OceanBase 应急三板斧》](https://open.oceanbase.com/blog/13250502949)
72+
73+
- 官网文档中的[应急处理相关内容](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001573632)
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
---
2+
title: CPU 负载过高
3+
weight: 3
4+
---
5+
6+
## 业务及数据库表现
7+
8+
业务表现:业务出现偶发卡顿,接口调用失败率上升。
9+
10+
数据库表现:收到 CPU 使用率高的告警,SQL 响应延迟突然变高,监控中 CPU 使用率飙升.
11+
12+
## 排查方向和流程
13+
14+
![image](/img/user_manual/operation_and_maintenance/emergency_handbook/03_cpu_high/001.png)
15+
16+
17+
### 排查节点上是否有 CPU 使用率高的进程
18+
19+
通过 ps 或者 top 命令,确认节点上 CPU 使用率高的进程是否是 observer 进程。
20+
```
21+
ps -eo pid,user,%cpu,cmd --sort=-%cpu
22+
PID USER %CPU CMD
23+
124648 user_a 99.9 other_process
24+
1332 user_b 50.5 observer
25+
```
26+
如果是其他 user 在节点上开了其他 CPU 占用较高的进程,需要联系相关 user 进行调整。
27+
28+
29+
### 排查 OBServer 中的可疑线程
30+
31+
如果 CPU 占用高的进程只有 observer,先通过 top -H 看下是否是租户工作线程占用的
32+
33+
```
34+
top -p `pidof observer` -H
35+
```
36+
37+
#### 如果是工作线程的 CPU 占用大
38+
39+
**<font color="red">对于 99% 的场景,我们只需要关心普通线程(即租户工作线程,而非后台线程),即 TNT_L0_G0_1001(3.1 版本) 或 T1001_L0_G0(4.x 版本)。</font>**
40+
41+
> By the way:这里多解释一句,4.x 给工作线程改名,是因为 3.1 版本太容易 grep 错。比如想 grep TNT_L0_G0_1 的时候,很容易 grep 出一大堆 TNT_L0_G0_1001 之类的线程。
42+
43+
例如有某个租户执行的 SQL 占用了超多 CPU,导致其他租户受影响了,可以直接通过 top -H 结果中的 T1002_L0_G100 看出具体是哪个租户在整幺蛾子。
44+
45+
![image](/img/user_manual/operation_and_maintenance/emergency_handbook/03_cpu_high/002.png)
46+
47+
比如下面的示例就可以通过 T1002_L0_xxxx 看出来是 1002 号租户在犯坏。
48+
49+
50+
然后就可以去 OCP 上去看看这个 1002 号租户在执行什么把 CPU 吃完的 SQL 了。这里就又回到了上一小节的内容,分析下为啥这条 SQL 这么慢了。
51+
52+
![image](/img/user_manual/operation_and_maintenance/emergency_handbook/03_cpu_high/003.png)
53+
54+
55+
56+
#### 如果是后台线程的 CPU 占用大
57+
58+
如果 top -H 看到占用 CPU 的是 T1_HBService、RootBalance、IO_GETEVENT0 这类看不懂的线程 CPU 占用高,建议去社区论坛发帖,联系在论坛中值班的技术支持同学,让他们协助你留下 obstack 或者 pstack 的堆栈信息,进一步分析原因。
Binary file not shown.
2.82 KB
Loading
-92.2 KB
Loading
79.8 KB
Loading
130 KB
Loading
234 KB
Loading

0 commit comments

Comments
 (0)