Solaris10性能监控(内存篇)
前文笔者从系统负载介绍了对Unix服务器进行性能监测的方法下面笔者会系统介绍对内存的性能监控方法内存是solaris所管理的最重要的资源之一内存管理系统是操作系统中最为重要的部分因为系统的物理内存总是少于系统所需要的内存数量虚拟内存就是为了克服这个矛盾而采用的策略系统的虚拟内存通过在各个进程之间共享内存而使系统看起来有多于实际内存的内存容量solaris支持虚拟内存 就是使用磁盘作为RAM的扩展使可用内存相应地有效扩大核心把当前不用的内存块存到硬盘腾出内存给其他目的当原来的内容又要使用时再读回内存
一 虚拟内存的概念
存储管理子系统时操作系统中最重要的组成部分之一在早期计算时代由于人们所需要的内存数目远远大于物理内存人们设计出了各种各样的策略来解决此问题其中最成功的是虚拟内存技术它使得系统中为有限物理内存竞争的进程所需内存空间得到满足 虚拟内存就是为了克服这个矛盾而采用的策略系统的虚拟内存通过在各个进程之间共享内存而使系统看起来有多于实际内存的内存容量Solaris支持虚拟内存 就是使用磁盘作为RAM的扩展使可用内存相应地有效扩大核心把当前不用的内存块存到硬盘腾出内存给其他目的当原来的内容又要使用时再读回内存这对用户全透明运行于Solaris的程序只看到大量的可用内存而不甘心哪部分在磁盘上当然读写硬盘比真的内存慢(慢千倍)所以程序运行较慢用做虚拟内存的这部分硬盘叫对换空间虚拟内存技术不仅仅可让我们可以使用更多的内存它还提供了以下功能
()巨大的寻址空间
操作系统让系统看上去有比实际内存大得多的内存空间虚拟内存可以是系统中实际物理空间的许多倍每个进程运行在其独立的虚拟地址空间中这些虚拟空间相互之间都完全隔离开来所以进程间不会互相影响同时硬件虚拟内存机构可以将内存的某些区域设置成不可写这样可以保护代码与数据不会受恶意程序的干扰
()公平的物理内存分配
内存管理子系统允许系统中每个运行的进程公平地共享系统中的物理内存
()共享虚拟内存
尽管虚拟内存允许进程有其独立的虚拟地址空间但有时也需要在进程之间共享内存 例如有可能系统中有几个进程同时运行BASH命令外壳程序为了避免在每个进程的虚拟内存空间内都存在BASH程序的拷贝较好的解决办法是系统物理内存中只存在一份BASH的拷贝并在多个进程间共享动态库则是另外一种进程间共享执行代码的方式共享内存可用来作为进程间通讯(IPC)的手段多个进程通过共享内存来交换信息Solaris支持SYSTEM V的共享内存IPC机制
()进程的保护
系统中的每一个进程都有自己的虚拟地址空间这些虚拟地址空间是完全分开的这样一
个进程的运行不会影响其他进程并且硬件上的虚拟内存机制是被保护的内存不能被写入这样可以防止迷失的应用程序覆盖代码的数据
()Solaris虚拟内存实现机制
Solaris虚拟内存的实现需要六种机制的支持地址映射机制内存分配回收机制缓存和刷新机制请求页机制交换机制内存共享机制
首先内存管理程序通过映射机制把用户程序的逻辑地址映射到物理地址在用户程序运行时如果发现程序中要用的虚地址没有对应的物理内存时就发出了请求页要求;如果有空闲的内存可供分配就请求分配内存(于是用到了内存的分配和回收)并把正在使用的物理页记录在缓存中(使用了缓存机制) 如果没有足够的内存可供分配那么就调用交换机制腾出一部分内存另外在地址映射中要通过TLB(翻译后援存储器)来寻找物理页;交换机制中也要用到交换缓存并且把物理页内容交换到交换文件中后也要修改页表来映射文件地址原理见图
图 虚拟内存的工作原理
二 使甩vmstat命令监视虚拟内存使用情况:
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写可对操作系统的虚拟内存进程CPU活动进行监视它是对系统的整体情况进行统计不足之处是无法对某个进程进行深入分析
命令格式
vmstat [cipqsS] [disks] [interval [count]]
主要参数说明
p 显示分页信息
s 显示自上次引导系统以来发生的系统事件数
S显示交换统计信息
i 显示每台设备的中断次数
下表介绍了 vmstat 命令输出中的字段
有关此命令的更多详细说明请参见vmstat手册页
使用 vmstat 命令以秒为时间间隔单位收集虚拟内存统计信息
$ vmstat n
其中n 是两次报告之间的间隔秒数
图示例显示了以 秒为间隔收集的统计信息的 vmstat 显示
图以 秒为间隔收集的统计信息的 vmstat 显示
vmstat命令输出分成六个部分这里我们看看内存部分
swap现时可用的交换内存(单位为 k B大小的页面)不包括文件页面
free空闲的内存(单位KB)在大多数情况下不担心这个值什么时候变得很小因为solaris总是会充分地使用内存并且不会像您希望的那样尽早地释放内存
归根结底分页的信息更加重要虚拟内存管理器是一种基于分页的虚拟内存管理器一个分页就是一个固定大小的数据块分页既可以位于内存中(也就是说映射到物理内存中的某个位置)也可以位于磁盘中(也就是说从物理内存中替换到分页空间或者文件系统)下面看看分页部分
re 回收的页面
mf 次要错误和主要错误
pi 页入的千字节数
po 页出的千字节数
fr 释放的千字节数
de 最近换入的进程所需的预计内存
sr 由 page 守护程序扫描的当前未使用的页数如果 sr 不等于零则 page 守护程序一直在运行
Vmstat其他所有实例
◆显示系统事件信息 (vmstat s)
运行 vmstat s 命令以显示自上次引导系统以来发生的系统事件数
◆显示交换统计信息 (vmstat S)
运行 vmstat S以显示交换统计信息
$ vmstat S
kthr memory page disk faults cpu
r b w swap free si so pi po fr de sr dd f s in sy cs us sy id
si 每秒换入的平均 LWP 数
so 换出的完整进程数
vmstat 命令会截断 si 和 so 字段的输出应使用 sar 命令显示更精确的交换统计信息记录
◆显示每台设备的中断次数 (vmstat i)
运行 vmstat i 命令以显示每台设备的中断次数
三 使用SMC 监控内存使用
Solaris 提供了许多监控工具来监控设备和核心部件的运行情况值得一提的是Solaris 推出的SMC超越了传统的UNIX系统提供的性能工具可以用SMC 监控内存使用Solaris Management Console 是基于 GUI 管理工具的容器这些工具存储在被称为工具箱的集合中接下来我们将了解一些实用工具通过这些工具能以图形查看分析还能对历史数据进行分析尽管完全了解这些工具需要一定的时间但这些工具比我们已经了解的命令行工具要更为灵活 SMC基本使用方法笔者曾经详细介绍过在系统性能子栏目中我们能查看有关系统的性能情况这里有系统性能摘要信息系统项目的性能管理和系统的用户性能管理这里看看对内存的监控界面说明这里SMC 分成三个部分进行性能监控
摘要
当前管理范围内(即本地系统)的系 统性能摘要显示在右边的视图窗格中如果您选择了右边窗格中的摘要请单击操作>打开以查看提供的系统性能摘要信息操作菜单将随后更改为提供以下介绍 的选项如图所示
图 使用SMC 监控整体内存使用
项目
当前管理范围内(即本地系统)的 项目性能显示在右边的视图窗格中如果您选择了右边窗格中的项目请单击操作>打开以查看提供的项目性能信息操作菜单将随后更改为提供以下介绍的选 项如图所示
图 使用SMC 监控项目内存使用
用户
当前管理范围内(即本地系统)的用户性 能显示在右边的视图窗格中如果您选择了右边窗格中的用户请单击操作>打开以查看提供的用户性能信息操作菜单将随后更改为提供以下介绍的选 项如图所示
图 使用SMC 监控用户内存使用
四 Solaris 服务器的内存泄露和回收内存的方法
内存泄漏的定义
一般我们常说的内存泄漏是指堆内存的泄漏堆内存是指程序从堆中分配的大小任意的(内存块的大小可以在程序运行期决定)使用完后必须显示释放的内存应用程序一般使用mallocreallocnew等函数从堆中分配到一块内存使用完后程序必须负责相应的调用free或delete释放该内存块否则这块内存就不能被再次使用我们就说这块内存泄漏了
内存泄露的危害
从用户使用程序的角度来看内存泄漏本身不会产生什么危害作为一般的用户根本感觉不到内存泄漏的存在真正有危害的是内存泄漏的堆积这会最终消耗尽系统所有的内存从这个角度来说一次性内存泄漏并没有什么危害因为它不会堆积而隐式内存泄漏危害性则非常大因为较之于常发性和偶发性内存泄漏它更难被检测到存在内存泄漏问题的程序除了会占用更多的内存外还会使程序的性能急剧下降对于服务器而言如果出现这种情况即使系统不崩溃也会严重影响使用
内存泄露的检测和回收
对于内存溢出之类的麻烦可能大家在编写指针比较多的复杂的程序的时候就会遇到在Solaris 下CC++语言是最使用工具但是我们的 C++ 程序缺乏相应的手段来检测内存信息而只能使用 top 指令观察进程的动态内存总额而且程序退出时我们无法获知任何内存泄漏信息
? 使用kill命令
使用Lsolaris命令回收内存我们可以使用PsKill两个命令检测内存使用情况和进行回收在使用超级用户权限时使用命令Ps它会列出所有正在运行的程序名称和对应的进程号(PID)Kill命令的工作原理是向solaris操作系统的内核送出一个系统操作信号和程序的进程号(PID)
应用例子
为了高效率回收内存可以使用命令ps 命令
然后如果想回收sendmail的内存的话使用命令
# Kill
本文笔者从系统负载介绍了对Unix服务器内存的方法下面笔者会系统介绍对中央处理器的性能监控方法