如果业务已经在线上,你要优化,第一步如何做

首先进行服务器数据采集,和性能监测分析

一:使用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参数读取

转载于:https://www.cnblogs.com/yingdiblog/p/6929344.html

cpu子系统(优化)相关推荐

  1. mysql 5.1版本无innodb trx_MySQL 5.7: Innodb 事务子系统优化-阿里云开发者社区

    MySQL5.7 : Innodb 事务子系统优化 之前写了篇博客介绍了Percona Server对Read View的优化,顺带简单提到了MySQL5.7的事务子系统优化,详细见http://my ...

  2. 如何在CPU上优化GEMM矩阵乘法

    如何在CPU上优化GEMM矩阵乘法 How to optimize GEMM on CPU (TL;DR) TVM 提供抽象接口,允许用户分别描述算法和算法的实现组织(所谓的调度).通常,在高性能调度 ...

  3. 如何在 CPU 上优化 GEMM

    如何在 CPU 上优化 GEMM (TL;DR) TVM 提供抽象接口,允许用户分别描述算法和算法的实施组织(所谓的调度).通常,在高性能调度中编写算法,会破坏算法的可读性和模块化.尝试各种看似有前途 ...

  4. 如何在CPU上优化GEMM(下)

    如何在CPU上优化GEMM(下) Array Packing 另一个重要的技巧是数组打包.这个技巧是对数组的存储维度进行重新排序,将某个维度上的连续访问模式在平滑后转换为顺序模式. 如上图所示,在阻塞 ...

  5. 如何在CPU上优化GEMM(上)

    如何在CPU上优化GEMM(上) (TL:DR)TVM提供了抽象接口,用户分别描述算法和算法的实现组织(所谓的调度).通常,在高性能调度中编写算法会破坏算法的可读性和模块性.尝试各种看似有希望的时间表 ...

  6. 【Linux 内核 内存管理】优化内存屏障 ① ( barrier 优化屏障 | 编译器优化 | CPU 执行优化 | 优化屏障源码 barrier 宏 )

    文章目录 一.优化屏障 ( 编译器优化 | CPU 执行优化 ) 二.优化屏障源码 一.优化屏障 ( 编译器优化 | CPU 执行优化 ) " 代码 " 编译成 " 可执 ...

  7. 【Android 性能优化】布局渲染优化 ( CPU 渲染优化 | 减少布局的嵌套 | 测量布局绘制时间 | OnFrameMetricsAvailableListener | 布局渲染优化总结 )

    文章目录 一. 减少布局嵌套 二. 布局渲染时间测量 1. FrameMetrics 使用流程 2. FrameMetrics 参数解析 3. FrameMetrics 代码示例 三. 布局渲染优化总 ...

  8. 合批只是对CPU的优化,与GPU没有任何关系

    合批只是对CPU的优化,与GPU没有任何关系 如题. 今天细想了下合批这个东西. 合批是节省了CPU的相关准备工作的工作量. 合批后,经过VS,PS,尝试测试,模板测试后,此时已没有了纹理,顶点,索引 ...

  9. 12 | 套路篇:CPU 性能优化的几个思路

    上一节我们一起回顾了常见的 CPU 性能指标,梳理了核心的 CPU 性能观测工具,最后还总结了快速分 析 CPU 性能问题的思路.虽然 CPU 的性能指标很多,相应的性能分析工具也很多,但理解了各种指 ...

最新文章

  1. 比起商汤IPO,我们更关心那1亿美金和C轮融资的背后大料
  2. eclipse提交项目到github
  3. 弹跳机器人 桌游_有哪些适合 10-15 人的桌游值得推荐?
  4. 多长的企业视频最受欢迎?小于60秒
  5. SAP Cloud for Customer里新的Lead UI对Mashup集成的支持原理
  6. Spring的依赖注入陷阱
  7. node.js简单爬虫
  8. Hadoop精华问答 | Hadoop 和Spark有什么区别?
  9. 邮件退订_如何方便地退订邮件列表
  10. 51 Nod 阶乘后面0的数量
  11. [Python] L1-017. 到底有多二-PAT团体程序设计天梯赛GPLT
  12. mac合上盖子不锁屏_macbook合上盖子不断网的设置
  13. configure: error: /usr/include/openssl is a bad --with-openssl prefix
  14. GNS3模拟思科三层交换机(排错细节)
  15. 易了千明之易语言套装视频教程第四套辅助制作
  16. 【C语言】百度搜歌(只用歌曲或者歌手名字去搜索实现)
  17. php关键词分析工具,搜索引擎关键词查询分析工具
  18. 常见前端九十道面试题及答案-韩烨
  19. 前端和Java,学哪个好?
  20. python全角半角的相互转换

热门文章

  1. 进一步认识golang中的并发
  2. 修复错误配置fstab文件导致系统无法正常启动
  3. 你准备好持续交付(CD)了吗?
  4. asp.net MVC中实现调取web api
  5. Mysql优化系列(1)--Innodb重要参数优化
  6. MySQL Concurrency Problems
  7. 推荐升级ASP.NET Web API 2
  8. 理解smart pointer之三:unique_ptr
  9. 使用 Button 类在 XNA 中创建图形按钮(九)
  10. Prototype Pattern