- 浏览: 482107 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
alvin198761:
renzhengzhi 写道我参与过12306余票查询系统的开 ...
别给12306 辩解了 -
renzhengzhi:
我参与过12306余票查询系统的开发,用户请求被前面3层缓存拦 ...
别给12306 辩解了 -
renzhengzhi:
写的很好。
JAVA线程dump的分析 -
liyonghui160com:
说好的附件呢
分布式服务框架 Zookeeper -- 管理分布式环境中的数据 -
ghpaas:
orbeon作为xforms标准的实现,不论其设计器还是运行时 ...
XForms 1.1 中文翻译—第1章 关于XForms标准
先介绍几个基本概念: SIZE: 进程使用的地址空间, 如果进程映射了100M的内存, 进程的地址空间将报告为100M内存. 事实上, 这个大小不是一个程序实际使用的内存数. RSS: "Resident Set Size", 实际驻留"在内存中"的内存数. 不包括已经交换出去的代码. 举一个例子: 如果你有一个程序使用了100K内存, 操作系统交换出40K内存, 那么RSS为60K. RSS还包括了与其它进程共享的内存区域. 这些区域通常用于libc库等. SHARE: RSS中与其它进程共享的内存部分大小. VMSIZE: 一个进程占用的总的地址空间大小. 它包括了没有映射到内存中的页面. Private RSS: 映射到内存中的页面, 这些页面仅由进程单独使用. 这也是我们最关心地方: 进程实际占用的内存数. 如何来查看Private RSS呢? /proc接口中每一个进程目录下的smaps提供了private rss信息. smaps是在2.6.16内核版本引进来的. 私有驻留内存数(Private RSS): 下面我以本站使用的Linux AS5为例, 查看进程号1293(vmware-guestd, 本站使用的是一台基于vmware的客户虚拟机,)使用的Private RSS数. 上面我们看到从smaps看不太方便, 推荐使用Ben Maurer写的perl脚本: 下面是由seme.pl脚本解析的smaps数据: 首先安装Linux::Smaps模块: 然后用seme.pl解析1293进程的Smaps数据: SHARED MAPPINGS 从上面看到rss大小被分成了两个部分: private(私有)和shared(共享). http://hi.baidu.com/youngtao/blog/item/70621d83c72933a50cf4d29a.html
查看/proc/$pid/smaps
00111000-00112000 rwxp 00111000 00:00 0
Size: 4 kB
Rss: 4 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 4 kB
0050e000-0050f000 rwxp 0050e000 00:00 0
Size: 4 kB
Rss: 0 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
0051a000-0051b000 r-xp 0051a000 00:00 0 [vdso]
Size: 4 kB
Rss: 4 kB
Shared_Clean: 4 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
0051b000-00534000 r-xp 00000000 fd:00 194898 /lib/ld-2.4.so
Size: 100 kB
Rss: 0 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
00534000-00535000 r-xp 00018000 fd:00 194898 /lib/ld-2.4.so
Size: 4 kB
Rss: 0 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
00535000-00536000 rwxp 00019000 fd:00 194898 /lib/ld-2.4.so
Size: 4 kB
Rss: 0 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
00538000-00665000 r-xp 00000000 fd:00 194905 /lib/libc-2.4.so
Size: 1204 kB
Rss: 212 kB
Shared_Clean: 204 kB
Shared_Dirty: 0 kB
Private_Clean: 8 kB
Private_Dirty: 0 kB
00665000-00667000 r-xp 0012d000 fd:00 194905 /lib/libc-2.4.so
Size: 8 kB
Rss: 8 kB
Shared_Clean: 4 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 4 kB
00667000-00668000 rwxp 0012f000 fd:00 194905 /lib/libc-2.4.so
Size: 4 kB
Rss: 4 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 4 kB
00668000-0066b000 rwxp 00668000 00:00 0
Size: 12 kB
Rss: 8 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 8 kB
08047000-08062000 r-xp 00000000 fd:00 292327 /usr/sbin/vmware-guestd
Size: 108 kB
Rss: 64 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 64 kB
Private_Dirty: 0 kB
08062000-08063000 rwxp 0001a000 fd:00 292327 /usr/sbin/vmware-guestd
Size: 4 kB
Rss: 4 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 4 kB
08063000-08068000 rwxp 08063000 00:00 0
Size: 20 kB
Rss: 12 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 12 kB
08385000-08886000 rwxp 08385000 00:00 0 [heap]
Size: 5124 kB
Rss: 5080 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 5080 kB
bfeb2000-bfec7000 rwxp bfeb2000 00:00 0 [stack]
Size: 84 kB
Rss: 12 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 12 kB
#!/usr/bin/perl
# Copyright Ben Maurer
# you can distribute this under the MIT/X11 License
use Linux::Smaps;
my $pid=shift @ARGV;
unless ($pid) {
print "./smem.pl <pid>\n";
exit 1;
}
my $map=Linux::Smaps->new($pid);
my @VMAs = $map->vmas;
format STDOUT =
VMSIZE: @######## kb
$map->size
RSS: @######## kb total
$map->rss
@######## kb shared
$map->shared_clean + $map->shared_dirty
@######## kb private clean
$map->private_clean
@######## kb private dirty
$map->private_dirty
.
write;
printPrivateMappings ();
printSharedMappings ();
sub sharedMappings () {
return grep { ($_->shared_clean + $_->shared_dirty) > 0 } @VMAs;
}
sub privateMappings () {
return grep { ($_->private_clean + $_->private_dirty) > 0 } @VMAs;
}
sub printPrivateMappings ()
{
$TYPE = "PRIVATE MAPPINGS";
$^ = 'SECTION_HEADER';
$~ = 'SECTION_ITEM';
$- = 0;
$= = 100000000;
foreach $vma (sort {-($a->private_dirty <=> $b->private_dirty)}
privateMappings ()) {
$size = $vma->size;
$dirty = $vma->private_dirty;
$clean = $vma->private_clean;
$file = $vma->file_name;
write;
}
}
sub printSharedMappings ()
{
$TYPE = "SHARED MAPPINGS";
$^ = 'SECTION_HEADER';
$~ = 'SECTION_ITEM';
$- = 0;
$= = 100000000;
foreach $vma (sort {-(($a->shared_clean + $a->shared_dirty)
<=>
($b->shared_clean + $b->shared_dirty))}
sharedMappings ()) {
$size = $vma->size;
$dirty = $vma->shared_dirty;
$clean = $vma->shared_clean;
$file = $vma->file_name;
write;
}
}
format SECTION_HEADER =
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$TYPE
@>>>>>>>>>> @>>>>>>>>>> @>>>>>>>>> @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
"vmsize" "rss clean" "rss dirty" "file"
.
format SECTION_ITEM =
@####### kb @####### kb @####### kb @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$size $clean $dirty $file
.
perl -MCPAN -e 'install Linux::Smaps'//需要网络,如无法上网,则可下载压缩包解压到 /root
VMSIZE: 7200 kb
RSS: 1052 kb total
192 kb shared
100 kb private clean
760 kb private dirty
PRIVATE MAPPINGS
vmsize rss clean rss dirty file
5636 kb 8 kb 724 kb [heap]
84 kb 0 kb 12 kb [stack]
4 kb 0 kb 4 kb
8 kb 0 kb 4 kb /lib/libc-2.4.so
4 kb 0 kb 4 kb /lib/libc-2.4.so
12 kb 4 kb 4 kb
4 kb 0 kb 4 kb /usr/sbin/vmware-guestd
20 kb 8 kb 4 kb
1204 kb 16 kb 0 kb /lib/libc-2.4.so
108 kb 64 kb 0 kb /usr/sbin/vmware-guestd
vmsize rss clean rss dirty file
1204 kb 188 kb 0 kb /lib/libc-2.4.so
4 kb 4 kb 0 kb [vdso]
private rss就是我们最关心的进程实际占用的内存数.
发表评论
-
使用 RPM 打包软件,第 1 部分: 构建和分发包
2012-03-26 10:31 1271顾名思义,开源软件 ... -
用 RPM 打包软件,第 3 部分
2012-03-26 10:30 1162安装和卸载脚本的工作原理 安装和卸载脚本看起来很简单, ... -
用 RPM 打包软件,第 2 部分
2012-03-26 10:28 1166不作为 root 用户来构建 RPM 包 正如您在第 1 ... -
用 RPM 打包软件,第 1 部分
2012-03-26 10:23 980RPM(Red Hat Package Manager)是用于 ... -
Memory usage analysis
2010-09-03 23:33 1215Memory usage analysis Syste ... -
Linux: How to measure actual memory usage of an application or process?
2010-09-03 23:31 1278http://stackoverflow.com/questi ... -
HowTo: Profile Memory in a Linux System
2010-09-03 22:56 1183HOWTO: Profile Memory in a Li ... -
Linux内存管理机制
2010-09-03 22:48 2096内存是Linux内核所管理的最重要的资源之一,内存管理 ... -
linux内存管理概述
2010-09-03 22:44 2457Linux中的地址空间(一)有这么一系列的问题,是否在困扰 ... -
linux上buffer和cache的区别
2010-09-03 15:14 1523free free 命令相对于top 提供了更简洁的查看系统 ... -
linux下top命令参数解释
2010-09-03 14:56 884top命令是Linux下常用的性能分析工具,能够实时显示系统中 ... -
smem memory reporting tool
2010-08-25 15:41 973smem is a tool that can give ... -
Memory: VSS/RSS/PSS/USS
2010-08-25 13:54 1540Terms VSS - Virtual Set ... -
Linux 内核的文件 Cache 管理机制介绍
2010-08-18 18:21 10611 前言 自从诞生以来,Linux 就被不断完善和普及 ... -
运行时: 块内存复制,第 2 部分
2010-08-06 12:33 1249我的 前一专栏专注于 ... -
RunTime: 块内存复制
2010-08-06 12:32 1183内存复制 在计算机中,内存复制经常而普遍。它们出现在联网 ... -
内存详解
2010-08-06 11:34 956文档选项 ... -
Linux slab 分配器剖析
2010-08-06 11:32 1326良好的操作系统性能部分依赖于操作系统有效管理资源的能力。在 ... -
降低 Linux 内存开销
2010-08-06 11:30 1100Linux 广受追捧的一个优点是它比 Microsoft® ... -
在 Linux 平台中调试 C/C++ 内存泄漏方法
2010-08-06 11:29 1836由于 C 和 C++ 程序中完全由程序员自主申请和释放内存 ...
相关推荐
虚拟内存的思想是,一个进程的代码、数据、堆栈的总容量可能超过可用物理内存的容量,操作系统负责吧当前用到的那些部分保留在内存中,而把其他部分保存在磁盘上,当需要用到不再内存的某一部分时,操作系统把那部分...
Linux虚拟内存管理是操作系统设计中的核心部分,它允许程序访问比实际物理内存更大的地址空间,同时优化了内存的使用效率。这一系统通过映射技术,将进程的虚拟地址转换为实际物理地址,使得多个进程可以共享同一...
Linux 内核的内存管理探秘之四 虚拟内存的管理 Linux 操作系统中,内存管理是非常重要的...虚拟内存技术是 Linux 内核中一个非常重要的机制,它使得系统能够运行比物理内存大的程序,同时也提高了系统的可用性和性能。
Linux虚拟内存管理是操作系统核心的重要组成部分,它负责为应用程序提供比物理内存更大的地址空间,并有效地管理物理内存资源。本资料“深入理解Linux虚拟内存管理”旨在帮助读者深入了解这一复杂的系统机制,包括...
虚拟地址到物理地址的转换是通过页表机制实现的,确保了每个进程只能访问分配给它的虚拟地址,并在需要时将这些虚拟地址映射到物理内存。 Linux将这个4GB的虚拟地址空间划分为两个主要部分:用户空间(0到3GB)和...
1. **虚拟内存**:虚拟内存是一种技术,它使得一个进程能够访问的地址空间远远超过系统中实际存在的物理内存大小。这种技术通过将部分不常用的内存页面交换到磁盘上(称为分页或交换)来实现。 2. **分页机制**:...
在Linux系统中,每个进程都有自己独立的虚拟地址空间,这个空间是逻辑上的,并非实际物理内存的直接映射。虚拟内存管理系统的主要任务包括:内存分配、页面置换、地址转换以及缓存管理等。 一、虚拟内存的原理 1. ...
* %MEM:进程使用的物理内存和总内存的百分比 * TIME+:该进程启动后占用的总的 CPU 时间,即占用 CPU 使用时间的累加值 * COMMAND:进程启动命令名称 二、pmap 命令 pmap 命令可以根据进程查看进程相关信息占用的...
2. **分配物理内存**:`strcpy(p, "123")`实际只使用了3字节,但由于`malloc`采用了延迟分配策略,因此整个2048字节的物理内存都被分配给了这段虚拟地址。 3. **释放内存**:`free(p)`通过虚拟地址找到对应的物理...
本文将详细阐述Linux操作系统的内存管理机制,包括物理内存和虚拟内存的管理机制、地址映射机制、内存碎片和内存不连续的问题解决等。 Linux操作系统的内存管理机制旨在解决进程需要使用的代码和数据都放在内存中,...
虚拟地址空间分为多个区域,如堆、栈、代码段、数据段等,这些区域可以分布在物理内存和磁盘上的交换空间。 1. **虚拟内存(Virtual Memory,VSZ)**:VSZ表示进程的虚拟地址空间的大小,包括所有已映射的内存页面...
8. 物理内存和虚拟内存的协调: Linux内存管理不仅要处理物理内存,还需要管理交换分区,以平衡物理内存使用和性能。VMA(Virtual Memory Area)结构记录了每个进程的虚拟内存区域属性,包括权限、映射的文件等信息...
本文将详细介绍Linux虚拟内存管理机制,包括物理内存的描述、页表管理、进程地址空间、启动时内存分配器、物理页面分配、非连续内存分配、slab分配器以及高内存管理等核心概念和技术细节。 #### 物理内存描述 物理...
Linux虚拟内存是一个操作系统级别的技术,它为每个进程提供了一个独立且连续的内存空间,即使物理内存实际是分散的。在Linux系统中,虚拟内存的概念至关重要,因为它允许系统同时运行多个进程,而不需要每个进程都...
Linux虚拟内存管理是操作系统核心的重要组成部分,它负责管理和优化系统中的内存资源,使得应用程序能够高效地使用物理内存和硬盘上的交换空间。在Linux系统中,虚拟内存并不是一个实际的硬件特性,而是一种软件策略...
4.虚拟内存管理单元(Memory Management Unit,MMU): MMU是 Linux操作系统虚拟内存管理机制的核心组件之一,MMU负责将逻辑地址转换为物理地址,并对物理内存进行保护和管理。 在Linux操作系统中,虚拟内存管理...
### Linux中的物理和虚拟存储空间布局...通过以上介绍,我们可以了解到Linux系统如何管理和利用物理内存与虚拟内存之间的映射关系,以实现高效灵活的内存管理机制。这对于理解现代操作系统内存管理的基本原理至关重要。
* %MEM:进程使用的物理内存和总内存的百分比 * TIME+:该进程启动后占用的总的 CPU 时间,即占用 CPU 使用时间的累加值 * COMMAND:进程启动命令名称 2. 使用 pmap 命令 pmap 命令可以根据进程查看进程相关信息...
虚拟内存与物理内存和逻辑内存密切相关。逻辑内存是从程序的角度看到的内存,是程序员关注的部分;物理内存是从处理器角度看的内存,由操作系统直接管理。虚拟内存则是一个映射机制,将这两者关联起来,使得程序可以...