cpu子系统(优化)
如果业务已经在线上,你要优化,第一步如何做
首先进行服务器数据采集,和性能监测分析
一:使用cacti,nagios,zabbix 等监控工具
二:使用linux 自带的一些监控指令:vmstat,iostat,mpstat,sar 等等
cpu 子系统
内存子系统
IO子系统
网格子系统
一 cpu(central processing unit)子系统
cpu的占用主要取决于什么样的资源在cpu上运行
比如拷贝一个文件通常占用较少的CPU 只是在完成拷贝以后给一个中断让CPU 知道拷贝已经完成
科学计算通常占用较多的cpu,大部分计算工作需要在cpu上完成,内存,硬盘等子系统只做暂时的数据存储工作
要想检测和理解cpu的性能需要知道一些操作系统的基本知识:比如:中断,进程调度,进程上下文切换,可运行队列等
cpu 单核在同一个时间点只能干一件事,但单核cpu一样可以跑多任务操作系统,其实就是分cpu资源(时间片)
cpu很无辜,是个任劳任怨的打工仔,每时每刻都有工作在做,(进程、线程)并且自己有一张工作清单(可运行队列)
由老板(进程调度)来决定他该干什么,他需要和老板沟通以便得到老板的想法并及时调整自己的工作(上下文切换),
所有打工仔(cpu)除了做工作以外,还有大量的时间和精力花在沟通和汇报上
中断 设备通知内核,完成了一次数据处理过程.也可以理解为:cpu停止下来去执行别的命令.列如:完成一次IO。或者完成一次网络数据包的发送
内核处理过程 --控制优先级,进行任务调度
用户进程
上下文切换 -- 把正在占用的cpu的进程放回队列中(每次内核的上下文切换,资源被用于关闭在cpu寄存器中的线程和放置在队列中)
运行队列
监测cpu性能的底线是什么呢?通常我们期望我们的系统能到达以下目标
CPU利用率,如果CPU有100%利用率,那么应该到达这样一个平衡:65%-70% User Time,30%-35% System Time,0%-5% Idle Time;
上下文切换,上下文切换应该和 CPU 利用率联系起来看,如果能保持上面的 CPU 利用率平衡,大量的上下文切换是可以接受的;
查看cpu信息
cat /proc/cpuinfo --能看到指令集,cpu核数,频率,缓存等信息
要采集cpu当前正在运行的信息数据,要用到下面的命令或者监控软件(nagios,zabbix)等
top,uptime,vmstat,mpstat(需要 yum install sysstat),sar(需要 yum install sysstat)
vmstat 2 每2秒钟采集一下数据
vmstat 2 3 每2秒钟采集一次,一共采集3次
[root@zhuchenghan2 ~]# vmstat
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 0 1663968 86724 49032 0 0 6 1 9 9 0 0 100 0 0
r 可运行队列.单核cpu,不应该超过3(经验得到的数据,只是表明大于这个值表面运行队列有点长
b 当前被阻塞的进程,一般这些进程都是在等待某些外部资源而被阻塞 >3 需要注意,而且一直出现或者经常出现,就更值得注意
in 中断数,一般代表大量设备操作成功通知内核
cs 上下文切换.一般代表任务需要紧急被cpu处理,数字高只能说明内核在充分发挥他的任务调度作用,不能简单通过数字判断cpu就出现瓶颈
us 用户进程所占用的cpu时间的百分比
sy 内核在进行任务调度所占用的cpu时间的百分比
id cpu空闲所占用的时间百分比,仅仅0不能简单的判断cpu出现的瓶颈,只能说它被充分利用
wa 等待IO 所消耗的时间百分比
st 被硬件虚拟化的虚拟机所消耗的时间百分比
mpstat 和 vmstat 类似 不同的是 mpstat可以输出多个处理器的数据、
mpstat -P ALL 1 -P ALL 表示查看所有cpu核,1表示每一秒显示一次
10:46:35 AM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
10:46:36 AM all 26.13 0.00 6.53 0.00 3.52 9.05 0.00 54.77 19478.22
10:46:36 AM 0 25.74 0.00 6.93 0.00 2.97 7.92 0.00 56.44 9740.59
10:46:36 AM 1 26.73 0.00 6.93 0.00 3.96 10.89 0.00 51.49 9739.60
nice 优先级 能调的范围是 -20 到19 -20表示优先级最高,19最低
用户运行一个程序默认给的优先级为0
renice 对一个已经运行的进程进行nice值的调整
renice 19 pid
vim /tmp/test.sh
a=1
whilie [ $a -lt 1000000 ]
do
let a++
done
nice 优先级高的能够优先分配资源,跑得快,花费的时间少,负载越高,效果越明显
实验
在一个负载高的情况下做效果更好,比如一个大文件的cp
[root@zhuchenghan2 ~]# time sh test.sh
real 0m15.137s
user 0m7.310s
sys 0m0.233s
[root@zhuchenghan2 ~]# time nice --19 sh test.sh
real 0m7.686s
user 0m7.324s
sys 0m0.236s
对比发现高优先级的花费时间少
注意:只有管理员才能把优先级往高调,普通用户只能调自己的,并且只能往低调, 调低后还不能再调高
=============================================================
sar -u 查看cpu相关的历史数据 --这是历史数据,是每十分钟会去采集一次系统相关的数据
sar -u 2 3 两秒一次,显示三次(不是历史数据,是当前动态数据)
sysstat --> 提供sar 命令
sar 的特点:可以对过去时间的系统状态进行分析,但是不能对某个进程进行深入的分析,只能对系统的整体情况进行分析
yum install sysstat -y
service sysstat start
chkconfig sysstat on
安装systat包后,就会自动在 /var/log/sa/saxx 产生数据 xx代表日期
可以使用sar -f /var/log/sa/saxx 去访问 加参数就可以访问不同类型的性能数据
指定查询之前的日期与固定时间点的方法
sar -u -f /var/log/sa/sa18 --查看这个月已经过的18号的cpu历史数据
sar -u -f /var/log/sa/sa18 -s 09:00:00 -e 10:00:00 --指定只看18号9点到10点的cpu历史数据
保存性能数据
sar支持保存成两种格式的文件,一种是文本文件,一种是二进制文件 (只有通过sar自己的命令 -f 参数 才能看)
保存为文本文件,可以直接cat命令查看
sar -p 1 5 > /tmp/test/sar1.txt
保存为二进制文件
sar -p 1 5 -o /tmp/test/sar2.txt 1>/dev/null --会显示到屏幕,可以用1>/dev/null
file /tmp/test/sar2.txt --是data类型文件
sar -f /tmp/test/sar2.txt --使用-f参数读取
cpu子系统(优化)的更多相关文章
- [Unity优化] Unity CPU性能优化
前段时间本人转战unity手游,由于作者(Chwen)之前参与端游开发,有些端游的经验可以直接移植到手游,比如项目框架架构.代码设计.部分性能分析,而对于移动终端而言,CPU.内存.显卡甚至电池等硬件 ...
- WSL优化 (Windows Subsystem for Linux) Linux子系统优化配置
目录 wsl优化 (Windows Subsystem for Linux) Linux子系统优化 1. 永久修改wsl终端字体 2. 修改Linux终端配色 3. 添加WSL到右键菜单 wsl优化 ...
- 编译TensorFlow CPU指令集优化版
编译TensorFlow CPU指令集优化版 如题,CPU指令集优化版,说的是针对某种特定的CPU型号进行过优化的版本.通常官方给的版本是没有针对特定CPU进行过优化的,有网友称,优化过的版本相比优化 ...
- 如何在CPU上优化GEMM(下)
如何在CPU上优化GEMM(下) Array Packing 另一个重要的技巧是数组打包.这个技巧是对数组的存储维度进行重新排序,将某个维度上的连续访问模式在平滑后转换为顺序模式. 如上图所示,在阻塞 ...
- 如何在CPU上优化GEMM(上)
如何在CPU上优化GEMM(上) (TL:DR)TVM提供了抽象接口,用户分别描述算法和算法的实现组织(所谓的调度).通常,在高性能调度中编写算法会破坏算法的可读性和模块性.尝试各种看似有希望的时间表 ...
- Unity渲染优化中文翻译(二)——CPU的优化策略
紧接上一篇文章,继续渲染的优化问题,若有错误,请指出,让我也学习进步,谢谢. 如果游戏渲染问题来自CPU 概括的来说,CPU在一帧的渲染中的工作可以分为三个部分: . 决定谁需要被渲染 . 为GPU准 ...
- MySQL案例05:CPU负载优化
最近有套系统数据库周末总是告警,CPU使用率超过90%,开始由开发那边再跟进处理,我也就没参与,后来发现没进展就登录上去看了下,然后进行了部分优化,优化后效果还是比较明显的,具体优化过程本文会做详细的 ...
- Linux性能优化从入门到实战:07 CPU篇:CPU性能优化方法
性能优化方法论 动手优化性能之前,需要明确以下三个问题: (1)如何评估性能优化的效果? 确定性能的量化指标.测试优化前的性能指标.测试优化后的性能指标. 量化指标的选择.至少要从应用程序 ...
- 一次线上服务高 CPU 占用优化实践 (转)
线上有一个非常繁忙的服务的 JVM 进程 CPU 经常跑到 100% 以上,下面写了一下排查的过程.通过阅读这篇文章你会了解到下面这些知识. Java 程序 CPU 占用高的排查思路 可能造成线上服务 ...
随机推荐
- Junit用断言对控制台输出进行测试
核心思路: 在测试前,将标准输出定向到ByteArrayOutputStream中去 用输出流文件断言内容 测试完成,将标准输出修改为console 具体操作示例 基本通用复制粘贴操作 public ...
- jenkins集成sonar代码审核工具
在项目测试管理过程中,项目上线很多时候时间仓促,导致代码质量不高,测试时间不充分会导致线上出现各种各样的问题,这个时候一方面是增加测试的质量把控,还要从根本上解决开发小哥的代码质量问题.而Sonar这 ...
- PCA降维-最大,最小方差解释
转自http://www.cnblogs.com/jerrylead/archive/2011/04/18/2020209.html http://www.cnblogs.com/jerrylead/ ...
- 前端 JavaScript 基础
内容目录: 一.JavaScript介绍 二.基础语法 2.1 变量 2.2 数据类型 2.3 流程控制 2.5 函数的全局变量和局部变量 2.6 作用域 2.7 词法分析 ...
- sqlservice对于时间的操作
最近在写一个项目时,用到了时间的比较和时间的加减,在这里简单说一下,我也是刚接触数据库不久,如有说的不当之处望大家包涵,指正 一.时间的比较 开始的时候我比较时间用的是 Time>GETDATE ...
- Jmeter-【JSON Extractor】-响应结果中三级key取值
一.请求返回样式 二.取第三个option 三.查看结果
- Jmeter-【beanshell处理器】-获取时间
一.通过操作变量
- MapReduce分区数据倾斜
什么是数据倾斜? 数据不可避免的出现离群值,并导致数据倾斜,数据倾斜会显著的拖慢MR的执行速度 常见数据倾斜有以下几类 1.数据频率倾斜 某一个区域的数据量要远远大于其他区域 2.数据大小倾斜 ...
- Go 转义字符
Go 转义字符 package main import "fmt" func main() { fmt.Printf("Hello\tWorld!") } 本文 ...
- 回滚线段树+bitset优化01背包——cf981E
/*首先考虑如何计算一个点的可能凑出的值,这就是一个01可行性背包问题那么再拓展到一段区间[1..n]的点上,每个query都可以看做是一段区间上的点[l,r]加上一个体积为x的物品,转换到01背包上 ...