5.1 Linux内存子系统

在诊断内存性能问题的时候,也许有必要观察应用程序在内存子系统的不同层次上是怎样执行的。在顶层,操作系统决定如何利用交换内存和物理内存。它决定应用程序的哪一块地址空间将被放到物理内存中,即所谓的驻留集。不属于驻留集却又被应用程序使用的其他内存将被交换到磁盘。由应用程序决定向操作系统请求多少内存,即所谓的虚拟集。

当应用程序使用物理内存时,它首先与CPU的高速缓存子系统交换。现代CPU有多级高速缓存。最快的高速缓存离CPU最近(L1),其容量也是最小的。举个例子,假设CPU只有两级高速缓存:L1和L2.当CPU请求一块内存时,处理器会检查看该内存是否已经存在于L1高速缓存中。如果处于,CPU就可以直接使用。如果不在L1高速缓存中,处理器产生一个L1高速缓存不命中。然后它会检查L2高级缓存,如果数据在L2缓存中,那么它可以直接使用;否则处理同上,然后去物理内存中取回信息。明智使用高速缓存,减少高速缓存不命中的次数,可以提高性能。

5.2 内存性能工具

5.2.1 ps

ps内存参数说明

vsz

虚拟集大小是指应用程序使用的虚拟内存的容量。由于Linux只在应用程序试图使用物理内存时才分配它,因此,该项数值可能会比应用程序使用的物理内存量大很多。

rss

驻留集大小是指应用程序当前使用的物理内存量

tsiz

文本大小是指程序代码的虚拟大小

dsiz

数据大小是指程序使用率的虚拟大小

majflt

主故障是指使得Linux代表进程从磁盘读取页面的缺页故障的数量。

5.2.2 /proc/<PID>

Linux内核提供一个虚拟文件系统,使你能提取在系统上运行的进程信息。/proc的接口非常简单,里面的虚拟文件可以用cat来读取。系统上的每个PID在/proc目录下都有一个文件夹,包含一系列的文件。其中status是进程的PID的进程信息,其检索命令为:cat /proc/<PID> status

status文件显示的内存统计信息部分解析如下

VmSize

仅存的虚拟集大小,是应用程序使用的虚拟内存量,同ps的vsz

VmLck

被进程锁定的内存量,被锁定的内存不能交换到磁盘

VmRSS

驻留集大小或者应用程序当前使用的物理内存量。

VmData

数据大小或程序使用数据量的虚拟大小,不包含堆栈信息

VmStk

进程的堆栈大小

VmExe

程序的可执行内存的虚拟大小。它不包含进程使用的库

VmLib

进程使用的库的大小

例子:查看weblogic进程的情况

可以看出这个java进程的程序代码只有36K,堆栈96K,数据很大(2712776K),库不大不小(92608)。说明进程没有多少的可执行代码,使用了90多M的库来支持其执行,小的堆栈意味着该进程没有调用深度嵌套的函数,或者没有调用使用了大型或多个临时变量的函数。VmLck说明没有内存被锁定,使得没法交换内存。VmRSS大小为1.1G意味着当前进程使用了1.1G的物理内存,不过它分配或映射的大小为2.8G。如果应用程序开始使用之前已分配但并非正在使用的内存,那么VmRSS会增加,而VmSize会保持不变。

如上所述,应用程序的Vmlib的大小不为零,因此使用了库,可以查看maps文件来了解它使用了哪些库。

Linux性能优化 第五章 性能工具:特定进程内存的更多相关文章

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

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

  2. Linux性能优化 第三章 性能工具:系统内存

    3.1内存性能统计信息 3.1.1 内存子系统和性能 和CPU相比,内存的读写速度都大大落后于CPU.为了弥补这个差距,通常CPU会采用高速缓存的机制(高cache). 3.1.2 内存子系统(虚拟存 ...

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

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

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

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

  5. 【原创】构建高性能ASP.NET站点 第五章—性能调优综述(后篇)

    原文:[原创]构建高性能ASP.NET站点 第五章-性能调优综述(后篇) 构建高性能ASP.NET站点 第五章—性能调优综述(后篇) 前言:本篇主要讲述如何根据一些简单的工具和简单的现象来粗布的定位站 ...

  6. JAVA性能优化的五种方式

    一,JAVA性能优化之设计优化 设计优化处于性能优化手段的上层.它往往须要在软件开发之前进行.在软件开发之前,系统架构师应该就评估系统可能存在的各种潜在问题和技术难点,并给出合理的设计方案,因为软件设 ...

  7. Android性能优化之UI渲染性能优化

    版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 本篇博客主要记录一些工作中常用的UI渲染性能优化及调试方法,理解这些方法对于我们编写高质量代码也是有一些帮助的,主要内容包括介绍CPU,GPU的职 ...

  8. Linux内核分析——第五章 系统调用

    第五章 系统调用 5.1 与内核通信 1.系统调用在用户空间进程和硬件设备之间添加了一个中间层,该层主要作用有三个: (1)为用户空间提供了一种硬件的抽象接口 (2)系统调用保证了系统的稳定和安全 ( ...

  9. Linux内核分析第五章读书笔记

    第五章 系统调用 在操作系统中,内核提供了用户进程与内核进行交互的一组接口,这些接口在应用程序和内核之间扮演了使者的角色,保证系统稳定可靠,避免应用程序肆意妄行. 5.1 与内核通信 系统调用在用户空 ...

随机推荐

  1. redmine和jenkins的ldap登录设置

    工具: softeera LDAP browser 流程: Authentication modes » test Name * Host * Port *  LDAPS Account Passwo ...

  2. CSS vertical-algin的使用

    一.什么vertical-algin vertical的意思就是垂直,algin是对齐的意思,连起来就是“垂直对齐方式”,接下来看看vertical-algin有哪些属性,打开浏览器一看 vertic ...

  3. pri 知识点

    pri github:https://github.com/prijs/pri 添加路由后动态导入,使用的是 react-loadable:https://github.com/jamiebuilds ...

  4. mysql 主从复制change master to

    CHANGE MASTER TO命令用于slave配置连接master的信息,例如master host.master port等. 关于CHANGE MASTER TO命令,总结几点使用心得. 在C ...

  5. Go hashcode 输入一个字符串,得到一个唯一标识码

    如何输入一个字符串,得到一个唯一的hashcode? 例子如下: package main import ( "fmt" "hash/crc32" ) // S ...

  6. Vim插件集合

    插件Nerdtree实现浏览文件系统并打开文件或目录,在window中是非常不错的插件,但是在Ubuntu中这个插件就是一坑,特别提示,且无解.若在Ubuntu中使用目录浏览插件,建议使用其他插件,如 ...

  7. SPI核软件调试结果

    SPI核软件调试结果 一.硬件搭建 配置如下: 1.采用手动复位: 2.输入时钟27M,AXI总线工作频率100M: 3.axi_quad_spi 配置为标准模式: 4.配合软件例程的使用,挂载了CP ...

  8. windows安装mysql数据库并修改密码

    1.下载 MySQL Community Server https://dev.mysql.com/downloads/mysql/ 2.解压 如果想要让MySQL安装在指定目录,那么就将解压后的文件 ...

  9. 直接突破百度网盘,用IDM或者迅雷下载。

    直接突破百度网盘,用IDM或者迅雷下载.推荐浏览器: 360 ,CHORME360,: 打开网盘下载页,然后F12→找到CONSOLE→刷新→输入代码“Object.defineProperty(th ...

  10. Java 线程转储 [转]

    http://www.oschina.net/translate/java-thread-dump java线程转储 java的线程转储可以被定义为JVM中在某一个给定的时刻运行的所有线程的快照.一个 ...