改编自:https://blog.csdn.net/Yan_Chou/article/details/80456995

检测命令整理:

dd
iotop
df
top
ps
iostat
vmstat
netstat
ss
iftop

问题

宿主机cpu占用率非常高。

显示cpu的使用情况是超过80%的cpu占用在wa(IO等待占用CPU的百分比)上,
用户空间(us)和内核空间(sy)占用不到20%.
id显示的剩余量几近为0.
load average也显示较高
# top
op - 17:29:08 up 10 days, 19:20, 1 user, load average: 14.31, 9.34, 9.08
Tasks: 351 total, 1 running, 350 sleeping, 0 stopped, 0 zombie
%Cpu(s): 6.9 us, 7.7 sy, 0.3 ni, 2.9 id, 81.7 wa, 0.0 hi, 0.5 si, 0.0 st
KiB Mem : 8010196 total, 735612 free, 5450964 used, 1823620 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1636516 avail Mem

排查问题

这个问题在前一段时间也出现过,但最终两次产生的原因不同,上次出现此问题的原因是因为pv挂载的阿里云nfs,刚好宿主机上被调度了es(elasticsearch),然后es交换nfs数据量太大,导致了连接nfs的网络io太大.而这一次的问题是由于磁盘IO引起的.

使用iotop命令查看机器io情况

    Total DISK READ :       9.79 M/s | Total DISK WRITE :      24.66 K/s
Actual DISK READ: 8.21 M/s | Actual DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
5762 be/7 root 1743.49 K/s 0.00 B/s 0.00 % 95.26 % du -s /var/lib/docker/overlay/e~61f203cd85d130b629268078be9c07f4
5721 be/7 root 750.23 K/s 0.00 B/s 0.00 % 94.64 % du -s /var/lib/docker/overlay/c~dd81ce0684eed62e983301a2bd67e694
41 be/4 root 0.00 B/s 0.00 B/s 0.00 % 52.87 % [kswapd0]
5758 be/7 root 200.77 K/s 0.00 B/s 0.00 % 34.72 % du -s /var/lib/docker/overlay/1~803fd9bf781dede9aad4c952530ff38c
5761 be/7 root 718.53 K/s 0.00 B/s 0.00 % 24.93 % du -s /var/lib/docker/overlay/3~bdb22e8d3cdf465e4a205b1ef72cbd49
5759 be/7 root 109.19 K/s 0.00 B/s 0.00 % 17.49 % du -s /var/lib/docker/overlay/3~be3fe72d2

  发现有好几个进程在执行du命令占用了大量的磁盘io.

2、查看进程相关信息

ps -ef | grep 10699

root     10699  1675  1 17:44 ?        00:00:00 du -s /var/lib/docker/overlay/e790af60afdf2439c201d6aa2884673ca707e0de2438a6da5009d0717f079de3

 查看父进程 ps -ef | grep 1675

root      1675     1  9 5月14 ?       1-00:38:15 /usr/k8s/bin/kubelet --fail-swap-on=false --cgroup-driver=cgroupfs --address=192.168.1.140 --hostname-override=192.168.1.140 --experimental-bootstrap-kubeconfig=/etc/kubernetes/bootstrap.kubeconfig --kubeconfig=/etc/kubernetes/kubelet.kubeconfig --require-kubeconfig --cert-dir=/etc/kubernetes/ssl --cluster-dns=10.254.0.2 --cluster-domain=cluster.local. --hairpin-mode promiscuous-bridge --allow-privileged=true --serialize-image-pulls=false --logtostderr=true --v=2

发现是kubelet在调用,kubelet在统计系统磁盘空间信息,由于此前线上环境因为磁盘压力,空间不足的情况出现过大量Pod被驱逐的情形,导致节点上的Pod出现大量被驱逐状态,查看k8s官方说明https://kubernetes.io/docs/tasks/administer-cluster/out-of-resource/#evicting-end-user-pods:
k8s默认在磁盘小于10%的时候,就会evict pod,导致线上pod不能正常启动了,dashboard上变成红色感叹号.

3. 查看磁盘空间

df -h

/dev/vda1 40G  32G  5.5G  86%  /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 4.7M 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
tmpfs 783M 0 783M 0% /run/user/1001

另外查看github issue,原来其他人也出现过类似问题https://github.com/kubernetes/kubernetes/issues/23255
https://github.com/kubernetes/kubernetes/issues/47928
官方说对于此种情况,目前正在优化(kubelet需要搜集系统必要的磁盘空间信息).对于目前此节点出现这个情况,应该是kubelet在磁盘占用较大的时候,会更加频繁地发起du命令计算docker可用的磁盘空间,大量的du命令以及大量的零散文件造成了大量的io,以及cpu的io等待.

这里同时顺带记录下之前因为es操作nfs上的数据的时候出现的这个问题所运用到的工具.因为时间有点久远了,这里仅做一些重要的记录,供参考.

1、测试磁盘的IO写速度

time dd if=/dev/zero of=test.dbf bs=8k count=300000   如果要测试实际速度 还要在末尾加上 oflag=direct测到的才是真实的IO速度

2、测试磁盘的IO读速度

dd if=test.dbf bs=8k count=300000 of=/dev/null

3、iostat命令

sudo iostat -x 1 10

avg-cpu: %user %nice %system %iowait %steal %idle
7.14 0.26 14.03 67.86 0.00 10.71 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 44.00 1231.00 14.00 20444.00 232.00 33.21 77.17 61.89 62.57 2.57 0.80 99.90
vdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle
6.67 0.26 8.72 80.00 0.00 4.36 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 14.00 1240.00 6.00 5480.00 172.00 9.07 47.39 38.05 38.23 1.00 0.80 100.00

对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。

4. vmstat命令(类似于top命令)

[zdz@node5 log]$ sudo vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
13 11 0 522460 119404 1896244 0 0 198 70 6 5 9 6 80 5 0
2 10 0 504968 123668 1905832 0 0 8960 88 10582 17425 6 5 0 89 0
13 9 0 532004 115180 1888332 0 0 4556 0 10627 17406 7 23 8 61 0
2 11 0 520568 120080 1897008 0 0 9164 0 10516 18847 7 5 2 87 0
0 11 0 505616 124320 1906012 0 0 4960 4 9814 14932 6 8 3 83 0
4 12 0 476292 128952 1924268 0 0 5748 56 11428 18584 5 7 0 87 0

5. iotop (查看io的类top命令)

可理解对应iotop与iostat;top与vmstat

6. 监控docker的容器资源占用,

docker stats –format “table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}”  #如果不想持续的监控容器使用资源的情况,可以通过 –no-stream 选项只输出当前的状态,如:docker stats –no-stream

7. 查看TCP连接状态:

netstat

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
netstat -n|grep ^tcp|awk '{print $NF}'|sort -nr|uniq -c
#或者:
netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"t",state[key]}'
#返回结果一般如下:
LAST_ACK 5 #正在等待处理的请求数)
SYN_RECV 30
ESTABLISHED 1597 #正常数据传输状态)
FIN_WAIT1 51
FIN_WAIT2 504
TIME_WAIT 1057 #处理完毕,等待超时结束的请求数) #其他参数说明:
CLOSED #无连接是活动的或正在进行
LISTEN #服务器在等待进入呼叫
SYN_RECV #一个连接请求已经到达,等待确认
SYN_SENT #应用已经开始,打开一个连接
ESTABLISHED #正常数据传输状态
FIN_WAIT1 #应用说它已经完成
FIN_WAIT2 #另一边已同意释放
ITMED_WAIT #等待所有分组死掉
CLOSING #两边同时尝试关闭
TIME_WAIT #另一边已初始化一个释放
LAST_ACK #等待所有分组死掉

9、iftop命令

类似于top的实时流量监控工具

CPU使用情况检测的更多相关文章

  1. adb命令检测apk启动时间、内存、CPU使用情况、流量、电池电量等——常用的adb命令

    ADB:Android Debug Bridge,是Android SDK里一个可以直接操作安卓模拟器或真实设备的工具,颇为强大.   检测APP:   adb shell am start -W p ...

  2. 全面了解 Linux 服务器 - 1. 查看 Linux 服务器的 CPU 详细情况

    1. 查看 Linux 服务器的 CPU 详细情况 判断依据: 具有相同的 core id 的 CPU 是同意个 core 超线程. 具有相同的 physical id 的 CPU 是同一个 CPU ...

  3. linux中如何查看进程对应的cpu使用情况?

    使用ps aux | grep <进程名>即可查看指定进程的cpu使用情况.

  4. ubuntu查看内存占用和查看cpu使用情况的简单方法(ubuntu内存管理)

    单独查看内存使用情况的命令:free -m查看内存及cpu使用情况的命令:top也可以安装htop工具,这样更直观,安装命令如下:sudo apt-get install htop安装完后,直接输入命 ...

  5. 获取CPU使用情况信息(转)

    获取了内存使用情况,也可以使用PHP的 getrusage()获取CPU使用情况,该方法在windows下不可用.    print_r(getrusage()); /* 输出 Array ( [ru ...

  6. 根据dba_hist_osstat统计CPU占用情况

    在11g里面,视图dba_hist_osstat用来记录OS级别的time时间指标.视图dba_hist_osstat_name显示了相关的指标名称. SYS@/dzgddb> select * ...

  7. centos文件/文件夹操作-检查磁盘、内存、cpu使用情况-vi操作命令

    Part1:CentOS文件/文件夹操作 1.新建文件夹 即创建目录 mkdir 文件名 新建一个名为test的文件夹在home下 vi source1 mkdir /home/test 注意:当创建 ...

  8. Linux评估 CPU使用情况

    评价参数 1)CPU utilization:最直观最重要的就是CPU的使用率.如果长期超过80%,则表明CPU遇到了瓶颈:2)User time: 用户进程使用的CPU:该数值越高越好,表明越多的C ...

  9. ubuntu下查看服务器的CPU详细情况

    https://www.cnblogs.com/liuq/p/5623565.html 全面了解 Linux 服务器 - 1. 查看 Linux 服务器的 CPU 详细情况 ubuntu下查看服务器的 ...

随机推荐

  1. list dict set comprehension 列表推导式 (字典推导式,集合推导式)

    从一个list生成新的list [ word.upper() for word in 'hellO worlD!' ] 简单的语法,如果不用list comprehension, 则要用更长的代码. ...

  2. Gym 101142G : Gangsters in Central City(DFS序+LCA+set)

    题意:现在有一棵树,1号节点是水源,叶子节点是村庄,现在有些怪兽会占领一些村庄(即只占领叶子节点),现在要割去一些边,使得怪兽到不了水源.给出怪兽占领和离开的情况,现在要割每次回答最小的割,使得怪兽不 ...

  3. bzoj 3545: [ONTAK2010]Peaks Kruskal重构树

    题目: 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询问询问从点v开始只经 ...

  4. 【caffe】卷积层代码解析

    1.Forward_cpu conv_layer.cpp template <typename Dtype> void ConvolutionLayer<Dtype>::For ...

  5. 非系统表空间损坏,rman备份恢复

    实验条件:有完整可用备份--查询表空间情况SQL> select tablespace_name,status from dba_tablespaces;TABLESPACE_NAME STAT ...

  6. 【转】 Pro Android学习笔记(五十):ActionBar(3):搜索条

    目录(?)[-] ActionBar中的搜索条 通过Menu item上定义search view 进行Searchable的配置 在activity中将search view关联searchable ...

  7. 【转】Pro Android学习笔记(十):了解Intent(上)

    目录(?)[-] Intent基本含义 系统的Intent Android引入了Intent的概念来唤起components,component包括:1.Activity(UI元件) 2.Servic ...

  8. web攻击之五:上传漏洞

    [攻击] 在图片上传的时候,攻击者上传非图片,而是可远程执行的的脚本,这时候,入侵者就可以远程的执行脚本来对服务器进行攻击 [防御] 1.限制文件上传类型 2.使用第三方文件托管等

  9. Java访问子类对象的实例变量

    对于Java这种语言来说,一般来说,子类可以调用父类中的非private变量,但在一些特殊情况下, Java语言可以通过父类调用子类的变量 具体的还是请按下面的例子吧! package com.yon ...

  10. Python命令模块argparse学习笔记(三)

    参数组 ArgumentParser.add_argument_group(title=None, description=None) 默认情况下,当显示帮助消息时,ArgumentParser将命令 ...