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. 如何高效的使用 Git---转

    Git 工作流 当有多个开发者同时涉及到一个项目时那么就非常有必要正确使用 Git 工作流. 这里我将介绍一种工作流,它在一个多人大型项目中将非常有用. 前言 突然有一天,你成为了一个项目的技术 Le ...

  2. mongodb之 oplog 日志详解

    1:oplog简介 oplog是local库下的一个固定集合,Secondary就是通过查看Primary 的oplog这个集合来进行复制的.每个节点都有oplog,记录这从主节点复制过来的信息,这样 ...

  3. MySQL5.6新特性之Multi-Range Read

    一 介绍    MySQL 5.6版本提供了很多性能优化的特性,其中之一就是 Multi-Range Read 多范围读(MRR) , 它的作用针对基于辅助/第二索引的查询,减少随机IO,并且将随机I ...

  4. linux shell创建目录、遍历子目录

    1.创建目录 代码1: #!/bin/bash#如果没有tmp_dir目录则创建static_dir="/web/fyunw.com/static"if [ ! -d $staic ...

  5. Spring整合Hibernate(转)

    概述 Spring整合Hibernate有什么好处? 1.由IOC容器来管理Hibernate的SessionFactory 2.让Hibernate使用上Spring的声明式事务 整合步骤 整合前准 ...

  6. C#中四种常用集合的运用(非常重要)【转】

    1.ArrayList ArrayList类似于数组,有人也称它为数组列表.ArrayList可以动态维护,而数组的容量是固定的. 它的索引会根据程序的扩展而重新进行分配和调整.和数组类似,它所存储的 ...

  7. 通过IOCTL_ATA_PASS_THROUGH访问ATA设备接口

    控制代码功能:像ATA硬盘发送ATA指令.IDE/ATA:接口,一个串行,一个并行,一般叫做IDE接口的硬盘和ATA接口的硬盘.ATA指令:可以操作ATA硬盘的指令. typedef struct _ ...

  8. piwik高负载加速之切换session存储位置

    默认情况下,piwik的session是存储于根目录下面的tmp/sessions/路径下面的.而官方文档里面说,如果由于本地硬盘的原因,这种设置可能会导致系统被变慢,这在高负载系统应用中可能是不可以 ...

  9. ML: 降维算法-概述

    机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中.降维的本质是学习一个映射函数 f : x->y,其中x是原始数据点的表达, y是数据点映射后的低维向量 ...

  10. SVN怎么触发Jenkins自动构建

    通常,有几种方式可以在SVN仓库发生改变时触发Jenkins进行构建.第一种是,Jenkins主动轮询SVN仓库:第二种是,在SVN客户端(如TortoiseSVN)创建客户端hooks来触发构建:第 ...