• 系统性能调优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

  • 相关阅读:
    现代软件工程 第一章 【概论】第8题——原旭莹,张晓丽
    现代软件工程 第一章 【概论】第2题——孙雪莹
    现代软件工程 第一章 【概论】第11题——原旭莹
    现代软件工程 第一章 【概论】第6题——原旭莹
    现代软件工程 第一章 【概论】第9题——孙雪莹
    现代软件工程 第一章 【概论】第7题——原旭莹
    现代软件工程 第一章 【概论】第12题——张晓丽
    现代软件工程 第一章 【概论】第5题——原旭莹
    现代软件工程 第一章 【概论】第4题——张功
    [Python]conda与 virtualenv虚拟环境配置
  • 原文地址:https://www.cnblogs.com/songyuejie/p/5267935.html
Copyright © 2020-2023  润新知