一次数据库CPU使用100%异常处理及分析报告

故障描述

问题 及故障: 3 1 日下午 5 点接到运维部门反馈开发数据库非常慢,怀疑是内存参数没有配置好。请求技术支持。

故障现象:服务器执行命令卡顿。

问题 分析

DBA提前做了一个 下午 2 点到 3 点的数据库的 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 工具。

 

P erf 命令查询结果:

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

[root@bogon ~]# 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@bogon]# cd /proc/121734

[root@bogon 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 、删除异常进程脚本。

建议 总结

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

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

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


请使用浏览器的分享功能分享到微信等