对于cpu,目前比较关心的是cpu的利用率还有cpu的load,或者还有cpu运行队列。

cpu利用率

cpu利用率分为sys,us。分别为操作系统和用户进程所占用的cpu利用率。sys的占用,一般是进行内核操作,比如线程的调度,网络请求等操作。cpu利用率是指一段时间内,对cpu占用的时间比。比如30% ,如果是已1m为单位统计的,就是说1m内有60*0.3s的cpu占用。

通常来说,cpu利用率是越高越好,因为这意味着cpu资源可以充分被利用,计算任务可以快速被计算完成。当然这不是绝对的,也有可能是程序有问题,在空吃cpu,所以还是需要具体分析cpu到底在执行什么任务。放在线上服务的场景下,也并不意味着我们要把cpu的利用率达到很高,因为这意味着空闲cpu资源很少,如果线上有大的请求波动的话,会造成故障。

cpu的空闲可能有三个原因造成:

1. 线程在等待外部资源,比如网络返回。

2.线程被阻塞,比如在等锁的释放等。

3.线程真的很闲

查看cpu利用率方法:top , vmstat 1, top -p pid -H (可以查看一个进程下的线程的cpu占用)

cpu Load

cpuLoad是指一段时间内,cpu正在处理和等待处理的任务的总和(我认为至少不是进程维度的)。

一般来说,cpu的load不宜过大,最大不应该操作系统的内核数(逻辑cpu数, 逻辑cpu数=物理CPU个数 * 每个物理CPU的核心数 * 超线程数量)。因为load超过这个数的话,一般会导致cpu过于繁忙,可能会引起调度比较繁忙,造成性能下降。

查看load方法:top

查看cpu核数方法:

# 查看物理CPU个数

cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

#查看每个物理CPU中的核心数

cat /proc/cpuinfo| grep "cpu cores"| uniq

#查看逻辑CPU的个数

cat /proc/cpuinfo| grep "processor"| wc -l

cpu运行队列

是指排队等待被调度的线程队列。不太清楚这个和load的区别,可能是一个东西。有关特性,可以看cpu load部分

查看方法:vmstat 1

cpuLoad和cpu利用率的关系

一般来说,cpuload高也会导致cpu的利用率高,但也有很大的例外。

CPU负载高利用率低:说明等待执行的任务很多,但是通常任务多CPU使用率也会比较高,如果低就说明CPU根本没工作,那些很多的任务处于等待状态,比如虽然有很多任务在等待执行,但是他们获得cpu的调度,在执行的时候,并没有进行什么实际的操作,比如直接把自己挂起或者直接进行io操作等。但是一般在这种情况下,load也应该是比较低的,所以需要查看下是否是进程僵死(这个我不理解是什么意思,但是还是记录一下,看以后会不会明白。可以通过命令ps –axjf查看是否存在D状态的进程,该状态时不可中断的睡眠状态。)或者程序有什么问题,比如在不停的创建新的线程来执行任务。

CPU利用率高负载低:说明任务少,但是任务执行时间长,有可能是程序本身有问题,如果没有问题那么计算完成后则利用率会下降。

提高/降低cpu利用率

在多线程的场景下,通常我们会使用固定大小的线程池来对任务进行处理。如果出现cpu利用率低的情况,很有可能的情况是,线程在大多数的时间都被阻塞了,比如锁等待或者io等待。在这种情况下,可以增加线程的数量,来提高cpu资源的利用率,当然也要考虑网卡的使用是否有瓶颈。当然,并不是说每次遇到这种情况,都应该直接增大线程数,造成cpu空闲的原因还有锁等待等因素,这种情况下增加线程也不会有理想的效果,应该首先分析如何消除同步的影响。

所以,线程池的设定,也可以通过考量在全负荷运转时,系统的load(cpu任务队列)还有cpu利用率来对线程池的线程数进行适当的调整。

比如,如果线程执行的任务本身对cpu的消耗比较高,大多都是cpu计算型的长任务,而且我们对线程池的线程数设的比较高,操作系统的表现就会是load很高,超过了cpu核数,而且cpu的利用率很高。这在线上的服务器是比较危险的,这时,在确认我们的程序没有问题的前提下,可以根据单个线程的cpu利用率来对线程数进行降低。如果因为程序本身的问题,导致了吃cpu,需要先解决程序中的问题。

其他

vmstat还可以看到上下文切换的次数,中断的次数,也是非常有用的指标,如下图中的cs表示每秒的context switch 数。in表示每秒的中断数,包括clock数。

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 124668 158788 246668 3298720 0 1 7 21 0 0 3 1 96 0 0
0 0 124668 158540 246668 3298832 0 0 0 29 3065 4529 3 1 96 0 0
0 0 124668 157648 246668 3299012 0 0 0 65 3306 4868 2 1 97 0 0

系统性能--CPU的更多相关文章

  1. MySQL自动化安装(双主多从读写分离)

    shell #!/bin/bash # Create by # version 1.0 # // # # check out lockfile whether or not exist IsInput ...

  2. nGrinder对监控机器收集自定义数据及源码分析

    转载:https://blog.csdn.net/neven7/article/details/50782451 0.背景 性能测试工具nGrinder支持在无需修改源码的情况下,对目标服务器收集自定 ...

  3. 性能测试工具 nGrinder 项目剖析及二次开发

    转:https://testerhome.com/topics/4225 0.背景 组内需要一款轻量级的性能测试工具,之前考虑过LR(太笨重,单实例,当然它的地位是不容置疑的),阿里云的PTS(htt ...

  4. 使用async-profiler简单分析zeebe 工作流引擎的性能

    刚开始的时候直接使用的系统暴露的prometheus metrics,发现越高的版本反而性能越差,期间使用过了 perf 打算使用perf 生成火焰图的,但是因为符号缺失,只找到了占用较高的任务,详细 ...

  5. day002-Linux基础之常用基本命令讲解

    Linux系统一切皆命令 命令1:pwd 显示当前所在目录命令2:cd(change directory) 切换目录 cd / 回到根目录 cd .. 返回上一级命令3:ls 查看当前目录下的文件 l ...

  6. 统计和分析系统性能【IO CPU 内存】的工具集合

    统计和分析系统性能[IO CPU 内存]的工具集合 blktrace http://www.oschina.net/p/blktrace 获取磁盘写入的信息 root@demo:~/install/p ...

  7. 系统性能调优CPU与内存

    CPU相关术语 处理器:插到系统插槽或者处理器版上的物理芯片,以核或者硬件线程的方式包含了一块或者多块CPU. 核:一颗多核处理器上的一个独立CPU实例.核的使用时处理器扩展的一种方式,有称为芯片级多 ...

  8. linux系统性能监控--CPU利用率

    在对系统的方法化分析中,首要且最基本的工具之一常常是对系统的 CPU利用率进行简单测量. Linux以及大多数基于 UNIX的操作系统都提供了一条命令来显示系统的平均负荷(loadaverage) . ...

  9. python之psutil模块(获取系统性能信息(CPU,内存,磁盘,网络)

    一.psutil模块 1. psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等) ...

随机推荐

  1. Http的那些事: Content-Type

    Content-Type 无疑是http中一个非常重要的属性了, request 中可以存在, 也可以不存在( request的Content-Type 默认是 */*, 实际上呢, 如果不存在Con ...

  2. 源码的excel导入导出

    获取所有数据,将数据进行有序切割,在进行遍历,将其导出. //设置header header("content-type:text/html;charset=utf-8"); // ...

  3. autolayout后获取frame

    autolayout设置完layout立即用frame拿对应的值可能拿不准,因为autolayout设置完布局后布局引擎并不会马上去更改布局,而是将布局标记为待更新,此时可以用的方法有两种,一是延时0 ...

  4. MySQL的or/in/union与索引优化

    转载自:MySQL的or/in/union与索引优化 https://blog.csdn.net/zhangweiwei2020/article/details/80005590 假设订单业务表结构为 ...

  5. 【Noip模拟 20160929】花坛迷宫

    题目描述 圣玛格丽特学园的一角有一个巨大.如迷宫般的花坛.大约有一个人这么高的大型花坛,做成迷宫的形状,深受中世纪贵族的喜爱.维多利加的小屋就坐落在这迷宫花坛的深处.某一天早晨,久城同学要穿过这巨大的 ...

  6. ELK Redis高性能加速

    1.下载redis并安装好 wget http://download.redis.io/releases/redis-2.8.13.tar.gz tar zxf redis-.tar.gz cd re ...

  7. oracle 连接字符串的问题

    未指定的错误,发生了一个 Oracle 错误,但无法从 Oracle 中检索错误信息.数据类型不被支持. 原因是你用的ADO   for   ORACLE的驱动是微软的Microsoft OLE DB ...

  8. 2018年秋季学期面向对象程序设计(JAVA)课程总结

    2018年秋季学期面向对象程序设计(JAVA)课程总结 时值2018年年末,按惯例对本学期教学工作小结如下: 1. 教学资源与教学辅助平台 教材:凯 S.霍斯特曼 (Cay S. Horstmann) ...

  9. flume知识点总结

    首先介绍一下在flume中常用的一个数据格式,以及使用该格式的优缺点:  从flume写数据到hdfs中的时候,使用二进制格式相对于使用纯文本来说是一种更好的选择,因为大多数二进制格式都有一些方法指明 ...

  10. 十六、Mediator 仲载者设计模式

    原理: 代码清单: Mediator public interface Mediator { void createColleagues(); void colleagueChanged(); } C ...