ITPub博客

首页 > 数据库 > Oracle > 记一次数据库服务器CPU被打爆典型案例分析

记一次数据库服务器CPU被打爆典型案例分析

原创 Oracle 作者:龙山游龙 时间:2024-08-07 19:02:42 0 删除 编辑

1 、故障描述

某次,下午17点,某用户电话紧急反馈有一套开发数据库非常慢,怀疑是内存参数没有配置好。请求紧急技术支持。当时的故障现象为服务器执行命令卡顿,需要进行紧急处理及根因分析。

2 、根因分析

由于用户提前做了一个 14 点到 15 点的数据库的 AWR 报告,通过分析发现数据库的负载并不高。为了进一步确认情况,远程登陆到数据库服务器,确实很卡,通过 OS 命令发现 CPU 当前仍然使用率很高,使用 dbms_workload_repository.create_snapshot() 命令采集最新快照,生成最新的 AWR 报告进行分析,仍然未发现 CPU 使用率高的迹象,不是数据库负载高引起的数据库慢。

继续通过 top 、 vmstat 命令查看系统负载情况, CPU 使用率 100% , load average 负载很高和 vsmstat r 队列一致,进程中看不到占用 cpu 高的进程。

top 命令查询结果:

vmstat 命令查询结果:发现 run 队列非常高。

检查到这里怀疑系统被攻击了,下面就是要找到系统的 CPU 消耗在哪里了。该案例需要用到 linux 系统提供的 perf 工具来进行进一步分析,其中 perf 是 Linux 下的一款性能分析工具,能够进行函数级与指令级的热点查找。接下来协调用户安装 perf 工具。

Perf 命令查询结果:

perf top -s comm,pid,symbol  -- # 显示调用 symbol 的进程名和进程号

[root@xxxxx ~]# perf top -s comm,pid,symbol

  20.00%  -bash   121734:-bash  [.] 0x000000000000908b

  14.29%  -bash   100095:-bash  [.] 0x000000000000908b

   5.71%  -bash     6584:-bash  [.] 0x00007f8fb877f1f4

   5.71%  -bash     6612:-bash  [.] 0x00007f8adf0dbd37

   5.71%  -bash   100095:-bash  [.] 0x0000000000009088

   2.86%  -bash     6419:-bash  [.] 0x00007fbd85b09cfc

   2.86%  -bash     6419:-bash  [.] 0x00007fbd85b0a164

   2.86%  -bash     6612:-bash  [.] 0x00007f8adf0dbb4c

   2.86%  -bash     6612:-bash  [.] 0x00007f8adf410087

   2.86%  -bash     6638:-bash  [.] 0x00007feb9691130d

   2.86%  -bash     6638:-bash  [.] 0x00007feb96911726

   2.86%  -bash     6638:-bash  [.] 0x00007fec2bafbcb8

   2.86%  -bash     6639:-bash  [.] 0x00007feb968f200d

   2.86%  -bash     6639:-bash  [.] 0x00007feb968f25ee

   2.86%  -bash     6639:-bash  [.] 0x00007feb968f261e

   2.86%  -bash    19756:-bash  [.] 0x00007fef63db617f

   2.86%  -bash    19756:-bash  [.] 0x00007fef63db68e3

   2.86%  -bash    19756:-bash  [.] 0x00007fef63db6a15

   2.86%  -bash    19756:-bash  [.] 0x00007fef63db6a47

   2.86%  -bash    32883:-bash  [.] 0x0000000000009088

   2.86%  -bash    32883:-bash  [.] 0x000000000000908b

   2.86%  -bash    32883:-bash  [.] 0x00000000000090a0

   1.16%  -bash     6408:-bash  [.] 0x00007f73948e78e3

   1.16%  -bash     6408:-bash  [.] 0x00007f73948e7905

   1.16%  -bash     6408:-bash  [.] 0x00007f73948e7931

   1.16%  -bash     6408:-bash  [.] 0x00007f73948e79f1

   1.16%  -bash     6408:-bash  [.] 0x00007f73948e7a43

   1.16%  -bash     6408:-bash  [.] 0x00007f742ab7dcb9

   1.16%  -bash     6419:-bash  [.] 0x00007fbd85b09a1b

   1.16%  -bash     6419:-bash  [.] 0x00007fbd85b09c25

   1.16%  -bash     6419:-bash  [.] 0x00007fbd85b09f36

   1.16%  -bash     6419:-bash  [.] 0x00007fbd85b0a036

   1.16%  -bash     6419:-bash  [.] 0x00007fbd85b0a0a0

   1.16%  -bash     6419:-bash  [.] 0x00007fbd85b0a21d

   1.16%  -bash     6558:-bash  [.] 0x00007fdd6bd6a79c

   1.16%  -bash     6558:-bash  [.] 0x00007fdd6bd6a7c2

   1.16%  -bash     6558:-bash  [.] 0x00007fdd6bd6a938

   1.16%  -bash     6558:-bash  [.] 0x00007fdd6bd6a947

   1.16%  -bash     6569:-bash  [.] 0x00007fe833a8984f

   1.16%  -bash     6569:-bash  [.] 0x00007fe833a8986b

   1.16%  -bash     6569:-bash  [.] 0x00007fe833a89e31

   1.16%  -bash     6569:-bash  [.] 0x00007fe833a89ea5

   1.16%  -bash     6569:-bash  [.] 0x00007fe833a89ed6

   1.16%  -bash     6569:-bash  [.] 0x00007fe833a89f10

   1.16%  -bash     6569:-bash  [.] 0x00007fe833a89fa2

   1.16%  -bash     6584:-bash  [.] 0x00007f8fb877e835

   1.16%  -bash     6584:-bash  [.] 0x00007f8fb877eda4

   1.16%  -bash     6584:-bash  [.] 0x00007f8fb877edf9

   1.16%  -bash     6584:-bash  [.] 0x00007f8fb877ee0e

进入到 121734 进程目录查看:

[root@xxxxx]# cd /proc/121734

[root@xxxxx 121734]# ls -la

total 0

dr-xr-xr-x   9 oracle oinstall 0 Feb 24 09:44 .

dr-xr-xr-x 383 root   root     0 Dec 14 14:22 ..

dr-xr-xr-x   2 oracle oinstall 0 Mar  2 11:10 attr

-rw-r--r--   1 oracle oinstall 0 Mar  2 11:10 autogroup

-r--------   1 oracle oinstall 0 Mar  2 11:10 auxv

-r--r--r--   1 oracle oinstall 0 Mar  2 11:10 cgroup

--w-------   1 oracle oinstall 0 Mar  2 11:10 clear_refs

-r--r--r--   1 oracle oinstall 0 Mar  2 11:10 cmdline

-rw-r--r--   1 oracle oinstall 0 Mar  2 11:10 comm

-rw-r--r--   1 oracle oinstall 0 Mar  2 11:10 coredump_filter

-r--r--r--   1 oracle oinstall 0 Mar  2 11:10 cpuset

lrwxrwxrwx   1 oracle oinstall 0 Mar  2 11:10 cwd -> /var/tmp/.systemd

-r--------   1 oracle oinstall 0 Mar  2 11:10 environ

lrwxrwxrwx   1 oracle oinstall 0 Mar  2 11:10 exe -> /var/tmp/.systemd/-bash (deleted)

dr-x------   2 oracle oinstall 0 Mar  2 11:10 fd

dr-x------   2 oracle oinstall 0 Mar  2 11:10 fdinfo

-rw-r--r--   1 oracle oinstall 0 Mar  2 11:10 gid_map

-r--------   1 oracle oinstall 0 Mar  2 11:10 io

-r--r--r--   1 oracle oinstall 0 Mar  2 11:10 limits

-rw-r--r--   1 oracle oinstall 0 Mar  2 11:10 loginuid

dr-x------   2 oracle oinstall 0 Mar  2 11:10 map_files

-r--r--r--   1 oracle oinstall 0 Mar  2 11:10 maps

-rw-------   1 oracle oinstall 0 Mar  2 11:10 mem

-r--r--r--   1 oracle oinstall 0 Mar  2 11:10 mountinfo

-r--r--r--   1 oracle oinstall 0 Mar  2 11:10 mounts

-r--------   1 oracle oinstall 0 Mar  2 11:10 mountstats

dr-xr-xr-x   6 oracle oinstall 0 Mar  2 11:10 net

dr-x--x--x   2 oracle oinstall 0 Mar  2 11:10 ns

-r--r--r--   1 oracle oinstall 0 Mar  2 11:10 numa_maps

-rw-r--r--   1 oracle oinstall 0 Mar  2 11:10 oom_adj

-r--r--r--   1 oracle oinstall 0 Mar  2 11:10 oom_score

-rw-r--r--   1 oracle oinstall 0 Mar  2 11:10 oom_score_adj

-r--r--r--   1 oracle oinstall 0 Mar  2 11:10 pagemap

-r--------   1 oracle oinstall 0 Mar  2 11:10 patch_state

-r--r--r--   1 oracle oinstall 0 Mar  2 11:10 personality

-rw-r--r--   1 oracle oinstall 0 Mar  2 11:10 projid_map

lrwxrwxrwx   1 oracle oinstall 0 Mar  2 11:10 root -> /

-rw-r--r--   1 oracle oinstall 0 Mar  2 11:10 sched

-r--r--r--   1 oracle oinstall 0 Mar  2 11:10 schedstat

-r--r--r--   1 oracle oinstall 0 Mar  2 11:10 sessionid

-rw-r--r--   1 oracle oinstall 0 Mar  2 11:10 setgroups

-r--r--r--   1 oracle oinstall 0 Mar  2 11:10 smaps

-r--r--r--   1 oracle oinstall 0 Mar  2 11:10 stack

-r--r--r--   1 oracle oinstall 0 Feb 24 09:44 stat

-r--r--r--   1 oracle oinstall 0 Mar  2 11:10 statm

-r--r--r--   1 oracle oinstall 0 Mar  2 10:44 status

-r--r--r--   1 oracle oinstall 0 Mar  2 11:10 syscall

dr-xr-xr-x   3 oracle oinstall 0 Mar  2 10:44 task

-r--r--r--   1 oracle oinstall 0 Mar  2 11:10 timers

-rw-r--r--   1 oracle oinstall 0 Mar  2 11:10 uid_map

-r--r--r--   1 oracle oinstall 0 Mar  2 11:10 wchan

接下来检查是否在 crontab 中配置了自动执行:

lrwxrwxrwx   1 oracle oinstall 0 Mar  2 11:10 exe -> /var/tmp/.systemd/-bash (deleted)

定时任务正好和高 cpu 进程操作内容吻合,上面的排查过程反馈给客户,客户确认被攻击了。

定位到根因之后,接下来问题的处理就比较简单了,只需将对应的任务和脚本清理干净,就可以彻底解决。

1 、删除 crontab 中异常作业。

2 、删除异常进程脚本。

3 、解决方案

1 、操作系统层面做好安全加固。

2 、使用专门的安全软件进行防护。

3 、对于主机 CPU 使用率很高,但是又无法看到使用率高的进程,建议使用 perf 工具进行分析。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30310891/viewspace-3024445/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
传统商业、开源和国产据库领域十从业经验,TB级高并发数据库的管理经验。对于数据库内部原理、体系结构,数据页/块结构原理有着深刻认识;对于数据库新特性、分布式高可用架构和性能调优有着丰富的的实战经验。擅长故障诊断以及数据库异常打开及数据灾难挽救。

注册时间:2015-06-28

  • 博文量
    178
  • 访问量
    334672