关于内存的概念及其原理在任何一本介绍操作系统的书本中都可以查阅到。

  理论放一遍,在Linux操作系统中如何查看系统内存使用情况呢?看看内存统计信息有哪些维度。

  一、内存使用量

    

  详细使用方法,man free

    

  top命令,之前在研究cpu性能优化过程中已经用到,但是重点放在CPU相关的指标上。这里重点查看关于内存的指标:

    

    如果swap中used如果used不断在变化, 说明内核在不断进行内存和swap的数据交换,说明内存真的不够用了。

  二、缓存与缓冲区命中率

    这俩是啥意思?cache&&buffer。对于这两者的区别可以通过man free获得它们的说明:

      

    具体含义是什么呢?通过/proc文件系统确认他们的含义:

    /proc 是 Linux 内核提供的一种特殊文件系统,是用户跟内核交互的接口。比方说,用户可以从 /proc 中查询内核的运行状态和配置选项, 查询进程的运行状态、统计数据等,也可以通过 /proc 来修改内核的配置。proc 文件系统同时也是很多性能工具的最终数据来源。
    实际操作使用命令proc,如果无此命令通过yum安装man-pages相关内容。
      

    简而言之就是一个是buffer是针对磁盘的读写缓存,而cache是针对文件的读写页缓存。

    什么是缓存命中率:指直接通过缓存获取数据的请求次数,占所有数据请求次数的百分比。命中率越高,表示使用缓存带来的收益越高,应用程序的性能也就越好。

    下面是查看缓存命中情况的工具:

      cachestat 提供了整个操作系统缓存的读写命中情况。
      cachetop 提供了每个进程的缓存命中情况。

    这俩工具有bcc工具包提供,如果系统无自带,使用yum进行安装。注意安装之后设置PATH环境变量,bcc 软件包默认不会把这些工具配置到系统的 PATH 路径中,所以你得自己手动配置。

    

    cachetop:

    

  三、内存性能指标

    已知如何查看内存相关性能了,那么为了分析内存的性能瓶颈,首先你要知道,怎样衡量内存的性能,也就是性能指标问题。
    首先,你最容易想到的是 系统内存使用情况 ,比如已用内存、剩余内存、共享内存、可用内存、缓存和缓冲区的用量等。
      已用内存和剩余内存很容易理解,就是已经使用和还未使用的内存。
      共享内存是通过 tmpfs (内存的文件系统 )实现的,所以它的大小也就是 tmpfs 使用的内存大小。tmpfs 其实也是一种特殊的缓存。
      可用内存是新进程可以使用的最大内存,它包括剩余内存和可回收缓存。
      缓存包括两部分,一部分是磁盘读取文件的页缓存,用来缓存从磁盘读取的数据,可以加快以后再次访问的速度。另一部分,则是 Slab 分配器中的可回收内存。
      缓冲区是对原始磁盘块的临时存储,用来缓存将要写入磁盘的数据。这样,内核就可以把分散的写集中起来,统一优化磁盘写入。
    第二类很容易想到的,应该是 进程内存使用情况 ,比如进程的虚拟内存、常驻内存、共享内存以及 Swap 内存等。
      虚拟内存,包括了进程代码段、数据段、共享内存、已经申请的堆内存和已经换出的内存等。这里要注意,已经申请的内存,即使还没有分配物理内存,也算作虚拟内存。
      常驻内存是进程实际使用的物理内存,不过,它不包括 Swap 和共享内存。
      共享内存,既包括与其他进程共同使用的真实的共享内存,还包括了加载的动态链接库以及程序的代码段等
      Swap 内存,是指通过 Swap 换出到磁盘的内存。
    第三类 缺页异常 ,系统调用内存分配请求后,并不会立刻为其分配物理内存,而是在请求首次访问时,通过缺页异常来分配。缺页异常又分为下面两种场景。
      可以直接从物理内存中分配时,被称为次缺页异常。
      需要磁盘 I/O 介入(比如 Swap)时,被称为主缺页异常。
    第四类重要指标就是 Swap 的使用情况 ,比如 Swap 的已用空间、剩余空间、换入速度和换出速度等。
      已用空间和剩余空间很好理解,就是字面上的意思,已经使用和没有使用的内存空间。
      换入和换出速度,则表示每秒钟换入和换出内存的大小。

    

    

  

  

      

  

  

Linux性能优化之内存性能统计信息的更多相关文章

  1. Linux性能优化之内存性能调优

    一.根据性能指标找工具 二.根据工具查性能 三.内存优化策略 常见的优化思路有这么几种: 1)最好禁止 Swap.如果必须开启 Swap,降低 swappiness 的值,减少内存回收时 Swap 的 ...

  2. Linux性能优化之内存优化(二)

    前言 不知道大家看完前面一章关于CPU优化,是否受到相应的启发呢?如果遇到任何问题,可以留言和一起探讨这方面的问题.接下来我们介绍一些关于内存方面的知识.内存管理软件包括虚拟内存系统.地址转换.交换. ...

  3. redis性能优化、内存分析及优化

    redis性能优化.内存分析及优化 1.优化网络延时 2.警惕执行时间长的操作 3.优化数据结构.使用正确的算法 4.考虑操作系统和硬件是否影响性能 5.考虑持久化带来的开销 5.1 RDB 全量持久 ...

  4. jvm性能优化及内存分区

     jvm性能优化及内存分区 2012-09-17 15:51:37 分类: Java Some of the default values for Sun JVMs are listed below. ...

  5. Android 性能优化之内存泄漏检测以及内存优化(中)

    https://blog.csdn.net/self_study/article/details/66969064 上篇博客我们写到了 Java/Android 内存的分配以及相关 GC 的详细分析, ...

  6. [Android 性能优化系列]内存之基础篇--Android怎样管理内存

    大家假设喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 原文地 ...

  7. Linux性能优化:CPU性能分析工具--vmstat

    Blog:博客园 个人 目录 参数说明 输出信息说明 procs memory swap io system cpu 示例 vmstat是Virtual Meomory Statistics(虚拟内存 ...

  8. 老李分享:Android性能优化之内存泄漏1

    老李分享:Android性能优化之内存泄漏   前言 对于内存泄漏,我想大家在开发中肯定都遇到过,只不过内存泄漏对我们来说并不是可见的,因为它是在堆中活动,而要想检测程序中是否有内存泄漏的产生,通常我 ...

  9. 微擎开启性能优化里面的性能优化memcache内存优化及数据库读写分离

    http://www.mitusky.com/forum.php?mod=viewthread&tid=3135 [微擎 安装使用] 微擎开启性能优化里面的性能优化memcache内存优化及数 ...

随机推荐

  1. LINUX学习-Mysql集群-多主一从备份

    基本原理:从服务器开启两个线程,一个备份主1,一个备份主2. 一.准备 主1:192.168.88.20 主2:192.168.88.30 从:192.168.88.40 两个主服务器开启binlog ...

  2. 使用Kubernetes两年来的7大经验教训

    来源:分布式实验室译者:冯旭松在Ridecell公司管理基础设施团队几年后,我想在停下来休息时记录一些想法和经验教训. 1Kubernetes不仅仅是炒作 我在Kubernetes领域里活跃了很久,所 ...

  3. 梯度下降法实现(Python语言描述)

    原文地址:传送门 import numpy as np import matplotlib.pyplot as plt %matplotlib inline plt.style.use(['ggplo ...

  4. Android官方文档翻译 十二 3.Supporting Different Devices

    Supporting Different Devices 支持不同设备 Dependencies and prerequisites 依赖关系和先决条件 Android 1.6 or higher A ...

  5. redis实现简易在线聊天室

    redis_flask简易聊天室 项目构建 这时一个基于Redis数据库的简单小项目,使用redis缓存数据,并通过flask部署到浏览器,运行截图如下: 输入名字后,就可以登陆到聊天室,主要包括三个 ...

  6. cocos2dx 入口函数分析

    以下是main函数最开始的两段,也是cocos2d一开始执行的地方: AppDelegate app; return Application::getInstance()->run(); 接下来 ...

  7. Qt之简单绘图实现

    效果图:                                              可以实现打开图片,在打开的图片上画图,可以保存图片,以及橡皮擦,画笔调大调粗换色功能. 代码: XI ...

  8. CentOS7搭建Docker私有仓库----Docker

    有时候使用Docker Hub这样的公共仓库可能不方便,这种情况下用户可以使用registry创建一个本地仓库供私人使用,这点跟Maven的管理类似.目前Docker Registry已经升级到了v2 ...

  9. StringBuffer类(增删改查及长度可变原理)

    1 package cn.itcast.p2.stringbuffer.demo; 2 3 public class StringBufferDemo { 4 5 public static void ...

  10. python27day

    内容回顾 super 遵循mro算法 只在新式类中能适应 py2新式类中需要自己添加参数 封装 广义上的封装 狭义上的封装 (__名字) 方法名私有化 实例变量私有化 静态变量私有化 私有化的特点 只 ...