(转)Linux性能调优之虚拟内存篇

简单地说,虚拟内存就是硬盘中的一块区域,它用来存放内存里使用频率不高的页面文件。好处是为了提高内存的利用率 - 让使用频率高的页面文件活动在内存区域中,提高CPU对数据操作的速度。在Linux中,这个区域叫做swap,一般大小应设置为物理内存的2倍。

   vm.swappiness是Linux内核的一个参数,范围是0~100。它表示实际内存和虚拟内存区域进行数据交换的倾向性大小,数值越大表示倾向性越大,即交换的页面文件越多,反之亦然。一般默认值为60。可用'cat /proc/sys/vm/swappiness’查看。

   这个值应该设置成多大才能提高Linux的性能呢?这个当然要由具体的环境来定了。我在一台CentOS机器上,分别把值设为0,60,100,下面是运行'vmstat -S M 5’的三次数据报告。(vmstat命令是用来查看虚拟内存状况的,参数-S M表示以M为单位,5表示每5秒钟产生一次报告。)这里主要关注bi,bo和wa这三个值,bi代表每秒钟从硬盘读入数据的块数(因为硬盘是块设备),bo表示每秒钟写入硬盘数据的块数,wa表示CPU等待IO设备就绪的时间。
  
当值为0时:
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ 
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st 
0  2      0   1277     16   6340    0    0     7     3    1    1  0  2 91  6  0 
2  0      0   1277     16   6340    0    0     9   778 1203 3901  0  5 78 17  0 
0  1      0   1276     16   6340    0    0     4   510 1094 3855  0  1 96  2  0 
0  0      0   1276     16   6340    0    0    13   294 1113 3896  0  3 89  7  0 
2  0      0   1276     16   6340    0    0    12   462 1122 3954  0  2 96  2  0 
0  0      0   1276     16   6340    0    0     8     6 1027 3915  0  1 98  0  0 
0  2      0   1276     16   6340    0    0    19   982 1178 3894  0  2 79 19  0 
0  0      0   1276     16   6340    0    0    10   666 1195 3904  0  3 70 27  0 
0  0      0   1276     16   6340    0    0     7    10 1031 3955  0  2 98  0  0 
0  0      0   1276     16   6340    0    0    15     9 1031 3902  0  5 95  0  0 
2  2      0   1275     16   6341    0    0     7  1420 1275 3930  0  2 67 32  0 
0  0      0   1275     16   6341    0    0     6   290 1125 3939  0  1 89 10  0 
0  0      0   1275     16   6341    0    0    11    18 1029 3975  0  2 98  0  0 
0  0      0   1275     16   6341    0    0    26    22 1037 3984  0  1 98  1  0 
0  0      0   1275     16   6341    0    0     5    18 1027 3892  0  2 97  0  0 
0  0      0   1275     16   6341    0    0     6    10 1029 3878  0  1 98  0  0 
0  2      0   1275     16   6341    0    0     6  1106 1191 3935  0  1 81 18  0 
1  2      0   1275     16   6341    0    0    18  1121 1245 3870  0  1 61 38  0 
0  0      0   1275     16   6341    0    0    14   121 1086 3924  0  2 94  4  0 
0  2      0   1274     16   6341    0    0    12  1264 1245 3925  0  1 73 25  0 
1  0      0   1274     16   6342    0    0     8   777 1208 3897  0  4 74 22  0 
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      0   1274     16   6342    0    0     8   267 1076 3870  0  5 95  0  0 
0  0      0   1274     16   6342    0    0     6   391 1089 3856  0  2 98  0  0 
0  0      0   1274     16   6342    0    0    10     0 1033 3893  0  1 98  0  0 
2  0      0   1274     16   6342    0    0     5     0 1026 3904  0  2 98  0  0 
0  2      0   1274     16   6342    0    0     5  1016 1193 3907  0  2 82 16  0 
0  0      0   1274     16   6342    0    0     4   203 1092 3895  0  3 90  7  0 
1  3      0   1274     16   6342    0    0     6  1198 1243 3910  0  2 75 23  0 
2  0      0   1274     16   6342    0    0     4    81 1062 3974  0  1 95  3  0 
1  0      0   1274     16   6342    0    0    14    13 1029 3907  0  1 98  0  0 
0  2      0   1274     16   6342    0    0    11  1231 1228 3960  0  4 71 24  0 
0  0      0   1274     16   6342    0    0    10   222 1102 3971  0  2 84 13  0 
0  0      0   1273     16   6343    0    0     6     0 1032 3954  0  2 98  0  0 
0  3      0   1273     16   6343    0    0     6  1411 1314 4007  0  3 69 28  0 
0  0      0   1272     16   6343    0    0    14   386 1157 4162  0  2 91  7  0 
1  0      0   1272     16   6343    0    0    14   810 1170 3921  0  1 89 10  0 
2  0      0   1272     16   6343    0    0     5   566 1137 3884  0  1 92  6  0 
0  0      0   1272     16   6343    0    0    10   265 1073 3938  0  2 98  0  0 
0  0      0   1272     16   6343    0    0    54   802 1196 4131  0  7 83  9  0 
0  0      0   1272     16   6344    0    0     7     7 1046 3939  0  2 98  0  0 
0  0      0   1272     16   6344    0    0     4   943 1206 3840  0  1 86 12  0 
2  0      0   1272     16   6344    0    0     9    38 1033 3891  0  1 99  0  0
当值为60时:
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ 
r  b   swpd   free   buff  cache   si   so   bi    bo   in   cs us sy id wa st 
0  1      0   1268     17   6347    0    0     7     3    1    1  0  2 91  6  0 
0  0      0   1267     17   6347    0    0     7   526 1163 3875  0  2 92  5  0 
0  0      0   1267     17   6347    0    0     8     4 1025 3934  0  1 98  0  0 
2  0      0   1267     17   6347    0    0     6    17 1032 3917  0  1 98  0  0 
0  0      0   1267     17   6348    0    0     9    34 1036 3909  0  2 98  0  0 
1  0      0   1267     17   6348    0    0     9    16 1033 3990  0  1 98  0  0 
0  1      0   1267     17   6348    0    0     6  1172 1195 3936  0  3 83 14  0 
0  0      0   1266     17   6348    0    0    12   958 1252 3988  0  3 64 33  0 
1  0      0   1266     17   6348    0    0    32   372 1096 3875  0  1 97  2  0 
0  0      0   1266     17   6348    0    0     7     4 1034 3838  0  1 98  0  0 
0  0      0   1266     17   6348    0    0    13    18 1030 3925  0  2 98  0  0 
0  1      0   1266     17   6348    0    0     4  1100 1200 3862  0  2 83 15  0 
0  0      0   1266     17   6348    0    0     4   350 1139 3921  0  2 88 10  0 
0  0      0   1266     17   6348    0    0     6     0 1028 3814  0  2 97  0  0 
1  0      0   1266     17   6349    0    0    10   769 1179 3886  0  2 83 15  0 
0  0      0   1266     17   6349    0    0     7   411 1100 4004  0  1 96  3  0 
0  1      0   1266     17   6349    0    0    10   578 1118 3915  0  2 94  5  0 
0  0      0   1266     17   6349    0    0    26    85 1077 3865  0  1 92  7  0 
0  0      0   1266     17   6349    0    0     6    18 1029 3879  0  1 98  0  0 
0  2      0   1265     17   6349    0    0    10   658 1116 3963  0  1 92  6  0 
0  0      0   1265     17   6349    0    0    10   798 1212 3901  0  3 71 27  0 
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ 
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st 
1  0      0   1265     17   6349    0    0    10   245 1077 3900  0  1 98  1  0 
0  0      0   1264     17   6350    0    0    37    13 1044 3925  0  2 97  1  0 
0  0      0   1264     17   6350    0    0     6   848 1187 3892  0  2 83 15  0 
0  3      0   1264     17   6350    0    0     6   577 1119 3920  0  1 93  5  0 
1  0      0   1264     17   6350    0    0     4    84 1062 3890  0  1 96  2  0 
0  0      0   1264     17   6350    0    0    10    18 1034 3824  0  2 97  0  0 
0  0      0   1264     17   6350    0    0     6     0 1025 3931  0  1 98  0  0 
0  1      0   1264     17   6350    0    0    10   621 1110 3891  0  2 94  4  0 
1  0      0   1264     17   6350    0    0     8   466 1144 3855  0  2 77 21  0 
0  0      0   1264     17   6350    0    0     8     8 1031 3916  0  1 98  0  0 
1  0      0   1264     17   6350    0    0     8    12 1028 3914  0  1 98  0  0 
1  2      0   1263     17   6351    0    0    10   929 1182 3962  0  3 85 12  0 
2  1      0   1263     17   6351    0    0    10  1089 1275 3988  0  2 58 40  0 
0  0      0   1263     17   6351    0    0    11   358 1142 3954  0  2 88 10  0 
2  0      0   1263     17   6351    0    0     6     0 1026 3853  0  1 99  0  0 
0  0      0   1263     17   6351    0    0     6     0 1029 3990  0  1 98  0  0 
1  0      0   1263     17   6351    0    0     6    11 1029 3856  0  1 98  0  0 
2  1      0   1263     17   6351    0    0     7  1276 1204 3885  0  3 80 18  0 
1  0      0   1263     17   6351    0    0    14   514 1156 3849  0  2 77 21  0 
0  1      0   1251     17   6353    0    0   393   736 1234 4059  2  2 85 11  0
当值为100时:
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ 
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st 
0  6      0   1202     18   6411    0    0     7     3    1    0  0  2 91  6  0 
0  6      0   1201     18   6411    0    0    66  1153 1189 3604  0  3 45 53  0 
1  3      0   1200     18   6412    0    0   189   930 1226 8164  1  8 49 41  0 
0  6      0   1200     18   6412    0    0    44  1134 1261 3937  0  2 53 45  0 
0  4      0   1200     18   6413    0    0    98  1118 1229 3868  0  2 46 52  0 
2  3      0   1200     18   6413    0    0    45  1245 1251 3798  0  2 49 49  0 
1  4      0   1199     18   6413    0    0    74   922 1218 3853  0  2 53 45  0 
1  5      0   1198     18   6415    0    0   194  1084 1225 4919  0  4 51 44  0 
0  3      0   1198     18   6415    0    0    52   930 1192 3577  0  3 51 45  0 
1  0      0   1197     18   6416    0    0   147   831 1222 3995  0 13 51 36  0 
1  1      0   1197     18   6416    0    0    48  3240 1256 4557  1  5 46 48  0 
0  2      0   1196     18   6417    0    0    38  3730 1267 4536  0  5 53 42  0 
1  2      0   1195     18   6417    0    0    42  3336 1238 4048  0  3 51 45  0 
1  4      0   1195     18   6418    0    0    50  2759 1207 4237  1  5 52 42  0 
0  7      0   1195     18   6418    0    0    48  2201 1229 4138  0  4 41 54  0 
2  3      0   1194     19   6420    0    0    28  2360 1241 3913  0  2 53 44  0 
0  4      0   1193     19   6420    0    0    63  3812 1209 4344  1  5 46 48  0 
0  4      0   1193     19   6421    0    0   120  3942 1199 4452  1  5 43 52  0 
0  3      0   1192     19   6421    0    0    38  2963 1231 4272  0  4 45 51  0 
0  4      0   1191     19   6421    0    0    37  2784 1202 4373  1  5 49 46  0 
1  4      0   1191     19   6421    0    0    24  2558 1242 3909  0  2 54 43  0 
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ 
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st 
0  5      0   1191     19   6422    0    0    36  1774 1212 4009  0  4 47 50  0 
0  2      0   1191     19   6422    0    0    29  4292 1208 4479  0  4 48 47  0 
0  4      0   1191     19   6422    0    0    44  3392 1204 4705  1  5 45 49  0 
1  2      0   1190     19   6423    0    0    56  3950 1250 4541  1  5 55 40  0 
0  2      0   1190     19   6423    0    0    67   877 1198 3515  0  2 54 44  0 
1  2      0   1189     19   6423    0    0    67   928 1201 3589  0  1 57 41  0 
1  3      0   1189     19   6424    0    0    69  1488 1190 3569  0  2 50 49  0 
0  3      0   1189     19   6424    0    0    61  2230 1228 3828  0  2 53 44  0 
1  6      0   1189     19   6424    0    0    30  2662 1275 4186  0  3 38 58  0 
3  2      0   1190     19   6424    0    0    22  1932 1274 4297  0 26 32 42  0 
0  4      0   1190     19   6425    0    0    56  1692 1289 4160  0 10 46 44  0 
1  0      0   1188     19   6427    0    0   412   795 1216 4795  0 13 56 31  0 
0  2      0   1188     19   6427    0    0   127  1854 1298 4400  0 13 52 35  0 
0  5      0   1187     19   6428    0    0    34  6174 1250 4808  0 11 45 44  0 
0  3      0   1187     19   6428    0    0   110  1285 1218 3507  0  1 52 46  0 
0  1      0   1185     19   6430    0    0   306   938 1215 3890  0  2 59 40  0 
1  3      0   1185     19   6431    0    0    52  3722 1207 4013  0  2 57 41  0 
0  4      0   1185     19   6431    0    0    17  9450 1205 5760  1  9 41 50  0 
1  2      0   1184     19   6431    0    0    16  7072 1188 4330  0  4 55 41  0 
2  4      0   1184     19   6431    0    0    20  7046 1241 5521  1  8 48 44  0 
1  3      0   1183     19   6432    0    0    46  7037 1190 4488  0  8 37 54  0

   发现什么了吗?很明显当值为100时,wa基本为50左右的值,这表示50%的CPU时间都在等待IO设备就绪(大好的CPU资源就这样被浪费了!)现在你明白瓶颈在哪里了吧?对,就是硬盘。说明我实验的这台机器硬盘IO的处理能力是最影响性能的了。那么该怎么解决呢?当然了,换个转速更快的硬盘当然可以,还有呢?增加内存有可能也可以。增加了内存以后,再把swappiness的值设小点,以减少硬盘IO的操作。内存够大时,无论页面文件的使用频率是高还是低都放在内存里,无须使用虚拟内存。

   但是在这个例子中,swpd的值始终为0,这表示没有虚拟文件被使用。这说明内存容量是足够的,即使再增加内存,作用也不大。最好的办法就是更换硬盘了。

   如何改变swapiness的值?你可以运行'echo 数值 > /proc/sys/vm/swapiness’ 或者 'sysctl –w vm.swappiness = 数值' 来修改内核中的实时参数。如果想机器在重启之后仍然保持这个数值的话,就需要在'/etc/sysctl.conf’文件中加上'vm.swappiness = 数值' 这一行。
posted @ 2016-06-07 08:49  海上浪子  阅读(1078)  评论(0编辑  收藏  举报