{"id":2289,"date":"2022-03-05T19:57:32","date_gmt":"2022-03-05T11:57:32","guid":{"rendered":"https:\/\/www.zeroheart.xyz\/wordpress\/?p=2289"},"modified":"2022-11-07T21:09:37","modified_gmt":"2022-11-07T13:09:37","slug":"gc%e5%88%86%e6%9e%90%e7%9b%b8%e5%85%b3","status":"publish","type":"post","link":"https:\/\/www.zeroheart.xyz\/wordpress\/?p=2289","title":{"rendered":"gc\u5206\u6790\u76f8\u5173"},"content":{"rendered":"\n<p>\u539f\u6587\uff1a<a href=\"https:\/\/www.jianshu.com\/p\/200416bc3964\">JVM\u7cfb\u5217(2) JVM\u76d1\u63a7\u5de5\u5177 &#8211; \u7b80\u4e66 (jianshu.com)<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">0.\u53ef\u9009GC\u914d\u7f6e<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">0.1 4C4G, \u54cd\u5e94\u65f6\u4f18\u5148\u7684GC\u914d\u7f6e\u7b56\u7565<\/h2>\n\n\n\n<p><em><\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-XX:+HeapDumpBeforeFullGC\n-XX:+HeapDumpAfterFullGC\n-XX:CMSFullGCsBeforeCompaction=3\n-XX:CMSInitiatingOccupancyFraction=68\n-XX:+CMSParallelRemarkEnabled\n-XX:CompressedClassSpaceSize=850395136\n-XX:+DisableExplicitGC\n-XX:GCLogFileSize=1073741824\n-XX:+HeapDumpOnOutOfMemoryError\n-XX:HeapDumpPath=\/opt\/zy\/heapdump\n-XX:InitialHeapSize=67108864\n-XX:+ManagementServer\n-XX:MaxHeapSize=2576351232\n-XX:MaxMetaspaceSize=858783744\n-XX:MaxNewSize=348966912\n-XX:MaxTenuringThreshold=6\n-XX:NumberOfGCLogFiles=10\n-XX:OldPLABSize=16\n-XX:OnOutOfMemoryError=\/opt\/zy\/thread_dump.txt\n-XX:+PrintGC\n-XX:+PrintGCApplicationStoppedTime\n-XX:+PrintGCDateStamps\n-XX:+PrintGCDetatils\n-XX:+PrintGCTimeStamps\n-XX:+UseCMSCompactAtFullCollection\n-XX:+UseCompressedClassPointers\n-XX:+UseCompressedOops\n-XX:+UseConcMarkSweepGC\n-XX:+UseParNewGC\n-Xloggc:\/opt\/zy\/hello_gc_%t.log\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">0.2 \u541e\u5410\u91cf\u4f18\u5148\u7684GC\u914d\u7f6e\u53ef\u53c2\u89c1kafka\u7684GC\u7b56\u7565<\/h2>\n\n\n\n<h1 class=\"wp-block-heading\">1.JVM\u8c03\u4f18\u5de5\u5177<\/h1>\n\n\n\n<p><em><\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ JVM \u95ee\u9898\u5206\u6790\u539f\u52191\n\u5bf9\u4e8e\u7ebf\u4e0adump\u7684heap\u4fe1\u606f\uff0c\u5e94\u8be5\u5c3d\u91cf\u62c9\u53bb\u5230\u7ebf\u4e0b\u7528\u4e8e\u53ef\u89c6\u5316\u5de5\u5177\u6765\u5206\u6790\uff0c\u8fd9\u6837\u5206\u6790\u66f4\u8be6\u7ec6\u3002\n\u5982\u679c\u5bf9\u4e8e\u4e00\u4e9b\u7d27\u6025\u7684\u95ee\u9898\uff0c\u5fc5\u987b\u9700\u8981\u901a\u8fc7\u7ebf\u4e0a\u76d1\u63a7\uff0c\n\u53ef\u4ee5\u91c7\u7528 VisualVm\u7684\u8fdc\u7a0b\u529f\u80fd\u6765\u8fdb\u884c\uff0c\u8fd9\u9700\u8981\u4f7f\u7528tool.jar\u4e0b\u7684MAT\u529f\u80fd\u3002\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">1.1 \u5e38\u7528linux\u5206\u6790\u547d\u4ee4<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u547d\u4ee4<\/th><th>\u4f5c\u7528\u4e0e\u7279\u70b9<\/th><\/tr><\/thead><tbody><tr><td>vmstat<\/td><td>\u8fdb\u7a0b,\u865a\u62df\u5185\u5b58,\u9875\u9762\u4ea4\u6362,IO\u8bfb\u5199,CPU\u6d3b\u52a8\u7b49<\/td><\/tr><tr><td>iostat &amp; iotop<\/td><td>\u7cfb\u7edfIO\u72b6\u6001\u4fe1\u606f<\/td><\/tr><tr><td>ifstat &amp; iftop<\/td><td>\u5b9e\u65f6\u7f51\u7edc\u6d41\u91cf\u76d1\u63a7<\/td><\/tr><tr><td>netstat<\/td><td>\u67e5\u770b\u76f8\u5173\u7f51\u7edc\u4fe1\u606f,\u5404\u79cd\u7f51\u7edc\u534f\u8bae\u5957\u63a5\u5b57\u72b6\u6001<\/td><\/tr><tr><td>dstat<\/td><td>\u5168\u80fd\u578b\u5b9e\u65f6\u7cfb\u7edf\u7edf\u8ba1\u4fe1\u606f<\/td><\/tr><tr><td>strace<\/td><td>\u8bca\u65ad,\u8c03\u8bd5\u7a0b\u5e8f\u7684\u7cfb\u7edf\u8c03\u7528<\/td><\/tr><tr><td>GDB<\/td><td>\u7a0b\u5e8f\u8c03\u8bd5,coredump\u5206\u6790<\/td><\/tr><tr><td>lsof<\/td><td>\u67e5\u770b\u7cfb\u7edf\u5f53\u524d\u6253\u5f00\u7684\u6587\u4ef6\u4fe1\u606f<\/td><\/tr><tr><td>tcpdump<\/td><td>\u7f51\u7edc\u6293\u5305\u5de5\u5177<\/td><\/tr><tr><td>traceroute<\/td><td>\u7f51\u7edc\u8def\u7531\u5206\u6790\u5de5\u5177<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">1.2 jvm \u5e38\u7528\u547d\u4ee4<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.2.1 jps:\u67e5\u770b\u6240\u6709 Java \u8fdb\u7a0b<\/h3>\n\n\n\n<p><em><\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>jps(JVM Process Status):\n\u663e\u793a\u865a\u62df\u673a\u6267\u884c\u4e3b\u7c7b\u540d\u79f0\u4ee5\u53ca\u8fd9\u4e9b\u8fdb\u7a0b\u7684\u672c\u5730\u865a\u62df\u673a\u552f\u4e00 ID\uff08Local Virtual Machine Identifier,LVMID\uff09\u3002\n\njps -q \uff1a\u53ea\u8f93\u51fa\u8fdb\u7a0b\u7684\u672c\u5730\u865a\u62df\u673a\u552f\u4e00 ID\u3002\njps -l: \u8f93\u51fa\u4e3b\u7c7b\u7684\u5168\u540d\uff0c\u5982\u679c\u8fdb\u7a0b\u6267\u884c\u7684\u662f Jar \u5305\uff0c\u8f93\u51fa Jar \u8def\u5f84\u3002\njps -v\uff1a\u8f93\u51fa\u865a\u62df\u673a\u8fdb\u7a0b\u542f\u52a8\u65f6 JVM \u53c2\u6570\u3002\njps -m\uff1a\u8f93\u51fa\u4f20\u9012\u7ed9 Java \u8fdb\u7a0b main() \u51fd\u6570\u7684\u53c2\u6570\u3002\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">1.2.2 jmap:java \u5185\u5b58\u6620\u5c04\u5de5\u5177 (\u4e0e jhat \u914d\u5408\u4f7f\u7528)<\/h3>\n\n\n\n<p><em><\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>jmap\uff08Memory Map for Java\uff09\u547d\u4ee4\u7528\u4e8e\u751f\u6210\u5806\u8f6c\u50a8\u5feb\u7167\u3002\n\u6253\u5370\u51fa\u67d0\u4e2ajava\u8fdb\u7a0b\uff08\u4f7f\u7528pid\uff09\u5185\u5b58\u5185\u7684\uff0c\u6240\u6709\u2018\u5bf9\u8c61\u2019\u7684\u60c5\u51b5\uff08\u5982\uff1a\u4ea7\u751f\u90a3\u4e9b\u5bf9\u8c61\uff0c\u53ca\u5176\u6570\u91cf\uff09\u3002\n\n\u5982\u679c\u4e0d\u4f7f\u7528 jmap \u547d\u4ee4\uff0c\u8981\u60f3\u83b7\u53d6 Java \u5806\u8f6c\u50a8\uff0c\n\u53ef\u4ee5\u5728\u542f\u52a8\u65f6\u4f7f\u7528 -XX:+HeapDumpOnOutOfMemoryError \u53c2\u6570\uff0c\n\u8ba9\u865a\u62df\u673a\u5728 OOM \u5f02\u5e38\u51fa\u73b0\u4e4b\u540e\u81ea\u52a8\u751f\u6210 dump \u6587\u4ef6\u3002\n\nLinux \u547d\u4ee4\u4e0b\u53ef\u4ee5\u901a\u8fc7 kill -3 \u53d1\u9001\u8fdb\u7a0b\u9000\u51fa\u4fe1\u53f7\u4e5f\u80fd\u62ff\u5230 dump \u6587\u4ef6\u3002\n\njmap \u7684\u4f5c\u7528\u5e76\u4e0d\u4ec5\u4ec5\u662f\u4e3a\u4e86\u83b7\u53d6 dump \u6587\u4ef6\uff0c\n\u5b83\u8fd8\u53ef\u4ee5\u67e5\u8be2 finalizer \u6267\u884c\u961f\u5217\u3001Java \u5806\u548c\u6c38\u4e45\u4ee3\u7684\u8be6\u7ec6\u4fe1\u606f\uff0c\n\u5982\u7a7a\u95f4\u4f7f\u7528\u7387\u3001\u5f53\u524d\u4f7f\u7528\u7684\u662f\u54ea\u79cd\u6536\u96c6\u5668\u7b49\u3002\n\u548cjinfo\u4e00\u6837\uff0cjmap\u6709\u4e0d\u5c11\u529f\u80fd\u5728 Windows \u5e73\u53f0\u4e0b\u4e5f\u662f\u53d7\u9650\u5236\u7684\u3002\n<\/code><\/pre>\n\n\n\n<p><em><\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#\u547d\u4ee4\u683c\u5f0f: \njmap &#91; option ] pid\n\n#\u53ef\u9009\u53c2\u6570 &#91;option]:\n-dump:&#91;live,]format=b,file=&lt;filename&gt; \u4f7f\u7528hprof\u4e8c\u8fdb\u5236\u5f62\u5f0f,\u8f93\u51fajvm\u7684heap\u5185\u5bb9\u5230\u6587\u4ef6=. live\u5b50\u9009\u9879\u662f\u53ef\u9009\u7684\uff0c\u5047\u5982\u6307\u5b9alive\u9009\u9879,\u90a3\u4e48\u53ea\u8f93\u51fa\u6d3b\u7684\u5bf9\u8c61\u5230\u6587\u4ef6. \n-finalizerinfo \u6253\u5370\u6b63\u7b49\u5019\u56de\u6536\u7684\u5bf9\u8c61\u7684\u4fe1\u606f.\n-heap \u6253\u5370heap\u7684\u6982\u8981\u4fe1\u606f\uff0cGC\u4f7f\u7528\u7684\u7b97\u6cd5\uff0cheap\u7684\u914d\u7f6e\u53cawise heap\u7684\u4f7f\u7528\u60c5\u51b5.\n-histo&#91;:live] \u6253\u5370\u6bcf\u4e2aclass\u7684\u5b9e\u4f8b\u6570\u76ee,\u5185\u5b58\u5360\u7528,\u7c7b\u5168\u540d\u4fe1\u606f. VM\u7684\u5185\u90e8\u7c7b\u540d\u5b57\u5f00\u5934\u4f1a\u52a0\u4e0a\u524d\u7f00\u201d*\u201d. \u5982\u679clive\u5b50\u53c2\u6570\u52a0\u4e0a\u540e,\u53ea\u7edf\u8ba1\u6d3b\u7684\u5bf9\u8c61\u6570\u91cf. \n-permstat \u6253\u5370classload\u548cjvm heap\u957f\u4e45\u5c42\u7684\u4fe1\u606f. \u5305\u542b\u6bcf\u4e2aclassloader\u7684\u540d\u5b57,\u6d3b\u6cfc\u6027,\u5730\u5740,\u7236classloader\u548c\u52a0\u8f7d\u7684class\u6570\u91cf. \u53e6\u5916,\u5185\u90e8String\u7684\u6570\u91cf\u548c\u5360\u7528\u5185\u5b58\u6570\u4e5f\u4f1a\u6253\u5370\u51fa\u6765. \n-F \u5f3a\u8feb.\u5728pid\u6ca1\u6709\u76f8\u5e94\u7684\u65f6\u5019\u4f7f\u7528-dump\u6216\u8005-histo\u53c2\u6570. \u5728\u8fd9\u4e2a\u6a21\u5f0f\u4e0b,live\u5b50\u53c2\u6570\u65e0\u6548. \n-h | -help \u6253\u5370\u8f85\u52a9\u4fe1\u606f \n-J \u4f20\u9012\u53c2\u6570\u7ed9jmap\u542f\u52a8\u7684jvm. \n<\/code><\/pre>\n\n\n\n<p><em><\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#\u793a\u4f8b\uff1a\n\u5c06\u6307\u5b9a\u5e94\u7528\u7a0b\u5e8f\u7684\u5806\u5feb\u7167\u8f93\u51fa\u5230\u684c\u9762\u3002\n\u540e\u9762\uff0c\u53ef\u4ee5\u901a\u8fc7 jhat\u3001Visual VM \u7b49\u5de5\u5177\u5206\u6790\u8be5\u5806\u6587\u4ef6\u3002\n\"jmap -dump:format=b,file=\/heap.hprof 300\"\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">1.2.3 jhat:jvm\u5806\u5feb\u7167\u5206\u6790\u5de5\u5177<\/h3>\n\n\n\n<p><em><\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>jhat \u547d\u4ee4\u4e0ejamp\u642d\u914d\u4f7f\u7528\uff0c\u7528\u6765\u5206\u6790map\u751f\u4ea7\u7684\u5806\u5feb\u5b58\u50a8\u5feb\u7167\u3002jhat\u5185\u7f6e\u4e86\u4e00\u4e2a\u5fae\u578bhttp\/Html\u670d\u52a1\u5668\uff0c\u53ef\u4ee5\u5728\u6d4f\u89c8\u5668\u627e\u90a3\u4e2a\u67e5\u770b\u3002\u4e0d\u8fc7\u5efa\u8bae\u5c3d\u91cf\u4e0d\u7528\uff0c\u65e2\u7136\u6709dumpt\u6587\u4ef6\uff0c\u53ef\u4ee5\u4ece\u751f\u4ea7\u73af\u5883\u62c9\u53d6\u4e0b\u6765\uff0c\u7136\u540e\u901a\u8fc7\u672c\u5730\u53ef\u89c6\u5316\u5de5\u5177\u6765\u5206\u6790\uff0c\u8fd9\u6837\u65e2\u51cf\u8f7b\u4e86\u7ebf\u4e0a\u670d\u52a1\u5668\u538b\u529b\uff0c\u6709\u53ef\u4ee5\u5206\u6790\u7684\u8db3\u591f\u8be6\u5c3d(\u6bd4\u5982 MAT\/jprofile\/visualVm)\u7b49\u3002\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">1.2.4 jstack :java\u5806\u6808\u8ddf\u8e2a\u5de5\u5177<\/h3>\n\n\n\n<p><em><\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>jstack\uff08Stack Trace for Java\uff09\u547d\u4ee4\u7528\u4e8e\u751f\u6210\u865a\u62df\u673a\u5f53\u524d\u65f6\u523b\u7684\u7ebf\u7a0b\u5feb\u7167\u3002\n\u7ebf\u7a0b\u5feb\u7167\u5c31\u662f\u5f53\u524d\u865a\u62df\u673a\u5185\u6bcf\u4e00\u6761\u7ebf\u7a0b\u6b63\u5728\u6267\u884c\u7684\u65b9\u6cd5\u5806\u6808\u7684\u96c6\u5408.\n\u751f\u6210\u7ebf\u7a0b\u5feb\u7167\u7684\u76ee\u7684\u4e3b\u8981\u662f\u5b9a\u4f4d\u7ebf\u7a0b\u957f\u65f6\u95f4\u51fa\u73b0\u505c\u987f\u7684\u539f\u56e0\uff0c\n\u5982\u7ebf\u7a0b\u95f4\u6b7b\u9501\u3001\u6b7b\u5faa\u73af\u3001\u8bf7\u6c42\u5916\u90e8\u8d44\u6e90\u5bfc\u81f4\u7684\u957f\u65f6\u95f4\u7b49\u5f85\u7b49\u90fd\u662f\u5bfc\u81f4\u7ebf\u7a0b\u957f\u65f6\u95f4\u505c\u987f\u7684\u539f\u56e0\u3002\n\u7ebf\u7a0b\u51fa\u73b0\u505c\u987f\u7684\u65f6\u5019\u901a\u8fc7jstack\u6765\u67e5\u770b\u5404\u4e2a\u7ebf\u7a0b\u7684\u8c03\u7528\u5806\u6808\uff0c\n\u5c31\u53ef\u4ee5\u77e5\u9053\u6ca1\u6709\u54cd\u5e94\u7684\u7ebf\u7a0b\u5230\u5e95\u5728\u540e\u53f0\u505a\u4e9b\u4ec0\u4e48\u4e8b\u60c5\uff0c\u6216\u8005\u5728\u7b49\u5f85\u4e9b\u4ec0\u4e48\u8d44\u6e90\u3002\n<\/code><\/pre>\n\n\n\n<p><em><\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#\u547d\u4ee4\u683c\u5f0f:\njstack &#91; option ] pid\n\n#\u53ef\u9009\u53c2\u6570 &#91;option]\n-F \u5f53\u2019jstack &#91;-l] pid\u2019\u6ca1\u6709\u76f8\u5e94\u7684\u65f6\u5019\u5f3a\u5236\u6253\u5370\u6808\u4fe1\u606f\n-l  \u957f\u5217\u8868. \u6253\u5370\u5173\u4e8e\u9501\u7684\u9644\u52a0\u4fe1\u606f,\u4f8b\u5982\u5c5e\u4e8ejava.util.concurrent\u7684ownable synchronizers\u5217\u8868.\n-m \u6253\u5370java\u548cnative c\/c++\u6846\u67b6\u7684\u6240\u6709\u6808\u4fe1\u606f.\n-h | -help\u6253\u5370\u5e2e\u52a9\u4fe1\u606f\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">1.2.5 jstat: jvm\u7edf\u8ba1\u4fe1\u606f\u76d1\u63a7\u5de5\u5177<\/h3>\n\n\n\n<p><em><\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>jstat\uff08JVM Statistics Monitoring Tool\uff09\n\u4f7f\u7528\u4e8e\u76d1\u89c6\u865a\u62df\u673a\u5404\u79cd\u8fd0\u884c\u72b6\u6001\u4fe1\u606f\u7684\u547d\u4ee4\u884c\u5de5\u5177\u3002 \n\u5b83\u53ef\u4ee5\u663e\u793a\u672c\u5730\u6216\u8005\u8fdc\u7a0b\uff08\u9700\u8981\u8fdc\u7a0b\u4e3b\u673a\u63d0\u4f9b RMI \u652f\u6301\uff09\n\u865a\u62df\u673a\u8fdb\u7a0b\u4e2d\u7684\u7c7b\u4fe1\u606f\u3001\u5185\u5b58\u3001\u5783\u573e\u6536\u96c6\u3001JIT \u7f16\u8bd1\u7b49\u8fd0\u884c\u6570\u636e\uff0c\n\u5728\u6ca1\u6709 GUI\uff0c\u53ea\u63d0\u4f9b\u4e86\u7eaf\u6587\u672c\u63a7\u5236\u53f0\u73af\u5883\u7684\u670d\u52a1\u5668\u4e0a\uff0c\n\u5b83\u5c06\u662f\u8fd0\u884c\u671f\u95f4\u5b9a\u4f4d\u865a\u62df\u673a\u6027\u80fd\u95ee\u9898\u7684\u9996\u9009\u5de5\u5177\u3002\n\n#jstat \u547d\u4ee4\u4f7f\u7528\u683c\u5f0f\uff1a\njstat -&lt;option&gt; &#91;-t] &#91;-h&lt;lines&gt;] &lt;vmid&gt; &#91;&lt;interval&gt; &#91;&lt;count&gt;]]\n\njstat -class vmid \uff1a\u663e\u793a ClassLoader \u7684\u76f8\u5173\u4fe1\u606f\uff1b\njstat -compiler vmid \uff1a\u663e\u793a JIT \u7f16\u8bd1\u7684\u76f8\u5173\u4fe1\u606f\uff1b\njstat -gc vmid \uff1a\u663e\u793a\u4e0e GC \u76f8\u5173\u7684\u5806\u4fe1\u606f\uff1b\njstat -gccapacity vmid \uff1a\u663e\u793a\u5404\u4e2a\u4ee3\u7684\u5bb9\u91cf\u53ca\u4f7f\u7528\u60c5\u51b5\uff1b\njstat -gcnew vmid \uff1a\u663e\u793a\u65b0\u751f\u4ee3\u4fe1\u606f\uff1b\njstat -gcnewcapcacity vmid \uff1a\u663e\u793a\u65b0\u751f\u4ee3\u5927\u5c0f\u4e0e\u4f7f\u7528\u60c5\u51b5\uff1b\njstat -gcold vmid \uff1a\u663e\u793a\u8001\u5e74\u4ee3\u548c\u6c38\u4e45\u4ee3\u7684\u4fe1\u606f\uff1b\njstat -gcoldcapacity vmid \uff1a\u663e\u793a\u8001\u5e74\u4ee3\u7684\u5927\u5c0f\uff1b\njstat -gcpermcapacity vmid \uff1a\u663e\u793a\u6c38\u4e45\u4ee3\u5927\u5c0f\uff1b\njstat -gcutil vmid \uff1a\u663e\u793a\u5783\u573e\u6536\u96c6\u4fe1\u606f\uff1b\n\n\u53e6\u5916\uff0c\u52a0\u4e0a -t\u53c2\u6570\u53ef\u4ee5\u5728\u8f93\u51fa\u4fe1\u606f\u4e0a\u52a0\u4e00\u4e2a Timestamp \u5217\uff0c\u663e\u793a\u7a0b\u5e8f\u7684\u8fd0\u884c\u65f6\u95f4\u3002\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">1.2.6 jinfo: \u5b9e\u65f6\u5730\u67e5\u770b\u548c\u8c03\u6574\u865a\u62df\u673a\u5404\u9879\u914d\u7f6e\u53c2\u6570<\/h3>\n\n\n\n<p><em><\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>jinfo vmid :\n\u8f93\u51fa\u5f53\u524d jvm \u8fdb\u7a0b\u7684\u5168\u90e8\u53c2\u6570\u548c\u7cfb\u7edf\u5c5e\u6027\n\u7b2c\u4e00\u90e8\u5206\u662f\u7cfb\u7edf\u7684\u5c5e\u6027\uff0c\u7b2c\u4e8c\u90e8\u5206\u662f JVM \u7684\u53c2\u6570\u3002\n\n#jinfo -flag &lt;name&gt; vmid :\u8f93\u51fa\u5bf9\u5e94\u540d\u79f0\u7684\u53c2\u6570\u7684\u5177\u4f53\u503c\u3002\njinfo -flag MaxTenuringThreshold 300\njinfo -flag MaxHeapSize 300\njinfo -flag PrintGC 300\n\n#\u52a8\u6001\u4fee\u6539 jvm \u7684\u53c2\u6570\n\u4f7f\u7528 jinfo \u53ef\u4ee5\u5728\u4e0d\u91cd\u542f\u865a\u62df\u673a\u7684\u60c5\u51b5\u4e0b\uff0c\u53ef\u4ee5\u52a8\u6001\u7684\u4fee\u6539 jvm \u7684\u53c2\u6570\u3002\u5c24\u5176\u5728\u7ebf\u4e0a\u7684\u73af\u5883\u7279\u522b\u6709\u7528\n#jinfo -flag &#91;+|-]name vmid \u5f00\u542f\u6216\u8005\u5173\u95ed\u5bf9\u5e94\u540d\u79f0\u7684\u53c2\u6570\u3002\njinfo  -flag  +PrintGC 300\njinfo  -flag  PrintGC 300\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">1.3 \u5e38\u7528\u5206\u6790\u5de5\u5177<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.3.1 gc\u65e5\u5fd7\u5206\u6790<\/h3>\n\n\n\n<p><code>\u5982\u4f55\u83b7\u53d6gc\u65e5\u5fd7<\/code><em><\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#For Java 1.4, 5, 6, 7, 8 pass this JVM argument to your application: \n-XX:+PrintGCDetails \n-XX:+PrintGCDateStamps \n-XX:+PrintGC\n-XX:+PrintGCTimeStamps\n-XX:+PriintHeapAtGC\n-verbose:gc\n-Xloggc:&lt;file-path&gt;\n\n#For Java 9, pass the JVM argument: \n-Xlog:gc*:file=&lt;file-path&gt;\n\n#\u6ce8\u610f\n\u4e0a\u8ff0\u7684 file-path: is the location where GC log file will be written\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">1.3.1.1 gceasy (\u5728\u7ebf\u5206\u6790)<\/h4>\n\n\n\n<p><a href=\"https:\/\/blog.gceasy.io\/\">https:\/\/blog.gceasy.io\/<\/a><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1.3.1.2 gcviewer (\u79bb\u7ebf\u5206\u6790)<\/h4>\n\n\n\n<p><a href=\"https:\/\/links.jianshu.com\/go?to=https%3A%2F%2Fgithub.com%2Fchewiebug%2FGCViewer\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/chewiebug\/GCViewer<\/a> (\u9002\u4e8eJDK\u9ad8\u7248\u672c)<br><a href=\"https:\/\/links.jianshu.com\/go?to=https%3A%2F%2Fwww.tagtraum.com%2Fgcviewer.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.tagtraum.com\/gcviewer.html<\/a> (\u9002\u4e8eJDK\u4f4e\u7248\u672c)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1.3.2 \u5806\u5185\u5b58 dump \u6587\u4ef6\u5206\u6790<\/h3>\n\n\n\n<p><code>\u5982\u4f55\u83b7\u53d6\u5806\u5185\u5b58 dump \u6587\u4ef6<\/code><em><\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#1.\u5e94\u7528\u542f\u52a8\u65f6\u6dfb\u52a0JVM\u53c2\u6570\n-XX:+HeapDumpOnOutOfMemoryError \n-XX:HeapDumpPath=\/opt\/appName\/heapdump.hprof (\u53ef\u9009)\n-XX:-CreateMinidumpOnCrash (windows\u4e0a\u4f7f\u7528)\n\n#2.jmap, \u4e0d\u63a8\u8350, \u56e0\u4e3a\u7ebf\u4e0a\u5e94\u7528\u65f6, \u4f1a\u5bfc\u81f4GCPause\njmap -dump:format=b,file=&lt;file-path> &lt;pid>\n\n#3.jcmd\njcmd &lt;pid> GC.heap_dump &lt;file-path>\n\n#4.JVisualVM\u56fe\u5f62\u5de5\u5177\u91c7\u96c6\n\n\u7ed3\u5408sort\u547d\u4ee4\uff0c\u6765\u67e5\u770b\uff1a\u4e00\u4e2aJVM\u4e2d\u4ec0\u4e48\u7c7b\u7684\u5b9e\u4f8b\u6700\u591a\uff1f\u4e00\u4e2aJVM\u4e2d\u4ec0\u4e48\u7c7b\u7684\u5360\u7528\u7684\u5408\u8ba1\u5bb9\u91cf\u6700\u5927\uff1f \nQ:\u7edf\u8ba1\u5b9e\u4f8b\u6700\u591a\u7684\u7c7b \u524d\u5341\u4f4d\u6709\u54ea\u4e9b\uff1f \nA:jmap -histo pid | sort -n -r -k 2 | head -10 \nQ:\u7edf\u8ba1\u5408\u8ba1\u5bb9\u91cf\u524d\u5341\u7684\u7c7b\u6709\u54ea\u4e9b\uff1f \nA\uff1ajmap -histo pid | sort -n -r -k 3 | head -10\nQ:\u7edf\u8ba1\u5b9e\u4f8b\u6700\u591a\u7684\u7c7b \u524d\u5341\u4f4d\u6709\u54ea\u4e9b\uff1f\u5305\u542bxxx\u7684\n\nA\uff1ajmap -histo pid | grep xxx | sort -n -r -k 2 | head -10\n\n \n\n\u8bf4\u660e\uff1a \nsort\u547d\u4ee4\u7684\u90e8\u5206\u53c2\u6570\u542b\u4e49\u89e3\u91ca\u5982\u4e0b \n-n :\u4f7f\u7528\u201c\u201d\u7eaf\u6570\u5b57\u201d\u8fdb\u884c\u6392\u5e8f\uff08\u9ed8\u8ba4\u662f\u4ee5\u6587\u5b57\u7c7b\u578b\u6765\u6392\u5e8f\uff09 \n-r : \u53cd\u5411\u6392\u5e8f \n-k :\u4ee5\u90a3\u4e2a\u533a\u95f4\uff08field\uff09\u6765\u8fdb\u884c\u6392\u5e8f\u7684\u610f\u601d\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">1.3.2.1 heaphero (\u5728\u7ebf\u5206\u6790)<\/h4>\n\n\n\n<p><a href=\"https:\/\/blog.heaphero.io\/\">https:\/\/blog.heaphero.io\/<\/a><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1.3.2.2 MAT(\u79bb\u7ebf\u5206\u6790)<\/h4>\n\n\n\n<p><a href=\"https:\/\/links.jianshu.com\/go?to=http%3A%2F%2Fwww.eclipse.org%2Fmat%2F\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/www.eclipse.org\/mat\/<\/a> (\u4e0b\u8f7d\u538b\u7f29\u7248\u7684)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1.3.3 \u7ebf\u7a0b dump \u6587\u4ef6(java-core)\u5206\u6790<\/h3>\n\n\n\n<p><code>\u5982\u4f55\u83b7\u53d6\u7ebf\u7a0b dump (java-core)\u6587\u4ef6<\/code><em><\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#1.jstack\njstack -l  &lt;pid&gt; &gt;&gt; &lt;file-path&gt;\n\u5982: jstack -l 37320 &gt; \/opt\/tmp\/threadDump.txt\n\n#2.kill -3\nkill -3 &lt;pid&gt;\n\n#3.JVisualVM\u56fe\u5f62\u5de5\u5177\u91c7\u96c6\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">1.3.3.1 fastthread (\u5728\u7ebf\u5206\u6790)<\/h4>\n\n\n\n<p><a href=\"https:\/\/fastthread.io\/\">https:\/\/fastthread.io\/<\/a><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1.3.3.2 TMDA(\u79bb\u7ebf\u5206\u6790)<\/h4>\n\n\n\n<p><a href=\"https:\/\/www.ibm.com\/support\/pages\/ibm-thread-and-monitor-dump-analyzer-java-tmda\">https:\/\/www.ibm.com\/support\/pages\/ibm-thread-and-monitor-dump-analyzer-java-tmda<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1.3.4 \u56fd\u5185\u7efc\u5408\u5206\u6790\u5de5\u5177(\u542bJVM\u53c2\u6570\u914d\u7f6e)<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1.3.4.1 perfma (\u7b28\u9a6c\u7f51\u7edc)<\/h4>\n\n\n\n<p><a href=\"https:\/\/www.perfma.com\/\">https:\/\/www.perfma.com\/<\/a><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1.3.4.2 arthas<\/h4>\n\n\n\n<p><a href=\"https:\/\/links.jianshu.com\/go?to=https%3A%2F%2Fgithub.com%2Falibaba%2Farthas%2Fblob%2Fmaster%2FREADME_CN.md\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/alibaba\/arthas\/blob\/master\/README_CN.md<\/a><br><a href=\"https:\/\/links.jianshu.com\/go?to=https%3A%2F%2Fgitee.com%2Farthas%2Farthas\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/gitee.com\/arthas\/arthas<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1.3.5 JDK\u539f\u751f\u5de5\u5177<\/h3>\n\n\n\n<p><em><\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#JVisualVM(\u6700\u597d\u914d\u5957\u4e0b\u8f7d\u5404\u79cd\u63d2\u4ef6, \u5982VisualGC)\uff1a\nJDK\u81ea\u5e26\uff0c\u529f\u80fd\u5f3a\u5927\uff0c\u4e0eJProfiler\u7c7b\u4f3c\u3002\u63a8\u8350\u3002\n\n#Jconsole :\njdk\u81ea\u5e26\uff0c\u529f\u80fd\u7b80\u5355\uff0c\u4f46\u662f\u53ef\u4ee5\u5728\u7cfb\u7edf\u6709\u4e00\u5b9a\u8d1f\u8377\u7684\u60c5\u51b5\u4e0b\u4f7f\u7528\u3002\u5bf9\u5783\u573e\u56de\u6536\u7b97\u6cd5\u6709\u5f88\u8be6\u7ec6\u7684\u8ddf\u8e2a\u3002\n\n#JProfiler\uff1a\n\u5546\u4e1a\u8f6f\u4ef6\uff0c\u9700\u8981\u4ed8\u8d39\u3002\u529f\u80fd\u5f3a\u5927\u3002\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">1.4 \u7ebf\u4e0adebug<\/h2>\n\n\n\n<p>jdb\u547d\u4ee4<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1.5 \u7ebf\u4e0a\u95ee\u9898\u4e0d\u505c\u673a\u5b9a\u4f4d<\/h2>\n\n\n\n<p>btrace<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">2.\u5b9e\u6218\u90e8\u5206<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">2.1 Windows\u4e0a\u8fdc\u7a0b\u8fde\u63a5\u76d1\u63a7Linux\u670d\u52a1\u5668\u7684JVM<\/h2>\n\n\n\n<p><em><\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#1\u3001Linux\u670d\u52a1\u5668\u4e0a\u914d\u7f6e\uff1a\n\u5728Tomcat\u7684tomcat-wms\/bin\/catalina.sh\u4e2d\u6dfb\u52a0\nCATALINA_OPTS=\"-Xdebug -Xrunjdwp:transport=dt_socket,address=6090,server=y,suspend=n -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.0.199-Dcom.sun.management.jmxremote.port=8111 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -XX:+UnlockCommercialFeatures -XX:+FlightRecorder\"\n\n#2\u3001\u6dfb\u52a0\u76d1\u63a7\u7684\u914d\u7f6e\uff1a\n\u5728Tomcat\u7684tomcat-wms\/bin\/catalina.sh\u4e2d\u6dfb\u52a0\nJAVA_OPTS=\"\n-server\n-Xms8192m -Xmx8192m\n-XX:+UseParallelOldGC\n-XX:+UseAdaptiveSizePolicy\n-XX:MaxGCPauseMillis=500\n-XX:ParallelGCThreads=4\n-XX:+HeapDumpOnOutOfMemoryError\n-XX:+UnlockDiagnosticVMOptions\n-XX:+DebugNonSafepoints\n-XX:NativeMemoryTracking=detail\n-Denv_param=_simulation\n-Xss2m\n\"\n\n#3\u3001\u5728Windows\u7aef\u8fde\u63a5(\u89c1\u4e0b\u56fe)\nJava\u6027\u80fd\u8c03\u4f18\uff1a\u5229\u7528JMC\u5206\u6790\u6027\u80fd\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">2.2 cpu\u98d9\u5347<\/h2>\n\n\n\n<p><em><\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u5728\u7ebf\u4e0a\u6709\u65f6\u5019\u67d0\u4e2a\u65f6\u523b\uff0c\u53ef\u80fd\u4f1a\u51fa\u73b0\u5e94\u7528\u67d0\u4e2a\u65f6\u523b\u7a81\u7136cpu\u98d9\u5347\u7684\u95ee\u9898\u3002\n<\/code><\/pre>\n\n\n\n<p><code>step1:\u627e\u5230\u6700\u8017CPU\u7684\u8fdb\u7a0b: top -d 10<\/code><br><\/p>\n\n\n\n<p><code>step2:\u627e\u5230\u8be5\u8fdb\u7a0b\u4e0b\u6700\u8017\u8d39cpu\u7684\u7ebf\u7a0b top -Hp pid<\/code><br><\/p>\n\n\n\n<p><code>step3:\u8f6c\u6362\u8fdb\u5236 printf \"%x\\n\" 31236 (\u8f6c\u6362\u540e\u4e3a: 0x7a04)<\/code><\/p>\n\n\n\n<p><code>step4:\u8fc7\u6ee4\u6307\u5b9a\u7ebf\u7a0b\uff0c\u6253\u5370\u5806\u6808\u4fe1\u606f<\/code><em><\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#\u547d\u4ee4 \njstack pid |grep 'threadPid'  -C5 --color \n#\u793a\u4f8b(31214\u662f\u8fdb\u7a0bpid, '0x7a04'\u662f\u8fdb\u7a0b\u4e0b\u4e00\u4e2a\u5b50\u7ebf\u7a0bpid\u768416\u8fdb\u5236)\njstack 31214 |grep '0x7a04'  -C5 --color\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">2.4 java\u8fdb\u7a0b\u7a81\u7136\u6d88\u5931<\/h2>\n\n\n\n<p><em><\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>1.\u5982\u679cJVM\u53c2\u6570\u914d\u7f6e\u4e86\u5b95\u673a\u65f6\u751f\u6210dump\u6587\u4ef6\uff0c\u5219\u67e5\u770b\u76f8\u5173\u6587\u4ef6\uff0c\u540c\u65f6\u6392\u67e5\u5806dump\u6587\u4ef6\uff0c\u7ebf\u7a0bdump\u6587\u4ef6\uff0cgc\u6587\u4ef6\u3002\n\n2.\u4f7f\u7528dmesg\u547d\u4ee4\u67e5\u770b\u5177\u4f53\u539f\u56e0\nsudo dmesg|grep -i kill|less\n<\/code><\/pre>\n\n\n\n<p><em><\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u6267\u884c\u4e0a\u8ff0dmesg\u547d\u4ee4\u540e\uff0c\u5f97\u5230\n\"\n&#91;6710782.021013] java invoked oom-killer: gfp_mask=0xd0, order=0, oom_adj=0, oom_scoe_adj=0\n&#91;6710782.070639] &#91;&lt;ffffffff81118898&gt;] ? oom_kill_process+0x68\/0x140 \n&#91;6710782.257588] Task in \/LXC011175068174 killed as a result of limit of \/LXC011175068174 \n&#91;6710784.698347] Memory cgroup out of memory: Kill process 215701 (java) score 854 or sacrifice child \n&#91;6710784.707978] Killed process 215701, UID 679, (java) total-vm:11017300kB, anon-rss:7152432kB, file-rss:1232kB\n\"\n\u4ee5\u4e0a\u8868\u660e\uff0c\u5bf9\u5e94\u7684java\u8fdb\u7a0b\u88ab\u7cfb\u7edf\u7684OOM Killer\u7ed9\u5e72\u6389\u4e86\uff0c\u5f97\u5206\u4e3a854\u3002\n\n\u89e3\u91ca\u4e00\u4e0bOOM killer\uff08Out-Of-Memory killer\uff09\uff0c\u8be5\u673a\u5236\u4f1a\u76d1\u63a7\u673a\u5668\u7684\u5185\u5b58\u8d44\u6e90\u6d88\u8017\u3002\n\n\u5f53\u673a\u5668\u5185\u5b58\u8017\u5c3d\u524d\uff0c\u8be5\u673a\u5236\u4f1a\u626b\u63cf\u6240\u6709\u7684\u8fdb\u7a0b\uff08\u6309\u7167\u4e00\u5b9a\u89c4\u5219\u8ba1\u7b97\uff0c\u5185\u5b58\u5360\u7528\uff0c\u65f6\u95f4\u7b49\uff09\uff0c\u6311\u9009\u51fa\u5f97\u5206\u6700\u9ad8\u7684\u8fdb\u7a0b\uff0c\u7136\u540e\u6740\u6b7b\uff0c\u4ece\u800c\u4fdd\u62a4\u673a\u5668\u3002\n\ndmesg \u65e5\u5fd7\u65f6\u95f4\u8f6c\u6362\u516c\u5f0f:\n\nlog\u5b9e\u9645\u65f6\u95f4=\u683c\u6797\u5a01\u6cbb1970-01-01+(\u5f53\u524d\u65f6\u95f4\u79d2\u6570-\u7cfb\u7edf\u542f\u52a8\u81f3\u4eca\u7684\u79d2\u6570+dmesg\u6253\u5370\u7684log\u65f6\u95f4)\u79d2\u6570\uff1a\ndate -d \"1970-01-01 UTC `echo \"$(date +%s)-$(cat \/proc\/uptime|cut -f 1 -d' ')+12288812.926194\"|bc ` seconds\"\n\n\u5269\u4e0b\u7684\u5c31\u662f\u770b\u770b\u662f\u4ec0\u4e48\u539f\u56e0\u5bfc\u81f4\u7684OOM\u4e86\u3002\n<\/code><\/pre>\n\n\n\n<p><code>\u53c2\u8003\u8d44\u6e90<\/code><br><a rel=\"noreferrer noopener\" href=\"https:\/\/links.jianshu.com\/go?to=https%3A%2F%2Fwww.cnblogs.com%2Fliuxl21%2Fp%2F10763293.html\" target=\"_blank\">https:\/\/www.cnblogs.com\/liuxl21\/p\/10763293.html<\/a> (JMC\u76d1\u63a7\u8fdc\u7a0b\u4e3b\u673a)<br><a rel=\"noreferrer noopener\" href=\"https:\/\/links.jianshu.com\/go?to=https%3A%2F%2Fwww.cnblogs.com%2Fliangzs%2Fp%2F8489321.html\" target=\"_blank\">https:\/\/www.cnblogs.com\/liangzs\/p\/8489321.html<\/a> (jvm\u5185\u5b58\u5feb\u7167dump\u6587\u4ef6\u592a\u5927)<br><a rel=\"noreferrer noopener\" href=\"https:\/\/www.jianshu.com\/p\/a49835c7f7ed\" target=\"_blank\">https:\/\/www.jianshu.com\/p\/a49835c7f7ed<\/a> (jvm \u547d\u4ee4\u884c\u5c0f\u7ed3)<br><a rel=\"noreferrer noopener\" href=\"https:\/\/links.jianshu.com\/go?to=https%3A%2F%2Fmp.weixin.qq.com%2Fs%2FhjwkmTm2Ze6qz7lnD8ThJw\" target=\"_blank\">https:\/\/mp.weixin.qq.com\/s\/hjwkmTm2Ze6qz7lnD8ThJw<\/a> (\u95ee\u9898\u5206\u6790)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u539f\u6587\uff1aJVM\u7cfb\u5217(2) JVM\u76d1\u63a7\u5de5\u5177 &#8211; \u7b80\u4e66 (jianshu.com) 0.\u53ef\u9009GC\u914d\u7f6e 0 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"_links":{"self":[{"href":"https:\/\/www.zeroheart.xyz\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2289"}],"collection":[{"href":"https:\/\/www.zeroheart.xyz\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.zeroheart.xyz\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.zeroheart.xyz\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.zeroheart.xyz\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2289"}],"version-history":[{"count":10,"href":"https:\/\/www.zeroheart.xyz\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2289\/revisions"}],"predecessor-version":[{"id":4014,"href":"https:\/\/www.zeroheart.xyz\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2289\/revisions\/4014"}],"wp:attachment":[{"href":"https:\/\/www.zeroheart.xyz\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2289"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.zeroheart.xyz\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2289"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zeroheart.xyz\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2289"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}