{"id":2073,"date":"2012-09-15T09:59:44","date_gmt":"2012-09-15T01:59:44","guid":{"rendered":"https:\/\/kyle.ai\/blog\/?p=2073"},"modified":"2013-11-21T18:25:15","modified_gmt":"2013-11-21T10:25:15","slug":"linux-system-and-performance-monitoringio%e7%af%87","status":"publish","type":"post","link":"https:\/\/kyle.ai\/blog\/2073.html","title":{"rendered":"Linux System and Performance Monitoring(I\/O\u7bc7)"},"content":{"rendered":"<p>6.0 I\/O \u76d1\u63a7\u4ecb\u7ecd<\/p>\n<p>\u78c1\u76d8I\/O \u5b50\u7cfb\u7edf\u662fLinux \u7cfb\u7edf\u4e2d\u6700\u6162\u7684\u90e8\u5206.\u8fd9\u4e2a\u4e3b\u8981\u662f\u5f52\u4e8eCPU\u5230\u7269\u7406\u64cd\u4f5c\u78c1\u76d8\u4e4b\u95f4\u8ddd\u79bb(\u8bd1\u6ce8:\u76d8\u7247\u65cb\u8f6c\u4ee5\u53ca\u5bfb\u9053).\u5982\u679c\u62ff\u8bfb\u53d6\u78c1\u76d8\u548c\u5185\u5b58\u7684\u65f6\u95f4\u4f5c\u6bd4\u8f83\u5c31\u662f\u5206\u949f\u7ea7\u5230\u79d2\u7ea7,\u8fd9\u5c31\u50cf 7\u5929\u548c7\u5206\u949f\u7684\u533a\u522b.\u56e0\u6b64\u672c\u8d28\u4e0a,Linux \u5185\u6838\u5c31\u662f\u8981\u6700\u4f4e\u7a0b\u5ea6\u7684\u964d\u4f4eI\/O \u6570.\u672c\u7ae0\u5c06\u8bc9\u8ff0\u5185\u6838\u5728\u78c1\u76d8\u548c\u5185\u5b58\u4e4b\u95f4\u5904\u7406\u6570\u636e\u7684\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d,\u54ea\u4e9b\u5730\u65b9\u4f1a\u4ea7\u751fI\/O.<\/p>\n<p>6.1 \u8bfb\u548c\u5199\u6570\u636e \u2013 \u5185\u5b58\u9875<\/p>\n<p>Linux \u5185\u6838\u5c06\u786c\u76d8I\/O \u8fdb\u884c\u5206\u9875,\u591a\u6570Linux \u7cfb\u7edf\u7684\u9ed8\u8ba4\u9875\u5927\u5c0f\u4e3a4K.\u8bfb\u548c\u5199\u78c1\u76d8\u5757\u8fdb\u51fa\u5230\u5185\u5b58\u90fd\u4e3a4K \u9875\u5927\u5c0f.\u4f60\u53ef\u4ee5\u4f7f\u7528time \u8fd9\u4e2a\u547d\u4ee4\u52a0-v \u53c2\u6570,\u6765\u68c0\u67e5\u4f60\u7cfb\u7edf\u4e2d\u8bbe\u7f6e\u7684\u9875\u5927\u5c0f:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n#\/usr\/bin\/time -v date\r\n\r\nPage size (bytes): 4096\r\n<\/pre>\n<p>6.2 Major and Minor Page Faults(\u8bd1\u6ce8:\u4e3b\u8981\u9875\u9519\u8bef\u548c\u6b21\u8981\u9875\u9519\u8bef)<\/p>\n<p>Linux,\u7c7b\u4f3c\u591a\u6570\u7684UNIX \u7cfb\u7edf,\u4f7f\u7528\u4e00\u4e2a\u865a\u62df\u5185\u5b58\u5c42\u6765\u6620\u5c04\u786c\u4ef6\u5730\u5740\u7a7a\u95f4.\u5f53\u4e00\u4e2a\u8fdb\u7a0b\u88ab\u542f\u52a8,\u5185\u6838\u5148\u626b\u63cfCPU caches\u548c\u7269\u7406\u5185\u5b58.\u5982\u679c\u8fdb\u7a0b\u9700\u8981\u7684\u6570\u636e\u5728\u8fd92\u4e2a\u5730\u65b9\u90fd\u6ca1\u627e\u5230,\u5c31\u9700\u8981\u4ece\u78c1\u76d8\u4e0a\u8bfb\u53d6,\u6b64\u65f6\u5185\u6838\u8fc7\u7a0b\u5c31\u662fmajor page fault(MPF).MPF \u8981\u6c42\u78c1\u76d8\u5b50\u7cfb\u7edf\u68c0\u7d22\u9875\u5e76\u7f13\u5b58\u8fdbRAM.<\/p>\n<p>\u4e00\u65e6\u5185\u5b58\u9875\u88ab\u6620\u5c04\u8fdb\u5185\u5b58\u7684buffer cache(buff)\u4e2d,\u5185\u6838\u5c06\u5c1d\u8bd5\u4ece\u5185\u5b58\u4e2d\u8bfb\u53d6\u6216\u5199\u5165,\u6b64\u65f6\u5185\u6838\u8fc7\u7a0b\u5c31\u662fminor page fault(MnPF).\u4e0e\u5728\u78c1\u76d8\u4e0a\u64cd\u4f5c\u76f8\u6bd4,MnPF \u901a\u8fc7\u53cd\u590d\u4f7f\u7528\u5185\u5b58\u4e2d\u7684\u5185\u5b58\u9875\u5c31\u5927\u5927\u7684\u7f29\u77ed\u4e86\u5185\u6838\u65f6\u95f4.<br \/>\n\u4ee5\u4e0b\u7684\u4f8b\u5b50,\u4f7f\u7528time \u547d\u4ee4\u9a8c\u8bc1\u4e86,\u5f53\u8fdb\u7a0b\u542f\u52a8\u540e,MPF \u548c MnPF \u7684\u53d8\u5316\u60c5\u51b5.\u7b2c\u4e00\u6b21\u8fd0\u884c\u8fdb\u7a0b,MPF \u4f1a\u66f4\u591a:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n# \/usr\/bin\/time -v evolution\r\n\r\nMajor (requiring I\/O) page faults: 163\r\nMinor (reclaiming a frame) page faults: 5918\r\n<\/pre>\n<p>\u7b2c\u4e8c\u6b21\u518d\u8fd0\u884c\u65f6,\u5185\u6838\u5df2\u7ecf\u4e0d\u9700\u8981\u8fdb\u884cMPF\u4e86,\u56e0\u4e3a\u8fdb\u7a0b\u6240\u9700\u7684\u6570\u636e\u5df2\u7ecf\u5728\u5185\u5b58\u4e2d:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n# \/usr\/bin\/time -v evolution\r\n\r\nMajor (requiring I\/O) page faults: 0\r\nMinor (reclaiming a frame) page faults: 5581\r\n<\/pre>\n<p>6.3 The File Buffer Cache(\u8bd1\u6ce8:\u6587\u4ef6\u7f13\u5b58\u533a)<\/p>\n<p>\u6587\u4ef6\u7f13\u5b58\u533a\u5c31\u662f\u6307,\u5185\u6838\u5c06MPF \u8fc7\u7a0b\u6700\u5c0f\u5316,MnPF \u8fc7\u7a0b\u6700\u5927\u5316.\u968f\u7740\u7cfb\u7edf\u4e0d\u65ad\u7684\u4ea7\u751fI\/O,buffer cache\u4e5f\u5c06\u4e0d\u65ad\u7684\u589e\u52a0.\u76f4\u5230\u5185\u5b58\u4e0d\u591f,\u4ee5\u53ca\u7cfb\u7edf\u9700\u8981\u91ca\u653e\u8001\u7684\u5185\u5b58\u9875\u53bb\u7ed9\u5176\u4ed6\u7528\u6237\u8fdb\u7a0b\u4f7f\u7528\u65f6,\u7cfb\u7edf\u5c31\u4f1a\u4e22\u5f03\u8fd9\u4e9b\u5185\u5b58\u9875.\u7ed3\u679c\u662f,\u5f88\u591asa(\u8bd1\u6ce8:\u7cfb\u7edf\u7ba1\u7406\u5458)\u5bf9\u7cfb\u7edf\u4e2d\u8fc7\u5c11\u7684free memory(\u8bd1\u6ce8:\u7a7a\u95f2\u5185\u5b58)\u8868\u793a\u62c5\u5fc3,\u5b9e\u9645\u4e0a\u8fd9\u662f\u7cfb\u7edf\u66f4\u9ad8\u6548\u7684\u5728\u4f7f\u7528caches.<br \/>\n\u4ee5\u4e0b\u4f8b\u5b50,\u662f\u67e5\u770b\/proc\/meminfo \u6587\u4ef6:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n# cat \/proc\/meminfo\r\nMemTotal: 2075672 kB\r\nMemFree: 52528 kB\r\nBuffers: 24596 kB\r\nCached: 1766844 kB\r\n<\/pre>\n<p>\u53ef\u4ee5\u770b\u51fa,\u8fd9\u4e2a\u7cfb\u7edf\u603b\u8ba1\u67092GB (Memtotal)\u7684\u53ef\u7528\u5185\u5b58.\u5f53\u524d\u7684\u7a7a\u95f2\u5185\u5b58\u4e3a52MB (MemFree),\u670924 MB\u5185\u5b58\u88ab\u5206\u914d\u78c1\u76d8\u5199\u64cd\u4f5c(Buffers),\u8fd8\u67091.7 GB\u9875\u7528\u4e8e\u8bfb\u78c1\u76d8(Cached).<br \/>\n\u5185\u6838\u8fd9\u6837\u662f\u901a\u8fc7MnPF\u673a\u5236,\u800c\u4e0d\u4ee3\u8868\u6240\u6709\u7684\u9875\u90fd\u662f\u6765\u81ea\u78c1\u76d8.\u901a\u8fc7\u4ee5\u4e0a\u90e8\u5206,\u6211\u4eec\u4e0d\u53ef\u80fd\u786e\u8ba4\u7cfb\u7edf\u662f\u5426\u5904\u4e8e\u74f6\u9888\u4e2d.<\/p>\n<p>6.4 Type of Memory Pages<\/p>\n<p>\u5728Linux \u5185\u6838\u4e2d,memory pages\u67093\u79cd,\u5206\u522b\u662f:<\/p>\n<p>1,Read Pages \u2013 \u8fd9\u4e9b\u9875\u901a\u8fc7MPF \u4ece\u78c1\u76d8\u4e2d\u8bfb\u5165,\u800c\u4e14\u662f\u53ea\u8bfb.\u8fd9\u4e9b\u9875\u5b58\u5728\u4e8eBuffer Cache\u4e2d\u4ee5\u53ca\u5305\u62ec\u4e0d\u80fd\u591f\u4fee\u6539\u7684\u9759\u6001\u6587\u4ef6,\u4e8c\u8fdb\u5236\u6587\u4ef6,\u8fd8\u6709\u5e93\u6587\u4ef6.\u5f53\u5185\u6838\u9700\u8981\u5b83\u4eec\u65f6,\u5c06\u8bfb\u53d6\u5230\u5185\u5b58\u4e2d.\u5982\u679c\u5185\u5b58\u4e0d\u8db3,\u5185\u6838\u5c06\u91ca\u653e\u5b83\u4eec\u56de\u7a7a\u95f2\u5217\u8868\u4e2d.\u7a0b\u5e8f\u518d\u6b21\u8bf7\u6c42\u65f6,\u5219\u901a\u8fc7MPF \u518d\u6b21\u8bfb\u56de\u5185\u5b58.<br \/>\n2,Dirty Pages \u2013 \u8fd9\u4e9b\u9875\u662f\u5185\u6838\u5728\u5185\u5b58\u4e2d\u5df2\u7ecf\u88ab\u4fee\u6539\u8fc7\u7684\u6570\u636e\u9875.\u5f53\u8fd9\u4e9b\u9875\u9700\u8981\u540c\u6b65\u56de\u78c1\u76d8\u4e0a,\u7531pdflush \u8d1f\u8d23\u5199\u56de\u78c1\u76d8.\u5982\u679c\u5185\u5b58\u4e0d\u8db3,kswapd (\u4e0epdflush \u4e00\u8d77)\u5c06\u8fd9\u4e9b\u9875\u5199\u56de\u5230\u78c1\u76d8\u4e0a\u5e76\u91ca\u653e\u66f4\u591a\u7684\u5185\u5b58.<br \/>\n3,Anonymous Pages \u2013 \u8fd9\u4e9b\u9875\u5c5e\u4e8e\u67d0\u4e2a\u8fdb\u7a0b,\u4f46\u662f\u6ca1\u6709\u4efb\u4f55\u78c1\u76d8\u6587\u4ef6\u548c\u5b83\u4eec\u6709\u5173.\u4ed6\u4eec\u4e0d\u80fd\u548c\u540c\u6b65\u56de\u78c1\u76d8.\u5982\u679c\u5185\u5b58\u4e0d\u8db3,kswapd \u5c06\u4ed6\u4eec\u5199\u5165swap \u5206\u533a\u4e0a\u5e76\u91ca\u653e\u66f4\u591a\u7684\u5185\u5b58(\u201cswapping\u201d pages).<\/p>\n<p>6.5 Writing Data Pages Back to Disk<\/p>\n<p>\u5e94\u7528\u7a0b\u5e8f\u6709\u5f88\u591a\u9009\u62e9\u53ef\u4ee5\u5199\u810f\u9875\u56de\u78c1\u76d8\u4e0a,\u53ef\u901a\u8fc7I\/O \u8c03\u5ea6\u5668\u4f7f\u7528 fsync() \u6216 sync() \u8fd9\u6837\u7684\u7cfb\u7edf\u51fd\u6570\u6765\u5b9e\u73b0\u7acb\u5373\u5199\u56de.\u5982\u679c\u5e94\u7528\u7a0b\u5e8f\u6ca1\u6709\u8c03\u7528\u4ee5\u4e0a\u51fd\u6570,pdflush \u8fdb\u7a0b\u4f1a\u5b9a\u671f\u4e0e\u78c1\u76d8\u8fdb\u884c\u540c\u6b65.<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n# ps -ef | grep pdflush\r\nroot 186 6 0 18:04 ? 00:00:00 &#x5B;pdflush]\r\n<\/pre>\n<p>7.0 \u76d1\u63a7 I\/O<\/p>\n<p>\u5f53\u89c9\u5f97\u7cfb\u7edf\u4e2d\u51fa\u73b0\u4e86I\/O \u74f6\u9888\u65f6,\u53ef\u4ee5\u4f7f\u7528\u6807\u51c6\u7684\u76d1\u63a7\u8f6f\u4ef6\u6765\u67e5\u627e\u539f\u56e0.\u8fd9\u4e9b\u5de5\u5177\u5305\u62ec\u4e86top,vmstat,iostat,sar.\u5b83\u4eec\u7684\u8f93\u51fa\u7ed3\u679c\u4e00\u5c0f\u90e8\u5206\u662f\u5f88\u76f8\u4f3c,\u4e0d\u8fc7\u6bcf\u4e2a\u4e5f\u90fd\u63d0\u4f9b\u4e86\u5404\u81ea\u5bf9\u4e8e\u6027\u80fd\u4e0d\u540c\u65b9\u9762\u7684\u89e3\u91ca.\u4ee5\u4e0b\u7ae0\u8282\u5c31\u5c06\u8ba8\u8bba\u54ea\u4e9b\u60c5\u51b5\u4f1a\u5bfc\u81f4I\/O \u74f6\u9888\u7684\u51fa\u73b0.<\/p>\n<p>7.1 Calculating IO\u2019s Per Second(\u8bd1\u6ce8:IOPS \u7684\u8ba1\u7b97)<\/p>\n<p>\u6bcf\u4e2aI\/O \u8bf7\u6c42\u5230\u78c1\u76d8\u90fd\u9700\u8981\u82e5\u5e72\u65f6\u95f4.\u4e3b\u8981\u662f\u56e0\u4e3a\u78c1\u76d8\u7684\u76d8\u8fb9\u5fc5\u987b\u65cb\u8f6c,\u673a\u5934\u5fc5\u987b\u5bfb\u9053.\u78c1\u76d8\u7684\u65cb\u8f6c\u5e38\u5e38\u88ab\u79f0\u4e3a\u201drotational delay\u201d(RD),\u673a\u5934\u7684\u79fb\u52a8\u79f0\u4e3a\u201ddisk seek\u201d(DS).\u4e00\u4e2aI\/O \u8bf7\u6c42\u6240\u9700\u7684\u65f6\u95f4\u8ba1\u7b97\u5c31\u662fDS\u52a0\u4e0aRD.\u78c1\u76d8\u7684RD \u57fa\u4e8e\u8bbe\u5907\u81ea\u8eabRPM \u5355\u4f4d\u503c(\u8bd1\u6ce8:RPM \u662fRevolutions Perminute\u7684\u7f29\u5199,\u662f\u8f6c\/\u6bcf\u5206\u949f,\u4ee3\u8868\u4e86\u786c\u76d8\u7684\u8f6c\u901f).\u4e00\u4e2aRD \u5c31\u662f\u4e00\u4e2a\u76d8\u7247\u65cb\u8f6c\u7684\u534a\u5706.\u5982\u4f55\u8ba1\u7b97\u4e00\u4e2a10K RPM\u8bbe\u5907\u7684RD \u503c\u5462:<\/p>\n<p>1, 10000 RPM \/ 60 seconds (10000\/60 = 166 RPS)<br \/>\n2, \u8f6c\u6362\u4e3a 166\u5206\u4e4b1 \u7684\u503c(1\/166 = 0.006 seconds\/Rotation)<br \/>\n3, \u5355\u4f4d\u8f6c\u6362\u4e3a\u6beb\u79d2(6 MS\/Rotation)<br \/>\n4, \u65cb\u8f6c\u534a\u5706\u7684\u65f6\u95f4(6\/2 = 3MS) \u4e5f\u5c31\u662f RD<br \/>\n5, \u52a0\u4e0a\u5e73\u57473 MS \u7684\u5bfb\u9053\u65f6\u95f4 (3MS + 3MS = 6MS)<br \/>\n6, \u52a0\u4e0a2MS \u7684\u5ef6\u8fdf(6MS + 2MS = 8MS)<br \/>\n7, 1000 MS \/ 8 MS (1000\/8 = 125 IOPS)<\/p>\n<p>\u6bcf\u6b21\u5e94\u7528\u7a0b\u5e8f\u4ea7\u751f\u4e00\u4e2aI\/O,\u572810K RPM\u78c1\u76d8\u4e0a\u90fd\u8981\u82b1\u8d39\u5e73\u5747 8MS.\u5728\u8fd9\u4e2a\u56fa\u5b9a\u65f6\u95f4\u91cc,\u78c1\u76d8\u5c06\u5c3d\u53ef\u80fd\u4e14\u6709\u6548\u7387\u5728\u8fdb\u884c\u8bfb\u5199\u78c1\u76d8.IOPS \u53ef\u4ee5\u8ba1\u7b97\u51fa\u5927\u81f4\u7684I\/O \u8bf7\u6c42\u6570,10K RPM \u78c1\u76d8\u6709\u80fd\u529b\u63d0\u4f9b120-150 \u6b21IOPS.\u8bc4\u4f30IOPS \u7684\u6548\u80fd,\u53ef\u7528\u6bcf\u79d2\u8bfb\u5199I\/O \u5b57\u8282\u6570\u9664\u4ee5\u6bcf\u79d2\u8bfb\u5199IOPS \u6570\u5f97\u51fa.<\/p>\n<p>7.2 Random vs Sequential I\/O(\u8bd1\u6ce8:\u968f\u673a\/\u987a\u5e8f I\/O)<\/p>\n<p>per I\/O\u4ea7\u751f\u7684KB \u5b57\u8282\u6570\u662f\u4e0e\u7cfb\u7edf\u672c\u8eabworkload\u76f8\u5173\u7684,\u67092\u79cd\u4e0d\u540cworkload\u7684\u7c7b\u578b,\u5b83\u4eec\u662fsequential\u548crandom.<\/p>\n<p>7.2.1 Sequential I\/O(\u8bd1\u6ce8:\u987a\u5e8fIO)<\/p>\n<p>iostat \u547d\u4ee4\u63d0\u4f9b\u4fe1\u606f\u5305\u62ecIOPS \u548c\u6bcf\u4e2aI\/O \u6570\u636e\u5904\u7406\u7684\u603b\u989d.\u53ef\u4f7f\u7528iostat -x \u67e5\u770b.\u987a\u5e8f\u7684workload\u662f\u540c\u65f6\u8bfb\u987a\u5e8f\u8bf7\u6c42\u5927\u91cf\u7684\u6570\u636e.\u8fd9\u5305\u62ec\u7684\u5e94\u7528,\u6bd4\u5982\u6709\u5546\u4e1a\u6570\u636e\u5e93(database)\u5728\u6267\u884c\u5927\u91cf\u7684\u67e5\u8be2\u548c\u6d41\u5a92\u4f53\u670d\u52a1.\u5728\u8fd9\u4e2a workload \u4e2d,KB per I\/O \u7684\u6bd4\u7387\u5e94\u8be5\u662f\u5f88\u9ad8\u7684.Sequential workload \u662f\u53ef\u4ee5\u540c\u65f6\u5f88\u5feb\u7684\u79fb\u52a8\u5927\u91cf\u6570\u636e.\u5982\u679c\u6bcf\u4e2aI\/O \u90fd\u8282\u7701\u4e86\u65f6\u95f4,\u90a3\u5c31\u610f\u5473\u4e86\u80fd\u5e26\u6765\u66f4\u591a\u7684\u6570\u636e\u5904\u7406.<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n# iostat -x 1\r\navg-cpu: %user %nice %sys %idle\r\n0.00 0.00 57.1 4 42.86\r\nDevice: rrqm\/s wrqm\/s r\/s w\/s rsec\/s wsec\/s rkB\/s wkB\/s avgrq-sz avgqu-sz await svctm %util\r\n\/dev\/sda 0.00 12891.43 0.00 105.71 0.00 1 06080.00 0.00 53040.00 1003.46 1099.43 3442.43 26.49 280.00\r\n\/dev\/sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00\r\n\/dev\/sda2 0.00 12857.14 0.00 5.71 0.00 105782.86 0.00 52891.43 18512.00 559.14 780.00 490.00 280.00\r\n\/dev\/sda3 0.00 34.29 0.00 100.00 0.00 297.14 0.00 148.57 2.97 540.29 594.57 24.00 240.00\r\navg-cpu: %user %nice %sys %idle\r\n0.00 0.00 23.53 76.47\r\nDevice: rrqm\/s wrqm\/s r\/s w\/s rsec\/s wsec\/s rkB\/s wkB\/s avgrq-sz avgqu-sz await svctm %util\r\n\/dev\/sda 0.00 17320.59 0.00 102.94 0.00 142305.88 0.00 71152.94 1382.40 6975.29 952.29 28.57 294.12\r\n\/dev\/sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00\r\n\/dev\/sda2 0.00 16844.12 0.00 102.94 0.00 138352.94 0.00 69176.47 1344.00 6809.71 952.29 28.57 294.12\r\n\/dev\/sda3 0.00 476.47 0.00 0.00 0.00 952.94 0.00 1976.47 0.00 165.59 0.00 0.00 276.47\r\n<\/pre>\n<p>\u8bc4\u4f30IOPS \u7684\u6548\u80fd,\u53ef\u7528\u6bcf\u79d2\u8bfb\u5199I\/O \u5b57\u8282\u6570\u9664\u4ee5\u6bcf\u79d2\u8bfb\u5199IOPS \u6570\u5f97\u51fa,\u6bd4\u5982<br \/>\nrkB\/s \u9664\u4ee5 r\/s<br \/>\nwkB\/s \u9664\u4ee5 w\/s<br \/>\n53040\/105 = 505KB per I\/O<br \/>\n71152\/102 = 697KB per I\/O<br \/>\n\u5728\u4e0a\u9762\u4f8b\u5b50\u53ef\u770b\u51fa,\u6bcf\u6b21\u5faa\u73af\u4e0b,\/dev\/sda \u7684per I\/O \u90fd\u5728\u589e\u52a0.<\/p>\n<p>7.2.2 Random I\/O(\u8bd1\u6ce8:\u968f\u673aIO)<\/p>\n<p>Random\u7684worklaod\u73af\u5883\u4e0b,\u4e0d\u4f9d\u8d56\u4e8e\u6570\u636e\u5927\u5c0f\u7684\u591a\u5c11,\u66f4\u591a\u4f9d\u8d56\u7684\u662f\u78c1\u76d8\u7684IOPS \u6570.Web\u548cMail \u670d\u52a1\u5c31\u662f\u5178\u578b\u7684Random workload.I\/O \u8bf7\u6c42\u5185\u5bb9\u90fd\u5f88\u5c0f.Random workload\u662f\u540c\u65f6\u6bcf\u79d2\u4f1a\u6709\u66f4\u591a\u7684\u8bf7\u6c42\u6570\u4ea7\u751f.\u6240\u4ee5,\u78c1\u76d8\u7684IOPS \u6570\u662f\u5173\u952e.<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n# iostat -x 1\r\navg-cpu: %user %nice %sys %idle\r\n2.04 0.00 97.96 0.00\r\nDevice: rrqm\/s wrqm\/s r\/s w\/s rsec\/s wsec\/s rkB\/s wkB\/s avgrq-sz avgqu-sz await svctm %util\r\n\/dev\/sda 0.00 633.67 3.06 102.31 24.49 5281.63 12.24 2640.82 288.89 73.67 113.89 27.22 50.00\r\n\/dev\/sda1 0.00 5.10 0.00 2.04 0.00 57.14 0.00 28.57 28.00 1.12 55.00 55.00 11.22\r\n\/dev\/sda2 0.00 628.57 3.06 100.27 24.49 5224.49 12.24 2612.24 321.50 72.55 121.25 30.63 50.00\r\n\/dev\/sda3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00\r\navg-cpu: %user %nice %sys %idle\r\n2.15 0.00 97.85 0.00\r\nDevice: rrqm\/s wrqm\/s r\/s w\/s rsec\/s wsec\/s rkB\/s wkB\/s avgrq-sz avgqu-sz await svctm %util\r\n\/dev\/sda 0.00 41.94 6.45 130.98 51.61 352.69 25.81 3176.34 19.79 2.90 286.32 7.37 15.05\r\n\/dev\/sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00\r\n\/dev\/sda2 0.00 41.94 4.30 130.98 34.41 352.69 17.20 3176.34 21.18 2.90 320.00 8.24 15.05\r\n\/dev\/sda3 0.00 0.00 2.15 0.00 17.20 0.00 8.60 0.00 8.00 0.00 0.00 0.00 0.00\r\n<\/pre>\n<p>\u8ba1\u7b97\u65b9\u5f0f\u548c\u4e4b\u524d\u7684\u516c\u5f0f\u4e00\u81f4:<br \/>\n2640\/102 = 23KB per I\/O<br \/>\n3176\/130 = 24KB per I\/O<br \/>\n(\u8bd1\u6ce8:\u5bf9\u4e8e\u987a\u5e8fI\/O\u6765\u8bf4,\u4e3b\u8981\u662f\u8003\u8651\u8bfb\u53d6\u5927\u91cf\u6570\u636e\u7684\u80fd\u529b\u5373KB per request.\u5bf9\u4e8e\u968f\u673aI\/O\u7cfb\u7edf,\u66f4\u9700\u8981\u8003\u8651\u7684\u662fIOPS\u503c)<\/p>\n<p>7.3 When Virtual Memory Kills I\/O<\/p>\n<p>\u5982\u679c\u7cfb\u7edf\u6ca1\u6709\u8db3\u591f\u7684RAM \u54cd\u5e94\u6240\u6709\u7684\u8bf7\u6c42,\u5c31\u4f1a\u4f7f\u7528\u5230SWAP device.\u5c31\u50cf\u4f7f\u7528\u6587\u4ef6\u7cfb\u7edfI\/O,\u4f7f\u7528SWAP device \u4ee3\u4ef7\u4e5f\u5f88\u5927.\u5982\u679c\u7cfb\u7edf\u5df2\u7ecf\u6ca1\u6709\u7269\u7406\u5185\u5b58\u53ef\u7528,\u90a3\u5c31\u90fd\u5728SWAP disk\u4e0a\u521b\u5efa\u5f88\u591a\u5f88\u591a\u7684\u5185\u5b58\u5206\u9875,\u5982\u679c\u540c\u4e00\u6587\u4ef6\u7cfb\u7edf\u7684\u6570\u636e\u90fd\u5728\u5c1d\u8bd5\u8bbf\u95eeSWAP device,\u90a3\u7cfb\u7edf\u5c06\u9047\u5230I\/O \u74f6\u9888.\u6700\u7ec8\u5bfc\u81f4\u7cfb\u7edf\u6027\u80fd\u7684\u5168\u9762\u5d29\u6e83.\u5982\u679c\u5185\u5b58\u9875\u4e0d\u80fd\u591f\u53ca\u65f6\u8bfb\u6216\u5199\u78c1\u76d8,\u5b83\u4eec\u5c31\u4e00\u76f4\u4fdd\u7559\u5728RAM\u4e2d.\u5982\u679c\u4fdd\u7559\u65f6\u95f4\u592a\u4e45,\u5185\u6838\u53c8\u5fc5\u987b\u91ca\u653e\u5185\u5b58\u7a7a\u95f4.\u95ee\u9898\u6765\u4e86,I\/O \u64cd\u4f5c\u90fd\u88ab\u963b\u585e\u4f4f\u4e86,\u4ec0\u4e48\u90fd\u6ca1\u505a\u5c31\u88ab\u7ed3\u675f\u4e86,\u4e0d\u53ef\u907f\u514d\u5730\u5c31\u51fa\u73b0kernel panic\u548csystem crash.<br \/>\n\u4e0b\u9762\u7684vmstat \u793a\u8303\u4e86\u4e00\u4e2a\u5185\u5b58\u4e0d\u8db3\u60c5\u51b5\u4e0b\u7684\u7cfb\u7edf:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nprocs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----\r\nr b swpd free buff cache si so bi bo in cs us sy id wa\r\n17 0 1250 3248 45820 1488472 30 132 992 0 2437 7657 23 50 0 23\r\n11 0 1376 3256 45820 1488888 57 245 416 0 2391 7173 10 90 0 0\r\n12 0 1582 1688 45828 1490228 63 131 1348 76 2432 7315 10 90 0 10\r\n12 2 3981 1848 45468 1489824 185 56 2300 68 2478 9149 15 12 0 73\r\n14 2 10385 2400 44484 1489732 0 87 1112 20 2515 11620 0 12 0 88\r\n14 2 12671 2280 43644 1488816 76 51 1812 204 2546 11407 20 45 0 35\r\n<\/pre>\n<p>\u8fd9\u4e2a\u7ed3\u679c\u53ef\u770b\u51fa,\u5927\u91cf\u7684\u8bfb\u8bf7\u6c42\u56de\u5185\u5b58(bi),\u5bfc\u81f4\u4e86\u7a7a\u95f2\u5185\u5b58\u5728\u4e0d\u65ad\u7684\u51cf\u5c11(free).\u8fd9\u5c31\u4f7f\u5f97\u7cfb\u7edf\u5199\u5165swap device\u7684\u5757\u6570\u76ee(so)\u548cswap \u7a7a\u95f4(swpd)\u5728\u4e0d\u65ad\u589e\u52a0.\u540c\u65f6\u770b\u5230CPU WIO time(wa)\u767e\u5206\u6bd4\u5f88\u5927.\u8fd9\u8868\u660eI\/O \u8bf7\u6c42\u5df2\u7ecf\u5bfc\u81f4CPU \u5f00\u59cb\u6548\u7387\u4f4e\u4e0b.<br \/>\n\u8981\u770bswaping \u5bf9\u78c1\u76d8\u7684\u5f71\u54cd,\u53ef\u4f7f\u7528iostat \u68c0\u67e5swap \u5206\u533a<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n# iostat -x 1\r\navg-cpu: %user %nice %sys %idle\r\n0.00 0.00 100.00 0.00\r\nDevice: rrqm\/s wrqm\/s r\/s w\/s rsec\/s wsec\/s rkB\/s wkB\/s avgrq-sz avgqu-sz await svctm %util\r\n\/dev\/sda 0.00 1766.67 4866.67 1700.00 38933.33 31200.00 19466.67 15600.00 10.68 6526.67 100.56 5.08 3333.33\r\n\/dev\/sda1 0.00 933.33 0.00 0.00 0.00 7733.33 0.00 3866.67 0.00 20.00 2145.07 7.37 200.00\r\n\/dev\/sda2 0.00 0.00 4833.33 0.00 38666.67 533.33 19333.33 266.67 8.11 373.33 8.07 6.90 87.00\r\n\/dev\/sda3 0.00 833.33 33.33 1700.00 266.67 22933.33 133.33 11466.67 13.38 6133.33 358.46 11.35 1966.67\r\n<\/pre>\n<p>\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d,swap device(\/dev\/sda1) \u548c file system device(\/dev\/sda3)\u5728\u4e92\u76f8\u4f5c\u7528\u4e8eI\/O. \u5176\u4e2d\u4efb\u4e00\u4e2a\u4f1a\u6709\u5f88\u9ad8\u5199\u8bf7\u6c42(w\/s),\u4e5f\u4f1a\u6709\u5f88\u9ad8wait time(await),\u6216\u8005\u8f83\u4f4e\u7684\u670d\u52a1\u65f6\u95f4\u6bd4\u7387(svctm).\u8fd9\u8868\u660e2\u4e2a\u5206\u533a\u4e4b\u95f4\u4e92\u6709\u8054\u7cfb,\u4e92\u6709\u5f71\u54cd.<\/p>\n<p>7.4 \u7ed3\u8bba<\/p>\n<p>I\/O \u6027\u80fd\u76d1\u63a7\u5305\u542b\u4e86\u4ee5\u4e0b\u51e0\u70b9:<br \/>\n1,\u5f53CPU \u6709\u7b49\u5f85I\/O \u60c5\u51b5\u65f6,\u90a3\u8bf4\u660e\u78c1\u76d8\u5904\u4e8e\u8d85\u8d1f\u8377\u72b6\u6001.<br \/>\n2,\u8ba1\u7b97\u4f60\u7684\u78c1\u76d8\u80fd\u591f\u627f\u53d7\u591a\u5927\u7684IOPS \u6570.<br \/>\n3,\u786e\u5b9a\u4f60\u7684\u5e94\u7528\u662f\u5c5e\u4e8e\u968f\u673a\u6216\u8005\u987a\u5e8f\u8bfb\u53d6\u78c1\u76d8.<br \/>\n4,\u76d1\u63a7\u78c1\u76d8\u6162\u9700\u8981\u6bd4\u8f83wait time(await) \u548c service time(svctm).<br \/>\n5,\u76d1\u63a7swap \u548c\u7cfb\u7edf\u5206\u533a,\u8981\u786e\u4fddvirtual memory\u4e0d\u662f\u6587\u4ef6\u7cfb\u7edfI\/O \u7684\u74f6\u9888.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>6.0 I\/O \u76d1\u63a7\u4ecb\u7ecd \u78c1\u76d8I\/O \u5b50\u7cfb\u7edf\u662fLinux \u7cfb\u7edf\u4e2d\u6700\u6162\u7684\u90e8\u5206.\u8fd9\u4e2a\u4e3b\u8981\u662f\u5f52\u4e8eCPU\u5230\u7269\u7406\u64cd\u4f5c\u78c1\u76d8 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-2073","post","type-post","status-publish","format-standard","hentry","category-skill"],"_links":{"self":[{"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/posts\/2073","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/comments?post=2073"}],"version-history":[{"count":3,"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/posts\/2073\/revisions"}],"predecessor-version":[{"id":2075,"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/posts\/2073\/revisions\/2075"}],"wp:attachment":[{"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/media?parent=2073"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/categories?post=2073"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/tags?post=2073"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}