内存计算,Swap使用分析

内存计算,Swap使用分析

大意内部存款和储蓄器 + 占用的swap = 空闲物理内部存款和储蓄器 + Memory buffer + Disk Cache +
使用掉的驻留内部存款和储蓄器

Linux操作系统质量剖判入眼包括磁盘IO、CPU、内部存款和储蓄器以及互连网流量,而那边根本针对系统内存的行使进程景况做个深入分析。
一、怎么样查看系统内部存款和储蓄器使用意况
1、依照常用命令查看系统内部存款和储蓄器使用概略
free  -g
                  total      used      free    shared    buffers   
cached
Mem:            31          31          0          0          0         
3
-/+ buffers/cache:        28          3
Swap:          15            7          7
(依照free命令能够看来,系统利用了28G的大要内存,3G的剩余内部存款和储蓄器,在那之中swap总15G,已选取7G)

 

4G + 53MB = 17MB + 46MB + 3.2GB + ?

top  (f p M)
top – 14:18:50 up 1280 days,  7:15,  1 user,  load average: 1.05, 1.25,
1.12
Tasks: 229 total,  1 running, 227 sleeping,  0 stopped,  1 zombie
Cpu(s):  0.2%us,  0.1%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si, 
0.0%st
Mem:  32949816k total, 32848840k used,  100976k free,  169308k buffers
Swap: 16771776k total,  8384616k used,  8387160k free,  3276360k
cached

1、

因此使用掉的驻留内部存款和储蓄器大致有700-800MB

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  SWAP DATA
COMMAND                                                     
12428 mysql    15  0 22.2g  20g 3964 S  3.3 66.5  91946:06 1.3g  22g
mysqld                                                       
22840 cyldj    15  0 9059m 6.7g 9012 S  0.0 21.5  22:05.42 2.1g 8.7g
DBAgent                                                     
28689 root      15  0  358m  30m 3036 S  0.0  0.1 187:37.41 328m 137m
salt-minion                                                 
30768 cyldj    21  0  462m  10m 1908 S  0.0  0.0  10:44.60 451m 373m
java                                                         
22567 root      15  0 86004 3292 2576 S  0.0  0.0  0:00.01  80m  688
sshd                                                         
28690 root      20  0  267m 2188  704 S  0.0  0.0  0:00.00 264m  47m
salt-minion                                                 
  661 root      18  0 16340 1836 1632 S  0.0  0.0  0:47.42  14m  308
zabbix_agentd                                               
22569 root      15  0 68156 1520 1188 S  0.0  0.0  0:00.02  65m  408
bash                                                         
 2901 root      18  0  197m 1336  884 S  0.0  0.0  4:04.57 196m 174m
AxisAgent                                                   
11236 root      15  0 60672 1324  760 S  0.0  0.0  2:01.21  57m  608
sshd                                                         
  665 root      15  0 18432 1260  992 S  0.0  0.0  11:39.82  16m  308
zabbix_agentd                                               
  662 root      15  0 18432 1256  992 S  0.0  0.0  11:43.36  16m  308
zabbix_agentd
(依据top命令能够看来采纳内部存款和储蓄器最大的历程是mysql进度,其次是dbagent,个中dbagent使用的置换分区很多)

大概你会平常蒙受一个经文的swap大小设置难点(举个例子狗血的面试题)。

再一同你top出来那三个经过的驻留内部存款和储蓄器数量,应该是八九不离十的。

nmon (m)
图片 1
nmon下载地址:
 
(RHEL5)

(RHEL6)
(通过nmon能够看出内部存款和储蓄器的事无巨细分配景况,当中总内存为32177.6 MB,总swap
16378.7 MB ,空闲93.4 MB,可回收3188.2+166.5
MB,已选用交流分区7273.6MB,已运用的位移数量大小为30099.9MB,能够被换到出内部存款和储蓄器的多少大小为1590.7 
MB)

无数人多会说内部存款和储蓄器的2倍、、

从您的操作系统的习性数据来看,物理内部存款和储蓄器还没事的很,大部分轮廓内存被操作系统用做disk
cache,大概你的种类IO依旧稍微有一点点往往的。swap也侵吞了几许,表达操作系统曾经出现过短暂的内部存款和储蓄器吃紧的场合,把一些闲置进度换成了swap上
去了,而那个闲置进度向来也从没再被应用到过,所以间招待在swap里面未有出去过。

2、遵照系统监察和控制查看系统内部存储器使用状态

而是个人以为一般来说 swap 不要设置太大,最佳不用赶上4G。

图片 2

图片 3

 

(近7天的内部存款和储蓄器使用状态)
3、查看钦定进度的连串内部存款和储蓄器使用消息
cat /proc/22840/statm
#virt    res    shr  text lib data dt  
2319113 1768037 2253 3836 0 2292997 0
(上述是翻开dbagent的内部存款和储蓄器使用新闻,在那之中单位是页数,所以要看系统页大小4K,第一列是虚构内部存款和储蓄器2319153页,第二列是驻留内部存储器1768037页,第三列是共享内部存储器2253页,进度独占内存大小为res-shr)
getconf  PAGESIZE
4096
awk ‘/^Swap:/ {SWAP+=$2}END{print SWAP”
KB”}’ /proc/${pid}/smap

for i in `cd /proc;ls
|grep “^[0-9]”|awk ‘ $0 >100’` ;do awk ‘/Swap:/{a=a+$2}END{print
‘”$i”‘,a/1024″M”}’ /proc/$i/smaps ;done |sort -k2nr

(上述命令能够查阅过程虚构内存使用意况)
cat /proc/22840/status |grep
Vm

VmPeak:  9341632 kB
VmSize:  9276452 kB
VmLck:        0 kB
VmHWM:  7074296 kB
VmRSS:  7073540 kB
VmData:  9171904 kB
VmStk:        84 kB
VmExe:    15344 kB
VmLib:      4728 kB
VmPTE:    15596 kB
(上述命令能够查阅钦定进程的内部存储器使用情况VmSize表示虚构内存大小,Vm奥德赛SS表示驻留内部存款和储蓄器大小)
二、综合分析MYSQL数据库内部存款和储蓄器使用状态 sh show_mem_usage.sh
大局内部存款和储蓄器大小:18592.00 MB
单线程最大内部存款和储蓄器:25.18 MB
最大线程占用内部存款和储蓄器: 8815.62 MB
正史最大线程占用内部存款和储蓄器: 5213.81 MB
Innodb Buffer Pool使用率: 99.00%
从mysql的内部存款和储蓄器使用和总的物理内部存储器使用来看,服务器的内部存款和储蓄器使用已经基本达到规定的规范上限(mysql驻留内部存款和储蓄器大概是21G,dbagent差不离为7G,物理总内部存款和储蓄器为31G,缓存了3G,大致有2G左右的非活动区内存),当mysql进程、dbagent使用抢先5G内部存款和储蓄器,物理内存远远不足,就能够利用到了swap分区。
三、什么情况下会选取swap分区
1、物理内部存款和储蓄器确实非常不足用的情事下,会使用到swap分区。
2、物理内部存款和储蓄器还会有丰硕的内部存款和储蓄器使用,举例cache,buffer的剩余非常多的景况下采用了swap分区
四、使用swap分区扩充
假定有丰盛的大要内部存款和储蓄器,照旧使用了swap分区,可以从以下几下边查看为何选用了swap分区
1、swap分区比例调治
cat /etc/sysctl.conf  |grep swap   
vm.swappiness=0
安装为0表示优先最大限度的运用物理内部存款和储蓄器缓存多少,而不是磁盘作为分区,值越大越不便利物理内部存款和储蓄器的足够利用
2、numa陷阱

2、

图片 4图片 5

经过申请内部存储器不足时,开掘一些进度占用空闲内部存储器:
swap out :
os   mem–> swap

 

当被swap out的经过从闲暇状态转换为索要利用内部存储器状态,开采内部存款和储蓄器不足:
swap in  :
os  swap –> mem

为了抓牢cpu和内部存款和储蓄器的数量访谈速度、并发度,设计了numa架构,但要是numa的内部存款和储蓄器分配政策不客观,那么将会严重影响到内部存款和储蓄器的利用,特别是对大内部存款和储蓄器块使用的数据库服务器。
#numactl –hardware   
available: 2 nodes (0-1)
node 0 size: 16160 MB
node 0 free: 15 MB
node 1 size: 16131 MB
node 1 free: 78 MB
node distances:
node  0  1
  0:  10  20
  1:  20  10
(上述命令能够查阅各类node节点的物理内部存款和储蓄器分配情形,能够看出两节点的内部存款和储蓄器分配比例基本平均,如若node0节点free和和node1的free值相差十分的大,表明分配政策存在难点,一点都不小恐怕会推动swap使用,而物理内部存款和储蓄器空闲的情景)
也足以透过翻看numastat查看numa的miss和hit比例来特别认可
#numastat
                          node0          node1
numa_hit            39150779957    38736256884
numa_miss            2658848763      8851827358
numa_foreign          8851827296      2658848763
interleave_hit        122652306      137287417
local_node          39096884744    38598664497
other_node            2712743976      8989419745
3、消除方案
(1)启用大页管理
(2)关闭numa
***BIOS关闭NUMA
***早先水源关闭:
vi /boot/grub/grub.conf
kernel /boot/vmlinuz-2.6.18-128.1.16.0.1.el5 root=LABEL=DBSYS ro
bootarea=dbsys rhgb quiet console=ttyS0,115200n8 console=tty1
crashkernel=128M@16M numa=off
重启操作系统,通过cat /proc/cmdline和numactl –hardware查看是还是不是关闭
(3)调度基础参数
基础参数:zone_reclaim_mode,要是为0的话,那么系统会偏向于从其余节点分配内部存款和储蓄器,假使是1表示系统会侧向于从本地节点回收Cache内存非常多时候
              vm.swappiness=0

echo 0 > /proc/sys/vm/zone_reclaim_mode ; echo
“vm.zone_reclaim_mode = 0” >> /etc/sysctl.conf
(4)调节基础参数
Mysql可以调动相关参数、交叉运维方式来革新numa,比如numactl
–interleave=all  /etc/init.d/mysql start
localalloc规定进度从当前node上呼吁分配内部存款和储蓄器;
preferred相比宽松地钦定了三个引入的node来获得内部存款和储蓄器,即便被推荐的node上尚未丰盛内部存款和储蓄器,进度能够尝试别的node。
membind能够钦命若干个node,进程只可以从那个钦赐的node上呼吁分配内部存款和储蓄器。
interleave规定进程从钦定的若干个node上以昂Cora奇骏(Round 罗布in
轮询调解)算法交织地呼吁分配内部存款和储蓄器。

通过vmstat命令能够看出swap out ,swap in (so,si) 的事态:

#NUMA support

 图片 6

numa_interleave = 1
innodb_buffer_pool_populate = 1
flush_caches=1

据悉概念可见,一般在内部存款和储蓄器丰裕的动静下是不应有多量的 si,so的

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图