linux服务器 cpu性能问题知识点,常用查询和解决方法

一,基础知识:

1.平均负载:单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数

所谓可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程,就是我们常用 ps 命令看到的,处于 R 状态的进 程。

不可中断状态的进程则是正处于内核态关键流程中的进程,并且这些流程是不可打断的,

比如最常见的是等待硬件设备的 I/O 响应,也就是我们在 ps 命令中看到的 D 状态的进程

2.cpu使用率:单位时间内 CPU 繁忙情况

3.上下文切换:进程上下文切换、线程上下文切换、中断上下文切换

4.中断(硬,软中断):硬中断是硬件产生的,比如键盘、鼠标的输入,硬盘的写入读取、网卡有数据了;软中断是软件产生的,比如程序内的定时器,网络收发,就是异步操作,硬中断会打断 CPU 正在执行的任务,然后立即执行中断处理程序。而软中断以内核线程的方式执行,并且每个 CPU 都对应一个软中断内核线程

二,常见问题和查询方向:

 

1.平均负载很高,超过cpu核数:

CPU 密集型进程,大量io。不可中断进程过多

2.cpu利用率很高:

首先通过uptime查看系统负载,然后使用 mpstat结合pidstat来初步判断到底是cpu计算量大还是进程争抢过大或者是io过多,

接着使用vmstat( vmstat 是一个常用的系统性能分析工具,主要用来分析系统的内存使用情况,也常用来分析 CPU 上下文切换和中断的次数)分析切换次数,以及切换类型,来进一步判断到底是io过多导致问题还是进程争抢激烈导致问题

通过top观察CPU使用率很高,但是看下面的进程的CPU使用率好像很正常,通过pidstat命令查看cpu也很正常。但通过top查看task数量不正常,处于R状态的进程是可疑点。

如果碰到不好解释的CPU问题时,比如现象:

通过top观察CPU使用率很高,但是看下面的进程的CPU使用率好像很正常,通过pidstat命令查看cpu也很正常。但通过top查看task数量不正常,处于R状态的进程是可疑点

首要想到可能是短时间的应用导致的问题,如下面的两个:

(1)应用里直接调用了其他二进制程序,这些程序通常运行时间比较短,通过top等工具发现不了

(2)应用本身在不停地崩溃重启,而启动过程的资源初始化,很可能会占用很多CPU资源

3.大量不可中断进程(与硬件交互的进程),僵尸进程(子进程已经结束,但是父进程还没有回收):

1.先分析iowait升高的原因

一般iowait升高,可能的原因是i/o问题

①用dstat 命令同时查看cpu和i/o对比情况(如 dstat 1 10 间隔1秒输出10组数据),通过结果可以发现iowait升高时,磁盘读请求(read)升高

所以推断iowait升高是磁盘读导致

②定位磁盘读的进程,使用top命令查看处于不可中断状态(D)的进程PID

③查看对应进程的磁盘读写情况,使用pidstat命令,加上-d参数,可以看到i/o使用情况(如 pidstat -d -p <pid> 1 3),发现处于不可中断状态的进程都没有进行磁盘读写

④继续使用pidstat命令,但是去掉进程号,查看所有进程的i/o情况(pidstat -d 1 20),可以定位到进行磁盘读写的进程。我们知道进程访问磁盘,需要使用系统调用

4.大量的软中断

查看中断类型:/proc/interrupts 这个只读文件中读取

查看软中断: watch -d cat /proc/softirqs  通过 /proc/softirqs 文件内容的变化情况,你可以发现, TIMER(定时中断)、NET_RX(网络接收)、SCHED(内核调度)、RCU(RCU 锁)等这几个软中断都在不停变化

在实际生产中,软中断导致的性能瓶颈大多是网络收发类型的,特别是网络接收的软中断。在碰到这类问题时,可以借用 sar、tcpdump 等工具,做进一步分析。sar 可以用来查看系统的网络收发情况,tcpdump用来抓包具体分析

5.频繁的上下文切换

# 每隔5秒输出1组数据$ vmstat 5   vmstat 只给出了系统总体的上下文切换情况,要想查看每个进程的详细情况,就需要 pidstat  # 每隔5秒输出1组数据$ pidstat -w 5

cswch:自愿上下文切换,是指进程无法获取所需资源,导致的上下文切换。比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换

 nvcswch:非自愿上下文切换,则是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。比如说,大量进程都在争抢 CPU 时,就容易发生非自愿上下文切换。

自愿上下文切换变多了,说明进程都在等待资源,有可能发生了 I/O 等其他问题;

非自愿上下文切换变多了,说明进程都在被强制调度,也就是都在争抢 CPU,说明 CPU 的确成了瓶颈;

中断次数变多了,说明 CPU 被中断处理程序占用,还需要通过查看 /proc/interrupts 文件来分析具体的中断类型

最后放一张网上的工具使用图:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值