愤怒的大鸟 发表于 2015-1-18 11:22:51

Linux编程:SWAP的罪与罚仓酷云

对于linux命令,一定要学会用man和info去查他们的解释;
说个案例:一台Apache服务器,因为其MaxClients参数设置过年夜,而且刚好又碰着会见量激增,了局内存被耗光,从而激发SWAP,进而负载爬升,终极招致宕机。
正所谓:SWAP,功能之年夜事,逝世生之地,生死之道,不成不察也。
哪些工具能够监测SWAP

最简单想到的就是free命令了,它指了然以后SWAP的利用情形:
shell>free-mtotalusedfreeSwap:341751137422801另外一个经常使用的是sar命令,它能列出体系在各个工夫的SWAP利用情形:
shell>sar-rkbswpfreekbswpused%swpusedkbswpcad233456441165057233.294656908233464521164976433.294656216233465561164966033.294650308233469321164928433.294649888233469921164922433.294648848不外free命令和sar命令显现的都不是及时数据,假如必要,可使用vmstat命令:
shell>vmstat1-----------memory----------------swap--swpdfreebuffcachesiso1164753212366430506471931680011647532123672305064719317200116475321257283050647193468001164753212537630506471934760011647532124508305068719362400每秒革新一次了局,在SWAP一栏里列出了相干数据,至于si和so的注释,大抵以下:


[*]si:Amountofmemoryswappedinfromdisk(/s).
[*]so:Amountofmemoryswappedtodisk(/s).
假如它们一向是零固然最好不外了,偶然不为零也没啥,糟的是一向不为零。
后面先容的办法,看到的都是SWAP的全体情形,但是假如我想检察究竟是哪些历程利用了SWAP,应当怎样操纵呢?这个成绩有点辣手,我们来研讨一下:
好动静是top命令能供应这个信息,不外缺省并没有显现,我们必要激活一下:

[*]翻开top;
[*]按「f」进当选择字段的界面;
[*]按「p」选择「SWAP」字段;
[*]按回车确认。
坏动静是top命令供应的SWAP信息只是一个实际值,大概更直白一点儿来讲它基本就是不成信的(在top里SWAP的盘算公式是:SWAP=VIRT-RES)。
BTW:比拟之下,top里的「nFLT」字段更有代价,它暗示PageFault的次数。
那究竟我们能不克不及猎取到历程的SWAP情形呢?别发急,看代码:
#!/bin/bashcd/procforpidin*;docommand=$(cat/proc/$pid/cmdline)swap=$(awkBEGIN{total=0}/Swap/{total+=$2}END{printtotal}/proc/$pid/smaps)if(($swap>0));thenif[["${head}"!="yes"]];thenecho-e"PIDtSWAPtCOMMAND"head="yes"fiecho-e"${pid}t${swap}t${command}"fidone申明:请利用root权限来运转此剧本。
哪些要素大概影响SWAP

内存不敷无疑会SWAP,但有些时分,即使看上往内存很丰裕,还大概会SWAP,这类征象被称为SWAPInsanity,祸首罪魁次要有以下几点:
Swappiness的丢失
实践上,当可用内存不敷时,体系有两个选择:一个是经由过程SWAP来开释内存,另外一个是删除Cache中的Page来开释内存。一个很罕见的例子是:当拷贝年夜文件的时分,经常会产生SWAP征象。这是由于拷贝文件的时分,体系会把文件内容在Cache中按Page来缓存,此时一旦可用内存不敷,体系便会偏向于经由过程SWAP来开释内存。
内核中的swappiness参数能够用来把持这类举动,缺省情形下,swappiness的值是60:
shell>sysctl-a|grepswappinessvm.swappiness=60它的寄义是:假如体系必要内存,有百分之六十的几率实行SWAP。晓得了这一点,我们很天然的会想到用上面的办法来下降实行SWAP的几率:
shell>echo"vm.swappiness=0">>/etc/sysctl.confshell>sysctl-p如许做切实其实能够下降实行SWAP的几率,但其实不意味着永久不会实行SWAP。
NUMA的咒骂
NUMA在MySQL社区有良多会商,这里未几说了,直击NUMA和SWAP的恩仇纠葛。
也许懂得一下NUMA最中心的numactl命令:
shell>numactl--hardwareavailable:2nodes(0-1)node0size:16131MBnode0free:100MBnode1size:16160MBnode1free:10MBnodedistances:node010:10201:2010能够看到体系有两个节点(实在就是两个物理CPU),它们各自分了16G内存,个中零号节点还剩100M内存,一号节点还剩10M内存。假想启动了一个必要11M内存的历程,体系把它分给了一号节点来实行,此时固然体系整体的可用内存年夜于该历程必要的内存,但由于一号节点自己残剩的可用内存不敷,以是仍旧大概会触发SWAP举动。
必要申明的一点事,numactl命令中看到的各节点残剩内存中时不包含Cache内存的,假如必要晓得,我们能够使用drop_caches参数先开释它:
shell>sysctlvm.drop_caches=1注:这步操纵大概会引发体系负载的震动。
另:怎样断定一个历程的节点及内存分派情形?收集上有现成的剧本。
假如要躲避NUMA对SWAP的影响,最复杂的办法就是在启动历程的时分禁用它:
shell>numactl--interleave=all...别的,内核参数zone_reclaim_mode一般也很主要,当某个节点可用内存不敷时,假如为0的话,那末体系会偏向于从远程节点分派内存;假如为1的话,那末体系会偏向于从当地节点接纳Cache内存。多半时分,Cache对功能很主要,以是0是一个更好的选择。
shell>echo"vm.zone_reclaim_mode=0">>/etc/sysctl.confshell>sysctl-p另:收集上有一些关于MySQL和SWAP的会商,关于了解SWAP有必定意义,保举:

RedHatCentOS等等.学习linux不是逛自由市场,选定版本就要静下心来学习.不要今天换版本明天要升级.这样对你没有好处。

老尸 发表于 2015-1-20 11:44:59

最好先搜寻一下论坛是否有您需要的文章。这样可以获得事半功倍的效果。

乐观 发表于 2015-1-29 07:01:09

下面笔者在论坛看到的一个好问题: “安装红旗4.0后,系统紫光输入法自带的双拼方案和我的习惯不一样,如何自定义双拼方案解决?谢谢?”这个问题很简练。

飘飘悠悠 发表于 2015-2-1 14:18:52

Linux是参照Unix思想设计的,理解掌握Linux必须按照Unix思维来进行。思想性的转变比暂时性的技术提高更有用,因为他能帮助你加快学习速度。

若相依 发表于 2015-2-7 06:29:00

我们自学,就这个循环的过程中,我们学习了基本操作,用vi,shell,模拟内存的分配过程等一些OS管理。

仓酷云 发表于 2015-2-10 20:49:39

说实话小时候没想过搞IT,也计算机了解也只是一些皮毛,至于什么UNIX,Linux,听过没见过,就更别说用过了。?

小妖女 发表于 2015-2-17 02:17:28

眼看这个学期的Linux课程已经告一段落了,我觉得有必要写一遍心得体会来总结一下这学期对着门课程的学习。

小女巫 发表于 2015-3-3 18:20:53

在学习的过程中,我们用的是VM虚拟机,开始时真的不真的该怎么去做,特别是我的是命令窗口界面,别人的是图形界面,我都不知道怎么调过来。

金色的骷髅 发表于 2015-3-3 20:20:25

在学习linux的工程中,linux学习方法有很多种,这里是小编的学习心得,给大家拿出来分享一下。

飘灵儿 发表于 2015-3-11 13:07:13

我们这一代90后,从小接触的是windows98,家里条件好的自己有电脑装的是2000,后来又有了XP,上大学时又有了win7。

因胸联盟 发表于 2015-3-18 11:56:34

永中office 2004增强版安装只需要默认安装即可使用并操作大多与win系统雷同,打印机的配置和管理,记录光盘等。

小魔女 发表于 2015-3-25 20:14:41

再次,Linux是用C语言编写的,我们有学习C语言的基础,读程序和编写代码方面存在的困难小一点,也是我们能较快掌握的原因之一。?
页: [1]
查看完整版本: Linux编程:SWAP的罪与罚仓酷云