1、现象、问题描述

在系统监控时,经常会监控系统内存占用率,其目的为避免系统因为在动态分配内存时因为实际内存不够而使用swap空间,使用swap空间将使用系统性能下降,系统不稳定。

在Linux系统中,系统内存占用率可以通过free命令,计算得出:

/home/jcxia> free

total used free shared buffers cached

Mem: 24672800 17895600 6777200 0 232996 14706928

-/+ buffers/cache: 2955676 21717124

Swap: 21727904 0 21727904

其中:

total――指系统所有的物理内存大小

used――已经使用的物理内存大小

free――空闲的物理内存大小

buffers――文件系统缓存占用的物理内存,指要写入物理磁盘的数据占用的内存。

cached――文件系统缓存占用的物理内存,指从物理磁盘读入供以后使用的数据占用的内存。

实际系统中,文件系统缓存可能占用大量的物理内存,Linux下计算物理内存空闲率时,通常将buffers与cached内存当作可使用的内存。即实际系统内存占用率计算:

( total – (free + buffer + cached) ) * 100/ total

在AIX系统下,没有free命令,与之类似的的命令是svmon –G

# svmon -G

size inuse free pin virtual

memory 4100096 420275 3679821 271614 398980

pg space 1048576 1109

work pers clnt

pin 271614 0 0

in use 398980 0 21295

其中:

size――报告了 RAM 的大小,单位是大小为 4k 的页面。

inuse ――报告了进程所使用的 RAM 中的页面数,加上属于一个已终止的进程但仍位于 RAM 中的持久页面的数目。

free ――报告了空闲列表中页面的数目。

pin ――报告了物理内存 (RAM) 中固定的页面数。固定的页面不能被调出。

paging space ――报告了分页空间的实际使用情况(单位是大小为 4k 的页面)。

与Linux不同的是,svmon只能是root用户才能使用。但有一些脚本并不运行在root用户下,那怎么样才能在普通用户下计算系统内存占用率呢?

在巡检工具及watchdog脚本中,AIX下的空闲内存计算通常通过free * 100/ total。与Linux系统一样,AIX的文件系统也占用了大量的内存,free值很小是很正常的。

因此这里有两个问题:

l AIX下的内存占用率应该怎么计算?

l AIX下普通用户怎么获取内存占用信息?

2、关键过程、根本原因分析

首先想到的办法是通过另外的属主是root用户的脚本,设置其Set-id位,使其执行时有效用户ID为root用户的ID,然后在脚本中执行svmon,没有成功。

然后,想想能不能搞清楚svmon每项输出的含义,并找找有没有普通用户能执行的相关的命令,并根据相关的输出计算得出。

先来分析AIX内存管理原理。

AIX使用VMM(虚拟内存管理器)管理管理 RAM 和虚拟页面的分配。“在 AIX 中,将所有的虚拟内存段划分为若干个页面,每个页面的缺省大小为 4KB。所分配的页面可以位于 RAM 或者分页空间(虚拟内存存储于磁盘上)。VMM 还维护一个称为空闲列表 的对象,该对象定义为未分配的页帧。它们用于处理缺页的情况。通常存在少量未分配页面(您可以自行配置),VMM 可以使用这些页面来腾出空间并为其重新分配页帧。可以使用 VMM 的页面置换算法来选择要重新分配页帧的虚拟内存页面。这种分页算法可以确定对当前位于 RAM 中的哪些虚拟内存页面的页帧进行回收,并放回到空闲列表中。AIX 可以使用所有可用的内存,除了那些配置为未分配并用做空闲列表的内存之外。”

VMM 将虚拟内存段划分为两种不同的类别。它们分别是,使用计算内存的工作段和使用文件内存的持久段。

计算页面

当进程对计算信息进行处理时,将使用到计算内存。这些工作段是临时的(暂时的),并且当进程终止或者页面被替换时,这些工作段将不复存在。它们没有对应的持久磁盘存储位置。在许多情况下,当一个进程终止时,将释放其物理和分页空间。在 VMM 中,当空闲物理内存较少时,可以将最近没有使用的程序从 RAM 移出到分页空间,以帮助释放物理内存,从而完成更多的实际工作。

文件页面

与计算内存不同,文件内存使用了持久段,并在磁盘上具有持久存储位置。数据文件或者可执行程序通常都映射为持久段,而不是工作段。数据文件可能与文件系统相关,如 JFS、JFS2 或 NFS。它们一直都位于内存中,直到文件被卸载、页面被替换、或者取消了到文件的链接。在将数据文件复制到 RAM 中之后,VMM 控制何时对这些页面进行覆盖或者将其用于存储其他数据。在可以选择的情况下,大多数人更希望将文件内存调出到磁盘,而不是计算内存。

从以上分析可以得出,计算AIX内存实际使用的量时,应该是:
计算内存 *100 / 总内存

使用svmon –G命令时,即为work * 100 / memory size.

不过上述计算也不完全正确,因为work页面可能于交换空间,而不是实际内存中。

分析系统性能时,我们还常用另一个命令:vmstat。

8 [jcxia] :/home/jcxia/tool>vmstat

系统配置:lcpu=4 mem=16000MB

kthr memory page faults cpu

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

r b avm fre re pi po fr sr cy in sy cs us sy id wa

1 1 397674 3681485 0 0 0 0 0 0 24 2040 64 0 0 75 24

这里,avm的含义为:表示系统所使用的活动虚拟内存量(单位为 4k 大小的页面),不包括文件页面。可见,使用“vm * 100/系统内存总页面数 ”可以估算系统当前内存占用率。

3、结论、解决方案及效果

使用vmstat –v获取系统总页面数:

9 [jcxia] :/home/jcxia/tool>vmstat -v

4096000 内存页

3886550 lruable 页

3681488 可用页

0 内存池

279392 固定页

80.0 maxpin 百分比

20.0 minperm 百分比

80.0 maxperm 百分比

0.3 numperm 百分比

13075 文件页

0.0 压缩百分比

0 压缩页

0.4 numclient 百分比

80.0 maxclient 百分比

16841 客户机页

0 已调度的远程页调出

0 在没有 pbuf 的情况下阻塞暂挂磁盘 I/O

0 在没有 psbuf 的情况下阻塞调页空间 I/O

2740 在没有 fsbuf 的情况下阻塞文件系统 I/O

6092 在没有 fsbuf 的情况下阻塞客户机文件系统 I/O

0 在没有 fsbuf 的情况下阻塞外部寻呼机文件系统 I/O

然后使用vmstat获取avm大小。

可以使用使用shell脚本如下:

total=`vmstat -v|head -1|awk '{print $1}'`

avm=`vmstat |sed -n '$ p'|awk '{print $3}'`

SysMemRatio=`echo "100 * ${avm} / ${total}" | bc `

4、经验总结、预防措施和规范建议

不同的操作系统管理机制存在一定的差别,做watchdog等相关的工具时,要考虑不同平台的差别。

这种方法只能近似计算,并且有可能出现内存占用率超过100%的现象。

AIX系统内存占用率的计算相关推荐

  1. Win10系统内存占用率太高的解决办法,怎么办?

    作者:1466 链接:https://www.zhihu.com/question/39716538/answer/883031599 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业 ...

  2. win10内存占用率过高怎么办_DNF:WIN10玩DNF卡顿,内存占用过高的解决方法

    无论你是喜欢正经的职业百科还是搞笑的DNF趣事,点点关注不迷路 小编会努力继续给大家带来干货满满的文章,您的关注和收藏是最大的支持~ 各位勇士新年快乐,今天是初二了,祝大家玩的开心. 今天给大家分享一 ...

  3. python使用psutil获取系统(Windows Linux)所有运行进程信息实战:CPU时间、内存使用量、内存占用率、PID、名称、创建时间等;

    python使用psutil获取系统(Windows Linux)所有运行进程信息实战:CPU时间.内存使用量.内存占用率.PID.名称.创建时间等: psutil模块可以跨平台使用,支持Linux/ ...

  4. linux创建云主机内存不足,云主机DC2 Linux系统CPU与内存占用率高导致无法登录

    本文档介绍 Linux 云服务器因 CPU 与内存占用率高导致无法登录等问题的排查方法和解决方案. 登录与查看系统负载登录云服务器.通过第三方软件远程登录 Linux 云服务器( Linux 云服务器 ...

  5. win10内存占用率过高怎么办_win10系统内存占用过高怎么解决

    win10系统内存占用过高怎么解决?很多用户都将电脑内存以4GB为标准配备规格,但是仍然会有用户遇到内存不足的问题,不知如何解决的用户,请来看看下面的介绍吧. 使用电脑的时候,有时会遇到内存占用过高, ...

  6. linux系统限制内存使用率,linux中限制CPU和内存占用率方法

    在linux中CPU与内存占用率限制的方法有几种我这里整理常用的两种,希望文章对各位同学会有所帮助哦. 查看cpu占用 在命令行中输入 "top" 即可启动 top top 的全屏 ...

  7. linux ps内存占用率,linux ps命令,查看某进程cpu和内存占用率情况, linux ps命令,查看进程cpu和内存占用率排序。 不指定...

    背景:有时需要单看某个进程的CPU及占用情况,有时需要看整体进程的一个占用情况. 一. linux ps命令,查看某进程cpu和内存占用率情况 [root@test vhost]# ps aux US ...

  8. 【错误记录】SeeMusic 内存错误 ( 内存占用率 100 % | 清除系统设置信息 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 在设置了 MIDI 的混响参数之后 , 将混响参数拉倒 0 , 导致内存崩溃 , 内存占用率 100% , 然后 OOM ; 并且重启后 , 删除软 ...

  9. 解决服务器上 w3wp.exe 和 sqlservr.exe 的内存占用率居高不下的方案

    SQL Server是如何使用内存 最大的开销一般是用于数据缓存,如果内存足够,它会把用过的数据和觉得你会用到的数据统统扔到内存中,直到内存不足的时候,才把命中率低的数据给清掉.所以一般我们在看sta ...

  10. hbase占用内存过高_内存占用率过高怎么办?Win10电脑内存占用率很高原因和解决方法...

    内存占用率过高,是电脑十分常见的电脑故障,出现的现象就是什么软件还没有打开,内存占用了70%以上,甚至是99%,出现电脑明显卡顿的问题.不过想要解决内存占用率高不是简单的事情,因为可能性比较多,可能是 ...

最新文章

  1. 一些SQL性能优化的实用经验
  2. 吴恩达新书《Machine Learning Yearning》中7个实用建议(附论文)
  3. 主线程 java_java-在子线程中执行主线程方法
  4. 财务思维02-资产边界
  5. mysql 开发规范_专业级的MySQL开发设计规范及SQL编写规范
  6. dup、dup2、fcntl
  7. 类的定义、成员定义修饰符
  8. jQuery学习笔记系列(三)——事件注册、事件处理、事件对象、拷贝对象、多库共存、jQuery插件、toDoList综合案例
  9. zabbix安装部署_听说你的学习之路又停留在了“不会安装”
  10. chrome浏览器的跨域设置
  11. SRIO传输协议学习
  12. win10 uwp 相机的分辨率设置方法
  13. rstudio线性回归_R语言线性回归
  14. 抢答器c语言程序设计,基于单片机的智能抢答器设计与实现
  15. 从零开发短视频电商 视频观看数、点赞数的优化
  16. flashback的用法
  17. python创建学生类姓名学号_Python练习题:由用户输入学生学号与姓名,数据用字典存储,最终输出学生信息(按学号由小到大显示)。...
  18. linux spec文档解析
  19. 盛世昊通:工信部第351批即将上市的汽车履历表
  20. 优先队列之堆排序(一)

热门文章

  1. Windows CMD常用命令大全(值得收藏)
  2. 华为18级工程师三年心血终成趣谈网络协议文档(附详细讲解)
  3. 省市县三级联动sql数据
  4. 机器人新车号牌安装_他指挥机器人给新车“穿衣” 分分钟搞定
  5. 佳博热敏打印机修改ip工具_佳博打印机修改ip教程本教程适用于80系列打印机及3150,9035打印.doc...
  6. java输出汉字_java怎么 输入输出中文
  7. 空间权重矩阵构建(Stata代码)
  8. 单片机控制步进电机-电路连接
  9. ftp服务器向所有主机发送文件,文件传输FTP
  10. 潍坊OA:通达OA协同办公标准解决方案