





{"id":6058,"date":"2024-04-03T15:20:31","date_gmt":"2024-04-03T07:20:31","guid":{"rendered":"http:\/\/www.killtest.hk\/?p=6058"},"modified":"2024-04-03T15:20:31","modified_gmt":"2024-04-03T07:20:31","slug":"linux-%e7%b3%bb%e7%b5%b1%e4%b9%8b-oom-%e8%a7%a3%e6%9e%90","status":"publish","type":"post","link":"https:\/\/www.killtest.hk\/index.php\/killtest\/linux-%e7%b3%bb%e7%b5%b1%e4%b9%8b-oom-%e8%a7%a3%e6%9e%90\/","title":{"rendered":"Linux \u7cfb\u7d71\u4e4b OOM \u89e3\u6790"},"content":{"rendered":"<p>Luga Lee twt\u4f01\u4e1aIT\u793e\u533a<br \/>\n\u3010\u6458\u8981\u3011\u57fa\u65bc VM \u74b0\u5883\u6240\u90e8\u7f72\u7684 Spring Boot \u61c9\u7528\u670d\u52d9\uff0c\u904b\u884c\u904e\u7a0b\u4e2d\u5167\u5b58\u5229\u7528\u5f80\u5f80\u9054\u5230 90% \u751a\u81f3\u4ee5\u4e0a\uff0c\u672c\u6587\u5617\u8a66\u5c0d\u6b64\u985e\u5728\u5be6\u969b\u696d\u52d9\u5834\u666f\u4e2d\u5167\u5b58\u8868\u73fe\u7684\u6d3b\u52d5\u73fe\u8c61\u53ca\u80cc\u5f8c\u539f\u56e0\u9032\u884c\u5206\u6790\u3002<br \/>\n\u3010\u4f5c\u8005\u3011\u674e\u5091\uff0c\u5c08\u6ce8\u65bcJava\u865b\u64ec\u6a5f\u5668\u6280\u8853\u3001\u96f2\u7aef\u539f\u751f\u6280\u8853\u9818\u57df\u7684\u63a2\u7d22\u8207\u7814\u7a76\uff0c\u500b\u4eba\u5927\u773e\u865f\u300c\u67b6\u69cb\u9a5b\u7ad9\u300d\u3002<\/p>\n<p>\u5728\u5be6\u969b\u7684\u696d\u52d9\u5834\u666f\u4e2d\uff0c\u6709\u6c92\u6709\u767c\u73fe\u9019\u6a23\u4e00\u7a2e\u5834\u666f\uff1a\u57fa\u65bcVM \u74b0\u5883\u4e0a\u9762\u6240\u90e8\u7f72\u7684Spring Boot \u61c9\u7528\u670d\u52d9\uff0c\u5f80\u5f80\u5728\u904b\u884c\u904e\u7a0b\u4e2d\u5c07\u5167\u5b58\u5229\u7528\u7684\u8db3\u5920\u201c\u7325\u7463\u201d\uff0c\u5e38\u5e38\u9054\u523090% \u751a\u81f3\u4ee5\u4e0a\uff0c\u6b64\u6642 \uff0c\u5f88\u5927\u4e00\u90e8\u5206\u5925\u4f34\u5c31\u958b\u59cb\u300c\u53eb\u300d\u4e86\u3002 \u66f0\uff1a\u9818\u5c0e\uff0c\u8a18\u61b6\u4e0d\u5920\u4e86\uff0c\u8d95\u7dca\u64f4\u5bb9\uff01 \uff01 \uff01 \uff08\u6b64\u523b\uff0c\u6709\u5927\u4f6c\u80af\u5b9a\u5728\u60f3\uff1a\u64f4\u4f60\u59b9\uff0c\u6574\u5929\u641e\u9019\u4e9b\u6c92\u7528\u7684\uff5e\uff09<\/p>\n<p>\u90a3\u500b\u50bb\u5b50\u662f\u4e0d\u662f\u760b\u4e86\uff1f \u4e0d\u77e5\u9053\u8eab\u70ba\u6240\u8b02\u7684\u300c\u6280\u8853\u300d\u4eba\u54e1\uff0c\u5927\u5bb6\u662f\u5982\u4f55\u9762\u5c0d\u7684\uff0c\u5982\u4f55\u89e3\u6c7a\uff1f \u672c\u6587\u5c07\u805a\u7126\u65bc <a href=\"https:\/\/www.killtest.net\/LPIC-1\/101-500.asp\">Linux<\/a> \u8a18\u61b6\u9ad4\u7d50\u69cb\u3001\u8a18\u61b6\u9ad4\u5206\u6790\u4ee5\u53ca OOM killer \u7b49 3 \u500b\u9762\u5411\u4ee5\u53ca\u7b46\u8005\u591a\u5e74\u7684\u5be6\u52d9\u7d93\u9a57\u7e3d\u7d50\u4f86\u9032\u884c\u89e3\u6790\u3002<\/p>\n<p>\u8a18\u61b6\u9ad4\u7d50\u69cb<\/p>\n<p>\u5f9e\u5b8f\u89c0\u89d2\u5ea6\u800c\u8a00\uff0c\u8a18\u61b6\u9ad4\u7ba1\u7406\u7cfb\u7d71\u662f\u4f5c\u696d\u7cfb\u7d71\u6700\u91cd\u8981\u7684\u90e8\u5206\u4e4b\u4e00\u3002 \u5728\u8a18\u61b6\u9ad4\u7ba1\u7406\u7684\u7cfb\u7d71\u547c\u53eb\u65b9\u5f0f\uff0c\u4e8b\u5be6\u4e0a\uff0c\u57fa\u65bc POSIX \u4e26\u6c92\u6709\u7d66\u8a18\u61b6\u9ad4\u7ba1\u7406\u6307\u5b9a\u4efb\u4f55\u7684\u7cfb\u7d71\u547c\u53eb\u3002 \u7136\u800c\uff0cLinux \u537b\u6709\u81ea\u5df1\u7684\u8a18\u61b6\u9ad4\u7cfb\u7d71\u8abf\u7528\uff0c\u4e3b\u8981\u4fc2\u7d71\u8abf\u7528\u5982\u4e0b\uff1a<\/p>\n<p>\u7cfb\u7d71\u547c\u53eb \u63cf\u8ff0<br \/>\ns = brk(addr) \u6539\u8b8a\u8cc7\u6599\u6bb5\u5927\u5c0f<br \/>\na = mmap(addr,len,prot,flags,fd,offset) \u9032\u884c\u6620\u5c04<br \/>\ns = unmap(addr,len) \u53d6\u6d88\u6620\u5c04<br \/>\n1\u3001brk \u900f\u904e\u7d66\u51fa\u8d85\u904e\u8cc7\u6599\u6bb5\u4e4b\u5916\u7684\u7b2c\u4e00\u500b\u4f4d\u5143\u7d44\u4f4d\u5740\u4f86\u6307\u5b9a\u8cc7\u6599\u6bb5\u7684\u5927\u5c0f\u3002 \u5982\u679c\u65b0\u7684\u503c\u8981\u6bd4\u539f\u4f86\u7684\u5927\uff0c\u90a3\u9ebc\u8cc7\u6599\u5340\u5c31\u6703\u8b8a\u5f97\u8d8a\u4f86\u8d8a\u5927\uff0c\u53cd\u4e4b\u6703\u8d8a\u4f86\u8d8a\u5c0f\u3002<\/p>\n<p>2\u3001mmap \u548c unmap \u7cfb\u7d71\u547c\u53eb\u6703\u63a7\u5236\u6620\u5c04\u6a94\u3002 mmp \u7684\u7b2c\u4e00\u500b\u53c3\u6578 addr \u6c7a\u5b9a\u4e86\u6a94\u6848\u5c0d\u6620\u7684\u4f4d\u5740\u3002 \u5b83\u5fc5\u9808\u662f\u9801\u9762\u5927\u5c0f\u7684\u500d\u6578\u3002 \u5982\u679c\u53c3\u6578\u662f 0\uff0c\u7cfb\u7d71\u6703\u6307\u6d3e\u4f4d\u5740\u4e26\u50b3\u56de a\u3002 \u7b2c\u4e8c\u500b\u53c3\u6578\u662f\u9577\u5ea6\uff0c\u5b83\u544a\u8a34\u4e86\u9700\u8981\u6620\u5c04\u591a\u5c11\u4f4d\u5143\u7d44\u3002 \u5b83\u4e5f\u662f\u9801\u9762\u5927\u5c0f\u7684\u500d\u6578\u3002 prot \u6c7a\u5b9a\u4e86\u6620\u5c04\u6a94\u7684\u4fdd\u8b77\u4f4d\uff0c\u4fdd\u8b77\u4f4d\u53ef\u4ee5\u6a19\u8a18\u70ba \u53ef\u8b80\u3001\u53ef\u5beb\u3001\u53ef\u57f7\u884c\u6216\u9019\u4e9b\u7684\u7d50\u5408\u3002 \u7b2c\u56db\u500b\u53c3\u6578 flags \u80fd\u5920\u63a7\u88fd\u6a94\u6848\u662f\u79c1\u6709\u7684\u9084\u662f\u53ef\u8b80\u7684\u4ee5\u53ca addr \u662f\u5fc5\u9808\u7684\u9084\u662f\u53ea\u662f\u9032\u884c\u63d0\u793a\u3002 \u7b2c\u4e94\u500b\u53c3\u6578 fd \u662f\u8981\u5c0d\u61c9\u7684\u6a94\u6848\u63cf\u8ff0\u5b50\u3002 \u53ea\u6709\u958b\u555f\u7684\u6a94\u6848\u662f\u53ef\u4ee5\u88ab\u6620\u5c04\u7684\uff0c\u56e0\u6b64\u5982\u679c\u60f3\u8981\u9032\u884c\u6a94\u6848\u6620\u5c04\uff0c\u5fc5\u9808\u958b\u555f\u6a94\u6848\uff1b\u6700\u5f8c\u4e00\u500b\u53c3\u6578 offset \u6703\u6307\u793a\u6a94\u6848\u5f9e\u4f55\u6642\u958b\u59cb\uff0c\u4e0d\u4e00\u5b9a\u6bcf\u6b21\u90fd\u8981\u5f9e\u96f6\u958b\u59cb\u3002<\/p>\n<p>\u91dd\u5c0d Linux \u8a18\u61b6\u9ad4\u7ba1\u7406\u53ca\u5be6\u73fe\uff0c\u5176\u5be6\u5176\u6d89\u53ca\u7684\u9762\u8f03\u5ee3\uff0c\u8f03\u70ba\u8907\u96dc\uff0c\u5f9e\u96fb\u8166\u65e9\u671f\u958b\u59cb\uff0c\u6211\u5011\u5728\u5be6\u969b\u7684\u696d\u52d9\u5834\u666f\u4e2d\u6240\u4f7f\u7528\u7684\u8a18\u61b6\u9ad4\u5f80\u5f80\u90fd\u8981\u6bd4\u7cfb\u7d71\u4e2d\u5be6\u969b\u5b58\u5728\u7684\u8a18\u61b6\u9ad4\u591a\u3002 \u70ba\u6b64\uff0c\u8a18\u61b6\u9ad4\u5206\u914d\u7b56\u7565\u514b\u670d\u4e86\u9019\u500b\u9650\u5236\uff0c\u800c\u5176\u4e2d\u6700\u6709\u540d\u7684\u5c31\u662f\u5f15\u5165\uff1a \u865b\u64ec\u8a18\u61b6\u9ad4(Virtual Memory)\u3002 \u900f\u904e\u5728\u591a\u500b\u7af6\u722d\u7684\u9032\u7a0b\u4e4b\u9593\u5171\u4eab\u865b\u64ec\u5167\u5b58\uff0c\u865b\u64ec\u5167\u5b58\u5f97\u4ee5\u8b93\u7cfb\u7d71\u6709\u66f4\u591a\u7684\u5167\u5b58\uff0c\u4ee5\u65b9\u4fbf\u7dad\u8b77\u7cfb\u7d71\u8cc7\u6e90\u7684\u5206\u914d\u3002 \u5148\u4f86\u5f35\u7e3d\u6982\u89bd\u5716\uff0c\u5177\u9ad4\u5982\u4e0b\u5716\u6240\u793a\uff1a<br \/>\n<a href=\"http:\/\/www.killtest.hk\/index.php\/killtest\/linux-%e7%b3%bb%e7%b5%b1%e4%b9%8b-oom-%e8%a7%a3%e6%9e%90\/attachment\/640-12\/\" rel=\"attachment wp-att-6059\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.killtest.hk\/wp-content\/uploads\/2024\/04\/640.jpg\" alt=\"\" width=\"1080\" height=\"998\" class=\"alignleft size-full wp-image-6059\" srcset=\"https:\/\/www.killtest.hk\/wp-content\/uploads\/2024\/04\/640.jpg 1080w, https:\/\/www.killtest.hk\/wp-content\/uploads\/2024\/04\/640-300x277.jpg 300w, https:\/\/www.killtest.hk\/wp-content\/uploads\/2024\/04\/640-768x710.jpg 768w, https:\/\/www.killtest.hk\/wp-content\/uploads\/2024\/04\/640-1024x946.jpg 1024w\" sizes=\"auto, (max-width: 1080px) 100vw, 1080px\" \/><\/a><br \/>\nLinux \u5167\u5b58\uff0c\u901a\u5e38\u88ab\u8a8d\u70ba\u6307\u7684\u662f\u201c\u7269\u7406\u5167\u5b58\u201d\uff0c\u7136\u800c\uff0c\u53ea\u6709\u5167\u6838\u624d\u53ef\u4ee5\u76f4\u63a5\u8a2a\u554f\u7269\u7406\u5167\u5b58\uff0c\u9032\u7a0b\u9700\u8981\u8a2a\u554f\u5167\u5b58\uff0cLinux \u5167\u6838\u5247\u9700\u8981\u70ba\u6bcf\u500b\u9032\u7a0b\u63d0\u4f9b\u4e00\u500b\u7368\u7acb\u7684\u865b\u64ec\u5730\u5740\u7a7a\u9593\uff0c\u8a2a\u554f\u7684\u662f \u865b\u64ec\u8a18\u61b6\u9ad4\u3002<\/p>\n<p>\u901a\u5e38\u800c\u8a00\uff0c\u865b\u64ec\u8a18\u61b6\u9ad4\u7a7a\u9593\u7684\u5167\u90e8\u88ab\u5283\u5206\u70ba\u6838\u5fc3\u7a7a\u9593\u548c\u4f7f\u7528\u8005\u7a7a\u9593\uff1a<\/p>\n<p>1.\u9032\u7a0b\u5728\u7528\u6236\u614b\uff0c\u53ea\u80fd\u5b58\u53d6\u7528\u6236\u7a7a\u9593\u5167\u5b58<\/p>\n<p>2.\u884c\u7a0b\u9032\u5165\u5167\u6838\u614b\u624d\u80fd\u5b58\u53d6\u6838\u5fc3\u7a7a\u9593\u5167\u5b58<\/p>\n<p>3.\u6bcf\u500b\u884c\u7a0b\u90fd\u5305\u542b\u5167\u6838\u7a7a\u9593\uff0c\u4f46\u9019\u4e9b\u5167\u6838\u7a7a\u9593\u90fd\u95dc\u806f\u76f8\u540c\u7684\u5be6\u9ad4\u5167\u5b58<\/p>\n<p>\u800c\u91dd\u5c0d\u8a18\u61b6\u9ad4\u6620\u5c04\uff0c\u5176\u4e3b\u8981\u5c07\u865b\u64ec\u8a18\u61b6\u9ad4\u4f4d\u5740\u6620\u5c04\u5230\u5be6\u9ad4\u8a18\u61b6\u9ad4\u4f4d\u5740\uff0c\u70ba\u4e86\u5b8c\u6210\u8a18\u61b6\u9ad4\u6620\u5c04\u3002 \u6838\u5fc3\u6bcf\u500b\u9032\u7a0b\u90fd\u7dad\u8b77\u4e86\u4e00\u5f35\u9801\u8868\uff0c\u8a18\u9304\u865b\u64ec\u4f4d\u5740\u548c\u5be6\u9ad4\u4f4d\u5740\u7684\u6620\u5c04\u95dc\u4fc2\uff0c\u9801\u8868\u5be6\u969b\u5132\u5b58\u5728CPU \u7684\u8a18\u61b6\u9ad4\u7ba1\u7406\u55ae\u5143 MMU\uff0c\u9019\u6a23\u8655\u7406\u5668\u5c31\u53ef\u4ee5\u76f4\u63a5\u900f\u904e\u786c\u9ad4\u627e\u51fa\u8981\u5b58\u53d6\u7684\u8a18\u61b6\u9ad4\u3002<\/p>\n<p>\u518d\u4f86\u4e00\u5f35\u5167\u6838\u7dda\u5f62\u4f4d\u5740\u7a7a\u9593\u4f48\u5c40\u5716\uff0c\u5177\u9ad4\u53ef\u53c3\u8003\u5982\u4e0b\u300c\u786c\u6838\u300d\u793a\u610f\u5716\uff1a<br \/>\n<a href=\"http:\/\/www.killtest.hk\/index.php\/killtest\/linux-%e7%b3%bb%e7%b5%b1%e4%b9%8b-oom-%e8%a7%a3%e6%9e%90\/attachment\/640-13\/\" rel=\"attachment wp-att-6060\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.killtest.hk\/wp-content\/uploads\/2024\/04\/640.png\" alt=\"\" width=\"766\" height=\"250\" class=\"alignleft size-full wp-image-6060\" srcset=\"https:\/\/www.killtest.hk\/wp-content\/uploads\/2024\/04\/640.png 766w, https:\/\/www.killtest.hk\/wp-content\/uploads\/2024\/04\/640-300x98.png 300w\" sizes=\"auto, (max-width: 766px) 100vw, 766px\" \/><\/a><br \/>\n\u91dd\u5c0d\u4e0a\u8ff0\u7d50\u69cb\u5716\uff0c\u7c21\u55ae\u63cf\u8ff0\u5982\u4e0b\uff1a<\/p>\n<p>1.\u6838\u5fc3\u76f4\u63a5\u6620\u5c04\u7a7a\u9593 PAGE_OFFSET~VMALLOC_START\uff0ckmalloc\u548c__get_free_page()\u5206\u914d\u7684\u662f\u9019\u88e1\u7684\u9801\u9762\u3002 \u4e8c\u8005\u662f\u85c9\u52a9 Slab\u5206\u914d\u5668\uff0c\u76f4\u63a5\u5206\u914d\u5be6\u9ad4\u9801\u518d\u8f49\u63db\u70ba\u908f\u8f2f\u4f4d\u5740\uff08\u5be6\u9ad4\u4f4d\u5740\u9023\u7e8c\uff09\u3002 \u9069\u5408\u5206\u914d\u5c0f\u6bb5\u8a18\u61b6\u9ad4\u3002 \u6b64\u5340\u57df \u5305\u542b\u4e86\u6838\u5fc3\u93e1\u50cf\u3001\u5be6\u9ad4\u9801\u6846\u8868mem_map \u7b49\u8cc7\u6e90\u3002<\/p>\n<p>2.\u6838\u5fc3\u52d5\u614b\u6620\u5c04\u7a7a\u9593 VMALLOC_START~VMALLOC_END\uff0c\u88ab vmalloc \u7528\u5230\uff0c\u53ef\u8868\u793a\u7684\u7a7a\u9593\u5927\u3002<\/p>\n<p>3.\u6838\u5fc3\u6c38\u4e45\u6620\u5c04\u7a7a\u9593 PKMAP_BASE ~ FIXADDR_START\uff0ckmap<\/p>\n<p>4.\u6838\u5fc3\u81e8\u6642\u6620\u5c04\u7a7a\u9593 FIXADDR_START~FIXADDR_TOP\uff0ckmap_atomic<\/p>\n<p>\u8a18\u61b6\u9ad4\u5206\u6790<\/p>\n<p>\u91dd\u5c0d\u8a18\u61b6\u9ad4\u5206\u6790\u90e8\u5206\uff0c\u5176\u5be6\u53ef\u5229\u7528\u7684\u624b\u6bb5\u6216\u7b56\u7565\u8f03\u591a\uff0c\u57fa\u65bc\u4e0d\u540c\u6bb5\u4f4d\u7684\u6c34\u5e73\u9ad8\u4f4e\u4e4b\u5206\uff0c\u901a\u5e38\uff0c\u6211\u5011\u53ef\u4ee5\u85c9\u52a9Top\u3001Free \u6307\u4ee4\u4ee5\u53caVmstat \u6307\u4ee4\u9032\u884c\u8ffd\u8e64\u53ca\u89c0\u6e2c\u8a18\u61b6\u9ad4\u7684\u52d5\u614b\u6d3b\u52d5\u8b8a\u5316\u8da8\u52e2\uff0c\u4ee5\u5373\u6642\u4e86\u89e3 \u76ee\u524d\u4f5c\u696d\u7cfb\u7d71\u7684\u8cc7\u6e90\u6c34\u4f4d\uff0c\u5177\u9ad4\u5982\u4e0b\u6240\u793a\uff1a<\/p>\n<p>[administrator@JavaLangOutOfMemory ~ ] %top<br \/>\n PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND<br \/>\n  1 root      20   0  128032   7996   5556 S   80.0  80.4   0:01.03 java<br \/>\n  2 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kthreadd<br \/>\n\u57fa\u65bc\u4e0a\u8ff0\u8f38\u51fa\u7d50\u679c\uff0c\u7c21\u55ae\u89e3\u6790\u5982\u4e0b\uff1a<\/p>\n<p>1\u3001VIRI: \u865b\u64ec\u5167\u5b58\uff0c\u5305\u62ec\u4e86\u9032\u7a0b\u7684\u4ee3\u78bc\u6bb5\u3001\u6578\u64da\u6bb5\u3001\u5171\u4eab\u5167\u5b58\u3001\u5df2\u7d93\u7533\u8acb\u7684\u5806\u5167\u5b58\u548c\u5df2\u7d93\u63db\u51fa\u7684\u5167\u5b58\u7b49\uff0c\u5df2\u7d93\u7533\u8acb\u7684\u5167\u5b58\uff0c\u5373\u4f7f\u9084\u672a\u5206\u914d\u7269\u7406\u5167\u5b58\uff0c\u4e5f\u7b97\u505a\u865b\u64ec\u5167\u5b58<\/p>\n<p>2\u3001RSS: \u5e38\u99d0\u5167\u5b58\uff0c\u662f\u9032\u7a0b\u5be6\u969b\u4f7f\u7528\u7684\u5be6\u9ad4\u5167\u5b58\uff0c\u4e0d\u5305\u62ec Swap \u548c\u5171\u4eab\u5167\u5b58<\/p>\n<p>3\u3001SHR: \u5171\u4eab\u5167\u5b58\uff0c\u5305\u62ec\u8207\u5176\u4ed6\u9032\u7a0b\u5171\u540c\u4f7f\u7528\u7684\u771f\u5be6\u5171\u4eab\u5167\u5b58\uff0c\u5305\u62ec\u52a0\u8f09\u7684\u52d5\u614b\u93c8\u63a5\u5eab\u4ee5\u53ca\u7a0b\u5e8f\u7684\u4ee3\u78bc\u6bb5<\/p>\n<p>4\u3001%MEM: \u9032\u7a0b\u4f7f\u7528\u5be6\u9ad4\u8a18\u61b6\u9ad4\u4f54\u7cfb\u7d71\u8a18\u61b6\u9ad4\u7684\u767e\u5206\u6bd4<\/p>\n<p>[administrator@JavaLangOutOfMemory ~ ] %free<br \/>\n              total        used        free      shared  buff\/cache   available<br \/>\nMem:        2031744       98176     1826192        8784      107376     1800144<br \/>\nSwap:       2097148           0     2097148<br \/>\n\u6b64\u547d\u4ee4\u5217\u8f38\u51fa\u5167\u5bb9\u8f03\u70ba\u7c21\u55ae\uff1a\u4e3b\u8981\u5217\u5370\u5df2\u4f7f\u7528\u3001\u5269\u9918\u3001\u53ef\u7528\u3001\u5171\u4eab\u8a18\u61b6\u9ad4\u4ee5\u53ca\u5feb\u53d6\u7b49\u8cc7\u8a0a\u3002 \u90e8\u5206\u53c3\u6578\u91cb\u7fa9\u5982\u4e0b\u5716\u6240\u793a\uff1a<\/p>\n<p>1\u3001Shared: \u5171\u4eab\u8a18\u61b6\u9ad4, \u5171\u4eab\u8a18\u61b6\u9ad4\u662f\u900f\u904e Tmpfs \u5be6\u73fe\u7684\uff0c\u5b83\u7684\u5927\u5c0f\u5c31\u662f Tmpfs \u4f7f\u7528\u7684\u8a18\u61b6\u9ad4\u5927\u5c0f\u3002<\/p>\n<p>2\u3001Available: \u53ef\u7528\u5167\u5b58\uff0c\u662f\u65b0\u9032\u7a0b\u53ef\u4ee5\u4f7f\u7528\u7684\u6700\u5927\u5167\u5b58\uff0c\u5305\u62ec\u5269\u9918\u5167\u5b58\u548c\u9084\u672a\u4f7f\u7528\u7684\u5167\u5b58\u3002<\/p>\n<p>3\u3001Buffer\/Cache: \u5feb\u53d6\u5305\u62ec\u5169\u90e8\u5206\uff0c\u4e00\u90e8\u5206\u662f\u78c1\u789f\u8b80\u53d6\u6a94\u6848\u7684\u9801\u7de9\u5b58\uff0c\u7528\u4f86\u7de9\u5b58\u5f9e\u78c1\u789f\u8b80\u53d6\u7684\u6578\u64da\uff0c\u52a0\u901f\u4ee5\u5f8c\u518d\u6b21\u5b58\u53d6\u901f\u5ea6\uff0c\u53e6\u4e00\u90e8\u5206\u662fSlab \u5206\u914d\u7684\u53ef\u56de\u6536\u5feb\u53d6\uff1b\u7de9\u885d\u5340\u662f \u5c0d\u539f\u59cb\u78c1\u789f\u7684\u66ab\u5b58\uff0c\u7528\u4f86\u5feb\u53d6\u5c07\u8981\u5beb\u5165\u78c1\u789f\u7684\u6578\u64da\uff0c\u7d71\u4e00\u6700\u4f73\u5316\u78c1\u789f\u5beb\u5165\u3002<\/p>\n<p>[administrator@JavaLangOutOfMemory ~ ] %vmstat 1 1<br \/>\nprocs &#8212;&#8212;&#8212;&#8211;memory&#8212;&#8212;&#8212;- &#8212;swap&#8211; &#8212;&#8211;io&#8212;- -system&#8211; &#8212;&#8212;cpu&#8212;&#8211;<br \/>\n r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st<br \/>\n 1  0      0 1815348   2108 111872    0    0     1     0   11   11  0  0 100  0  0<br \/>\n\u57fa\u65bc\u4e0a\u8ff0\u8f38\u51fa\u7d50\u679c\uff0c\u7c21\u55ae\u89e3\u6790\u5982\u4e0b:<\/p>\n<p>1\u3001si: \u63db\u5165\uff0c\u6bcf\u79d2\u5f9e\u78c1\u789f\u8b80\u5165\u865b\u64ec\u8a18\u61b6\u9ad4\u7684\u5927\u5c0f\uff0c\u82e5\u6b64\u503c\u9577\u6642\u9593\u6301\u7e8c\u5927\u65bc0\uff0c\u8868\u793a\u5be6\u9ad4\u8a18\u61b6\u9ad4\u4e0d\u5920\u6216\u8a18\u61b6\u9ad4\u6d29\u6f0f\uff0c\u9700\u8981\u5b9a\u4f4d\u554f\u984c\u3002<\/p>\n<p>2\u3001so: \u63db\u51fa\uff0c\u6bcf\u79d2\u9418\u5f9e\u8a18\u61b6\u9ad4\u5beb\u5165\u78c1\u789f\u7684\u5927\u5c0f\uff0c\u82e5\u6b64\u503c\u9577\u6642\u9593\u6301\u7e8c\u5927\u65bc0\uff0c\u8868\u793a\u5be6\u9ad4\u8a18\u61b6\u9ad4\u4e0d\u5920\u7528\uff0c\u5c31\u9700\u8981\u6392\u67e5\u8a18\u61b6\u9ad4\u554f\u984c\u3002<\/p>\n<p>OOM Killer<\/p>\n<p>\u901a\u5e38\u6709\u9019\u6a23\u7684\u4e00\u7a2e\u5834\u666f\uff1a\u82e5\u4e00\u53f0VM \uff08\u865b\u64ec\u6a5f\uff09\u4e0a\u90e8\u7f72\u591a\u500b\u61c9\u7528\u670d\u52d9\uff0c\u6b64\u8655\uff0c\u66ab\u4ee5Spring Boot \u5fae\u670d\u52d9\u70ba\u4f8b\uff0c\u5728\u67d0\u7a2e\u7279\u6b8a\u7684\u6642\u523b\uff0c\u4f8b\u5982\uff1a\u696d\u52d9\u4fc3\u92b7\u3001\u58d3\u529b\u6e2c\u8a66\u6216 \u7576\u67d0\u4e00\u500b\u806f\u6a5f\u8ca0\u8f09\u7bc0\u9ede\u6216\u56e0\u7db2\u8def\u6296\u52d5\u800c\u639b\u6389\u6642\uff0c\u6b64\u53f0VM \u4e0a\u7684\u670d\u52d9\u7a81\u7136\u5728\u6beb\u7121\u5fb5\u5146\u7684\u60c5\u6cc1\u4e0b\uff0c\u7a81\u7136\u88ab\u300c\u639b\u6389\u300d\u3002<\/p>\n<p>\u540c\u6642\uff0c\u6211\u5011\u958b\u59cb\u8490\u96c6\u76f8\u95dc\u7dda\u7d22\uff0c\u4ee5\u4fbf\u80fd\u5920\u5feb\u901f\u5b9a\u4f4d\u5230\u554f\u984c\u539f\u56e0\uff0c\u5c07\u300c\u7f6a\u9b41\u798d\u9996\u300d\u902e\u6355\u6b78\u6848\u3002<\/p>\n<p>\u90a3\u9ebc\uff0c\u70ba\u4ec0\u9ebc\u6703\u51fa\u73fe\u9019\u7a2e\u554f\u984c\u5462\uff1f \u5b83\u662f\u5982\u4f55\u7522\u751f\u7684\uff1f OOM\uff0c\u5168\u7a31\u70ba \u201cOut Of Memory\u201d\uff0c\u5373 \u8a18\u61b6\u9ad4\u6ea2\u4f4d\u3002 OOM Killer \u662f Linux \u81ea\u6211\u4fdd\u8b77\u7684\u65b9\u5f0f\uff0c\u9632\u6b62\u8a18\u61b6\u9ad4\u4e0d\u8db3\u6642\u51fa\u73fe\u56b4\u91cd\u554f\u984c\u3002<\/p>\n<p>Linux \u6838\u5fc3\u6240\u63a1\u7528\u7684\u6b64\u7a2e\u6a5f\u5236\u6703\u4e0d\u6642\u76e3\u63a7\u6240\u904b\u884c\u4e2d\u4f54\u7528\u8a18\u61b6\u9ad4\u904e\u5927\u7684\u9032\u7a0b\uff0c\u5c24\u5176\u91dd\u5c0d\u5728\u67d0\u4e00\u7a2e\u77ac\u9593\u5834\u666f\u4e0b\u4f54\u7528\u8a18\u61b6\u9ad4\u8f03\u5feb\u7684\u9032\u7a0b\uff0c\u70ba\u4e86\u9632\u6b62\u4f5c\u696d\u7cfb\u7d71\u8a18\u61b6\u9ad4\u8017\u76e1\u800c\u4e0d\u5f97\u4e0d\u81ea\u52d5\u5c07\u6b64 \u9032\u7a0bKill \u6389\u3002 \u901a\u5e38\uff0c\u7cfb\u7d71\u6838\u5fc3\u5075\u6e2c\u5230\u7cfb\u7d71\u8a18\u61b6\u9ad4\u4e0d\u8db3\u6642\uff0c\u7be9\u9078\u4e26\u7d42\u6b62\u67d0\u500b\u884c\u7a0b\u7684\u904e\u7a0b\u53ef\u4ee5\u53c3\u8003\u6838\u5fc3\u539f\u59cb\u78bc\uff1alinux\/mm\/oom_kill.c\uff0c\u7576\u7cfb\u7d71\u8a18\u61b6\u9ad4\u4e0d\u8db3\u7684\u6642\u5019\uff0cout_of_memory()\u88ab\u89f8\u767c\uff0c\u7136\u5f8c\u547c\u53ebselect_bad_process( ) \u9078\u64c7\u4e00\u500b\u201dbad\u201d \u9032\u7a0b\u6bba\u6389\u3002 \u5982\u4f55\u5224\u65b7\u548c\u9078\u64c7\u4e00\u500b\u300dbad \u9032\u7a0b\u5462\uff1fLinux \u4f5c\u696d\u7cfb\u7d71\u9078\u64c7\u300dbad\u300d\u9032\u7a0b\u662f\u900f\u904e\u547c\u53eb oom_badness()\uff0c\u6311\u9078\u7684\u6f14\u7b97\u6cd5\u548c\u60f3\u6cd5\u90fd\u5f88\u7c21\u55ae\u5f88\u6a38\u5be6\uff1a\u6700 bad \u7684\u90a3\u500b\u9032\u7a0b\u5c31\u662f\u90a3\u500b\u6700\u4f54\u7528\u8a18\u61b6\u9ad4\u7684\u9032\u7a0b\u3002<\/p>\n<p>OOM Killer \u539f\u59cb\u78bc\u89e3\u6790<\/p>\n<p>OOM killer\u7684\u6838\u5fc3\u51fd\u6578\u662f out_of_memory(), \u57f7\u884c\u6d41\u7a0b\u5982\u4e0b:<\/p>\n<p>1.\u547c\u53eb check_panic_on_oom() \u6aa2\u67e5\u662f\u5426\u5141\u8a31\u57f7\u884c\u6838\u5fc3\u6050\u614c\uff0c\u5047\u5982\u5141\u8a31\uff0c\u9700\u8981\u91cd\u65b0\u555f\u52d5\u7cfb\u7d71\u3002<\/p>\n<p>2.\u82e5\u5b9a\u7fa9\u4e86 \/proc\/sys\/vm\/oom_kill_allocating_task \u5373\u5141\u8a31 Kill \u6389\u76ee\u524d\u6b63\u5728\u7533\u8acb\u5206\u914d\u7269\u7406\u8a18\u61b6\u9ad4\u7684\u7a0b\u5e8f\uff0c\u90a3\u9ebc\u6bba\u6b7b\u76ee\u524d\u7a0b\u5e8f\u3002<\/p>\n<p>3.\u547c\u53eb select_bad_process\uff0c\u9078\u64c7 badness score \u6700\u9ad8\u7684\u9032\u7a0b\u3002<\/p>\n<p>4\u3001\u547c\u53eb oom_kill_process, \u6bba\u6b7b\u9078\u64c7\u7684\u9032\u7a0b\u3002<\/p>\n<p>\u6211\u5011\u900f\u904e\u5206\u6790 Badness Score \u7684\u8a08\u7b97\u51fd\u6578\u4f86\u7406\u89e3 OOM Killer \u662f\u5982\u4f55\u9078\u64c7\u9700\u8981\u88ab Kill \u6389\u7684\u9032\u7a0b\uff0c\u5177\u9ad4\u539f\u59cb\u78bc\u53ef\u53c3\u8003\u5982\u4e0b\u6240\u793a\uff1a<\/p>\n<p>unsigned long oom_badness(struct task_struct *p, struct mem_cgroup *memcg,<br \/>\n                          const nodemask_t *nodemask, unsigned long totalpages)<br \/>\n{<br \/>\n        long points;<br \/>\n        long adj;<\/p>\n<p>        \/* \u5047\u5982\u8be5\u8fdb\u7a0b\u4e0d\u80fd\u88abkill, \u5219\u5206\u6570\u8fd4\u56de0. *\/<br \/>\n        if (oom_unkillable_task(p, memcg, nodemask))<br \/>\n                return 0;<\/p>\n<p>        p = find_lock_task_mm(p);<br \/>\n        if (!p)<br \/>\n                return 0;<\/p>\n<p>        \/* \u83b7\u53d6\u8be5\u8fdb\u7a0b\u7684 oom_score_adj, \u8fd9\u4e2a\u662f\u7528\u6237\u4e3a\u8fdb\u7a0b\u8bbe\u7f6e\u7684 badness score<br \/>\n         * \u8c03\u6574\u503c\uff0c\u5047\u5982\u8fd9\u4e2a\u503c\u4e3a-1000\u6216\u8005\u8fdb\u7a0b\u88ab\u6807\u8bb0\u4e3a\u4e0d\u53ef\u88abkill\uff0c\u6216\u8005\u8fdb\u7a0b\u5904\u4e8e<br \/>\n         * vfork()\u8fc7\u7a0b\uff0cbadness score\u8fd4\u56de0. *\/<br \/>\n        adj = (long)p->signal->oom_score_adj;<br \/>\n        if (adj == OOM_SCORE_ADJ_MIN ||<br \/>\n                        test_bit(MMF_OOM_SKIP, &#038;p->mm->flags) ||<br \/>\n                        in_vfork(p)) {<br \/>\n                task_unlock(p);<br \/>\n                return 0;<br \/>\n        }<\/p>\n<p>        \/* badness score\u5206\u6570 = \u7269\u7406\u5185\u5b58\u9875\u6570 + \u4ea4\u6362\u533a\u9875\u6570 + \u9875\u8868Page Table\u6570\u91cf. *\/<br \/>\n        points = get_mm_rss(p->mm) + get_mm_counter(p->mm, MM_SWAPENTS) +<br \/>\n                mm_pgtables_bytes(p->mm) \/ PAGE_SIZE;<br \/>\n        task_unlock(p);<\/p>\n<p>        \/* \u5229\u7528\u4ee5\u4e0b\u516c\u5f0f\u5bf9 badness score \u503c\u8fdb\u884c\u8c03\u6574. *\/<br \/>\n        adj *= totalpages \/ 1000;<br \/>\n        points += adj;<\/p>\n<p>        \/* \u8fd4\u56de badness score, \u5047\u5982\u7b49\u4e8e0, \u5219\u8fd4\u56de 1. *\/<br \/>\n        return points > 0 ? points : 1;<br \/>\n}<br \/>\n\u900f\u904e\u5c0d Badness Score \u8a08\u7b97\u51fd\u6578\u7684\u5206\u6790\uff0c\u6211\u5011\u53ef\u4ee5\u767c\u73fe OOM Killer \u662f\u57fa\u65bc RSS \u5373\u5e38\u99d0\u7684\u5be6\u9ad4\u8a18\u61b6\u9ad4\u4f86\u9078\u64c7\u9032\u7a0b\u9032\u884c Kill \u64cd\u4f5c\uff0c \u5f9e\u800c\u91cb\u653e\u76f8\u95dc\u8a18\u61b6\u9ad4\u4ee5\u9032\u884c\u7cfb\u7d71\u81ea\u6211\u4fdd\u8b77\u3002 \u6709\u95dc OOM Killer \u76f8\u95dc\u914d\u7f6e\u3001\u67e5\u770b\u53ca\u5206\u6790\u5c07\u65bc\u5f8c\u7e8c\u6587\u7ae0\u7d66\u51fa\uff0c\u5927\u5bb6\u5230\u6642\u7559\u610f\u67e5\u770b\u3002<\/p>\n<p>\u7d9c\u4e0a\u6240\u8ff0\uff0c\u672c\u7bc7\u6587\u7ae0\u4e3b\u8981\u900f\u904e\u57fa\u65bc\u5c0dLinux \u8a18\u61b6\u9ad4\u7d50\u69cb\u3001\u5206\u6790\u53caOOM Killer 3\u500b\u6838\u5fc3\u7dad\u5ea6\uff0c\u5f9e\u4e3b\u52d5\u53ca\u88ab\u52d5\u5834\u666f\u7b492 \u9762\u5411\u5c0dLinux \u4f5c\u696d\u7cfb\u7d71\u8a18\u61b6\u9ad4\u7684\u5256\u6790\uff0c\u4ee5\u63a2\u8a0e\u5728\u5be6\u969b\u7684\u696d\u52d9\u5834\u666f\u4e2d\uff0c \u8a18\u61b6\u9ad4\u8868\u73fe\u7684\u76f8\u95dc\u6d3b\u52d5\u53ca\u7d93\u9a57\u8a8d\u77e5\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Luga Lee twt\u4f01\u4e1aIT\u793e\u533a \u3010\u6458\u8981\u3011\u57fa\u65bc VM \u74b0\u5883\u6240\u90e8\u7f72\u7684 Spring Boot \u61c9\u7528\u670d\u52d9\uff0c\u904b\u884c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[3498,295],"class_list":["post-6058","post","type-post","status-publish","format-standard","hentry","category-killtest","tag-101-500","tag-linux"],"_links":{"self":[{"href":"https:\/\/www.killtest.hk\/index.php\/wp-json\/wp\/v2\/posts\/6058","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.killtest.hk\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.killtest.hk\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.killtest.hk\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.killtest.hk\/index.php\/wp-json\/wp\/v2\/comments?post=6058"}],"version-history":[{"count":2,"href":"https:\/\/www.killtest.hk\/index.php\/wp-json\/wp\/v2\/posts\/6058\/revisions"}],"predecessor-version":[{"id":6062,"href":"https:\/\/www.killtest.hk\/index.php\/wp-json\/wp\/v2\/posts\/6058\/revisions\/6062"}],"wp:attachment":[{"href":"https:\/\/www.killtest.hk\/index.php\/wp-json\/wp\/v2\/media?parent=6058"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.killtest.hk\/index.php\/wp-json\/wp\/v2\/categories?post=6058"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.killtest.hk\/index.php\/wp-json\/wp\/v2\/tags?post=6058"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}