暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

linux基础——CPU闲扯

爱可可的人生记录仪 2020-03-19
253
最近外面挺精彩的,天天见证历史,疫情,原油,熔断。包括我自己,也有些懈怠,主要控制不住自己盯盘,天天被绿,说不在乎的肯定是假的。而且自从复工后,公司也有了很大的变动,情况不是很乐观,近阶段可能也要留心准备一下。好消息是,高铁北站高架通车了,上班时间少了将近10分钟,以及随着油价的暴跌,可以省一波油钱了。当然最大的好消息是,我国疫情可以说基本控制住了。今天的这篇笔记比较凌乱,主要是CPU方面的一些内容,暂且水一下吧。

uptime的平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。
可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程(ps的R状态)
不可中断状态的进程则是正处于内核态关键流程中的进程,并且这些流程是不可打断的(ps的D状态)
平均负载最理想的情况是等于 CPU 个数,当平均负载高于 CPU 数量 70% 的时候,就应该分析排查负载高的问题了。

平均负载与 CPU 使用率
CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的;
I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高;
大量等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。

mpstat 是一个常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有 CPU 的平均指标。(mpstat -P ALL 5 监控所有CPU,数字5表示间隔5秒后输出一组数据)
pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标。(pidstat -u 5 1 每隔5秒输出一组数据,u表示CPU指标 )

上下文切换
如果系统的上下文切换次数比较稳定,那么从数百到一万以内,都应该算是正常的。但当上下文切换次数超过一万次,或者切换次数出现数量级的增长时,就很可能已经出现了性能问题。
vmstat 是一个常用的系统性能分析工具,主要用来分析系统的内存使用情况,也常用来分析 CPU 上下文切换和中断的次数。 
cs(context switch)是每秒上下文切换的次数。
r(Running or Runnable)是就绪队列的长度,也就是正在运行和等待 CPU 的进程数。
in(interrupt)是每秒中断的次数。
b(Blocked)是处于不可中断睡眠状态的进程数。
pidstat -wt查看每个进程及线程的上下文切换。cswch  ,表示每秒自愿上下文切换(voluntary context switches)的次数,是指进程无法获取所需资源,导致的上下文切换,有可能是IO问题。nvcswch  ,表示每秒非自愿上下文切换(non voluntary context switches)的次数,指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换,可能CPU瓶颈。
/proc/interrupts 提供了一个只读的中断使用情况。
 perf top,类似于 top,它能够实时显示占用 CPU 时钟最多的函数或者指令,因此可以用来查找热点函数
perf record -F 99 -a -g -- sleep 30  # 对当前系统(-a)的以99HZ(-F 99)频率采样30s(-- sleep 30),采样信息包括stack(-g)

不可中断状态,表示进程正在跟硬件交互,为了保护进程数据和硬件的一致性,系统不允许其他进程或中断打断这个进程。进程长时间处于不可中断状态,通常表示系统有 I/O 性能问题。
僵尸进程表示进程已经退出,但它的父进程还没有回收子进程占用的资源。短暂的僵尸状态我们通常不必理会,但进程长时间处于僵尸状态,就应该注意了,可能有应用程序没有正常处理子进程的退出。

参考资料:倪朋飞,Linux性能优化实战



部分内容来自网络,如有侵权请联系作者删除。



文章转载自爱可可的人生记录仪,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论