CPU相关术语

处理器:插到系统插槽或者处理器版上的物理芯片,以核或者硬件线程的方式包含了一块或者多块CPU。

核:一颗多核处理器上的一个独立CPU实例。核的使用时处理器扩展的一种方式,有称为芯片级多处理器(chip-level multiprocessing,CMP)。

硬件线程:一种支持在一个核上同时执行多个线程(包括Intel的超线程技术)的CPU架构,每个线程是一个独立的CPU实例。这种扩展的方法又称为多线程。

CPU指令:单个CPU操作,来源于它的指令集。指令用于算术操作、内存I/O,以及逻辑控制。

逻辑CPU:又称为虚拟处理器,一个操作系统CPU的实例(一个可调度的CPU实体)。处理器可以通过硬件线程(这种情况下又称为虚拟核)、一个核、或者一个单核的处理器实现。

调度器:把CPU分配给线程运行的内核子系统。

运行队列:一个等待CPU服务的可运行线程队列。

CPU架构

多进程,多线程

大多数处理器都以某种形式提供多个CPU。对于想使用这个 功能的应用程序来说,需要开启不同的执行线程以并发运行。对于一个64颗CPU的系统来说,这意味着一个应用程序如果同时满足所有CPU,可以达到最快64倍的速度,或者64倍的负载。应用程序可以根据CPU数目进行有效放大的能力又称为扩展性。

应用程序在多CPU上扩展的技术分为多进程和多线程,如图所示:

内存

系统主存存储应用程序和内核指令,包括它们的工作数据,以及文件系统缓存。许多系统中,存放这些数据的二级存储是主要的存储设备—磁盘—它的处理速度比内存低几个数量级。一旦主存存满,系统可能会在主存和这些存储设备间交换数据。这是一个缓存的过程,它常常成为系统瓶颈,严重影响性能。系统也有可能终止内存占用最多的进程。其它影响系统性能的因素包括分配和释放内存、复制内存,以及管理内存地址空间映射的CPU开销。对多处理器架构的系统,由于连接到本地CPU的内存相对远程CPU访问延时更低,内存本地性也是一个影响因素。。

与内存相关的术语如下

主存:也称为物理内存,描述了计算机的高速数据存储区域,通常是动态随机访问内存(DRAM)。

虚拟内存;一个抽象的主存概念,它(几乎是)无限的和非竞争的。虚拟内存不是真实的内存。

常驻内存:当前处于主存中的内存。

匿名内存:无文件系统位置或者路径名的内存。它包括进程地址空间的工作数据,称作堆。

地址空间:内存上下文。每个进程和内核都有对应的虚拟地址空间。

段:标记为特殊用途的一块内存区域,例如用来存储可执行或者可写的页。

OOM:内存耗尽,内核检测到可用内存低。

页:操作系统和CPU使用的内存单位。它一直以来是4KB或者8KB。现代的处理器允许多种页大小以支持更大的页面尺寸。

缺页:无效的内存访问。使用按虚拟内存时,这是正常事件。

换页:在主存与存储设备间交换页。
交换:源自UNIX,指将整个进程从主存转移到交换设备。Linux中交换指页面转移到交换设备(迁移交换页)。

交换(空间):存放换页的匿名数据和交换进程的磁盘空间。它可以是存储设备的一块空间,也称为物理交换设备,或者是文件系统文件,称作交换文件。部分工具用交换这个术语特指虚拟内存(这是令人误解和不正确的)。

内存分析调优的方法

工具法

页扫描:寻找连续的也扫描(超过10秒),它是内存压力的预兆。Linux中,可以使用sar –B并检查pgscan列。

换页:换页是系统内存低的进一步征兆。Linux,可以使用vmstat并检查si和so列(这里,交换匿名换页)。

vmstat:每秒运行vmstat检查free列的可用内存。

OOM终结者:仅对Linux有效,这些事件可以在系统日志/var/log/messages,或者从dmesg中找到。搜索“Out of Memory”。

top/prstat:查看哪些进程和用户是(常驻)物理内存和虚拟内存的最大使用者(列明参考Man手册,不同版本有所变化)。这些工具野火总结内存使用率。

dtrace/stap/perf:内存分配的栈跟踪,确认内存使用的原因。

检查系统级别

使用率:多少内存被使用,及多少仍可用。物理内存和虚拟内存都需要检查。

饱和度:作为释放内存压力的衡量,页扫描、换页、交换、和Linux OOM终结者牺牲进程的使用程度。

错误:失败的内存分配。

性能监测

性能检测能发现当前的问题以及随着时间推移的行为模式。关键的内存指标如下:

使用率:使用百分比,由可用内存推断。

饱和度:换页、交换、OOM终结者。

静态性能调优

静态性能调优注重解决配置后的环境的问题。对于内存性能,在静态配置中检查如下方面:

主存有多少?

配置允许应用程序使用多少内存(它们自己的配置)?

应用程序使用哪个分配器?

主存的速度?是否是可用的最快的类型?

系统架构是什么?NUMA、UMA?

操作系统支持NUMA吗?

有多少内存总线?

CPU缓存的数量和大小是多少?TLB?

是否配置和使用了大页面?

是否支持和配置了过度提交?

还使用了哪些其他的内存可调参数?

是否有软件强制的内存限制(资源控制)?

分析

vmstat  虚拟和物理存储器统计信息

sar     历史统计信息

slabtop 内核块分配统计信息

ps      进程状态

top     监视每进程存储器使用率

pmap    进程地址空间统计信息

DTrace  分配跟踪

vmstat是虚拟内存统计信息命令。它提供包括当前内存和换页在内的系统内存健康程度总览。

vmstat 1

默认数据列如下,单位为KB

swpd:交换出的内存量。

free:空闲的可用内存。

buff:用于缓冲缓存的内存。

cache:用于页缓存的内存。

si:换入的内存(换页)。

so:换出的内存(换页)。

系统启动后,空闲内存下降并被用于这些缓存以提高性能是正常的。需要时,它们可以被释放以供应用程序使用。

如果si和so列一直非0,那么系统正存在内存压力并换页到交换设备或文件(swapon)。用其它工具可以研究什么在消耗内存,例如能观察每进程内存使用的工具。拥有大量内存的系统中,数据列会不对齐而影响阅读。你可以试着用-S选项修改输出单位为MB

vmstat 1 –Sm

选项-a可以输出非活动和活动页缓存的明细:

vmstat –a 1

内存统计信息可以用选项-S输出成列表。

sar

系统活动报告工具sar可以用来观测当前活动并且能配置保存和报告历史统计数据。

-B:换页统计信息      千字节/秒

-H:大页面统计信息    千字节

-r:内存使用率        千字节

-R:内存统计信息      页面/秒

-S:交换空间统计信息  千字节

-W:交换统计信息       页面/秒

pg表示页,kb表示KB,%表示百分比以及/s表示每秒。完整的列表见Man手册

其中包含更多百分比统计信息。

slabtop

Linux的slabtop命令可以通过slab分配器输出内核slab缓存使用情况。类似top,它实时更新屏幕。

slabtop –sc

对象数量OBJS

多少活动的ACTIVE

使用百分比USE

对象大小OBJ SIZE,字节

缓存大小CACHE SIZE,字节

选项-sc按缓存大小排序,最大值在顶端。

slab统计信息取自/proc/slabinfo,也可以用vmstat –m输出。

ps

top

prstat

pmap

系统性能调优CPU与内存的更多相关文章

  1. 性能调优-CPU方面,内存方面

    CPU调优 首先要清楚数据库应用的分类,一般分为两类:OLTP(Online Transaction Processing,在线事务处理)和OLAP(Online Analytical Process ...

  2. JVM 调优 内存调优 CPU 使用调优 锁竞争调优 I/O 调优

    Twitter 工程师谈 JVM 调优 2016年03月24日 10:22:30 wenniuwuren https://blog.csdn.net/wenniuwuren/article/detai ...

  3. linux系统性能调优第一步——性能分析(vmstat)

    linux系统性能调优第一步--性能分析(vmstat) 分类: LINUX 性能调优的第一步是性能分析,下面从性能分析着手进行一些介绍,尤其对linux性能分析工具vmstat的用法和实践进行详细介 ...

  4. Linux操作系统性能调优的方法

    http://www.cnblogs.com/L-H-R-X-hehe/p/3963442.html Linux是一套免费使用和自由传播的类Unix操作系统,Linux不同的发行版本和不同的内核对各项 ...

  5. Perf Event :Linux下的系统性能调优工具

    Perf Event :Linux下的系统性能调优工具 2011-05-27 10:35 刘 明 IBMDW 字号:T | T Perf Event 是一款随 Linux 内核代码一同发布和维护的性能 ...

  6. Android系统性能调优工具介绍

    http://blog.csdn.net/innost/article/details/9008691 经作者授权,发表Tieto某青年牛的一篇<程序员>大作. Android系统性能调优 ...

  7. net 关于系统性能调优了解和看法

    系统性能调优这是每个大中型项目的必要手段,当系统运行积累到一定量的时候 这个时候就需要一个质变的过程那这个时候就少不了优化和调整 (前几天看了一篇文章 感觉写的挺好,也挺实在的  链接:http:// ...

  8. 【总结】性能调优:JVM内存调优相关文章

    [总结]性能调优:JVM内存诊断工具 [总结]性能调优:CPU消耗分析 [总结]性能调优:消耗分析 JVM性能调优

  9. LAMP 系统性能调优之内核调优措施

    LAMP 系统性能调优之内核调优措施 2011-03-18 11:21 Sean A. Walberg 网络转载 字号:T | T 在对系统的 Apache.PHP 和 MySQL 组件进行调优之前, ...

随机推荐

  1. Bootstrap页面布局10 - BS代码

    网页中标记代码内容使用code和pre标签 要在HTML中显示标签本来的样子需要转化为实体 在此附上百度的实体字符:http://baike.baidu.com/view/4757776.htm#3 ...

  2. PIVOT 用于将列值旋转为列名

    PIVOT 用于将列值旋转为列名(即行转列),在 SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT 的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )A ...

  3. Asp.Net MVC Control向View传值

     1.通过View(Parameter)参数传值     Control: namespace MyMVCDemo.Controllers { public class PersonControlle ...

  4. 【Java 进阶篇】【第二课】异常处理

    概念 异常处理的存在是为了:   允许程序员跳过无法处理的问题,继续开发后续的工作,或根据异常做出更加聪明的处理方式. Java中存在一类对象叫“异常对象”. 当异常情况发生时,就会暗战预先的设定,抛 ...

  5. C/C++ 判断主机字节存储序列

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA0oAAADFCAIAAADltpUqAAAgAElEQVR4nOyd65XyvA6FqYASKIEWqI

  6. [LeetCode] Decode Ways(DP)

    A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...

  7. Swift-05-SizeOf&&SizeOfValue

    在C中定义的运算符,可以作用于类型或者某个实际的变量,并返回其在内存中的尺寸size_t. 在Cocoa中,我们一般用来将数组生成NSData的时候传入数据长度.因为在OC里面,sizeOf这个C运算 ...

  8. PySe-002-Py-简单示例及编码设定

    非常简单而又国际化的例子 Hello World!在控制台依次输入命令:python, print "This is first program %s" % "Hello ...

  9. zero3- JPA http://www.cnblogs.com/holbrook/archive/2012/12/30/2839842.html

    1.很好的博客:http://www.cnblogs.com/holbrook/archive/2012/12/30/2839842.html 2. 最新的搬到github : http://holb ...

  10. 我的工具箱之Putty

    这是类似于SecureCrt的终端仿真软件,个人感觉比SecureCrt差一点. 下载地址是:http://pan.baidu.com/s/1sko0GrF SecureCrt网址在我的工具箱之Sec ...