内存使用率不断增加的原因之一

细心的朋友会注意到,当你在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题.

先来说说free命令

[root@server ~]# free -m
total used free shared buffers cached
Mem: 249 163 86 0 10 94
-/+ buffers/cache: 58 191
Swap: 511 0 511

其中:

total 内存总数

used 已经使用的内存数

free 空闲的内存数

shared 多个进程共享的内存总额

buffers Buffer Cache和cached Page Cache 磁盘缓存的大小

-buffers/cache 的内存数:used - buffers - cached

+buffers/cache 的内存数:free + buffers + cached

可用的memory=free memory+buffers+cached

有了这个基础后,可以得知,我现在used为163MB,free为86,buffer和cached分别为10,94

那么我们来看看,如果我执行复制文件,内存会发生什么变化.

[root@server ~]# cp -r /etc ~/test/
[root@server ~]# free -m
total used free shared buffers cached
Mem: 249 244 4 0 8 174
-/+ buffers/cache: 62 187
Swap: 511 0 511

在我命令执行结束后,used为244MB,free为4MB,buffers为8MB,cached为174MB,天呐都被cached吃掉了.别紧张,这是为了提高文件读取效率的做法.

引用http://www.wujianrong.com/archives/2007/09/linux_free.html"为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。"

那么有人说过段时间,linux会自动释放掉所用的内存,我们使用free再来试试,看看是否有释放>?

[root@server test]# free -m
total used free shared buffers cached
Mem: 249 244 5 0 8 174
-/+ buffers/cache: 61 188
Swap: 511 0 511

MS没有任何变化,那么我能否手动释放掉这些内存呢???回答是可以的!

/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段.也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整.那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存.操作如下:

[root@server test]# cat /proc/sys/vm/drop_caches
0
首先,/proc/sys/vm/drop_caches的值,默认为0

[root@server test]# sync

手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行 sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)

[root@server test]# echo 3 > /proc/sys/vm/drop_caches
[root@server test]# cat /proc/sys/vm/drop_caches
3

将/proc/sys/vm/drop_caches值设为3

[root@server test]# free -m
total used free shared buffers cached
Mem: 249 66 182 0 0 11
-/+ buffers/cache: 55 194
Swap: 511 0 511

再来运行free命令,发现现在的used为66MB,free为182MB,buffers为0MB,cached为11MB.那么有效的释放了buffer和cache.

有关/proc/sys/vm/drop_caches的用法在下面进行了说明

/proc/sys/vm/drop_caches (since Linux 2.6.16)
Writing to this file causes the kernel to drop clean caches,
dentries and inodes from memory, causing that memory to become
free.

To free pagecache, use echo 1 > /proc/sys/vm/drop_caches; to
free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
to free pagecache, dentries and inodes, use echo 3 >
/proc/sys/vm/drop_caches.

Because this is a non-destructive operation and dirty objects
are not freeable, the user should run sync( first.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一 静态路由故障   1. 静态路由和有类别查找   当路由选择表进程检查一条使用中间地址(路由选择表中作为下一跳引用的IP地址)的可解析的静态路由时,这个检查总是在有类别方式下完成的,无论是否使用ip classless命令如果在路由选择表中有类别方式下的中间地址不能解析,则删除该静态路由。   使用show ip route查看路由选择表。   使用debug 可以显示某个网络宕掉了。   如果使用无类别方式并有一条默认路由存在,那么具有高管理距离的备份表态路由将永远不会在主静态路由失效时装入到路由选择表中。这是因为任何静态路由,即便是指向不存在的中间地址的静态路由,都会使用默认路由进行解析。   CISCO路由选择表进程每60S调用一个检查路由选择表的静态路由功能来根据动态变化的路由选择表安装或删除静态路由。   2.静态路由和中间地址   静态路由可以使用中间网络地址或出接口来创建。大多数情况下,使用出接口在路由选择表进程中解析静态路由更加有效。   只要中间IP地址可以在路由选择表中解析,它不必是真实的下一跳路由器的接口。静态网络路由(如中间地址)必须最终被解析为路由选择表中一条具有出接口的路由。   每当路由选择表进程需要为x.x.x.0/24网络使用静态路由表项时,它还需要解析中间地址y.y.y.y,称为递归查找。一次额外的路由查找或许对路由选择进程的性能没有多少影响。但是,采取多次递归查找来获得解析的静态路由可能会影响性能。   3.静态路由优化   为避免递归查找: 串行网络:使用出接口   以太网络:同时使用中间地址和出接口   4.反复的静态路由安装和删除   尽可能地使用出接口而不是中间地址来配置静态路由。   5.使用丢弃路由   有时网络中有环路的产生。通过周期性的查看路由器接口上的计数器可以看到路由选择环路的结果。   clear counters serial0/0   show interface serial0/0   路由环路的问题在网络中产生了一个黑洞。一旦IP头中的生存期(TTL)减到0就丢弃分组。   解决1:有类别模式的路由选择(no ip classless)——在用户网络路由器上使用no ip classless.路由器在至少一个已知子网存在时不会使用任何超网或默认路由。但不是首选。因为它改变了所有分组的路由选择表查找行为。   解决2:使用一条丢弃路由——当路由选择表中没有特定的匹配,而且使用一条超网或默认路由来转发那些分组并不合适时,一条丢弃路由把分组送给了null0,即比特桶。   ip route x.x.0.0 255.255.0.0 null0   ip route x.x.0.0 255.255.0.0 null0 200   后一个命令行配置仅在主路由失效时使用的另一条丢弃路由。通过将静态路由的默认管理距离改为比所使用的动态路由选择协议的管理距离更高的一个值来实现。 二 排除RIP故障   1.不兼容的版本类型   debug ip rip   show ip protocols 对检查接口上发送和接收的RIP分组版本十分有用。   如果R1不支持V2的版本,只能接收RIPv1分组,那么R2配置成RIPv1和RIPv2.   可在接口级指定发送和接收RIP分组的特定版本   interface e0   ip rip send version 1 2   ip rip receive version 1 2   2.不匹配的认证密钥   RIPv2的一个选项是可以认证的RIPv2更新,为了增强安全性,当使用认证时,必须在双方配置口令。这个口令被称为认证密钥。如果这一密钥与另一方的密钥不匹配,双方都将忽略RIPv2更新。   在接口上配置ip rip authentication key-chain cisco   用debug ip rip调试。   3.达到RIP的路数限制   RIP度量标准的最大值是15跳。   无法克服这个问题。可以使用非15跳限制的路由选择协议。IGRP最大跳数是255,EIGRP最大跳数是224,二者默认都是100.   4.不连续网络   当主网络被另一个主网络分隔开时,被称为不连续网络。   解决1:使用静态路由   解决2:在路由器之间的链路地址改为左右不连续网络中的一部分。   解决3:在两台路由器上用no auto-summary配置启用RIPv2的无类别路由选择版本。   router rip   version 2   network x.x.x.0   no auto-summary   解决4:使用无类别路由选择协议。如OSPF,EIGRP,IS-IS替代RIPv1路由选择协议。   5.不合法的源地址   当RIP告诉路由选择表安装路由时,它执行源合法性检查。如果源所在子网与本地接口不同,RIP则忽略更新并且不在路由选择表中安装从这个源来的路由。   当一方是有编号而另一方是无编号时,必须关闭这个检查。   router rip   no validate-update-source   6.翻动(flapping)路由   路由翻动是指路由选择表中一条路由的不断删除和再插入。为了检查路由是否真的翻动,检查路由选择表并查看路由的寿命(age)。如果寿命被不断的重置为00:00:00,这就意味这路由正在翻动。   RIP有180S没有收到一条路由,那么该路由将保持240S,然后被清除。   使用show interface来检查接口统计值。   最常见帧中继环境分组丢失。   使用show ip route rip可以检查RIP多久没有更新。   使用show interface serial 0可查看到接口上有大量的广播分组是否被丢弃。帧中继情况下,可能需要调整帧中继广播队列。在非帧中继的环境中,可能需要增加输入或输出保留队列。   7.大型路由选择表   接口上使用ip summary-address汇总路由。 三 排除EIGRP故障   1.不匹配的K值   EIGRP为了建立它的邻居关系,计算EIGRP度量标准的K常数值必须相同。   K1-带宽 K2-负载 K3-延迟 K4,K5-可靠性   router eigrp 1   network x.x.x.x   metric weights 0 1 1 1 1 0   2.不匹配的AS编号   EIGRP不会与具有不同自治系统编号的路由器形成任何邻居关系。   3.活动粘滞   (1)确定问题   可能的原因有:   。 坏的或拥塞的链路;   。 低的路由器资源,如路由器上的低内存和高CPU处理。   。 长的查询范围   。 过多的冗余   默认活动粘滞定时器只有180S.   使用show ip eigrp topology active 命令帮助故障排除EIGRP活动粘滞错误,仅在问题发生时有用,用户一次只有180S的时间来确定。邻居有一个r跟在后面表示它没有应答查询。   (2)故障排除方法   追踪查询,一跳接一跳,在每一跳找出活动路由的状态。   (3)最终解决方案   尽可能手工汇总路由并有一个分层次的网络设计。EIGRP汇总的网络越多,主收敛发生时需要做的事情越少。   4.重复的路由ID   EIGRP只是为了外部路由而使用路由器ID的概念来防止环路。EIGRP基于路由器上回环接口的最大IP地址来选择路由器ID.如果路由器没有回环接口,则选择所有接口中最大的激活IP地址作为EIGRP的路由器ID.   debug ip eigrp可以看到接口上通告某个网络。   经验法则:永远不要在网络的两个地方配置相同的IP地址。 四 排除OSPF故障   1.不匹配的参数   使用debug ip ospf adj命令能够看到大多数的不匹配问题。   (1)hello/dead间隔不匹配——匹配才可以形成邻居。   (2)不匹配的认证类型——OSPF下有MD5和纯文本认证。   router ospf 1   area 0 authentication message-digest   network x.x.0.0 0.0.255.255 area 0   (3)不匹配的区域ID——区域信息在OSPF的HELLO分组中发送。不同,不会形成邻接。   (4)不匹配的短截/传输/NSSA区域选项——当OSPF与一个邻居交换HELLO分组时,它所交换的一项内容是由8比特表示的可选能力。选项字段之一是E比特,即OSPF短截标志。当E比特置0时,该路由关联的区域是一个短截区域,外部LSA不允许进入这个区域。   2.OSPF状态问题   成为邻居的路由器不保证交换链路状态更新。一旦路由器决定与一个邻居形成邻接,它就开始交换其链路状态数据库的一份完整拷贝。   (1)OSPF陷入ATTEMPT——仅对neighbor语句的NBMA网络有效。陷入ATTEMPT是指一台路由器试图通过发送它的HELLO来联系邻居但是它没有收到响应。   show ip ospf neighbor查看。   原因:错误配置neighbor;NBMA上的单播连通性断了,这可能是由错误的DLCI,访问列表或转换单播的NAT引起的。   (2)OSPF陷入INIT——INIT状态表示路由器收到来自邻居的HELLO分组,但是双向通信并没有建立 .   原因:   。 一方访问列表阻止了HELLO;   。 一方的多播能力失效(一个交换机故障);   。 仅在一方启用了认证;   。 一方的frame-relay map/dialer map语句缺少了broadcast关键字。   。 一方的HELLO在第2层丢失了。   (3)OSPF陷入2-WAY——双向状态是指路由器在HELLO分组的邻居字段中见到了自己的路由器ID.类似于所有路由器的优先级都为0,则不会发生选举,所有路由器停留在双向状态中。   解决:确保至少一台路由器具有一个至少为1的IP OSPF优先级。   (4)OSPF陷入EXSTART/EXCHANGE——在EXSTART或EXCHANGE状态的OSPF邻居正处于尝试交换DBD(数据库描述)分组的过程中。   原因:   。 不匹配的接口MTU   。 邻居上重复的路由器ID   。 无法用超过特定MTU 长度进行PING   。 断掉的单播连通性,它可能是因为错误的DLCI,访问列表或转换单播的NAT   (5)OSPF陷入LOADING——邻居没有应答或邻居的应答从未到达本地路由器,路由器也会陷入LOADING状态。常有"%OSPF-4-BADLSA"控制台信息。   原因:   。 不匹配的MTU   。 错误的链路状态请求分组   3.点到点链路的一方是无编号的   interface s0   ip unnumbered loopback0   解决:双方都需要成为一个有编号点到点链路或一个无编号点到点链路。   4.ABR没有产生一个类型4的汇总LSA   类型4的汇总LSA的一个功能是宣告到其他区域的ASBR的可达性。如果同一个区域中存在ASBR则不需要类型4的LSA.   show ip ospf database external 命令的输出显示在路由器的外部OSPF数据库中是否存在路由。   show ip ospf database asbr-summary 命令的输出显示路由是否有类型4的LSA.   检查R是否真是ABR.如果是,则产生类型3或类型4的汇总LSA.show ip ospf   5.转发地址不能通过区域内或区域间路由获知   当OSPF获得一条外部LSA时,它在将该路由装入路由选择表之前要确定转发地址可通过一条OSPF区域内或区域间路由获知。如果转发地址不能通过区域内或区域间路由获知,OSPF不会将路由装入路由选择表中。   有可能的解决:   。 不在ABR上进行汇总   。 在ASBR上过滤再分布入OSPF中的直接子网   router ospf 1   redistribute rip subnets   6.路由汇总问题   两种类型汇总:   。 可执行在ABR上的区域间路由汇总   。 可执行在ASBR上的外部路由汇总   (1)区域间汇总   router ospf 1   area 3 range x.x.x.0 255.255.255.0   通过show ip ospf可以查看   (2)外部汇总   router ospf 1   summary-address x.0.0.0 255.0.0.0   7.CPUHOG问题   产生在:。 邻居形成过程   。 LSA刷新过程   8.SPF计算和路由翻动   只要拓扑有变化,OSPF就运行SPF算法再次计算最短路径优先树。,可能引起链路的不稳定。   原因:。 区域内的接口翻动   。 区域内的邻居接口翻动   。 重复的路由器ID   使用show ip ospf命令可查看在一个给定区域中SPF算法运行的次数;   使用debug ip ospf monitor来隔离一个翻动的LSA;   使用show log命令显示由接口引起的翻动。   解决:   。 修复正在翻动的链路   。 重新定义区域边界 五 排除IS-IS故障   1.IS-IS邻接问题   通常由链路故障和配置错误引起。   show clns neighbors 显示所有希望与被调查的路由器成为邻接的邻居   debug isis adj-packets 命令来调试   2.部分或所有邻接没有形成   步骤1——检查链路故障。show ip interface brief   步骤2——检查配置错误。show run   步骤3——检查不匹配的1级和2级接口。   步骤4——检查区域的错误配置。   步骤5——检查错误配置的子网   步骤6——检查重复的系统ID   3.邻接陷入INIT状态   常见原因:不匹配的接口MTU和认证参数。show clns neighbors可看到   步骤1——检查认证 debug isis adj-packets   步骤2——检查不匹配的MTU debug isis adj-packets   步骤3——检查IS-IS的HELLO填充禁止 (命令同上)   使用show clns interface查看接口上的HELLO填充状态   4.ES-IS邻接形成代替了IS-IS邻接形成   在IP环境中运行IS-IS的CISCO路由器仍然监听ES-IS协议所产生的ISH.当物理层和数据链路层工作时,即使没有建立IS-IS邻接的适当条件,仍能形成ES-IS邻接。   show clns neighbors   5.路由通告问题   大多数路由通告问题都可被限制为源端的配置问题或链路状态分组(LSP)的传播问题。   Dijkstra算法运行在LS数据库上来获得每个被通告路由的最佳路径。   debug isis update-packets   debug isis snp-packets   以上两个调试帮助故障排除LSP洪泛问题和链路状态数据库同步。   路由没有到达网络远端的问题可能有许多潜在原因,包括邻接问题,第1/2层问题,IS-IS错误配置以及其他问题。   6.路由翻动问题   网络中SPF进程的高CPU利用率(SHOW PROCESS CPU命令)也应标记为不稳定。   不稳定链路。   翻动还有可能是由LSP的错误风暴或一个路由选择环路引起。   show isis spf-log命令显示哪个LSP变化最频繁以及哪个LSP角发了SPF计算。   show isis update-packets 六 排除BGP故障   1.故障排除BGP邻居关系问题   遵循:首先,应检查第1/2层,然后是IP连通性(第3层),TCP连接(第4层),最后是BGP配置。   (1)直接的外部BGP邻居没有初始化   自治系统(AS)不会向AS发送或从AS接收任何IP前缀更新,除非邻居关系达到established状态,该状态是BGP邻居建立的最后阶段。当AS有一条单一的EBGP连接时,直到BGP完成了它的收发IP前缀操作后IP连通性   才能发生。   原因:。 第2层宕掉了,阻止了与直接的EBGP邻居通信   。 在BGP配置中有错误的邻居IP地址   命令:show ip bgp summary和 show ip bgp neighbors检查BGP邻居关系   active状态表示邻居间没有发生成功的通信,并且邻居未形成。用PING测试其连通性,失败则表示要修复第1/2层问题。   debug ip bgp能够帮助诊断问题   (2)非直接的外部BGP邻居没有初始化   有些情况下,EBGP邻居不是直连的。BGP邻居关系能够建立在试图形成由一台或多台路由器分隔开的EBGP邻居关系的路由器之间。这种邻居在IOS中被称为EBGP多跳。   当路由器之间存在多个接口并且需要在那些接口之间IP流量负载均衡时,通常在回环接口之间建立EBGP对等实体。   可能的原因:   。 到非直连对等实体地址的路由从路由选择表中丢失了   。 BGP配置中缺少ebgp-multihop命令   。 缺少update-source interface命令   命令:show ip bgp summary 和show bgp neighbors   router bgp 109   neighbor x.x.x.x remote-as 110   neighbor x.x.x.x ebgp-multihop 2   neighbor x.x.x.x update-source loopback0   (3)内部BGP邻居没有初始化   原因:   。 到非直接IBGP邻居的路由丢失了   。 BGP配置中缺少update-source interface命令   (4)BGP邻居(外部和内部)没有初始化   接口访问列表/过滤是BGP邻居活动问题的一个常见原因。   2.故障排除BGP路由通告   发生在BGP路由通告的产生和接收中。   (1)没有产生BGP路由   原因:   。 IP路由选择表中没有匹配的路由   。 发生了配置错误   。 BGP自动汇总到有类别/网络边界   (2)向IBGP/EBGP邻居传播/产生一条BGP路由的问题   配置的分布列表过滤可能是该问题的起因,或者是策略路由选择有问题。   (3)向EBGP邻居但没有向IBGP邻居传播一条BGP路由的问题   show run   show ip bgp   show ip bgp summary   解决:   。 使用IBGP全互联   。 设计一个路由反射器模型。   router bgp 109   neighbor x.x.x.x route-reflector-client   。 设计一个聪明模型   (4)向IBGP/EBGP邻接传播一条IBGP路由的问题   一条BGP路由只有首先通过IGP或静态路由获得后才是同步的。   show ip bgp命令的输出显示了BGP表中的不同步路由。   3.排除路由没有装入IP路由选择表中的故障   原因:   (1)IBGP原因   。 IBGP路由不同步   。 BGP下一跳不可达   (2)EBGP原因   。 在多跳EBGP情况下BGP下一跳不可达   。 BGP路由被抑制   。 多出口鉴别器(MED)值为无穷   4.BGP下一跳不可达   解决:   。 使用静态路由或再分布经由IGP宣告EBGP下一跳   router ospf 1   network x.x.x.0 0.0.0.255 area 0   。 使用next-hop-self命令将下一跳改变为一个内部对等实体地址   router bgp 109   router ospf x.x.x.x next-hop-self   4.BGP路由被抑制   抑制(dampening)是减小本地BGP网络中来自EBGP邻居的不稳定BGP路由所引起的不稳定性的方法。   抑制是一种为一条翻动的BGP路由指派一个罚点的方法。   router bgp 109   bgp dampening 七 排除再分布故障   1.RIP再分布问题   router rip   version 2   redistribute ospf 1 metric 1   network x.x.0.0   因为RIP有跳数限制。为改正到达16跳时会出现路由无法再分布的问题,需要在再分布时指派有效的度量标准。其实现可以使用redistribute命令中的metric或default-metric命令。   使用show ip route查看路由传播情况。   2.IGRP/EIGRP的再分布问题   复合度量标准:宽带,延迟,可靠性,负载   CISCO使用100000000/带宽来得到该代价。   router igrp 1   redistribute ospf 1 metric 1 10000 255 1 1500   network x.x.0.0   或者   router igrp 1   redistribute ospf 1   redistribute static   default-metric 1 10000 255 1 1500   network x.x.0. 0   使用show ip route查看路由传播情况。   3.OSPF的再分布问题   当OSPF再分布时,它成为ASBR.   (1)OSPF没有将外部路由装入路由选择表中   原因:。 不能通过区域内或区域间路由获知转发地址   。 ABR滑产生类型4的汇总LSA   (2)ASBR没有通告被再分布的路由   原因:。 ASBR的配置中缺少subnets关键字   。 distribute-list out命令阻塞了这些路由   router ospf 1   redistribute rip subnets   network x.x.x.0 0.0.0.255 area 0   使用show ip ospf database external IP来查看   4.IS-IS再分布问题   (1)将静态路由再分布入IS-IS   router isis   redistribute static ip   使用show run和show isis database查看   (2)将外部静态路由加入为一个LS的IS-IS LSP   router isis   redistribute static ip metric-type external   5.BGP的再分布问题   在AS边界路由器上,外出路由通告影响进入的流量,而进入路由通告则影响外出流量。因此,外出和进入的通告应分开考虑。   (1)BGP发布进eigrp中   router eigrp 200   redistribute bgp 200 metric 10000 100 255 1 1500 passive-interface s0   network x.x.x.0   router bgp 200   network x.x.x.0   neighbor x.x.x.x remote-as 100   可以使用 show ip route和PING来检测   决对不要在一个面向internet的路由器上使用BGP到IGP的再分布。一个完整的internet路由选择表由 100000个前缀组成,一个IGP进程将会因处理这么多的路由而阻塞再分布一个完整的internet表乃至大部分的表都会不可避免的引起主网络崩溃。   (2)为了更多地控制被通告进入BGP邻居,可以使用静态路由。   向BGP邻居通告一条默认路由不会抑制更具体的路由。   如果只发送默认路由,路由器必须使用过滤器来抑制所有更具体的路由。   router bgp 100   network 0.0.0.0   neighbor x.x.x.x remote-as 300   neighbor x.x.x.x remote-as 200   neighbor x.x.x.x remote-as 100   neighbor x.x.x.x default-originate   neighbor x.x.x.x redistribute-list 1 out (这一句只是BGP路由的一种方法)   access-list 1 permit 0.0.0.0   access-list 1 deny an

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值