⑴ free
www.2cto.com
一个常见的问题是:
我的应用程序,服务器,用户以及系统进程等正在使用多少内存? 或者
现在多少内存可用?如果正在运行的进程使用的内存大于可用RAM,则需要将这些进程移到交换区
因此,一个补充的问题是:
正在使用多少交换区空间?
www.2cto.com
一个常见的问题是:
我的应用程序,服务器,用户以及系统进程等正在使用多少内存? 或者
现在多少内存可用?如果正在运行的进程使用的内存大于可用RAM,则需要将这些进程移到交换区
因此,一个补充的问题是:
正在使用多少交换区空间?
free命令将回答所有这些问题。而且,一个非常有用的选项-m可以显示可用内存(以MB为单位)
[sql]
[root@Think ~]# free -m
[root@Think ~]# free -m
total used free shared buffers cached
Mem: 1011 991 19 0 59 661
-/+ buffers/cache: 270 740
Swap: 0 0 0
以上输出显示系统具有1011MB的RAM,已使用991MB,还有19MB内存可用
第二行显示在物理内存中缓冲区和缓存大小的更改
第三行显示交换分区利用情况
要以KB或GB为单位显示以上内容,请将-m选项分别替换为-k或-g。使用-b选项将以字节为单位
[sql]
[root@Think ~]# free -b
[root@Think ~]# free -b
total used free shared buffers cached
Mem: 1060110336 1039556608 20553728 0 62877696 692731904
-/+ buffers/cache: 283947008 776163328
Swap: 0 0 0
-t选项在输出底部显示总数(物理内存和交换分区的总和): www.2cto.com
[sql]
[root@Think ~]# free -m -t
total used free shared buffers cached
Mem: 1011 991 19 0 60 660
-/+ buffers/cache: 270 740
Swap: 0 0 0
Total: 1011 991 19
尽管free不显示百分比,但是我们可以提取并格式化输出的特定部分
例如:已用内存占总数的百分比
[sql]
[root@Think ~]# free -m | grep Mem | awk '{print ($3 / $2)*100}'
97.9228
这个值非常重要,您可能希望在可用内存的百分比低于特定阀值时触发一个警报
同样,要发现已使用交换分区空间的百分比,您可以:
[sql]
[root@Think ~]# free -m | grep -i Swap | awk '{print ($3 / $2)*100}'
可以使用free查看应用程序施加的内存负载
例如,启动备份应用程序之前检查可用内存,启动之后立即检查可用内存
两者之差就是备份应用程序消耗的内存
针对Oracle用户的用法 www.2cto.com
那么您如何使用该命令管理运行Oracle环境的Linux服务器呢?
性能问题的一个最常见原因是内存不足,从而导致系统临时将内存区域"交换"到磁盘中
某种程度的交换可能是必然的,但交换过多则表示可用内存不足
而现在,您可以使用free获得可用内存信息,紧接着使用sar命令(稍后介绍)检查内存和交换
分区的消耗的历史趋势
如果交换分区的使用是暂时的,则可能出现一个高峰,但如果明确要经过一段时间,则应要注意
持续的内存过载可能有几个明显且可能的疑点:
● 较大的SGA高于可用内存
● 在PGA上分配了大量内存
● 某些进程出现泄漏内存的错误
对于第一种情况,应确保SGA低于可用内存,根据经验,对SGA使用大约是物理内存的40%,
当然,应该根据具体情况定义该参数
对于第二种情况,应尝试减少查询中的大量缓冲区的分配
对于第三种情况,应使用ps命令确定可能泄露内存的具体进程
⑵ ipcs
当某个进程运行时,它会夺取"共享内存"
该进程可能拥有一个或很多个共享内存段
进程之间彼此发送消息并使用信号
要显示有关共享内存段,IPC消息队列以及信号的信息,可以使用一个命令:
ipcs
-m选项非常受欢迎,他能显示共享内存段
[sql]
[root@Think ~]# ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x7402f3d8 4620288 root 600 4 0
0x00000000 4980737 root 644 52 2
0x7402f3d7 4587522 root 600 4 0
0x00000000 5013507 root 644 16384 2
0x00000000 5046276 root 644 268 2
0x00000000 5111813 root 600 393216 2 dest
0x00000000 5144582 root 600 393216 2 dest
0x00000000 5177351 root 600 393216 2 dest
0x00000000 5439503 root 600 393216 2 dest
0x00000000 5472272 root 600 393216 2 dest
0xbe3bb918 5505041 oracle 640 419438592 20
该输出表明服务器正在运行Oracle软件,显示了各种共享内存段
每个共享内存段由显示在"shmid"列下面的共享内存ID唯一标识(稍后,您将看到如何使用该值)
显然,"owner"显示内存段的所有者,"perms"列显示权限,"bytes"显示字节大小
-u选项显示一个非常快速的摘要
[sql]
[root@Think ~]# ipcs -mu
------ Shared Memory Status --------
segments allocated 18
pages allocated 103562
pages resident 36482
pages swapped 0
Swap performance: 0 attempts 0 successes
-l显示限定值(相对于当前值):