3.1内存性能统计信息

3.1.1 内存子系统和性能

和CPU相比,内存的读写速度都大大落后于CPU。为了弥补这个差距,通常CPU会采用高速缓存的机制(高cache)。

3.1.2 内存子系统(虚拟存储器)

在物理内存寻址时,Linux将其分成块或者内存“页”。内存页面过小,会造成管理内存时产生大的花销;内存页面大时,则容易造成内存的浪费。

l  交换(物理内存不足)

内存的大小是固定的,当内存不够用时,内核会使用硬盘作为临时存储器,这个硬盘空间称为交换分区(swap space)。

交换分区确实能够让大内存的程序运行,但是却非常慢。如果系统性能不佳,有可能是系统使用了较多的swap。

l  缓冲区(buffer)和缓存(cache)(物理内存太多)

如果你的内存很多,系统不会浪费不用的。系统会把多出来的内存用来做缓冲或者缓存使用,这样能大大加快程序的读写。

应用程序写入到磁盘的速度是很慢的,Linux为了能够让程序能够马上执行,会把文件数据保存到缓冲区,然后在某个时间,再把缓冲区的数据写入到磁盘。

缓存和缓冲正好倒过来,Linux会把程序用过的数据放在内存中,这样下次使用的时候就不用去到磁盘读取了。

缓冲和缓存都是为了提高系统性能,提高程序的运行速度。虽然看起来系统free(空余)的内存很少,但这是个好事。

l  活跃和非活跃内存

活跃内存是指当前进程使用的内存,不活跃的内存是已经被分配了,但暂时还没有使用的内存。

3.2Linux性能工具:CPU与内存

3.2.1 vmstat

vmstat统计信息说明

swap

当前交换到硬盘的内存总量

free

未被系统使用的物理内存总量

buff

系统共缓冲区的大小

cache

缓存区的大小

si

上次采样中,从硬盘进来的内存交换速率

so

上次采样中,到硬盘去的内存交换速率

vmstat的输出,默认是平均模式。

vmstat –a 可以查看活跃和非活跃的内存

vmstat 1 5 查看过去五秒的采样数据,可以看出没有内存数据的交换。

vmstat –s可以查看系统的统计信息

3.2.2 top

具体用法可以参考CPU章节的top 的解析。

3.2.3 free

free –m的输出

free内存部分统计信息说明

total

物理内存与交换空间的总量

used

使用的物理内存和交换分区的容量

free

未使用的物理内存和交换分区的容量

 

-/+   buffers/cache:

对于used来说,把buff和cache当成已使用的内存,显示的是内存使用的总和;对于free来说,把buff和cache当作空闲内存统计的内存总和。

3.2.4 slabtop

slabtop实时显示内核是如何分配其各种缓存的,以及这些缓存的被占用情况。在内部,内核有一系列的缓存,他们由一个或者多个分片(salb)构成。

默认情况下slab会每3秒更新一次数据,可以看出多数的分片都是活跃的。

3.2.5 sar

sar给出的Linux内存子系统的信息相当完整,除了能看到绝对值,还能提供一些重要数值的变化率。此外,sar还能统计CPU和磁盘I/O的统计数据。

sar –r 1 5 过去5秒的内存信息

[root@localhost   ~]# sar -r 1 5

Linux   2.6.18-308.el5 (localhost)    2018年01月15日

18时40分40秒 kbmemfree kbmemused  %memused kbbuffers  kbcached kbswpfree kbswpused  %swpused    kbswpcad

18时40分41秒      102816   3940916     97.46      801872   1369084   4023580      170716      4.07     50584

18时40分42秒      102816   3940916     97.46      801872   1369084   4023580      170716      4.07     50584

18时40分43秒      102816   3940916     97.46      801872   1369084   4023580      170716      4.07     50584

18时40分44秒      102816   3940916     97.46      801872   1369084   4023580      170716      4.07     50584

18时40分45秒      102816   3940916     97.46      801872   1369084   4023580      170716      4.07     50584

Average:       102816   3940916       97.46    801872   1369084     4023580    170716      4.07       50584

sar内存统计信息说明

kbmemfree

当前空闲或未被使用的内存总量

%memused

被使用的物理内存总量所占的百分比

%swpused

被使用的交换分区的百分比

kbswapcad

该项内存包括了交换到磁盘和已存在内存中的

3.2.6 /proc/meminfo

Linux内核提供用户可读文本文件/proc/meminfo来显示当前系统范围的内存性能统计信息,里面的信息非常全面。如果需要定期更新的数据,需要自行编写脚本实现。

meminfo统计信息部分说明

MemTotal

系统物理内存总量

SwapCached

在交换分区和物理内存中都存在的内存总量

Active

当前系统中处于活跃状态的内存

HightTotal

高端内存容量

Dirty

等待写入磁盘的内存

Writeback

当前被写入磁盘的内存

Slab

内核分片内存的总量

Committed_AS

所需内存容量,在当前工作负载下,这个容量几乎是不会耗尽的。通常情况下,内核会分配更多的内存,预期应用程序会超分配。如果所有的应用程序都使用自己被分配的内存,这个就是你需要的物理内存的容量。

PageTables

为内核页表保留的内存容量

Linux性能优化 第三章 性能工具:系统内存的更多相关文章

  1. Linux性能优化 第七章 性能工具:网络

    7.1 网络I/O介绍 Linux和其他主流操作系统中的网络流量被抽象为一系列的硬件和软件层次. 链路层,也就是最低的一层,包含网络硬件,如以太网设备.在传送网络流量时,这一层并不区分流量类型,而仅仅 ...

  2. Linux性能优化 第五章 性能工具:特定进程内存

    5.1 Linux内存子系统 在诊断内存性能问题的时候,也许有必要观察应用程序在内存子系统的不同层次上是怎样执行的.在顶层,操作系统决定如何利用交换内存和物理内存.它决定应用程序的哪一块地址空间将被放 ...

  3. Linux性能优化 第六章 性能工具:磁盘I/O

    6.1 磁盘I/O介绍 一般来说,Linux磁盘的每个分区要么包含一个文件系统,要么包含一个交换分区.这些分区被挂载到Linux根文件系统,该系统由/etc/fstab指定.这些被挂载的文件系统包含了 ...

  4. Linux性能优化 第四章 性能工具:特定进程CPU

    4.1进程性能统计信息 4.1.1. 内核时间VS用户时间 一个应用程序所耗时间最基本的划分是内核时间与用户时间.内核时间是消耗在Linux内核上的时间,而用户时间则是消耗在应用程序或库代码上的时间. ...

  5. Android性能优化:手把手带你全面实现内存优化

      前言 在 Android开发中,性能优化策略十分重要 本文主要讲解性能优化中的内存优化,希望你们会喜欢 目录   1. 定义 优化处理 应用程序的内存使用.空间占用 2. 作用 避免因不正确使用内 ...

  6. JVM学习笔记-第三章-垃圾收集器与内存分配策略

    JVM学习笔记-第三章-垃圾收集器与内存分配策略 tips:对于3.4之前的章节可见博客:https://blog.csdn.net/sanhewuyang/article/details/95380 ...

  7. 《深入理解java虚拟机》第三章 垃圾收集器与内存分配策略

    第三章 垃圾收集器与内存分配策略 3.1 概述 哪些内存需要回收 何时回收 如何回收 程序计数器.虚拟机栈.本地方法栈3个区域随线程而生灭. java堆和方法区的内存需要回收.   3.2 对象已死吗 ...

  8. Linux性能优化从入门到实战:13 内存篇:内存指标/工具总结、问题定位和调优

    内存性能指标 系统内存指标 已用内存和剩余内存很容易理解,就是已经使用和还未使用的内存. 共享内存是通过 tmpfs 实现的,所以它的大小也就是 tmpfs 使用的内存大小.tmpfs 其实也是一种特 ...

  9. 性能优化系列三:JVM优化

    一.几个基本概念 GCRoots对象都有哪些 所有正在运行的线程的栈上的引用变量.所有的全局变量.所有ClassLoader... 1.System Class.2.JNI Local3.JNI Gl ...

随机推荐

  1. day8 大纲

    01 昨日内容回顾 文件操作 文件操作的流程: 1,打开文件创建文件句柄. 2,对文件句柄进行操作. 3,关闭文件句柄. 读, r r+ rb r+b read() 全部读取 read(n) 读取一部 ...

  2. 【转存】Vue组件选项props

    原帖地址 前面的话 组件接受的选项大部分与Vue实例一样,而选项props是组件中非常重要的一个选项.在 Vue 中,父子组件的关系可以总结为 props down, events up.父组件通过  ...

  3. 设计模式-责任链模式Chain of Responsibility)

    一.定义 职责链模式是一种对象的行为模式.在职责链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链 ...

  4. NET设计模式 第二部分 结构性模式(9):装饰模式(Decorator Pattern)

    装饰模式(Decorator Pattern) ——.NET设计模式系列之十 Terrylee,2006年3月 概述 在软件系统中,有时候我们会使用继承来扩展对象的功能,但是由于继承为类型引入的静态特 ...

  5. 【java】浅谈for循环

    for语法: for(初始化条件; 判断条件(bool型,不可缺省); 条件改变)// 初始化条件,条件改变可以是多条,eg for(x=1,y=1;x<4;x++,y++) { 执行的操作 } ...

  6. Random 中的种子怎么理解

    种子就是生成随机数的根,就是产生随机数的基础.计算机的随机数都是伪随机数,以一个真随机数(种子)作为初始条件,然后用一定的算法不停迭代产生随机数.Java项目中通常是通过Math.random方法和R ...

  7. Flask--异常处理

    异常处理: abort(404)-捕获HTTP抛出的统一状态码 @app.errorhandler-捕获全局异常错误码,捕获异常错误 @app.route("/demo4") de ...

  8. 安装node.msi 格式的文件失败

    in10 安装node.msi格式的文件,出现2503 2502 错误码, win+x 打开 在命令提示符窗口中输入: msiexec /package "安装msi格式的文件的全路径&qu ...

  9. 【springboot】之将properties配置转为bean

    将springboot里面非application.yml 或者application.properties 里面的key-value转为JavaBean /** * @Describe: DataS ...

  10. html框内文字垂直居中的方法

    由于无法知道框内文字的高度,很难确定垂直空间的位置.vertical-align:middle仅对td元素有效,无论单行和多行均可实现垂直居中.