系统性能调优CPU与内存
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与内存的更多相关文章
- 性能调优-CPU方面,内存方面
CPU调优 首先要清楚数据库应用的分类,一般分为两类:OLTP(Online Transaction Processing,在线事务处理)和OLAP(Online Analytical Process ...
- JVM 调优 内存调优 CPU 使用调优 锁竞争调优 I/O 调优
Twitter 工程师谈 JVM 调优 2016年03月24日 10:22:30 wenniuwuren https://blog.csdn.net/wenniuwuren/article/detai ...
- linux系统性能调优第一步——性能分析(vmstat)
linux系统性能调优第一步--性能分析(vmstat) 分类: LINUX 性能调优的第一步是性能分析,下面从性能分析着手进行一些介绍,尤其对linux性能分析工具vmstat的用法和实践进行详细介 ...
- Linux操作系统性能调优的方法
http://www.cnblogs.com/L-H-R-X-hehe/p/3963442.html Linux是一套免费使用和自由传播的类Unix操作系统,Linux不同的发行版本和不同的内核对各项 ...
- Perf Event :Linux下的系统性能调优工具
Perf Event :Linux下的系统性能调优工具 2011-05-27 10:35 刘 明 IBMDW 字号:T | T Perf Event 是一款随 Linux 内核代码一同发布和维护的性能 ...
- Android系统性能调优工具介绍
http://blog.csdn.net/innost/article/details/9008691 经作者授权,发表Tieto某青年牛的一篇<程序员>大作. Android系统性能调优 ...
- net 关于系统性能调优了解和看法
系统性能调优这是每个大中型项目的必要手段,当系统运行积累到一定量的时候 这个时候就需要一个质变的过程那这个时候就少不了优化和调整 (前几天看了一篇文章 感觉写的挺好,也挺实在的 链接:http:// ...
- 【总结】性能调优:JVM内存调优相关文章
[总结]性能调优:JVM内存诊断工具 [总结]性能调优:CPU消耗分析 [总结]性能调优:消耗分析 JVM性能调优
- LAMP 系统性能调优之内核调优措施
LAMP 系统性能调优之内核调优措施 2011-03-18 11:21 Sean A. Walberg 网络转载 字号:T | T 在对系统的 Apache.PHP 和 MySQL 组件进行调优之前, ...
随机推荐
- Bootstrap页面布局10 - BS代码
网页中标记代码内容使用code和pre标签 要在HTML中显示标签本来的样子需要转化为实体 在此附上百度的实体字符:http://baike.baidu.com/view/4757776.htm#3 ...
- PIVOT 用于将列值旋转为列名
PIVOT 用于将列值旋转为列名(即行转列),在 SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT 的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )A ...
- Asp.Net MVC Control向View传值
1.通过View(Parameter)参数传值 Control: namespace MyMVCDemo.Controllers { public class PersonControlle ...
- 【Java 进阶篇】【第二课】异常处理
概念 异常处理的存在是为了: 允许程序员跳过无法处理的问题,继续开发后续的工作,或根据异常做出更加聪明的处理方式. Java中存在一类对象叫“异常对象”. 当异常情况发生时,就会暗战预先的设定,抛 ...
- C/C++ 判断主机字节存储序列
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA0oAAADFCAIAAADltpUqAAAgAElEQVR4nOyd65XyvA6FqYASKIEWqI
- [LeetCode] Decode Ways(DP)
A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...
- Swift-05-SizeOf&&SizeOfValue
在C中定义的运算符,可以作用于类型或者某个实际的变量,并返回其在内存中的尺寸size_t. 在Cocoa中,我们一般用来将数组生成NSData的时候传入数据长度.因为在OC里面,sizeOf这个C运算 ...
- PySe-002-Py-简单示例及编码设定
非常简单而又国际化的例子 Hello World!在控制台依次输入命令:python, print "This is first program %s" % "Hello ...
- 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 ...
- 我的工具箱之Putty
这是类似于SecureCrt的终端仿真软件,个人感觉比SecureCrt差一点. 下载地址是:http://pan.baidu.com/s/1sko0GrF SecureCrt网址在我的工具箱之Sec ...