77范文网 - 专业文章范例文档资料分享平台

AIX topas命令中的Memory项% Comp% Noncomp% Client如何理解和分(2)

来源:网络收集 时间:2018-11-26 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

[原创] 非计算内存和计算内存的概念

看到有XD发帖说这个问题,我也想详细给大家一个说明,请各位老手新手指教。

通俗的说法:

凡是硬盘上有对应的数据,占用的内存,就是非计算内存,非计算内存需要被别的进程用到时,其中的数据无需page out,因为再次需要读取的时候从硬盘文件中拿出来即可。

凡是硬盘上没有数据对应的内存占用叫做计算内存,例如用C写个程序,分配一块1MB的内存,这部分内存不管其中数据是否有意义,硬盘上没有文件对应,叫做计算内存。

以上所谓“硬盘上有无对应数据”的前提是:计算内存、非计算内存是操作系统的分类,所以操作系统知道硬盘上有对应,才叫非计算内存。虽然任何数据库的内存占用绝大部分是磁盘缓冲,按理说其中的数据硬盘上有对应,但是,这些内存是数据库管理的,操作系统只知道这些内存是DBMS主动向操作系统申请的,其中放的什么,操作系统并不知道,所

以是计算内存

breakdown:

计算内存、非计算内存都是指物理内存占用,而物理内存的情况,由于VMM机制,是时刻

在变化的,所以只能说某一瞬间,计算内存、非计算内存各占用多少。

●计算内存:

凡是进程/程序运行中用程序代码向操作系统申请的内存,全部是计算内存,也就是说除非这个程序运行起来,除了自身代码占用的内存,一点额外的内存也不用,否则它几乎必然会造成计算内存占用的。说“几乎”,是因为计算内存、非计算内存都是指物理内存,如果一个程序申请了1MB内存,但一段时间没有用这部分内存,很可能在其他进程需要内存,且物理内存比较紧张时,按照LRU算法(Latest Recently Unused,最近最少使用),被操作系统部分或全部page out到paging space中,如果全部被page out了,可以说这个时刻,此进程没有使用计算内存。换句话说,就是程序申请了1MB内存,那么它在某一时

刻占用的计算内存从0字节~1MB都有可能。

进程主动向操作系统申请分配的内存,从程序编码上来看,以C为例,典型的就是malloc,

当然,还有程序语言中的隐式分配,反正对于操作系统来说都一样,例如char *string1=\前者会导致自动向操作系统申请8个字节,后

一个会申请一个字(两个字节)

当进程退出,或者意外崩溃,对于操作系统来说,它知道进程不在了,而进程申请的内存,操作系统明确知道是哪些的,在资源回收的过程中,会自动把这个进程申请的内存释放掉,这个过程是很快的。所以我们可以看到:如果计算内存高企,我们把应用一停,也就是把

使用计算内存最多的进程停止,计算内存占用率立刻就下来了。

●非计算内存:

操作系统明确知道这部分内存的用途是放硬盘对应数据的,所以,显然这部分内存不是任何进程可以控制,也就是说不可能一个程序主动要求分配多少非计算内存或者释放多少。这部分完全是操作系统在直接管理:分配、记录状态、使用、释放,其他进程只可能用间

接手段影响非计算内存,例如读写文件。

非计算内存我们常见的是如下用途:

——程序代码:当运行程序时,代码初始装入到物理内存的什么地方、重定位到什么地方,是操作系统管理的,它会记住程序代码放在物理内存什么地方,及其对应程序文件的位置。当程序代码占用的page frame需要被其他用途使用时,操作系统直接把这个page frame转给要使用这部分内存的进程,并记录标志,下次要是这个page原来的内容需要被引用,从对应程序文件中的对应位置读取进入物理内存。有些进程的某些计算内存占用是不能被替换的,例如执行VMM管理任务的操作系统核心进程,所以这部分会有操作系统机制设置

标志,这个就是常说的pin住某些内存不准替换掉。

——磁盘访问缓冲区:这个不是常说的缓存区,缓存区(英文Cache)的目的是用来提高性能,而缓冲区(英文Buffer),是为了块设备访问特点的要求,比如硬盘块设备、逻辑卷块设备,必须读写的基本单位是一个块,一般是512字节,哪怕你只读写一个字节,也必须一次读进512字节,修改特定的那一个字节,然后再整个512字节块全部写出到硬盘。这就需要缓冲区的存在。缓冲区的总个数,是不固定的,操作系统可以根据同时在访问的

块的数量随时调整。

——NFS访问缓冲区,原理基本同上;

——文件系统缓存:这个肯定是每一个字节都有硬盘文件对应的,显然是非计算内存。

我的理解:

计算内存 -- Work segment 临时的;没有对应的持久磁盘存储位置; 一个进程结束,将释放物理和分页空间;

当空闲物理内存较少时,将page out到分页空间,以帮助释放更多物理内存

非计算内存 -- Persistent segment 持久段;在磁盘上有持久存储位置

数据文件or exe程序通常都映射为非计算内存; 数据文件:jfs、jfs2、nfs等

所以,当物理内存较少,计算内存将page out到pagingsapce,主机性能下降,这就是我们通常看到的内存瓶颈

我们需要保护计算内存,限制非计算内存,这是我们愿意看到的情况

AIX5.3以前的调整参数方法:maxperm%=maxclient%设置较低通常在20%左右

minperm%设置的更低一点,通常可以是maxperm%的一半5%-10%

AIX5.3以后的调整参数方法:maxperm%=maxclient%设置的比较高90%左右

minperm%还是设置的比较低,通常可以设置为5%-20%左右 lru_file_repage=0

而lru_file_repage=1是AIX系统的default的值

lru_file_repage参数存在的意义: 1、是否应该考虑VMM重分页计数 2、替换什么类型的内存

当lru_file_repage=0的时候将只替换非计算内存,这显然达到了我们需要保护计算内存的目的

最近看了些资料,发现AIX5.3相对于以前的版本在多方面有提高和改变 绝对是一个好版本,不得不佩服IBM开发人员

非计算内存在开通ftp或者nfs服务的时候, 可能会影响到oracle内存性能. 当然了,象我, 条件不允许, 生产库的小鸡又不能随便动, 郁闷。

有一点似乎需要纠正:

对于AIX ....可执行程序文件的代码段 属于计算内存

虽然对于这些段来说(代码 段和初始数据段) 其实是有文件部分在磁盘上对应的...但是最后还是会变成计算内存

这里有个转化的概念 OS 的Loader在装入可执行文件时...因为从disk 装入 ...这时所使用的还是属于NonComp..

一旦发生指令预取的page fault....则NonComp会转为Comp

pageOut去swapdevice的pages 对AIX叫WorkingStoragePages 所有的WorkingStoragePages都是Comp 然而不是所有的Comp都是WorkingStoragePage

应该说 Disk上有文件对应的就叫PermanentStoragePages....无文件对应的叫WorkingStoragePages

对不起,各位老大,水一下。

程序中

char *string1=\

属于初始化定义,也就是static的代码,到底是计算内存还是非计算内存,看以后是否有改写,由编译程序在编译的时候决定到低是什么。如果以后虽然有引用,但是没有改写,则在程序代码段,非计算内存,例如类似char *string2; string2=string1的引用,其实这个变量是个常量,ABCDEFG保存在代码段中,非计算内存,string1作为指针本身并不存在,因为指向是个常量,程序可以优化,把这个指针省略掉。

如果以后有改写,例如string1=string2;则在程序初始化会在堆中申请空间,也就是计算内存,同时程序代码段还是有该常量ABCDEFG, 22222,这部分还是非计算内存。

-----------

另外非计算内存并非完全可以丢弃,其中还有是否dirty,如果dirty,等同于计算内存处理,我还没有证据说明aix足够聪明到对于dirty的非计算内存会直接写磁盘原数据区还是写paging space,但以我个人推断,由于写磁盘数据区的是syncd,而处理pagingspace的是swap,两个截然不同的进程,他们在那么短暂的时间内,没有道理会相互通信,而且很有可能死锁,最好的办法就是dirty非计算内存完全等同于计算内存,paging到交换区。------------------ 以上一段严重错误,(又是中午吃多了惹得祸,今天老板请吃自助餐)。经过larry老大当头棒喝,醍醐灌顶,七窍顿开!lrud是唯一的对内存进行检验的程序,而是否sync到磁盘或者交换区,syncd自己是不管的,它尊从内存页标记,因此不会出现两个程序争相处理一块内存的情况。再次感谢larry老大高风亮节,不耻屈尊与我等小辈讨论!不过经过刚刚专研,发现依然有疑惑,很多说法比较模糊,继续研究之中。预知后事如何,请看下集。。。

---------------------------------------------

由此,如果有大量的数据文件改写操作,例如copy,tar的目标文件,都会造成内存消耗,而且无法通过参数优化,只能增加syncd的写操作频繁程度或者增加并行数来解决。

-------------------

这段没有大问题,但前提条件正如larry老大所说,系统有足够的fremem的时候才会等待syncd被动刷新,否则lrud会主动调用syncd刷新,由于有fremem存在,通常不会系统有太大影响,优化不优化没什么意义,除非此时系统紧跟(在几分钟之内)着要进行大量申请内存的操作,例如load数据等批量操作、启动数据库等等,由于系统会lazy清理内存,只有申请的时候才会清理,所以后续程序会稍慢,如果非常必要(就差几分钟,一般没必要),可以主动进行内存清理,把用于文件系统的内存writeback,并释放。

释放的方式有:

1.删除刚刚进行操作的大文件,文件没了,内存中的cache就没了,自然变成fremem 2. 抖动系统,就是更改maxfre, minfre之类的参数,改成很大的值,然后再改回来。

最后感谢一次Larry老大,您的光辉形象将永远成为激励我们前进的原动力!

原帖由 orian 于 2008-6-20 00:21 发表

另外非计算内存并非完全可以丢弃,其中还有是否dirty,如果dirty,等同于计算内存处理,我还没有证据说明aix足够聪明到对于dirty的非计算内存会直接写磁盘原数据区还是写paging space,但以我个人推断,由于写磁盘数据区的是syncd,而处理pagingspace的是swap,两个截然不同的进程,他们在那么短暂的时间内,没有道理会相互通信,而且很有可能死锁,最好的办法就是dirty非计算内存完全等同于计算内存,paging到交换区。

syncd只是确保flush文件系统cache的最后一道防线,缺省syncd间隔是60秒,这中间syncd肯定是不干活的,但我们知道,文件系统cache必须以60秒进行flush,而中间绝对不commit任何cache page,这显然不符合常理。

当遇到dirty的fs cache page,是一定会自动先flush它们的。

以下说法来自AIX Information Center:

文件同步性能调整

JFS 的非顺序文件 I/O 会一直存储在内存中直到满足一定条件:

空闲列表缩小到 minfree,以致需要进行页替换。 syncd 守护程序按固定调度间隔刷新页。 执行了 sync 命令。

随机后写在达到随机后写阈值后清空脏页面。

顺序后写

如果簇的所有 4 页都是脏页,那么只要修改了下一个分区中的页,会调度将该簇中的 4 个脏页写入磁盘。如果不具备这一功能,那么直到 syncd 守护程序运行前,该页都会留存于内存,导致可能的 I/O 瓶颈和文件碎片。

缺省情况下,一个 JFS 文件划分成 16 KB 大小的分区或 4 页。每一个这样的分区被称为一簇。

VMM 用于充当阈值的簇数是可调整的。缺省值是一簇。使用 ioo -o numclust 命令增大 numclust 参数可延迟后写入。

对于增强型 JFS,ioo -o j2_nPagesPerWriteBehindCluster 命令用来指定每次调度的页数,而不是簇数。增强型 JFS 簇的缺省页数为 32,意味着增强型 JFS 的缺省大小为 128 KB。

随机后写

后写功能提供了这样一种机制,即当给定文件在内存中的脏页数超过规定阈值后,那么会调

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库AIX topas命令中的Memory项% Comp% Noncomp% Client如何理解和分(2)在线全文阅读。

AIX topas命令中的Memory项% Comp% Noncomp% Client如何理解和分(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/310916.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: