|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
对于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[0-9]*;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不是逛自由市场,选定版本就要静下心来学习.不要今天换版本明天要升级.这样对你没有好处。 |
|