在排查性能过程中如遇到cpu的wa高时该如何做(一)
1、引言
谈到性能基本上离不开cpu。但对于性能只处于了解压测没有真正调优过的其实也不会关注太多。所以如何做下一步,基本上知道的更少。高手就另说了,如果你已经知道排查问题,到了调优阶段,恭喜你不用看本篇了,你已经是高手了。
所以我也以我的理解与经验来进行一步步操作说明。其实也是很简单的,就是多操作实践就好了。
2、常用的命令或工具
top命令虽然网上有很多说明,但为了更好的记忆,与快速的理解下文中提到相关的操作含义,我在此重复说明一下。
top
“top - 20:02:16 up 15 days, 10:00, 3 users, load average: 0.93, 0.96, 0.98”
top 系统时间 , up 运行时间 , users当前登录用户数,load averaget 负载均衡分别是~~1分钟、5分钟、15分钟~~ 的负载情况。 load averager数据是每隔5秒检查一次活跃的进程数,然后按特定算法计算出的数据。如果这个数除以逻辑CPU个数,结果高于5的时候就表明系统在超负荷运转。
Tasks: 219 total, 1 running, 218 sleeping, 0 stopped, 0 zombie
Tasks:总进程数, running 正在运行进程数,sleeping 休眠进程数,stopped 停止进行数,zombie 僵尸进程数
%Cpu(s): 6.7 us, 6.0 sy, 0.0 ni, 87.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
cpu状态: us【user space】 用户空间占用cpu的百分比, **sy【sysctl】**内核空间占用cpu的百分比; **ni【】**改变过优先级的进程占用CPU的百分比 **id【idolt】**空闲CPU百分比 **wa【wait】**IO等待占用CPU的百分比 **hi【Hardware IRQ】**硬中断中用CPU的百分比 **si【Software Interrupts】**软中断占用CPU的百分比
KiB Mem : 32780104 total, 5848456 free, 13789140 used, 13142508 buff/cashe
内存状态:total总内存,free空闲内存,used已用内存,buff/cache缓存
如果系统上缓存buff/cache占用量非常大,并且有些在运行中的程序是可用可不用的,这个时候就可以使用以下命令释放缓存区,好让之后启动的程序能正常更快的运行,但如果数据是比较重要的,则必须在删除前先执行“sync;sync;sync” 同步数据到硬盘上,否则数据将丢失。
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
KiB Swap: 4063228 total, 4063228 free, 0 used. 18520728 avail Mem
Swap交换分区信息:总交换信息,空闲交换区,已用交换区,可用的交换区 正常情况下used占用为0,如果在不停的变化,说明内核在不断进行内存和swap的数据交换,这时在告警真正的内存不够用了。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
PID:进程ID **USER:**进程所有者 **PR:**进程优先级 **NI:**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:**进程名称(命令名/命令行)
实例:
如果想要获取某个进程下所有的线程,可以使用命令:
top -Hp PID
可以使用帮助命令“top -h” 来查看其他详细信息
3、简单的排查过程见下图
Created with Rapha?l 2.3.0
开始
通过“iostat -x 1 10”命令查看相关磁盘使用信息
通过“iotop”命令查看比较详细的信息
通过“pidstat -d 1”展示I/O统计,每秒更新一次
结束
iostat -x 1 10
iotop
pidstat -d 1
现在是不是知道了,是不是很简单!
4、注意事项:
4.1、如果在使用iostat时提示“-bash: iostat: command not found“
说明系统没有安装,在安装时使用命令”yum -y install sysstat "而不是”yum install iostat“
|