Cpu性能分析指令 - top、vmstat、pidstat...

LINUX 进程状态

LINUX 2.6 以后的内核中,进程一般存在 7 种基础状态:

  • D( TASK_UNINTERRUPTIBLE )不可中断睡眠

位于这种状态的进程处于睡眠中,并且不允许被其他进程或中断 (异步信号) 打断;无法使用 kill -9 杀死的 (kill 也是一种信号),除非重启系统 。 

这种状态一般由 I/O 等待 (比如磁盘 、网络 、外设 的 I/O 等) 引起,出现时间非常短暂,大多很难被 PS 或者 TOP 命令捕获 (除非 I/O HANG 死)。 不会占用任何 CPU 资源。

  • R( TASK_RUNNING )可执行

这种状态的进程都位于 CPU 的可执行队列中,正在运行或者正在等待运行。

  • S( TASK_INTERRUPTIBLE )可中断睡眠

不同于 D,这种状态的进程虽然也处于睡眠中,但是是允许被中断的。这种进程一般在等待某事件的发生(比如 socket 连接、信号量等),而被挂起;一旦这些时间完成,进程将被唤醒转为 R 态。如果不在高负载时期,系统中大部分进程都处于 S 态。 不会占用任何 CPU 资源。

  • T&t (__TASK_STOPPED & __TASK_TRACED)  暂停态 | 跟踪态 

这种两种状态的进程都处于运行停止的状态。不同之处是暂停态一般由于收到 SIGSTOP、SIGTSTP、SIGTTIN、SIGTTOUT 四种信号被停止,而跟踪态是由于进程被另一个进程跟踪引起 。暂停态进程会释放所有占用资源。

  • Z  (EXIT_ZOMBIE)僵尸态

这种状态的进程实际上已经结束了,但是父进程还没有回收它的资源(比如进程的描述符、PID 等)。僵尸态进程会释放除进程入口之外的所有资源。

  • X( EXIT_DEAD )死亡态

进程的真正结束态,这种状态一般在正常系统中捕获不到。

换页空间Swap

(20条消息) Cpu高速缓存 & 缓存行填充_noob_can的博客-CSDN博客https://blog.csdn.net/noob_can/article/details/124960690?spm=1001.2014.3001.5501

在文章中讲述了Cpu通过总线与主存进行数据交互。 而主存则是Cpu与磁盘资源的沟通桥梁。

所谓换页空间:可以简单理解为内存空间的扩展,它其实是将硬盘上读取速度最快的那一部分虚拟成内存,Cpu在内存中没有找到数据时才会到换页空间中查询。

当物理内存不足时,kswapd0 会频繁的进行换页操作,将内存页数据拷贝到swap分区里,以释放内存页容量。

查看 swap 空间信息:

  • swapon -s
  • free -h
  • top 也可以看Swap的情况。如果这个数值在不断的变化,表明内核在不断进行内存和swap区的数据交换,说明内存不够用。

频繁换页操作非常消耗 CPU 资源,top 发现该 kswapd0 进程持续处于非睡眠状态,且运行时间较长,可以初步判定系统在持续的进行换页操作,可以将问题转向内存不足的原因来排查。

top | grep kswapd0

 执行 vmstat | free指令,查询系统内进程的内存占用情况。vmstat -> swap区的 si,so 值也比较高,则表示系统存在频繁的换页操作。

Cpu

互联网分层架构是一个CPU固定、数据移动的架构.

当程序要执行的部分被装载到内存后,CPU 要从内存中取出指令,然后指令解码 (解析类型和操作数等),然后执行该指令;再然后取下一个指令、解码、执行,以此类推直到程序退出。 这个取指、解码、执行三个过程构成一个 CPU 的基本周期。

每个 CPU 都有一套自己可以执行的专门的指令集。 硬件指令集是硬件层上由 CPU 自身提供的可执行的指令集合;软件指令集是指语言程序库所提供的指令,只要安装了该语言的程序库,指令就可以执行。

 由于 CPU 访问内存得到指令或数据的时间要比执行指令花费的时间长很多,因此在 CPU 内部提供了一些用来保存关键变量、临时数据等信息的通用寄存器。 在 CPU 进行进程切换的时候,需要将寄存器中和当前进程有关的状态数据写入内存对应的位置 (内核中该进程的栈空间) 保存起来,当切换回该进程时,需要从内存中拷贝回寄存器中,即上下文切换时,需要保护现场和恢复现场。

CPU 的消耗组成: 用户 + 系统  + IO 等待 + 软硬中断 + 空闲

较难改变的是: 系统 sy  、  软硬件终端 ni & si

top 命令

 b  -- 高亮显示当前运行进程
 c  -- 显示完整命令
 1  -- 监控每个逻辑CPU的状况
shift + m   --按内存排序
shift + p   --按cpu%排序
shift + t  --按时间排序top

 输出某个特定进程<pid>并检查该进程内运行的线程状况:

 top -H -p <pid>

 

进入 top 后按 1,可以显示每个Cpu核心。

  • us 用户进程空间中未改变过优先级的进程占用 CPU 百分比 。简单来说,us 高是因为程序导致的,通过分析线程堆栈jstack,可以很容易的定位到问题线程。
  • ni  用户进程空间内改变过优先级的进程占用 CPU 百分比
  • sy 内核空间占用 CPU 百分比。sy 高的时候,如果是程序问题导致,大概率是因为线程上下文切换过频, vmstat 要关注被动切换次数 
  • wa 空闲 & 等待 I/O 的时间百分比
  • hi 硬中断时间百分比
  • si 软中断时间百分比
  • st 虚拟化时被其余 VM 窃取时间百分比
  • id 空闲时间百分比

这 8 类中,除 wa 和 id 外其余的,CPU 都处于工作态。

CPU% : 泛指的整体 CPU 使用率为 User Time 和 Systime 占比之和

是对一个时间段内 CPU 使用时间的统计,通过这个指标可以看出在某一个时间段内 CPU 被占用的情况;Cpu利用率一般控制在70%。

Load Average: 数据是每隔 5 秒钟检查一次 【可执行 + 不可中断睡眠】的进程数,按特定算法计算得出数值。分别代表 一分钟、五分钟、十五分钟的系统平均负载 。

如果这个数除以逻辑 CPU 的核心数, 0.00 表示当前没有执行线程; 负荷 1.00 说明系统已经没有剩余的资源了;高于 5 的时候就表明系统在超负荷运转了; 在实际情况中 ,有经验的系统管理员都会将这条线划在 0.70。

PID :进程ID。

USER:进程所有者的用户名称。

PR:从系统内核看,进程调度的优先级。PR是动态优先级,是会变的。

NI:进程的nice值,表示从用户空间角度看的进程优先级,值越低,优先级越高。越nice的人抢占资源的能力就越差,而越不nice的人抢占能力就越强。这就是nice值大小的含义,nice值越低,说明进程越不nice,抢占cpu的能力就越强,优先级就越高。NI又叫静态优先级。

VIRT:进程申请使用的虚拟内存量。

RES:进程使用的驻留内存量。

SHR:进程使用的共享内存量。

S:进程状态。R=running,S=interruptible sleeping,D=D=uninterruptible sleeping,T=stopped,Z=zombie。

%CPU:进程在一个更新周期内,占用的CPU时间比例。

%MEM:进程占用的物理内存比例。

TIME+:进程创建后至今使用的CPU时间长度。

COMMAND:运行进程锁使用的命令。

 lscpu 查看Cpu信息

Cpu负载很高,利用率却很低 ->  不可中断睡眠状态的进程

 因为 统计的是【可执行 + 不可中断睡眠】状态下得进程数。 负载高说明线程多,利用率低则说明使用Cpu的线程少; 【可执行】状态的线程会占用Cpu资源,那表示只有可能是有很多不可中断的进程。

通常这种情况是 IO 密集型的任务,大量请求在 IO 阻塞,导致任务队列堆积。 通过命令 ps -axjf查看是否存在状态为D+(不可中断的睡眠)状态的进程 。处于这个状态的进程无法终止,也无法自行退出,只能通过恢复其依赖的资源或者重启系统来解决。

如果不可中断进程数增多,那么就需要做IO分析,使用 dstat (yum -y install dstat) sar (yum -y install sysstat)等工具,进一步分析IO情况。

vmstat 也能输出进程的状态https://www.jianshu.com/p/9b0b386b1de0

[~]$ vmstat 5 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 197932 433024 5687712    0    0    90    24    0    0  1  1 98  0  0
 0  0      0 197916 433024 5687712    0    0     0    18 2335 4236  0  0 99  0  0

dstat

cpu、磁盘IO、网络IO、swap空间、系统上下文切换

paging 换页空间 : 展示内存到换页空间(swap)的使用情况,从内存到swap是out,从swap到内存是in,只有频繁的in和out才表明内存不足!

System   int: 每秒产生的中断次数 ;  csw:  每秒产生的上下文切换次数

sar

默认监控: sar 1 1     //  CPU和IOWAIT统计状态 
sar -b 1 1        // IO传送速率
sar -B 1 1        // 页交换速率
sar -d 1 1        // 块设备的活跃信息
sar -n DEV 1 1    // 网路设备的状态信息
sar -n SOCK 1 1   // SOCK的使用情况
sar -n ALL 1 1    // 所有的网络状态信息
sar -P ALL 1 1    // 每颗CPU的使用状态信息和IOWAIT统计状态 
sar -q 1 1        // 队列的长度(等待运行的进程数)和负载的状态
 sar -r 1 1      // 内存和swap空间使用情况
 sar -R 1 1       // 内存的统计信息(内存页的分配和释放、系统每秒作为BUFFER使用内存页、每秒被cache到的内存页)
 sar -v 1 1       // inode, file and other kernel tablesd的状态信息
 sar -w 1 1       // 每秒上下文交换的数目
 sar -W 1 1       // SWAP交换的统计信息

totsck     当前被使用的socket总数
tcpsck    当前正在被使用的TCP的socket总数
udpsck   当前正在被使用的UDP的socket总数
rawsck   当前正在被使用于RAW的skcket总数
if-frag     当前的IP分片的数目
tcp-tw    TCP套接字中处于TIME-WAIT状态的连接数量

active/s 新的主动连接
passive/s 新的被动连接
iseg/s 接受的段
oseg/s 输出的段

(27条消息) sar命令使用详解_疯狂的小企鹅的博客-CSDN博客_sar命令详解https://blog.csdn.net/weixin_44232712/article/details/121084965

Cpu的利用率高

wa 特别高 -> IO异常

那么一般说明是硬件设备 IO 出现问题, 可以通过 iostat 命令查看 io 情况。

await:  每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。 
r_await | w_await:平均每次IO 读|写 请求等待时间。(包括等待队列时间和处理时间,毫秒为单位)
svctm    表示平均每次设备I/O操作的服务时间(以毫秒为单位) 如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,说明 I/O 队列太长,应用得到的响应时间变慢。 正常情况下svctm应该是小于await值的,而svctm和磁盘性能有关,CPU、内存的负荷也会对svctm值造成影响,过多的请求也会间接的导致svctm值的增加。
avgqu-sz 是平均请求队列的长度。毫无疑问,队列长度越短越好。    
%util: 在统计时间内所有处理IO时间,除以总共统计时间. 如果该参数是100%表示设备已经接近满负荷运行了
rkB/s:          每秒读K字节数。
wkB/s:          每秒写K字节数。
r/s:            每秒完成的读 I/O 设备次数
w/s:            每秒完成的写 I/O 设备次数。

sy 特别高

关注线程被动切换上下文次数 ,可能是线程数过多。

vmstat :  内存、 swap、 io、 cpu

r: 运行队列中进程数量(当数量大于 CPU 核数表示有阻塞的线程)
b: 等待 IO 的进程数量
cs: 每秒上下文切换数。
swap区的 si,so 值比较高,则表示系统存在频繁的换页操作 。 结合top命令看 kswapd0 进程。

pidstat -whd  进程层面

UID :被监控任务的真实用户 ID。
PID:线程 ID。
cswch/s:主动切换上下文次数,这里是因为资源阻塞而切换线程,比如线程锁等待释放了Cpu资源阻塞等。
nvcswch/s:被动切换上下文次数,这里指 CPU 调度切换了线程。 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LIMS系统 服务器运维管理手册 2016-10-24 一、 文档简介 2 二、 文档目的 3 三、 文档范围 3 四、 事件处理流程 3 五、 具体操作说明 4 1) 服务器硬件管理 4 2) 服务器系统管理 8 1. Windows系统管理 8 文档简介 本文档根据cc服务器硬件设备与系统应用管理需求,针对日常维护内容进行技术归类 于总结,描述具体操作步骤与操作方法,积累服务器事件处理能力,使之服务运维能力 更为主动可控。 文档目的 标准服务器故障处理方法指引,服务器管理知识库积累。 文档范围 服务器硬件故障判断与标准处理操作 服务器系统日常性能检测与标准检测 事件处理流程 具体操作说明 服务器硬件管理 1. 检查与故障判断: 服务器硬件的主动检查方式主要分三种: 设备面板指示灯检查 硬件系统日志检查 第三方工具检查 1) 面板指示灯检查 IBM服务器上面有,电源指示灯,硬盘/IDE设备活动指示灯,网卡指示灯,系统过热报 警灯.硬盘槽还有硬盘指示灯。HP服务器上面指示灯一般为UID,内部和外部健康灯 ,其他就是电源网口灯了,DELL的机种有的上面有风扇,内存,CPU,指示灯情况 ,图标都是很直观的,其它服务器与IBM,HP的差不多。 图示说明 详细描述: 2) 系统日志检查 "检查内容 " "硬件历史异常报错信息 " "计算机管理->系统工具->事件查看器,查看系统日志 " "重点关注:红色高危事件信息、日常频繁硬件报错信息 " "备注:查看硬件历史异常故障情况,分析硬件性能与使用生命周期 " 3) 第三方检测工具检查 "检查内容 " "硬件历史异常报错信息 " "HP 诊断工具: " "打开开始——程序——HP System Tools——HP Insight Diagnostics online " "Edition for Windows——HP Insight Diagnostics online Edition for " "Windows。 " "DELL诊断工具: " "第三方硬件设备诊断工具 " "IBM诊断工具: " "IBM Systems Director 、 IBM Systems Director Active Energy " "Manager、IBM ServerGuide " 相关图解: 进入诊断网页,在第一选项卡Survey中,上部有2个下拉项,左侧选择Advanced,右侧选 择All,会显示出更多硬件信息,点击右下的Save按钮保存。 此界面可以看到服务器所有硬件信息。 2. 硬件设备变更操作标准: 判断并确定最快恢复时间 判断是否有做冗余设置 判断是否需要关机操作 磁盘设备检测并确定阵列信息,确定有做数据备份 是否对其它关联应用有影响 制定回退方案,保证数据与应用的可用性 设备变更操作 设备兼容性测试 应用系统运行测试 设备变更后正式应用 服务器系统管理 服务器系统管理为: AIX系统管理 AIX系统管理 1. 磁盘空间使用 df -g命令 磁盘空间使用率是否已经到达80% 2. 进程监控、CPU性能、磁盘读写率 topas命令 查看进程的CPU使用率和磁盘读写率是否超阀值 3. 内存性能 vmstat 命令 查看内存最高峰值与一般使用率是否超阀值 4. 网络查看 netstat -an"grep tcp 检查是否能正常访问站点页面 5. 日志 记录错误报警信息 ——应用程序日志 由应用程序或者系统程序记录的事件 ——安全性日志 查看有效和无效的登录尝试事件,以及资源使用相关的事件 ——系统日志 AIX系统日志: errpt"more命令 最近系统中没有出现错误。 ----------------------- 简单操作-服务器运维手册全文共12页,当前为第1页。 简单操作-服务器运维手册全文共12页,当前为第2页。 简单操作-服务器运维手册全文共12页,当前为第3页。 简单操作-服务器运维手册全文共12页,当前为第4页。 简单操作-服务器运维手册全文共12页,当前为第5页。 简单操作-服务器运维手册全文共12页,当前为第6页。 简单操作-服务器运维手册全文共12页,当前为第7页。 简单操作-服务器运维手册全文共12页,当前为第8页。 简单操作-服务器运维手册全文共12页,当前为第9页。 简单操作-服务器运维手册全文共12页,当前为第10页。 内存使用率是否超过70%或者其他定义阀值 简单操作-服务器运维手册全文共12页,当前为第11页。 简单操作-服务器运维手册全文共12页,当前为第12页。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值