不信邪的我设置了8G交换内存

在网上看到很多文章都在说交换内存的设置公式,然而我却不明白为什么要这么设置。交换内存是用于当物理内存不足时,将硬盘一部分存储当作内存来使用,众所周知,内存速度和硬盘速度不是一个量级的。当交换内存远大于物理内存时,“交换”将消耗大量的IO,最终导致系统成不可用状态。

交换内存设置表

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
RAM(MB) No hibernation With Hibernation Maximum
 256     256              512               512
 512     512             1024              1024
1024    1024             2048              2048

RAM(GB) No hibernation  With Hibernation  Maximum
  1      1                2                   2
  2      1                3                   4
  3      2                5                   6
  4      2                6                   8
  5      2                7                  10
  6      2                8                  12
  8      3               11                  16
 12      3               15                  24
 16      4               20                  32
 24      5               29                  48
 32      6               38                  64
 64      8               72                 128
128     11              139                 256

# 服务器配置信息

我有一台服务器,是 (2C,1G) 的,充当玩具,性能对我来说,不太卡顿即可。我将虚拟内存扩充到8G,我测试下,极限8G,服务器功能是否还正常。

# 阶段一

主要是启动docker容器,目前已经部署了6个

1
docker run -d -p 3006:3000  metabase/metabase
1
2
3
4
work@dodov:~$ free -h
              total        used        free      shared  buff/cache   available
Mem:          981Mi       829Mi        63Mi       1.0Mi        88Mi        43Mi
Swap:         8.0Gi       3.6Gi       4.4Gi
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
work@dodov:~$ vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0 3768788  63056   1768 105964  201  133   409   257  212  102  2  1 96  0  0
 0  0 3769948  79620   1456  86660 40374 3102 40550  3102 8772 18201  9 28 37 23  4
 1  0 3769692  78044   1468  87848  180    0   794    26  604 1120  3  1 93  1  2
 3  0 3769436  77320   1468  88496  180    0   462     0  614 1119  3  2 92  1  3
 1  2 3769068  85424    488  76440 35714 1980 38084  1980 8914 19889  7 28 40 21  4
 0  0 3773860  72068    432  76732 33324 4628 45138  4732 9686 19808 14 31 28 24  3
 0  0 3773348  66600    528  82452  412    0  3322     0  814 1410  3  2 92  2  2
 0  0 3780272  74500    508  87972 1318 3978  7880  4018 1457 2445  6  4 83  3  4
 2  1 3781112  69772    644  87836 15334 2006 17140  2010 4221 9283  4 14 67 10  5
 1  0 3801412  67120    608  76812 38858 11870 39434 12020 11162 23234 10 35  1 46  8
 0  0 3806960  71364    664  95416 3282 4286 14936  4334 2038 3575  4  9 78  7  3
 0  0 3806192  61568    664 100552  974    0  3538     0  902 1734  4  3 90  2  1
 0  0 3812808  79968    664  98404  512 3562  1190  3676  773 1342  2  3 93  1  1
 0  0 3812040  75684    664  98412 1370    0  1374     0  807 1758  1  3 93  1  2
 0  0 3811016  70424    664  98400 1452    0  1452     0  898 1848  3  2 93  1  1
 0  0 3810504  69636    680  98664  258    0   372    52  703 1411  2  1 96  0  1
 0  0 3810504  68660   1212  98732   50    0   348     0  555 1029  3  1 93  0  3
 0  0 3810504  68628   1220  98720   22    0    22    26  510 1025  2  1 96  0  1
 0  0 3810248  68156   1220  98784  156    0   168     0  548 1104  2  1 95  0  2
 0  0 3809992  68124   1220  98780  104    0   104     0  557 1140  2  1 97  0  1
 0  0 3809480  66896   1236  98788  572    0   572    42  803 1526  2  2 95  1  1
 0  1 3809224  65164   1236  98828  474    0   488     0  631 1260  3  1 94  1  1
 0  0 3808712  64092   1244  99268  254    0   464    28  597 1197  3  1 94  0  2
 0  0 3808456  63368   1244  99232  274    0   274     0  533 1071  2  1 96  0  1
 0  0 3808200  62076   1244  99268  596    0   596     0  709 1548  2  1 95  1  1
 0  0 3810984  74556   1248  96444 1340 1870  1486  1906 1035 1989  3  4 88  4  1
 0  0 3810728  66804   2504 102852  358    0  4174     0  748 1350  3  3 92  1  2
 0  0 3809960  65480   2512 102904  494    0   494    32  643 1242  2  1 96  0  1
 0  0 3809704  65260   2512 103116  150    0   266    86  545 1080  2  1 96  0  1
 0  0 3809704  64220   2512 103332  214    0   314     0  601 1201  1  2 96  0  1

# 阶段二

再加一个,在服务器的后台查到IOPS读已经达到了50Mbps/s了

1
docker run -d -p 3007:3000  metabase/metabase
1
2
3
4
work@dodov:~$ free -h
              total        used        free      shared  buff/cache   available
Mem:          981Mi       812Mi        68Mi       1.0Mi        99Mi        51Mi
Swap:         8.0Gi       4.0Gi       4.0Gi

# 阶段三

已经启动到第十个了

1
2
3
4
work@dodov:~$ free -h
              total        used        free      shared  buff/cache   available
Mem:          981Mi       786Mi       100Mi       1.0Mi        93Mi        82Mi
Swap:         8.0Gi       5.0Gi       3.0Gi

貌似有点快扛不住了

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
work@dodov:~$ vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  0 5119212  60124   2908  73884  260  185   499   314   12  146  2  1 96  1  0
 1  0 5155220  75324   3376  94224 1520 19544 14760 19606 4138 3414  4 13 75  7  2
 0  0 5154452  74096   3908  94660  298    0   792     0  764 1530  2  1 96  0  1
 0  0 5177536  78392   3668  97028 3446 14728  6424 14766 2743 3810 15 12 63 10  1
 2  2 5152432  73284   2396  81296 24644 11270 26372 11480 9063 15522  6 24 57 12  2
 0  0 5139892  61932   1664  81592 11460 4734 16178  4804 4186 7736  6 14 70  9  1
 1  0 5177700  94216   1916  91476  356 19256 10052 19432 2545 2223  3 10 82  3  1
 5  0 5147428  68192   1792  90704 17006  382 18850   446 4116 9416  4 14 74  6  1
 1  0 5144804  63024   1796  94800 11590 9828 15352  9946 5561 8727  9 15 53 21  2
 0  0 5144292  62332   1796  94996  336    0   424     0  795 1585  3  2 94  0  1
 0  0 5143012  59720   2200  95744  586    0  1154     0  832 1743  3  1 94  1  2
 1  0 5147044  71256   1952  88356 1784 3676  3400  3884 1604 2822  4  6 85  3  2
 1  0 5141924  62976   1952  90736 2628    0  3812     0 1623 2930  3  3 90  3  1
 0  0 5167424  89004   1920  84096 2070 14930  3112 15092 2454 3112  3 10 82  5  1
 0  0 5166656  88248   1920  84428  406    0   570     0  807 1586  3  2 93  0  1
 0  1 5151296  69852   1920  85524 7648    0  8192     0 2820 6528  3  9 51 34  2
 1  1 5159880  79004   1724  82588 8130 12100  9970 12162 4509 7477  6 12 37 43  2
 2  1 5149128  66436   1724  82548 6292    0  6292     0 3330 4899  3  8 43 43  2
 0  0 5145112  67056   1592  79028 9530 5800 10330  6002 3360 5822  3 10 63 22  2
 1  1 5143576  65292   1668  78976  836    0   872     0  970 1944  3  2 94  1  1
 1  0 5151016  73140   1656  78032 1886 5508  2514  5630 1812 2829  3  5 87  4  2
 0  0 5149992  66336   1672  85960  406    0  4370    70 1045 1946  2  2 92  1  2

# 阶段四

扛不住了扛不住了,cpu经常性的飙100%,系统也卡顿严重了。

1
2
3
4
work@dodov:~$ free -h
              total        used        free      shared  buff/cache   available
Mem:          981Mi       799Mi        80Mi       1.0Mi       101Mi        60Mi
Swap:         8.0Gi       5.8Gi       2.2Gi
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
work@dodov:~$ vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
15  9 6038828  69424   2468  98080  274  202   527   334   20  157  2  1 95  1  0
 9 15 6025196  64804   2392  90328 22348 15200 33226 19556 12588 19423 10 32  0 56  2
 0 16 6023244  63616   1344  89936 12070 11056 16376 11968 9198 13661  7 19  0 72  2
 7 19 6026188  62840    928  90600 13742 15552 18348 18354 9982 15065 12 21  0 66  1
21  6 6036792  70836    744  87876 14026 18614 20084 20208 12157 18162  9 24  0 65  2
 1 17 6058080  72168   1092  96804 13226 23642 24766 23990 14056 23795 11 29  0 59  1
 4 12 6071048  76688   1824  93440 12736 18720 15984 18800 11871 22269  9 23  0 65  2

# 结论

收工了。结论是8G确实太高了,当交换内存为将近6G时,系统已经达到了几乎一个极限的状态,正常的指令已经卡顿到不能获取CPU去执行。接下来,我要将交换内存变更成了4G,在这一区间,各方面能达到一个均衡的状态,况且5G内存也足够使用了,正常状态下用不了那么多。

Licensed under CC BY-NC-SA 4.0