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 与内核通信 系统调用在用户空 ...
随机推荐
- 阿里云 qW3xT.4 挖矿病毒问题
查了一下.是个挖矿病毒,cpu 占用巨高 .杀了又有守护进程启动.网上有些杀死这个病毒的办法,大家可以试试.但是不确定能杀死. 建议直接重装系统. 然后,说说这货怎么传播的. 他通过redis .目前 ...
- 获取docker容器的ip地址
1.进入容器后执行cat /etc/hosts 会显示自己以及(– link)软连接的容器IP 2.使用命令 docker inspect --format '{{ .NetworkSettings. ...
- 3、eclipse集成svn
手动安装 1.从官网下载适合自己开发工具的site-.zip文件,网址是:subclipse.tigris.org,2.从中解压出features与plugins文件夹,复制到eclipse的目录my ...
- MySQL命令行下执行sql文件(sql脚本)
在mysql命令行下执行sql文件(sql脚本) mysql> source sql文件完整路径 如: mysql> source D:\\MySQL\\create.sql 文 ...
- Linux VMware安装CentOS
VMware安装CentOS 1 检查BIOS虚拟化支持 2 新建虚拟机 3 新建虚拟机向导 4 创建虚拟空白光盘 ...
- Spring Cloud(Dalston.SR5)--Hystrix 断路器-缓存
在 Spring Cloud 中可以使用注解的方式来支持 Hystrix 的缓存,缓存与合并请求功能需要先初始化请求上下文才能实现,因此,必须实现 javax.servlet.Filter 用于创建和 ...
- Kafka研究【一】:bring up环境
kafka是干什么的,有和特性,我这里就不多说,详情自己研究官方文档. 0. 背景介绍 我需要在三台机器上分别部署kafka broker的实例,构建成一个集群.kafka的broker集群,是基于z ...
- FPGA中关于SPI的使用
FPGA中关于SPI的使用 信息来源 SPI Flash的编程 最新的SPI不止有4根信号线,可以增加到支持4bit的数据宽度 SPI Flash Basics 能够扩展成4bit数据的是MOSI信号
- golang 字符串统计
golang内建只认utf8 如果传递的字符串里含有汉字什么的,最好使用 utf8.RuneCountInString() 统计 字符串统计几种方法: - 使用 bytes.Count() 统计- 使 ...
- AES算法在Python中的使用
Python有很多开源库,使用AES等加密算法时可以找对应的开源库.我记录一下安装方法: (1)下载开源库pycrypto 下载地址:https://pypi.python.org/pypi/pycr ...