故障描述
问题 及故障: 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 工具进行分析。