top,uptime 查看系统负载差不多超出cpu的核心数线程数日常排查命令
load average: 46.52, 45.52, 42.19
centos load average代表最近1分钟 5分钟 15分钟的 系统平均负载
系统负载是系统CPU繁忙程度的度量,即有多少进程在等待被CPU调度(进程等待队列的长度)
一、top
用top查看有没有占用资源异常的进程
第一行:任务队列信息
系统时间:10:11:01
已运行时间:up 3 days,10:40
当前登录用户:1user
系统平均负载:load average :0.00, 0.01, 0.05
备注:这几个数字如果超出核心线程数,代表负载已经超负荷了,
有一个参考值:负载值<= cpu逻辑核心数*0.7,(逻辑核心数里面包含线程数)在这个范围内,负载是正常的
我个人认为逻辑核心数是包括线程数的,现在已经有超线程技术了,这个超线程技术可以将一个核心模拟出2个逻辑核;
例如一台16核心32线程的,查看的逻辑核心数是32个(输入top命令,按键盘“1”显示输出如下↓)一共有32个逻辑核心数量
第二行:任务进程信息
总进程:Tasks:107
运行进程:1 running
睡眠进程:106 sleeping
停止进程:0 stopped
僵尸进程:
备注:
系统平均负载高的时候,查看有没有僵尸进程,如果有大量的僵尸进程,CPU有可能会爆满。
使用命令 ps -A -ostat,ppid,pid,cmd |grep -e '^[Zz]' 查看僵尸的父进程和子进程,要杀死僵尸的父进程才能真正杀死进程
使用命令 kill -HUD 僵尸父进程 或者 kill -9 僵尸父进程 ,这样才能真正杀死僵尸进程;
参数备注:
ps -A -ostat,ppid,pid,cmd |grep -e '^[Zz]'
-A : 参数列出所有进程
-o:自定义输出字段stat(状态),父进程(ppid),进程(pid),命令cmd
因为状态为z或者Z的进程为僵尸进程,所以用grep抓取stat状态为zZ进程
第三行:cpu状态信息
%Cpu(s): 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
: 用户空间占用的CPU百分比
0.0 sy: 内核空间占用CPU的百分比
0.0 ni: 改变过优先级的进程占用CPU的百分比
99.7 id: CPU空闲的百分比
0.0 wa:(iowait) 等待 i/o完成占用CPU的百分比,只统计磁盘I/O(包含NFS类型的磁盘),不包含网络I/O;对于制定的CPU来说,iowait表示在此时间内,CPU其实是空闲的,不过CPU并不是严格意义上的空闲,毕竟它还需要等待I/O操作完成。对于产生I/O操作的请求的线程来说,它会阻塞等待I/O操作完成。
0.0 hi: 硬中断占用的cpu百分比
0.0 st:软中断占用的CPU百分比
第四行:内存状态
KiB Mem : 2717240 total, 1591540 free, 415456 used, 710244 buff/cache(单位是K)
第五行:swap交换分区的信息
KiB Swap: 2097148 total, 2097148 free, 0 used. 2034068 avail Mem
说明:
可用内存=free+cache+buffer
在内存监控中,top命令持续观察swap用的used值,如果这个值不断变化,说明内核在不断的进行内存和swap数据交换,这是真正的内存不够用了。
第四行使用中的内存总量(used)是现在系统内核控制的内存数
第四行中的内存空闲量(free)是内核还未纳入其管控范围的数量。
纳入内核管理的内存不见得都在使用中,还包括过去使用的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不为此担心。
第六行空行
第七行以下:各进程任务的状态
PID: 进程id
USER: 进程所有者
PR: 进程优先级
NT: nice值。负值代表高优先级,正值表示低优先级
VIRT: 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES: 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR: 共享内存大小,单位kb
S: 进程状态。D=不可中断的睡眠状态 ; R= 运行;S=睡眠;T=跟踪、停止 Z=僵尸进程
%CPU: 进程占用的CPU百分比
%MEM: 进程占用的内存百分比
TIME+: 进程使用的CPU时间总计,单位1/100 秒
COMMAND: 进程名称(命令名、命令行)
- 多核CPU的监控在top的基本视图中,按键盘数字“1”,可监控每个逻辑CPU的状况:
下面监控一个 2核心4线程 实际一个CPU的服务器 -
- 监控内存从大到小排序在top的监控视图中,按键盘字母“M”
-
- 监控cpu百分比从大到小排序
在top的监控视图中,按键盘字母大写“P”
备注:如果查看到某一个进程的CPU占用率比较大,那就要注意查看这个进程是异常进程还是业务进程,有时候一些挖矿进程特别吃CPU,那就要清理这个挖矿进程了;
如果是数据库占用CPU使用率比之前高很多,那需要优化数据库了,开启慢查询,看看那些慢查询语句进行优化;有遇到过生产中因为数据库占用cpu使用的比较大,后面进行优化频繁查询的sql;
如果是一些java进程,那就要看看程序是不是内存溢出,频繁FGC,可能需要优化程序,或者优化一下jvm内存大小
至于如何定位是哪部分代码导致频繁GC,我还需要学习一下,可以自行网上搜索解决方法
二、iostat
使用iostat命令需要自行安装 (yum install sysstat -y)
- iostat
显示所有设备的负载情况
CPU属性说明:
%user: CPU处在用户模式下的时间百分比
%nice:CPU处在带NICE值的用户模式下的时间百分比
%system: CPU处在系统模式下时间百分比
%iowait:CPU等待输入输出完成时间的百分比
%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比
%idle:CPU空闲时间百分比
备注:
如果%iowait的值过高,表示硬盘存在i/o瓶颈,%idle值高,表示CPU比较空闲,如果%idle值高但系统响应慢时,有可能CPU等待分配内存,此时加大内存容量。
disk属性说明
磁盘名称
device:磁盘名称
tps:每秒钟发送到I/O请求数
kB_read/s:每秒钟读取的block数
kB_wrtn/s:每秒钟写入的block数
kB_read:读入的block总数
:写入的block总数
示例:
iostat 1 3
每隔1秒,显示3次
iostat -d -x -k 1 1
查看设备使用率(%util)、响应时间(await)
rrqm/s:每秒进行的merge的读操作数目。
wrqm/s:每秒进行的merge的写操作数目
r/s:每秒完成的读i/o设备次数
w/s:每秒完成的写i/o设备次数
rkB/s: 每秒读k字节数
wkB/s: 每秒写k字节数
avgrq-sz: 平均每次设备i/o操作的数据大小
avgqu-sz: 平均I/O队列长度
await:平均每次设备I/O操作的等待时间(毫秒)
r_await: 每个读操作所需的时间
w_await:每个写操作平均所需的时间
svctm: 平均每次设备I/O操作的服务时间
%util: 一秒钟有百分之多少的时间用于I/O操作,即被IO消耗的cpu百分比
备注:如果%util 接近100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。如果svctm比较接近await,说明I/O几乎没有等待时间;如果await远大于svctm,说明I/O队列太长,io响应太慢,则需要进行必要优化。如果avgqu-sz比较大,也表示有大量io在等待。
三、vmstat
示例:vmstat -n 1
-n:只在开始时显示字段的名称
每隔1秒显示一次数据
r: 表示运行队列的长度(就是说多少个进程的真的分配到CPU),我当这个值超过了CPU的逻辑核心数量,就会出现CPU瓶颈。
b:表示阻塞的进程
u:用户cpu时间
sy: 系统CPU时间,如果太高,表示系统调用时间长,列如是IO操作频繁
id 空闲
备注:
如果r经常大于cpu核心数,且id经常少于40,表示CPU负荷很重。
四、htop
htop是一个互动的进程查看器,可以动态观察系统进程状况;
这个命令需要自行安装,安装 yum install -y htop ,如果安装不成功,需要再运行
yum install epel-release ,因为htop不是系统基础命令,所以需要额外安装epel-release软件包;
这个就成功安装了;
htop命令打开界面如下↓
示例1:
在htop 命令行视图中
按键盘字母大写“P”,则按CPU占用率从高到低排序,
示例2:
在htop 命令行视图中
按键盘字母大写“M”,则按内存占用率从高到低排序,(原来按P排序的视图中,直接按大写字母M重新排序)
示例3
在htop 命令行视图中
按键盘字母“u”,显示所有用户的进程,并可以选择特定用户的进程
选择apache用户的进程,则按上下键,先按下键选择apache用户,然后按enter键
示例4:
在htop 命令行视图中
按键盘字母大写” T”按进程运行时间排序
示例5:
按键盘字母“I” ,倒转排序
比如本来按字母 M进行CPU占用率从大到小排序,接着按字母 大写“I”,则排序从内存占用率从小到大排序,即倒序了;
示例5:
在htop视图中,按F3,可以搜索进程名字,搜索到的进程会有颜色显示出来
示例5
按下F6,在sort by下用上下键选择以什么方式排序
五。mpstat
mpstat -P ALL 1 (这个命令需要安装 yum install sysstat 就有了)
可以查看多逻辑核心每个计算核心的统计数据;(比如2核心4线程,就是4个逻辑核心了)
六、free -mh
free -mh 查看内存
第一点top命令的说明:
可用内存=free+cache+buffer
在内存监控中,top命令持续观察swap用的used值,如果这个值不断变化,说明内核在不断的进行内存和swap数据交换,这是真正的内存不够用了。
第四行使用中的内存总量(used)制的是现在系统内核控制的内存数
第四行中的内存空闲量(free)是内核还未纳入其管控范围的数量。
纳入内核管理的内存不见得都在使用中,还包括过去使用的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不为此担心。
七、检查磁盘使用率命令
(1)
du -h --max-depth=1 /home
目录不断变化,看看磁盘占用空间有没有什么问题;
(2)
df -Th 查看磁盘空间占用率
八、iftop命令
iftop不是centos基础命令,需要自行安装( yum install iftop -y)
iftop是实时的流量监控工具,主要用来显示本机网络流量的情况以及各个相关地址相互通信的流量集合,可以监控网卡的实时流量。
备注:
中间<= => 这2个左右箭头,表示的是流量的方向,<= 表示的是接受数据,=> 表示发送数据;
左下角:
TX:发送的流量
RX:接收的流量
TOTAL:总流量
Cumm:运行iftop搭配目前时间的总流量
peak:流量峰值
右下角:
rates:分别代表过去2s 10s 40s 的平均流量
右列分3小列:这些实时参数分别表示外部IP连接到本机2秒内、10秒内和40秒内的平均流量。
示例1:
iftop -i ens33 -n
显示网卡ens33的信息,主机通过ip显示
示例2:
iftop -i ens33 -n -P
显示端口号(添加-P参数,进入界面可通过p参数关闭)
示例3:
iftop -i ens33 -n -B
以byte为单位显示网卡流量,默认bit
示例4:
iftop -i ens33 -n
显示流量进度条,进入界面后按下L
示例5:
iftop -i ens33 -n
进入界面后按T
显示每个连接的总流量
实例6:
iftop -m 100m
显示界面刻度的最大值
运动,可以释放人的负面情绪,让人变得更加勇敢乐观;