显存是Linux内核所管理的最重要的资源之一。显存管理系统是操作系统中最为重要的部份,由于系统的数学显存总是多于系统所须要的显存数目。虚拟显存就是为了克服这个矛盾而采用的策略。系统的虚拟显存通过在各个进程之间共享显存而使系统看上去有少于实际显存的显存容量。Linux支持虚拟显存,就是使用c盘作为RAM的扩充,使可用显存相应地有效扩大。核心把当前不用的显存块存到硬碟,腾出显存给其他目的。当原先的内容又要使用时,再读回显存。
一、内存使用情况检测
(1)实时监控显存使用情况
#free
total used free shared buffers cached
Mem: 256024 192284 63740 0 10676 101004
-/+ buffers/cache: 80604 175420
Swap: 522072 0 522072
前面给出了一个256兆的RAM和512兆交换空间的系统情况。第三行输出(Mem:)显示数学显存。total列不显示核心使用的数学显存(一般大概1MB)。used列显示被使用的显存支出(第二行不计缓冲)。free列显示全部没使用的显存。Shared列显示多个进程共享的显存总量。Buffers列显示c盘缓存的当前大小。第五行(Swap:)对对换空间,显示的信息类似前面。假如这行为全0,这么没使用对换空间。在缺省的状态下,free命令以千字节(也就是1024字节为单位)来显示显存使用情况。可以使用—h参数以字节为单位显示显存使用情况,或则可以使用—m参数以兆字节为单位显示显存使用情况。还可以通过—s参数使用命令来不间断地监视显存使用情况:
#free–b–s2
这个命令将会在终端窗口中连续不断地报告显存的使用情况,每2秒钟更新一次。
(2)组合watch與free命令拿来实时监控显存使用情况:
#watch -n 2 -d free
Every 2.0s: free Fri Jul 6 06:06:12 2007
total used free shared buffers cached
Mem: 233356 218616 14740 0 5560 64784
-/+ buffers/cache: 148272 85084
Swap: 622584 6656 615928
watch命令会每两秒执行free一次,执行前会消除屏幕,在同样位置显示数据。由于watch命令不会卷动屏幕,所以适宜出长时间的检测显存使用率。可以使用-n选项,控制执行的频度;也可以借助-d选项,让命令将每次不同的地方显示下来。Watch命令会仍然执行,直至您按下[Ctrl]-[C]为止。
二、虚拟显存的概念
(1)Linux虚拟显存实现机制
Linux虚拟显存的实现须要六种机制的支持:地址映射机制、内存分配回收机制、缓存和刷新机制、请求页机制、交换机制、内存共享机制。
首先显存管理程序通过映射机制把用户程序的逻辑地址映射到化学地址,在用户程序运行时假如发觉程序中要用的虚地址没有对应的数学显存时,就发出了恳求页要求;假如有空闲的显存可供分配,就恳求分配显存(于是用到了显存的分配和回收),并把正在使用的化学页记录在缓存中(使用了缓存机制)。假如没有足够的显存可供分配,这么就调用交换机制,腾出一部份显存。另外在地址映射中要通过TLB(翻译后援储存器)来找寻化学页;交换机制中也要用到交换缓存,但是把数学页内容交换到交换文件中后也要更改页表来映射文件地址。
(2)虚拟显存容量设定
其实有人告诉你,应当分配2倍于化学显存的虚拟显存,但这是个不固定的规律。假如你的化学保存比较小,可以这样设定。假如你有1G化学显存或更多的话,可以缩小一下虚拟显存。Linux会把大量的显存用做Cache的,但在资源紧张时回收回.。你只要听到swap为0或则很小就可以放心了,由于显存放着不用才是最大的浪费。
三、使甩vmstat命令监视虚拟显存使用情况
vmstat是VirtualMeomoryStatistics(虚拟显存统计)的简写linux内存监控工具,可对操作系统的虚拟显存、进程、CPU活动进行监视。它是对系统的整体情况进行统计,不足之处是难以对某个进程进行深入剖析。一般使用vmstat55(表示在5秒时间内进行5次取样)命令测试。将得到一个数据汇总它可以反映真正的系统情况。
#vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 62792 3460 9116 88092 6 30 189 89 1061 569 17 28 54 2
0 0 62792 3400 9124 88092 0 0 0 14 884 434 4 14 81 0
0 0 62792 3400 9132 88092 0 0 0 14 877 424 4 15 81 0
1 0 62792 3400 9140 88092 0 0 0 14 868 418 6 20 74 0
1 0 62792 3400 9148 88092 0 0 0 15 847 400 9 25 67 0
vmstat命令输出分成六个部份:
(1)进程procs:
r:在运行队列中等待的进程数。
b:在等待io的进程数。
(2)显存memoy:
swpd:现时可用的交换显存(单位KB)。
free:空闲的显存(单位KB)。
buff:缓冲去中的显存数(单位:KB)。
cache:被拿来做为高速缓存的显存数(单位:KB)。
(3)swap交换页面
si:从c盘交换到显存的交换页数目,单位:KB/秒。
so:从显存交换到c盘的交换页数目,单位:KB/秒。
(4)io块设备:
bi:发送到块设备的块数linux源代码分析,单位:块/秒。
bo:从块设备接收到的块数,单位:块/秒。
(5)system系统:
in:每秒的中断数,包括时钟中断。
cs:每秒的环境(上下文)切换次数。
(6)cpu中央处理器:
cs:用户进程使用的时间。以比率表示。
sy:系统进程使用的时间。以比率表示。
id:中央处理器的空闲时间。以比率表示。
假如r常常小于4,且id常常大于40,表示中央处理器的负荷很重。假如bi,bo常年不等于0,表示数学显存容量太小。
四、Linux服务器的显存窃取和回收显存的方式
1、内存泄露的定义:
通常我们常说的显存泄露是指堆显存的泄露。堆显存是指程序从堆中分配的,大小任意的(显存块的大小可以在程序运行期决定),使用完后必须显示释放的显存。应用程序通常使用malloc,realloc,new等函数从堆中分配到一块显存,使用完后,程序必须负责相应的调用free或delete释放该显存块,否则,这块显存就不能被再度使用,我们就说这块显存泄露了。
2、内存泄漏的害处
从用户使用程序的角度来看,显存泄露本身不会形成哪些害处,作为通常的用户,根本觉得不到显存泄露的存在。真正有害处的是显存泄露的堆积,这会最终消耗尽系统所有的显存。从这个角度来说,一次性显存泄露并没有哪些害处,由于它不会堆积linux内存监控工具,而隐式显存泄露害处性则十分大,因为较之于常发性和偶发性显存泄露它更难被测量到。存在显存泄露问题的程序不仅会占用更多的显存外,都会使程序的性能大幅增长。对于服务器而言,假若出现这些情况,虽然系统不崩溃,也会严重影响使用。
3、内存泄漏的检查和回收
对于显存溢出之类的麻烦可能你们在编撰表针比较多的复杂的程序的时侯才会遇见。在Linux或则unix下,C、C++语言是最使用工具。并且我们的C++程序缺少相应的手段来测量显存信息,而只能使用top指令观察进程的动态显存支出。并且程序退出时,我们没法得知任何显存泄露信息。
使用kill命令
使用Linux命令回收显存雨林木风linux,我们可以使用Ps、Kill两个命令检查显存使用情况和进行回收。在使用超级用户权限时使用命令“Ps”,它会列举所有正在运行的程序名称,和对应的进程号(PID)。Kill命令的工作原理是:向Linux操作系统的内核送出一个系统操作讯号和程序的进程号(PID)。
应用事例:
为了高效率回收显存可以使用命令ps参数v:
[root@www ~]# ps v
PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND
2542 tty1 Ss+ 0:00 0 8 1627 428 0.1 /sbin/mingetty tty1
2543 tty2 Ss+ 0:00 0 8 1631 428 0.1 /sbin/mingetty tty2
2547 tty3 Ss+ 0:00 0 8 1631 432 0.1 /sbin/mingetty tty3
2548 tty4 Ss+ 0:00 0 8 1627 428 0.1 /sbin/mingetty tty4
2574 tty5 Ss+ 0:00 0 8 1631 432 0.1 /sbin/mingetty tty5
2587 tty6 Ss+ 0:00 0 8 1627 424 0.1 /sbin/mingetty tty6
2657 tty7 Ss+ 1:18 12 1710 29981 7040 3.0 /usr/bin/Xorg :0 -br -a
2670 pts/2 Ss 0:01 2 682 6213 1496 0.6 -bash
3008 pts/4 Ss 0:00 2 682 6221 1472 0.6 /bin/bash
3029 pts/4 S+ 0:00 2 32 1783 548 0.2 ping 192.168.1.12
3030 pts/2 R+ 0:00 2 73 5134 768 0.3 ps v
之后假如想回收Ping命令的显存的话,使用命令:
#Kill-93029
使用工具软件
Memprof是一个十分具有吸引力且十分适于使用的软件,它由RedHat的OwenTalyor成立。这个工具是用于GNOME后端的Boehm-Demers-Weiser垃圾回收器。这个工具直接就可以执行,但是其工作上去无需对源代码进行任何更改。在程序执行时,这个工具会以图形化的形式显示显存的使用情况。