Linux性能优化 第五章 性能工具:特定进程内存
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性能优化 第五章 性能工具:特定进程内存的更多相关文章
- Linux性能优化 第七章 性能工具:网络
7.1 网络I/O介绍 Linux和其他主流操作系统中的网络流量被抽象为一系列的硬件和软件层次. 链路层,也就是最低的一层,包含网络硬件,如以太网设备.在传送网络流量时,这一层并不区分流量类型,而仅仅 ...
- Linux性能优化 第三章 性能工具:系统内存
3.1内存性能统计信息 3.1.1 内存子系统和性能 和CPU相比,内存的读写速度都大大落后于CPU.为了弥补这个差距,通常CPU会采用高速缓存的机制(高cache). 3.1.2 内存子系统(虚拟存 ...
- Linux性能优化 第六章 性能工具:磁盘I/O
6.1 磁盘I/O介绍 一般来说,Linux磁盘的每个分区要么包含一个文件系统,要么包含一个交换分区.这些分区被挂载到Linux根文件系统,该系统由/etc/fstab指定.这些被挂载的文件系统包含了 ...
- Linux性能优化 第四章 性能工具:特定进程CPU
4.1进程性能统计信息 4.1.1. 内核时间VS用户时间 一个应用程序所耗时间最基本的划分是内核时间与用户时间.内核时间是消耗在Linux内核上的时间,而用户时间则是消耗在应用程序或库代码上的时间. ...
- 【原创】构建高性能ASP.NET站点 第五章—性能调优综述(后篇)
原文:[原创]构建高性能ASP.NET站点 第五章-性能调优综述(后篇) 构建高性能ASP.NET站点 第五章—性能调优综述(后篇) 前言:本篇主要讲述如何根据一些简单的工具和简单的现象来粗布的定位站 ...
- JAVA性能优化的五种方式
一,JAVA性能优化之设计优化 设计优化处于性能优化手段的上层.它往往须要在软件开发之前进行.在软件开发之前,系统架构师应该就评估系统可能存在的各种潜在问题和技术难点,并给出合理的设计方案,因为软件设 ...
- Android性能优化之UI渲染性能优化
版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 本篇博客主要记录一些工作中常用的UI渲染性能优化及调试方法,理解这些方法对于我们编写高质量代码也是有一些帮助的,主要内容包括介绍CPU,GPU的职 ...
- Linux内核分析——第五章 系统调用
第五章 系统调用 5.1 与内核通信 1.系统调用在用户空间进程和硬件设备之间添加了一个中间层,该层主要作用有三个: (1)为用户空间提供了一种硬件的抽象接口 (2)系统调用保证了系统的稳定和安全 ( ...
- Linux内核分析第五章读书笔记
第五章 系统调用 在操作系统中,内核提供了用户进程与内核进行交互的一组接口,这些接口在应用程序和内核之间扮演了使者的角色,保证系统稳定可靠,避免应用程序肆意妄行. 5.1 与内核通信 系统调用在用户空 ...
随机推荐
- [转]logback常用配置简介
logback是一套日志框架,由log4j的优化版,由同一个作者开发,在速度和性能上都超过其他日志框架,再结合slf4j,已成为当前最流行的日志框架. Logback最常用就是在classpath定义 ...
- 静态Map类型变量赋初始值
private static Map<String,String> sysTypeList = new HashMap<String, String>(); static { ...
- 基于spring的placeholder思路处理配置信息敏感信息加密解密的实践
基于Spring的placeholder处理思路,实现系统配置信息敏感信息的加密解密处理. 我们的处理方案,是基于类org.springframework.beans.factory.config.P ...
- enc28J60 网页控制LED灯
软件IDE:Arduino 1.6.3 1.库的安装: 从https://github.com/jcw/ethercard 下载源码包,解压,复制ethercard-master文件夹到Arduino ...
- 【java】对象赋值给另一个对象
对基本数据类型的赋值很简单的.基本类型存储了实际的数值,而并非指向一个对象的引用,所以在赋值的时候,是直接将一个地方的内容复制到另一个地方.对于a=b,修改b后并不会影响到a,这正是我们大多数情况下所 ...
- xe5 android 手机上使用sqlite [转]
在android手机上怎样使用sqlite数据库,这里用Navigator实现 增删改查. 1.新建firemonkey mobile application 2.选择blank applicatio ...
- WCF类型共享技巧【转载】
调用过WCF服务的同学可能都会遇到这样的问题,同一个实体类型,不同的服务Visual Studio生成了不同的版本,例如Service1.User和Service2.User,对于C#来说,这是两个不 ...
- windebug 与 office Home
https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/HomeStudentRetai ...
- Building the Unstructured Data Warehouse: Architecture, Analysis, and Design
Building the Unstructured Data Warehouse: Architecture, Analysis, and Design earn essential techniqu ...
- awk中使用shell的环境变量
awk中使用shell的环境变量一:"'$var'"这种写法大家无需改变用'括起awk程序的习惯,是老外常用的写法.如:var="test"awk 'BEGIN ...