From 55147e7cc6872fa55cfbf02cceea1db25c65e7df Mon Sep 17 00:00:00 2001 From: Fatpandac Date: Fri, 15 Jul 2022 22:37:32 +0800 Subject: [PATCH] feat(docs): new docs site by vuepress2 (#2220) --- .github/workflows/auto-prettier.yaml | 21 + site-vuepress/.gitignore | 3 + site-vuepress/.prettierignore | 2 + site-vuepress/.prettierrc.json | 3 + site-vuepress/README.md | 14 + site-vuepress/docs/.vuepress/client.js | 53 + site-vuepress/docs/.vuepress/config.js | 109 + site-vuepress/docs/.vuepress/configs/head.js | 20 + .../docs/.vuepress/configs/navbar/en.js | 52 + .../docs/.vuepress/configs/navbar/zh.js | 52 + .../docs/.vuepress/configs/sidebar/en.js | 148 + .../docs/.vuepress/configs/sidebar/zh.js | 152 + .../docs/.vuepress/oldContributorsData.json | 2274 ++++++ .../public/doc/arthas-tutorials.html | 1147 +++ .../public/images}/alibabacloud_hotreload.png | Bin .../public/images}/arthas-output-svg.jpg | Bin .../public/images}/arthas-output.jpg | Bin .../public/images}/arthas-tunnel-server.png | Bin .../public/images}/arthas-web-ui.png | Bin .../docs/.vuepress/public/images/arthas.png | Bin 0 -> 16775 bytes .../.vuepress/public/images/arthas_dark.png | Bin 0 -> 5621 bytes .../.vuepress/public/images/arthas_light.png | Bin 0 -> 5656 bytes .../.vuepress/public/images/dashboard.png | Bin 0 -> 809884 bytes .../.vuepress/public/images}/dingding2_qr.jpg | Bin .../public/images}/dingding_group_search.png | Bin .../.vuepress/public/images}/dingding_qr.jpg | Bin .../docs/.vuepress/public/images}/favicon.ico | Bin .../docs/.vuepress/public/images}/logo.png | Bin .../.vuepress/public/images}/qqgroup2_qr.jpg | Bin .../.vuepress/public/images}/qqgroup_qr.jpg | Bin .../.vuepress/public/images}/qr-jd-2019.png | Bin .../public/images}/qrcode_gongzhonghao.jpg | Bin .../docs/.vuepress/public/images/trace.png | Bin 0 -> 123912 bytes .../public/images}/tunnel-server-agents.png | Bin .../public/images}/tunnel-server-apps.png | Bin .../public/images/users/users_alibaba.png | Bin 0 -> 9743 bytes .../public/images/users/users_didi.png | Bin 0 -> 12450 bytes .../public/images/users/users_icbc.png | Bin 0 -> 11211 bytes .../public/images/users/users_kaola.png | Bin 0 -> 8392 bytes .../public/images/users/users_qunar.png | Bin 0 -> 9974 bytes .../public/images/users/users_telecom.png | Bin 0 -> 18758 bytes .../public/images/users/users_weidian.png | Bin 0 -> 7389 bytes .../public/images/users/users_yinlian.png | Bin 0 -> 13213 bytes .../public/images/web-console-local.png | Bin 0 -> 50070 bytes .../docs/.vuepress/styles/index.scss | 3 + .../.vuepress/theme/components/AutoLink.vue | 115 + .../docs/.vuepress/theme/components/Badge.vue | 72 + .../docs/.vuepress/theme/components/Home.vue | 18 + .../.vuepress/theme/components/HomeBadges.vue | 38 + .../theme/components/HomeFeatures.vue | 36 + .../.vuepress/theme/components/HomeHero.vue | 102 + .../theme/components/HomeUserBoards.vue | 37 + .../theme/components/NavbarDropdown.vue | 127 + .../.vuepress/theme/components/UserBoard.vue | 21 + .../.vuepress/theme/components/icons/Fork.vue | 42 + .../theme/components/icons/GitHub.vue | 19 + .../.vuepress/theme/components/icons/Star.vue | 32 + .../theme/components/icons/Translate.vue | 15 + site-vuepress/docs/.vuepress/theme/index.js | 18 + site-vuepress/docs/README.md | 53 + site-vuepress/docs/doc/README.md | 24 + site-vuepress/docs/doc/advanced-use.md | 157 + site-vuepress/docs/doc/advice-class.md | 43 + site-vuepress/docs/doc/agent.md | 13 + site-vuepress/docs/doc/arthas-properties.md | 62 + .../docs/doc}/arthas3.md | 75 +- site-vuepress/docs/doc/async.md | 80 + .../sphinx => site-vuepress/docs/doc}/auth.md | 42 +- .../docs/doc}/base64.md | 9 +- .../docs/doc}/batch-support.md | 23 +- .../sphinx => site-vuepress/docs/doc}/cat.md | 10 +- .../docs/doc}/classloader.md | 52 +- site-vuepress/docs/doc/cls.md | 7 + site-vuepress/docs/doc/commands.md | 50 + site-vuepress/docs/doc/contact-us.md | 35 + .../docs/doc}/dashboard.md | 58 +- site-vuepress/docs/doc/docker.md | 118 + .../docs/doc}/download.md | 15 +- site-vuepress/docs/doc/dump.md | 65 + .../sphinx => site-vuepress/docs/doc}/echo.md | 10 +- .../sphinx => site-vuepress/docs/doc}/faq.md | 56 +- site-vuepress/docs/doc/getstatic.md | 70 + .../sphinx => site-vuepress/docs/doc}/grep.md | 10 +- .../docs/doc}/groovy.md | 23 +- .../docs/doc}/heapdump.md | 17 +- .../sphinx => site-vuepress/docs/doc}/help.md | 22 +- site-vuepress/docs/doc/history.md | 31 + site-vuepress/docs/doc/http-api.md | 684 ++ site-vuepress/docs/doc/idea-plugin.md | 23 + .../docs/doc}/install-detail.md | 46 +- .../sphinx => site-vuepress/docs/doc}/jad.md | 35 +- .../sphinx => site-vuepress/docs/doc}/jvm.md | 55 +- .../docs/doc}/keymap.md | 69 +- .../docs/doc}/logger.md | 44 +- site-vuepress/docs/doc/manual-install.md | 112 + site-vuepress/docs/doc/mbean.md | 68 + .../sphinx => site-vuepress/docs/doc}/mc.md | 15 +- .../docs/doc}/memory.md | 7 +- .../docs/doc}/monitor.md | 87 +- .../sphinx => site-vuepress/docs/doc}/ognl.md | 51 +- .../docs/doc}/options.md | 73 +- .../docs/doc}/perfcounter.md | 11 +- .../docs/doc}/profiler.md | 91 +- .../sphinx => site-vuepress/docs/doc}/pwd.md | 10 +- .../docs/doc}/quick-start.md | 37 +- site-vuepress/docs/doc/quit.md | 7 + site-vuepress/docs/doc/redefine.md | 119 + site-vuepress/docs/doc/release-notes.md | 130 + .../docs/doc}/reset.md | 9 +- .../docs/doc}/retransform.md | 102 +- .../docs/doc}/save-log.md | 17 +- site-vuepress/docs/doc/sc.md | 109 + site-vuepress/docs/doc/session.md | 20 + .../sphinx => site-vuepress/docs/doc}/sm.md | 27 +- .../docs/doc}/spring-boot-starter.md | 40 +- .../docs/doc}/stack.md | 28 +- .../docs/doc}/start-arthas.md | 24 +- site-vuepress/docs/doc/stop.md | 7 + .../docs/doc}/sysenv.md | 14 +- .../docs/doc}/sysprop.md | 14 +- .../sphinx => site-vuepress/docs/doc}/tee.md | 12 +- .../docs/doc}/thread.md | 70 +- .../docs/doc}/trace.md | 133 +- .../sphinx => site-vuepress/docs/doc}/tt.md | 82 +- site-vuepress/docs/doc/tunnel.md | 160 + .../docs/doc}/version.md | 4 +- .../docs/doc}/vmoption.md | 13 +- .../docs/doc}/vmtool.md | 34 +- .../docs/doc}/watch.md | 100 +- site-vuepress/docs/doc/web-console.md | 36 + site-vuepress/docs/en/README.md | 55 + .../docs/en/doc/README.md | 61 +- site-vuepress/docs/en/doc/advanced-use.md | 157 + site-vuepress/docs/en/doc/advice-class.md | 41 + .../en => site-vuepress/docs/en/doc}/agent.md | 9 +- .../docs/en/doc}/arthas-properties.md | 36 +- .../en => site-vuepress/docs/en/doc}/async.md | 35 +- .../en => site-vuepress/docs/en/doc}/auth.md | 25 +- .../docs/en/doc}/base64.md | 9 +- .../docs/en/doc}/batch-support.md | 12 +- .../en => site-vuepress/docs/en/doc}/cat.md | 10 +- .../docs/en/doc}/classloader.md | 27 +- site-vuepress/docs/en/doc/cls.md | 7 + site-vuepress/docs/en/doc/commands.md | 56 + .../docs/en/doc}/contact-us.md | 27 +- .../docs/en/doc}/dashboard.md | 61 +- .../docs/en/doc}/docker.md | 55 +- .../docs/en/doc}/download.md | 5 +- .../en => site-vuepress/docs/en/doc}/dump.md | 25 +- .../en => site-vuepress/docs/en/doc}/echo.md | 10 +- .../en => site-vuepress/docs/en/doc}/faq.md | 32 +- .../docs/en/doc}/getstatic.md | 14 +- .../en => site-vuepress/docs/en/doc}/grep.md | 10 +- .../docs/en/doc}/groovy.md | 23 +- .../docs/en/doc}/heapdump.md | 11 +- .../en => site-vuepress/docs/en/doc}/help.md | 12 +- .../docs/en/doc}/history.md | 8 +- .../docs/en/doc}/http-api.md | 395 +- site-vuepress/docs/en/doc/idea-plugin.md | 9 + .../docs/en/doc}/install-detail.md | 31 +- .../en => site-vuepress/docs/en/doc}/jad.md | 29 +- .../en => site-vuepress/docs/en/doc}/jvm.md | 54 +- site-vuepress/docs/en/doc/keymap.md | 69 + .../docs/en/doc}/logger.md | 19 +- site-vuepress/docs/en/doc/manual-install.md | 109 + site-vuepress/docs/en/doc/mbean.md | 68 + .../en => site-vuepress/docs/en/doc}/mc.md | 11 +- .../docs/en/doc}/memory.md | 5 +- .../docs/en/doc}/monitor.md | 84 +- .../en => site-vuepress/docs/en/doc}/ognl.md | 42 +- .../docs/en/doc}/options.md | 54 +- .../docs/en/doc}/perfcounter.md | 9 +- .../docs/en/doc}/profiler.md | 58 +- .../en => site-vuepress/docs/en/doc}/pwd.md | 10 +- .../docs/en/doc}/quick-start.md | 9 +- site-vuepress/docs/en/doc/quit.md | 7 + site-vuepress/docs/en/doc/redefine.md | 119 + site-vuepress/docs/en/doc/release-notes.md | 122 + .../en => site-vuepress/docs/en/doc}/reset.md | 7 +- .../docs/en/doc}/retransform.md | 100 +- .../docs/en/doc}/save-log.md | 36 +- site-vuepress/docs/en/doc/sc.md | 107 + .../docs/en/doc}/session.md | 13 +- .../en => site-vuepress/docs/en/doc}/sm.md | 29 +- .../docs/en/doc}/spring-boot-starter.md | 23 +- .../en => site-vuepress/docs/en/doc}/stack.md | 30 +- .../docs/en/doc}/start-arthas.md | 22 +- .../en => site-vuepress/docs/en/doc}/stop.md | 8 +- .../docs/en/doc}/sysenv.md | 14 +- .../docs/en/doc}/sysprop.md | 12 +- .../en => site-vuepress/docs/en/doc}/tee.md | 12 +- .../docs/en/doc}/thread.md | 56 +- .../en => site-vuepress/docs/en/doc}/trace.md | 103 +- .../en => site-vuepress/docs/en/doc}/tt.md | 77 +- .../docs/en/doc}/tunnel.md | 36 +- .../docs/en/doc}/version.md | 4 +- .../docs/en/doc}/vmoption.md | 9 +- .../docs/en/doc}/vmtool.md | 27 +- .../en => site-vuepress/docs/en/doc}/watch.md | 99 +- .../docs/en/doc}/web-console.md | 25 +- site-vuepress/package-lock.json | 6530 +++++++++++++++++ site-vuepress/package.json | 20 + site/src/site/sphinx/README.md | 1 - .../_include_html/arthas-tutorials.html | 1026 --- site/src/site/sphinx/advanced-use.md | 172 - site/src/site/sphinx/advice-class.md | 47 - site/src/site/sphinx/agent.md | 15 - site/src/site/sphinx/arthas-properties.md | 60 - site/src/site/sphinx/async.md | 69 - site/src/site/sphinx/cls.md | 7 - site/src/site/sphinx/commands.md | 57 - site/src/site/sphinx/contact-us.md | 44 - site/src/site/sphinx/docker.md | 119 - site/src/site/sphinx/dump.md | 64 - site/src/site/sphinx/en/README.md | 1 - site/src/site/sphinx/en/advanced-use.md | 164 - site/src/site/sphinx/en/advice-class.md | 44 - site/src/site/sphinx/en/cls.md | 7 - site/src/site/sphinx/en/commands.md | 61 - site/src/site/sphinx/en/idea-plugin.md | 14 - site/src/site/sphinx/en/keymap.md | 74 - site/src/site/sphinx/en/manual-install.md | 114 - site/src/site/sphinx/en/mbean.md | 66 - site/src/site/sphinx/en/quit.md | 7 - site/src/site/sphinx/en/redefine.md | 110 - site/src/site/sphinx/en/release-notes.md | 144 - site/src/site/sphinx/en/sc.md | 101 - site/src/site/sphinx/getstatic.md | 74 - site/src/site/sphinx/history.md | 31 - site/src/site/sphinx/http-api.md | 680 -- site/src/site/sphinx/idea-plugin.md | 16 - site/src/site/sphinx/index.md | 53 - site/src/site/sphinx/manual-install.md | 112 - site/src/site/sphinx/mbean.md | 65 - site/src/site/sphinx/quit.md | 7 - site/src/site/sphinx/redefine.md | 107 - site/src/site/sphinx/release-notes.md | 152 - site/src/site/sphinx/sc.md | 105 - site/src/site/sphinx/session.md | 22 - site/src/site/sphinx/stop.md | 7 - site/src/site/sphinx/tunnel.md | 162 - site/src/site/sphinx/web-console.md | 32 - 242 files changed, 16423 insertions(+), 6139 deletions(-) create mode 100644 .github/workflows/auto-prettier.yaml create mode 100644 site-vuepress/.gitignore create mode 100644 site-vuepress/.prettierignore create mode 100644 site-vuepress/.prettierrc.json create mode 100644 site-vuepress/README.md create mode 100644 site-vuepress/docs/.vuepress/client.js create mode 100644 site-vuepress/docs/.vuepress/config.js create mode 100644 site-vuepress/docs/.vuepress/configs/head.js create mode 100644 site-vuepress/docs/.vuepress/configs/navbar/en.js create mode 100644 site-vuepress/docs/.vuepress/configs/navbar/zh.js create mode 100644 site-vuepress/docs/.vuepress/configs/sidebar/en.js create mode 100644 site-vuepress/docs/.vuepress/configs/sidebar/zh.js create mode 100644 site-vuepress/docs/.vuepress/oldContributorsData.json create mode 100644 site-vuepress/docs/.vuepress/public/doc/arthas-tutorials.html rename {site/src/site/sphinx/_static => site-vuepress/docs/.vuepress/public/images}/alibabacloud_hotreload.png (100%) rename {site/src/site/sphinx/_static => site-vuepress/docs/.vuepress/public/images}/arthas-output-svg.jpg (100%) rename {site/src/site/sphinx/_static => site-vuepress/docs/.vuepress/public/images}/arthas-output.jpg (100%) rename {site/src/site/sphinx/_static => site-vuepress/docs/.vuepress/public/images}/arthas-tunnel-server.png (100%) rename {site/src/site/sphinx/_static => site-vuepress/docs/.vuepress/public/images}/arthas-web-ui.png (100%) create mode 100644 site-vuepress/docs/.vuepress/public/images/arthas.png create mode 100644 site-vuepress/docs/.vuepress/public/images/arthas_dark.png create mode 100644 site-vuepress/docs/.vuepress/public/images/arthas_light.png create mode 100644 site-vuepress/docs/.vuepress/public/images/dashboard.png rename {site/src/site/sphinx/_static => site-vuepress/docs/.vuepress/public/images}/dingding2_qr.jpg (100%) rename {site/src/site/sphinx/_static => site-vuepress/docs/.vuepress/public/images}/dingding_group_search.png (100%) rename {site/src/site/sphinx/_static => site-vuepress/docs/.vuepress/public/images}/dingding_qr.jpg (100%) rename {site/src/site/sphinx => site-vuepress/docs/.vuepress/public/images}/favicon.ico (100%) rename {site/src/site/sphinx/_static => site-vuepress/docs/.vuepress/public/images}/logo.png (100%) rename {site/src/site/sphinx/_static => site-vuepress/docs/.vuepress/public/images}/qqgroup2_qr.jpg (100%) rename {site/src/site/sphinx/_static => site-vuepress/docs/.vuepress/public/images}/qqgroup_qr.jpg (100%) rename {site/src/site/sphinx/_static => site-vuepress/docs/.vuepress/public/images}/qr-jd-2019.png (100%) rename {site/src/site/sphinx/_static => site-vuepress/docs/.vuepress/public/images}/qrcode_gongzhonghao.jpg (100%) create mode 100644 site-vuepress/docs/.vuepress/public/images/trace.png rename {site/src/site/sphinx/_static => site-vuepress/docs/.vuepress/public/images}/tunnel-server-agents.png (100%) rename {site/src/site/sphinx/_static => site-vuepress/docs/.vuepress/public/images}/tunnel-server-apps.png (100%) create mode 100644 site-vuepress/docs/.vuepress/public/images/users/users_alibaba.png create mode 100644 site-vuepress/docs/.vuepress/public/images/users/users_didi.png create mode 100644 site-vuepress/docs/.vuepress/public/images/users/users_icbc.png create mode 100644 site-vuepress/docs/.vuepress/public/images/users/users_kaola.png create mode 100644 site-vuepress/docs/.vuepress/public/images/users/users_qunar.png create mode 100644 site-vuepress/docs/.vuepress/public/images/users/users_telecom.png create mode 100644 site-vuepress/docs/.vuepress/public/images/users/users_weidian.png create mode 100644 site-vuepress/docs/.vuepress/public/images/users/users_yinlian.png create mode 100644 site-vuepress/docs/.vuepress/public/images/web-console-local.png create mode 100644 site-vuepress/docs/.vuepress/styles/index.scss create mode 100644 site-vuepress/docs/.vuepress/theme/components/AutoLink.vue create mode 100644 site-vuepress/docs/.vuepress/theme/components/Badge.vue create mode 100644 site-vuepress/docs/.vuepress/theme/components/Home.vue create mode 100644 site-vuepress/docs/.vuepress/theme/components/HomeBadges.vue create mode 100644 site-vuepress/docs/.vuepress/theme/components/HomeFeatures.vue create mode 100644 site-vuepress/docs/.vuepress/theme/components/HomeHero.vue create mode 100644 site-vuepress/docs/.vuepress/theme/components/HomeUserBoards.vue create mode 100644 site-vuepress/docs/.vuepress/theme/components/NavbarDropdown.vue create mode 100644 site-vuepress/docs/.vuepress/theme/components/UserBoard.vue create mode 100644 site-vuepress/docs/.vuepress/theme/components/icons/Fork.vue create mode 100644 site-vuepress/docs/.vuepress/theme/components/icons/GitHub.vue create mode 100644 site-vuepress/docs/.vuepress/theme/components/icons/Star.vue create mode 100644 site-vuepress/docs/.vuepress/theme/components/icons/Translate.vue create mode 100644 site-vuepress/docs/.vuepress/theme/index.js create mode 100644 site-vuepress/docs/README.md create mode 100644 site-vuepress/docs/doc/README.md create mode 100644 site-vuepress/docs/doc/advanced-use.md create mode 100644 site-vuepress/docs/doc/advice-class.md create mode 100644 site-vuepress/docs/doc/agent.md create mode 100644 site-vuepress/docs/doc/arthas-properties.md rename {site/src/site/sphinx => site-vuepress/docs/doc}/arthas3.md (62%) create mode 100644 site-vuepress/docs/doc/async.md rename {site/src/site/sphinx => site-vuepress/docs/doc}/auth.md (57%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/base64.md (85%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/batch-support.md (53%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/cat.md (61%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/classloader.md (72%) create mode 100644 site-vuepress/docs/doc/cls.md create mode 100644 site-vuepress/docs/doc/commands.md create mode 100644 site-vuepress/docs/doc/contact-us.md rename {site/src/site/sphinx => site-vuepress/docs/doc}/dashboard.md (61%) create mode 100644 site-vuepress/docs/doc/docker.md rename {site/src/site/sphinx => site-vuepress/docs/doc}/download.md (88%) create mode 100644 site-vuepress/docs/doc/dump.md rename {site/src/site/sphinx => site-vuepress/docs/doc}/echo.md (62%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/faq.md (58%) create mode 100644 site-vuepress/docs/doc/getstatic.md rename {site/src/site/sphinx => site-vuepress/docs/doc}/grep.md (97%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/groovy.md (83%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/heapdump.md (77%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/help.md (87%) create mode 100644 site-vuepress/docs/doc/history.md create mode 100644 site-vuepress/docs/doc/http-api.md create mode 100644 site-vuepress/docs/doc/idea-plugin.md rename {site/src/site/sphinx => site-vuepress/docs/doc}/install-detail.md (67%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/jad.md (73%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/jvm.md (69%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/keymap.md (56%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/logger.md (84%) create mode 100644 site-vuepress/docs/doc/manual-install.md create mode 100644 site-vuepress/docs/doc/mbean.md rename {site/src/site/sphinx => site-vuepress/docs/doc}/mc.md (62%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/memory.md (96%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/monitor.md (74%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/ognl.md (53%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/options.md (56%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/perfcounter.md (93%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/profiler.md (53%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/pwd.md (60%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/quick-start.md (86%) create mode 100644 site-vuepress/docs/doc/quit.md create mode 100644 site-vuepress/docs/doc/redefine.md create mode 100644 site-vuepress/docs/doc/release-notes.md rename {site/src/site/sphinx => site-vuepress/docs/doc}/reset.md (90%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/retransform.md (50%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/save-log.md (55%) create mode 100644 site-vuepress/docs/doc/sc.md create mode 100644 site-vuepress/docs/doc/session.md rename {site/src/site/sphinx => site-vuepress/docs/doc}/sm.md (70%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/spring-boot-starter.md (62%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/stack.md (74%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/start-arthas.md (76%) create mode 100644 site-vuepress/docs/doc/stop.md rename {site/src/site/sphinx => site-vuepress/docs/doc}/sysenv.md (94%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/sysprop.md (98%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/tee.md (68%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/thread.md (78%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/trace.md (66%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/tt.md (72%) create mode 100644 site-vuepress/docs/doc/tunnel.md rename {site/src/site/sphinx => site-vuepress/docs/doc}/version.md (88%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/vmoption.md (94%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/vmtool.md (76%) rename {site/src/site/sphinx => site-vuepress/docs/doc}/watch.md (70%) create mode 100644 site-vuepress/docs/doc/web-console.md create mode 100644 site-vuepress/docs/en/README.md rename site/src/site/sphinx/en/index.md => site-vuepress/docs/en/doc/README.md (52%) create mode 100644 site-vuepress/docs/en/doc/advanced-use.md create mode 100644 site-vuepress/docs/en/doc/advice-class.md rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/agent.md (89%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/arthas-properties.md (56%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/async.md (79%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/auth.md (81%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/base64.md (86%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/batch-support.md (81%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/cat.md (72%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/classloader.md (76%) create mode 100644 site-vuepress/docs/en/doc/cls.md create mode 100644 site-vuepress/docs/en/doc/commands.md rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/contact-us.md (63%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/dashboard.md (68%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/docker.md (67%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/download.md (98%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/dump.md (64%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/echo.md (67%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/faq.md (88%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/getstatic.md (84%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/grep.md (96%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/groovy.md (84%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/heapdump.md (89%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/help.md (96%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/history.md (66%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/http-api.md (68%) create mode 100644 site-vuepress/docs/en/doc/idea-plugin.md rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/install-detail.md (80%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/jad.md (79%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/jvm.md (70%) create mode 100644 site-vuepress/docs/en/doc/keymap.md rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/logger.md (95%) create mode 100644 site-vuepress/docs/en/doc/manual-install.md create mode 100644 site-vuepress/docs/en/doc/mbean.md rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/mc.md (72%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/memory.md (98%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/monitor.md (73%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/ognl.md (71%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/options.md (62%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/perfcounter.md (94%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/profiler.md (71%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/pwd.md (69%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/quick-start.md (97%) create mode 100644 site-vuepress/docs/en/doc/quit.md create mode 100644 site-vuepress/docs/en/doc/redefine.md create mode 100644 site-vuepress/docs/en/doc/release-notes.md rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/reset.md (90%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/retransform.md (58%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/save-log.md (53%) create mode 100644 site-vuepress/docs/en/doc/sc.md rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/session.md (62%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/sm.md (68%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/spring-boot-starter.md (79%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/stack.md (75%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/start-arthas.md (82%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/stop.md (56%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/sysenv.md (94%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/sysprop.md (98%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/tee.md (66%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/thread.md (88%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/trace.md (77%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/tt.md (77%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/tunnel.md (89%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/version.md (84%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/vmoption.md (97%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/vmtool.md (76%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/watch.md (74%) rename {site/src/site/sphinx/en => site-vuepress/docs/en/doc}/web-console.md (65%) create mode 100644 site-vuepress/package-lock.json create mode 100644 site-vuepress/package.json delete mode 100644 site/src/site/sphinx/README.md delete mode 100644 site/src/site/sphinx/_include_html/arthas-tutorials.html delete mode 100644 site/src/site/sphinx/advanced-use.md delete mode 100644 site/src/site/sphinx/advice-class.md delete mode 100644 site/src/site/sphinx/agent.md delete mode 100644 site/src/site/sphinx/arthas-properties.md delete mode 100644 site/src/site/sphinx/async.md delete mode 100644 site/src/site/sphinx/cls.md delete mode 100644 site/src/site/sphinx/commands.md delete mode 100644 site/src/site/sphinx/contact-us.md delete mode 100644 site/src/site/sphinx/docker.md delete mode 100644 site/src/site/sphinx/dump.md delete mode 100644 site/src/site/sphinx/en/README.md delete mode 100644 site/src/site/sphinx/en/advanced-use.md delete mode 100644 site/src/site/sphinx/en/advice-class.md delete mode 100644 site/src/site/sphinx/en/cls.md delete mode 100644 site/src/site/sphinx/en/commands.md delete mode 100644 site/src/site/sphinx/en/idea-plugin.md delete mode 100644 site/src/site/sphinx/en/keymap.md delete mode 100644 site/src/site/sphinx/en/manual-install.md delete mode 100644 site/src/site/sphinx/en/mbean.md delete mode 100644 site/src/site/sphinx/en/quit.md delete mode 100644 site/src/site/sphinx/en/redefine.md delete mode 100644 site/src/site/sphinx/en/release-notes.md delete mode 100644 site/src/site/sphinx/en/sc.md delete mode 100644 site/src/site/sphinx/getstatic.md delete mode 100644 site/src/site/sphinx/history.md delete mode 100644 site/src/site/sphinx/http-api.md delete mode 100644 site/src/site/sphinx/idea-plugin.md delete mode 100644 site/src/site/sphinx/index.md delete mode 100644 site/src/site/sphinx/manual-install.md delete mode 100644 site/src/site/sphinx/mbean.md delete mode 100644 site/src/site/sphinx/quit.md delete mode 100644 site/src/site/sphinx/redefine.md delete mode 100644 site/src/site/sphinx/release-notes.md delete mode 100644 site/src/site/sphinx/sc.md delete mode 100644 site/src/site/sphinx/session.md delete mode 100644 site/src/site/sphinx/stop.md delete mode 100644 site/src/site/sphinx/tunnel.md delete mode 100644 site/src/site/sphinx/web-console.md diff --git a/.github/workflows/auto-prettier.yaml b/.github/workflows/auto-prettier.yaml new file mode 100644 index 000000000..c4c9ae0df --- /dev/null +++ b/.github/workflows/auto-prettier.yaml @@ -0,0 +1,21 @@ +name: auto prettier + +on: + push: + paths: + - 'site-vuepress/**' + +jobs: + prettier: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + ref: ${{ github.head_ref }} + + - name: Prettify code + uses: creyD/prettier_action@v4.2 + with: + prettier_options: --config ./site-vuepress/.prettierrc.json --ignore-path ./site-vuepress/.prettierignore --write ./site-vuepress \ No newline at end of file diff --git a/site-vuepress/.gitignore b/site-vuepress/.gitignore new file mode 100644 index 000000000..d46af7243 --- /dev/null +++ b/site-vuepress/.gitignore @@ -0,0 +1,3 @@ +node_modules +.temp +.cache diff --git a/site-vuepress/.prettierignore b/site-vuepress/.prettierignore new file mode 100644 index 000000000..feba52572 --- /dev/null +++ b/site-vuepress/.prettierignore @@ -0,0 +1,2 @@ +.cache +.temp \ No newline at end of file diff --git a/site-vuepress/.prettierrc.json b/site-vuepress/.prettierrc.json new file mode 100644 index 000000000..75fa13412 --- /dev/null +++ b/site-vuepress/.prettierrc.json @@ -0,0 +1,3 @@ +{ + "tabWidth": 2 +} diff --git a/site-vuepress/README.md b/site-vuepress/README.md new file mode 100644 index 000000000..b999e5662 --- /dev/null +++ b/site-vuepress/README.md @@ -0,0 +1,14 @@ +

Arthas 文档网站(power by vuepress)

+ +## 项目运行 + +```shell +# 安装依赖 +npm install + +# 启动项目 +npm run docs:dev + +# 发布项目(打包到 docs/.vuepress/dist 目录) +npm run docs:build +``` diff --git a/site-vuepress/docs/.vuepress/client.js b/site-vuepress/docs/.vuepress/client.js new file mode 100644 index 000000000..56feb6261 --- /dev/null +++ b/site-vuepress/docs/.vuepress/client.js @@ -0,0 +1,53 @@ +import { defineClientConfig } from "@vuepress/client"; +import { usePageData } from "@vuepress/client"; +import oldContributorsData from "./oldContributorsData.json"; + +const addOldDocsContributors = () => { + const page = usePageData(); + if (!page.value.git) return; + const filePath = page.value.filePathRelative; + const contributors = page.value.git.contributors; + const oldContributors = oldContributorsData[filePath]; + + const haveSameContributor = (contributors, oldContributor) => { + return contributors.find( + (contributor) => + contributor.name === oldContributor.name && + contributor.email === oldContributor.email + ); + }; + + if (oldContributors) { + oldContributors.forEach((oldContributor) => { + if (!haveSameContributor(contributors, oldContributor)) { + contributors.push(oldContributor); + } else { + haveSameContributor(contributors, oldContributor).commits += + oldContributor.commits; + } + }); + } + + // sort contributors by commits + contributors?.sort((a, b) => b.commits - a.commits); +}; + +export default defineClientConfig({ + enhance({ router }) { + router.afterEach((to, from) => { + if (to.fullPath !== from.fullPath) { + addOldDocsContributors(); + } + }); + + router.beforeEach((to, from, next) => { + if (typeof _hmt != "undefined") { + if (to.path && to.fullPath !== from.fullPath) { + _hmt.push(["_trackPageview", to.fullPath]); + } + } + + next(); + }); + }, +}); diff --git a/site-vuepress/docs/.vuepress/config.js b/site-vuepress/docs/.vuepress/config.js new file mode 100644 index 000000000..b56394fe4 --- /dev/null +++ b/site-vuepress/docs/.vuepress/config.js @@ -0,0 +1,109 @@ +const { localTheme } = require("./theme/index"); + +const { copyCodePlugin } = require("vuepress-plugin-copy-code2"); +const { redirectPlugin } = require("vuepress-plugin-redirect"); +const { searchPlugin } = require("@vuepress/plugin-search"); + +module.exports = { + title: "arthas", + description: "arthas user document", + head: require("./configs/head"), + locales: { + "/": { + lang: "zh-CN", + title: "arthas", + description: "arthas 使用文档", + }, + "/en/": { + lang: "en-US", + title: "arthas", + description: "arthas user document", + }, + }, + theme: localTheme({ + logo: "/images/arthas_light.png", + logoDark: "/images/arthas_dark.png", + repo: "alibaba/arthas", + docsDir: "site-vuepress/docs", + docsBranch: "master", + + locales: { + "/": { + selectLanguageName: "简体中文", + selectLanguageText: "Languages", + editLinkText: "在 GitHub 上编辑此页", + lastUpdated: "上次更新", + contributorsText: "贡献者", + backToHome: "回到首页", + warning: "注意", + tip: "提示", + danger: "警告", + // 404 page + notFound: [ + "这里什么都没有", + "我们怎么到这来了?", + "这是一个 404 页面", + "看起来我们进入了错误的链接", + ], + backToHome: "返回首页", + openInNewWindow: "在新窗口打开", + toggleColorMode: "切换颜色模式", + toggleSidebar: "切换侧边栏", + navbar: require("./configs/navbar/zh"), + sidebar: require("./configs/sidebar/zh"), + sidebarDepth: 0, + }, + "/en/": { + selectLanguageName: "English", + selectLanguageText: "Languages", + editLinkText: "Edit this page on GitHub", + navbar: require("./configs/navbar/en"), + sidebar: require("./configs/sidebar/en"), + sidebarDepth: 0, + }, + }, + }), + plugins: [ + copyCodePlugin({ + showInMobile: false, + pure: true, + locales: { + "/": { + hint: "复制代码", + }, + "/en/": { + hint: "Copy code", + }, + }, + }), + searchPlugin({ + locales: { + "/": { + placeholder: "搜索文档", + }, + "/en/": { + placeholder: "Search Docs", + }, + }, + }), + redirectPlugin({ + config: (app) => { + const redirects = Object.fromEntries( + app.pages + .filter((page) => page.path.startsWith("/en/doc/")) + .map((page) => [ + page.path.replace(/^\/en\/doc\//, "/doc/en/"), + page.path, + ]) + ); + + delete redirects["/doc/en/"]; + redirects["/doc/en/index.html"] = "/en/doc/index.html"; + redirects["/en-us/index.html"] = "/en/index.html"; + redirects["/zh-cn/index.html"] = "/index.html"; + + return redirects; + }, + }), + ], +}; diff --git a/site-vuepress/docs/.vuepress/configs/head.js b/site-vuepress/docs/.vuepress/configs/head.js new file mode 100644 index 000000000..a74f7a846 --- /dev/null +++ b/site-vuepress/docs/.vuepress/configs/head.js @@ -0,0 +1,20 @@ +module.exports = [ + ["link", { rel: "icon", href: "/images/favicon.ico" }], + [ + "meta", + { name: "viewport", content: "width=device-width, initial-scale=1.0" }, + ], + [ + "script", + {}, + ` + var _hmt = _hmt || []; + (function() { + var hm = document.createElement("script"); + hm.src = "https://hm.baidu.com/hm.js?d5c5e25b100f0eb51a4c35c8a86ea9b4"; + var s = document.getElementsByTagName("script")[0]; + s.parentNode.insertBefore(hm, s); + })(); + `, + ], +]; diff --git a/site-vuepress/docs/.vuepress/configs/navbar/en.js b/site-vuepress/docs/.vuepress/configs/navbar/en.js new file mode 100644 index 000000000..8802f8e26 --- /dev/null +++ b/site-vuepress/docs/.vuepress/configs/navbar/en.js @@ -0,0 +1,52 @@ +module.exports = [ + { + text: "HOME", + link: "/en/", + }, + { + text: "ONLINE TUTORIALS", + link: "/doc/arthas-tutorials.html?language=en&id=arthas-basics", + target: "_blank", + }, + { + text: "DOCS", + link: "/en/doc", + }, + { + text: "SOLUTIONS", + children: [ + { + text: "Microservice solutions", + link: "https://cn.aliyun.com/product/aliware/mse?spm=arthas.topbar.0.0.0", + }, + { + text: "Distributed transaction solutions", + link: "https://www.aliyun.com/aliware/txc?spm=arthas.topbar.0.0.0", + }, + { + text: "High-availability solution", + link: "https://www.aliyun.com/product/ahas?spm=arthas.topbar.0.0.0", + }, + { + text: "Serverless solution for miscoservices", + link: "https://cn.aliyun.com/product/aliware/sae?spm=arthas.topbar.0.0.0", + }, + { + text: "PaaS solution", + link: "https://www.aliyun.com/product/edas?spm=arthas.topbar.0.0.0", + }, + { + text: "Service mesh solution", + link: "https://www.aliyun.com/product/servicemesh?spm=arthas.topbar.0.0.0", + }, + ], + }, + { + text: "DOWNLOAD", + link: "/en/doc/download.md", + }, + { + text: "COMMUNITY", + link: "https://github.com/alibaba/arthas/issues", + }, +]; diff --git a/site-vuepress/docs/.vuepress/configs/navbar/zh.js b/site-vuepress/docs/.vuepress/configs/navbar/zh.js new file mode 100644 index 000000000..ba222ec0b --- /dev/null +++ b/site-vuepress/docs/.vuepress/configs/navbar/zh.js @@ -0,0 +1,52 @@ +module.exports = [ + { + text: "首页", + link: "/", + }, + { + text: "在线教程", + link: "/doc/arthas-tutorials.html?language=cn&id=arthas-basics", + target: "_blank", + }, + { + text: "文档", + link: "/doc/", + }, + { + text: "解决方案", + children: [ + { + text: "微服务解决方案", + link: "https://cn.aliyun.com/product/aliware/mse?spm=arthas.topbar.0.0.0", + }, + { + text: "分布式事务解决方案", + link: "https://www.aliyun.com/aliware/txc?spm=arthas.topbar.0.0.0", + }, + { + text: "高可用解决方案", + link: "https://www.aliyun.com/product/ahas?spm=arthas.topbar.0.0.0", + }, + { + text: "微服务Serverless解决方案", + link: "https://cn.aliyun.com/product/aliware/sae?spm=arthas.topbar.0.0.0", + }, + { + text: "PaaS解决方案", + link: "https://www.aliyun.com/product/edas?spm=arthas.topbar.0.0.0", + }, + { + text: "服务网格解决方案", + link: "https://www.aliyun.com/product/servicemesh?spm=arthas.topbar.0.0.0", + }, + ], + }, + { + text: "下载", + link: "/doc/download.md", + }, + { + text: "社区", + link: "https://github.com/alibaba/arthas/issues", + }, +]; diff --git a/site-vuepress/docs/.vuepress/configs/sidebar/en.js b/site-vuepress/docs/.vuepress/configs/sidebar/en.js new file mode 100644 index 000000000..0565661b4 --- /dev/null +++ b/site-vuepress/docs/.vuepress/configs/sidebar/en.js @@ -0,0 +1,148 @@ +module.exports = { + "/en/doc": [ + { + text: "DOCS", + children: [ + "/en/doc/README.md", + "/en/doc/quick-start.md", + "/en/doc/install-detail.md", + "/en/doc/download.md", + "/en/doc/advanced-use.md", + { + text: "Other features", + collapsible: true, + children: [ + "/en/doc/async.md", + "/en/doc/save-log.md", + "/en/doc/batch-support.md", + { + text: "How to use ognl", + link: "", + children: [ + { + text: "Basic ognl example", + link: "https://github.com/alibaba/arthas/issues/11", + }, + { + text: "Ognl special uses", + link: "https://github.com/alibaba/arthas/issues/71", + }, + ], + }, + ], + }, + { + text: "Commands", + collapsible: true, + link: "/en/doc/commands.md", + children: [ + { + text: "jvm", + collapsible: false, + children: [ + "/en/doc/dashboard.md", + "/en/doc/thread.md", + "/en/doc/jvm.md", + "/en/doc/memory.md", + "/en/doc/sysprop.md", + "/en/doc/sysenv.md", + "/en/doc/vmoption.md", + "/en/doc/perfcounter.md", + "/en/doc/logger.md", + "/en/doc/mbean.md", + "/en/doc/getstatic.md", + "/en/doc/ognl.md", + "/en/doc/heapdump.md", + "/en/doc/vmtool.md", + ], + }, + { + text: "class/classloader", + collapsible: false, + children: [ + "/en/doc/sc.md", + "/en/doc/sm.md", + "/en/doc/jad.md", + "/en/doc/classloader.md", + "/en/doc/mc.md", + "/en/doc/dump.md", + "/en/doc/retransform.md", + "/en/doc/redefine.md", + ], + }, + { + text: "monitor/watch/trace - related", + collapsible: false, + children: [ + "/en/doc/monitor.md", + "/en/doc/watch.md", + "/en/doc/trace.md", + "/en/doc/stack.md", + "/en/doc/tt.md", + ], + }, + { + text: "other", + collapsible: false, + children: [ + "/en/doc/profiler.md", + "/en/doc/cat.md", + "/en/doc/echo.md", + "/en/doc/grep.md", + "/en/doc/base64.md", + "/en/doc/tee.md", + "/en/doc/pwd.md", + "/en/doc/auth.md", + "/en/doc/options.md", + ], + }, + { + text: "Basic", + collapsible: false, + children: [ + "/en/doc/help.md", + "/en/doc/cls.md", + "/en/doc/session.md", + "/en/doc/reset.md", + "/en/doc/history.md", + "/en/doc/quit.md", + "/en/doc/stop.md", + { + text: "keymap", + link: "/en/doc/keymap.md", + }, + ], + }, + ], + }, + "/en/doc/web-console.md", + "/en/doc/tunnel.md", + "/en/doc/http-api.md", + "/en/doc/docker.md", + "/en/doc/spring-boot-starter.md", + "/en/doc/idea-plugin.md", + "/en/doc/faq.md", + { + text: "User cases", + link: "https://github.com/alibaba/arthas/issues?q=label%3Auser-case", + }, + { + text: "Start me at github", + link: "https://github.com/alibaba/arthas", + }, + { + text: "Compile and debug/CONTRIBUTING", + link: "https://github.com/alibaba/arthas/blob/master/CONTRIBUTING.md", + }, + { + text: "Release Notes", + link: "https://github.com/alibaba/arthas/releases", + }, + { + text: "Contact us", + link: "/en/doc/contact-us.md", + }, + ], + }, + ], +}; diff --git a/site-vuepress/docs/.vuepress/configs/sidebar/zh.js b/site-vuepress/docs/.vuepress/configs/sidebar/zh.js new file mode 100644 index 000000000..e16f1798f --- /dev/null +++ b/site-vuepress/docs/.vuepress/configs/sidebar/zh.js @@ -0,0 +1,152 @@ +module.exports = { + "/doc/": [ + { + text: "文档", + children: [ + "/doc/README.md", + "/doc/quick-start.md", + { + text: "在线教程(阿里云)", + link: "https://start.aliyun.com/handson-lab?category=arthas", + }, + "/doc/install-detail.md", + "/doc/download.md", + "/doc/advanced-use.md", + { + text: "其他特性", + collapsible: true, + children: [ + "/doc/async.md", + "/doc/save-log.md", + "/doc/batch-support.md", + { + text: "ognl 表达式用法", + link: "", + children: [ + { + text: "活用ognl表达式", + link: "https://github.com/alibaba/arthas/issues/11", + }, + { + text: "一些ognl特殊用法", + link: "https://github.com/alibaba/arthas/issues/71", + }, + ], + }, + ], + }, + { + text: "命令列表", + collapsible: true, + link: "/doc/commands.md", + children: [ + { + text: "jvm相关", + collapsible: false, + children: [ + "/doc/dashboard.md", + "/doc/thread.md", + "/doc/jvm.md", + "/doc/memory.md", + "/doc/sysprop.md", + "/doc/sysenv.md", + "/doc/vmoption.md", + "/doc/perfcounter.md", + "/doc/logger.md", + "/doc/mbean.md", + "/doc/getstatic.md", + "/doc/ognl.md", + "/doc/heapdump.md", + "/doc/vmtool.md", + ], + }, + { + text: "class/classloader相关", + collapsible: false, + children: [ + "/doc/sc.md", + "/doc/sm.md", + "/doc/jad.md", + "/doc/classloader.md", + "/doc/mc.md", + "/doc/dump.md", + "/doc/retransform.md", + "/doc/redefine.md", + ], + }, + { + text: "monitor/watch/trace相关", + collapsible: false, + children: [ + "/doc/monitor.md", + "/doc/watch.md", + "/doc/trace.md", + "/doc/stack.md", + "/doc/tt.md", + ], + }, + { + text: "其他", + collapsible: false, + children: [ + "/doc/profiler.md", + "/doc/cat.md", + "/doc/echo.md", + "/doc/grep.md", + "/doc/base64.md", + "/doc/tee.md", + "/doc/pwd.md", + "/doc/auth.md", + "/doc/options.md", + ], + }, + { + text: "基础命令", + collapsible: false, + children: [ + "/doc/help.md", + "/doc/cls.md", + "/doc/session.md", + "/doc/reset.md", + "/doc/history.md", + "/doc/quit.md", + "/doc/stop.md", + { + text: "keymap", + link: "/doc/keymap.md", + }, + ], + }, + ], + }, + "/doc/web-console.md", + "/doc/tunnel.md", + "/doc/http-api.md", + "/doc/docker.md", + "/doc/spring-boot-starter.md", + "/doc/idea-plugin.md", + "/doc/faq.md", + { + text: "用户案列", + link: "https://github.com/alibaba/arthas/issues?q=label%3Auser-case", + }, + { + text: "Start me at github", + link: "https://github.com/alibaba/arthas", + }, + { + text: "编译调试/参与贡献", + link: "https://github.com/alibaba/arthas/blob/master/CONTRIBUTING.md", + }, + { + text: "Release Notes", + link: "https://github.com/alibaba/arthas/releases", + }, + { + text: "QQ群/钉钉群", + link: "/doc/contact-us.md", + }, + ], + }, + ], +}; diff --git a/site-vuepress/docs/.vuepress/oldContributorsData.json b/site-vuepress/docs/.vuepress/oldContributorsData.json new file mode 100644 index 000000000..4daee0286 --- /dev/null +++ b/site-vuepress/docs/.vuepress/oldContributorsData.json @@ -0,0 +1,2274 @@ +{ + "doc/start-arthas.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 4 + }, + { + "name": "mantuliu", + "email": "240951888@qq.com", + "commits": 1 + } + ], + "doc/sm.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 3 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman@hollowman.ml", + "commits": 1 + } + ], + "doc/session.md": [ + { + "name": "Fu", + "email": "dkafussss@gmail.com", + "commits": 1 + } + ], + "doc/retransform.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 3 + } + ], + "doc/redefine.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 8 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman@hollowman.ml", + "commits": 1 + } + ], + "doc/quit.md": [ + { + "name": "Fu", + "email": "dkafussss@gmail.com", + "commits": 1 + } + ], + "doc/quick-start.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 23 + }, + { + "name": "Gene", + "email": "geneq@hotmail.com", + "commits": 1 + }, + { + "name": "Sergio Escalante", + "email": "sergioescala@gmail.com", + "commits": 1 + }, + { + "name": "northmorn", + "email": "northmorn@gmail.com", + "commits": 1 + }, + { + "name": "靳阳", + "email": "260893248@qq.com", + "commits": 1 + } + ], + "doc/profiler.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 7 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "doc/perfcounter.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "doc/options.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 9 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "qianmoke", + "email": "zzilovey@gmail.com", + "commits": 1 + } + ], + "doc/ognl.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "gongdewei", + "email": "kylixs@qq.com", + "commits": 1 + } + ], + "doc/monitor.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 3 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "LHearen", + "email": "lhearen@gmail.com", + "commits": 1 + }, + { + "name": "mikawudi", + "email": "mikawudi@qq.com", + "commits": 1 + } + ], + "doc/memory.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 1 + } + ], + "doc/mc.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 5 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman@hollowman.ml", + "commits": 1 + }, + { + "name": "vic", + "email": "snipercy@users.noreply.github.com", + "commits": 1 + } + ], + "doc/mbean.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "徐志毅", + "email": "xuzhiyi@youzan.com", + "commits": 1 + } + ], + "doc/manual-install.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 12 + }, + { + "name": "gongdewei", + "email": "kylixs@qq.com", + "commits": 1 + } + ], + "doc/keymap.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 3 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "doc/jvm.md": [ + { + "name": "bohr.qiu", + "email": "bohr.qiu@gmail.com", + "commits": 4 + }, + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 3 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "doc/jad.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 8 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman@hollowman.ml", + "commits": 1 + }, + { + "name": "penguin-wwy", + "email": "940375606@qq.com", + "commits": 1 + } + ], + "doc/install-detail.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 29 + } + ], + "doc/index.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 53 + }, + { + "name": "TheoneFx", + "email": "chenxilzx1@gmail.com", + "commits": 1 + }, + { + "name": "gongdewei", + "email": "kylixs@qq.com", + "commits": 1 + }, + { + "name": "lzc-alioo", + "email": "33567235+lzc-alioo@users.noreply.github.com", + "commits": 1 + } + ], + "doc/idea-plugin.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 1 + }, + { + "name": "zthreefires", + "email": "34255589+zthreefires@users.noreply.github.com", + "commits": 1 + }, + { + "name": "汪吉", + "email": "983433479@qq.com", + "commits": 1 + } + ], + "doc/http-api.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 4 + }, + { + "name": "gongdewei", + "email": "kylixs@qq.com", + "commits": 3 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "doc/history.md": [ + { + "name": "Fu", + "email": "dkafussss@gmail.com", + "commits": 1 + } + ], + "doc/help.md": [ + { + "name": "Fu", + "email": "dkafussss@gmail.com", + "commits": 1 + } + ], + "doc/heapdump.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "doc/groovy.md": [ + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + }, + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 1 + } + ], + "doc/grep.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 4 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "doc/getstatic.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 3 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman@hollowman.ml", + "commits": 1 + } + ], + "doc/faq.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 17 + }, + { + "name": "汪吉", + "email": "983433479@qq.com", + "commits": 2 + }, + { + "name": "Gong Dewei", + "email": "kylixs@qq.com", + "commits": 1 + } + ], + "doc/echo.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "doc/dump.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 3 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman@hollowman.ml", + "commits": 1 + } + ], + "doc/download.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 7 + } + ], + "doc/docker.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 6 + }, + { + "name": "garenchan", + "email": "1412950785@qq.com", + "commits": 1 + } + ], + "doc/dashboard.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 4 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "LHearen", + "email": "lhearen@gmail.com", + "commits": 1 + }, + { + "name": "gongdewei", + "email": "kylixs@qq.com", + "commits": 1 + }, + { + "name": "xuefeng0707", + "email": "xuefeng0707@hotmail.com", + "commits": 1 + } + ], + "doc/contact-us.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 10 + } + ], + "doc/commands.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 23 + }, + { + "name": "Fu", + "email": "dkafussss@gmail.com", + "commits": 1 + } + ], + "doc/cls.md": [ + { + "name": "Fu", + "email": "dkafussss@gmail.com", + "commits": 1 + } + ], + "doc/classloader.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 5 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 2 + }, + { + "name": "LHearen", + "email": "lhearen@gmail.com", + "commits": 1 + } + ], + "doc/cat.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "doc/batch-support.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 4 + }, + { + "name": "D-H-T", + "email": "dht925nerd@126.com", + "commits": 1 + } + ], + "doc/base64.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 1 + } + ], + "doc/auth.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 7 + } + ], + "doc/async.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 5 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "汪吉", + "email": "983433479@qq.com", + "commits": 1 + } + ], + "doc/arthas3.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 5 + } + ], + "doc/arthas-properties.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 3 + } + ], + "doc/agent.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 3 + } + ], + "doc/advice-class.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + } + ], + "doc/advanced-use.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 28 + }, + { + "name": "penguin-wwy", + "email": "940375606@qq.com", + "commits": 1 + }, + { + "name": "徐志毅", + "email": "xuzhiyi@youzan.com", + "commits": 1 + }, + { + "name": "静宏", + "email": "acvrock.cn@gmail.com", + "commits": 1 + } + ], + "doc/README.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 1 + } + ], + "doc/stack.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 5 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "doc/thread.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 4 + }, + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "gongdewei", + "email": "kylixs@qq.com", + "commits": 1 + }, + { + "name": "李鼎", + "email": "oldratlee@gmail.com", + "commits": 1 + } + ], + "doc/sysenv.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 3 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "doc/tee.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "pipetee", + "email": "toyangmin@gmail.com", + "commits": 1 + } + ], + "doc/stop.md": [ + { + "name": "Fu", + "email": "dkafussss@gmail.com", + "commits": 1 + } + ], + "doc/trace.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 14 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "Jerry", + "email": "favoorr@gmail.com", + "commits": 1 + }, + { + "name": "徐志毅", + "email": "xuzhiyi@youzan.com", + "commits": 1 + } + ], + "doc/pwd.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "doc/release-notes.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 8 + } + ], + "doc/reset.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 5 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "doc/save-log.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 4 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "doc/sc.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 3 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman@hollowman.ml", + "commits": 1 + } + ], + "doc/spring-boot-starter.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 11 + } + ], + "doc/tunnel.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 6 + } + ], + "doc/vmtool.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 3 + } + ], + "doc/tt.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 5 + }, + { + "name": "superheizai", + "email": "superheizai@aliyun.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "Xiangmingzhe", + "email": "xiangmz0928@gmail.com", + "commits": 1 + }, + { + "name": "vic", + "email": "snipercy@users.noreply.github.com", + "commits": 1 + }, + { + "name": "汪吉", + "email": "983433479@qq.com", + "commits": 1 + } + ], + "doc/vmoption.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 3 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "doc/logger.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman@hollowman.ml", + "commits": 1 + } + ], + "doc/sysprop.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 4 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "doc/version.md": [ + { + "name": "Fu", + "email": "dkafussss@gmail.com", + "commits": 1 + } + ], + "doc/watch.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 12 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "vic", + "email": "snipercy@users.noreply.github.com", + "commits": 1 + }, + { + "name": "汪吉", + "email": "983433479@qq.com", + "commits": 1 + } + ], + "doc/web-console.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 14 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "en/doc/sm.md": [ + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 2 + }, + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman@hollowman.ml", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + } + ], + "en/doc/session.md": [ + { + "name": "Fu", + "email": "dkafussss@gmail.com", + "commits": 1 + } + ], + "en/doc/sc.md": [ + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 2 + }, + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman@hollowman.ml", + "commits": 1 + }, + { + "name": "Sergio Escalante", + "email": "sergioescala@gmail.com", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + } + ], + "en/doc/save-log.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + } + ], + "en/doc/retransform.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 3 + } + ], + "en/doc/reset.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 4 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + } + ], + "en/doc/release-notes.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 7 + }, + { + "name": "0xflotus", + "email": "26602940+0xflotus@users.noreply.github.com", + "commits": 1 + }, + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 1 + } + ], + "en/doc/redefine.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 7 + }, + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman@hollowman.ml", + "commits": 1 + }, + { + "name": "LHearen", + "email": "lhearen@gmail.com", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + } + ], + "en/doc/quit.md": [ + { + "name": "Fu", + "email": "dkafussss@gmail.com", + "commits": 1 + } + ], + "en/doc/quick-start.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 15 + }, + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 2 + }, + { + "name": "0xflotus", + "email": "26602940+0xflotus@users.noreply.github.com", + "commits": 1 + }, + { + "name": "Arteev Raina", + "email": "arteevraina@gmail.com", + "commits": 1 + }, + { + "name": "LHearen", + "email": "lhearen@gmail.com", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + }, + { + "name": "garenchan", + "email": "1412950785@qq.com", + "commits": 1 + } + ], + "en/doc/pwd.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "en/doc/profiler.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 7 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "en/doc/perfcounter.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "en/doc/options.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 8 + }, + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 2 + }, + { + "name": "alfredzouang", + "email": "43456743+alfredzouang@users.noreply.github.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + } + ], + "en/doc/ognl.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "gongdewei", + "email": "kylixs@qq.com", + "commits": 1 + } + ], + "en/doc/monitor.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "LHearen", + "email": "lhearen@gmail.com", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + }, + { + "name": "mikawudi", + "email": "mikawudi@qq.com", + "commits": 1 + } + ], + "en/doc/memory.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 1 + } + ], + "en/doc/mc.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 5 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman@hollowman.ml", + "commits": 1 + }, + { + "name": "vic", + "email": "snipercy@users.noreply.github.com", + "commits": 1 + } + ], + "en/doc/mbean.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "徐志毅", + "email": "xuzhiyi@youzan.com", + "commits": 1 + } + ], + "en/doc/manual-install.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 7 + }, + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 1 + }, + { + "name": "Sergio Escalante", + "email": "sergioescala@gmail.com", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + }, + { + "name": "gongdewei", + "email": "kylixs@qq.com", + "commits": 1 + } + ], + "en/doc/logger.md": [ + { + "name": "Hollow Man", + "email": "hollowman@hollowman.ml", + "commits": 2 + }, + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "en/doc/keymap.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Arteev Raina", + "email": "arteevraina@gmail.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + } + ], + "en/doc/jvm.md": [ + { + "name": "bohr.qiu", + "email": "bohr.qiu@gmail.com", + "commits": 2 + }, + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + } + ], + "en/doc/jad.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 6 + }, + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman@hollowman.ml", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + } + ], + "en/doc/install-detail.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 18 + }, + { + "name": "Arteev Raina", + "email": "arteevraina@gmail.com", + "commits": 1 + }, + { + "name": "LHearen", + "email": "lhearen@gmail.com", + "commits": 1 + }, + { + "name": "Sahil Jha", + "email": "sjha200000@gmail.com", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + } + ], + "en/doc/index.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 28 + }, + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 1 + }, + { + "name": "LHearen", + "email": "LHearen@gmail.com", + "commits": 1 + }, + { + "name": "Nithyanandan Natchimuthu", + "email": "anand1st@gmail.com", + "commits": 1 + }, + { + "name": "Arteev Raina", + "email": "arteevraina@gmail.com", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + }, + { + "name": "gongdewei", + "email": "kylixs@qq.com", + "commits": 1 + }, + { + "name": "Sahil Jha", + "email": "sjha200000@gmail.com", + "commits": 1 + } + ], + "en/doc/idea-plugin.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 1 + }, + { + "name": "汪吉", + "email": "983433479@qq.com", + "commits": 1 + } + ], + "en/doc/http-api.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 4 + }, + { + "name": "gongdewei", + "email": "kylixs@qq.com", + "commits": 3 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "en/doc/history.md": [ + { + "name": "Fu", + "email": "dkafussss@gmail.com", + "commits": 1 + } + ], + "en/doc/help.md": [ + { + "name": "Fu", + "email": "dkafussss@gmail.com", + "commits": 1 + } + ], + "en/doc/heapdump.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "en/doc/groovy.md": [ + { + "name": "Arteev Raina", + "email": "arteevraina@gmail.com", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + } + ], + "en/doc/grep.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 4 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "en/doc/getstatic.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Arteev Raina", + "email": "arteevraina@gmail.com", + "commits": 1 + }, + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman@hollowman.ml", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + } + ], + "en/doc/faq.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 15 + }, + { + "name": "汪吉", + "email": "983433479@qq.com", + "commits": 2 + }, + { + "name": "Gong Dewei", + "email": "kylixs@qq.com", + "commits": 1 + } + ], + "en/doc/echo.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "en/doc/dump.md": [ + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 2 + }, + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman@hollowman.ml", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + } + ], + "en/doc/download.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 6 + }, + { + "name": "Arteev Raina", + "email": "arteevraina@gmail.com", + "commits": 1 + } + ], + "en/doc/docker.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 6 + }, + { + "name": "garenchan", + "email": "1412950785@qq.com", + "commits": 1 + } + ], + "en/doc/dashboard.md": [ + { + "name": "LHearen", + "email": "lhearen@gmail.com", + "commits": 2 + }, + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + }, + { + "name": "gongdewei", + "email": "kylixs@qq.com", + "commits": 1 + }, + { + "name": "xuefeng0707", + "email": "xuefeng0707@hotmail.com", + "commits": 1 + } + ], + "en/doc/contact-us.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Sahil Jha", + "email": "sjha200000@gmail.com", + "commits": 1 + } + ], + "en/doc/commands.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 21 + }, + { + "name": "Arteev Raina", + "email": "arteevraina@gmail.com", + "commits": 1 + }, + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 1 + }, + { + "name": "LHearen", + "email": "lhearen@gmail.com", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + } + ], + "en/doc/cls.md": [ + { + "name": "Fu", + "email": "dkafussss@gmail.com", + "commits": 1 + } + ], + "en/doc/classloader.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 4 + }, + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 2 + }, + { + "name": "0xflotus", + "email": "26602940+0xflotus@users.noreply.github.com", + "commits": 1 + }, + { + "name": "Arteev Raina", + "email": "arteevraina@gmail.com", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + } + ], + "en/doc/cat.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "en/doc/batch-support.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Arteev Raina", + "email": "arteevraina@gmail.com", + "commits": 1 + }, + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + } + ], + "en/doc/base64.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 1 + } + ], + "en/doc/auth.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 6 + } + ], + "en/doc/async.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 3 + }, + { + "name": "0xflotus", + "email": "26602940+0xflotus@users.noreply.github.com", + "commits": 1 + }, + { + "name": "Arteev Raina", + "email": "arteevraina@gmail.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "Sergio Escalante", + "email": "sergioescala@gmail.com", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + }, + { + "name": "汪吉", + "email": "983433479@qq.com", + "commits": 1 + } + ], + "en/doc/arthas-properties.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 3 + } + ], + "en/doc/agent.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 3 + } + ], + "en/doc/advice-class.md": [ + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + } + ], + "en/doc/advanced-use.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 28 + }, + { + "name": "Arteev Raina", + "email": "arteevraina@gmail.com", + "commits": 1 + }, + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 1 + }, + { + "name": "HearingSmile", + "email": "41669762+tianjindong@users.noreply.github.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "LHearen", + "email": "lhearen@gmail.com", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + }, + { + "name": "徐志毅", + "email": "xuzhiyi@youzan.com", + "commits": 1 + }, + { + "name": "0xflotus", + "email": "26602940+0xflotus@users.noreply.github.com", + "commits": 1 + }, + { + "name": "静宏", + "email": "acvrock.cn@gmail.com", + "commits": 1 + } + ], + "en/doc/README.md": [ + { + "name": "LHearen", + "email": "lhearen@gmail.com", + "commits": 1 + }, + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 1 + } + ], + "en/doc/stack.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 3 + }, + { + "name": "LHearen", + "email": "lhearen@gmail.com", + "commits": 2 + }, + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + } + ], + "en/doc/start-arthas.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + }, + { + "name": "mantuliu", + "email": "240951888@qq.com", + "commits": 1 + } + ], + "en/doc/spring-boot-starter.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 8 + } + ], + "en/doc/stop.md": [ + { + "name": "Fu", + "email": "dkafussss@gmail.com", + "commits": 1 + } + ], + "en/doc/sysenv.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 3 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "en/doc/sysprop.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + } + ], + "en/doc/tee.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "pipetee", + "email": "toyangmin@gmail.com", + "commits": 1 + } + ], + "en/doc/thread.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 3 + }, + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "LHearen", + "email": "lhearen@gmail.com", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + }, + { + "name": "gongdewei", + "email": "kylixs@qq.com", + "commits": 1 + }, + { + "name": "李鼎", + "email": "oldratlee@gmail.com", + "commits": 1 + } + ], + "en/doc/tt.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 3 + }, + { + "name": "LHearen", + "email": "lhearen@gmail.com", + "commits": 2 + }, + { + "name": "superheizai", + "email": "superheizai@aliyun.com", + "commits": 2 + }, + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "Sergio Escalante", + "email": "sergioescala@gmail.com", + "commits": 1 + }, + { + "name": "汪吉", + "email": "983433479@qq.com", + "commits": 1 + } + ], + "en/doc/version.md": [ + { + "name": "Fu", + "email": "dkafussss@gmail.com", + "commits": 1 + } + ], + "en/doc/watch.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 10 + }, + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 2 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "LHearen", + "email": "lhearen@gmail.com", + "commits": 1 + }, + { + "name": "汪吉", + "email": "983433479@qq.com", + "commits": 1 + } + ], + "en/doc/tunnel.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 5 + } + ], + "en/doc/vmtool.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 3 + } + ], + "en/doc/trace.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 12 + }, + { + "name": "0xflotus", + "email": "26602940+0xflotus@users.noreply.github.com", + "commits": 1 + }, + { + "name": "Hearen", + "email": "LHearen@126.com", + "commits": 1 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + }, + { + "name": "Jerry", + "email": "favoorr@gmail.com", + "commits": 1 + }, + { + "name": "LHearen", + "email": "lhearen@gmail.com", + "commits": 1 + }, + { + "name": "beiwei30", + "email": "ian.luo@gmail.com", + "commits": 1 + } + ], + "en/doc/vmoption.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 3 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ], + "en/doc/web-console.md": [ + { + "name": "hengyunabc", + "email": "hengyunabc@gmail.com", + "commits": 15 + }, + { + "name": "Hollow Man", + "email": "hollowman186@vip.qq.com", + "commits": 1 + } + ] +} diff --git a/site-vuepress/docs/.vuepress/public/doc/arthas-tutorials.html b/site-vuepress/docs/.vuepress/public/doc/arthas-tutorials.html new file mode 100644 index 000000000..8df42b2b3 --- /dev/null +++ b/site-vuepress/docs/.vuepress/public/doc/arthas-tutorials.html @@ -0,0 +1,1147 @@ + + + + + + + + + + + + + + + + Arthas Tutorials + + + + + + + + + + + + + + + +
+ + +
+
+
+
+ + + + + + + + diff --git a/site/src/site/sphinx/_static/alibabacloud_hotreload.png b/site-vuepress/docs/.vuepress/public/images/alibabacloud_hotreload.png similarity index 100% rename from site/src/site/sphinx/_static/alibabacloud_hotreload.png rename to site-vuepress/docs/.vuepress/public/images/alibabacloud_hotreload.png diff --git a/site/src/site/sphinx/_static/arthas-output-svg.jpg b/site-vuepress/docs/.vuepress/public/images/arthas-output-svg.jpg similarity index 100% rename from site/src/site/sphinx/_static/arthas-output-svg.jpg rename to site-vuepress/docs/.vuepress/public/images/arthas-output-svg.jpg diff --git a/site/src/site/sphinx/_static/arthas-output.jpg b/site-vuepress/docs/.vuepress/public/images/arthas-output.jpg similarity index 100% rename from site/src/site/sphinx/_static/arthas-output.jpg rename to site-vuepress/docs/.vuepress/public/images/arthas-output.jpg diff --git a/site/src/site/sphinx/_static/arthas-tunnel-server.png b/site-vuepress/docs/.vuepress/public/images/arthas-tunnel-server.png similarity index 100% rename from site/src/site/sphinx/_static/arthas-tunnel-server.png rename to site-vuepress/docs/.vuepress/public/images/arthas-tunnel-server.png diff --git a/site/src/site/sphinx/_static/arthas-web-ui.png b/site-vuepress/docs/.vuepress/public/images/arthas-web-ui.png similarity index 100% rename from site/src/site/sphinx/_static/arthas-web-ui.png rename to site-vuepress/docs/.vuepress/public/images/arthas-web-ui.png diff --git a/site-vuepress/docs/.vuepress/public/images/arthas.png b/site-vuepress/docs/.vuepress/public/images/arthas.png new file mode 100644 index 0000000000000000000000000000000000000000..73317782da75334e14fa1609de7aad8776910aa4 GIT binary patch literal 16775 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 literal 0 HcmV?d00001 diff --git a/site-vuepress/docs/.vuepress/public/images/arthas_dark.png b/site-vuepress/docs/.vuepress/public/images/arthas_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..236613852dc95adfbe684f307337534d722f93ea GIT binary patch literal 5621 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 z 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ákz9>j6NH?{dR!T0ou9_v8H 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%0ASDV`fSu}j zL_(sjh~euwy1%Y&T8H4-hw|(X%WYKs0A)CN43qQBZNDpE`1?<1=mFE`8dH?#B_u>X zrN22xfzXWAy7Nm)*QWDcvvXflOj=r6E$f$z{b!@kEBou23E!!0#$W<_ly-iM2dgIo zGH>T=Yp2DcmP1tgzTD>=dctqa#0P#`kKI>pq>&W6v43(f$5##>Y~LeesQE`MwWh49 zV`bxIp;0m=t^NG#!#`5*dO7^%H!%Y7hS8h@Q2Yjr5bYt|V81wSBTpBj!M-rnMb8U& z&$w>Y)jeyYIlNYP({6kHWXAnn!kvrw__j{z9`yzhZhs?EVJ+Q0nagB~TPqRV+Ep{G zXf;oio8e~0zY-YqMls#*&);91J2d^o z-o(*9X*_OgEsV6OAd7cCTyQ#>eKa4^i^J!&t(Tb_Ja3@02$$`&#hq^5qW0-8u*%jkeu3XP2>-_`9`?NHMRK1x2e7DFk>m%P z5z$yN7>&iXrU9<)ym)Zm6R6^IqFSe@FzIFJq&eR?Gw?!wu9|l$l4r%1bD3rrPk*IE zxJIt-rrL;#fmhWZrBPFO6IF6SZX9^3h_6>1SZ&CB5rr7NGO*Cz;N+^LKm@|{L~4j1 ztkA^-oSiPw9RRV#(hd#|Zu|6pIWAiD{|0-8+4&T-Zrcm*Jb2#d@j0hY9FOIgl4lwI zp>YJdF)3q)Z7cea;W#7Vd^1e3dNN<;1vY8bxc=*L!=vhvU5phJRcsRhfF0{IBt&5F zMHbmWr`+6%Mi7MG>jXiaxqTTlTY@{``f&2GD5+N>Lu81T8r+drHzZ-d8W zYoa|@^L0ZJ=TQufRh=%pKIc7bp8R_|!9BSO=V))M7Y@@Fku-dN!N&qP(o*G)4q9p$St>E~6WI8d?mzkpI&1()J8w zqvN?_)HE}}b87f1d2%)wZ0j$C$X0R~u9H3#aCcbiwjE2=>Prl!$s1rdz%+GsjQ;NK)V(;nt5Erk$lVdaZW+J-`juJmT!SnYZ0K zc#?R|n*`B%1S>R{!YAr%8u1K6&jfJ)3a8b>Ism}=IGPW`b@vD#T?XnmNiCB(5XRM= z^7}2rJ3{{gm1c?-{U0s>{v+wq10>U&CEn9UpH=#%Eil}-7LGzRDyG&7>@>_X;=TQ$Ih#;@>a3EipNJQS#@;Xn(KsLe*sCO*wP#bVB$lf)Nja!1(71hp{>|6o*F)b=z zj8V@egV5}w95de1He;WZ71fKASxOKSCAbv>O}!YtGp2{WIs%haU`cmr>X>qJ`CQ6^ zrFsgxk=RVOzxyGU_rOnB7Z2U>%Jb(AuPYj#0)b%Thd*NNz?UbIRaRbufWP|->sV6; ztqQni8x-vt$wM11s_z7?XHZ#nnhWdJMQ|C$lU_3{#(JyPpEv6mjT^Qt(jsu$>&3*^`_YR>#ikcImY_gkNXR=KM9~p=gu6HuI zWSW(+dW+?8-m7EWE9Ja|dGS{3b@4Ll2@;a`AT0tar!WdM#dsj(eKU4e+l(viZHY3K zFY?Hy*N8M_w2g;UWu?t6aCxL#G0$qc(X|{8l@5x}V>Y!X$beHCSBP)_qlg*Zk~|z% z;wi7hVKC&n*t)Ur1%PBeE@Mg#lYV&`Z1T$T-2{_=%N8GcMAZ=Mbj=GkFA?l zG{ACOPOKXw^-xbEMZ^I#pp)+*jn1>AM-OVI9^4EI7L4^>j`#bb&-(6W4(NGf`?;0# zYDMFO^3GW&ELvzw^oO?_=D1t}?<2dDFpj z8`1RMLcX7VKE-?D&|RI_EOK zO((#*h+X^_hsVbktY*dgn(woYMSJJjN2Z>HKKk;H4R}j!E}RhM<^ zyGIW-&mtX+1m8YFeQ86$%cJ+@qvdLY74L`VtPK0|v>4$zs(?ZNwq=lSjK5A_R7(hO zDy-o*H>yVL&pG&sRTZBRJ}8oJtj3BfYC;rHECP~bvGZZ6_+mAJjq}SRs8Pt=IZvwAmJQm(A^a2y_RJ`an`?xD^G zR&ERrsMxQk)P+<`@i;mdD@c-(3r$EmD`j<%-D!wvp#e;V^~6mu5IGI3Q8%^axkmpDMI7j&1- z#w~*9SVFE=_v0q11Lfo&>~9r_$8?0wp6$nj&F8|GV(;Rz4D(&0KQbi8QX<~8@4$4F z#FW3u`gIy2eWcc$52aYEKV}=UC;G7()uRLzK|Nq#YA?XOo@w-SF3{=zS z72@X>3!tjyq}2bH;#$`t?v$HgC*`g5WBc{{I0X0Wzo#kAEwX4MB;7wo=%!E27(5}#UUd`2%MH~h^cw96HtBP38PUu`n0Ux z)gAfo_U^ww9o_A0qvHRCks!u9=`dS`Y(4B~HJV%2%R5PDuXnc)aR|a+b_)FYB6_wl z-0DeGNkzJjfL-5k|MQ%8HDARV++VjbYtu9S=idrrmrY+fyp3Ood=GJKYmMC(Q!uUY zy^qVqz;JkmWoymLY(+Im6VWlv&CV4u_CP#H^1^<^Yqg|zQGj8 z{uWjBO*SiVWlhRmJ*fahW@>BAa&)^0tJS0G^&0OAc=mhkyCIN*579>8ycu-g1>hx# z3{)eEAf*bpG~A13H*DZ>QzBO{mT8~rb@%BxV~y9Y zLNhf(yXjvp2xt3EC8DbC>Ao8Rkcr0dsmt-Z1rH}mq(xe;gagv zt#$USpunkOidUOx?2@FzdB*8k^t7(q%03Q=hS%INTgi2D8rzx?uGkmxh)pjWoORu> z0z4xP4I3x*$dCB^2Ee^lv|&D}nX*UcTWTEcc4(93? z-;E$)@vnK%fGtbV!`5PH*qWV`7gydcDs`-QA8aI_rCx#q?*6I9uP=9+@;!ZVG$g{% z>?CJPW+90YQmxs19N4tz2dTi6n>HV2dU)#H#l?8$Uyk(bW&K0S_b_HMVk+J8!-v$X z;}YkqYPEr>I)hdGt9HI0Q}+yfM)iw(!|O|b?+TqA(d$Ua>nv2;Ui{V$yX#@@{JW1q z?CTfi)AH)><^J@YBeEBfZ!Pn_++^A9FvG;>3d(2eL)H6`dxLjS4cz_oyGF*{0DH$Y z{G$F=9xbwo+-TzLq^uw6U*@xa@gd|C3++MNho0$mgFt#lnkH%4hmGc8k)~SU=NNVu z={pkhy-*G1e?h4~ojIHAc12(R>c0N;cplZgXcdnm46chct4lICz^Y3`T#o2I%=>(s zEI>xaep%uBFuar^&f|NTj(GtK?~lO5-K{7u&V#dYpG`X}TDgV^Q9x}oR0K5b4hDgu z;2=eh?G0f?PUmDzM81C@es>e*RMYF>8JIh=;8iUrLS zAkaV)i{T5JpHfi*;5a=t-nVJI;N9O^-*Smzd*R)(NDJWlQ!2ne&L%&`tQQ)vuynmk ztlV`N^44DS8D~x3YH$*h+Ru!wh0S#R7IWZUe^Nq9tXxJXj2y`l&L`X`zmaN>O>Jik zFrw+s2#qS%WamiWqn!8-_=*l4S2*UkXBqH&vo?iGY2V;IgYw}dbTQeIl)p%G9G5vs z;o*H~?ZreuPV4^8;)9~2&LDj%4aaQ@jHu<{f#4p&w=IogxC?K?H`xdGY0i=Ro@*Jt zw;uv|jc05bgL-+sAN{0~e(eAV8g#6WdLfl#NE%_mgwi^a)M0%MRD^+{i;_3J5yq#N>b^3>tMrJI>nZTXB%ngN_Bfy5tZX$<>#)f3DpWVmz}q}l6ewN{eL*6j@j3zwQT$;msnlGHbp$k4VH+XRh*A2z24&H0bRoH8js*W6E@U zEfJeosN&rdzYH4ht>&sXq&c#sHLT1mT>(lL)Ww85TL=(;6Y z9WCdA!dV4~+B6-xLsQ?u;+)iAdD#+DbT&YyPH|e}I$O?B_x!2A(;`M|3DTVnelgOU zYe-$kL09)Wx^@nFV*-0PwP~|hgHP%B8%teTsS*jBaIL6tw`UmLa1P$frC~IOfEl?9 ziP)GW8~VXReV7ah`&YxZyt#J)HVv`7S(wx8Ra4*5|6`;5X1&2luguHpz41&8w+fvg znS*Jh(0+(=QGUa_={wx6QU@yOGn?3at>Q+{H1Ngu(n9xipqcRVY0x_m)E?$@_3vLY z8XBGZQdPIj3;}y!iHd3|MEUUr{bRmKUl)~~>EtqfY#s_0w8V7dk`qcm~2 z)^5bcQft#qozE|{io&Dj=F6Xo`G>sO6Z7xR6mX9Td`z@4=1x+>G$XeJQ5Jse!GsMm zdrk1QUO zy(WggMXn$KB0l?ne`}VLynb!s+xB5h3C^k`G3NXusGN#JuY$Y=cfB0wV$B?Yevt$H zCIcvln_kLuPwgPi*;|5yn9Inwj*t7QRjvkLqDOILJRWDSEG$-L?DQ0zyD#AYCx&V@ z(T*{LSBZ~DB$L(LpTy2<+)k#TjxL&GQUKK}pA<%&;PV2w9=d%!L%j+IVICS?6W^D< z%6+Z(7C7P6Lmz2zWMml%;V#dFalp>)d*h?c^Ma5w(QaWNjny4f4o{Qo$6Dfqapoa^ z-yFuE#~ON4^$_@_;zS|GwGO_^U3Nn~a#i_c0`I1CBG{aY3=W1yWe3fsSI!p0A(k^h zK0(0BuR}b(ADHD(x!z$K;q|b>up;ODrgm%;s}yK=ytw)|OZgU~n~cYDgnj~U zxZ71S7yQ}pZW_jEku+){RPVS8vV)|o%)h7sazydoQey-ex@+>ut4sAl0cKDU^v7L1 zEA4)4?ZZEqkFS0jlY8Vb0;$)%)QK73S}D`%mJ(Ag0Jr$Q(3i`9m9nu)%pWV-T74B{ zTKMDm{Im93KCcNsw_!NLnJ?)*k+|%k!CXp>0zvBvkmSe6`4vQ$0;h-xMtdYCpB=~M zdWngoI4)TDd?;1tMFzXx-(X|)FyJW>T`HgCT@gT|_2X}D2-x<{b`q$Xfjv}u`>=pbfc_hdkqdHz zsUBJ$#zp~+dPBb_KV+L^Rnm^g8LB(P8A6(zKN$2D-ViK{gs?2mm6Q@b>7a7a3IMj5 zYwmrg;bXGvT}6Kmpt0?mzZ_=RqubWWgo%7hrmE(n^qmNdxC{X0rRM@%OzH3KwAytf z>Uv^+Q9L8a!gS$O%XO0&pb(JBJu5-A9eGJz&OaN`S?P1q8!kCpl{Gbc2#Qi=j5f$W z6bGT6tXTXkoaob=pZAJjTlM-2?_9MoUc+o{p99Bqa>at_tai=jVpCnwo@Ny==9FKj zA!G>6Z8+H^nE8 zeUQKM`6!iwtwf-<2AEE8i`?2*w zqQN#k;)`vd4{;sL#|Hy`Va>DdQD``egP39(9LuBWvg5VwbIi>&XO!dWt%9w>n5{Y{5$;+%kHJXz97o{L9JyT%_`i2G(si0~yA_b?Rm z9cq9qj_iuC)kVRk+i>4Cb|(ZuR4q{HbKk*#_(T(~fg`eUdXbpEO>VuHZ|^gq2++Sf zer$p`a%ku+Nmv#(%mAGCdg>*lk93AXOcekJA}RfPdSRVLe0wLc>r=sAyKbk3kFF)& zRM&^;d=-R6OzGs?A~=WGWN-=~JV)1L>m|jT+`FN?$JUOf(zyzqm37R4596wOu=yV2 z{VUKTQ=nINuVjXIhe~_cBXBfMY$z+XuDhx&p3lqlEw_z$H1`r|Kl}yGHO{JIG7gM5 z`YtTNne6zNHqZM^BP+eMYlaX0_>Xhz<(!bEKi^gaokl;!DQ00f8#)qz0|>CB>qn+} zOH-^8(uPBDNtEr*5sfddF^;<;D{9_B*|dxC*=C5(pk`4r%-xK|Pb=$+Tw4g8qA4VW zR!r)?6!7I!k538B;XIW0TWs9!-`!`}iG>WbTWr1TQ=BYFwA*XO+$k_LwI{t$Q+XE* z$V!|mrZ8^lGGhK80M$S$zf7L&f7z?TFH|Y(J9=zDTgxwKNXOS7!IZ~oLl%e+F1`ow za3>zGxuP8&`92K=pk+tL2hRuXcL|G2v{angBU`mUH;!e_EPcjk6fOjt3w>1z2k_#D zF%K6Fs0%)Y<4+@sLPx{)Pyh5!-q?m93b^y~o&88 zXb=rXD5;bQ;mSMZU7|y+Nq^*#NBRmyX2opM5_%kTgJ#f*Guiy`Tl@qUBN4M&IKPCI z2+VGYI;tv+)%uJ^igYZ~XBH5%6TM!PUsbWLow)#v)*<}hmz!ZQ#%Qjy8h;GH@ zIt==S!g0~54qYyEm>mfiTv8)ZzA0ZWFhzQzJuslSITJKmbx zG)ZI;>(JDf)Cw<7*cjWcv&LFOK8Rp?_t6inB=e9d{(kX53FAY z-3@5fSY2h3t6?~Y-YWhz52l})Ut}rkjap*C&bwUQT@nKuGbeRTN4pq(@ZLzk&9M{z1 z`!>^eR(?W$e0)q#19npH{}P=R+S>KETkY~}s7VOf%Scmg+D`E%73L<0@eb`&n zu7;!U#ku3Go@1bsz945med<%6vTbVbtNp-8(|$+xxn7{YmG_Ax?^r#D;f8+W=Rg1X zvVRpi2(pm8(Hp!EraO8_^r_GxLSB}4m7lYtz?XE_U8k*9v)d~afZpzsKE=uu`t+=1 zglDJ&Z{rjRosd;OICu)f0$cE*OVXxQ+rqiFaeKm_(Y^++x;`u1;45@kcqLX^#@GbB zhtZhxsy1tU2b^(~!SB+ialxDZl7DuK0>KZ{B|iWB^L_k?Z~6AMYfE{9JfSbcYB%^0 z{=~4v(J3yM1dKRQ_tg0@I_r{gFvd0+BXYe={M@a&_VFdb;H*KyZqw?#Dfx+4kSlC) z2@e4K@sEGJU81oX`Z1l{o|Z4Z5xzOjkK>zS`(NZSE9bl%!pFZsm8YePF-7oX+!nh0 z?596<+F{TM{-+P;u=P!bT#ho5$2;Ho&XV4p%D2D6_y(hG@b6dU!jJJ&%18f{?c`}6 zgO)L-SmLfUGxcwwA$??4D?%6Qp7Fwx=^$-~nmug&?i*qsI zKPH+)c}NqyOc}@>8RQO=-nU#PFU(+Cy`}(7 zh129YjVbGi33oa)T0jb&4tIQ=NZCz_$%qbZ_DwuE6_n(G2PT!z4- z7ae8&UH#(c?Y6nG#eQjbX`SC@O#z$G?iLA5kxbh7pfvS9ZRx(kj;S53^Pamj2~PYu ze7oJ-+@OL<_m?mX?Iy7t;fN%(qP_ThZ!+>x@&^_W2kMQk%JmLZHgCImGBP<{G@Q1td zxoXua_k$*s3nLU|`}C(jZ6A^Gv0Zp0{E5SXrPZ_6fJ+#{nAu#++JU|(9KiLu5v?&W zv9$;L>=U0lVUUx))_kJlC;Y+m_c$7ODK;Xahr7!hP-Q_xL_8)ZUEN)6; zH46`TBc(XNLdjwa6L0{3Ty*j{tU3&7(UA+D=1^E>8&QtOOJP|kW8;MvUTBYc)T0~* zu&B#7zxmB}?T>y`@VMeqcJkuRxs0q7g)YR6nN5W8%oYr!cN!#GI&g(|a-_!vuDkmE z1e72%~%wrzo@{#~t{5BW!1fidlKpZlDBP+N*1myXm#luIwY)CrFqMMoem z=SaNgJ?|;o3jr!BN3sw(&!O;~FUq8lN2$#ll77MV*x*ZBMq5g!>o5QEFYPLwTZ1dx zz5(V<15WFx+G@kgVY+8&hX`LLGjhakhm6RVUvKI9h$@vv1|i%v|ht z$j?a`2szyiLt#yZ9`E#H%tG~6Jk8_PO%u_SXx)9c+t6VHcIuMTZE??Xt$@2vgBqN` zvA|9}LbLb>d+p}6>umXwV+D(W4u(6VzxNLa1r1Kf;>1aAlUi|Cbnq!j;bcz~KDt0x z=@@<(SDU2fMA&I0M62Auq=~Vvd%KN}PuSJ>-e9Y1tL>+WA(gcAo;&6Jv!Kq8M9=x}iR)A67LoCPiO@U579( zvGOYnbm&&$9;tC2#;F*;`u4ZKZGWk)b#cUrc+@Ax4jgAo{$jU0d-~rE5Ud9-K z&7J<=0pn8J5VWA|$RPTO)H!3NE(ekvgD&AHKk^}H)84-&F7V>J=M2^lX?uEH&^%yG zcc+cS`R-r3``D-I2Od7_?6Z9vQWgsQU-sSvPP3xA`#-(+^fLPb3}6qS;-IK(ilVX@ zw`knrmiP)0w-{ezG|4BL<%5Yae~rfEpHK478;wg;BGJFmxIzRG*%v{P%@G_27-nJi zncko7_xC-w&YkL~pI&AGdd6Gb_qq4hdg@f&Q>V_UIz<`4N;%LZ=F-S%Kljz zQ;>VCe@qLB=r3AuHK4!2W?848-@)v%*si}z%elJk8Lh|LDNi}eR%)RZrs+|vx9u6S zp4MjDxnR(~d*2W2o7erfCjn~s)nMtG#kaR=fm$;Q_`)%;dIUX)e`Et5X6C!43Ou3n z1Uu)H=h<;b_1VaP#<4bi7h2GU74-g=A-m#dm)p1Q_(s7il836?C8b-BRETFTILppH z{n^&rCG+h%Q+bdzbTV~$#q~e1@7;5m4YX`kS?ntmPcP=Q#+(9<4+a&OoM8>f^ney zi9sCY5H|B6o~&HCMT#7D1~O>Eus%*^La2Yai%TDA5Pt^O4}bW>zVd~^0$cev+;D^A zgmfrK`7hU9x-#WE#4JToay_^vZx*_3{)7XFfaiF&?3eVCc2El&~?tzVA97V z3>ta^MI}DKi-zNA8k)w z{#3hq{Z*RacWQUpeCvDs@%Hnk4R-s^`|PylBV;|N*ond_;eqj8n(*sgf)LJI!_;QG z1R^bhX-KPcu};bCp?$o~hHE;bO>wjz+=jX|KWd(5O@lJi(}JlpRa625>M^E$bc0$I z+^OA!W6fQzSd(E+!7RAROk30nb)()O z2<4A5vYdAiEfP8+KzbmctvsQ*a*C zOwQ+S$}4y99OT2o&Y1TQ559tNeXSIC%(I}EF-L@FV2qEs9{GiEo#z)wNdL-LzS80T z$VWbcSEZbDEF7GlXb1QeH>&xwMEetenEIlS`9D@#ROfaCp5{Wcc;BD;cjW?mkB*1z%c8;g|H zeP1vDuj3ASiA(szpZNsy2Krg>_w*U)67v^!8nIxTMenp1%B8$bXm{dcb&7sS8=iI6 zS*|2OrWs{>e^j~j2V{8kRcH^gG|DCY+3MFn)lM|}_4A(hJojI=Y}t$ox+ufp+K>AE zvlg|pTaURE@C9vThZudCITCr(zhhIya?Qt>KT&sZ=w+*Z@tryt;9cPXAG-sY-+kvh z-*L0U;ZNMT?5LBsv)Y=z!uQN~N`K%EokEFA81M7}tY~pY=1(O{q@FX)Z<)8AAakp1 zb|9Znlrcumgq8x&|Fm;bd~LI=S~U4$Ho*u9 z<=GdY32r^Y4lh#r6YUB1=I2}}McR;U*t)^)+Hki$xMhPaUb4)V%|F79Izl_@y5=c~ z_$&BN)w!*v-Q`OCypD72b*H`FwsdZ=OV?gzn;zb7i`$R1=dU`?-gM*}Y;n^9``nt( zC=Dj^^)1NkJiF<{wTo%hyFe)>BDz~#09Gv~}AOEo{k}!t}W4J*RA^hDb4)(QIty)#Q>lfyM!34as(*Xv7 zgHFHxwXb=c`I^YUD4?7I=O_$u;QR^N>BUYi+LN;GxI+iKs|~0J_Wl|0Svkgz30C6} zkMJcL$Pv&oV6b8d+wu=fSR3_!narTP``z#M!L2AvgL~>540xeL^RW0)9f<>@KshC@ zQaJv6!!x-U3)KhZ=Y#*o*%_O(7H5uY(Sh)^@qNJ?Uw--JZaxk{dCo^Z3J_LB%q0wn6c&szG!lLi9uWY!>vEQoMGjI} z=mi}OUha*O&M)HQkTS^WYz%RkzRIZERPcy?4x>e9|d)O5fA$n)O#oz|d|d*$LLOXo1~w|6MYr zBeTZXW)!W~(Q{TCmatpkbquxG@}Y&cy7_oFQrRREmrc?vq8=NY*J>NLZ<10@`@*P- z>MSF%Qr<}@Frs`$WugrI9#RQR>!>Q6`JvPJtTr$t2s&&<*9u$L|A1pMDoAbFkLbu# z8n08_$wU|X-(>g2w(s0!y`4wfBCV9}1m_*2_Q1e8Yu~Zl=IIQNW9A>Na?E-c^=Q+e zOgs-s88`->q?p(FAAQ|@64;E}_K_|2%RRr)3hE>5u8sF-H{oJC^{CVBrn|3K?G&F( zgp1O=rM!v>yc7)7ORJLIjF9T8S$V22^K@FC-I2hoh*EI6mtZaWk8V>q=042%ph?W* z7&jS1nKQlbeed&mJ98x#;y|NNqWSR)vrx`aqzf_ATql%u2q78cW88k#t6yy|ed$a6 z%pepXDCd~de(Yl(bD?GM5A^+*Ln2QI9^%OoW?~Tq83jU5-_@eHu_$7Ss#o5#!GO~n z^$FcE^@@XsWDZP!h<1P{LugEUfApgtb;}F%Clm!N%BHP?H;Z|C%z38+<6!j9bI(23 z-ucdVdY@x4E#<-sb5<9^d*m(j`%rMi&P(8>-o&S0x^P~7EU(LSuvcNT!~lH^2c1aI z&vJ6VaR{PSjA`^I9E<&f9tCb2&2J;lJ7nhhwVJ;|^FlU0Tl|!=QNil{ zTX;ua4m|Ms(9NxB$70YR(!@MD#yR|0TtIx>d*AzB-(WyEeYuf*w}jPGR6n!B0KG{r z-Aa~<;ZKa%n6zJ8H*K)CfqCj*^E4hl&KHwy+`Q37`nOs8h&HU$I^A$&ix!rV9=AkG z#hxOC+4;|Xovc*U?3Vj(v;VsLGR1?t9aYHDHoyC&wsOHy;v3=R;OSVl2A|J`vRAv% zS%juM*#Q@MJ3kA%hmsEVPvPyd4Sz=GGyLqhT|*n};;a5cCM_QnM=QR1BZk+zrSjvH zWbGQ4pI)@{MtrQ)h$q`=_L8%H!* z{L9G%0gC@(ow>(q2-2Y(a^+l9TH!&ESxp#&0eE3>1;?z`VS5}B zTeWJ{1XwsP0K(5!?Ax{5&Ykk3t?tr}ILv9nFf$f0i7KrD3V$27i~gT41#@qeLnF2vCOOy-|H*5s1tn|9Kaj| zUK|94Q?}zm@P~^&U*aqai}d^Q{mlx8QFwK)Fi>IOR|*3`i=lzg9(H?Ut_tNGG?j6O zg&rsi7z3au?5u;{`vg>JNXOz06n2=1`M3mULBpYeL6@O}PTx|Rpnv3rLs)}zfrvlp zC&i6?NJD%CJ%;!lzHh;vnEqK^|aqsIrAs(aTp@cduE`t|oitic=K7W;d+8*`6e2 z-LetQ|FkWRTxEDpXX0s>-OdH}yv{T18P7V|+Irh<`|u7Ml@d(Ll5LxI*nRPbpR-#x z$qXISMk(dSM+c;Xl)$ZBtBO@e1PnS%sHl`+W5?Nu&hr?R>C4WsUhAE=z?x*`${o0o zD{lHts4njwif5th8dh#Qwh!3x3p-_wa+w4vtrBqPoS$7gZT?_~bq#gc%K6JZdC%e% z5@<*;GYZ}W(kLsYdu{cxC(1(7h~2mLUK>>#X!d9~-S-oF$>U#WCw6N$xX$=kJF=c* zPUNs5#Ev;u|C0@HXg7dN9}UZtXiaB)P+tT$g(QZ#l-d`?sa$j&H;w8()Bhm6WxmL` z9cIlKPuWp{z?*sG-FMyPnXr?E`4+p}a6#AnWvU%D(%@ zJadJV7|1f<w4wKJ*_OpgS9Djt*>^wnsf}{P4?=F?EHk!#DaQ{>pC|&4( z^bvSZb|aB5N@422++Vc?-DI6#F_>U3k1Yxz7lN%or-x07LSmXv7it6R+JTenml4L zB6ApIWH`!0*@fZ`+Vo>>M1Yo|6l76@?@sfWQ~w-{`mNQ@D!wCEF6+Bu4#om6jvBxM z)EZebL3RXx2@mU$L+sJn;RYSgIu)=g_j-4t|q(SmcWH!|Ctz^}to0X0AR1 z?^`as(81#jb7&FsN*0^)&GS9eem)-!T%>+A)%=z;IOqrc!DWuZjrT3R&jvqUUXe+; zk%6{E9!dX3o{KBxj>Jv zY-5vX$+&D_V9jA%Wl~AjQ z?sYynftYh3?VVCYLO_G?m-Ue!L==AnE)0I8|Cv^I-~xx>npH2{VHUW1c)CNpu|dtb zKDfxAxZsyIf>FScmS=DdW5ZT;oGbMhXyu5*;Eux7SK|mq@_?~HVaFiG**^>fz)pOg zV-R8xpf1t&JO{H5Y#v{6$g`$9=}7NPEoCt{LKFy_ty6mP&6z21PTn!_IU_-SsXh@m z-~mqh9E0os{LlZ`CF+Nshmr(NVe-HmR|t@osZTRmq%HsHpZ;kAE-8+>@m+v}_+Id* zT$G?pM7bJr`g@FnK6EP697J366gtjrc6(Mq(3Jrob zGR`2Zzy&=eE_98_Ap$eThflGnLutu378H;M+Dba-6QFnUgATgWJ81}q4l?<}MS7>B z%C8(B6o>qP>&h#ybRi+}5uC(W;Ai709t$L*j^((cvKSwN{*$(H6$TzF40!*fPs*`^ zoA<^o72sF=nU#Oj!N zZ0qXKue_9&-G9{A>n6Z!!h$SZ8hOSA(##AmB8f)?Uy@t<*^cy4A~t&y4&I5 zY?8aiZ?|7>I?t95FR@iUeKHX$1swpk2%}Q)wd#Bk8N^k5jbpl6sh&V%<+Sf=^xcBM zTEHG{orXSTq_9~y#{ak&hZ(0i&HyVb2%>5Sp0x1;i63H zRJntL0pXLr0&m8gmv(?>V}S|%g&N%PcNFp>%A~)ti9Ce6YWYTQ|fL$UM3@($Gff1R@ush$Jj61@3(KwnodZ~402KeW!x#gm8j!OM)i%7H8@uIm!1@D$bPZm9y@B)v36|lk@h3`$^dIo7s#-9>O#T;5A9sHJS*1-0|lNMg@m67 zK=~0v4D>-mjDmm#af66M2*aOePnYhW{MUc=m2NN5jxly(p)9)f)?1xngK@@=uM;;B zPPX$xOv*e0mbrQtPS`sApa1!vzG~&nGtV?G2JTC>Vvh@fVbllwK}=Cnp)do745B47 zARIWOs&HHk9&rax!EmsR--VvwxrpqyU?w6BM4Z8y$qIs0%v=%{;SP_=Wz`S)vnmKj zdty5tKX#I_O33S>uwX2(fKhzD}IIdFKD1*2Te~Jf_LwwGXEAuC#R0fX-q#69eop#!34nHfnZc|^z z<*<_AJ@r?sL{&_P^` z1<i}Pgg#|2F%jQnzX9TS?UTg3H*)lY?i#{vWDx8C;? ze?Xs|z<&rPb{ZfEU#peUoO8_TepW$$;q#w=EFiARoI@DcOF;!x`NBi_;?Pcf+gkzD zQtZc)Slvc+_S~?}hG5++lXF(w7KyoYl!5$e%E=F(?^O(~=pAddR-Loq^jL8;bCHlj z(Y4EK6mvhCtPhWCdfw8kmAJd@#$Q}zPhR?TJ7?j`?PqqowThpf~|B zL0XrpJ}t%Sb1kj2J>z=T4mEZSveI~5b5`Jf_~Fe8)q)QRKlGqDx>Sk|Zcu)hQy!MA zquBK(nT&^{=F`l?OCRjtXkL|Hd!yA-ikFDGIpdHb-(2j4C;H*PC z(zo2J_0A{_TeabDp7snLFKb8RwzlITyKT>1ZrZ57WxM@y^bT9M;SPJ+yp!$8k3Y>W zz3n>TMUt99)n6;1M=_D9R~93;%cN3wzvd=ti!s_pXP0PYr^=86UT;1{lwbs1qnkeR zdeD|0Ysw#l-HfHo*O{L%_9C=}W_{ulpKvqQA+Tlc$Xt!Zp^ULH&imM`cU<^I8vIIn zm&R}w9>6OgWQOLk__2Ntg#aEJ$S%I4wZoqUl)*1Bu5%_lb7OYCV5$(s5dLLZ6r5n< zv2y!|f#BO{W7-Ild-%~;xKP&pku1yLM>}}mpeVijjwan{yAUKZ{&`!g&xMOV!+QwV zyGN8j^1eXr_&pl4b)p`CYzFu+ryq+K$&2#vkDYej|DZkc z%jX=>K*|YOPJ9ED$64Q$g`2K^X7Nbw0Wu5oeaO}f zt+%x@k&bevTiNemlU!4exJK<-6@T6;CT`wnP28i7J|I8%ZDrkDLpI&6zbzUUfg<(x+ zPA`LKoj7c12Dc0V?u1kPawdat$5jzy(l0m- z#~{r+0|o7dP!+|FGnR0!u5ga`V}#Re1u%x-PkiVpOh1AcR!Bqte0Q|s z#YB&|Ebf5Lm17wN$iKK1_sEwxkv1kf(7x~^FXAv!o@xB^0;-=119KGv>AMR)GWvMQ zUnRKtuCBfITH`!t76!44rEI3AlhBX}A)U1HQ_$Elsz*T)hme6V_+;_MdM@7O zNB&wFjA92qm|bYCV&_reiO4IZ(rPRikus=NlYUn3`s}+&dDS?wUP6K z<=nFUCVNKHv+e2gPO%kFSZuqyB_z1-R;3*A^V3F|y?eb_ovd+2uR|>(+JV<^4{Jqn ztqsMK&Ttz=fyWtjz86j~ioceSq*-ORu(DY@%|;lDR0Zh@ZJ4cPUe99n?sA>@QPWPe zffn-J?C>dq3lNA#UD#JgngSpGsQT#+?gS(CN8Pt$=T@7iZGOES^Q?Dqx81U3ofLPR zbT?=lc0XuG)fU+aiyp6CZp}J>ZnIKh7_&|4&3Sg(@~2yu1RX#5<{oyhsd6RDdfLuElZ)*;S2?>tw~;UE2s=cqff6nJFd#RZ(e9nX}_@f6YDIoAxiQRSw_ zK;X*f3bd8_1P+{{ka7jR7WdOe>=66LH@;!lCAviaLDon=gZ8)rE44T6Mt>#$XnXSY zXQjhG+J|T2qwqrchRJ`*V`mj~kR53br_v$kp*-%s&>*8R(Pt?q%<=OaeJJ_~aFZW0 zBIZ_XUYM$W?Bv7zIdutzAo)OV|NHA-_p3+!p81)dW2U^J$0+E4XWhDWfUx&lNM(}- zIVN~R0qF`)A}0Kmcl-`x$M<_6^IN|8Xm_V&!Y6IzZ7f{Yk4d01&Iq z#2>;p!YdQhE~S+?Q++>0TsR)*a1_`rrB|my7j$*YGK3W7yElvP7H_FYYEJRAZ17;& zS%-9e?Rsb2knBY{D@1=}Mp-zGKgyV}4l#+%%3w^U&rOQG6v4(vfJ`bfnWfx0w$1+k zHJ8`}S|sB!AJz3RUQx$6jg^3@n@nz zy>Qg=9v#s7XR_IhS)yP2wO=zX2OYxCnf&Ary>j}L=qbV& z9EYRhpp7n!5M779F?Ix8_Oh)Xbl=s^zoGubz7*O(w9Ij!TqL$0}nc?cQlCVM-b z5+-y?0X422T^vu*);z39x^`LXgpQ5tAGD|U=)AV&J$CQ-eRj{-y;9F9e<_jLo4ajH z!Uq&b5=B^Nf2S>|EwK5uUabr6lvztDsZ_qi-ij~f98smfGj_OXHd`B#f@pl3lzKWE zphc$5nieaYRBGAoxOnqG3n!qyYgnUpxcaOS#Y7NlZTw@ zIO;2)3n9$*+71)ytb3u(A)jxy`N3@hu~T`D*t%W!*s0AY+KET5)*|E)DF=2bx#moY zq0`;$)D=&)j%|zW?3TrL>XV)(g`xx@63*1LLV9`a2pirl<=f&mJMGvf+HDW~RA2$Q7c$&?lmed1kSf zx4mQ@5hvQu?+Tx`e#n{XH-IC{^m|nGNRS8EqR;Rv8 z8g{PGmyykci+p+KIlh7D%aw92FtrbN2CU?u4fHd1(!vv=c>Oo+9HSkO!GK?sXwVU8 z1H0~Uv}?36^fUUc-+51t^bwc%STaCP$8M%G&N#!%iz8nmpVg~Z`@%tJr0?=e^pPy- z13~Zn97B~weU!dLZ-LvY!b(F>j_1a3NFoF-dpA0{8S+57(Wu zSO5Ia{>+Y0KREZ?bM4iyezosB#{A`}r=IGYKRmwDGyjIBk{9RdF+P@kJ2ek&i}N;2 ze${PXF#rvMPNWMn;{J%Nnr{i-8FmyknCvjX9LoMU>NIzX%K|XcG)dVuro~d2hFrd& zTc*o*SpQC0AZQjNDT@!g6^}eybe>$h4w{?ay3~fWJI;ERC=X1uYg}woUs6-Up>yFk zDn4>tmrf`4wQFtzlfnf;vlh=uDx&SpzZP(hhci(7B?m5y* z5sEqN=MxSS!QdVf1$nwzFmQ-JX=AV^jCXel?_P%d*?kCp8JLMTl_Ng5CQpQ$m>)y1 zNqN|XFO_8}1DG1}4dP8bfPpRWiNPkyYjh77z*EGJ`*gUg&nvGNVZg_Lh(9ZA zs8jUWXkVBh&W(Y22Uoxn^(*s}f8e_;Q-0(RoY4pN`}-?1tsW{2R2Zl*ugliZ3Q8AaT8wLDJkM0)9Ak?vAEQ(T zlac9Ycq5p}s&W+u<_ZR4e1}IX`JU9zgV*vn^5eTg;KX;vYH-q2uEM~6V*pkilB!8` zi&o&W!>dIXGYa;l)wG+9IkkwapUH;5i}LVuIgcj)+U-RisA}Brze@e>{=m3rIcy?I~;YK;CG}g*A5Sv>zt<;y)|3Ba)B*e(rb&CF195{uCT79 z^KE>d1RvTh_@t#zQTr$rri%D?GoS)NNarj%b{P&!;L=98;PNq*U2-au)zv6l!ANm# z9hJ~rRsJ(Njo&xkc%#pAP|z`dWJd+(H97rJIAbu17{+#X(Z@ng&s%iM<3ZEpVob-6 zc~8(V(&FGL?$FuoC{qwHvKxgouFOza%vp)gyp#BAwb&7*2YJ2pWiRvH#T*&I`AZ0+ zarqpJXNM!fjU11u&(I#cgU|4% z57Tx*3t9AV@fW}7@JG-uU7v=49}y;;HpS49;iv3nmpZ2J5IZ$HU<9rpC*lkDUtova;nQiN$8$Pk&4rJJ3HgU0C_ZBxD-+TkYt zGkF#FB7(YwbO-WjhL07vLxSaD*|*r(yu;SC-)CRB@2mEIuKriM_NuFG>COdqe8(~N zxTQylhOkR-)V9ci#h}dL*Lsx4{87E_uwAX&Y)8ii>+gKncDL=Y9ZkDzNW1pnfm>yE zqp1}O7YP8}MrD@0NxSVTH$4XED$_b=LKMRZhwec*`1o-U@nEhA3+Dq5akwB#5vFHn zbQCf2!h8TqCm8$hUvb6WK~!<)x`Wt4SiOFF=I(VD?BI+QRp0#PH{CQ5c!H>c4;;i3 zJHrrE2HK}S^{MVpI+#=Pa;BAhb>#yk&k)SiuSO}A!0PrvdQo_CN zdS)_;A6v`WK^P1W{b8kW#Y#>bc$|>0`~r6J!ug%D;#qgvH_}CX>g{n8+%tZEo@4b> zVW7f5g@FbbNHnKGh||8Hi$Oby2VIKsh%tk48$Seij3cE`On$3nitqjJe}75CnMiwH ziGDeKB~!tHFl0hGqMJ@@6ODup`=#iNnLf7V@aNCuS-A=Wa~uPV=iaB)cl{Z7)z2CC zosZOOd@n1sdK-ZgJmvM*U+>?{9Isvl-dx52tiLW7Bxoy|7Ww)lU({WmMS%2mg@wd6 zDaP8=Cz;}ASQutV=74k$Rv!tFfi5S!c^NOOdE^+LoAhsjK0QK zLJ?)cbV*l>cA+&(Imp#ilOSPK<&1Dg&>%lY0;;zWi8cmoj|2_~REG8KZrLG|_bpP| z>F)vU&KuAUw@$647WQn%z!p~^%J8Qhw{n$j>)B?P?)k30^@kVQ8^8Ak``sVD)h@i^ z0(;lx@3cR@<`3-ZHQ(1b*J@8V@;Rz9X35k5vHmEZM2W;HyjN+7) z%$h^0Vr{A==0gXCyODOCsn;Yk(XIql9tnS*U)>L5IrCR&4m9br}$ced+FUV0k;xHHO z>+4hY<1PpfnZi5X@eWVNIXzhE2?1x6MY$;RJWr*q+yP<$9MaBmv?Fs}a8Fwy3t$J% zWtUy%ZN@@u+6(i3FL=QVeC~`1Q7v|bH+AjFSnffREDgE=M zFMX+}!31JB7f>ho0|xqPl*2P;a78^xH-Wzu9PU(q>O~&0gD&RnMT7$8cqVS(Ec~kb z6c`Y$qOHBXQeT6veE<93cf8X_I5QA)lm5LEM;CpNg@NFk-L$0PIp~eILCO#1?aGxa z9SG=)%fM1T(U$aM`Y0Ec48EEA68Uj0keoEV19v7}+qE0pcG9ucvDvZRv6GH%+qUhb zW81cM1y^jlckcK3_CKf^qiU@aa~_kH+X?fXPKjed!ia(o zVbu?KA;~nSG7|0x`5kh|NOm@4dc4-T`)O-_@%6d;uUl4XM@jya8=F{_`0Sq>5A*vv zj~i0p1h7qcy8?W3U+XoR1_|kH>ed~YqS1k91#>+r@WjHai;kuvOHWcM(@$nzeKr|&0bUx+}3-3TlK;LhYX`= z%tU?JeHr28xfkhXR=NF#s;>4-pdN*%@C_Aw^~D**ff7RT-Pt+HuT+Aa#rJ{San$_5G+p+_-Er2G z#;0-5j1>2gE!?(ju5MY>+LWwgs35fI29L7dn-e*oziPv}w6?|o(su6aqC5vj6SKDQT(m zZ_hPD{phm#cs1~k*B1*@i+PSq?4=&FS*vZ&;)-<_a#Wn2dXj5)ePw!%r>gE&>qio< zBol}fbQ*@DY9jdE1H^|HRB^bfuEd6f^#S8$r6SaY$W}>jj+e3)nA6o-#%L{lN`-_v1i*bq=+|sWD8gWIS>6 ze=PSzdB5!+3@wmBGS;VaaN5*L@L;Gjtf$-arcu9^Imn`{bEi-qIov7)Y8_qHBS07- z*jYi(G9{nGL!Z)M1zF+_bf}KXFDM6w34$HcemZIvkFCWha-U!w@XXFJ9TiZGsRAg{ zbd2&|r_3*=vGp|XU|Gs0N3WUuUMKaC?niz$8;3aR^il7M|3-K{_WL>(F#m}A_kyfl z2Pwj3LB8_aAKcwI7KW++gGGn>o^qU)RK#VM6QMlk6uE%JU?+~xpTj)*PN3-Nd^LgS zAp)MUt7r3p~_a=`~4Oq5jXEg*s9B{RZ5A>{msq?-LsuW-`d!ML>Pe8(L@R z(T=L*Hh6iq3CG?;a%k-4Dc?1^UNPcH_-ZI)=?Wvv^(ANbmC(-k?Z+o7^i_9WNlQNe ziMjskgvJ)%QOGwmca-iubHGw&i}Diea}U|CoP2mItdX%mCV|Qfnx#fYP^k8pvBd3F zZtq~FDqmX%I}&L>(9Bbh2C?(TtdjT$o4W<7?IcZjQIkHdNaqg0@34lzZt#{z|7{_S zaw?+_*FzDS;J#&>=N$dmCk=Wz&4J`@_}tzNnynYpvCsy0H@*leCSNx&^#zBfBY&yX)eKz|!qNsO)a?CiPq~~Rrsb#fy4^iGO&=$2$uO~_$_=FAK z&pE97dXuiFlq!|ORI(Dj;?|GIDsSRIqb>^eKGlRVy>g*r-q}?Cr+}WX>*mDCdK{3@ zQr@y9|3}+~N${RCo46Y|lSQt;nb9!>(siej z`3p<4@x^Ri5<3proR{{hd(rpWR3~xv}OR!DS`&4O#mrI}E)SK61Sn4Sn zUEvwh(thbc`DXku^e(_IwMtZcPwVpthq{TdeHLRD1s#d}vwQcQpH~SS4@qSDiW-Xi z!ug-y#vP#u_yDtweIDCeTNGo*Sj6Xd+Q7LRl#2RRqb>m?(x$85O%SoW4h(Yexgst^ zxggyqie!V;1(o1ygdOK7C5J3Y%UT6lFj0uA6mvz{%|jVaW2|V6!gn~q`?v3KpJVIW zUl&dBV%8j$hhOH}Cw$VcGTs&Le*e14YcLof1GUw>0rlCB>^t|(-TIo@OiVH5-1Tlu zi!h2{c#|Qg?l{V{xMu}(Pu;aofZK5RM7y11Xvwb?Yh zPJ?bI-)i_hYCMV7JOyY`5y~#+eT?V5%m~XGCO_VM7iVATXJh2CHqS#Paj3**?`SNz zi`@1wUrO>k#WHY4&{$I^<>-sVj`Hn0Jt5K z+{l6}k^NlI*f_>Ibf@h0NA_y7m{3Td2*EdDU(u)1?xgOJu9XH2P>USdvj}$M&;H!& zf**r|O<~;6|7k0qpuy=)W7K*xH#iIC7UY}iv2vv5Te{Qltv2%ITr%UWBEw+`Gc@={ z-Y(qo9$dAHeW{CrR_axb=)#WIl|=bn_v-&mx)RX*9JzD*%aNL?IQqcJWO&fiKPRXs9oWS3jToqpuMs1zJ+$1b2}-^LGh-yB2YaoK z|9pL=Hl#=U4{weB#1N!0ytUpr-@C(X&eJXazj+QpdeAV|Z8=M$);M4H44=d3s3s>_ z-e)!n-0MH}Ioan0geGo}yS8~9M^Uxe=tVVt83W)9(WJ_Xu?3n_=A(c>n0A$12A)~) z5I}AXc#FM5m<{m;eM&Y2Dm#X;%^QA84YFO!hEiNw{-CwhKlvKktESOYyS$o`Bj+^?C3dOVJzh#Z-VC-o;K5nnQ% ze+-Q(?I3b)0lXu;R0ZGTKyQrzX%6%o$hpzOYEz?xW2-d?r2p2Xf9LLJ&yyoqmzUGokAWiyoO&+~ER@D3$ePeLo2zOZ<0m zdb#4%2@@bQievDBkqtbA&?c4@E{v5Jh{t#rp{ITXcK zT&6D?#8nHGfz=sxsy*v5b5Wk089_#?cFCeC;IS=9YX@@LlD zd|i<*Ap9$W4|NAMGolbVgUA{0755>{*sX`^K4mODT;Vl9zgqYQU9n&iR$HI~@SQAo zl>++7-UrJU$;21l7u+p6AzG=L!iOHB!*f| z%YWbn+Q$%^>fTnz8@V?gclE!+)RHg@D!+B{yG?QUuT2pGQu@N}z^%m7aTD#ehYp(~ zHb>#Abz+&VtLW^be&-+2?Zj_ew5}sRZCO*f3eN9%T<~6~5!SJ4wKkPvvLXxGrTLs! zVHdGB9`H0t%6DPXANa3vxxb2VQxW~<-SZrVuf@^)GkfV<-Qer&Nq|m`}PNat#R>cw_%=WtzHU$=glVL?etbAt~GT=UAxyN z>C^hMdxf;|OtS>XTHCHQ#=5>mChX$lxO;o&rFhwOrs1*0VbBvFXUk?Ae&eDXJvEEL zwn6*4ciL9DJ6YNZ7RRigF5R%MLO>%wesn@^NJs!O11GV2xQ~S#s_I)N08O0^4+9s8 zb%lb7Aq6vwQw(!lXuKab05*&iM7fuMRElVJeAJW_`NA>=VK^z2;S>jeqC_-B2x9A; zH9+cvp23yhu8TjFhloL0_x@Yj(O0LY6JDEUFlVAuDG5E8kAS>G8i68E6-FS4ReCszsb_5ulEZD{c`@&+srBGLYC4ax zOjZ$FFwH<0h%7YY89q3aODH!86SaxM_o656^K$pA#%?rJ%N#(PGZEQzRp$1F%4OD! zGQpJF&jg$qsc!@irG6u{oa{+CgJ~3VXSU5{GQ4v$3+~+MR-j`xDE0;HKW;d{5RHR} z5<|fhu=1ixf!lW1q#!dgh28j5rBh5Geh|++AD5^JVnY45H%O;|LW_y~1{>DqOR>~) zAqFu<`m)fN4zp0|aqVJcjvWSsaL$QRHo?&6Keyq48!LwsAK;zlFH@7dhjOs4>;=jz z*9wBGT%7@sxbCT!ok9ZI!$EtXgD11e!1BO*hYFeAm_JZ=q0EJU{9SJ|6zxx1dj8k0 zSr1p*9u*)aunuhYy`|h->D~-AJ%S>PRmcp`F&{0cIE$}@O-hQ!x}6}S90%wz?f9ep!aeyG0LX435<)6q}0utkn;tlVL<*3(af^V^P7z&&ca?e*8W z-Fz&OD>PEGl<7)M)bBqvb+X_wOHe6-P$AB#3Gw~Jk^x@kpDcbC*#|ZHzZh3JcFhU9 zN7p(Sdg&oplmla<<0Q4(Mz4svHe)Y+vu&*Uw}9~zCrvv*cx&hR@|w*zc+P~=>e@ z(v5l4J+a;HAzGemmO>cJ@mFfGqj90E`yNRfl(41m!14r{hRRR*&ah7u3|s; zto!=YoL6>u$(?T~1D8GwlSE!Y-5gPq;J2bb_D33wz?_HlBkY|R$TaWeNTK<{ue?ZS z5MJGX#W_mkWEVZZJEONsK28^@N&XwrV;d%iSVz9c`96?ojFCJb;ezZ^0PDwa;6lsjJ`0m)sHIzl$F zXNuRY2NGjub*#xW8PguLaZ!2r;QJcA9)vXyme84qcz7Xhk#8%`edq0+erIY6`bD22 z&X$}HNEJBa#Zn;#jT;h0m3^=0y8f zcODtbtQIHS)YO4b$l!$lnjZ(bLxCP4@{q^91zh{0 zX5UNM?;NA!E5FwJtX+dL2JZD(&90?T7lB(u?Yh>wttZUmp9YC&e8R96OkgZru9aQ;f;toL zPOMhT0FmE^gRAqR!@k$B1l-dtQsedZJ@|WnCLN|zoUB!(IR?H!HKF?;E3V(@3IEgM zWUtLJ|NCo;^Q$tiNLEDV$ofw%k`jPz=h2bX#mb}L%KP7BFXf9UKPH?lh`{)Pjot~l zn1E8USiV178r_fq;qOb9PYl5yhl(HtI;Y=G>JUV_6wP`J-is%OMQ$AJM-vp25Qw3) zoDf+EE&`7#*TjB=$UAu`f)7C6)tY74tuZ@0*KfK#N(50F5(?=3eLSE>@YGw{@Wm@bZsu~xPyq--^GNtdeV4~ zBBs8NZj~v5BxQAH$MU~Ff%8XUXkfIO|Kt8B#szrOFZ`@ZTxY*J=!C#esrpZt4~1~} z;h&qvq<;k_)I;$C^Fkk-;+5E5z}m{Ed#c6%eZqr+%MzzMo`jhOU;a+nq%GnIs*O!t zkfyUOvAO5UEYp7144c}M#4WP_YBCu}ku7hG>~=oL?8DxNbIm`6K!{-EdX9ESbEQKZ zfOQzsE0q^aB3DfN(o&t|c7s9ea6a>{QwOWDFcxda zvM;hu%)!K#Mv(R{KwlaA#ZnS~`;rqGp&XfMRI5zM_gQ$d--YN}`B?cC*Gjdq>8slb zF3~*bg(E7AR(syZKQnY5Z{X^#i6yhqJXag>-X@EB*<`o<%<#Uky{l@ugjVvSS)!y2 zFHqBe-nP&7(h+4 z!|Y!*E*g2Xi2EBZMC62ctZ7>F{mGkBZ&w;3Fft%K-<|mm4CCZF^%oG{fmK7o7)7(u z9|V%{fDi1*h3B1eW-Nl+^3$8f@z5RoXcVS`YQ8aC)ot{UY2YT^ZO3I**Z0aMSq;0} zGe-tT@t?3zvvTy);ZYnkc{G8FdIPMKujhSU!No8FK?@bTltyVm)*n4HDoDOcub|CJQ*ay#|8f2` zFec=-SeRqDRs`#{5d;BJv4Wmay3)67KxhSP?3L*9mEjnVRnM`2Sv+;BmItGz;3Esp z`NN!SH;2&&a|HyPqBl9c^r0OK0c*;751AN>I5GzE!&$i=@$5q1?YHa^76R7`Zkcux zRzZK*GwpEX(QAu+zxQU_f#D`s%k&f5Ji}* z0_9$fFI>BHOTas;S)9YiFV!uw^3N_ct7F7j{TO35YcI8Jo^eXgU7-HD>rJ^8W|C*z z5AoT%vI*JC{XO|nH<5zleu(LeK{3E;Ddc~{VnA5SxNHX|3QLP)uhRXat^N#>pq)&1 zwg7PZP;D^okTS{-^Fn6`*9Kt>t1*$s)wYfRM-#Cd*bkr>75~Z}%}bgEXt!kq2OT0$ z&CK;@m$U>a9WYzZXbZ7SNA}B@A~{ix*vYT-f>r)chNogE#8&6)T}P}^D*gNQ|I9Zx zzivX3UaF!;0a^RJ_n12(zdt!O_UZ@vs+s##MHdlN1;UYZR2he(mYYmcgBDB#7E+u| zN-HG7Fq{dVdSuXTr$6CG-*}KhS8-jdL7t*v4EJjo+^Kh%yNdMAq{(J#g{VgLES4+; z1kY81Dk21x58QV2coIgBAyx+^{?PMI5KL)ggHxd0vI+7S4kJM7~NA&rG^mM zb7)xSR_s=7I#+sb@9oCv%UKH$nE3cr1blU1FRtX%Tf4<{s*%mW3&S4l{BG6QgGjd~Ed>Ucs1~QIMb#8riBS za+giM28i`eF!u-gZ(y>~ScAE{FaeQLy}z>d51l4EOqS0H`h|9W?WEQ-yJ6W7 ztEDfEk|V>uN)8E|HRyk;;LdSMWzk8|el-tW{CE};3`)zKMjGx?SU74+9GRCG6!zQa zpD#Q~^Y~7F9+J7GdKm9`NRBaf@YbRvO2|EiVyx4b*ZAa4!u-xX=*d3L5#*#UyOYL2 z$vyM9gyr&SLJ{{0k?~>HE9+bxoZ$U*DLMMiE=%60oO&i z*e^aG#ZdnvF}4Ax-j1WO49LJU=q*+r54j`-Tsth}9ZGpn<-@nG^W8>1s*>q}iBXyb z=zGPHtSV&KuW~wjiFZfpn_At@4-m^K*F&2?$EyK&CTA6>>UhuPDm@_OPWXYxyf1VG z;xX+RZQFm13)d7&{GwZ~LqshhD_f6$$6F2aO}a72P9N25Mm}Uf%sl~j-c!2hZ&3R& zBM?@GCv+fA2Lo{gv7D zm{MkfCyY31CiQFUsnNjIL^BFO6Aah_ZM9mGU-GXD2q!?iAu0G=!Sk1p$DYVQzH_PW zA4r49XcUoJsfiJ@8Va*I9PSQ)=z#w|HNs`SC^NGH>U&l(()oPI6KVk%6uk>lj<1x~ zMOhJJIa@&Q4e?5*#s2BT5*X9c4}wT}Qo0tpK7ULUaswLXYN4AzCmWNrJ7QI>CMY2n zI-aVWXPDuG+BE`FUyS&>K^(&$RMWK*8U)k6>T; z_zw(jQcbs6dq2qhnh>mH0;DH*qhl4yyjs!%+W}j|k{OUTT)xc~U7A>;t)udI+f&oEzbK^F9?6 z=Qh=kz3CFz)7XAS2EU183$gX(c0x#^giewoF}!l8cGq}et0s}u)wnT_a9ixxU(oJ9 zrX1Edl)+6mS`}fLMOI0e8C1eDjjtm`kDK(c(>E$zEtKVQUpo;|`i0l+?#OSkia$9B z5Ulj}L|6w3k znft_Wv6Fz=>ND(`bndhWQ;-Nt_n?p74*b`UQ^f&(4>`^*ALBaZDv;l(70}X^ss1&X zV`*~Aw>ty0SX6Pdo7$}fa_=pw`MX5REYcL^gESL}J9^4H*(2aIqBxdT8O30TU*@b= z|CEpSel78vgLD{a^qrNlArg!`3Ou#K{!M(^BrhJV2FL9{$REV!t@0gm9g_aGBVryh za6eyuyf6=k>Mw9Oa-&4pkRp{B?&w+Dx9rikQ;R_6!9F9oMY6KxGRyqHnM=V$Rhl=+4Lzg zE*b=qarCxH8A}h>vg3uljNUX*J>Rb7MapLle0j9^#o9dxzbUdkc%zwPCzJj8tHt)@ zwAr+XvKJPGSno0!y%7Eu9O_L14+TbW&}yxw-shxpFduPC5mz*y3WU;V_lVB@?^z{3 z(_M^j`rD?pK@@4_yKy*ZbJpz76Kp9ZjTWGFzw&qV3dNhwlh%~Pk^Jq6z6bX!0hQm( zJM!(RdD5ZBL-UDSvdX{MUF$Q64vf|hy~ATuN^blwZ$D6Dy)aUTM_zO&qNrCJsh>r5 zbFm(I8K5Vu-TNL{=4@?WKB3i>04+n37@;l2g%DVoh5a-fK5E!M^mY?Xiqk5Q&@Ls| z-er6y?gQIxSSB&haTQ(#i^^vGe-bo5?9kJwLXzY{UU?_}9(M6z`a2@NNLC5G_(l?< z_x=WtWx>4ql<%2CPk}#%+qzi}>GxDdseU7W8392eiHGh_@*?U`(b7$~G5=uzij3M$ z`|YESJ45P_0)d#%z_1VZRLt{S^-mu_81k2T$W}xKlBJ7U1|W0JZ^xCecI`mV$` z|A*Na18iCkwfJC6?goBVN`vsw)Ia|14C-*9bKq_>Pp zY^Nz;raoK>_>Ii!xcxd4-)J1Gp?*1pBuYELaYL#25qj1&(99^*T3`w_^ePZW6W zXS1gO?=hgu{ULFb9Xx423T?ZR91AsK$$1IK*Vo*P$4bs~bU^ zdXSf%neMpazfPHpdxo7v+oL2ZeUI>2aoEhZ*SLmqE2ss1tI9Z3mj^{9+Q+*Q7tAovUF_-tbI#C=^O_!JW5 zzi}KBYJ6+N(N(V-M?v@)8Mm{|Wx7)R+?W>%sw3SqG|sf78Lgn@jN-S++tazh##9{Y z{UeNFu|K#1a01Lf)7vHnvb`eVk*}q;D?`96|I|{$^eAaGUQ7-e#`Q%j``b>lS_WLg z6*}qZFg&6IgibZ+*OcSIY)E5|H18)2W62WzAR&P-yd(Xj1nA#m9|=@0a6*XFTUQd zpTTuck3D=Qx5EGrsJ5frp(AkF|B)7vej-5F&{wGm>Z!5Sipf2GH}?80D12dMQFe4b zD(C}G><6@8bs$jby2r~)G6JY0-$0>WMzc5SlWeBxg~OzeOj6^o(4ecu3GLOv0zMJ; zvL?dJ%SL1y1RycGlLk3Wx?9GA;e2h~;PO@Del;SYeVx(zXGw_-Slt@*NN}EyEh8Xa zYXoccrv4g{J?YNH6vv*HB|}-^tW=}-K9{4iAkGTUG8F`jMYItDKk~YTgTg-rEk=+P zMjZb*xGh8Wt}lTpoYd}Y!Yw@G#}rciM4NMEQr_O`wbERfVda9Fy$zZdbzb4u9Z_DH zvK5#E&Q0Xc*YH?yg6v2O4Wi&UGUfsw`#v@Q3y(m`Xta99jJ6U|g|AD?W;Pn#S85W; z+RXE9t7>deED?-_Z0rE79QoAyfbWCCY$;OiFW@hSWglB3e~!Uvbw*&q^3_xVp#HMI6CvL)@_HbGGZ!r%0voX6CrvLA`wLj6?le5}33gQMq;+Ig8sfnc{TE z^ocP&D~82MDflAVwr%*LcY+1?Q{xO(A#VR4OxP~NQ#Ph)-%3N5^yC;H@3v|et7?X# z;IaPRxyK$HbX6rhJCUFL8W2g4pOrA5&s|c}N7^!Rzg7_ut8)<^24?VbI-AP;2Pm2S zo&$^|atAc+4NVs?$b3jjsY*K_KtfJS}V+++r+2o)nxUkZDz=@p$ zphqs5F^Fw>=5>eBL4n4;9?ohvLLP3?DV7udRx|w{2`G#n3NIEl%-V*wj}C#42Z!1t zOjQRaq7?ckG;^^OCqaTpAV$N%^U0@ymm?VT;^$!|P5LA}U>INc?SmzkGdNp}k<^<<5-{?1p2*u33i{2T%HoA(+5L7_zs4Q#zyI-rv!k03^GDt?W|V=N z3g`cy1>h4TkkX26lite-!qXa={9N(DohWx>70-Hst8fK$!H<$x(7rk}m?BP4f3 zXsQDpkq-6DTs+RWKbw@p%0VjwaZfWR-Y>~r_6%&QuWBn`?Wd!FI_M!yn)f2S-I7AU zPFX~-KJbhMWP{j&)39#>ikP^X=yrj49gLEuiCR7nsiKsH4e32 zX#*w;Ncdv)lX-FoSAjWY{VhzbNA49s7lr{R3XuN2K+z@>YC5qL=i`qY7|4xL0qVr; z>Hxjq*oUxHo=c?vQuLJ&_EX{~;G@3I15)^ZW_hy!(0T5%OW{SMY8W1_DEdljOekMW z7Ulpy3^2-@p?<0mK-hKFTd6N*r_=!tbk5@(8#<#g>)tYOBJU>nxi+dygEF8zKE1iK zoe)DvEQ*_RwnV*>*;>@P^i~#tig0r%5|Cbmjfx=>Z8RWAAP!HDVCbn~=2*wcseKB^ zD-K7Y_QOMw+Vr)D8+z9ilsw6>~BtYF)$iGe>i7zF2fL452W{*H45-@K5^``4P_3j;;^=2XPOmiH7jwbi1Jd<)y9b2_k3LNg7d{Op@IXi=`${WE!*&$kd zwJGw=Hu!^Zqqo~|`Ru8t5Qhf!lDOAQc?a-<4=W);i{n1KDA3Dhk%>UtMPfRQ)=p4K zNOw1>tulBA_MU zn#h4lN5`pbhY>EYAo~-A37&Na0bnSfv~NZey%!1- zf;YlS1#HRBB98Q!}tUkFXAM7ocv{U_`Jr1R8bpR`T#)eTvIKTkQR5&uUoUoBcdp_zVh zF7jg-!%udC%a@R77g!?Ezg6n(v-j6120dfB?E-4hVNnZLZUZ&6BdWQ}k~kAut7_*# z?r)&xzYbO0nG`Er8VDrMvZ26#u0oOFdIHi6ItdN#D|MB_uuU^#STfsrgVcX00yFv1Q1o)2sy4;V|b*$f5V|OPyQL6CCV$2`L#w^Km zm+-O=C1wMqAO&J+(P4$l0K=#ZeG5dk;lsRvV;)dtj)6pSkr|65x$S5*f0E4>_?Q>O zMznk{I-Jt(?#)BIdJy;19+>xKp*c?*8%R6PzQzm;M6$$Dp~L?<67lQu9-H1wsqG2^ z!$?a%f??v?`X-zlr(()wv|J&koM-RG?z3pLFa_WdAZ!oh(fBzF1yznx-^6fdyk5lp z!rjCtfM8!blv70hR5D2+7n{aQbXUc;s)7@hOm&Pg&)pbxKYYXUO2*H*VNd9HivNm^ z74>}L?VD!4xqtlHgB3hf$WAmPpmeuV1?s~J5+l7B4#D_FvJ~|^JrWHaZ=6eBG9uqm zf1sR2+uss+>p`6AB@+SrTzHO8OE6|{0*BS?{iK^XI~K}5#(&nbBJ(MKwv~+T2N1g5 zQ7^{pF}(nDl~TQ*c|3S>NLgwPi%Cy3J~$ovp#34kW8!tu^7yJSj`X;d?nVk2ET_h6 z4fT?W)C3y)K)B5O!*|Q7*HbhXo{YYt;uqst!nvlbrY{ zcY{;W)M69*Lc_;OP!sE?WZXTOpT(cCST1W-s`RoNk4~;_d2>sCd;JP=Ew9q zd9}dGBTw!hGOIo`DuMGg_)=?SgaI!VQ`4JWPFw4cE4KNy9?qQ zUk^|3eJTD)-A+I(@*UcjSUk9mTsOoiBz3`Mf`WVCL)QYaosB}57NL$mInpSApZVVE z>$Z`sM|0ddi>a)l2H$X{6+0gHLR$*m;_QwFN_ruUb?(^=!CA#1ZhYBo%icsrp(-?_ zKn_`GzEiO8ef$%;Sq`Bfjl)Ai7xFaaztf4@0U|O4uIu84oIGhhjQn81Sqk2ikb^if zqMa>LJ)#-`eFZTdBIS*nsE7W^kZ*}B(CbMtRUtIuUp7cM>!bIc0+3IDXlQl;MO}>k zL*{D%T)E?c@AN1o!A>hciiI|Apl!5&P?QuP+$J-iCh<_zm#x`foE9WXBuJ|9{5c?0 z8xKBOUy?UvG`Ch4ef*nrxh8?%)||P}&SA9V8TPXdhWo-dCt&Vb)i+8>bg!>hg>u*t zfHYEUGKQ33$4q&+^g~i$_DVI(6ABLR;P$D&H$b#ZVF16)8K?tL^a$uxx?95BUHdWL z3x<4}1=tMt-McCKLZxQ7uBZiieK)lKXN`jchmH-%?-$N$BoKA?*Z9g7uOLEpLr8W4 z4&4^x@0=t)@htJ|pB}Qz9A@0pg&$I4mK+Kv944J%T}}<4Q0yt^j> z8C`#1nGev!lQaGcfB4-*!DLz(wM2AM#|BQ@PMUE2t&FKed5k$EPg-cSApWa-c$l&` zy!ajjHb&>>8J3&8LqnuQIXt~c(}s$iZlTJ(s_;SLFqtjv2#%L}O!VO)fIS@N?Za63 zpagX)ovZqVxJRlSScB>_^?7HWsCES~Cc#jgpHTw4Zll>`CY{;eVUE*!n)RQJD(E$1 zJQ6nbqoj}eDg2sHV)c;zY}gag)yo;F|2mBXj((`!DAS-&Kf%psL%D(Vnff&3F#E2! zUV9h!)u;fuA}%oZ2FbSs?p`kH&7{=oo~Ow6sFHJ@vp97q$lWCHwB=WJHD4NAWx=`3 zVz*lH2hBLVH3`eK^8$M7G*BSFI*Ox@X(Ie@#a+z@GRyb8S`j$P;vk!$Rx>vFdiS=r zc!&u+R>C_<5)Z$TJRdgQLywGuLnWH^2v43u?@{SU+SL&RdV~jkMIylgu8YDqf;F*gB4)h1T0vav<;vf8epD>a9GYzEj`8;L6 zdr(c^2MS_E*i|*8>@bnfC-f1TUgEvd4|%68Akd%6-o2d5K+fizL`9<6EET)7lrVqI0gPg_df__7_yo|X9>s<6 zg5raK1`O!#r1Rk$(fU$BjnazZgthe}SZ1~H9RUhjlQ%uaI@^&&_##CNKUgBY$1t*z z3;RkPK&lZEF#ALI3zU`*>w5+=pfm~#^%I^CgLlI}HHrsAT49vg+?JXQ!>Xo3GK91~ z)IN|tAYq^ln|+1%1^~T-Su-Xw|0t4m5&^)A6ucwhpIO9+yWJ?hgU=K)h~%m<2xfgc zVyP+{g7@5tZY@Ej;hmka#Jp9>%+|=Qq>oDiBkP`BBn_CD@_0z3lKYD?J&4YiOYc>C zVoq|$(zQB`eaFFVP_C?h@BP&3cXT=iob8_I_AER{mvSDf=mi$m*24C?hfxr z+hfKDL3Yw=8tlW9G?6O9X6MmE))N_ub(YU7w~}Diys}BDj(FK7X_aOxYel$bt`zD4>~gcCTMQ1kh0@TQ^2Mu8rC0)Eay@G zI{6#z=4>$c>R*E!B}gjf@@w7I>g0D+-vH9~MW-+uEgs>hm?G-dvlxOy1WVKiIbM>V zq!HUMboP02+FynHfo=O}n5HOhkdUA$HlaTLhUupnSEt?ocCWkM7+bwM-q|16V(n+A z&b{omf6M1Moh?=HsJYzUSZeFY7zF#!cGBLdn0#Ld^PDFmG<7*rV*80@we>(*(-xXu zWiJvhz119D$I`uKaL#PY4vukQtUOPZWCuzN7%Eh@eFd)jLq}`%Pv>ItBl)U<-w%x0 zIU5-gUqx_n#=PRAnRkW~gq@HDv@N_@>F2Dp!u-681|HJEb)j^3)#CU@}v}JW?97`CQV*@2v(oR zjA(3s>;gsH^&?e$*<eKf(bGrN3%(uYW?WwIAlR3~#9)&Dv%hpw=28nmt`aA99Eeg_0rM-QpK2Ir~_hAX_(aSO#&u=&^Zkwb6NKOzwA9b$-i zg{c=J&df?V3Bw_0j5pEG;!h{~JXRJ8i3fyHLmpk`(_tjSXmVI@ai?M`3mVKXz8u#$!K)2+#R^Zr1%?#C_xfSHB6!ZnTdI=w+TLq!~N$u!w70- zD#4OUmw-iUayK4-Sa(&4iPJSdfEo7ZzKFJ(D#}$8*02h0y;>~u@ObCfH>V@&j?_mr z;2BT=JyA6~FTUf_S};ecCALVsAm%v#+cX+hBc+t@b@^OdK?rZ2l2w(b8`5#XQvfwT z-k$PK*`bhmTLt4ZL>qlZbWgXe;C>&DOZd~W^)tj4gw>FG8yfkM&jrjYQQoNow>E@m z()6{RuU(3JSd12EiMD+Av!WW%XsOKfcOma5%2xnf3qs0dR;U7S)v3pAha!W1@{j0i zc4lobwsH3z`6oGd7F{642WfZSab`~>Cmp1bo>eJMXT-{yUdRG2cpNO)-4pN7a2oGIJAz2cu$Sro#s%NiESP1K6Ungmu za@(%P>bnFe0YX3cJVsE`OprXWCw5o6pVl>MML9I9#?{LSOh7}uST`XR0v12-4v|s< zq!<_v1Vh8mrycb&5jkkxs3+LZ2fAErl-BLUW_!eKrI~2Ylpm8~OEh8FcZ#u`z@4|L zCTjetVz;)K_OYL7-IK*<$z9K5qq1dE55)p1r!1UdrF*iung#IDn=!h8(OyF-)g-DXMrjb?Z=L4?FQYFLp8AwK!(- zxfJnFLr#h;Qobvp*ElLSJ0)lz+h|LDWYH<f7>eng?eJ z=Z+z(KK=N!?<5uL$gH9#W87mTSE|*aJn*+|j(3_Bx81^7uXQO%BSd|kBOl~R4YbLn+YJC9NR&^b`$Mj1e)?>q0E{1|B^b1~s z__gwfXE1cX{=D(Vlx-}HO4V?Bxi_)@X%TiZY zm-G^Y7#ZDCQqg&+^f0h>9UdM|J9g|y+qZ8ooJ#XTu1Z|2;-ItGd+)u|yWaJ#pvrTe z{p<$?bu2>|7Asb)2pL0$kil4?LT3o%4zYXj;X5bDZ@>NC!C*bsgYxh4<;&Az z)q7xIAl-A%J@=lgT{0AwELoCP%0L+z8A*5CaYw{4ZTDoNtP(HV+uKts&S!yfwoc*M zhB9IN`uqDsK87&B8US*Ijw6pT8RI;^_{A?y&sO`14*)BSJSpdspZsL{>}Nk)v^g8S z4T|`czb+f-AcM1!HUeF#7eC};=gyrWLqkJD(VmKllwWxbDg-JDR1~Nv@M}nctY5(# zy^9Tl9Sxv&-M8?}J^c{67(2U9zX~3L6bO$-2t>W|;iS>+q;I$3-~r^s(f>MVrx%W} zWqMk!AAT)8j?3ROGBhgtM$h~(iE)!{3 z<&2~W@>r>7vK8(V+ZAtA9!dcu^B{PnTlH1E)X59|6m3jt;yN^*M!T zaL&+tF7l277VJ;hfZ;S%HKm`9Jo3nN#1Th?jrh}_{xn^C?X~H~8*hv;KXU=t#Zq3A zCVpo`F6%VglAbeIvUF)W?6AYqvBw^p_T6{i(0g~^eRsO$mRr)#e)h9;Npfz4X$wY15`cuC3GNRsKBdccf@S z`#bpHgJa$Unp}0&RcV{%$EE`MbB*f7xSwyTdGQ7DEUVa{05&M|0Gsc+E1rK{|Fo&D z&v?c&(qkU;m~`B6$AyjUI-YmldFj9Z>%V5Nn&@G>ocYGGbME(k@AuMEp7NB?6FB>z zD|6hR_{1mDr$7DadcNXs1r-G<3RD!BjshN=O!sb5m?v>PVO@TC$RUTMcfb4H(J^xU z^!ev&kRe5m^3fGV{-!s*DU59<(&K}gIRlg%20arG7&~u$>s!->7hYJ-eviM8K?xrT zEkmw%0(1y68PZ7qmX*Ts<&qY3^IHcWgzx~2FiZOZnZMRL%qm&QMf;M%)I7;b6 z%3vIdGW;@^HJ|#CmD4+aRvg90Z%cLYyD|-&&ge{c4Y^@JD0uRdpPbG-^UQEUz2X(G zNLw_Z3&@=y^~9+9kN^0Oi1VE1Jg1;5?|^Ws7_WRaeIi2sQ{a~49B|-);o!RS&O5`f zFK=I;lwR?Xc{^|RKj47b`KR)nemc4tC)3YyBRu1Vk?``DzdT)c-F4~A-~avkE7v#6 z;A0>A*z}iw`Ij;Ahrv?70@u%Yo9_i(K_HjyI!$_~*Q9;i;~tk@{pwd2&Lry+WE{PN zzQMRe=d@_@0J#48>(d`dP6Bcn1s(*J$_*o1&*T9fHoEPcBRYdM-n%Tq0&+fnEUr1+ z^>Nv*r{nRAtWYNR!0wh$<3Qdam#POJM*i@JKU~lYqY~p1!1?`)U;HBd`@jEty6L8y z0-wNJ>Ck5e*Tq-D%kheE(J zNy`8nL)Y-5@S5#e9M>3LA{;yV@rVg@ zP)d*flPBuCa&lnF1J$Z5TIAFkXzEY3R^@bkEnWY`jcNN2Hp?lbaSh*7(~zO-Nv-Lq zryrSGu2`JD|CaC9%a`MBY)Fnc?eYpo)uAap<)zO|gMGF1wRe70g=s>2T~|8(X%A0b zH*}=+|NQlo`h=j$9M^8S(J`f!gDoAA(obnO&7fV6H%x3$9JT|pV6CE+_-nT z_^fZG(f;i48&*YH_R9k?PL2X3>c~eW`mq9r?BsQd4a#wU4yv#LJE}q^)ves(-6? z*^OS&pRPUs$~3WIIJF9uHW8&Cx{3zPC$y*2Pkwr;-QASVf7_=5|2Q%;ctlzCF$#}r z+4b_eM$)oVyVB8*JVt$Wi}D&wW5Rh%JL8&lR_D^OWvP36S6b1(B7OXC&kYtf>6p)& z;*QG6`9OikSUtVHF?PZ+fo?)aJ@u(ijqCf~_rCP;kA19|oCY`BFSFrE9=53?o^%}j z?FT>j!I&(@&c?3BmUo%hqaXOd2h#bPXDG_3^yh43e&F7T54MvIIrPx<_P4)1EtRvi z+@B#&$O{wIjvEN(v}K!ZE{M-tJ|%P5Yp0)ndisMu_=8v=gCp_GJXQt=WRU)uc-(_K zeKPWiTm}wOzVy$$M@H$ViNm7k&wuW7vD2!U_aIZft6+8tOqGR6c6FAQgL-;mJjxp@>wu|{4$>gui-g-2F^L>ob=)U z{olBEn)<`^e<$IiDEGB~=s{!=9Kb*F(-qu)_ji9ce#Q-1eeQFg8?^b8Klzh%%`bl` zg50Zr8P9^h>x5jB26_U7d+wIN#NkbUD~l&k9kQlP{OmjX{3&d(EhnzWIJ!b5H)AC^JOfy;2bkS9G@ zK75^&H{}3s1EuF8KJPO=)0O40N%2Wj!GchL;o7VKL)_SdDOM&~Id#ZbXJQ|t9YCQ2 zC?@VvK1{eFXyn5xIE-zSniU}TbSSJch;7AWkcEWXJsqqF%Z&(}sh1UIC}GuUqExRC zcEz!gKJ%IBV;UTN;QjBP-1wAt(HND+9R^o`a>3Dq zoap4^jsBGIoKO9z4@PNu@-{ks)iughIn>+r^F8%;xkhQatJ8ryGKL(n6YNP(dQ$9W z3WJ#Hkaf1h^opxF}_uO;Shd%TnvMLPnkagNa zcH)ws%W25JTt4w#7w`z2v+?AP*%RB&JCr*zAi%Jq-mYuZDc(p#6mFx8wh2TY3O6iN z{el;&oB0ThDBJD8b%76s+)yX|NW+RXR@JiN(Ru{=#=t@rSg9F1a&uka|25ZKQ}Bj- z0GH2w$cDnpeD{0!Ph0zl99V86fAxkpq?1oR`Cd5|u9jo+Gq}yVOzKnAPm#bs^3;9s zPB?>|c}6~tZ#g7>8Bd2>)<^@)#=m-u{5RtcF5q|h<(H@1HR^rfpW{(~@Nqf5lH4#;{diBi zF%7wgM%GI~bHxeVbe)v9%5*yNF;3j$#AX-e$3On@^nU4G}Vv+G@;zcU-b%5 z{w_agMBE$)e25Pir^qLlV|)w#D_)t7WxOMk8U7d_@HS0|TF$HBqr!~~Vbqyt@S+~! zoTF~Kcb&-#T+7cz-ik|mgeNoh4`fiH7kOL8sbeGkN!g}_`&E}|T01|=fd=KaYyrD@qgd!>iJF#RVoE9}Jo${itpf!P0k$i~r7}d9XlQy7rrs=Z)HSjwZN73K-F4T1oQ~b8Yjsyzw!ACtef+YtcAqDtZ@>4VH1SIv zbE(oaN{ORF$Ge8oJzagmKadat5QfZ^vyK#v3uW*~xQ+!)Z6j&x;{LRwt3M6hGn%f^ zu8-&|Tbf0>=F~dSl9mlG4F_G&QoHh~-Gn@`H90paBJ7TW2NbaTfj;fvya<;`@NazM z8|f=w`HJXsSNhH0{LS>rSH7}XB*z3V{ox|*0v?q9Y6Ru}*){+=4xRToP5%DqM?Xp% zH*Qqd+Y}S0r=EIh`t9HT?evF#_=jPae&^fYF8X)Ms`O_gitqmSw(WeSKRZ;;xqten ze~QJY7himF`uyiVAG^pN{_uyVKl-CTN-Usdr}&5d=YJ&BlgCThk#Aw2H{ppBX6t zFA7^*v22^$W;*Qf!_zz7@s1dquGfMk^b&IdEI4LS^6$&Z3XeW0N1ewp(4KtJJ>|TS z!x+EmT`@LLSjeNofCIFkng!nQ`g`B|Ub^6d3)1a6iHU{6l*g_q(w?h%Adfd9;S7J~ zTR$93eJ_Rp?MbV;<$Y==|7sWJz> zfRGE(M>qAkxqQ!i^5I0Kk4X*!^zN_!`mbYNvY6vmI`XhA7vti3=9Bn|tODd)fYMSI z*AEGGUSoRa`WA9gid*DS-OP&urZ<_C`Dgv!Xnw-!eKpUVK4eUJTLzI*=3zXQLJafO@i#IfS_wH(GhK)yJ+Fb2&dI|HH(>3!6nx>HW(b0hwFGTHG- zOa28fpkEz@!bl))SuUvyX{H0q3UmYiaI`DWC{O7O3spb(KecW=yL?|w2lFZ%ATlJs z|NZZ$@5@jwXe)%_>Hq!T{{=5`o_y8+T^C+&u$8o7+$c@S{eN89c zMf(J&>FAro=G1qQSp^SS3RuPpIh0HxTmSZN|CTO7?-~?t-Bak2ndHxDs_TQB0(1?z zd!V9>(tO%w{pQ{X^q$%TRtNdA1{U?DHFxcsu02;rU1_5n&aA<<{&aW8mbC1J_oOu^ z9+VC~^^mmjQaR{&ue5yntaYSQjy(+Ey^J zCGPLsl8!m;khJM1ccR{7=H(!lr*MXEz>Lc31LlOI5ZROV3UU^@2HqtdNEk%R6o z`Ozj8r2)?1B!87ZAxC4g99D6!#JJnWv;!?Nk{Ng45r?F4oPlGqZ&&Lq%GG+M<1i;U zYf{N%UEnf{^esBVa^>dEbmIlLq;$E)EUnuUKDYjTbW-Qbk4~d&TGM{Nby(VX{Vl0Q zj=d(%vSbu3N8mvF&eV)82n|4nn>f!BMC&1OQ@qoYaBA&ang*}zOB0_`h5PE`>|uS^ zZdhlJ_Ky#yTgUE*BQyC%9wkz7bVR+I;dx;J9rdSw`lm5@%Q0^3io*GZ&f=&^`cx*T zU-FWdq)RTjBz7Up#W`oJqc7Eici*Gum{=dsq;MH-)`<;2|M|~jCjv*3u}F$Za{BB_ zf0ilrz~0-23mZ>G!w;Ocd{P5>VYfH75dGG5ngqvY#(}^NAI28Qkn;%4CD^vdrnRr8 zRBt}=$tgNGIk4?mJdX33g?BLypd8^sy}-xv$??*UfBfU)ol&u!YP+&iyJgq~y3aoQ zq+haAX$n~8rvz7zQz>9sAiQMn#P~)*IO=gcan$bHG!|vt#o~ZZXyGJ|5cC#KGv*v` zkdq3qoLXm?cV+wDJV$QfDe?f%{^BqGBJ|JIS6^MoHTmEm!_kA&i#bu|o>&~*P=4oG zzd!!tKMvi?Jje#^`lK$8c*G-O!7!gQ`K!PBtI)?Di(GNV6+x$CjyWc1^K$JN;F-|O}^Vra|^tjMGHMCLEg}ZPH*`%50EK` zaUXLvO2b&#X$S{@^D(Z(6)gbIVJaJjpirJ53caT^D5R+@ELjW zv*VS+D4THem}i62`I&2sBbDbQIa2tH^PiI0qAjQ#@~mX1OwonAkDQSXBW7i3cD^bgW!ahVJNiN4&^4#|Z-{-;>6|O58maro#~h3%Gv1 zIxNyq&kTjK-LkOD21ZM=+{{&r0qaTW$#z;ImC*qP1K-uJN zMG=aHbbzk&t)KCw(~3F>kGLxDD4PyT?*J<`aHm{{$IF@iC?E18eoPLlj&xXTCuaaR zX`)*3C?jMt=SRJZXY(Y-izo{7gtCo7@OBt(Ng9rj2{akmq-H@XxxGrS0LIo zGM_AO&<>uFN7P4!(MEY6a;5M_`qR9jUZiuIoJzxpm+57E3p&74fpLuo;+E(eeCAnY z1aS3zJ*4_uQD7GeSf-*~NM7iFk#)BLw|QjEVV2=tGOGd}Vid^wovvAqo3Nr8rs=rK z&^@RkIf&{@xYU0Tok$Aj2*{3MeY^KgEh_8R2jI5IhTNog@&#@E+SatWWpnCpA4p49 zuaaR|Pgm11mTlUF)}rsr;gpkWN#3m}@ZPd1S`MTZKKO>(lnGQDZ%d1sw7aBbAoVTV zo(_Ecesbm!D+4&8I^$6ffw$5rLW_2@jV>Bb+m`mF!+u-mSqjE=gk=DDDQ->ub*;H> zFOKWDO8&)ppA5tH)u;28tx8M#yS3?VB5iFQNC!RQ5YdRziB~U9R!2PQ!**$9^Xjy^ zZ$)aA@3MJ|qTQq4O)35IXIH1e#eHd?qxRQqMz>OE@2USfeQ&Nuq+=rg6W*zJq{Vhpi%?b_%k=?~qH&Wf1QM?ahU zO45*TF`iX;IUgq7nT+OrZ*OnWCs+D&Rw^&(OYB!5Y#?3PZOKU+@akXx^hO_%C>JgQ3VI(cfRwTaGVs?AW!`)uSIxuGb05|+er~b|6YAp4LRdIiv}2zBSYvX zc;m&B@b`&Nd}4%^b%}Yv7{lY%dcRrM*5)PY(Mdf$J@H*k3`dsbavQyIaLT~<;zN^N#iCwNoX~bh2@NQ@Rw(<{J@EP35&d-xqi@`_{>irlg`8AZu7u-fkUJht}&;f zYv7{1oR&C1@Kf&rzl(l1LaIOWq5yQ&4_=suZu^bqCn(qb9{jLu1wP_q$V{GpAS~ob z&y?f1PLKVy3vZQ&Wg_wvo}?uWaXlx7%v%1Z&VQo+h|4wV1zzB!YXu8SfqQ5DXDA0_ zgpMj2xb8z)=y{pGyTs9!Fzuc1d}ms>Ze4t&m269_|$`s)^b)gFfcF>KkCD8y9PAGqj7L$1rXs|^M_jze!g);N67cB z*s{-==&aDe2nn8$v1n<70Hq&|SB(#vanIGfDBdZJjZg9chyAn~h7atrGVIDLuS`3I zZ<#kV#QR%6&;&PD=P5cclvbWNKTTWk z=3PNY>Oq>^VFy0Suo3?#6CQyRh9CIjBmrmdY_(zyWveo9gwrv=Uk1;XJKCPhHSWP% z;SC-@;IDY51z`(WKX9fj3?*b0d8a&o#29=zW1f#3Qx}e>r2T+5KpjKApf8ZG=nv{k z-5nOZ$nVW_!T|IYs~$00ksVf_@r|`Rr+z4$a+ODU2OT)T7r;C)pCgbm^+PYLTD>~t zulPQqBJlk*+8;*-(f+8j^#kdRt9i0J<&*rat6e7T5t>3nWI7-6BG z>IhH=KBP?>qP_F|L)s;B7P3bhRGy@9`w!U^Em?KS;Fb?ola6!Yfhb4si}L2s{*V)R z;<_PYArs^$9N<4Yzz-A;IKByeM0;m7?bKD^&chBt`0gWZD5r>@X;qdt@aOD#Xv&AR zqpk|uM}0)ECYtz82P-Z)E`_p93(HNEEt)P>Ujbc^H~JL@h46wpZO=x3=mv$AWt8%# z1JlDYM*BCtz-zVS75>3HbRm5d?awlUe4v*A%e3>N{?x;548B7H@a5Q9L$qJ4OAO2e>Q7-AhIp`~#3FBBD;9BV- z%LF_@M{y+V4#f)@SKJCJ3d}}j&z!-*I8DX3$j zE4A%tPn&k!nOeKr(;<&NCf#(&chk`AN{9DvTzXP?HI1upW+xozkdMmh7+RV(ZM!Sg z7I&rte&gVD^F_C&q1%LGE{k~M`W{;|=W9~krdBx*b&P!)N@JKV$LOc_HM(&}x@qv1 z)O_sWX`kZ`NH?B;z4F&W57kAZ(6keWo$?$M-aE&d(~i+`P}1%^AyZSvdOdy}II1l4 z`oNG%)QKdD6CgZdCt=W@5Cz1K3&_@iP;p9s$(@UKqKz}5tT-xaT;G?&uBY?~_{UG- zLt_K-yJ}*DeoSPis_}=c77*xT{Y`3i0&UE;82vxGixU+%vXK4`n}msJzKPT?yJSv~ z`(^YVdD?cMe@4e)V@86#BoBoV5&IsF-;|0r5*oEYkWxxEsx}QRUOefp@yp4O&?stCYcVhg%Q9Ceix%uW8 zONQJi4P!ZW*CCte3XYoNyXw{}#IwATA7dQm>n^+OvPferJm!Ya=r;JrH`w{^IANZ9 zL9YMo&;BgRVxEGy$Tf3mv%);Sbm``-7?TCF|hrR!im+HPK^c}Qe~pXXf*8t4Yu zKvo=v3|V%#dVUu=!EbaKG-q6ET|(NJBgy3umwd<@pzNZI2&tC~&X#wsv&~O9J#!K< zPp7o5E1#cYr{rwo+gxmQxt|m;tv#neHt^5kjpirNA)ZI$p1Bd`C1{(-rR8^D`2v`u z!uDZ)ig}9LH75fgckmegBM+YUu?&$v^T8}8r`Q90~9(oiV;{-MU~R1`f;)MTnqE01z^i62ix`4H^`b z!HUKLV57+I_v9;eGXBROe|$KGID&)5z&qES`m+1vUv*|S4FtL}xyg5oXk>iAl?KfR zTv^#g7(W^wThm{!Z$3q%%XEVe}6Lw#KmtC$o z4(Y;yDOzx>2F^`ZSH19sFHG;$aZ#2l(o;|HC;(-ne4x?EI+vRB@iDld3G@fwkLp9i z=jhvVL4UUi)h$42$&(H^ChYa>@+|8%4BTP!9(icQKk^4J9Ge)Jq<;~y6W zez|j?9-N2Hu_6pS{!B+afEO~z)evnj*BiP+k1}0~PJ;x>bD`=79)XLl?8rLntg~XG z{AC*8>?J1+M^rre(T|Qe@Pdx%Z~yjh)74j96;&Z^I4W~p!cfWWf%yJ5CXuN>{4j6K zOWr+A-?n(!%U%{nD0~k+Ccd9@PX6e#(n3SZgCF5kQkdH(X?P!y~}j%g`yp6`CPq$OvKRedK|G ziV_!cXnZjy-t?w7#j0!Qg-(GFI3QVpy?*`rB8|&M7b4^T_>cdXjyU3oNQ0h&rWn8+ z`Sy(qFLV*R=!u!+({+jgndHIx5PF`V?_qF62m=}h9q`h8r_G;t-g)tnapD3tY8aG3 zAL_={ZQEBHNYIUx$Qw?c&wlo^kqPnyT1|1jk50X#XD|peC>AN2(y~Qypgh3xBpvnt6>b0!?RutHk z0+vtP*t9it5Bd!G2BI&{Z4fy{Q->~^M)yX7>d!-j0@BNM)hwrv2HF#n44(1c@Y6Ag zsaX@s0uYUApvldm3Z>xW^O>y?=-Z$0ms--P=$T^3=NfhbL z#`XQPi7bOrCYkfY%<)gRIP(G&HX?a$k>jlI=DyUjxIOjmvnU;~cHeaKXRndxNuEC( zbV60VX?;T;`3RbnM?2|m+>{or>P&krU6l@b@*(M}kN-sR6)B(DNgZOzMovdgal)lG z1=dbj96Qu*|KY|oJR&>yv8vokWxi65usd*EfH}ei9_2I{;hK6@r&%jaS9VaN-Nr(;G{iE$RV-7r@N9rYFz{kr;4>>0rJR@sJFsfl!UU7;g6wyx5jL8@QrAM9N0 zD(qtHK5SHM#S62&ULJEXwq`Ps&kpdNFdQS6mspgdnw0t7sABV#&u{BUR>n2~YG3rV z*m3l;wqe8GRG9l*>I2vgEyp7rV;?3%*=1#iHgN!tcS2_%=eb{xm(`zLD1a{T_=A^0 zYiOq5i6@>IwmWl>KtWsGvv~j~9XlAAS77|fxb;RkjNvc&n4f%8o$uJ8*S`AIuf`FO z=r_tBPtUKgXq!0S{qA=Q*`QqBGd4r6IofjV+O;7+IQ$yzGMjJxs5_2I+8Ya7S+I%h zk?+lNT848@_l$9f@1dr6V6`fqlw&6$imT|MNeGL)3B~ ziT2Px;7A=@Z+H(tFWcE%3lI$~8?GO1I^;o-rkmg8J$i#Vpf7yk3vmRf<3m&O0bRD6 zEC2vN07*naR49iy#v$k}+_+ljMLLB+|A$MyU-O#R%sxM%1px5Ij^Zdtf1a$Jj<0_8 zt7Cq7w(+g|Sf{J5_l*LUEB9UW3A8K1;XAT1+x&c_M+UMSERhc3yOzik{s7uDbD%7G zAzye2{P2fAjCo++wOrFd=<8S?zmnP;Avp8x#kr;mK(Bk2P=q86}xb3fDk zCvzXniG+ORdRbOUSHZ$kprL~f!LbnxV-OOKyI@5MlZ@|v_q&79RsskkjHlsqMF0`n zP?8du(@#G=CSd6(nXqM*m3ItSn5Z&o0UJZ{uqXaOnTjR=+r{7d*0+XIWXA#L<+DqS zNj?-ilbK8c0?-7yl9owfI)1L4qm8GW#&(sQ5Ug79QF5e%9{;NeL{?Rx6iA2SXJrcx z2I$W-{Gb!UNc`H@zDCmM7#K{^LExqTyTALp#7CRq0UzV0vj$giVDb_k0rRO}Pj7F0 zESkw@R_?GuiF`3;pb3LN@U*cTomZykeNhC+8}y?b>VEFI=ceN{(ac~Dg~vy70chh6 z6&Wjc-fJ~kjw6vtTa*$G2#g*k)H%u(oZtPfch&O|?a$SUB^-ICDV^^bXPgnVqaOUo zAG~lpU`&B0{OjrIDV(CS@$b!Vesj7|MjtD-F#ewMl&6H^wgVL!xl^Ysc=f#JJum8c z{`uzzuE+?0GItxB)UK2cM=`Pqt^vyD6QTi5lLw-HlnMR713dSaG5wzRyeAAoR?4Dl zI9r|f?-CD?_f6Ve1GrP9?sO#75n9j|SWyO_sjqdB<=NNAKj8^+c0A=mGh~H&!}piI z^rayW918*OC<~e+L$qIhZfnj@g-7{8W8qX@#YUS&-f4e0Q6KfFN5u{?+8>Tp2CKAL zI#ee4$ul}})pH@_6WozMc0qsnOJ53lhD-@hWWjYpmcfG^fY1cG;#gON!nh#raca|i z9G*7Bq5>vSkSkVl@lj@+tA}d`(tqhYcIEbs0}8!^tkLc;K-fJ+I{FNp(m3uo{~kWU zi;u`L1ic!`C%mE^t=A+{fbc}Vpfmb{-O12@qgGt9cj&B@o*_j5LwZN}MCsB;zFj8NmzhiaP9C1gr8*N+;zd%e$hg&ozX;*(R zwkU1+%w1{t6+3iX<=*LLzHg`hIG}(DITJ^l>-`q~sR@0zZme~OzI|6qcYgZ%bj0r; zl$JlCGo|k+>l<`*6n&ol*CyC`mkEL6jIN21txo6M_uw_DmQzGy_>)$`6l=uXArDtl1GkcFT+3D0P^`JM6^Q9l;D<&;9B?bypWCg+?` z3$&np-QlTml5iTG5TfHMka{jK&~GvZ#m2%u0(aXQ*sf2I?To$rzW2Q^9CVl0p2U$YC;wZi;{n=dPXTI_Yf!wE39%Gf5k5C^R<2SW$#v0Mi zi7Xs#yLvoG{Q#cNl*5|w17md-6neZJ5&XwG!_U=qMhch*aaAmIgYOypF=v2n zWj*OhPm1v_<5L!0f+ypa>&a*qm~Z{qp$YzsQ7DgZJTf-LNyj)XP8(AB$fn!V-Wux= zpScKhHTGuteZ7BDBGHC+4NaNJpaWa%WEV*q_b|DZhn_J8uS-)ja<~hx|&|iv9^%LN@4w zkU{!n+Pd{X$f|VPZ1bNis6mfl-&u~4)oJ^+`%S?r;Y<{0?4Uz|pip$B6Jz4_&$W{a zMl%V?c1bHS6b}Lxov2Er^FbI;{s9*M-?%XO%&IGtB7;EhU?T4y{NM+{6P$gY{`99~QXRZGZjt&xS06{pF>nk_$eT72 z^%8BjY}pd>jybf#(Z+5i(-Q+1{1&o)anzm47n0#_(fY`H6q`f zKpr?+?!W*0zk?P`V4i*U*>PWPOXZFO9YcGx5llTD*PSZg(PYOOx(NPXrkygTC%a~7 z542mHQNcse*&QG91m13M&^bU?-xIgIijBI_E-90C&CVNk)sn|K=bRJe;gtBT-}fq#@%Z}TDd z`FX~R>RXPtZr!?qF7O1pxGeIZZNUG4Oe-8_IIECn9JJ_N!0itCz@c@t7O>FA)2>YG zM*RbHi1H{aGMxy$i^Cphq(A9*%J_2(<=_AP-v>R}J&6+;{3r)KPk+ca99Y!B5fbne zeljq^!HACFgY@WP`bqi<Mw$~?-y4iiUVK8mDc4O)~x+5K}|VxqLE1xy6O4S!pb9}lNm+qjOF+m`O>z9&sA(E^P&{T`9h z(a$?Fwd`z3m!AK#ly0FQC;(AZ81!Hc(EQ+9-x{ZDJSb-D@grG19XRHy4z~`b@#Ttl zh@$V*;har!CaPW#w@LU<+$GKqwI!XdDf@s#8n%;O^;U}f%bDqEcLKV{6XDqE9?$ZL z3+x!|8NM^df)wl`#t@7%9B(eTU?+GI9J?UoM+uoY!ZxG-XL1$5*2DJvjK*Q~+33JZ ze+FrOWq-=N#!kil=gJrq+ZI4xI0BHqjonJv-8jRr!OdIvi7ePQEZe0sRc_w$iLMgZ zR%0#&90Pc#_FL31KZBof4cjv3!CVctI139|P)DBBzeryyryN!1<*0J;XSTq zGMt5pjKR=LKE{zbEaoS%+u;G@Gu|_=gEI;+uU#JYyLaU>7WX3G*fo-QOSxVMiJk)= zWPmWn#K;WeITj6LtD&>dgL8rT)Q|G85z&j32Tm+#X5NeOB=d-FN4_#2W*ngt?X^#I zqK;+SSjKV8u_%{uF5~cMpL40$o)AZMay_Usiz|^CevHAXKVi@hodpeuSAd=gn`wU6 z@%~6V-8g2n&>ea~x&U1R2VHqjnE*O~I1x|RvQA)r0@;G*v(8VDm(nu-LLbWb8|NHl z&_6R)0qV0`>VWrb9Cc6>#VcF&}4#{BP_uma3g^}(2+)l@^m91EaK@s z&J&D^&*h`g2rtL8vHOo&Spm>k*ji7A3w_y+N@uM^F>ong!Gm(agHD2Dx)|s%ac){O z*-bv=$%HED=Ttx8;)x`#<@#YTQAZRJ<=RMy3J4$K7H2kRyr(vPHM2ZISGD>Sh2$~}%Ncz~g4 z#}M?O-mD|-`gO&^M3VJFpWZKUQRX=E8K4AEQ6P+5J36tU9`S!O12WY@I zpQslTzY0;6aK1Md#wFV7{NBd*954=Uk8rKI>KFjr>e(dri47y@8 zaL>-$i@h5SdWbi)S&mic>8bAw#gSSb;7}KMiTpnGsZWigB{_nDy02TeE>;QQ)WRVe zJXARVbYaIBlhZhXaEQE0eGp~-jT~2`hdzzu6S~89fB_MM66(j`4d)%@*!b|ZJRyZ1 zbh{;w*UET8CTQ=hVvIJ!3*{M*%Zhu2MfvqNu|Nf*>$B2H25_+s1y69mfP&WamFq?C zx67FukjsDu@PoXOt#a9J!>+T-ndxeWHL?kPs5|m#-Qv}G=n1~7K-rdU^b&(y_`}iH z3=j%>fS=-`mq`01$-DIuxHak@$cG6y^O-9$8EsGR{!lVBoBpKiGVomr>v^1Wb(R`0WNlmQPovGbAsfI%>;;|RmaOY zjk`qy%A|j5y6xhPspB_~O#2vv6(^>h%5ZRz zb`3V)otj6sru85FMM~dN zEq7j~J;#Jbp?ag>G`whQ>Ns{qI^nQK#P{}{&Px@cg!L}MUFXLhC zK5zgp%X}FpWRr9erhAU{e?3RjOIFX)xS6r6p-8U)ms1XNyy`kV1%hUo)43*tv&nGXZaTXJ;An z6_iI>(y(xp^2pEe3R$5*%MG{4SJsu>GmhZOq&_;YQT>QZdCb?LcS+A8Ru*?LkAQBz zN(&~zi@Z+N(f-W0vUr>MM#`ov+&jlXBbA|LL3q)xTENqN#MJg}k*YT**o(#|g znltWvwZ?w{4mWrPFz-zLqb-{^Tm|MIZ5sKRI=>r{6c^fhj351(o+H1A!0o;7&F`Rf zE{ABL6Y_H`xE0=w<|lIYML)=nCuEdQUi?(!2zUhVk@@Myw@zPO=T8CabmpZDjpipN zwIRs}yaSL8+As@-%l-hyg}g(a49u6&??gDVE(jUqhIm;%c?`&Dk?ltFpV(RSvFv-y7y+QrnYhBM@9(s@6Z7P4tUj>Pu@LFX#9V;x$rFI_ zr=50M?2KTd?#*w0b9~s9onRq=@q^Fc%`*ys&JZVs z2WNI}Kr6!dp*%KdSBvQt_070rY_Q{nqw?4i%p@wimH?bTOvF;2^J8}h_v_cMzt9TFfAw( zrw7LlnpQSmaNwh3dU|?{+N{^24(5Ynt8RP)j)`~T(DvMJs4MaVT`$)6HQ7ult&iDp{+n;gdik!n2WCP$Q)pqXHyJ`4=DYSM=ldX&Y$;%>F+GMIMAGfo~Bbu3rE zLHh-)KW3EAh$IJfX+VMQ;dmtLC61p(Z}YtXcpiiEDe0_R-KH?;X;Vd9#Si^OefdF? zTz9V25B}2@(J?sZn2aJlVf1;dcBF45ALNfCHIPqejx)D_oG*_9GjRgXTyJ)2bNmg19@;y&6DM|HC=F#;&oi+{ zKFAe-&Oxq;4<7KJcgUq>ojCDc;VwTHU0o^)OiuyHspSy4V&`$_6v>%kg(hC;^RZ!A zSa6mm3s@a{vyLXO;Gs)_dao<-;U>N}$GD0I2Ief)80 zuxmVRZtF{rdrzC zw=?yPNXIYNVxIOEZ7!^(Q=apLbWO)y>4uB0(^;A7V^vJOl5wM*d)ob~pJ`sNKD=O8 zm@fQcXB{_+M;E9}G%`!uw(d+DuemAJmMjPCIuDq?(d62{-jV zN-DFuFzHDIWpjJ8s#$PK;HTE0FFJzI?St} zcaUE%{$z~cF$rw};5~SGEJfaNuPgViFKq%DGR#yzXhS=4eHc@ILE}hH7J(K_@G}p_ z$t8>>31^(mLRjW-sS67)tamN%(1kqtW;i>!aAqObK=32e#rQo~ukdd^^Sh?!O!V>l zLf*1`)AzCPlzG$H<|oJ(nL$>Na~#7Smj(|dZ?lbWUH(k?RpIlaK%@By)8D*`zECoN zzF;nb)A#_-JK~JT`HJm@zCo8TuY}!&zOnv_MC3y|mJE;|It=~g+%M*nbAa_RYd@Phqlzm9wdZ7b(vz&7n zIP2D}OP|m#Ca0YRwLRh$4S?M+C`VS}#4(+sk--fH+5mCQ4GTJu4jQ6VaY|6{=)`jz z95Aec2~fVyFRlutLDTSPq<%-fV8F8#KOGInm7y?5^WOKqw=k-00FjP&K=4sGfbVSe z3k9Hb#B)An-m!{_-D?;!>^4}tc5Tp!oq9MwFb+ryewGUiCOR69$it|zV*^@ISIXha zijdc8^$YZ(u9ijO1LVW5LL3L|806bPq{HyH0gY@^7I_oKv1eQ{dWZ{v1IL+>j)`lB zyIkTxH|NW9K?}Rvn1q2`SE=^@P@7! zn^w-I7fua$A>@j8#tGcX6Wl1Tj-JW}XTd_%uaHmifwI5@r%>@>QkCs`fCn8DZ3P}9 z%dsGU7c+qAXW4Qz>e$oMQ#ZE7XO8nD&*P?-we(-}IjBg;q18~9#!>XGzBzqX{82TZb zqM5%v5nKG>r_w`5Xk{5i2FV-!!gtr`1H$>Ka`_gf>EM;r&Ku`4v;lD3-;<99aGRe= zJ`33qe#n5IIVKoGht-5QyE$qRUBv`BJEb`C!w~dPTFWZ+0)NUzZ;&rxWf>!lb%5oX zK9Y1CVN9RsK@sI}-aWq}AK{C>BrOBLFvv1OHrC*k< zPXl!`ji@txN1kX`MY!;B|3|tAS6t+bx+2FMgM&OlKXfL2BYV3?U7OI|qMIC__9%6Y}beD4zT!i+6UVeYWhIe)9e+(w1f& z7kqq6I_#9=byVbVYCmvM8oF{&KC&fgcvN|IX*XO=*Uo{oy?JX|T3eG^N43~QM=_4b z)NWFK_y@=7o^>77x8nvGS%RmA6K(q8&KhiyYpqTCwu{n@U#Q)FFKJ54PS`7@pUXifhhJ@|E6HydFox$* zM{1@6wIguxvec&IA$MLgq|eB8YFCR2xmEu+UYk}Qy)yM2rK2*xsRe%e7j#n6C1Xp| z(z{orYd(2H+IhJqL7<;D+qLSL%M(spnif4jrJhy$q?-Ntpyc zw9rbmmir-|_PfO+bZ;* z?t6J3b`%+ejOt1sneW}#@*1$M#Xa^TqJ@pYk?<_KWU(g;wzy}JPuPh>7DWG>%jUV# zpHN|eKs*fFQ+$N(^ij5fVh%yYVryalF@F@F+)zCD&B85gE!$qU&B?DkzVg_ikR|15 ze$Q7v=S&sk6nUKr3g<){78%+x6tYbG3g%6LLN7qi5)YVvWbDuQ3wxfq02W{~#$rs$ z_z*yrkTdjB9M`XFevvPA9fWQ|&Ribx9S^x=5gvKrd}FN9A$i6r3vgOY$gtj{w-`^* z1}xXeEnqn&4)Sezj`pMXen!rsoe-vcW~(1GK{rz-^CmH-RM`836Q@2ghU2s$96ijJ zF}7pwjop3J89I7g?J*4HgX`0@+m3IXGe3*tnKtLSTQ#oaZUA*YvM&sLA@vC0Wivn|* zpP&HR8|?|*!jCo?Cw7UifRFKJj_f@;cG7^%p!4|A#~P45Kk z1SpIxDI$~z&jufX#&KzExkkD1eY%LFxCrc?4m2z#^Dq`-f|&+|(#<~_3iV(jkjek( zj7xQcW^}@&N3o*Vp*L6ZfEJYDhUN}{G{ivxlP8KGIt0Qq@EnG04#Sus9~!eKxT74( z%3#9;e0kTXe!O?*1P)GT-ht=8>)dK4_1T>P4OoHs8lBn9YPvJeJTnG%QD@;0>6C_@ zBp6z(Ok$@FR}|Jc=bV#1qHou66eY*rmF3B_2s$b+^5i%TCYPZRN9utqbtJCK#Bm4x z>CljI(-S&zj}pW9rqg5q0x+pY`cQ< z4vxnoL`%wnZhWH)#f}liGrR#PH}K&>`H@fHqI5h1rWyGXH_FUcc(_pYE6bnk!a zS0D|vr95bf1ITTJJSY#a{8&~9d!XbKS_9^TaUvX9;&_Ymr1!m011AoHAAq25gctNHjt}mZd+3ASAgVL@;rY3zz4( z)wQC)Y!vXMO2|=`rD$7{C(AnW&h8M7+eW_lMxEtuw!Eu%4`K>ny7`CqMsgv6kzC-K zQ{RMIqDv3;#7(__Crz`Clk6B;ocez*2huO}>g%KF&Z}>iUL8+sPkmf!S)*Ot`iGM# zX@^>rqf1K*3o*5mPDeL}70Yn0zCocLM@6VN(zoLj?jLe2RXd_xVG)M6<#PGuuDm8~ zUc4o(d3vt`l&(!!^Zhmbucrl3DkwZSG82li+U_R|E=uW#=l>*aTe&UuJodoUBC|&aS_)~6+3MEo~iu)P`IW3RDT=ldGZp_h<5R%O$FVrRvoOTq={uaHaKqvzaj$IGdI zr28lja9{5zotnL}RG9JUZ#e#DjBAmqWJuMKh>@vOpAAm7~Wx#n5 zK55J-e5~t?3p$MWvCy?a{g6Ax;LKme;$@``eXIJhlMbgP$6C@3`DDoX8iVbSj8X?^ zM;YjLAaKm|;dCL6?_@l~V*dCHO$m4E1>O&KfF|>q-)%&n@;Kf1$N}ZDJA5wl6T~Mi z3%QX)=1~~aGFJl3Hok3yU-f=|6o`INZECjp370^7A|5~VR$)hpx1MW>HmYX;eZ@2F z7`uyh96BUtXnjIkweKO?x}JH5ytwTnKMOhknNg}P_mKkiQ9^@6W_nD#ssr%kBnrTt z%}iN@K0Z9mIa!*zE(^Q zM@a#eNz)N$GLyzQIylPF^6Pxr^~eM|Mh-jZrha3IJcC{sB*G1dNwv7khK=sYH+UgD zxCW1mtKOTYQEm=z#6RdC_28PzW~U|tR3_;-@`W9(KE8l0(5#fQoT$(!7up0}^h|!E zw7m?-3b>I!Kg*EYpk-|#>IVu@cD_)vl*{B9+Cc-$Ks+mbSq6wV6PSn5hLsOxdYd`*0?b?DaBmsr-2*9~ z6PZ@yY z&=-=ikX2m)>zZ==A{^)OvBw@8`V!qz!9$P&h=^E^b_%VpdnAD_g`Hp=o5*wFD%A})*>jQZRg*f4mfIMy1TYHJ^Xpcr5}Fa^3RM|N zy5&%6(=IiAW-fNlO<)pZ7BnjZcCRVCMcceaal(;CWlt=srGB>8>8#8}Py}Gcc(j##us&W>TFelz!&^R(vFT{U3I*o98;~zVnplX`qtl>1|PX5 zE$&ez4p&&)wzQ~8&NRy7CkNeL$1hFytlX5EAKRMN9K1^3bL&VW>VNz6eY)|L`o8LT ze;QNXod;<5^tC%uThpR6T+^;TIS6;^I@+S`dhPn*Eabi?`R22d109 zf8)JO5E;j`%a30j;0!+y3T~)gde%-xjo2bI7}!3PMq0L~rcTkWMRB!-P8O45)YCMJ z7WLyTDGFOki&S)NReAVL$*WElck5#wO@ z^YoSUpJC5RUpYRgGQOa%Ecem$r|y3p*ER|Ijx@wU4`QET{{ZyGlwIge#RUkDc#R-c{sXDF8jqqkQ!^ ziE$v~Hk|bAV8p)v5A7}q8I!CaF9++`OU6*>ACDX93z4C)-Sa)NW*IK)BM@?aINWeL zqX!w|kRGS3-=n9zn3nvRU=^!24)?xlt1aJ)#5UAp>+pAp$>Xx(aT(O<#*G_`opbMa$2%fEPBYR|N8<;b zCIPh254wUQ`CCyDk7w5%W5u+hOm@F{7v0GxpB(9(KRmz?qP~=kqX01dc@KpA#$A12 zi7^KFYUd7lfQ#uz2N`)OZkdO!LnHo0J(VYUa8LcYr=3w2$H#HTKP$+P0gmkhSIZwb z!V_pknWk^hN6*v`TzQWi(iUA;@LlNofgkmPPT&Avz>_)#?R5`;8+^5#aTKBH8WCps zL%u-JQ017X934oW(5<((w~j~7C+MfRW&S}I@Q8AGHwU1ssGs6eFFIZ16a%a%qm&PE zfRG>Elm3B{PwHh_83*bM;7IX1>ce0KeZ@+=kR`<-j6o7B8C^GYOw?a>;hq5pZ3Q`` zUI2Wc9Jf6jA*LDcNr!U?UZHDa;G=NxZ782Po^ixE=bcc&NAeeq>32A1pCct$xkfu+ z5W~)Kpo|ZB!5?@9PRNDpNt-dxp#eY2f$zw6@LrBB;#&@hW1VkWk%rw|ltbNJzV#L~ zqF-U~7VU*Ll)>fudDg4yNnL|qidc3!Q|4{r(YZR_goOYc4 z_)eaAf2jI&=*fV=->lWkdVHk=Oatzz^VI%<`qDOIrM%LDt7$=Ajr1q^0+hp1E#L+Z zkVEPWAIOKFWr;EXdSJb#y#Z?nW<@;oSIc`u#0YE8rHYkRz7k?8mR3^6RnCv z`TS&(bS>#jwZU3iIle0Gzw)58mmE2Juh=&oy8Pg@rnWkDPIRWh=E2nSxZX6PYaHdN zESj~0u30*~6|We@3Xd8zq%QjP?dX$ZY%DEZvAkZE&<( z?|X6Md*1V&*m)6srx4)EJNiAGGuP=D{^(0{9~nAM_e>rEo&$*R2+4mG2YbT0u&_yF zUj<0-kp_K;&5rGbbB4Y)>=x1sD*YK`ctHNxE}}5=m&K#lyEssh8^)?Q0)Xhtbmhb) zY$(R&@X$OD+e>_=zk}ECHf*ij2NEyx$g(nD`3$5Q{0W?L9Aq3B4bYV%|EVM2RyNQc zLbj<#1@oeS?QP`206&lePGn+yfO8JMaPr4p+7T8uICi~&@f%|V#+vA+u*(&0c{49P z=Rq3l9qs|jgQq|G(T`%WBu7S~f6#;8#Ya5K#c>DD>`dFJ1&bb2fIp{`xIV}SdoQ_<3K99PX zet~zU@uc(*vIpd3KJ&YCB?t0nxeMo+Kzsf zMeDP&+&Pcxx_c?mXnrF2qas5eslC$P(Gj$1z?3=IeR z5eM4Dd+3*eMi>n_H&E_9q059gd9acw=&CrpFO;zE0U9JbHwcGE7}M?mf>#l#KG{l~ zNS|?NRKM4~?sb8?cZqm62693^mLJOvVXXT2(wDxJuDIfgP)f)E_*)@`A~7BrH)R&` z6SygiIMkJN{2U%v#VrHJuhG%6DhRsA4?2l1tgK>XCHbvex9;9#Epb`JzO_@)o4=bD4t%BTe#KzjSYhzavgJ~cX zz3>B|2kj0BUT^~*`UM_bbDUzprETbPfDVb$~CfU%?9{c0J9f-~+fn z!14*L0PysE1n7_Dklk!d6mzr&yP}XIfa667Ll*gVA3%MA$BIMxXKL{VgLf8mu(FnV zqw_IjFeKPv7m#TN{Yl4;Hg;^WJ2VDG$cA`27y0yH#S=F+nxdWN{G(mzo;H4g7Nao9 z01c2ggJpm?u_94*!qG$h%s1jPV7CmBuVve9i}%#Ya!DM^6=j5;5iSfUxo6dS$eY5V zz3O_H=+CMr@*qFwP5OdwnJ>nF#;f8{SIc_&>Uw|&$D_b2fa6Ka^e~^U7JnEh(#NpN zj$?SyyYL$TSLzUHsSjl?<}NE2e3ye0xbkHbbse@PnEHneX9H7j9g?QH>qsV3W4e z3%p3WDC%fUN9pK$bHmNU3T>5RN=G^3r29rnH*LB--L&+c^r+`QG1WTwVw!fR4ap|c z>1_k;8b5Svtg;H7+O6-#ta(5jv|9Qw8Ux{x2WvO6~n}BI^5c;MdwDyA)>~$7aeDsO=}` z(9+hl>4r^p{6UO*s`y3vAYYq~t0Y}bH1#je_k>x|Tyee)>#ZJm9?>z)6FSj^Ge8Ax zdZQ^5-6_U|o?4g4Dc7l;c^&oLc{MplMT24Sd!n_TW+C+e{TSaY0vJCs?qG2oWk%nr za3*}&alwKuj=rRSwp~U%`ch<)$)m-x51B|R`g+>}QG)&`Ug*SZgWGnC*UF1`*l~P= z6MN7{{>J;9HuPt{cR1Hde+D&n>mO_=cmiNo!)rc0VS5<!gpu?w3p>V}4J5=siw(p*+T+$TeyC!F$FPOoUSg-wy*{k0}`Q0+t_eW6p~OI$G`+9|Ims2LJRv^sIQvSfM;W!A|4=z1tv% z3#V%_US{C{ybK=cicFe+||DK+n;1k)>==p&MgC*lpE|>dI2r8TVM)iC9+ut5rWxpWf2m^&(gynqS z`ObHyle~LS^##BW8bL3<3k2=FbCUOg1Ik2kkR=;0ybDDIU4$F-b6t5yr-qzT#{k6v zB7d#Y!-yg8a3T|~c;pQ&kwGSs;oq~h`_pv@Syo(Vi38zT+7Uw8Q(>ca2Et48f%oK3 zT*_c@=yXvpz31A9f3d45mj~_!=)lpP$jwP7ofLJ(VC948rkiO+hYela>AP-aJa`ZO z(atGEG`2Cx<3iPs-Btj`1Lc7$9gcZU9l-a+FMe@+7mK#Ux$11so(s5hn@T(Khd&&N zfxK{x-*cb)+=54uxA1{xkJBnVb`SwE$P^#K*eUTNUQY8TWB_>;fCI8y`A?c?qe=r1muKk1JFlQ*LW^&|xC|V2Z++`qqn*%S0_a^J@>5znBO|cEpTL_m z;_2J9tC>L`VIi;JtM-Qs?j?PVenaQ5sKNRn@GX^b&N=5qJvq9V1uOIoKK|Ld7d+v2 zqy7QfLNgDND8_9XIc=mrF;LxCQYO2$!G&XLUZCSM0qPob(>-)!b+>f^Wx+4nBl#5i zQE>_9N80!)ZUN={BCxutC@`4<$c_65Y=kGvPWHDiX@8-cBuh+~&{oi0$Zt%NPtK}( zdMHvLx(@y@l;h`nCj6ws<*1WYtX~FR>(`{SFqdh1&8N`9a4!Jv0y8VKi(=dLp zy~fg^ryQ!IAN8Up$Jw=V8*N{lc53I^A*UX#f!z)r8+lI}?C7sMxen6za*uzczHQf* zZoYCuy+EnN*3R}cFeF=@@5wa}sTl2)1CJg0T_@Y}d-b?OBbt;L(?ll7>U~?s;xs1b z)u6t&Hmcopj2^~DWm9t!x$wO1TUX1L$DU#wszCf&>IQobKQt{FUXkwkabIfh>rUM} zwflZscUru&J9TasjdV6S#Qy|TE87ETc7WapLgDQ z@o5929CieG@smt4>Bxdz@^IfxT=Js7<$LBFo6Q2R_3PJ18f+9CIoR=`Ka~%<)p%6; z)70MmSLh7DM|jOxo&}WHO4v=v47~mS?41X^W<`1b=hp48^d@i@1POwoqKJPBYHY-o z#6(R@#9(5HiJC&9iHeFw6HAQI7>tM-VvIc|DhfvO`G`hQ#EONYw59B_3tR5qd*Ao| zf8XcKZ+6~yZ&`Nt>f)Z+eeXGE$}>-!XUcPC4&yiipS56z2l?s8LPoiKWZ;kTlLvia zp8M=)KRd=|=oTUB%=PVzeg?3+@F#Rt`I!eYwxvI2{0q(C=D9WNE9h$*b`1xD?~-=} z?1aMgdf|>2l9_Meq+*>BS)fnI;psZ@>!_oSk}3_v`Wx}KMFBv6cs@ZdJ#oUv2S511 zbjBHHL=yVNk95oQX1y@U8Vh!ixf1g-0&+(7e6x))9O>9gY+2}l>i0_nO-&j z6aczTJ#Gi!OIdaU&PN|@g!$MPH20>iXcsDvUPcg{h|>ethwG%OKh}4|nR~tOeeY}X zP#?b>u&wZsw#)9;NXzNgf5SyWvFHE*KmbWZK~!{^U(_o+-I?{>dHGWD9X`|F@%fY2 zzy9^<|7pE(zV!)S3~)eyIC7Qw0gmF|Mz<7-Ug*Amej6FuKMTfz`PL_}Px11#+9~~` z*I=}4;DH|#FI{PK8ngN1e$ z-&n+B(9MD$9fud*qr3s{##i{lA~i<*!4H0L3?y0Lq;q4UL1zu^Odfd45Qn4(nUDp4 z+~M==j*mEp!h0HMAI~uWOj4Mbuz+)^K3L0J6st60VlfpjIg8!|8Yg(sp(7)nxkjD3 z62K=0ImA<+WH=Xn$Qy?VZv)|k#pzbl$3zPmV?=n%iG@}sR^-Fsg&|@QoZ||>tzOJF zt%d%;F#qY}19{OI;|^UIsycl1qaTfqi;o7Qa|GAH&I-OuLF}`1YsTp-2E{ zz8zd7e!_X|p)du!Ee-j{MOx>=F(-`W1^)o&RizcL}ru%d!l{vbQ>0Y~}__=4?%FI*Y$!$)W(5Enb*`tUYQwOt~= z-!$bOU3Wki=IbBOL%wZC{|fKH)olVe^Vv_1w&4vjw>8=k{neZ0pnd-HpPx=Y{q)$4 z1dS}>p>Oot7s+W1uGEjd*gm>$;=rG41o4jNz){!W1+-T5HW}N$EeCozfUXeGHFOiZ z$L@IA8Mf0lkiG+Z^^%voq#X0x3#onDBRIfN9W$!mpgdg~`Nl6CJ~+Whi=cU!TyPp) zG*Og8)ikwOIAg0^8iZT|Ljy5-B)ru|M@lvX}Ti;!1o zym+M?L~^KI``#aA*AgOXKTxER?nd?!Wh5 zX_?@UPHFe|mDA}<=Y2_qsgC__T2z@9ZmNFmUbm+W`)y2P?>I`|+LHs6Z~W1JY*Nlm z%hOo*sC3D@FG=gZa!Xo_hfdkUXcVN7HNkbaG>cxS@=3)K-}*VHXC*5{#J`%W?Y1*w|RiGe7c?kHk2Z zIUL7N^Kv8Ow>4VOWf9Qh5048$iSLdx{=tqhR%SswzGK_hM>2*27K_6i!G_J_Wia~Z z$Ll38j@YK3eU-j(yISKq?5F!)=2)%$+=U9Ty`Vw|rO&!Dj^zbB#*D~{IW==rWX(DS z<4fi^uYK)ndycoHDvu!cUeNr&2R;z#|` zqig5B``tyaz?X48eKO{ic_4EIkL&5D37%haU+X^4ZP*D8)Hb5JXHJN$c+nU6@G>Cs z!!9weMW$z;eRg~jyN#2nzUO&2 z4VJarDQLnYc+cF8zR0#DNU(0{>augKe|jE1+xjjralo*yi5(+9ecz)V^{7~frEb;^ z=ugoP0(fB~S+`&vVXpOwuYBbzMHZ}Y@y$ByDvp^m&pb19jng(}o8Lx-?VknXz#SxBBe~Po&=c0^z2*RNWo@X&H0ui+8nAm$e)5xJO$d9&%OlJi84I1GHB(Mr zL7xb=N$B3LT>q?5Ywvdr2j+Ls%~MZw2r@c^qEHfiV`>^@paWn5l${B5Wc)Bx4AvRg zmHiRB$_nI8vR2r=*THch&HIa3rQbuh*`(r7ktJ!!hm~hY%F*N zzpxP>))9M`Du37<@xtYlDF%>^htJ5JfirZORu3|1hse~O9|1*$Jkt_BQl^58f>c=aPWpKlN632VlWDCpc#kPx#yl6GITj) z0{!SNj&a%^4*h3pca!;rGmy4*nd-GHOaGATM_x0vKV*Xp8OYX?=Xbp09WjZ+A%&BY zMJDP)H*iK`muT@~c=afV~s0exoB z_lZw@A{I)Dy;gn5k6`{nFYSf?koL`@1|ixfV+EBVVB>eTf0)mH#@mnLyJf+Z_Riwo zi(d4ippo_-?MyhK(E7iWxEvZ6#NyCA2KD_?(iJDf0c%9ah;K={nK(_1`gP6 zl0@6)*r74?8#u#h$Jh*ylX)rNHLrP1?2->q+4junvt*?d zqcO3fIB;=F&Y;+Rwn-b!t{Y7U>v+l`?NFmn<9NupL9Znpi?LF*4nw{6s}5~dmYH#De&9EI+XcFo;!(`35g^FK|iPCPm-+pIVL zRR%itl2hxz+xJh?8>Z4N$~!Toag>rq>ra4e|QR-~ej<$81)6L&pn{N8@O{vSUXH>4aE#fTS=Y!uJ9npE`VtxCL z`H1-38CUz2Lr`f;M^>iMkwt0q+RY&gaG20~!iAr0KxTv(KS|!6Q?a{=G1l2-j@@Fs@k29tso)@_YmOtY{ z;8>=tUGQQWeIU9MX<4VDp#JQvesWR<`pg)Q{+2rUF$ZN$gE1XrU*^W>UeG5Tz>zT^ zX_N&=<_WY1^gn14JOMMR?R5b-z?#mV>%~&WML5oIRxw|-++O+0SH^r5Ie7ezd`pnb z*j<7%m@>TFj!ZqKw{BV|*(v#g7rY=|=;fu;IJGLb0qhf}%K$I>R8`_Ssn0N37eueo zAMUwE059R=HbkBC(MP+YZD1dnPf;)Bc&?q4<_GI5thIVwki5p#x=TBtjbgu{iD!c6 zm+^2n`D6RQ72d)J==EG0I;{_ukFRyv9bMlAw%0P@BesGyBGw78C&bYg27clx`a=G< zyyY#imdjemTzRJcWQSLjh{>Q z8gJgJ8q)#`J2sd=6uxG@Fo}q_3;QrFG-sZ;Q2scYl38j2IHGk?jvEiBQ|c7`=%aO{p``g+^5n?+ zc_HYdnp5St$LYaaCpcT^P{5DLdJLpw8-gx67V)9x3Hn;}Fw2$n9=*!tGD+o9U@8W= z(|(XU_0o>%D1pOZ#(Di5K>GBEd^5GTA`=xd9Lt91+1ejHlH`YDT}?Zt(XhfnbK;SxObg= z_m7t!uqQv!%PvmiYCIz^6A|o$g7J=rS^m^{YMos!zF@zg3Ei+A49A>cmAn-{OCPTK z-}9dL#KH$}C|{x7K&3w+KOy7TJf!$G&5raBHU7xG-+p@XMH_bCMi~P7$pQ_FFXUqp zl3(yM(`ESm^cwGey236<2EO*wS<1CHEeFH_>sQT;1J&kO_~C^Qj#0uP&sgqG*(CH3 zU3HtU%eD7=7zfxbhdI@5w4~i<;h~D>iVuqCpvy(_3Q23iSv93&Amh7h@}s2kK#3g03-d zpK1N3(BLxd^=HNbHkp-E? zOO>)~^}WaZN64{z{PD-fT$#EUqixcT6$jg<&}YxfG9LHWi=o(0UgSitYdh)kzRpD- zZGgadu!iCJ8!sG#BcEhoEdxB=W{e-@%YDW#cq6*KPSukq9@K~Cx_R7fgXk&iLK(?g z?#L3|@%*q(Gf#X)jx())nh%tnX?>S@X^+jwJnrY2ZHU+Dz-^^I3pL;R1aLyfSi`Ac z6F1-dwjYP~dDn8lx&zdi)+dU6Qo7||WVyYlWSLVAr!PC_c#-~EtrL08BlH4zb(_uQ z+}26nq4iG+wqZdyu+t7YD^snAzUS&t6h#rlGoYVqk->0Xes{j|L0}v({W#agz6XCb z40n8W9`md4sxr1c<@+Ao0Z_j?nquV1Tf@=4JFLLB8aPCJZotk%@%iYhX&^trv=lk3 zUQgnh9QsRL6>fpE-U1=MpO>Xf-wkzppx$2YxL0LRhIu~#;}rJks~k%jTfQO%{oBVbz> z>T;6BLepnm;f*ieKw}rd8T#e`bo2~(gs=6|Iti-%^k($84muT4%O=uikx9+tQpSAJ zHFOw0%>*+dn}Ms#`WgkC&Q*MkG}-_^)5g7m=?opsal{+HU8$cl!K5w%I1;Qs{q*!d zlh^S2aVL$?Q$}>x1LP*hwtqv$w71NwI>%i4Y2EO(*hR}U1L~)fXy>i*<=!@=PVbqx zXIVm548ZhU>rL>dudUVe^xxO@o2PTd^`!L!o8cMW5b6aoo@+SfAA09WYbhtWm_BG@ z7dLND<5+kpc1gj!iiga5;8V^Hv4D|nYUH!5v;GH+8TyBL?PmbnIsoRerY$Fj9r1+M zGA?<+A>-lv+g$r}YMb;nqUFF09I!6BjrrMa-9>Ek>vlJ*zVSMfDE{%si?*U^zVqtXVni*8W;QCHt&o1WJATSqxA9bT5kr*wR^ zzIjG9WFHyO5#g$*D~}!Ux6o~nKs{YSm*Z?OcDdnv8;~zb4jVcDhU8SDZoS`~CiRUs zZ9R+c-%(uee#`D^CrU>zHI4GJm|lWX{7|k_J*V=F$_=HylzNBsc5w&y)M)st7>VJs zY69*m7OC_T(%>*HN8BV%JFd41x0}+Y^p7vX#i5%+OVzJY_jFn^DB87yO&FzV zzD+l=8Lp`e{ME}U!^*{OJkch^HGl^;&#GiNdh)I2C2LPK~66$^lA=vCwbJLqhid=(a| zck6gOo{94K$o+Wk!|B`UQ$6SRc%axil?8U0%VmK5>5NhO$Cu7y-2B|yPfKOtuJGDp zrQrKK<0SWCMTSDn^4dmz71~a#%T>u`4(NQ5wmtf(jEvK*mqlmlv7GL`UISd}2wj#g za*Z*g=q`0Du8d{p8#4x??Vnx2fqG3K;AI&WxhT@Q=5))|dgW`;gMP$-N$8hruFH0< zz-e+9-6*;vXNvLa&zp;EwR1UQHu{`@n`_32c(*&}sq03E?I>`30h5mPUryR8stMD&s@4tV_NGV_w+knbJ_+*t#4V^N_nM` z-}*xxMOSkgHZl4&;o6fPPwk(D;6T&rcLK5(*HAJC8v%?-{IcMk&XsZ~hYbmFbRq=e zN%wO^?#6%E5|8qFkcZ(Ulm$=SLkn~fP;#6`rEx?o?IZ7CgO?RQbMmYgznww-@S8>! zJ7TDdI;+OWy^VYv%b;iHiFoqn{H|~=`oiesNt5XYcVM9t<_R!^9~pkp7d@Ld;Yic7 zjYO>*#-;xXOw$v1tGvrmH!y)`V-q+CNaO*R9N+=Jz*l%<o!MxlvADsr%(7$SLh@6s*?a6<_-9OZ{Q@FaflP3Ip|fK>F3IiywF+mAPSK; z%Y?cN8`;4J%DRlxqMZJix1_`SNLPGZYq;pYdFaAQhlcnm∈dp{+`HF|Op{w-EYi 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 z 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

smDoP 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 literal 0 HcmV?d00001 diff --git a/site/src/site/sphinx/_static/dingding2_qr.jpg b/site-vuepress/docs/.vuepress/public/images/dingding2_qr.jpg similarity index 100% rename from site/src/site/sphinx/_static/dingding2_qr.jpg rename to site-vuepress/docs/.vuepress/public/images/dingding2_qr.jpg diff --git a/site/src/site/sphinx/_static/dingding_group_search.png b/site-vuepress/docs/.vuepress/public/images/dingding_group_search.png similarity index 100% rename from site/src/site/sphinx/_static/dingding_group_search.png rename to site-vuepress/docs/.vuepress/public/images/dingding_group_search.png diff --git a/site/src/site/sphinx/_static/dingding_qr.jpg b/site-vuepress/docs/.vuepress/public/images/dingding_qr.jpg similarity index 100% rename from site/src/site/sphinx/_static/dingding_qr.jpg rename to site-vuepress/docs/.vuepress/public/images/dingding_qr.jpg diff --git a/site/src/site/sphinx/favicon.ico b/site-vuepress/docs/.vuepress/public/images/favicon.ico similarity index 100% rename from site/src/site/sphinx/favicon.ico rename to site-vuepress/docs/.vuepress/public/images/favicon.ico diff --git a/site/src/site/sphinx/_static/logo.png b/site-vuepress/docs/.vuepress/public/images/logo.png similarity index 100% rename from site/src/site/sphinx/_static/logo.png rename to site-vuepress/docs/.vuepress/public/images/logo.png diff --git a/site/src/site/sphinx/_static/qqgroup2_qr.jpg b/site-vuepress/docs/.vuepress/public/images/qqgroup2_qr.jpg similarity index 100% rename from site/src/site/sphinx/_static/qqgroup2_qr.jpg rename to site-vuepress/docs/.vuepress/public/images/qqgroup2_qr.jpg diff --git a/site/src/site/sphinx/_static/qqgroup_qr.jpg b/site-vuepress/docs/.vuepress/public/images/qqgroup_qr.jpg similarity index 100% rename from site/src/site/sphinx/_static/qqgroup_qr.jpg rename to site-vuepress/docs/.vuepress/public/images/qqgroup_qr.jpg diff --git a/site/src/site/sphinx/_static/qr-jd-2019.png b/site-vuepress/docs/.vuepress/public/images/qr-jd-2019.png similarity index 100% rename from site/src/site/sphinx/_static/qr-jd-2019.png rename to site-vuepress/docs/.vuepress/public/images/qr-jd-2019.png diff --git a/site/src/site/sphinx/_static/qrcode_gongzhonghao.jpg b/site-vuepress/docs/.vuepress/public/images/qrcode_gongzhonghao.jpg similarity index 100% rename from site/src/site/sphinx/_static/qrcode_gongzhonghao.jpg rename to site-vuepress/docs/.vuepress/public/images/qrcode_gongzhonghao.jpg diff --git a/site-vuepress/docs/.vuepress/public/images/trace.png b/site-vuepress/docs/.vuepress/public/images/trace.png new file mode 100644 index 0000000000000000000000000000000000000000..d7fa4692d4c04e833b005d0820ec26125c203f82 GIT binary patch literal 123912 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 OKH|bMLO=mM|NjHeeQ_lK literal 0 HcmV?d00001 diff --git a/site/src/site/sphinx/_static/tunnel-server-agents.png b/site-vuepress/docs/.vuepress/public/images/tunnel-server-agents.png similarity index 100% rename from site/src/site/sphinx/_static/tunnel-server-agents.png rename to site-vuepress/docs/.vuepress/public/images/tunnel-server-agents.png diff --git a/site/src/site/sphinx/_static/tunnel-server-apps.png b/site-vuepress/docs/.vuepress/public/images/tunnel-server-apps.png similarity index 100% rename from site/src/site/sphinx/_static/tunnel-server-apps.png rename to site-vuepress/docs/.vuepress/public/images/tunnel-server-apps.png diff --git a/site-vuepress/docs/.vuepress/public/images/users/users_alibaba.png b/site-vuepress/docs/.vuepress/public/images/users/users_alibaba.png new file mode 100644 index 0000000000000000000000000000000000000000..a6e4ecdeee03679b7c80d1739b74a26ef257290d GIT binary patch literal 9743 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 literal 0 HcmV?d00001 diff --git a/site-vuepress/docs/.vuepress/public/images/users/users_didi.png b/site-vuepress/docs/.vuepress/public/images/users/users_didi.png new file mode 100644 index 0000000000000000000000000000000000000000..df1ec282d1dfe44adc3171d70597eb4fd9faafef GIT binary patch literal 12450 zcmc(Fby$?&w(vVchk$^T!~g>*H8fJvDIwh@or8pQ2qGdmLyLe?N_W>F5+exGT?!&d zck_+EbMA@n-1~ih-g%yxdH1_wuf1yTz4nfNtf_p9kd6=lfLp363OWD)qQN}J;^Sg| zKakYB0RVQ5lb(^ck%qds4cv{_+7|xAj@Qr40|N&DNohY1Ya16kZ^#on2PbzamYtRk z7KoFr6pNv-2A_t9yq%+yN`R-GZh)qqO@NDym@SL+LqbVEaSQ`DJ8x@%OiT>MCjb)=;K5+Lk{(BNXYmfg9SwrLhjqc|5Z^Q8NR(yt0#NU{C^Ss(Ve)eo3(?Tp_8q*<3G9m6QFMA?(hflU!4Ae{E^Pp z=Z|^y-JLMw5%?!JqkqDrSVRS2|I(51e+&ADEyVwlPXlg?5l`?hhW`Yq%F93Ygxfp0 zVqji6%5o4@MR^f^F%c0S0p7p$fH9mnhStg6U%}cNgC)R+@lQTc9)2M`elc-DQE_1b zF1`oie1Fr&U)Y#v|x~|>RzqS6>band6 z$03lvEG=$r^G8WiEFPY4TOS)c+rNf|VfQzv7u??4*V@xg)&XN=DHcrBI61i6c|x2X zTiZhTdHMNxh5wzv*U|2e$^XZp!Tv57>`&1Bmt>N#|BzksFNA-IQViYS-eIC2lSW|w z$Rn7>KQfV>J0|^jV)9J7YRU&pK6~zjvC4l~0|4$Jd=Nui3fh#t(t?h*e6J%TyT4V+ zg(Oei6Lk8hI!d!TY5(&pOjyujN6M*Mzy3A(-43ct9M_aO9R;=2YIYIzA^(Fhm7jBi zQaKlGCvUfQ#u6En{vJ zD8NoJ^0Hm$nzA2R(pRb@V-qbzOWdqzj@VF*zCWBKP)%8SeX~`PO-El@GI{a-Ct7Gx zyt59cTVwQ6Qt0dV+j>%;6x-i+1OZ(;x$sos#fN?q%bV4u-M&jfSSCzk=~P^*`rilj z2rabUS(Ch}c<+^7BkyG096H9J-@eGS^jU$^fOLEJG@GoC9Ki7#?NJp6lA-%e3E@Xr_j>h(awv% z$GpB>yiM{-0K%z)e=pn>i(*87e4JVKvCzlH*az{A39Ruj{MX;Xa#Z*P)6hr0lWl7! z*V_77rY?p@$YR^Uv>`U1A*r=FFZklc+?xNO*bs=GB&uuKWJJuTy;n{^-(H4b0h_xa?eEB%tw3P}Tf}R;k#;1HB76I7^Y$+a ze3CB83n0qZGqF`QgMmF2a~~rz9&aTZ@gEVTe=#t)bEKq* z?wZu;wsj%f+S=+-VA*`cPTG^!`of6&St}Fvtm~ux`0=*3uP1n703WMEhLJ)xixLOO z;ysr_cjlLTjTI_!OVvD%YM!R%%z@cTTQpKWb}g73B`R)Hl_uIOMWNx~uvP?a|L(t# zhk*FqAdO1PhTX);oEpQJr*KDXElZv6ax!(P*ePp^K3=7tYDmbHTrM*SzEe?9ZRP^a zUgKdta{}Ke>@N%s4o(U;YfvaEEBAsEPmn=u=se;Kz7gfS^W|8GmnSSzzH8csoweLH zhu=P7or!YW@+5Np^1r{S|3vooN)TVy_^rt*cxVnOJC_jWxm8aYbu^CR%ZkYNp5Vl3 zkjlDojOepmf?vOW`L*%?#Dj3GjzV#OCkD+e9TjlCoOZvxCpIRgrZVy8KUQ%%iy%zg zY9XCqj_33=Zf%6&@2}h2rN;L^KdJf{21Os-7RhA;897B*8Ha}6Ogz3e039gJvfFCy zgAymHYW16$P~A2~hNz$3oON#8KCvk;FRWf_N5Y?Vu9@N7Q1^-PRBp>U=Wz(2z=AkSen_zXivO*r zT1KrZ?kP+D@ZE$J7{FbT%9f&LCoUmTL2jkWE4R&HT|Xr0E(t&W-W`*+@U)j<2o#o2 zJ)9n>JYUGoHu-2j4hVVhQXESq2PctUp24PY56tdBH+G(#5-c547na+)`dR7uGhMyv z!ul6nPnr`FV7B?iHvbiv&i zF||5=#7l^P(utQo^VgTqCwa~~5+u5r$~!fZ;>v7U?hT7`=ymOw^c(gITFj_WI1Bq8 zpTO&6J?c}gZ=uR}`H}Ds{3SM3Q@Fa)Sr4)cwZ^yE&krzlr*2F z_J^mG(MZT$tIYy$29Kl#G~RW-tDS8yV|-Ve+5B2jcla|pQ>go=M%_WeN<@+OjPu5$ zf_l;S9_Z1<#g3M?ydOyd_FQPYDc?JcXfJ3Mu}h1>LhQc1<_nY>WPReG?6`UIQ}KU zmNn%dF1DT_W#90N;h^^j{z=~R!w;i@sXV67j(Qw&QkbPdONrl>%Vfze-N%ddrD2B8 zmOn+l6>yv3#R?*kasNi4vVxA8ilqKM9Aq7=<- zTn$}S%!?vxB)lm1l|q-CkFHArA-Y9D4&3#GEBbv>ko2@HeYB*ue*M}EB0$S^ zq#i~v%r=BR-I}S>IIk6oh!$F~A5zdpHwk3h8%Uke_3f|rr)UO6imDW(8CfP#Kh&+VD69b=c9C1NdfN+A1?684L z6J3LvjnVPRv#?6L{?tqe8}uq0HFB-+{S5Kt@Z{)h3QP%GU-L*q%cXz7C5Ha4uSM5fCRBP@!`bc7*a3^t10 z#3xFPe_;95XA2-yRyab)E?=&29XLUU#P$?n;#(ZjXXq~06pme9V3d%&05(57X*ewD z0;OHbe&x+0M$Z-okq+8!TH|fG*ly_;bBtR5_3Ht$hnrU|WX|MbhhlVQuV7hguTcM> zJUp7$CO@2jkr5q}o2COwp1!4;fc*Ig$)K%R@k){5+>Ex4i+jE}i#6fCrN+lkqB7#` z?|zh~iY5B5;|HaU-KzPK$#wK`Ofk@5%~qOjzQum^OLNDYtUbTXK72XfsEKDumy&Y6 z<~lQUUbp*R&sWvfM~*P5zI3hyMsZ6 zg}K+{Zm!XQLcx6qsc=5x6D!YCDfCIy!J~8fFz<0SbOS}>t&6wck%tvchz=@%5_^J1 zFkP+Si%*Pba*qq2^`vs0H;etj!D68AM3s{Ffiyc&#UYoItm4tV?aU^M4kgV!8QJ5mDUf_dc0&0K^9SV5Ncu4h}LK?cCR7GKV z`h*IcnelARGYOeR_}5F9bf&9B%EolPUj%YJc#+|~Gp&#@*0B*vpiHw@R${psv*?iq{L{)%7mhBWrk%Tq?5Is;0oCey>(2RU;tMf9(~cDv+#{J-A?Ds0o^2w~(9qD)nb=>Y zRg;it2Hw9OG};u_*RpjZj=RGPSgB+)s(cV>Watu#iq?CU?;5$-?f+&W;h|bF!RzmV z23repk*-7CW4U8g$Vbq&`nzFH3ebag(&#cS(*DdBWt!{(cFEL0R5dt3=8Z& z5SK!`4%<(Fb}jQ;hSidz3Y{a984gdFkuU-_Ee?+{{IyxQkOhiZ_fqs8HGBET-)rwu zc>RkXBoVz(e`+{(sOey=_&s z(#IAiCr?%pgLh-P3t1$@pIv)sdm38`oE0FxWG{{ia&266*iG~%eJB*uS@#Yw$1L%b zW7p;hmm>N|z}VGEMG0)*qived^d6R@5WQDbb@) zWh|uqQ~Q+yOO@%!YV~oo*-`;t6ry!bg$uJPD{=ljF+-5B`iPuOw#aC4pxj%$&0!~7 zssVd~SJCNJlHo@ zl0NGh5`W1sZ&PM2QR}<&>gUj>NFp(xjj=9mp@fgGkp8O30n8qU)7c`5;aR#tsgZVl zMBae%J8O)0tP~xxm462wP6fBhWf+eOZ)=SO69nD-W+$JPTW3Vp05T&#z`V_@)Z^~Z z8JnsGnx#XvUYy#hdvjRN8+@oTts^(}$%07j==1EJAjZ|jv#zZjxQ}nE-bYs8R!*8+ zJe6N~YG{D3Z?`d4l;k)t4sb?!1M%E5IZ6W4GZO~Gv=1K$QQUcw@p_`zso- zFz>x@3h3P`)+FcQ;jt5bYd>N|w-Z5ILN_AR;Q5xez(*+ihgC5`^Mk0WiOSMeun&Hk z5+CE@0VXgUT*+EfP}BzF_sjs4{RgQ{84+9g0yn+qO%W6O25ASK$$2w8Mf>C#KZkKS zUJj?LT&(XEE4vU-04LhTB0YKIiBiDNpA@Bsg2;|?9edGypH=qgc>Rb!>(HBqfPN#- zgsOU?i{{h*RsTrPC&BWQDaZrS%Hxwe{YE8L`zs(~;$(GMNA_EVV%X|cNeux#;lW&S zY=e5S>tZla7q>~Mfh}|maunmYKsGQK5I^gztYO9mlV2Zi zKjki&N2>X{=GaVqQ6ESvWu-FZwu%CUVDCp3T9yQq!sz{n#+*h)dRm&x8)PeuM;5%r z=Y?QT`Qyf>UOP47Vp%7YZuY&0YQMn^dq?Y-6(nZ^dvf_cv8_=1#g*Q1$ktD6b!>C` z7!CF_Eygn+q;#sc1~*mULDO2c>4D?))mJ0+m!Yk@a-^u=D$neGknCm8K?i>pM62h& zbm4>4uYy~~Zo-h$jraDouy#)y8_Hx|&l+e)qqyT~_4On`UpOOYh_7od=)P)pC$zWZPu}DtO$oOkV5E$Slyr^!6+MnzfEtdV`rX^a{L$ z5s_oqV5KQs<}m$LK18?X(sB;A0;Gjk!@OTcNKihb&tQ?K zy+@e4-1(7V$NBjASLptCv(tV=4c)<0FcZvoz~sUN=-~9_?)|v<00HL;;0(qJ>R1Ty z-0QT@tB+2*4ZzDiTm{jyAW8jIGYwX2I(HW15(j|TE|C29fwTRGEHW~SgU#1@r1#6N zP%o6=So^m(m6oqk1t_yK66+BM1Ovn$RL>Kl9~hSTS@^8_a%*aVZyrCUt{epaRyJL{ zwkp-!!qhqFV)>^4r#=&+Hv;?R5IxfjMzE>BG4i`5I9auAudopy=W@4M2qy z>~PzUjRXv$09mL#aX+@8^tq#dNftFyLy?LXyLT-hs}ZETTy(VPGFi@0VKpj!B$yGJ zsyFPLpPEX`!`hJ?X{U6in081`H)@iIEt!h8eeGbBK!`XwW=l#l=pUs`=#XA(DVkPZ z58`8{iJJGj8=^98m}>?i4ZD~=(Cks*$ssP%~dplGT>k{iiAi=@m zZ%*rTui_3{37)biaOAD)?@7W1!aPb%Rc6*nZwViL)b=1#RyTwZ-CwY<}HVD+Yi@_XzFC&ZORz z)!NnfkZ_Lxr}IAdGmq4RE=q||oOBh+>f^E(!K7i=SKl_Cc7BsE{!C60El|=HyBn1J zAi%4g+C^0LbXuVnv7&m9&YWmn6tjtxR3>5)7ZN%|VkXFH3p3Ru)oU+plXr-gxZk16 z)vV9D`e*E8`G1HnM2*m9RZSfw2GLO%-G{8p6XF{oqJHACy!?7i980VEQ39kp@V+cU zYlrd8;k%$4N+lPMycZI0Uxrc~vheI)nNBPU94zNax1YTyaM^uObxowKNnIH(-8=ij*cM4lo$mXr(_S~J+WpY=NvsxMY4f@nc5*%q8y1bN>2<7)r2ILn zs*$pEa^*^^SUftf^xL|3-81}0LOK$~{eHfrjnZw7URt~h)5*~l-Q29Fss`Pg7u-oQ z?FmMIi#Hm0#r^6&m($5N6bjyZVRi&@0!Gw8L-C0f<<#YMbw`xQZYg96ReDMEoTYPS zK2P3McFJL8Sf=fk@=o*b@(q(bLBtoq9h;#m&nupqjt`IrF-M1ERJU^8N6SpK6IM^U zH~LTDB{ZKl6%wshE*H|)f?5VG*>U`Nggx!pHAK9*aFy4x(;les++>G3tEZJAlJEu2Zp^ufv5KWY2FT;s zXyaZKe?ixxxnw#g&G)40;~l7mO~~>Em`Oddmn~U|tS1Jtdv&6A9PcAK*u0tkDBI=D z_812|ef}kChw_w`B3gm?>qDF}&6^nLy~+p{UOyjamQO)g;032Xx!$Ha%eyXZm?BZ2 zO<5kz;t6Sj0?R?yr$pPYCk1V7!Q`)%xg4;fEAHk{O$=d{maX;m^~m+xvSjLo{6sOM zznd1K3)iuU%Wm+{7tLR7XWCNlsqqYZ7V0>OAo&pZuIvZaKvY?awZR&H+C#%uoy8D` zc^|>q*l;eu;t31FKv0qmqQ1oh`F)Xih-DnN_G$)9{LMT$c`sr~g2JaA;h50taCV zNJNodvC}}jnhIUGcV-bemwo7{HytrB&|;fLy4f7m6<0H;L)IEz_%VYu_$cPY>nHgy zCQ_FRS1am=S7#Ya88<~=DX#Uun5`;`fYK-$>21dpa%qlvB4R?P+Qyy@pYr6}?5Q|A_s!VJj;^Dba zxsFe@2VVpaJJxzDz^e0}MZJ89J6Uc%D|vt=Cv>Dk{JWh`P_63`VBx}Yo2DzA^m5nA z!Yp6uWD}%nz+RJe~1pS zICU#EMt%Hc6e1Mjj$2(vRShoaRhYxVz5)4}LR(^}0&}rCQEy9pi9?yQ8{O$x_f6tf zp)TI{!tO(~ICet_;JM7I_VQxYW-^&N?+uf}5M;JN#x9}L0zw`?->$awt`e<#s8edd ztN^R4BV~2!uhel4g8~-bjbFQ9g@hm2$8$SXmeUL$Cwi5b5XrW`_;BA1`}FNQx3FjO z^kigg{In=JA7Ogw>qJ=e+-~4%j~{7;aK70tZDLc-%dV;yF+M4K zlzbsQQD7;&U!`Y;uEC9knLj;*(y^3K0IKOTVAPE>-`?8G)s#QF&le(@6y}Jle_W3qDD-p565wzIBP8X+HHNl7r zAQy0#vfA3(GChrhZ3deCBp*_8UIf?-l;jRO26%XQJOqqfW@Gu&RGQl{BH;nVw{E$$ z|H_T&sr{_RnIeuhxoAi1Bj#==^cuz|!|3AL6-MF!&7rzLP?!tQ+MzbT2BZ@$Ei14* z#jkdujb#14h2vrE>wDsLR-3|Q$h#}Kv!f}#o)7C-*MKAWf4bVH#RhW#&?K}Na)AuH z(=d(K++-JEOG4Y!4{gRdsqQ26|Q8F&Fm8apZoNwHy_K3_C370y{r5 zzRB4%cNl>dahs`i+n#G$j8V#K05wk195|~o0UkVI50R59=P=}rO)Q!RBsl)!XF;S^^nwS=OJZ zLeF9_hm!1PxT=<*U0W7}5y?^ovVCrTUJ4)JGAz$u^LJ3$NIt|s8pmn8Ov$iwm{n~T zt9%hbMLQSWCbRSaJZPin!?x@(+>I=NgG~c(HUk% zKdGda){I#5zcuMf;s{FOz&~Wu>0lXHt$jePG|eY@g!{C(Cq0NS<=|0xUHC1C>ItG# zz-I44iHI6Vm+*BjsXMktCM41$Yvo5;Km(8_=98WGfQZktXH@FO_~BLoLUe822d(oH zGq<2xxVxOT4(IJOC`Oyu?|Y}|4%a* ztROW9%WzUe1F@G7<>lqpvcsdJc?$~*y>a}?CN9#l`=tfgU8;5~9|T3;0VVz#ycF80EiQoxNtx=_C<0glxTok_WP}JwVk5fg)-|^*utE8u8$Pl;fP{SLXQHM!N1NO5Uxj(JHH;+=V5$kTW#cT=oJa-)7+URn2%P>Qp-JTEe)fy=Z|Y9G}F9A z!!F|ZLlY@Qt}K-HeUR>oSP{0XV!tq3RC=$oi4J$Ohezj~D0bGeVfWLY6y&6$jMlOD zrKKEOuV8ljQ>ah4;IR1@?kV0Sh?`6PeoMzM8I^l}W|$0Wii?ZeF6=atPfBAG1S|r4 zI4E!A3CK^Y=^GzH1&X!gFfk(wBp&ji+xnb27V9TI9kj;0?)UNWks@3g-g6Aq(i+N1 zLa+F=?=acNuJiW{$Q<`uL@#3bvDDu9A{UfBeYD%d#i0yJp4n^uFx<+Fm4>o9cKmQE zn}IW=JG99{$0#w}Rw67%?OfYEls{}zwV4EnIlHqv*YeY{2(V+cqzo`!;43IL2<0#&l#ZN84T zgq-3AN)mV$~fITo1=@5V_Ygj0D6mkY_#`XSKr62eJK9$$f zN&p}T6(CIRf(Nj8op{6;r{qS49Sp^byHAol7DVrXwWZXhZRk4BcOy7t83TEsEaI02 zHm9)Nga=!S^ci8(cH+`y2kMQ!90@LQm6BE36{Kp1-#I;gYHaReH&p*zYHg~d-ctAm zxXp_(c#{yEM$hrPTT7`4WBb~h&?;|tZ=bNO3#e;_VtDL1)DQFVTBQq zh^>$Tr!jRRYSmC9Lnyg_L_SALOG|{U00A-+MC_OC>rkE@sH#LFb@;82pEQm?IT>+i zk6cr0o~Aj_aM`*8g=6pXxNL>~wAftkaKa=cFmPWr3#yeP=rD-6D%D0{Yxs%#Hw_8D zFh&PhzDy)mo*_9a>Z;?(VarVd7zAyk8$d!k-mOJ;Q-ZBd!yAQDF9lvgEMmr)G;o;5 ziXuqNfIs)geQRU47XIMv$}m|xFouhwuGAk92WAOesj3j41d-XfRa%>M*P|S;#T2Jq zw)l*Ge4F)hd`55b>}ENF&VVR&wImfcy{)YO>A`U4Aa)Q zo8Noy{r=n^GjsM?vG-oN*P0!rsji5FMTrFf0FJVfyfy%U$WhO+n0Ha%MYwg2006E= z=o+{isHuuuIXm)LSUX$V@E{#sP;dZ%Ng-VthTw}2uY9h}_6k#L4Te8o}EzhCn* zK>wh)+rt?Q)HI=T&aO7l`#kq~_!uOypfFc!TXAjq2Y(|*jo=JV-Q8Wpd3n9Oym-6> zd7NFJ@bZg^iShCY@CpcUqcFJLyq(-FklapgjK5j@#Y5i4&B_(w;*M~3g8t@dVd?DQ z4rgFM!J&U+Zi7Vple?4K-?onu1n+MMFFy|-@4uqEBW(W%^xu&GKzDiS?C$LL)Y;`9 z8~C>={sI0ELX`OadlICD%YTQgruM(1J39W`Hr(75JW+!9n^6C4O@E)jP1oDShF9Ch z&Dq1%%0|J{#>t)Wk0gG}MO+hsv~e(yM>yIzxuK*BXAltO`+uN@{{rO~`WL92vxBp% z4$7=-;0*kKhP&}`iCyW|Ey2V*&4Mx!9NWD2~w7m({y#VML3{fZrX~nP-O)< zVSX`TVQvAQzh*!wP8>yxu=SR=a7SSY@S*IJPlTIaNS9wsTu@Z}z5pkms5swW^7w;| z@&{`RcZ>fY{%@;>!cY`yYT`-=H+N@O??12pGIbrBXMc_U8ag2U*fmADbQDKDlA8`aV_(vqNaYBV3 zS5%w{gm`VB;#n{PrIr8C1^}=ndL)i;%4-q#NeMo+=8Fys>-q9QHX!9In;_zy@;Le0 zwC(yZ?|nhjeK?}(QC&14RXgbwx2viBk6dPV~NZo10Gn@zKsC+*eHZuwQ1iF4;t{GlAhKAJ30MO=DwyIYb&N&TT@`tr^CfY6e7XDxb<+V~YrXn2J{ z7yeP9EvwxR=-PkloOXXn5;^s4r>eBaYuWFP5#2-vDW~$ImCw3ZrW&s;a9>rtaq8Tg z8IkNe#WzW=XnMW?-%R?I)8j0#_T+Od#x^A?VL)7z4BY?#o9Ook1iZ>ZWg94d>`O?uWa1Ep}t9TMh)TMUE^D1L1H?X__=)-Crk9`L23~7qSrwjPVlpBw4S?kHD;r{tlecLfN6dx0e7A*aL`O|R~I^uB$ZG>B-!p!+R z&*S8x?NS@~TIDJ@PHjX}d+%@;ZH|rG)f^5Td^oD8Df1okHT|8tge(!1j|KeBb8<0( zwn>j?u*QZ>=dYDrQeIwU$Z`nUFPQD%r_@H-qz3m=!^X5j2JaSd#~_oFz{*aB1L>E| zd>>Y3w0i*NStOUDHK?N@`9aHv-0nL}0l<%lf^XJLPLwwOjnpQ!Ud~&Mt>YbT3iuft z6kcXX3OX99$n@Uceo98rMvzZ4Y|*;AkpN-({LV5nre?wBz!J$L)BMCpfE>c=4N8zX zqh#=>T>_?jo%4* z(%+tZ>&ELNDrr543OzZjnt%;IEZ#)>)E~;6E+Q8{qi@|bt6B^RN(xop2fdc>05gG^ zq`~BgO8uj6uhQg4F}UJ#*=oEm8!z{;8GgZ_m_ukA%^Nu?WD5LcZ8P2Vm={aHtPZ4K zC}ilUD^VUT--DEf!fOk^KY|T*&r&LgkzW)9uulN5X+F*{@Br=>c|DE_`?G`6rKNjH z8CBt2EHdWO9dy!XtQAp}{g+3R2~xD-s@NG&KJ1MBERVFw>1jcmo5w+P9%IL*(P70o z`#92zsy16LpOKgO<0jBL#j0ybecFKGc$&3wlhwN8?c{gl^@WAifWuHCuSS7>k9A)@ zEVVfHQ3b-9GGxgm=a%yckuP@G^KuCn=#UV%=JO6NO|Sufbj|TRwkg{o=^f+2mmy&@ zmmKR)z45IGB|)oC=xKP^e^$(SQ~(FPpBf=Sc-fn7or)m6)Q#Tg5nGiJX0F%POz8y3 z3J4v(rhZy3I74x*B_lL6kFbKq_p0-9aT&fsbPW$im&MOO@5c@DP)W1cPx`z~b2Lr6 z=|1zJ2NTKoNRgKP(`}65(SW|xVaJ}`%r1ZjH0&|Sh!HJ;kfcFzgf2K*-&wPp#nM{$U%}_XB{9A> z=d8U^KBlZcb}(J}CS{`0X7SON2%kO^p`HD*z*N7CoTja0^^2qjIMI+#{*RO2TLL4g zf_nF=MS!zrVuQydWWc9PoYVp-2b)!l>%;YrOEjWEWV(gEIcja_N?P6FoThwY0%9j+ z+M{HI)iFBkW(X?Sa$JMEP;v8iiQ*+j8sPVR#>rs$iR=e+QcMwBb;E_x>Mc^dR)JyJ zOAvr#8>V}~jp6TEI)TrP;5=8bbt5HXwOBHLPIYq4gdVh??dvo#Kl>@t?e-$FJ261v z9cObS(o6mZ(Rt|uy(H|l9_W~>n5o@8p7ed`wifKIf>LV`uvqEowln0t9b?*%^_Z8p6cd&lR(g_j}Yr0!w79vjAZoo&S!R-gV!^aE0PF}d>8G%Jrl zo)Y#tF?A42WImv|*<&|6fvIMR`_l$TyxFvQukv~3+sMG9_Yw6)BQ<7h2i2^Ys&Q^s zYtuJVIdS?M{ekSrT*aPtf@JnkDYHPm%Lv+qz@gq=D`B2jS31w1ct=fsP2ni=%@LI3 z-@B%pj6zsnsbM%Mt@V7OfXUGq&f_RjpW8=KQJHD$7j@ZO5(VvR6ufhd9?T^9GYd$amlQAa+>T~K5TJZC8$VSC4P28Xa<>VuO!JDGO$}6SYQ4EzB@#Z9DQMUkRdOIt>~obNm>D0Wn*%JF6eEC0VPM7 zBU_!RCxydo=&1WM3mf4gpXKg8sP}VH$fw0GKdVHG2zT(ryXy*(Vo3{?V}g|;DG>%Bt`wiHJ_bB z)-%diMUvU#$dzBk0mvJ(Z`8S0?IbDK;cn(mP=f zSp7B?Im?xZOLtzep!D_j6K_DJ_4IcHFSouQM;iJV+-0|XH}H$^l5p$FqOZpGFteeM z`HK$x;5=5kyZ2s-et!c=q7~W?dmcn^C&HFp#Jb}(LGt*lZ?yK+$2v!+%e=V-dr#+E zI2xW|k1mHwsi5z<%j#E74$kV3{t339ZVN#j$7zo%HCP-0P+u zScx0a7vGWCwN$ZSM7NjG<2}dKaF(r!*UcG2gvu}7bYWL#U&*J0HkJsBRKY6~hD-@v)Y4cG9#?Pq`rc{ewQ|%=U@u}(752rZ;f|Cj#gudOy9uCvqVr^}` z>F3%g10798ORU9o^ye6sMn8}yGjWlDAsCB;dmLQ44X+2BVOQoC!{x)?$!!>RxuZTU z*38B84x>HEpDV5(EqDHakF5QI4ADLBn1D)v{G5L=b7`cAq_@nLaOM-?7hjoZtdY7#oF6Q};Q3sIUfv0M7 z$*7<^-aT0UEH+7;;S8oz#i^ow!I|#u*-G4T4*_7cq<2CIR+4XRHmdSwcesp(6 z_X9#&S%*+C?4^7FXHzr$WDl-G;!fD&-s1?Tk~AZ9Lj_sUVj>;1!+g(z%G;+;B&Ecr z=1YU&3dR$BH&VaGl#sgmkO#O%ay7sDO}B9N$K^iceo<7XT^r)M^_!f(4ELLVtA z*-2IeQ}Kp0P?BOxd{eM9xf;e6<4+Gi>azXb_iU#|c@t2zsUeDTBm6p7^Qz>T1@5W6MDnG+tuoR8{fZ@yR0J?iW}*8U%zNH zwIu{Jg3+*Sb@`*eWDl~lr{8}_9AnzX#5*iBF%^Y(e^vhY*=NrCcbKJddguV8TtS96 zLizgwC2;3SLs18e>CD_N)>*AU^nk28)x4eyqmTt%(&gQZ%RBG7)G58UzXvLz}sVP#@F8@WeV)BR4gCx=HLNZkrBmW&(U?PTAY3) zmc2g`2E9(qQ?HXs&*I?GcU*XXDdM~?vn@>B4E2Vq;OJo@@14`-jEGsyXM6I?V$$oO5G)bd`Wm;3m^(~1G%Ad-bF%v%@Tp!Ek zObZ_ooHabW(T58el-Y~Vh(0XWJ?s)q|`6&&deEJg1niNGOZ~f8Nea#hl+@^S?io4_yqLtcbESntw=PWPRHV?6YvYl| zh&jH{H&$R7FYTWn3Y6mrvs&&ypwU_W(m z8M3J7A#|M-9OGZ0t4HxZNjgajEBldhzsrL+nrWT%9Lfu?7cUlm36s8i=oxN@P={x8 zQQmA_9U?7ubKtBK*DuR?0w7-u3&}07YsMn`XVR3=*TsGd_T!00AkXW8pdN$fZ~X
- - - - -
- -
-
-
- -
- - - - - - - - - - \ No newline at end of file diff --git a/site/src/site/sphinx/advanced-use.md b/site/src/site/sphinx/advanced-use.md deleted file mode 100644 index c17df1986..000000000 --- a/site/src/site/sphinx/advanced-use.md +++ /dev/null @@ -1,172 +0,0 @@ -进阶使用 -=== - -## 基础命令 - - -* help——查看命令帮助信息 -* [cat](cat.md)——打印文件内容,和linux里的cat命令类似 -* [echo](echo.md)--打印参数,和linux里的echo命令类似 -* [grep](grep.md)——匹配查找,和linux里的grep命令类似 -* [base64](base64.md)——base64编码转换,和linux里的base64命令类似 -* [tee](tee.md)——复制标准输入到标准输出和指定的文件,和linux里的tee命令类似 -* [pwd](pwd.md)——返回当前的工作目录,和linux命令类似 -* cls——清空当前屏幕区域 -* session——查看当前会话的信息 -* [reset](reset.md)——重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类 -* version——输出当前目标 Java 进程所加载的 Arthas 版本号 -* history——打印命令历史 -* quit——退出当前 Arthas 客户端,其他 Arthas 客户端不受影响 -* stop——关闭 Arthas 服务端,所有 Arthas 客户端全部退出 -* [keymap](keymap.md)——Arthas快捷键列表及自定义快捷键 - -## jvm相关 - - -* [dashboard](dashboard.md)——当前系统的实时数据面板 -* [thread](thread.md)——查看当前 JVM 的线程堆栈信息 -* [jvm](jvm.md)——查看当前 JVM 的信息 -* [sysprop](sysprop.md)——查看和修改JVM的系统属性 -* [sysenv](sysenv.md)——查看JVM的环境变量 -* [vmoption](vmoption.md)——查看和修改JVM里诊断相关的option -* [perfcounter](perfcounter.md)——查看当前 JVM 的Perf Counter信息 -* [logger](logger.md)——查看和修改logger -* [getstatic](getstatic.md)——查看类的静态属性 -* [ognl](ognl.md)——执行ognl表达式 -* [mbean](mbean.md)——查看 Mbean 的信息 -* [heapdump](heapdump.md)——dump java heap, 类似jmap命令的heap dump功能 -* [vmtool](vmtool.md)——从jvm里查询对象,执行forceGc -## class/classloader相关 - - -* [sc](sc.md)——查看JVM已加载的类信息 -* [sm](sm.md)——查看已加载类的方法信息 -* [jad](jad.md)——反编译指定已加载类的源码 -* [mc](mc.md)——内存编译器,内存编译`.java`文件为`.class`文件 -* [retransform](retransform.md)——加载外部的`.class`文件,retransform到JVM里 -* [redefine](redefine.md)——加载外部的`.class`文件,redefine到JVM里 -* [dump](dump.md)——dump 已加载类的 byte code 到特定目录 -* [classloader](classloader.md)——查看classloader的继承树,urls,类加载信息,使用classloader去getResource - -## monitor/watch/trace相关 - - -> 请注意,这些命令,都通过字节码增强技术来实现的,会在指定类的方法中插入一些切面来实现数据统计和观测,因此在线上、预发使用时,请尽量明确需要观测的类、方法以及条件,诊断结束要执行 `stop` 或将增强过的类执行 `reset` 命令。 - -* [monitor](monitor.md)——方法执行监控 -* [watch](watch.md)——方法执行数据观测 -* [trace](trace.md)——方法内部调用路径,并输出方法路径上的每个节点上耗时 -* [stack](stack.md)——输出当前方法被调用的调用路径 -* [tt](tt.md)——方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测 - - -## profiler/火焰图 - -* [profiler](profiler.md)--使用[async-profiler](https://github.com/jvm-profiling-tools/async-profiler)对应用采样,生成火焰图 - -## 鉴权 - -* [auth](auth.md)--鉴权 -## options - -* [options](options.md)——查看或设置Arthas全局开关 - - -## 管道 - -Arthas支持使用管道对上述命令的结果进行进一步的处理,如`sm java.lang.String * | grep 'index'` - -* grep——搜索满足条件的结果 -* plaintext——将命令的结果去除ANSI颜色 -* wc——按行统计输出结果 - -## 后台异步任务 - -当线上出现偶发的问题,比如需要watch某个条件,而这个条件一天可能才会出现一次时,异步后台任务就派上用场了,详情请参考[这里](async.md) - -* 使用 > 将结果重写向到日志文件,使用 & 指定命令是后台运行,session断开不影响任务执行(生命周期默认为1天) -* jobs——列出所有job -* kill——强制终止任务 -* fg——将暂停的任务拉到前台执行 -* bg——将暂停的任务放到后台执行 - -## Web Console - -通过websocket连接Arthas。 - -* [Web Console](web-console.md) - -## Arthas Properties - -* [Arthas Properties](arthas-properties.md) - -## 以java agent方式启动 - -* [以java agent方式启动](agent.md) - - -## as.sh 和 arthas-boot 技巧 - -* 通过`select`功能选择attach的进程。 - -正常情况下,每次执行`as.sh`/`arthas-boot.jar`需要选择,或者指定PID。这样会比较麻烦,因为每次启动应用,它的PID会变化。 - -比如,已经启动了`math-game.jar`,使用`jps`命令查看: - -```bash -$ jps -58883 math-game.jar -58884 Jps -``` - -通过`select`参数可以指定进程名字,非常方便。 - -```bash -$ ./as.sh --select math-game -Arthas script version: 3.3.6 -[INFO] JAVA_HOME: /tmp/java/8.0.222-zulu -Arthas home: /Users/admin/.arthas/lib/3.3.6/arthas -Calculating attach execution time... -Attaching to 59161 using version /Users/admin/.arthas/lib/3.3.6/arthas... - -real 0m0.572s -user 0m0.281s -sys 0m0.039s -Attach success. -telnet connecting to arthas server... current timestamp is 1594280799 -Trying 127.0.0.1... -Connected to localhost. -Escape character is '^]'. - ,---. ,------. ,--------.,--. ,--. ,---. ,---. - / O \ | .--. ''--. .--'| '--' | / O \ ' .-' -| .-. || '--'.' | | | .--. || .-. |`. `-. -| | | || |\ \ | | | | | || | | |.-' | -`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----' - - -wiki https://arthas.aliyun.com/doc -tutorials https://arthas.aliyun.com/doc/arthas-tutorials.html -version 3.3.6 -pid 58883 -``` - - -## 用户数据回报 - -在`3.1.4`版本后,增加了用户数据回报功能,方便统一做安全或者历史数据统计。 - -在启动时,指定`stat-url`,就会回报执行的每一行命令,比如: `./as.sh --stat-url 'http://192.168.10.11:8080/api/stat'` - -在tunnel server里有一个示例的回报代码,用户可以自己在服务器上实现。 - -[StatController.java](https://github.com/alibaba/arthas/blob/master/tunnel-server/src/main/java/com/alibaba/arthas/tunnel/server/app/web/StatController.java) - - -## 其他特性 - -* [异步命令支持](async.md) -* [执行结果存日志](save-log.md) -* [批处理的支持](batch-support.md) -* [ognl表达式的用法说明](https://github.com/alibaba/arthas/issues/11) - - diff --git a/site/src/site/sphinx/advice-class.md b/site/src/site/sphinx/advice-class.md deleted file mode 100644 index 3f89044f2..000000000 --- a/site/src/site/sphinx/advice-class.md +++ /dev/null @@ -1,47 +0,0 @@ -表达式核心变量 -=== - -无论是匹配表达式也好、观察表达式也罢,他们核心判断变量都是围绕着一个 Arthas 中的通用通知对象 `Advice` 进行。 - -它的简略代码结构如下 - -```java -public class Advice { - - private final ClassLoader loader; - private final Class clazz; - private final ArthasMethod method; - private final Object target; - private final Object[] params; - private final Object returnObj; - private final Throwable throwExp; - private final boolean isBefore; - private final boolean isThrow; - private final boolean isReturn; - - // getter/setter -} -``` - -这里列一个表格来说明不同变量的含义 - -|变量名|变量解释| -|---:|:---| -|loader|本次调用类所在的 ClassLoader| -|clazz|本次调用类的 Class 引用| -|method|本次调用方法反射引用| -|target|本次调用类的实例| -|params|本次调用参数列表,这是一个数组,如果方法是无参方法则为空数组| -|returnObj|本次调用返回的对象。当且仅当 `isReturn==true` 成立时候有效,表明方法调用是以正常返回的方式结束。如果当前方法无返回值 `void`,则值为 null| -|throwExp|本次调用抛出的异常。当且仅当 `isThrow==true` 成立时有效,表明方法调用是以抛出异常的方式结束。| -|isBefore|辅助判断标记,当前的通知节点有可能是在方法一开始就通知,此时 `isBefore==true` 成立,同时 `isThrow==false` 和 `isReturn==false`,因为在方法刚开始时,还无法确定方法调用将会如何结束。| -|isThrow|辅助判断标记,当前的方法调用以抛异常的形式结束。| -|isReturn|辅助判断标记,当前的方法调用以正常返回的形式结束。| - -所有变量都可以在表达式中直接使用,如果在表达式中编写了不符合 OGNL 脚本语法或者引入了不在表格中的变量,则退出命令的执行;用户可以根据当前的异常信息修正`条件表达式`或`观察表达式` - -* 特殊用法请参考:[https://github.com/alibaba/arthas/issues/71](https://github.com/alibaba/arthas/issues/71) -* OGNL表达式官网:[https://commons.apache.org/proper/commons-ognl/language-guide.html](https://commons.apache.org/proper/commons-ognl/language-guide.html) - - - diff --git a/site/src/site/sphinx/agent.md b/site/src/site/sphinx/agent.md deleted file mode 100644 index e11f82577..000000000 --- a/site/src/site/sphinx/agent.md +++ /dev/null @@ -1,15 +0,0 @@ -以Java Agent的方式启动 -=== - -通常Arthas是以动态attach的方式来诊断应用,但从`3.2.0`版本起,Arthas支持直接以 java agent的方式启动。 - -比如下载全量的arthas zip包,解压之后以 `-javaagent` 的参数指定`arthas-agent.jar`来启动: - -``` -java -javaagent:/tmp/test/arthas-agent.jar -jar math-game.jar -``` - -默认的配置项在解压目录里的`arthas.properties`文件里。参考:[Arthas Properties](arthas-properties.md) - - -Java Agent机制参考: https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html \ No newline at end of file diff --git a/site/src/site/sphinx/arthas-properties.md b/site/src/site/sphinx/arthas-properties.md deleted file mode 100644 index f6f49c7c1..000000000 --- a/site/src/site/sphinx/arthas-properties.md +++ /dev/null @@ -1,60 +0,0 @@ -Arthas Properties -=== - -`arthas.properties`文件在arthas的目录下。 - -* 如果是自动下载的arthas,则目录在`~/.arthas/lib/3.x.x/arthas/`下面 -* 如果是下载的完整包,在arthas解压目录下 - - -## 支持的配置项 - - -> 注意配置必须是`驼峰`的,和spring boot的`-`风格不一样。spring boot应用才同时支持`驼峰` 和 `-`风格的配置。 - -``` -#arthas.config.overrideAll=true -arthas.telnetPort=3658 -arthas.httpPort=8563 -arthas.ip=127.0.0.1 - -# seconds -arthas.sessionTimeout=1800 - -#arthas.appName=demoapp -#arthas.tunnelServer=ws://127.0.0.1:7777/ws -#arthas.agentId=mmmmmmyiddddd -``` - -* 如果配置 `arthas.telnetPort`为 -1 ,则不listen telnet端口。`arthas.httpPort`类似。 -* 如果配置 `arthas.telnetPort`为 0 ,则随机telnet端口,在`~/logs/arthas/arthas.log`里可以找到具体端口日志。`arthas.httpPort`类似。 - - -> 如果是防止一个机器上启动多个 arthas端口冲突。可以配置为随机端口,或者配置为 -1,并且通过tunnel server来使用arthas。 - - -### 禁止指定命令 - -> since 3.5.2 - -比如配置: - -``` -arthas.disabledCommands=stop,dump -``` - -也可以在命令行配置: `--disabled-commands stop,dump` 。 - -> 默认情况下,arthas-spring-boot-starter会禁掉`stop`命令。 - -## 配置的优先级 - -配置的优先级是:命令行参数 > System Env > System Properties > arthas.properties 。 - -比如: - -* `./as.sh --telnet-port 9999` 传入的配置会覆盖掉`arthas.properties`里的默认值`arthas.telnetPort=3658`。 -* 如果应用自身设置了 system properties `arthas.telnetPort=8888`,则会覆盖掉`arthas.properties`里的默认值`arthas.telnetPort=3658`。 - -如果想要 `arthas.properties`的优先级最高,则可以配置 `arthas.config.overrideAll=true` 。 - diff --git a/site/src/site/sphinx/async.md b/site/src/site/sphinx/async.md deleted file mode 100644 index dcb017ff6..000000000 --- a/site/src/site/sphinx/async.md +++ /dev/null @@ -1,69 +0,0 @@ -Arthas后台异步任务 -=== - -[`后台异步任务`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=case-async-jobs) - -arthas中的后台异步任务,使用了仿linux系统任务相关的命令。[linux任务相关介绍](https://ehlxr.me/2017/01/18/Linux-%E4%B8%AD-fg%E3%80%81bg%E3%80%81jobs%E3%80%81-%E6%8C%87%E4%BB%A4/)。 - - -## 1. 使用&在后台执行任务 -比如希望执行后台执行trace命令,那么调用下面命令 - -```bash -trace Test t & -``` -这时命令在后台执行,可以在console中继续执行其他命令。 - -## 2. 通过jobs查看任务 -如果希望查看当前有哪些arthas任务在执行,可以执行jobs命令,执行结果如下 -```bash -$ jobs -[10]* - Stopped watch com.taobao.container.Test test "params[0].{? #this.name == null }" -x 2 - execution count : 19 - start time : Fri Sep 22 09:59:55 CST 2017 - timeout date : Sat Sep 23 09:59:55 CST 2017 - session : 3648e874-5e69-473f-9eed-7f89660b079b (current) -``` -可以看到目前有一个后台任务在执行。 -* job id是10, `*` 表示此job是当前session创建 -* 状态是Stopped -* execution count是执行次数,从启动开始已经执行了19次 -* timeout date是超时的时间,到这个时间,任务将会自动超时退出 - -## 3. 任务暂停和取消 -当任务正在前台执行,比如直接调用命令`trace Test t`或者调用后台执行命令`trace Test t &`后又通过`fg`命令将任务转到前台。这时console中无法继续执行命令,但是可以接收并处理以下事件: - -* ‘ctrl + z’:将任务暂停。通过`jbos`查看任务状态将会变为Stopped,通过`bg `或者`fg `可让任务重新开始执行 -* ‘ctrl + c’:停止任务 -* ‘ctrl + d’:按照linux语义应当是退出终端,目前arthas中是空实现,不处理 - -## 4. fg、bg命令,将命令转到前台、后台继续执行 -* 任务在后台执行或者暂停状态(`ctrl + z`暂停任务)时,执行`fg `将可以把对应的任务转到前台继续执行。在前台执行时,无法在console中执行其他命令 -* 当任务处于暂停状态时(`ctrl + z`暂停任务),执行`bg `将可以把对应的任务在后台继续执行 -* 非当前session创建的job,只能由当前session fg到前台执行 - -## 5. 任务输出重定向 -可通过`>`或者`>>`将任务输出结果输出到指定的文件中,可以和`&`一起使用,实现arthas命令的后台异步任务。比如: - -```bash -$ trace Test t >> test.out & -``` -这时trace命令会在后台执行,并且把结果输出到~/logs/arthas-cache/test.out。可继续执行其他命令。并可查看文件中的命令执行结果。 - -当连接到远程的arthas server时,可能无法查看远程机器的文件,arthas同时支持了自动重定向到本地缓存路径。使用方法如下: -```bash -$ trace Test t >> & -job id : 2 -cache location : /Users/gehui/logs/arthas-cache/28198/2 -``` -可以看到并没有指定重定向文件位置,arthas自动重定向到缓存中了,执行命令后会输出job id和cache location。cache location就是重定向文件的路径,在系统logs目录下,路径包括pid和job id,避免和其他任务冲突。命令输出结果到`/Users/gehui/logs/arthas-cache/28198/2`中,job id为2。 - -## 6. 停止命令 -异步执行的命令,如果希望停止,可执行kill - -## 7. 其他 - -* 最多同时支持8个命令使用重定向将结果写日志 -* 请勿同时开启过多的后台异步命令,以免对目标JVM性能造成影响 -* 如果不想停止arthas,继续执行后台任务,可以执行 `quit` 退出arthas控制台(`stop` 会停止arthas 服务) diff --git a/site/src/site/sphinx/cls.md b/site/src/site/sphinx/cls.md deleted file mode 100644 index 136f4092b..000000000 --- a/site/src/site/sphinx/cls.md +++ /dev/null @@ -1,7 +0,0 @@ -cls -=== - -清空当前屏幕区域。 - -> 非终端模式下使用cls指令,会提示"Command 'cls' is only support tty session."。 - diff --git a/site/src/site/sphinx/commands.md b/site/src/site/sphinx/commands.md deleted file mode 100644 index 09495d6a0..000000000 --- a/site/src/site/sphinx/commands.md +++ /dev/null @@ -1,57 +0,0 @@ -命令列表 -============= - -* [dashboard](dashboard.md) -* [thread](thread.md) -* [jvm](jvm.md) -* [memory](memory.md) -* [sysprop](sysprop.md) -* [sysenv](sysenv.md) -* [vmoption](vmoption.md) -* [perfcounter](perfcounter.md) -* [logger](logger.md) -* [mbean](mbean.md) -* [getstatic](getstatic.md) - -* [ognl](ognl.md) - -* [sc](sc.md) -* [sm](sm.md) -* [dump](dump.md) -* [heapdump](heapdump.md) -* [vmtool](vmtool.md) - -* [jad](jad.md) -* [classloader](classloader.md) -* [mc](mc.md) -* [retransform](retransform.md) -* [redefine](redefine.md) - -* [monitor](monitor.md) -* [watch](watch.md) -* [trace](trace.md) -* [stack](stack.md) -* [tt](tt.md) - -* [profiler](profiler.md) - -* [cat](cat.md) -* [echo](echo.md) -* [grep](grep.md) -* [base64](base64.md) -* [tee](tee.md) -* [pwd](pwd.md) -* [auth](auth.md) -* [options](options.md) - -### Arthas 基础命令 - -* [help](help.md) -* [cls](cls.md) -* [session](session.md) -* [reset](reset.md) -* [version](version.md) -* [history](history.md) -* [quit](quit.md) -* [stop](stop.md) -* [keymap](keymap.md) \ No newline at end of file diff --git a/site/src/site/sphinx/contact-us.md b/site/src/site/sphinx/contact-us.md deleted file mode 100644 index 57048d0ce..000000000 --- a/site/src/site/sphinx/contact-us.md +++ /dev/null @@ -1,44 +0,0 @@ -联系我们 -=== - - - -## 招聘 - -* [期待你的加入](https://mp.weixin.qq.com/s/XQv8GnqGT3pzceVwzeiy-A) -### Issues - - -使用疑问,意见可以直接在Issues里提出: [https://github.com/alibaba/arthas/issues](https://github.com/alibaba/arthas/issues) - - -### 微信公众号 - -欢迎关注公众号,获取Arthas项目的信息、源码分析、案例实践。 - -![](_static/qrcode_gongzhonghao.jpg) - -### 钉钉群 - -* Arthas开源交流钉钉群: 21965291 ,搜索群号即可加入。 - -![](_static/dingding_qr.jpg) - - -* Arthas开源交流钉钉群2: 30707824 ,搜索群号即可加入。 - -![](_static/dingding2_qr.jpg) - - -### QQ群 - -Arthas开源交流QQ群: 916328269 - -![](_static/qqgroup_qr.jpg) - -Arthas开源交流QQ群2: 854625984 - -![](_static/qqgroup2_qr.jpg) - - - diff --git a/site/src/site/sphinx/docker.md b/site/src/site/sphinx/docker.md deleted file mode 100644 index e70111e40..000000000 --- a/site/src/site/sphinx/docker.md +++ /dev/null @@ -1,119 +0,0 @@ -Docker -=== - -## 在Docker里使用JDK - -很多时候,应用在docker里出现arthas无法工作的问题,是因为应用没有安装 JDK ,而是安装了 JRE 。如果只安装了 JRE,则会缺少很多JAVA的命令行工具和类库,Arthas也没办法正常工作。下面介绍两种常见的在Docker里使用JDK的方式。 - -### 使用公开的JDK镜像 - -* https://hub.docker.com/_/openjdk/ - -比如: - -``` -FROM openjdk:8-jdk -``` - -或者: - -``` -FROM openjdk:8-jdk-alpine -``` - -### 通过包管理软件来安装 - -比如: - -```bash -# Install OpenJDK-8 -RUN apt-get update && \ - apt-get install -y openjdk-8-jdk && \ - apt-get install -y ant && \ - apt-get clean; - -# Fix certificate issues -RUN apt-get update && \ - apt-get install ca-certificates-java && \ - apt-get clean && \ - update-ca-certificates -f; - -# Setup JAVA_HOME -- useful for docker commandline -ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/ -RUN export JAVA_HOME -``` - -或者: - -```bash -RUN yum install -y \ - java-1.8.0-openjdk \ - java-1.8.0-openjdk-devel - -ENV JAVA_HOME /usr/lib/jvm/java-1.8.0-openjdk/ -RUN export JAVA_HOME -``` - -## 通过Docker快速入门 - -1. 删除本地已有的`math-game` docker container(非必要) - - ```sh - $ docker stop math-game || true && docker rm math-game || true - ``` - -1. 启动`math-game` - - ```sh - $ docker run --name math-game -it hengyunabc/arthas:latest /bin/sh -c "java -jar /opt/arthas/math-game.jar" - ``` - -1. 启动`arthas-boot`来进行诊断 - - ```sh - $ docker exec -it math-game /bin/sh -c "java -jar /opt/arthas/arthas-boot.jar" - * [1]: 9 jar - - [INFO] arthas home: /opt/arthas - [INFO] Try to attach process 9 - [INFO] Attach process 9 success. - [INFO] arthas-client connect 127.0.0.1 3658 - ,---. ,------. ,--------.,--. ,--. ,---. ,---. - / O \ | .--. ''--. .--'| '--' | / O \ ' .-' - | .-. || '--'.' | | | .--. || .-. |`. `-. - | | | || |\ \ | | | | | || | | |.-' | - `--' `--'`--' '--' `--' `--' `--'`--' `--'`-----' - - - wiki: https://arthas.aliyun.com/doc - version: 3.0.5 - pid: 9 - time: 2018-12-18 11:30:36 - ``` - -## 诊断Docker里的Java进程 - -```sh -docker exec -it ${containerId} /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar" -``` - -## 诊断k8s里容器里的Java进程 - -```sh -kubectl exec -it ${pod} --container ${containerId} -- /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar" -``` - -## 把Arthas安装到基础镜像里 - -可以很简单把Arthas安装到你的Docker镜像里。 - -``` -FROM openjdk:8-jdk-alpine - -# copy arthas -COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas -``` - -如果想指定版本,可以查看具体的tags: - -[https://hub.docker.com/r/hengyunabc/arthas/tags](https://hub.docker.com/r/hengyunabc/arthas/tags) \ No newline at end of file diff --git a/site/src/site/sphinx/dump.md b/site/src/site/sphinx/dump.md deleted file mode 100644 index ed614d19c..000000000 --- a/site/src/site/sphinx/dump.md +++ /dev/null @@ -1,64 +0,0 @@ -dump -=== - -[`dump`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=command-dump) - -> dump 已加载类的 bytecode 到特定目录 - -### 参数说明 - -|参数名称|参数说明| -|---:|:---| -|*class-pattern*|类名表达式匹配| -|`[c:]`|类所属 ClassLoader 的 hashcode| -|`[classLoaderClass:]`|指定执行表达式的 ClassLoader 的 class name| -|`[d:]`|设置类文件的目标目录| -|[E]|开启正则表达式匹配,默认为通配符匹配| - -### 使用参考 - -```bash -$ dump java.lang.String - HASHCODE CLASSLOADER LOCATION - null /Users/admin/logs/arthas/classdump/java/lang/String.class -Affect(row-cnt:1) cost in 119 ms. -``` - -```bash -$ dump demo.* - HASHCODE CLASSLOADER LOCATION - 3d4eac69 +-sun.misc.Launcher$AppClassLoader@3d4eac69 /Users/admin/logs/arthas/classdump/sun.misc.Launcher$AppClassLoader-3d4eac69/demo/MathGame.class - +-sun.misc.Launcher$ExtClassLoader@66350f69 -Affect(row-cnt:1) cost in 39 ms. -``` - -```bash -$ dump -d /tmp/output java.lang.String - HASHCODE CLASSLOADER LOCATION - null /tmp/output/java/lang/String.class -Affect(row-cnt:1) cost in 138 ms. -``` - -* 指定classLoader - -注意hashcode是变化的,需要先查看当前的ClassLoader信息,提取对应ClassLoader的hashcode。 - -如果你使用`-c`,你需要手动输入hashcode:`-c ` - -```bash -$ dump -c 3d4eac69 demo.* -``` - -对于只有唯一实例的ClassLoader可以通过`--classLoaderClass`指定class name,使用起来更加方便: - -```bash -$ dump --classLoaderClass sun.misc.Launcher$AppClassLoader demo.* - HASHCODE CLASSLOADER LOCATION - 3d4eac69 +-sun.misc.Launcher$AppClassLoader@3d4eac69 /Users/admin/logs/arthas/classdump/sun.misc.Launcher$AppClassLoader-3d4eac69/demo/MathGame.class - +-sun.misc.Launcher$ExtClassLoader@66350f69 -Affect(row-cnt:1) cost in 39 ms. -``` - - * 注: 这里classLoaderClass 在 java 8 是 sun.misc.Launcher$AppClassLoader,而java 11的classloader是jdk.internal.loader.ClassLoaders$AppClassLoader,katacoda目前环境是java8。 - -`--classLoaderClass` 的值是ClassLoader的类名,只有匹配到唯一的ClassLoader实例时才能工作,目的是方便输入通用命令,而`-c `是动态变化的。 diff --git a/site/src/site/sphinx/en/README.md b/site/src/site/sphinx/en/README.md deleted file mode 100644 index de758e833..000000000 --- a/site/src/site/sphinx/en/README.md +++ /dev/null @@ -1 +0,0 @@ -Arthas is an online diagnostic product, via which you can easily grasp the overview of the load, memory, GC, thread profile. With the help of Arthas, you can analyze business issues without even modifying the production code. You can check the arguments, returned value, exceptions of the method, apart from that you can even monitor the time cost by the method as well as classes loaded. With all those assistance, the online troubleshooting can be much easier than ever before. Have a [try](https://arthas.aliyun.com/doc/index.html) now! diff --git a/site/src/site/sphinx/en/advanced-use.md b/site/src/site/sphinx/en/advanced-use.md deleted file mode 100644 index dba45d449..000000000 --- a/site/src/site/sphinx/en/advanced-use.md +++ /dev/null @@ -1,164 +0,0 @@ -Advanced Usage -============== - -## Basic - -* help - display Arthas help -* cls - clear the screen -* [cat](cat.md) - Concatenate and print files -* [echo](echo.md) - write arguments to the standard output -* [grep](grep.md) - Pattern searcher -* [base64](base64.md) - Encode and decode using Base64 representation. -* [tee](tee.md) - Copies standard input to standard output, making a copy in zero or more files. -* [pwd](pwd.md) - Return working directory name -* session - display current session information -* [reset](reset.md) - reset all the enhanced classes. All enhanced classes will also be reset when Arthas server is closed by `stop` -* version - print the version for the Arthas attached to the current Java process -* history - view command history -* quit/exit - exit the current Arthas session, without effecting other sessions -* stop - terminate the Arthas server, all Arthas sessions will be destroyed -* [keymap](keymap.md) - keymap for Arthas keyboard shortcut - -## JVM - -* [dashboard](dashboard.md) - dashboard for the system's real-time data -* [thread](thread.md) - show java thread information -* [jvm](jvm.md) - show JVM information -* [sysprop](sysprop.md) - view/modify system properties -* [sysenv](sysenv.md) — view system environment variables -* [vmoption](vmoption.md) - view/modify the vm diagnostic options. -* [perfcounter](perfcounter.md) - show JVM Perf Counter information -* [logger](logger.md) - print the logger information, update the logger level -* [getstatic](getstatic.md) - examine class's static properties -* [ognl](ognl.md) - execute ognl expression -* [mbean](mbean.md) - show Mbean information -* [heapdump](heapdump.md) - dump java heap in hprof binary format, like `jmap` -* [vmtool](vmtool.md) - jvm tool, getInstances in jvm, forceGc -## class/classloader - -* [sc](sc.md) - check the info for the classes loaded by JVM -* [sm](sm.md) - check methods info for the loaded classes -* [jad](jad.md) - decompile the specified loaded classes -* [mc](mc.md) - Memory compiler, compiles `.java` files into `.class` files in memory -* [retransform](retransform.md) - load external `*.class` files and retransform it into JVM -* [redefine](redefine.md) - load external `*.class` files and re-define it into JVM -* [dump](dump.md) - dump the loaded classes in byte code to the specified location -* [classloader](classloader.md) - check the inheritance structure, urls, class loading info for the specified class; using classloader to get the url of the resource e.g. `java/lang/String.class` - -## monitor/watch/trace - related - -> **Attention**: commands here are taking advantage of byte-code-injection, which means we are injecting some [aspects](https://en.wikipedia.org/wiki/Aspect-oriented_programming) into the current classes for monitoring and statistics purpose. Therefore, when using it for online troubleshooting in your production environment, you'd better **explicitly specify** classes/methods/criteria, and remember to remove the injected code by `stop` or `reset`. - -* [monitor](monitor.md) - monitor method execution statistics -* [watch](watch.md) - display the input/output parameter, return object, and thrown exception of specified method invocation -* [trace](trace.md) - trace the execution time of specified method invocation -* [stack](stack.md) - display the stack trace for the specified class and method -* [tt](tt.md) - time tunnel, record the arguments and returned value for the methods and replay - -## authentication - -* [auth](auth.md) - authentication - -## options - -* [options](options.md) - check/set Arthas global options - - -## profiler/flame graph - -* [profiler](profiler.md) - use [async-profiler](https://github.com/jvm-profiling-tools/async-profiler) to generate flame graph - -## pipe - -Arthas provides `pipe` to process the result returned from commands further, e.g. `sm java.lang.String * | grep 'index'`. Commands supported in `pipe`: - -* grep - filter the result with the given keyword -* plaintext - remove the ANSI color -* wc - count lines - -## async jobs - -[async](async.md) can be handy when a problem is hardly to reproduce in the production environment, e.g. one `watch` condition may happen only once in one single day. - -* job control - use `>` to redirect result into the log file, use `&` to put the job to the background. Job keeps running even if the session is disconnected (the session lifecycle is 1 day by default) -* jobs - list all jobs -* kill - forcibly terminate the job -* fg - bring the suspend job to the foreground -* bg - put the job to run in the background - -## Web Console - -Arthas supports living inside a browser. The communication between arthas and browser is via websocket. - -* [Web Console](web-console.md) - -## Arthas Properties - -* [Arthas Properties](arthas-properties.md) - -## Start as a Java Agent - -* [Start as a Java Agent](agent.md) - - -## as.sh and arthas-boot tips - -* Select the process to be attached via the `select` option. - -Normally, `as.sh`/`arthas-boot.jar` needs to a pid, bacause the pid will change. - -For example, with `math-game.jar` already started, use the `jps` command to see. - -```bash -$ jps -58883 math-game.jar -58884 Jps -``` - -The `select` option allows you to specify a process name, which is very convenient. - -```bash -$ ./as.sh --select math-game -Arthas script version: 3.3.6 -[INFO] JAVA_HOME: /tmp/java/8.0.222-zulu -Arthas home: /Users/admin/.arthas/lib/3.3.6/arthas -Calculating attach execution time... -Attaching to 59161 using version /Users/admin/.arthas/lib/3.3.6/arthas... - -real 0m0.572s -user 0m0.281s -sys 0m0.039s -Attach success. -telnet connecting to arthas server... current timestamp is 1594280799 -Trying 127.0.0.1... -Connected to localhost. -Escape character is '^]'. - ,---. ,------. ,--------.,--. ,--. ,---. ,---. - / O \ | .--. ''--. .--'| '--' | / O \ ' .-' -| .-. || '--'.' | | | .--. || .-. |`. `-. -| | | || |\ \ | | | | | || | | |.-' | -`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----' - - -wiki https://arthas.aliyun.com/doc -tutorials https://arthas.aliyun.com/doc/arthas-tutorials.html -version 3.3.6 -pid 58883 -``` - -## User data report - -After the `3.1.4` version, arthas support user data report. - -At startup, use the `stat-url` option, such as: `./as.sh --stat-url 'http://192.168.10.11:8080/api/stat'` - -There is a sample data report in the tunnel server that users can implement on their own. - -[StatController.java](https://github.com/alibaba/arthas/blob/master/tunnel-server/src/main/java/com/alibaba/arthas/tunnel/server/app/web/StatController.java) - -## Other features - -* [Async support](async.md) -* [log the output](save-log.md) -* [batch](batch-support.md) -* [how to use ognl](https://github.com/alibaba/arthas/issues/11) diff --git a/site/src/site/sphinx/en/advice-class.md b/site/src/site/sphinx/en/advice-class.md deleted file mode 100644 index d04710572..000000000 --- a/site/src/site/sphinx/en/advice-class.md +++ /dev/null @@ -1,44 +0,0 @@ -Fundamental Fields in Expressions -============================== - -There is a very fundamental class `Advice` for the expressions used in filtering, tracing or monitoring and other aspects in commands. - -```java -public class Advice { - - private final ClassLoader loader; - private final Class clazz; - private final ArthasMethod method; - private final Object target; - private final Object[] params; - private final Object returnObj; - private final Throwable throwExp; - private final boolean isBefore; - private final boolean isThrow; - private final boolean isReturn; - - // getter/setter -} -``` - -Description for the variables in the class `Advice`: - -|Name|Specification| -|---:|:---| -|loader|the class loader for the current called class| -|clazz|the reference to the current called class| -|method|the reference to the current called method| -|target|the instance of the current called class| -|params|the parameters for the current call, which is an array (when there's no parameter, it will be an empty array)| -|returnObj|the return value from the current call - only available when the method call returns normally (`isReturn==true`), and `null` is for `void` return value| -|throwExp|the exceptions thrown from the current call - only available when the method call throws exception (`isThrow==true`)| -|isBefore|flag to indicate the method is about to execute. `isBefore==true` but `isThrow==false` and `isReturn==false` since it's no way to know how the method call will end| -|isThrow|flag to indicate the method call ends with exception thrown| -|isReturn|flag to indicate the method call ends normally without exception thrown| - -All variables listed above can be used directly in the [OGNL expression](https://commons.apache.org/proper/commons-ognl/language-guide.html). The command will not execute and exit if there's illegal OGNL grammar or unexpected variable in the expression. -* [typical use cases](https://github.com/alibaba/arthas/issues/71); -* [OGNL language guide](https://commons.apache.org/proper/commons-ognl/language-guide.html). - - - diff --git a/site/src/site/sphinx/en/cls.md b/site/src/site/sphinx/en/cls.md deleted file mode 100644 index 575d0fb12..000000000 --- a/site/src/site/sphinx/en/cls.md +++ /dev/null @@ -1,7 +0,0 @@ -cls -=== - -clear current console. - -> if not in tty mode,it will warn "Command 'cls' is only support tty session.". - diff --git a/site/src/site/sphinx/en/commands.md b/site/src/site/sphinx/en/commands.md deleted file mode 100644 index 8982fdf4d..000000000 --- a/site/src/site/sphinx/en/commands.md +++ /dev/null @@ -1,61 +0,0 @@ -All Commands -============= - -* [dashboard](dashboard.md) -* [thread](thread.md) -* [jvm](jvm.md) -* [memory](memory.md) -* [sysprop](sysprop.md) -* [sysenv](sysenv.md) -* [vmoption](vmoption.md) -* [perfcounter](perfcounter.md) -* [logger](logger.md) -* [mbean](mbean.md) -* [getstatic](getstatic.md) - -* [ognl](ognl.md) - -* [sc](sc.md) -* [sm](sm.md) -* [dump](dump.md) -* [heapdump](heapdump.md) -* [vmtool](vmtool.md) - -* [jad](jad.md) -* [classloader](classloader.md) -* [mc](mc.md) -* [retransform](retransform.md) -* [redefine](redefine.md) - -* [monitor](monitor.md) -* [watch](watch.md) -* [trace](trace.md) -* [stack](stack.md) -* [tt](tt.md) - -* [profiler](profiler.md) - -* [cat](cat.md) -* [echo](echo.md) -* [grep](grep.md) -* [base64](base64.md) -* [tee](tee.md) -* [pwd](pwd.md) -* [auth](auth.md) -* [options](options.md) - - -### Basic Arthas Commands - -* help - examines help information -* cls - clears out the screen -* [session](session.md) - examines the current session -* [reset](reset.md) - resets enhanced classes. All enhanced classes will be reset to their original states. When Arthas server closes, all these enhanced classes will be reset too -* version - prints out Arthas's version -* history - view command history -* quit - exit the current Arthas client without affecting other clients -* stop - terminates the Arthas server, all the Arthas clients connecting to this server will be disconnected -* [keymap](keymap.md) - lists all Arthas keyboard shortcuts and shortcut customizations. - - - diff --git a/site/src/site/sphinx/en/idea-plugin.md b/site/src/site/sphinx/en/idea-plugin.md deleted file mode 100644 index f0019959e..000000000 --- a/site/src/site/sphinx/en/idea-plugin.md +++ /dev/null @@ -1,14 +0,0 @@ -IDEA Plugin -=== - -> Plugin is provided by community developers. - - -* Jetbrains Plugin: [https://plugins.jetbrains.com/plugin/13581-arthas-idea](https://plugins.jetbrains.com/plugin/13581-arthas-idea) -* Plugin Doc:[https://www.yuque.com/arthas-idea-plugin](https://www.yuque.com/arthas-idea-plugin) -* Plugin Github: [https://github.com/WangJi92/arthas-idea-plugin](https://github.com/WangJi92/arthas-idea-plugin) - - - - - diff --git a/site/src/site/sphinx/en/keymap.md b/site/src/site/sphinx/en/keymap.md deleted file mode 100644 index 239be9a1a..000000000 --- a/site/src/site/sphinx/en/keymap.md +++ /dev/null @@ -1,74 +0,0 @@ -Arthas Console Keymap -=== - -[`keymap` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-keymap) - -Use `keymap` command to print the current keymap: - -The default keymap is: - -| Shortcut | Shortcut Description | Command Name | Command Description | -| ------------- | ---------------- | -------------------- | ---------------- | -| `"\C-a"` | ctrl + a | beginning-of-line | go to the beginning of the line | -| ` "\C-e"` | ctrl + e | end-of-line | go to the end of the line| -| `"\C-f"` | ctrl + f | forward-word | forward a word | -| `"\C-b"` | ctrl + b | backward-word | backward a word | -| `"\e[D"` | left arrow | backward-char | backward a character | -| `"\e[C"` | right arrow | forward-char | forward a character | -| `"\e[B"` | down arrow | next-history | show next history command | -| `"\e[A"` | up arrow | previous-history | show previous history command | -| `"\C-h"` | ctrl + h | backward-delete-char | backward delete a character | -| `"\C-?"` | ctrl + shift + / | backward-delete-char | backward delete a character | -| `"\C-u"` | ctrl + u | undo | clear current line | -| `"\C-d"` | ctrl + d | delete-char | delete the character of the current cursor | -| `"\C-k"` | ctrl + k | kill-line | delete all characters from the current cursor to the end of the line | -| `"\C-i"` | ctrl + i | complete | Auto completion, equivalent to `TAB` | -| `"\C-j"` | ctrl + j | accept-line | end the current line, equivalent to `enter` | -| `"\C-m"` | ctrl + m | accept-line | end the current line, equivalent to `enter` | -| `"\C-w"` | | backward-delete-word | | -| `"\C-x\e[3~"` | | backward-kill-line | | -| `"\e\C-?"` | | backward-kill-word | | - -* Press `tab` to enable auto-completion prompt at any time. -* Enter command and `-` or `--`, then press `tab` to display the concrete options for the current command. - -#### Custom shortcuts - -Specify customization in `$USER_HOME/.arthas/conf/inputrc` file in the current user home directory. - -Vim user may want to map `ctrl+h` to moving the cursor forward one character. To achieve this, copy the default configuration first, - -``` -"\C-a": beginning-of-line -"\C-e": end-of-line -"\C-f": forward-word -"\C-b": backward-word -"\e[D": backward-char -"\e[C": forward-char -"\e[B": next-history -"\e[A": previous-history -"\C-h": backward-delete-char -"\C-?": backward-delete-char -"\C-u": undo -"\C-d": delete-char -"\C-k": kill-line -"\C-i": complete -"\C-j": accept-line -"\C-m": accept-line -"\C-w": backward-delete-word -"\C-x\e[3~": backward-kill-line -"\e\C-?": backward-kill-word -``` - -then replace `"\C-h": backward-delete-char` with `"\C-h": backward-char`, then reconnect to Arthas console to take effect. - -#### Shortcuts for jobs - -* `ctrl + c`: Terminates current command -* `ctrl + z`: Suspends the current command, you can restore this command with `bg`/`fg`, or `kill` it. -* `ctrl + a`: Go to the beginning the line -* `ctrl + e`: Go to the end of the line - - - - diff --git a/site/src/site/sphinx/en/manual-install.md b/site/src/site/sphinx/en/manual-install.md deleted file mode 100644 index 46c901dd3..000000000 --- a/site/src/site/sphinx/en/manual-install.md +++ /dev/null @@ -1,114 +0,0 @@ -Manually Install Arthas -=================== - -## Manually Install Arthas - -1. Download the latest version - - **Latest version, Click To Download**: [![](https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square "Arthas")](https://arthas.aliyun.com/download/latest_version) - - -2. Unzip zip file - - ```bash - unzip arthas-packaging-bin.zip - ``` - -3. Install Arthas - - It is recommended to completely remove all old versions of Arthas before installation. - - ```bash - sudo su admin - rm -rf /home/admin/.arthas/lib/* # remove all the leftover of the old outdated Arthas - cd arthas - ./install-local.sh # switch the user based on the owner of the target Java process. - ``` - -4. Start Arthas - - Make sure `stop` the old Arthas server before start. - - ```bash - ./as.sh - ``` - - -## Startup with as.sh/as.bat - -### Linux/Unix/Mac - -You can install Arthas with one single line command on Linux, Unix, and Mac. Pls. copy the following command and paste it into the command line, then press *Enter* to run: - -```bash -curl -L https://arthas.aliyun.com/install.sh | sh -``` - -The command above will download the bootstrap script `as.sh` to the current directory. You can move it the any other place you want, or put its location in `$PATH`. - -You can enter its interactive interface by executing `as.sh`, or execute `as.sh -h` for more help information. - -### Windows - -Latest Version, Click To Download: [![](https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square "Arthas")](https://arthas.aliyun.com/download/latest_version) - -Download and unzip, then find `as.bat` from 'bin' directory. For now this script will only take one argument `pid`, which means you can only diagnose the local Java process. (Welcome any bat script expert to make it better :heart:) - -```bash -as.bat -``` - -If you want to diagnose Java process run as windows service, try these commands: - -```bash -as-service.bat -port -as-service.bat -pid -as-service.bat -pid --interact -``` - -Use this command to remove arthas service: -```bash -as-service.bat -remove -``` - -## Manual command line startup - -If you fail to boot Arthas with the provided batch file, you could try to assemble the bootstrap command in the following way. - - -1. Locate java in the target JVM: - - - Linux/Unix/Mac: `ps aux | grep java` - - Windows: open the Process Monitor to search java - -2. Assemble bootstrap command: - - Let's suppose we are using `/opt/jdk1.8/bin/java`, then the command should be: - - ```bash - /opt/jdk1.8/bin/java -Xbootclasspath/a:/opt/jdk1.8/lib/tools.jar \ - -jar /tmp/arthas-packaging/arthas-core.jar \ - -pid 15146 \ - -target-ip 127.0.0.1 -telnet-port 3658 -http-port 8563 \ - -core /tmp/arthas-packaging/arthas-core.jar \ - -agent /tmp/arthas-packaging/arthas/arthas-agent.jar - ``` - - Note: - - * `-Xbootclasspath` adds tools.jar - * `-jar /tmp/arthas-packaging/arthas-core.jar` specifies main entry - * `-pid 15146` specifies the target java process PID - * `-target-ip 127.0.0.1` specifies the IP - * `-telnet-port 3658 -http-port 8563` specifies telnet and HTTP ports for remote access - * `-core /tmp/arthas-packaging/arthas-core.jar -agent /tmp/arthas-packaging/arthas/arthas-agent.jar` specifies core/agent jar package - - If you are running on JDK 1.9 or above,then it's unnecessary to add `tools.jar` in option `-Xbootclasspath`. - - You can find the logs from `~/logs/arthas/arthas.log`. - -3. Use telnet to connect once attaching to the target JVM (in step 2) succeeds - - ```bash - telnet 127.0.0.1 3658 - ``` diff --git a/site/src/site/sphinx/en/mbean.md b/site/src/site/sphinx/en/mbean.md deleted file mode 100644 index 1c08406f2..000000000 --- a/site/src/site/sphinx/en/mbean.md +++ /dev/null @@ -1,66 +0,0 @@ -mbean -======= - -[`mbean` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-mbean) - -> show Mbean information - -This command can show or monitor Mbean attribute information. - -### Parameters - -|Name|Specification| -|---:|:---| -|*name-pattern*|pattern for the Mbean name| -|*attribute-pattern*|pattern for the attribute name| -|[m]|show meta information| -|[i:]|specify the interval to refresh attribute value (ms)| -|[n:]|execution times| -|[E]|turn on regex matching while the default mode is wildcard matching. Only effect on the attribute name| - -### Usage - -show all Mbean names: - -```bash -mbean -``` - -show meta data of Mbean: - -```bash -mbean -m java.lang:type=Threading -``` - -show attributes of Mbean: - -```bash -mbean java.lang:type=Threading -``` - - -Mbean name support wildcard matcher: - -```bash -mbean java.lang:type=Th* -``` - -> Notes:ObjectName matching rules differ from normal wildcards, Reference resources:[javax.management.ObjectName](https://docs.oracle.com/javase/8/docs/api/javax/management/ObjectName.html?is-external=true) - -Wildcards match specific attributes: - -```bash -mbean java.lang:type=Threading *Count -``` - -Switch to regular matching using the `-E` command: - -```bash -mbean -E java.lang:type=Threading PeakThreadCount|ThreadCount|DaemonThreadCount -``` - -Real-time monitoring using `-i` command: - -```bash -mbean -i 1000 java.lang:type=Threading *Count -``` \ No newline at end of file diff --git a/site/src/site/sphinx/en/quit.md b/site/src/site/sphinx/en/quit.md deleted file mode 100644 index 2deaec083..000000000 --- a/site/src/site/sphinx/en/quit.md +++ /dev/null @@ -1,7 +0,0 @@ -quit -=== - -exit the current Arthas client without affecting other clients. equals **exit**、**logout**、**q** command. - -> just exit Arthas client,it means Arthas server is not closed,so the changes you do will not be reseted. - diff --git a/site/src/site/sphinx/en/redefine.md b/site/src/site/sphinx/en/redefine.md deleted file mode 100644 index 8573a50bf..000000000 --- a/site/src/site/sphinx/en/redefine.md +++ /dev/null @@ -1,110 +0,0 @@ -redefine -======== - -> Recommend to use the [retransform](retransform.md) command. - -[`mc-redefine` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=command-mc-redefine) - -> Load the external `*.class` files to re-define the loaded classes in JVM. - -Reference: [Instrumentation#redefineClasses](https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/Instrumentation.html#redefineClasses-java.lang.instrument.ClassDefinition...-) - -### Frequently asked questions - -> Recommend to use the [retransform](retransform.md) command. - -* The class of `redefine` cannot modify, add or delete the field and method of the class, including method parameters, method names and return values. - -* If `mc` fails, you can compile the class file in the local development environment, upload it to the target system, and use `redefine` to hot load the class. - -* At present, `redefine` conflicts with `watch / trace / jad / tt` commands. Reimplementing `redefine` function in the future will solve this problem. - -> Notes: Re-defined classes cannot be restored. There are chances that redefining may fail due to some reasons, for example: there's new field introduced in the new version of the class, pls. refer to JDK's documentation for the limitations. - -> The `reset` command is not valid for classes that have been processed by `redefine`. If you want to reset, you need `redefine` the original bytecode. - - -> The `redefine` command will conflict with the `jad`/`watch`/`trace`/`monitor`/`tt` commands. After executing `redefine`, if you execute the above mentioned command, the bytecode of the class will be reset. -> The reason is that in the JDK `redefine` and `retransform` are different mechanisms. When two mechanisms are both used to update the bytecode, only the last modified will take effect. - -### Options - -|Name|Specification| -|---:|:---| -|`[c:]`|hashcode of the class loader| -|`[classLoaderClass:]`| The class name of the ClassLoader that executes the expression. | - - -### Usage - -```bash -redefine /tmp/Test.class -redefine -c 327a647b /tmp/Test.class /tmp/Test\$Inner.class -redefine --classLoaderClass sun.misc.Launcher$AppClassLoader /tmp/Test.class /tmp/Test\$Inner.class -``` - -### Use with the jad/mc command - -```bash -jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java - -mc /tmp/UserController.java -d /tmp - -redefine /tmp/com/example/demo/arthas/user/UserController.class -``` - -* Use `jad` command to decompile bytecode, and then you can use other editors, such as vim to modify the source code. -* `mc` command to compile the modified code -* Load new bytecode with `redefine` command - -### Tips for uploading .class files to the server - -The `mc` command may fail. You can modify the code locally, compile it, and upload it to the server. Some servers do not allow direct uploading files, you can use the `base64` command to bypass. - -1. Convert the `.class` file to base64 first, then save it as result.txt - - ```bash - Base64 < Test.class > result.txt - ``` - -2. Login the server, create and edit `result.txt`, copy the local content, paste and save - -3. Restore `result.txt` on the server to `.class` - - ``` - Base64 -d < result.txt > Test.class - ``` - -4. Use the md5 command to verify that the `.class` files are consistent. - - -### Restrictions of the redefine command - -* New field/method is not allowed -* The function that is running, no exit can not take effect, such as the new `System.out.println` added below, only the `run()` function will take effect. - - ```java - public class MathGame { - public static void main(String[] args) throws InterruptedException { - MathGame game = new MathGame(); - while (true) { - game.run(); - TimeUnit.SECONDS.sleep(1); - // This doesn't work because the code keeps running in while - System.out.println("in loop"); - } - } - - public void run() throws InterruptedException { - // This works because the run() function ends completely every time - System.out.println("call run()"); - try { - int number = random.nextInt(); - List primeFactors = primeFactors(number); - print(number, primeFactors); - - } catch (Exception e) { - System.out.println(String.format("illegalArgumentCount:%3d, ", illegalArgumentCount) + e.getMessage()); - } - } -``` \ No newline at end of file diff --git a/site/src/site/sphinx/en/release-notes.md b/site/src/site/sphinx/en/release-notes.md deleted file mode 100644 index 006d6f5d4..000000000 --- a/site/src/site/sphinx/en/release-notes.md +++ /dev/null @@ -1,144 +0,0 @@ -Release Notes -============= - - -v3.1.1 ---- - -* [https://github.com/alibaba/arthas/releases/tag/arthas-all-3.1.1](https://github.com/alibaba/arthas/releases/tag/arthas-all-3.1.1) - -v3.1.0 ---- - -* [https://github.com/alibaba/arthas/releases/tag/3.1.0](https://github.com/alibaba/arthas/releases/tag/3.1.0) - - -v3.0.5 ---- - -* [https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.5](https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.5) - -v3.0.4 ---- - -* [https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.4](https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.4) - - -v2017-11-03 ----- - -* [improvement] add [`getstatic`](getstatic.md) -* [bug] fix Arthas class loader logs loading issues -* [improvement] introduce [OGNL](https://en.wikipedia.org/wiki/OGNL) to customize `classloader` to invoke static methods -* [improvement] optimise `termd` uppercase output performance -* [improvement] `classloader` compile in class loader category by default -* [bug] fix `wc` counting issue -* [improvement] disable certain JDK classes e.g. `Classloader`, `Method`, `Integer` and the lik -* [improvement] quit directly when encountering incorrect [OGNL](https://en.wikipedia.org/wiki/OGNL) expression -* [bug] fix `pipe` issues -* [improvement] optimize command re-direct features using asynchronous log -* [improvement] [`trace`](trace.md) can filter JDK method calls - -v2017-09-22 ----- - -* [improvement] improve the error message when starting agent and server fails -* [bug] fix some asynchronous issues - -v2017-09-11 ----- - -* [improvement] [`async`](async.md) supported -* [improvement] optimize [`jad`](jad.md) support JDK 8 and inner class -* [bug] fix Chinese encoding issues - -v2017-05-11 ----- - -* [improvement] [`tt`](tt.md) investigating/recording level one to avoid too much performance overhead -* [bug] fix Chinese characters can not be presented issue - -v2017-05-12 ----- - -* Arthas 3.0 release :confetti_ball: - -v2016-12-09 ----- - -* [feature] [`as.sh`](https://github.com/alibaba/arthas/blob/master/bin/as.sh) support `-h` to print help info -* [bug] [#121] fix leftover temp files causing Arthas cannot start issue -* [bug] [#123] fix `attach/shutdown` repeatedly causing Arthas classloader leakage issue -* [improvement] make the help info more readable -* [bug] [#126] fix the documents links issues -* [bug] [#122] fix the [`classloader`](classloader.md) filtering out `sun.reflect.DelegatingClassLoader` issue -* [bug] [#129] fix [`classloader`](classloader.md) presenting structure issues -* [improvement] [#125] make the Arthas log output more readable -* [improvement] [#96] [`sc`](sc.md) and more commands are supporting format as `com/taobao/xxx/TestClass` -* [bug] [#124] fix the negative values of [`trace`](trace.md) -* [improvement] [#128] the output of [`tt`](tt.md) will auto-expand now -* [bug] [#130] providing more meaningful error messages when port conflicts -* [bug] [#98] fix Arthas starting issue: when updating/downloading failed, Arthas will fail to start -* [bug] [#139] fix agent attaching fails under some scenarios issues -* [improvement] [#156] delay `jd-core-java` initialization to avoid Arthas starting failure -* [bug] avoid thread names duplicate issue -* [improvement] [#150] filtering by total time cost in [`trace`](trace.md) -* [bug] fix [`sc`](sc.md) `NPE` issue when searching `SystemClassloader` -* [bug] [#180] fix attach fails issues: attaching succeed at the first time, delete the Arthas installer, re-compile and package => attaching fails - - -v2016-06-07 ----- - -* [bug] fix NPE when loading `spy` as resource -* [improvement] locating the blocking thread -* [improvement] print out thread in name order -* [improvement] specify the refreshing interval when checking topN busiest threads - -v2016-04-08 ----- - -* [feature] specify refreshing interval and execution times in [`dashboard`](dashboard.md) -* [feature] log the command execution result -* [feature] speed up the booting and attaching while the first attaching is even quicker by 100% than before -* [feature] batch supported; script supported -* [feature] interactive mode used in Arthas -* [feature] inheritance relation included in class searching; global option `disable-sub-class` can be used to turn it off -* [feature] colorful and plain text modes both supported -* [improvement] merge `exit` and `quit` commands -* [improvement] help info enclosed with wiki links -* [improvement] optimize [`watch`](watch.md) using flow for better UX -* [improvement] add examples to [`thread`](thread.md) -* [improvement] auto-completion ignores character case -* [improvement] make the UI more beautiful/friendly -* [bug] fix [`trace`](trace.md) printing too much encountering loop issues -* [bug] fix [`trace`](trace.md) node twisting issues when method throwing exceptions -* [bug] fix injected/enhanced `BootstrapClassLoader` cannot locate `spy` issues - -v2016-03-07 ----- - -* [feature] checking the topN thread and related stack traces -* [bug] fix Arthas starting failure in OpenJdk issues (requiring to reinstall [as.sh](https://github.com/alibaba/arthas/blob/master/bin/as.sh)) -* [improvement] optimize UX - - -v2016-01-18 ----- - -* [improvement] optimise [`jad`](jad.md); dump memory byte array in real time; using `jd-core-java` to decompile; line number presented; -* [bug] fix checking/re-producing issues when [`tt`](tt.md) is watching thread-context related methods invoking - -v2016-01-08 ----- - -* [bug] jad NPE -* [bug] watch/monitor NPE -* [bug] wrong escaping issues -* [bug] wrong statistics -* [bug] [`sc`](sc.md) checking internal structure issues - -v2015-12-29 ---- - -* Arthas 2.0 Beta :boom:! diff --git a/site/src/site/sphinx/en/sc.md b/site/src/site/sphinx/en/sc.md deleted file mode 100644 index 6de5d9d07..000000000 --- a/site/src/site/sphinx/en/sc.md +++ /dev/null @@ -1,101 +0,0 @@ -sc -== - -[`sc` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=command-sc) - -> Search classes loaded by JVM. - -`sc` stands for search class. This command can search all possible classes loaded by JVM and show their information. The supported options are: `[d]`、`[E]`、`[f]` and `[x:]`. - -### Supported Options - -|Name|Specification| -|---:|:---| -|*class-pattern*|pattern for the class name| -|*method-pattern*|pattern for the method name| -|`[d]`|print the details of the current class, including its code source, class specification, its class loader and so on.
If a class is loaded by more than one class loader, then the class details will be printed several times| -|`[E]`|turn on regex match, the default behavior is wildcards match| -|`[f]`|print the fields info of the current class, MUST be used with `-d` together| -|`[x:]`|specify the depth of recursive traverse the static fields, the default value is '0' - equivalent to use `toString` to output| -|`[c:]`|The hash code of the special class's classLoader| -|`[classLoaderClass:]`| The class name of the ClassLoader that executes the expression. | -|`[n:]`|Maximum number of matching classes with details (100 by default)| - -> *class-patten* supports full qualified class name, e.g. com.taobao.test.AAA and com/taobao/test/AAA. It also supports the format of 'com/taobao/test/AAA', so that it is convenient to directly copy class name from the exception stack trace without replacing '/' to '.'.

-> `sc` turns on matching sub-class match by default, that is, `sc` will also search the sub classes of the target class too. If exact-match is desired, pls. use `options disable-sub-class true`. - -### Usage - -* Wildcards match search - - ```bash - $ sc demo.* - demo.MathGame - Affect(row-cnt:1) cost in 55 ms. - ``` - -* View class details - - ```bash - $ sc -d demo.MathGame - class-info demo.MathGame - code-source /private/tmp/math-game.jar - name demo.MathGame - isInterface false - isAnnotation false - isEnum false - isAnonymousClass false - isArray false - isLocalClass false - isMemberClass false - isPrimitive false - isSynthetic false - simple-name MathGame - modifier public - annotation - interfaces - super-class +-java.lang.Object - class-loader +-sun.misc.Launcher$AppClassLoader@3d4eac69 - +-sun.misc.Launcher$ExtClassLoader@66350f69 - classLoaderHash 3d4eac69 - - Affect(row-cnt:1) cost in 875 ms. - ``` - -* View class fields - - ```bash - $ sc -d -f demo.MathGame - class-info demo.MathGame - code-source /private/tmp/math-game.jar - name demo.MathGame - isInterface false - isAnnotation false - isEnum false - isAnonymousClass false - isArray false - isLocalClass false - isMemberClass false - isPrimitive false - isSynthetic false - simple-name MathGame - modifier public - annotation - interfaces - super-class +-java.lang.Object - class-loader +-sun.misc.Launcher$AppClassLoader@3d4eac69 - +-sun.misc.Launcher$ExtClassLoader@66350f69 - classLoaderHash 3d4eac69 - fields modifierprivate,static - type java.util.Random - name random - value java.util.Random@522b4 - 08a - - modifierprivate - type int - name illegalArgumentCount - - - Affect(row-cnt:1) cost in 19 ms. - ``` diff --git a/site/src/site/sphinx/getstatic.md b/site/src/site/sphinx/getstatic.md deleted file mode 100644 index 3def137c4..000000000 --- a/site/src/site/sphinx/getstatic.md +++ /dev/null @@ -1,74 +0,0 @@ -getstatic -=== - -[`getstatic`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-getstatic) - -* 推荐直接使用[ognl](ognl.md)命令,更加灵活。 - -通过getstatic命令可以方便的查看类的静态属性。使用方法为`getstatic class_name field_name` - - -```bash -$ getstatic demo.MathGame random -field: random -@Random[ - serialVersionUID=@Long[3905348978240129619], - seed=@AtomicLong[120955813885284], - multiplier=@Long[25214903917], - addend=@Long[11], - mask=@Long[281474976710655], - DOUBLE_UNIT=@Double[1.1102230246251565E-16], - BadBound=@String[bound must be positive], - BadRange=@String[bound must be greater than origin], - BadSize=@String[size must be non-negative], - seedUniquifier=@AtomicLong[-3282039941672302964], - nextNextGaussian=@Double[0.0], - haveNextNextGaussian=@Boolean[false], - serialPersistentFields=@ObjectStreamField[][isEmpty=false;size=3], - unsafe=@Unsafe[sun.misc.Unsafe@2eaa1027], - seedOffset=@Long[24], -] -``` - -* 指定classLoader - -注意hashcode是变化的,需要先查看当前的ClassLoader信息,使用`sc -d `提取对应ClassLoader的hashcode。 - -如果你使用`-c`,你需要手动输入hashcode:`-c ` - -```bash -$ getstatic -c 3d4eac69 demo.MathGame random -``` - -对于只有唯一实例的ClassLoader可以通过`--classLoaderClass`指定class name,使用起来更加方便: - -`getstatic --classLoaderClass sun.misc.Launcher$AppClassLoader demo.MathGame random` - - * 注: 这里classLoaderClass 在 java 8 是 sun.misc.Launcher$AppClassLoader,而java 11的classloader是jdk.internal.loader.ClassLoaders$AppClassLoader,katacoda目前环境是java8。 - -`--classLoaderClass` 的值是ClassLoader的类名,只有匹配到唯一的ClassLoader实例时才能工作,目的是方便输入通用命令,而`-c `是动态变化的。 - - -如果该静态属性是一个复杂对象,还可以支持在该属性上通过ognl表示进行遍历,过滤,访问对象的内部属性等操作。 - -* OGNL特殊用法请参考:[https://github.com/alibaba/arthas/issues/71](https://github.com/alibaba/arthas/issues/71) -* OGNL表达式官方指南:[https://commons.apache.org/proper/commons-ognl/language-guide.html](https://commons.apache.org/proper/commons-ognl/language-guide.html) - - -例如,假设n是一个Map,Map的Key是一个Enum,我们想过滤出Map中Key为某个Enum的值,可以写如下命令 - -``` -$ getstatic com.alibaba.arthas.Test n 'entrySet().iterator.{? #this.key.name()=="STOP"}' -field: n -@ArrayList[ - @Node[STOP=bbb], -] -Affect(row-cnt:1) cost in 68 ms. - - -$ getstatic com.alibaba.arthas.Test m 'entrySet().iterator.{? #this.key=="a"}' -field: m -@ArrayList[ - @Node[a=aaa], -] -``` \ No newline at end of file diff --git a/site/src/site/sphinx/history.md b/site/src/site/sphinx/history.md deleted file mode 100644 index b555b4e96..000000000 --- a/site/src/site/sphinx/history.md +++ /dev/null @@ -1,31 +0,0 @@ -history -=== - -打印命令历史。 - -> 历史指令会通过一个名叫history的文件持久化,所以history指令可以查看当前arthas服务器的所有历史命令,而不仅只是当前次会话使用过的命令。 - -### 参数说明 - -| 参数名称 | 参数说明 | -| -------: | :-------------------- | -| [c:] | 清空历史指令 | -| [n:] | 显示最近执行的n条指令 | - -### 使用参考 - -``` -#查看最近执行的3条指令 -$ history 3 - 269 thread - 270 cls - 271 history 3 -``` - -``` - #清空指令 - $ history -c - $ history 3 - 1 history 3 -``` - diff --git a/site/src/site/sphinx/http-api.md b/site/src/site/sphinx/http-api.md deleted file mode 100644 index f092656ee..000000000 --- a/site/src/site/sphinx/http-api.md +++ /dev/null @@ -1,680 +0,0 @@ -Http API -======== - -[`Http API`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=case-http-api) - -### 概览 - -Http API -提供类似RESTful的交互接口,请求和响应均为JSON格式的数据。相对于Telnet/WebConsole的输出非结构化文本数据,Http -API可以提供结构化的数据,支持更复杂的交互功能,比如特定应用场景的一系列诊断操作。 - - -#### 访问地址 - -Http API接口地址为:`http://ip:port/api`,必须使用POST方式提交请求参数。如POST -`http://127.0.0.1:8563/api` 。 - -注意:telnet服务的3658端口与Chrome浏览器有兼容性问题,建议使用http端口8563来访问http接口。 - -#### 请求数据格式 - -```json -{ - "action": "exec", - "requestId": "req112", - "sessionId": "94766d3c-8b39-42d3-8596-98aee3ccbefb", - "consumerId": "955dbd1325334a84972b0f3ac19de4f7_2", - "command": "version", - "execTimeout": "10000" -} -``` -请求数据格式说明: - -* `action` : 请求的动作/行为,可选值请参考"请求Action"小节。 -* `requestId` : 可选请求ID,由客户端生成。 -* `sessionId` : Arthas会话ID,一次性命令不需要设置会话ID。 -* `consumerId` : Arthas消费者ID,用于多人共享会话。 -* `command` : Arthas command line 。 -* `execTimeout` : 命令同步执行的超时时间(ms),默认为30000。 - -注意: 不同的action使用到参数不同,根据具体的action来设置参数。 - -#### 请求Action - -目前支持的请求Action如下: - -* `exec` : 同步执行命令,命令正常结束或者超时后中断命令执行后返回命令的执行结果。 -* `async_exec` : 异步执行命令,立即返回命令的调度结果,命令执行结果通过`pull_results`获取。 -* `interrupt_job` : 中断会话当前的命令,类似Telnet `Ctrl + c`的功能。 -* `pull_results` : 获取异步执行的命令的结果,以http 长轮询(long-polling)方式重复执行 -* `init_session` : 创建会话 -* `join_session` : 加入会话,用于支持多人共享同一个Arthas会话 -* `close_session` : 关闭会话 - -#### 响应状态 - -响应中的state属性表示请求处理状态,取值如下: - -* `SCHEDULED`:异步执行命令时表示已经创建job并已提交到命令执行队列,命令可能还没开始执行或者执行中; -* `SUCCEEDED`:请求处理成功(完成状态); -* `FAILED`:请求处理失败(完成状态),通常附带message说明原因; -* `REFUSED`:请求被拒绝(完成状态),通常附带message说明原因; - -### 一次性命令 - -与执行批处理命令类似,一次性命令以同步方式执行。不需要创建会话,不需要设置`sessionId`选项。 - -```json -{ - "action": "exec", - "command": "" -} -``` - -比如获取Arthas版本号: - -```bash -curl -Ss -XPOST http://localhost:8563/api -d ' -{ - "action":"exec", - "command":"version" -} -' -``` -响应内容如下: - -```json -{ - "state" : "SUCCEEDED", - "sessionId" : "ee3bc004-4586-43de-bac0-b69d6db7a869", - "body" : { - "results" : [ - { - "type" : "version", - "version" : "3.3.7", - "jobId" : 5 - }, - { - "jobId" : 5, - "statusCode" : 0, - "type" : "status" - } - ], - "timeExpired" : false, - "command" : "version", - "jobStatus" : "TERMINATED", - "jobId" : 5 - } -} -``` -响应数据解析: - -* `state`: 请求处理状态,参考“接口响应状态”说明 -* `sessionId `: Arthas会话ID,一次性命令自动创建及销毁临时会话 -* `body.jobId`: 命令的任务ID,同一任务输出的所有Result都是相同的jobId -* `body.jobStatus`: 任务状态,同步执行正常结束为`TERMINATED ` -* `body.timeExpired`: 任务执行是否超时 -* `body/results`: 命令执行的结果列表 - -**命令结果格式说明** - -```json - [{ - "type" : "version", - "version" : "3.3.7", - "jobId" : 5 - }, - { - "jobId" : 5, - "statusCode" : 0, - "type" : "status" - }] -``` - -* `type` : 命令结果类型,除了`status`等特殊的几个外,其它的保持与Arthas命令名称一致。请参考"[特殊命令结果](#special_command_results)"小节。 -* `jobId` : 处理命令的任务ID。 -* 其它字段为每个不同命令的数据。 - -注意:也可以使用一次性命令的方式执行watch/trace等连续输出的命令,但不能中断命令执行,可能出现长时间没有结束的问题。请参考"[watch命令输出map对象](#change_watch_value_to_map)"小节的示例。 - -请尽量按照以下方式处理: - -* 设置合理的`execTimeout`,到达超时时间后强制中断命令执行,避免长时间挂起。 -* 通过`-n`参数指定较少的执行次数。 -* 保证命令匹配的方法可以成功命中和condition-express编写正确,如果watch/trace没有命中就算指定`-n - 1`也会挂起等待到执行超时。 - -### 会话交互 - -由用户创建及管理Arthas会话,适用于复杂的交互过程。访问流程如下: - -* 创建会话 -* 加入会话(可选) -* 拉取命令结果 -* 执行一系列命令 -* 中断命令执行 -* 关闭会话 - -#### 创建会话 - -```bash -curl -Ss -XPOST http://localhost:8563/api -d ' -{ - "action":"init_session" -} -' -``` -响应结果: - -```json -{ - "sessionId" : "b09f1353-202c-407b-af24-701b744f971e", - "consumerId" : "5ae4e5fbab8b4e529ac404f260d4e2d1_1", - "state" : "SUCCEEDED" -} -``` -当前会话ID为: `b09f1353-202c-407b-af24-701b744f971e`, 当前消费者ID为:`5ae4e5fbab8b4e529ac404f260d4e2d1_1 `。 - -#### 加入会话 - -指定要加入的会话ID,服务端将分配一个新的消费者ID。多个消费者可以接收到同一个会话的命令结果。本接口用于支持多人共享同一个会话或刷新页面后重新拉取会话历史记录。 - -```bash -curl -Ss -XPOST http://localhost:8563/api -d ' -{ - "action":"join_session", - "sessionId" : "b09f1353-202c-407b-af24-701b744f971e" -} -' -``` -响应结果: - -```json -{ - "consumerId" : "8f7f6ad7bc2d4cb5aa57a530927a95cc_2", - "sessionId" : "b09f1353-202c-407b-af24-701b744f971e", - "state" : "SUCCEEDED" -} -``` -新的消费者ID为`8f7f6ad7bc2d4cb5aa57a530927a95cc_2 ` 。 - -#### 拉取命令结果 - -拉取命令结果消息的action为`pull_results`。请使用Http long-polling方式,定时循环拉取结果消息。 -消费者的超时时间为5分钟,超时后需要调用`join_session`分配新的消费者。每个消费者单独分配一个缓存队列,按顺序拉取命令结果,不会影响到其它消费者。 - -请求参数需要指定会话ID及消费者ID: - -```bash -curl -Ss -XPOST http://localhost:8563/api -d ' -{ - "action":"pull_results", - "sessionId" : "b09f1353-202c-407b-af24-701b744f971e", - "consumerId" : "8f7f6ad7bc2d4cb5aa57a530927a95cc_2" -} -' -``` - -用Bash脚本定时拉取结果消息: - -```bash -while true; do curl -Ss -XPOST http://localhost:8563/api -d ' -{ - "action":"pull_results", - "sessionId" : "2b085b5d-883b-4914-ab35-b2c5c1d5aa2a", - "consumerId" : "8ecb9cb7c7804d5d92e258b23d5245cc_1" -} -' | json_pp; sleep 2; done -``` -注: `json_pp` 工具将输出内容格式化为pretty json。 - -响应内容如下: - -```json -{ - "body" : { - "results" : [ - { - "inputStatus" : "DISABLED", - "jobId" : 0, - "type" : "input_status" - }, - { - "type" : "message", - "jobId" : 0, - "message" : "Welcome to arthas!" - }, - { - "tutorials" : "https://arthas.aliyun.com/doc/arthas-tutorials.html", - "time" : "2020-08-06 15:56:43", - "type" : "welcome", - "jobId" : 0, - "pid" : "7909", - "wiki" : "https://arthas.aliyun.com/doc", - "version" : "3.3.7" - }, - { - "inputStatus" : "ALLOW_INPUT", - "type" : "input_status", - "jobId" : 0 - } - ] - }, - "sessionId" : "b09f1353-202c-407b-af24-701b744f971e", - "consumerId" : "8f7f6ad7bc2d4cb5aa57a530927a95cc_2", - "state" : "SUCCEEDED" -} - -``` - - -#### 异步执行命令 - -```bash -curl -Ss -XPOST http://localhost:8563/api -d ''' -{ - "action":"async_exec", - "command":"watch demo.MathGame primeFactors \"{params, returnObj, throwExp}\" ", - "sessionId" : "2b085b5d-883b-4914-ab35-b2c5c1d5aa2a" -} -''' -``` - -`async_exec` 的结果: - -```json -{ - "sessionId" : "2b085b5d-883b-4914-ab35-b2c5c1d5aa2a", - "state" : "SCHEDULED", - "body" : { - "jobStatus" : "READY", - "jobId" : 3, - "command" : "watch demo.MathGame primeFactors \"{params, returnObj, throwExp}\" " - } -} -``` - -* `state` : `SCHEDULED` 状态表示已经解析命令生成任务,但未开始执行。 -* `body.jobId` : - 异步执行命令的任务ID,可以根据此任务ID来过滤在`pull_results`输出的命令结果。 -* `body.jobStatus` : 任务状态`READY`表示未开始执行。 - - -查看上面自动拉取结果消息脚本的shell输出: - -```json -{ - "body" : { - "results" : [ - { - "type" : "command", - "jobId" : 3, - "state" : "SCHEDULED", - "command" : "watch demo.MathGame primeFactors \"{params, returnObj, throwExp}\" " - }, - { - "inputStatus" : "ALLOW_INTERRUPT", - "jobId" : 0, - "type" : "input_status" - }, - { - "success" : true, - "jobId" : 3, - "effect" : { - "listenerId" : 3, - "cost" : 24, - "classCount" : 1, - "methodCount" : 1 - }, - "type" : "enhancer" - }, - { - "sizeLimit" : 10485760, - "expand" : 1, - "jobId" : 3, - "type" : "watch", - "cost" : 0.071499, - "ts" : 1596703453237, - "value" : [ - [ - -170365 - ], - null, - { - "stackTrace" : [ - { - "className" : "demo.MathGame", - "classLoaderName" : "app", - "methodName" : "primeFactors", - "nativeMethod" : false, - "lineNumber" : 46, - "fileName" : "MathGame.java" - }, - ... - ], - "localizedMessage" : "number is: -170365, need >= 2", - "@type" : "java.lang.IllegalArgumentException", - "message" : "number is: -170365, need >= 2" - } - ] - }, - { - "type" : "watch", - "cost" : 0.033375, - "jobId" : 3, - "ts" : 1596703454241, - "value" : [ - [ - 1 - ], - [ - 2, - 2, - 2, - 2, - 13, - 491 - ], - null - ], - "sizeLimit" : 10485760, - "expand" : 1 - } - ] - }, - "consumerId" : "8ecb9cb7c7804d5d92e258b23d5245cc_1", - "sessionId" : "2b085b5d-883b-4914-ab35-b2c5c1d5aa2a", - "state" : "SUCCEEDED" -} -``` - -watch命令结果的`value`为watch-experss的值,上面命令中为`{params, returnObj, -throwExp}`,所以watch结果的value为一个长度为3的数组,每个元素分别对应相应顺序的表达式。 -请参考"[watch命令输出map对象](#change_watch_value_to_map)"小节。 - -#### 中断命令执行 - -中断会话正在运行的前台Job(前台任务): - -```bash -curl -Ss -XPOST http://localhost:8563/api -d ''' -{ - "action":"interrupt_job", - "sessionId" : "2b085b5d-883b-4914-ab35-b2c5c1d5aa2a" -} -''' -``` - -``` -{ - "state" : "SUCCEEDED", - "body" : { - "jobStatus" : "TERMINATED", - "jobId" : 3 - } -} -``` - -#### 关闭会话 -指定会话ID,关闭会话。 - -```bash -curl -Ss -XPOST http://localhost:8563/api -d ''' -{ - "action":"close_session", - "sessionId" : "2b085b5d-883b-4914-ab35-b2c5c1d5aa2a" -} -''' -``` - -```json -{ - "state" : "SUCCEEDED" -} -``` - -### 鉴权 - -参考: [auth](auth.md) - -### Web UI - -![](_static/arthas-web-ui.png "arthas web ui") - -一个基于Http API接口实现的Web UI,访问地址为: [http://127.0.0.1:8563/ui](http://127.0.0.1:8563/ui) 。 - -已实现功能: - -* 创建会话 -* 复制并打开url加入会话,多人共享会话 -* 周期性拉取会话命令结果消息 -* 刷新页面或者加入会话拉取会话历史命令消息 -* 输入命令/中断命令状态控制 - -待开发功能: - -* 改进将命令结果消息可读性 -* 命令输入支持自动完成及命令模板 -* 提供命令帮助 -* 支持个人选项设置 - - -### 特殊命令结果 - -#### status - -```json -{ - "jobId" : 5, - "statusCode" : 0, - "type" : "status" -} -``` -`type`为`status`表示命令执行状态: - -每个命令执行结束后都有唯一一个status结果。`statusCode` -为0表示执行成功,`statusCode` 为非0值表示执行失败,类似进程退出码(exit code)。 - -命令执行失败时一般会提供错误消息,如: - -```json -{ - "jobId":3, - "message":"The argument 'class-pattern' is required", - "statusCode":-10, - "type":"status" -} -``` - -#### input_status - -```json - { - "inputStatus" : "ALLOW_INPUT", - "type" : "input_status", - "jobId" : 0 - } -``` - -`type`为`input_status`表示输入状态: - -用于UI交互时控制用户输入,每次执行命令前后会发送改变的消息。 -`inputStatus` 的值说明: - -* `ALLOW_INPUT` : - 允许用户输入命令,表示会话没有在执行的前台命令,可以接受新的命令。 -* `ALLOW_INTERRUPT` : - 允许用户中断命令执行,表示当前正在执行命令,用户可以发送`interrupt_job`中断执行。 -* `DISABLED` : 禁用状态,不能输入命令也不能中断命令。 - - -#### command - -```json - { - "type" : "command", - "jobId" : 3, - "state" : "SCHEDULED", - "command" : "watch demo.MathGame primeFactors \"{params, returnObj, throwExp}\" " - } -``` -`type` 为`command`表示输入的命令数据: - -用于交互UI回显用户输入的命令,拉取的会话命令消息历史会包含`command`类型的消息,按顺序处理即可。 - - -#### enhancer - -```json - { - "success" : true, - "jobId" : 3, - "effect" : { - "listenerId" : 3, - "cost" : 24, - "classCount" : 1, - "methodCount" : 1 - }, - "type" : "enhancer" - } -``` -`type`为`enhancer`表示类增强结果: - -`trace/watch/jad/tt`等命令需要对类进行增强,会接收到这个`enhancer`结果。可能出现`enhancer`结果成功,但没有命中方法的情况,客户端可以根据`enhancer`结果提示用户。 - -### 案例 - -#### 获取Java应用的Classpath - -通过Http api查询Java应用的System properties,提取`java.class.path`的值。 - - -```bash -json_data=$(curl -Ss -XPOST http://localhost:8563/api -d ' -{ - "action":"exec", - "command":"sysprop" -}') -``` - -* 使用`sed`提取值: - -```bash -class_path=$(echo $json_data | tr -d '\n' | sed 's/.*"java.class.path":"\([^"]*\).*/\1/') -echo "classpath: $class_path" -``` - -* 使用`json_pp/awk`提取值 - -```bash -class_path=$(echo $json_data | tr -d '\n' | json_pp | grep java.class.path | awk -F'"' '{ print $4 }') -echo "classpath: $class_path" -``` - -输出内容: - -``` -classpath: demo-arthas-spring-boot.jar -``` - -注意: - -* `echo $json_data | tr -d '\n'` : 删除换行符(`line.separator`的值),避免影响`sed`/`json_pp`命令处理。 -* `awk -F'"' '{ print $4 }'` : 使用双引号作为分隔符号 - - - - -#### watch命令输出map对象 - -watch的结果值由计算`watch-express` ognl表达式产生,可以通过改变ognl表达式来生成想要的值,请参考[OGNL文档](https://commons.apache.org/proper/commons-ognl/language-guide.html)。 - -> Maps can also be created using a special syntax. -> ->#{ "foo" : "foo value", "bar" : "bar value" } -> ->This creates a Map initialized with mappings for "foo" and "bar". - -下面的命令生成map格式的值: - -```bash -watch *MathGame prime* '#{ "params" : params, "returnObj" : returnObj, "throwExp": throwExp}' -x 2 -n 5 -``` - -在Telnet shell/WebConsole 中执行上面的命令,输出的结果: - -```bash -ts=2020-08-06 16:57:20; [cost=0.241735ms] result=@LinkedHashMap[ - @String[params]:@Object[][ - @Integer[1], - ], - @String[returnObj]:@ArrayList[ - @Integer[2], - @Integer[241], - @Integer[379], - ], - @String[throwExp]:null, -] -``` - -用Http api 执行上面的命令,注意对JSON双引号转义: - -```bash -curl -Ss -XPOST http://localhost:8563/api -d @- << EOF -{ - "action":"exec", - "execTimeout": 30000, - "command":"watch *MathGame prime* '#{ \"params\" : params, \"returnObj\" : returnObj, \"throwExp\": throwExp}' -n 3 " -} -EOF -``` - -Http api 执行结果: - -```json -{ - "body": { - ... - "results": [ - ... - { - ... - "type": "watch", - "value": { - "params": [ - 1 - ], - "returnObj": [ - 2, - 5, - 17, - 23, - 23 - ] - } - }, - { - ... - "type": "watch", - "value": { - "params": [ - -98278 - ], - "throwExp": { - "@type": "java.lang.IllegalArgumentException", - "localizedMessage": "number is: -98278, need >= 2", - "message": "number is: -98278, need >= 2", - "stackTrace": [ - ... - ] - } - } - }, - ... -} -``` - -可以看到watch结果的value变成map对象,程序可以通过key读取结果。 - - diff --git a/site/src/site/sphinx/idea-plugin.md b/site/src/site/sphinx/idea-plugin.md deleted file mode 100644 index 2a4fc16ef..000000000 --- a/site/src/site/sphinx/idea-plugin.md +++ /dev/null @@ -1,16 +0,0 @@ -IDEA Plugin -=== -#### Arthas-idea(部分命令可视化) -> 插件由社区开发者提供。 - -* Jetbrains 插件获取地址: [https://plugins.jetbrains.com/plugin/13581-arthas-idea](https://plugins.jetbrains.com/plugin/13581-arthas-idea) -* 使用文档:[https://www.yuque.com/arthas-idea-plugin](https://www.yuque.com/arthas-idea-plugin) -* 源码地址: [https://github.com/WangJi92/arthas-idea-plugin](https://github.com/WangJi92/arthas-idea-plugin) - -#### Alibaba Cloud Toolkit 热部署组件(一键retransform) -> 热部署组件支持一键将编辑器中修改的 Java 源码快速编译,并更新到远端应用服务中,免去手动 dump、mc 的过程。此外,也可以一键还原 retransform 的类文件。 - -![](_static/alibabacloud_hotreload.png) -* Jetbrains 插件获取地址: [https://plugins.jetbrains.com/plugin/11386-alibaba-cloud-toolkit](https://plugins.jetbrains.com/plugin/11386-alibaba-cloud-toolkit) -* 使用文档:[https://help.aliyun.com/document_detail/381077.html](https://help.aliyun.com/document_detail/381077.html) -* 联系我们:请加Alibaba Cloud Toolkit (应用观测器) 钉钉用户交流群(群号:**34965379**) diff --git a/site/src/site/sphinx/index.md b/site/src/site/sphinx/index.md deleted file mode 100644 index 4ca9dcf69..000000000 --- a/site/src/site/sphinx/index.md +++ /dev/null @@ -1,53 +0,0 @@ -Arthas 用户文档 -=== - -**[English Docs](https://arthas.aliyun.com/doc/en/)** - -## Arthas(阿尔萨斯) 能为你做什么? - -![](arthas.png) - -`Arthas` 是Alibaba开源的Java诊断工具,深受开发者喜爱。 - -当你遇到以下类似问题而束手无策时,`Arthas`可以帮助你解决: - -0. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? -0. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? -0. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? -0. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! -0. 是否有一个全局视角来查看系统的运行状况? -0. 有什么办法可以监控到JVM的实时运行状态? -0. 怎么快速定位应用的热点,生成火焰图? -0. 怎样直接从JVM内查找某个类的实例? - -`Arthas`支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 `Tab` 自动补全功能,进一步方便进行问题的定位和诊断。 - - -**如果您在使用Arthas,请让我们知道,您的使用对我们非常重要:[查看](https://github.com/alibaba/arthas/issues/111)** - -Contents --------- - -* [首页](https://arthas.aliyun.com/) -* [English Docs](https://arthas.aliyun.com/doc/en/) -* [在线教程(katacoda)](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn) -* [在线教程(阿里云)](https://start.aliyun.com/handson-lab?category=arthas) -* [安装](install-detail.md) -* [下载](download.md) -* [快速入门](quick-start.md) -* [进阶使用](advanced-use.md) -* [命令列表](commands.md) -* [WebConsole](web-console.md) -* [Arthas Tunnel](tunnel.md) -* [Http API](http-api.md) -* [Docker](docker.md) -* [Arthas Spring Boot Starter](spring-boot-starter.md) -* [IDEA 插件](idea-plugin.md) -* [用户案例](https://github.com/alibaba/arthas/issues?q=label%3Auser-case) -* [FAQ/常见问题](faq.md) -* [Star me at GitHub](https://github.com/alibaba/arthas) -* [编译调试/参与贡献](https://github.com/alibaba/arthas/blob/master/CONTRIBUTING.md#) -* [Release Notes](https://github.com/alibaba/arthas/releases) -* [QQ群/钉钉群](contact-us.md) - - diff --git a/site/src/site/sphinx/manual-install.md b/site/src/site/sphinx/manual-install.md deleted file mode 100644 index c661fb911..000000000 --- a/site/src/site/sphinx/manual-install.md +++ /dev/null @@ -1,112 +0,0 @@ -手动安装Arthas -=== - -## 手动安装Arthas - - -1. 下载最新版本 - - **最新版本,点击下载**:[![](https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square "Arthas")](https://arthas.aliyun.com/download/latest_version?mirror=aliyun) - -2. 解压缩arthas的压缩包 - ``` - unzip arthas-packaging-bin.zip - ``` - -3. 安装Arthas - - 安装之前最好把所有老版本的Arthas全都删掉 - ``` - sudo su admin - rm -rf /home/admin/.arthas/lib/* - cd arthas - ./install-local.sh - ``` - > 注意,这里根据你需要诊断的Java进程的所属用户进行切换 - -4. 启动Arthas - - 启动之前,请确保老版本的Arthas已经`stop`. - - ``` - ./as.sh - ``` - -## 以脚本的方式启动as.sh/as.bat - -### Linux/Unix/Mac - -Arthas 支持在 Linux/Unix/Mac 等平台上一键安装,请复制以下内容,并粘贴到命令行中,敲 `回车` 执行即可: - -```bash -curl -L https://arthas.aliyun.com/install.sh | sh -``` - -上述命令会下载启动脚本文件 `as.sh` 到当前目录,你可以放在任何地方或将其加入到 `$PATH` 中。 - -直接在shell下面执行`./as.sh`,就会进入交互界面。 - -也可以执行`./as.sh -h`来获取更多参数信息。 - - -### Windows - -最新版本,点击下载:[![](https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square "Arthas")](https://arthas.aliyun.com/download/latest_version?mirror=aliyun) - - -下载解压后在bin目录有 `as.bat`。此脚本暂时只接受一个参数 pid,即只能诊断本机上的 Java 进程。(欢迎精通bat脚本的开发者改进) - -``` -as.bat -``` - -使用以下命令诊断windows服务模式运行的Java进程 (--interact 打开服务UI交互模式,方便诊断问题): -``` -as-service.bat -port -as-service.bat -pid -as-service.bat -pid --interact -``` - -清理arthas windows服务执行以下命令: -``` -as-service.bat -remove -``` - - -## 手动拼接命令行启动 - -如果启动遇到问题,可以尝试手动拼接出命令行参数来启动。 - -1. 查找目录jvm的java文件路径。 - - 在linux/mac上执行`ps aux | grep java`,在windows上可以通过进程管理器来查看。假设是`/opt/jdk1.8/bin/java`。 - -2. 拼接出命令行 - - ```bash - /opt/jdk1.8/bin/java -Xbootclasspath/a:/opt/jdk1.8/lib/tools.jar \ - -jar /tmp/arthas-packaging/arthas-core.jar \ - -pid 15146 \ - -target-ip 127.0.0.1 -telnet-port 3658 -http-port 8563 \ - -core /tmp/arthas-packaging/arthas-core.jar \ - -agent /tmp/arthas-packaging/arthas/arthas-agent.jar - ``` - 命令行分几部分组成: - - * `-Xbootclasspath` 增加tools.jar - * `-jar /tmp/arthas-packaging/arthas-core.jar` 指定main函数入口 - * `-pid 15146` 指定目标java进程ID - * `-target-ip 127.0.0.1` 指定IP - * `-telnet-port 3658 -http-port 8563` 指定telnet和http端口 - * `-core /tmp/arthas-packaging/arthas-core.jar -agent /tmp/arthas-packaging/arthas/arthas-agent.jar` 指定core/agent jar包 - - 如果是`jdk > 9`,即9/10/11以上的版本,不需要指定`tools.jar`,直接去掉`-Xbootclasspath` 的配置即可。 - - 启动目志输出在`~/logs/arthas/arthas.log`里。 -3. attach成功之后,使用telnet连接 - - ```bash - telnet 127.0.0.1 3658 - ``` - - diff --git a/site/src/site/sphinx/mbean.md b/site/src/site/sphinx/mbean.md deleted file mode 100644 index a48df0884..000000000 --- a/site/src/site/sphinx/mbean.md +++ /dev/null @@ -1,65 +0,0 @@ -mbean -======= - -[`mbean`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-mbean) - -> 查看 Mbean 的信息 - -这个命令可以便捷的查看或监控 Mbean 的属性信息。 - -### 参数说明 - -|参数名称|参数说明| -|---:|:---| -|*name-pattern*|名称表达式匹配| -|*attribute-pattern*|属性名表达式匹配| -|[m]|查看元信息| -|[i:]|刷新属性值的时间间隔 (ms)| -|[n:]|刷新属性值的次数| -|[E]|开启正则表达式匹配,默认为通配符匹配。仅对属性名有效| - -### 使用参考 - -列出所有 Mbean 的名称: - -```bash -mbean -``` - -查看 Mbean 的元信息: - -```bash -mbean -m java.lang:type=Threading -``` - -查看mbean属性信息: - -```bash -mbean java.lang:type=Threading -``` - -mbean的name支持通配符匹配: - -```bash -mbean java.lang:type=Th* -``` - ->注意:ObjectName 的匹配规则与正常的通配符存在差异,详细参见:[javax.management.ObjectName](https://docs.oracle.com/javase/8/docs/api/javax/management/ObjectName.html?is-external=true) - -通配符匹配特定的属性字段: - -```bash -mbean java.lang:type=Threading *Count -``` - -使用`-E`命令切换为正则匹配: - -```bash -mbean -E java.lang:type=Threading PeakThreadCount|ThreadCount|DaemonThreadCount -``` - -使用`-i`命令实时监控: - -```bash -mbean -i 1000 java.lang:type=Threading *Count -``` \ No newline at end of file diff --git a/site/src/site/sphinx/quit.md b/site/src/site/sphinx/quit.md deleted file mode 100644 index 10b887d91..000000000 --- a/site/src/site/sphinx/quit.md +++ /dev/null @@ -1,7 +0,0 @@ -quit -=== - -退出当前 Arthas 客户端,其他 Arthas 客户端不受影响。等同于**exit**、**logout**、**q**三个指令。 - -> 只是退出当前Arthas客户端,Arthas的服务器端并没有关闭,所做的修改也不会被重置。 - diff --git a/site/src/site/sphinx/redefine.md b/site/src/site/sphinx/redefine.md deleted file mode 100644 index fcfc212d8..000000000 --- a/site/src/site/sphinx/redefine.md +++ /dev/null @@ -1,107 +0,0 @@ -redefine -=== - -> 推荐使用 [retransform](retransform.md) 命令 - -[`mc-redefine`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=command-mc-redefine) - -> 加载外部的`.class`文件,redefine jvm已加载的类。 - -参考:[Instrumentation#redefineClasses](https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/Instrumentation.html#redefineClasses-java.lang.instrument.ClassDefinition...-) - -### 常见问题 - -> 推荐使用 [retransform](retransform.md) 命令 - -* redefine的class不能修改、添加、删除类的field和method,包括方法参数、方法名称及返回值 - -* 如果mc失败,可以在本地开发环境编译好class文件,上传到目标系统,使用redefine热加载class - -* 目前redefine 和watch/trace/jad/tt等命令冲突,以后重新实现redefine功能会解决此问题 - -> 注意, redefine后的原来的类不能恢复,redefine有可能失败(比如增加了新的field),参考jdk本身的文档。 - -> `reset`命令对`redefine`的类无效。如果想重置,需要`redefine`原始的字节码。 - -> `redefine`命令和`jad`/`watch`/`trace`/`monitor`/`tt`等命令会冲突。执行完`redefine`之后,如果再执行上面提到的命令,则会把`redefine`的字节码重置。 -> 原因是jdk本身redefine和Retransform是不同的机制,同时使用两种机制来更新字节码,只有最后修改的会生效。 - -### 参数说明 - -|参数名称|参数说明| -|---:|:---| -|[c:]|ClassLoader的hashcode| -|`[classLoaderClass:]`|指定执行表达式的 ClassLoader 的 class name| - -### 使用参考 - -```bash - redefine /tmp/Test.class - redefine -c 327a647b /tmp/Test.class /tmp/Test\$Inner.class - redefine --classLoaderClass sun.misc.Launcher$AppClassLoader /tmp/Test.class /tmp/Test\$Inner.class -``` - -### 结合 jad/mc 命令使用 - -```bash -jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java - -mc /tmp/UserController.java -d /tmp - -redefine /tmp/com/example/demo/arthas/user/UserController.class -``` - -* jad命令反编译,然后可以用其它编译器,比如vim来修改源码 -* mc命令来内存编译修改过的代码 -* 用redefine命令加载新的字节码 - -### 上传 .class 文件到服务器的技巧 - -使用`mc`命令来编译`jad`的反编译的代码有可能失败。可以在本地修改代码,编译好后再上传到服务器上。有的服务器不允许直接上传文件,可以使用`base64`命令来绕过。 - -1. 在本地先转换`.class`文件为base64,再保存为result.txt - - ```bash - base64 < Test.class > result.txt - ``` - -2. 到服务器上,新建并编辑`result.txt`,复制本地的内容,粘贴再保存 - -3. 把服务器上的 `result.txt`还原为`.class` - - ``` - base64 -d < result.txt > Test.class - ``` - -4. 用md5命令计算哈希值,校验是否一致 - -### redefine的限制 - -* 不允许新增加field/method -* 正在跑的函数,没有退出不能生效,比如下面新增加的`System.out.println`,只有`run()`函数里的会生效 - - ```java - public class MathGame { - public static void main(String[] args) throws InterruptedException { - MathGame game = new MathGame(); - while (true) { - game.run(); - TimeUnit.SECONDS.sleep(1); - // 这个不生效,因为代码一直跑在 while里 - System.out.println("in loop"); - } - } - - public void run() throws InterruptedException { - // 这个生效,因为run()函数每次都可以完整结束 - System.out.println("call run()"); - try { - int number = random.nextInt(); - List primeFactors = primeFactors(number); - print(number, primeFactors); - - } catch (Exception e) { - System.out.println(String.format("illegalArgumentCount:%3d, ", illegalArgumentCount) + e.getMessage()); - } - } -``` \ No newline at end of file diff --git a/site/src/site/sphinx/release-notes.md b/site/src/site/sphinx/release-notes.md deleted file mode 100644 index bc04426fc..000000000 --- a/site/src/site/sphinx/release-notes.md +++ /dev/null @@ -1,152 +0,0 @@ - -Release Notes -=== - - -v3.1.1 ---- - -* [https://github.com/alibaba/arthas/releases/tag/arthas-all-3.1.1](https://github.com/alibaba/arthas/releases/tag/arthas-all-3.1.1) - -v3.1.0 ---- - -* [https://github.com/alibaba/arthas/releases/tag/3.1.0](https://github.com/alibaba/arthas/releases/tag/3.1.0) - - -v3.0.5 ---- - -* [https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.5](https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.5) - -v3.0.4 ---- - -* [https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.4](https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.4) - - -v2017-11-03 ----- - -* 增加getstatic方法获取静态变量 -* 修复arthas classloader加载到应用日志的问题 -* 增加ognl custom classloader便于调用静态方法 -* 优化termd输出大字符串的性能问题 -* classloader命令默认按类加载器类型分类编译 -* 修复wc命令统计错误的问题 -* 禁止增强特定JDK类,如Classloader, Method, Integer等 -* 支持OGNL表达式出错直接退出命令 -* 修复管道类命令单独出错的问题 -* 优化命令重定向功能,使用异步日志输出结果 -* trace命令增加过滤jdk方法调用的功能 - - -v2017-09-22 ----- - -* 优化agent server启动时的异常信息 -* 修复异步命令的一些bug - -v2017-09-11 ----- - -* 支持[异步后后命令](async.md) -* jad命令优化,支持JDK8及内部类 -* 修复中文乱码问题 - -v2017-05-11 ----- - -* tt命令默认只展开1层,防止对象过大造成卡顿 -* 修复中文无法展示的问题 - -v2017-05-12 ----- - -* Arthas 3.0 release - -v2016-12-09 ----- - -* as.sh支持-h输出帮助 -* [#121] 修复残留的临时文件导致arthas启动失败的问题 -* [#123] 修复反复attach/shutdown造成classloader泄露的问题 -* 优化命令中的帮助提示信息 -* [#126] 修复tm命令文档链接错乱的问题 -* [#122] classloader命令中过滤掉`sun.reflect.DelegatingClassLoader` -* [#129] 修复classloader层次展示的问题 -* [#125] arthas输出的log不主动换行,对于日志解析更加友好 -* [#96] sc等命令支持com/taobao/xxx/TestClass这样的格式,以后复制粘贴不需要在把'/'替换成'.'啦 -* [#124] 修复某些情况下trace的时间为负值的问题 -* [#128] tt命令的结果默认自动展开,不需要再增加`-x 2`来看到参数,异常的详细信息了。 -* [#130] 修复当端口冲突时,没有很好地打印错误,而是进入了一个出错的交互界面的问题 -* [#98] 修复Arthas启动时,如果下载更新失败,导致启动失败的问题 -* [#139] 修复某些特殊情况下agent attach失败的问题 -* [#156] jd-core-java延迟初始化,避免arthas启动时出错 -* 修复线程名重复的问题 -* [#150] trace命令支持按运行总耗时过滤 -* 修复sc查找SystemClassloader时可能出现的NPE -* [#180] 修复第一次Attach成功之后,删除之前Arthas的安装包,重新编译打包,再次attach失败的问题 - - -v2016-06-07 ----- - -* 修复以资源方式加载spy类时出现NPE的问题 -* 支持一键找出线程中获得锁并阻塞住其他线程的线程 -* 优化 Thread 输出,按线程名排序 -* 获取topN忙的线程时,支持指定刷新间隔 - -v2016-04-08 ----- - -* New feature: - * dashboard支持指定刷新频率,支持指定执行次数 - * 命令执行结果保存到日志文件,方便后续查看 - * 启动速度优化,第一次attach的速度提升一倍 - * 支持批处理功能,支持执行脚本文件 - * 优化启动逻辑,arthas脚本启动时交互式选择进程 - * 类默认启用继承关系查询,查找类时默认会查找子类,如果需要关闭,则通过全局开关 Options disable-sub-class 关闭 - * 支持在彩色模式和文本模式中切换 - -* UI Improvement: - * 合并exit和quit命令 - * 命令帮助信息增加wiki链接 - * 优化watch的逻辑,更加符合大家的直觉 - * thread命令增加example说明 - * 自动补全的时候,忽略大小写 - -* Bugfix: - * 修复trace命令遇到循环造成输出太长 - * 修复trace命令在方法调用中抛出了异常,会让trace的节点错位 - * 修正增强BootstrapClassLoader加载的类,找不到Spy的问题 - * 修复某些配色方案下,结果显示不友好的问题 - -v2016-03-07 ----- - -* 支持一键查看当前最忙的前N个线程及其堆栈 -* 修复openjdk下启动arthas失败的问题(需要重新安装as.sh) -* 一些体验优化 - - -v2016-01-18 ----- - -* 优化 jad,实时 dump 内存 byte array,并使用 jd-core-java 反编译,支持`行号显示` -* 修复 tt 命令在监控与线程上下文相关的方法调用时,显示/重做等场景下的 bug - -v2016-01-08 ----- - -* 修复一些 bug - * jad NPE - * watch/monitor NPE - * 不需要转义 - * 数据统计问题修复 - * sc 查看静态变量内部层次结构 - -v2015-12-29 ---- - -* Arthas 2.0 测试版本发布! \ No newline at end of file diff --git a/site/src/site/sphinx/sc.md b/site/src/site/sphinx/sc.md deleted file mode 100644 index 50a56f49f..000000000 --- a/site/src/site/sphinx/sc.md +++ /dev/null @@ -1,105 +0,0 @@ -sc -=== - -[`sc`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=command-sc) - -> 查看JVM已加载的类信息 - -“Search-Class” 的简写,这个命令能搜索出所有已经加载到 JVM 中的 Class 信息,这个命令支持的参数有 `[d]`、`[E]`、`[f]` 和 `[x:]`。 - -参数说明 ---- - -### 参数说明 - -|参数名称|参数说明| -|---:|:---| -|*class-pattern*|类名表达式匹配| -|*method-pattern*|方法名表达式匹配| -|[d]|输出当前类的详细信息,包括这个类所加载的原始文件来源、类的声明、加载的ClassLoader等详细信息。
如果一个类被多个ClassLoader所加载,则会出现多次| -|[E]|开启正则表达式匹配,默认为通配符匹配| -|[f]|输出当前类的成员变量信息(需要配合参数-d一起使用)| -|[x:]|指定输出静态变量时属性的遍历深度,默认为 0,即直接使用 `toString` 输出| -|`[c:]`|指定class的 ClassLoader 的 hashcode| -|`[classLoaderClass:]`|指定执行表达式的 ClassLoader 的 class name| -|`[n:]`|具有详细信息的匹配类的最大数量(默认为100)| - -> class-pattern支持全限定名,如com.taobao.test.AAA,也支持com/taobao/test/AAA这样的格式,这样,我们从异常堆栈里面把类名拷贝过来的时候,不需要在手动把`/`替换为`.`啦。 - -> sc 默认开启了子类匹配功能,也就是说所有当前类的子类也会被搜索出来,想要精确的匹配,请打开`options disable-sub-class true`开关 - -### 使用参考 - -* 模糊搜索 - - ```bash - $ sc demo.* - demo.MathGame - Affect(row-cnt:1) cost in 55 ms. - ``` - -* 打印类的详细信息 - - ```bash - $ sc -d demo.MathGame - class-info demo.MathGame - code-source /private/tmp/math-game.jar - name demo.MathGame - isInterface false - isAnnotation false - isEnum false - isAnonymousClass false - isArray false - isLocalClass false - isMemberClass false - isPrimitive false - isSynthetic false - simple-name MathGame - modifier public - annotation - interfaces - super-class +-java.lang.Object - class-loader +-sun.misc.Launcher$AppClassLoader@3d4eac69 - +-sun.misc.Launcher$ExtClassLoader@66350f69 - classLoaderHash 3d4eac69 - - Affect(row-cnt:1) cost in 875 ms. - ``` - -* 打印出类的Field信息 - - ```bash - $ sc -d -f demo.MathGame - class-info demo.MathGame - code-source /private/tmp/math-game.jar - name demo.MathGame - isInterface false - isAnnotation false - isEnum false - isAnonymousClass false - isArray false - isLocalClass false - isMemberClass false - isPrimitive false - isSynthetic false - simple-name MathGame - modifier public - annotation - interfaces - super-class +-java.lang.Object - class-loader +-sun.misc.Launcher$AppClassLoader@3d4eac69 - +-sun.misc.Launcher$ExtClassLoader@66350f69 - classLoaderHash 3d4eac69 - fields modifierprivate,static - type java.util.Random - name random - value java.util.Random@522b4 - 08a - - modifierprivate - type int - name illegalArgumentCount - - - Affect(row-cnt:1) cost in 19 ms. - ``` \ No newline at end of file diff --git a/site/src/site/sphinx/session.md b/site/src/site/sphinx/session.md deleted file mode 100644 index 957faae5c..000000000 --- a/site/src/site/sphinx/session.md +++ /dev/null @@ -1,22 +0,0 @@ -session -=== - -查看当前会话的信息,显示当前绑定的pid以及会话id。 - -> 如果配置了tunnel server,会追加打印 代理id、tunnel服务器的url以及连接状态。 -> -> 如果使用了staturl做统计,会追加显示statUrl地址。 - - - -### 使用参考 - -``` -$ session - Name Value --------------------------------------------------- - JAVA_PID 14584 - SESSION_ID c2073d3b-443a-4a9b-9249-0c5d24a5756c - -``` - diff --git a/site/src/site/sphinx/stop.md b/site/src/site/sphinx/stop.md deleted file mode 100644 index 488d5f34e..000000000 --- a/site/src/site/sphinx/stop.md +++ /dev/null @@ -1,7 +0,0 @@ -Stop -=== - -关闭 Arthas 服务端,所有 Arthas 客户端全部退出。 - -> 关闭Arthas服务器之前,会重置掉所有做过的增强类。但是用redefine重加载的类内容不会被重置。 - diff --git a/site/src/site/sphinx/tunnel.md b/site/src/site/sphinx/tunnel.md deleted file mode 100644 index 929dbe263..000000000 --- a/site/src/site/sphinx/tunnel.md +++ /dev/null @@ -1,162 +0,0 @@ -Arthas Tunnel -=== - -通过Arthas Tunnel Server/Client 来远程管理/连接多个Agent。 - -比如,在流式计算里,Java进程可以是在不同的机器启动的,想要使用Arthas去诊断会比较麻烦,因为用户通常没有机器的权限,即使登陆机器也分不清是哪个Java进程。 - -在这种情况下,可以使用Arthas Tunnel Server/Client。 - -参考: - -* 1: [Web Console](web-console.md) -* 2: [Arthas Spring Boot Starter](spring-boot-starter.md) - -### 下载部署arthas tunnel server - -[https://github.com/alibaba/arthas/releases](https://github.com/alibaba/arthas/releases) - -* 从Maven仓库下载:[![](https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square "Arthas")](https://arthas.aliyun.com/download/arthas-tunnel-server/latest_version?mirror=aliyun) - -* 从Github Releases页下载: [https://github.com/alibaba/arthas/releases](https://github.com/alibaba/arthas/releases) - - -Arthas tunnel server是一个spring boot fat jar应用,直接`java -jar`启动: - -```bash -java -jar arthas-tunnel-server.jar -``` - -默认情况下,arthas tunnel server的web端口是`8080`,arthas agent连接的端口是`7777`。 - -启动之后,可以访问 [http://127.0.0.1:8080/](http://127.0.0.1:8080/) ,再通过`agentId`连接到已注册的arthas agent上。 - -通过Spring Boot的Endpoint,可以查看到具体的连接信息: [http://127.0.0.1:8080/actuator/arthas](http://127.0.0.1:8080/actuator/arthas) ,登陆用户名是`arthas`,密码在arthas tunnel server的日志里可以找到,比如: - -``` -32851 [main] INFO o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - -Using generated security password: f1dca050-3777-48f4-a577-6367e55a78a2 -``` - -### 启动arthas时连接到tunnel server - -在启动arthas,可以传递`--tunnel-server`参数,比如: - -```bash -as.sh --tunnel-server 'ws://127.0.0.1:7777/ws' -``` - -也可以使用下面的测试地址(不保证一直可用): - -```bash -as.sh --tunnel-server 'ws://47.75.156.201:80/ws' -``` - -* 如果有特殊需求,可以通过`--agent-id`参数里指定agentId。默认情况下,会生成随机ID。 - - -attach成功之后,会打印出agentId,比如: - -```bash - ,---. ,------. ,--------.,--. ,--. ,---. ,---. - / O \ | .--. ''--. .--'| '--' | / O \ ' .-' -| .-. || '--'.' | | | .--. || .-. |`. `-. -| | | || |\ \ | | | | | || | | |.-' | -`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----' - - -wiki https://arthas.aliyun.com/doc -tutorials https://arthas.aliyun.com/doc/arthas-tutorials.html -version 3.1.2 -pid 86183 -time 2019-08-30 15:40:53 -id URJZ5L48RPBR2ALI5K4V -``` - -如果是启动时没有连接到 tunnel server,也可以在后续自动重连成功之后,通过 session命令来获取 agentId: - -```bash -[arthas@86183]$ session - Name Value ------------------------------------------------------ - JAVA_PID 86183 - SESSION_ID f7273eb5-e7b0-4a00-bc5b-3fe55d741882 - AGENT_ID URJZ5L48RPBR2ALI5K4V - TUNNEL_SERVER ws://47.75.156.201:80/ws -``` - - -以上面的为例,在浏览器里访问 [http://47.75.156.201/arthas/?port=80](http://47.75.156.201/arthas/?port=80) ,输入 `agentId`,就可以连接到本机上的arthas了。 - - -![](_static/arthas-tunnel-server.png) - - -### 最佳实践 - -> 注意,agentId要保持唯一,否则会在tunnel server上冲突,不能正常工作。 - -如果 arthas agent配置了 `appName`,则生成的agentId会带上`appName`的前缀。 - -比如在加上启动参数:`as.sh --tunnel-server 'ws://127.0.0.1:7777/ws' --app-name demoapp` ,则生成的agentId可能是`demoapp_URJZ5L48RPBR2ALI5K4V`。 - -Tunnel server会以`_`做分隔符,提取出`appName`,方便按应用进行管理。 - -> 另外,也可以在解压的arthas目录下的 `arthas.properties`,或者在spring boot应用的`application.properties`里配置`appName`。 - -### Tunnel Server的管理页面 - -在本地启动tunnel-server,然后使用`as.sh` attach,并且指定应用名`--app-name test`: - -``` -$ as.sh --tunnel-server 'ws://127.0.0.1:7777/ws' --app-name test -telnet connecting to arthas server... current timestamp is 1627539688 -Trying 127.0.0.1... -Connected to 127.0.0.1. -Escape character is '^]'. - ,---. ,------. ,--------.,--. ,--. ,---. ,---. - / O \ | .--. ''--. .--'| '--' | / O \ ' .-' -| .-. || '--'.' | | | .--. || .-. |`. `-. -| | | || |\ \ | | | | | || | | |.-' | -`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----' - - -wiki https://arthas.aliyun.com/doc -tutorials https://arthas.aliyun.com/doc/arthas-tutorials.html -version 3.5.3 -main_class demo.MathGame -pid 65825 -time 2021-07-29 14:21:29 -id test_PE3LZO9NA9ENJYTPGL9L -``` - -然后访问 tunnel-server,可以看到所有连接的应用列表: - -[http://localhost:8080/apps.html](http://localhost:8080/apps.html) - -![](_static/tunnel-server-apps.png) - -再打开详情,则可以看到连接的所有agent列表: - -[http://localhost:8080/agents.html?app=test](http://localhost:8080/agents.html?app=test) - -![](_static/tunnel-server-agents.png) - - -### 权限管理 - -目前tunnel server没有专门的权限管理,用户需要自行开发,对app name鉴权。 -### 集群方式管理 - -如果希望部署多台 tunnel server,可以通过nginx做转发,redis来保存agent信息。 - -* nginx需要配置sticky session,保证用户web socket连接到同一个后端tunnel server上。简单的配置方式是用`ip_hash`。 - -### Arthas tunnel server的工作原理 - -``` -browser <-> arthas tunnel server <-> arthas tunnel client <-> arthas agent -``` - -[tunnel-server/README.md](https://github.com/alibaba/arthas/blob/master/tunnel-server/README.md#) diff --git a/site/src/site/sphinx/web-console.md b/site/src/site/sphinx/web-console.md deleted file mode 100644 index 51cec605e..000000000 --- a/site/src/site/sphinx/web-console.md +++ /dev/null @@ -1,32 +0,0 @@ -Web Console -=== - -[`Web Console`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=case-web-console) - -### 通过浏览器连接arthas - - -Arthas目前支持Web Console,用户在attach成功之后,可以直接访问:[http://127.0.0.1:8563/](http://127.0.0.1:8563/)。 - -可以填入IP,远程连接其它机器上的arthas。 - -![](_static/web-console-local.png) - - -> 默认情况下,arthas只listen 127.0.0.1,所以如果想从远程连接,则可以使用 `--target-ip`参数指定listen的IP,更多参考`-h`的帮助说明。 -> 注意会有安全风险,考虑下面的tunnel server的方案。 - -* 在Web Console复制粘贴快捷键参考: [https://github.com/alibaba/arthas/issues/1056](https://github.com/alibaba/arthas/issues/1056) - -> 3.5.4 版本后,在Web Console可以鼠标右键复制粘贴。 - -### scrollback URL参数 - -> 3.5.5 版本后支持 - -默认Web Console支持向上回滚的行数是1000。可以在URL里用`scrollback`指定。比如 - -[http://127.0.0.1:8563/?scrollback=3000](http://127.0.0.1:8563/?scrollback=3000) -### 使用arthas tunnel server连接远程arthas - -参考:[Arthas Tunnel](tunnel.md) \ No newline at end of file

!fX7_DvQPlXoAs# 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 Z(XS?IwcMgGmwz8uQ&H4ZsFkyh{4ZGmb_4(b literal 0 HcmV?d00001 diff --git a/site-vuepress/docs/.vuepress/public/images/users/users_telecom.png b/site-vuepress/docs/.vuepress/public/images/users/users_telecom.png new file mode 100644 index 0000000000000000000000000000000000000000..7406587b22cfc84e280599db6405c245e81f65f5 GIT binary patch literal 18758 zcmd42WprFUvNqagb__8l#>95a%*+%sGc&Z^W`>xVnc|q4nVFfH9W!*y^!a^f&di*9 z&Uf$M+iP{Nt^HJ$s-BXxwIy|^ysS71B0eGj06>wH5K#mGAaLKWBj91*e+y9?Yybf0 zS_@@$M|GL+Tt+|}Is;>%p$VOWt zT3|?JdPYu8PI?9=dL|~?cL`btH(N&oS6W+#FMpZ%hYb-E2P2S$oudWNmiRB5 z28KWwfOjuxi>7xBN4{~>N?4s--M zm;>$p6~KS1;$QIpP<*HFe^+reu>0SHWn})}#cgc;yYWxSv$nqbk zFwhzZQhIMzCcLDKe=GgP9hanyftiV#g|Vagzpecn_-G}259{59`oM@{|!kB3(JFmrWV%kn1iCY z5V54FFdHK$8yhVX-9Ku0PaM~~u7#LcBJbw%PM=yQX`^UZa-v2&~(En>3 zc`y8HBr>smAAUgZ<4lFb@1pnd%+KOIEB_-K0Km6cr`Snq5rvO~{LJRY3}JzR{Zmy! z-U&bz(omSSQviiby5Zkh6WCbOX;x9IQ?7 zW*-wY0J8K$-RYV2$l2EM-5};CV{86u` z%6?j03(c$W{iW)vtiUSlD#TG|S%eKlYW$X}E_AQlq!o{ZxT)#Bc7PK;%jTm|Ci(@! zjt#+Mwv*#EJTW2(Gbwp@)I=>I`$?U?Snj~AfXq3h@h2up2oZgJ1g3t7x0o?uZZL$q ziD=++hvMtU(YVr~GDQKSP!>Go7EztpW64m;>3F7^k7ciKXQf&ApQ}n2pMD+;vutv8 z*TeM7%s%t5jPIZ;^Y(~#WORB0dM|Q;NvxZEt_$0zHD&!STb@vwL~|+F)RHPY6UvCX zaybU5X_Y^1yU&*=`3CRMbmA*p{MUJZ$APo@flT{m6ZLQ>`0o!41Um^02LJ#G^RF)i zAT8tlX+sQ<6cJQ*%{a?+N%`2n5bUF}9?xdRgh6H`;ExddjhI*iJ@%`FVx{42NeUx% z?p_4+u*3x3FsGTizC+gBx>E3{l<4SWbYgz>71HoaG$X}kVk65`35SC*xmD`7I&&_rH`Uk8Z@9(#dBdK<*z5`kW?74i2h>u7HEzz$V6>iykz!6?s9kvMt~gT!{Kqc4`YfS=Q3UyNouy|}FAs4LrqMEB<}z=_r? zK}%2!*H1djO|tp`i7#l|3DBQe&yiF3tTmqgEv>+Z1^#_r4l6!8$p(2veo-82?X0~H`rV@Yqc zniJTeeVCa$I+VYTLnNCr`8A1_!bq!s#CsgKmAlmuFl9C84nCJ2j@E8TnjR$mX(-@( z<+t};JVl>VWllJJre`_uah_E3^z|WC`ptLf4WH1%%WXFvNAZASIUx)gP%IauikRmI~iaRa5D$$is8_rWop#bNTnQbV>pHaBEq>-Tq_r||AB0I9$p z3khD$TP$GUn(s~`+`zJDhwtSr)asrcZO+#6*Z1I-OuVMYU0#Cz_5Y*W;b%z8b2)lO5ii+^3j;?am zAUo+^6doF#pOfv0HuH;TI4G7L7t}&%BIqV)0Nnepbty~J$yS}10kElOZkpN|+lqz@ zpDxDvRWFDzse(s%&A{$ZZ$<3htEtkIs5c2C3{YYlco}{OGdZ!ATh?b*nI}$ZVCPxH zQa&JI(^Dx#5YgN0*CI#PF8I4PXy32tGjiVFz!Toz(&bF|TPK>RH?Z_9)C=c^uV_OfgHtbhZ@bgi zXA74SE}FDP$$ZKUb*&GdnToz29`Uv%f*aL{($%TDnqslkV2$)Kp2}zGJ;;FI4$Psr zVCsXhoTa`v5`LTLXE>3b6n<1ODh@Xt!MrC5^;RSYMvP&1iqy0K5FG- z6Z$XP0?s>r23Ns&ZjFgd;xFU3+40HotKz9BKSI7?4ru`^Ip!>w8+4kD5Fd$-NO>7S z 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 literal 0 HcmV?d00001 diff --git a/site-vuepress/docs/.vuepress/public/images/users/users_weidian.png b/site-vuepress/docs/.vuepress/public/images/users/users_weidian.png new file mode 100644 index 0000000000000000000000000000000000000000..a166da39b7deba04b978a54558c682aa9a943329 GIT binary patch literal 7389 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 literal 0 HcmV?d00001 diff --git a/site-vuepress/docs/.vuepress/public/images/users/users_yinlian.png b/site-vuepress/docs/.vuepress/public/images/users/users_yinlian.png new file mode 100644 index 0000000000000000000000000000000000000000..d13e93416e77a3ab132b6bdf0cb137bffe5f22a6 GIT binary patch literal 13213 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 Xl-Un(#(RrD|Ef`ve*rC(H46M+)9roM literal 0 HcmV?d00001 diff --git a/site-vuepress/docs/.vuepress/public/images/web-console-local.png b/site-vuepress/docs/.vuepress/public/images/web-console-local.png new file mode 100644 index 0000000000000000000000000000000000000000..56f44e4f2d697cff034b70c940fdf5324ad88fda GIT binary patch literal 50070 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 CP_MNB literal 0 HcmV?d00001 diff --git a/site-vuepress/docs/.vuepress/styles/index.scss b/site-vuepress/docs/.vuepress/styles/index.scss new file mode 100644 index 000000000..512a9be62 --- /dev/null +++ b/site-vuepress/docs/.vuepress/styles/index.scss @@ -0,0 +1,3 @@ +.site-name.can-hide { + display: none; +} diff --git a/site-vuepress/docs/.vuepress/theme/components/AutoLink.vue b/site-vuepress/docs/.vuepress/theme/components/AutoLink.vue new file mode 100644 index 000000000..cbf4d6d44 --- /dev/null +++ b/site-vuepress/docs/.vuepress/theme/components/AutoLink.vue @@ -0,0 +1,115 @@ + + + + + diff --git a/site-vuepress/docs/.vuepress/theme/components/Badge.vue b/site-vuepress/docs/.vuepress/theme/components/Badge.vue new file mode 100644 index 000000000..b5b261170 --- /dev/null +++ b/site-vuepress/docs/.vuepress/theme/components/Badge.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/site-vuepress/docs/.vuepress/theme/components/Home.vue b/site-vuepress/docs/.vuepress/theme/components/Home.vue new file mode 100644 index 000000000..d7f0b6a0b --- /dev/null +++ b/site-vuepress/docs/.vuepress/theme/components/Home.vue @@ -0,0 +1,18 @@ + + + diff --git a/site-vuepress/docs/.vuepress/theme/components/HomeBadges.vue b/site-vuepress/docs/.vuepress/theme/components/HomeBadges.vue new file mode 100644 index 000000000..c1792f423 --- /dev/null +++ b/site-vuepress/docs/.vuepress/theme/components/HomeBadges.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/site-vuepress/docs/.vuepress/theme/components/HomeFeatures.vue b/site-vuepress/docs/.vuepress/theme/components/HomeFeatures.vue new file mode 100644 index 000000000..01d623ea6 --- /dev/null +++ b/site-vuepress/docs/.vuepress/theme/components/HomeFeatures.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/site-vuepress/docs/.vuepress/theme/components/HomeHero.vue b/site-vuepress/docs/.vuepress/theme/components/HomeHero.vue new file mode 100644 index 000000000..fb5615f33 --- /dev/null +++ b/site-vuepress/docs/.vuepress/theme/components/HomeHero.vue @@ -0,0 +1,102 @@ + + + diff --git a/site-vuepress/docs/.vuepress/theme/components/HomeUserBoards.vue b/site-vuepress/docs/.vuepress/theme/components/HomeUserBoards.vue new file mode 100644 index 000000000..43cceba30 --- /dev/null +++ b/site-vuepress/docs/.vuepress/theme/components/HomeUserBoards.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/site-vuepress/docs/.vuepress/theme/components/NavbarDropdown.vue b/site-vuepress/docs/.vuepress/theme/components/NavbarDropdown.vue new file mode 100644 index 000000000..d13ff30e2 --- /dev/null +++ b/site-vuepress/docs/.vuepress/theme/components/NavbarDropdown.vue @@ -0,0 +1,127 @@ + + + diff --git a/site-vuepress/docs/.vuepress/theme/components/UserBoard.vue b/site-vuepress/docs/.vuepress/theme/components/UserBoard.vue new file mode 100644 index 000000000..8fc42574f --- /dev/null +++ b/site-vuepress/docs/.vuepress/theme/components/UserBoard.vue @@ -0,0 +1,21 @@ + + + + + diff --git a/site-vuepress/docs/.vuepress/theme/components/icons/Fork.vue b/site-vuepress/docs/.vuepress/theme/components/icons/Fork.vue new file mode 100644 index 000000000..a27db01ce --- /dev/null +++ b/site-vuepress/docs/.vuepress/theme/components/icons/Fork.vue @@ -0,0 +1,42 @@ + + + diff --git a/site-vuepress/docs/.vuepress/theme/components/icons/GitHub.vue b/site-vuepress/docs/.vuepress/theme/components/icons/GitHub.vue new file mode 100644 index 000000000..24ae4d975 --- /dev/null +++ b/site-vuepress/docs/.vuepress/theme/components/icons/GitHub.vue @@ -0,0 +1,19 @@ + + + diff --git a/site-vuepress/docs/.vuepress/theme/components/icons/Star.vue b/site-vuepress/docs/.vuepress/theme/components/icons/Star.vue new file mode 100644 index 000000000..c3e59ff79 --- /dev/null +++ b/site-vuepress/docs/.vuepress/theme/components/icons/Star.vue @@ -0,0 +1,32 @@ + + + diff --git a/site-vuepress/docs/.vuepress/theme/components/icons/Translate.vue b/site-vuepress/docs/.vuepress/theme/components/icons/Translate.vue new file mode 100644 index 000000000..f5f775a96 --- /dev/null +++ b/site-vuepress/docs/.vuepress/theme/components/icons/Translate.vue @@ -0,0 +1,15 @@ + diff --git a/site-vuepress/docs/.vuepress/theme/index.js b/site-vuepress/docs/.vuepress/theme/index.js new file mode 100644 index 000000000..e8891d327 --- /dev/null +++ b/site-vuepress/docs/.vuepress/theme/index.js @@ -0,0 +1,18 @@ +const { defaultTheme } = require("@vuepress/theme-default"); +const { path } = require("@vuepress/utils"); + +exports.localTheme = (options) => { + return { + name: "vuepress-theme-arthas", + extends: defaultTheme(options), + + alias: { + "@theme/Home.vue": path.resolve(__dirname, "components/Home.vue"), + "@theme/NavbarDropdown.vue": path.resolve( + __dirname, + "components/NavbarDropdown.vue" + ), + "@theme/AutoLink.vue": path.resolve(__dirname, "components/AutoLink.vue"), + }, + }; +}; diff --git a/site-vuepress/docs/README.md b/site-vuepress/docs/README.md new file mode 100644 index 000000000..7f8d117bf --- /dev/null +++ b/site-vuepress/docs/README.md @@ -0,0 +1,53 @@ +--- +home: true +heroImage: /images/arthas_light.png +heroImageDark: /images/arthas_dark.png +heroText: null +tagline: "Java 应用诊断利器" +actions: + - text: 快速入门 + link: /doc/quick-start.html + type: primary + - text: 查看github + link: https://github.com/alibaba/arthas + type: secondary +features: + - icon: 🖥 + title: Dashboard + details: 实时查看系统的运行状况。 + - icon: 🔬 + title: 查看入参/返回值/异常 + details: 查看函数调用的参数,返回值和异常。 + - icon: 🔩 + title: 在线热更新 + details: jad/sc/redefine 一条龙热更新代码。 + - icon: 🩺 + title: 类冲突 + details: 秒解类冲突问题,定位类加载路径。 + - icon: ⚡️ + title: 性能热点 + details: 快速定位应用的热点,生成火焰图。 + - icon: 📡 + title: WebConsole + details: 在线诊断,点开网页诊断线上应用。 +users_title: "用户" +users_details: "请在 Wanted: who's using arthas 上提供信息来帮助Arthas做的更好。" +users: + - name: Alibaba Group + logo: /images/users/users_alibaba.png + - name: Didiglobal + logo: /images/users/users_didi.png + - name: Kaola + logo: /images/users/users_kaola.png + - name: Qunar + logo: /images/users/users_qunar.png + - name: Telecom + logo: /images/users/users_telecom.png + - name: Weidian + logo: /images/users/users_weidian.png + - name: ICBC + logo: /images/users/users_icbc.png + - name: Chinaums + logo: /images/users/users_yinlian.png +footer: Apache-2.0 license | Copyright 2018-present, Alibaba Middleware Group, and contributors +--- diff --git a/site-vuepress/docs/doc/README.md b/site-vuepress/docs/doc/README.md new file mode 100644 index 000000000..373060be5 --- /dev/null +++ b/site-vuepress/docs/doc/README.md @@ -0,0 +1,24 @@ +# 简介 + +Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。 + +## Arthas(阿尔萨斯)能为你做什么? + +![](/images/arthas.png) + +`Arthas` 是 Alibaba 开源的 Java 诊断工具,深受开发者喜爱。 + +当你遇到以下类似问题而束手无策时,`Arthas`可以帮助你解决: + +0. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? +1. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? +2. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? +3. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! +4. 是否有一个全局视角来查看系统的运行状况? +5. 有什么办法可以监控到 JVM 的实时运行状态? +6. 怎么快速定位应用的热点,生成火焰图? +7. 怎样直接从 JVM 内查找某个类的实例? + +`Arthas` 支持 JDK 6+,支持 Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 `Tab` 自动补全功能,进一步方便进行问题的定位和诊断。 + +**如果您在使用 Arthas,请让我们知道,您的使用对我们非常重要:[查看](https://github.com/alibaba/arthas/issues/111)** diff --git a/site-vuepress/docs/doc/advanced-use.md b/site-vuepress/docs/doc/advanced-use.md new file mode 100644 index 000000000..52a64d92e --- /dev/null +++ b/site-vuepress/docs/doc/advanced-use.md @@ -0,0 +1,157 @@ +# 进阶使用 + +## 基础命令 + +- [help](help.md)——查看命令帮助信息 +- [cat](cat.md)——打印文件内容,和 linux 里的 cat 命令类似 +- [echo](echo.md)——打印参数,和 linux 里的 echo 命令类似 +- [grep](grep.md)——匹配查找,和 linux 里的 grep 命令类似 +- [base64](base64.md)——base64 编码转换,和 linux 里的 base64 命令类似 +- [tee](tee.md)——复制标准输入到标准输出和指定的文件,和 linux 里的 tee 命令类似 +- [pwd](pwd.md)——返回当前的工作目录,和 linux 命令类似 +- [cls](cls.md)——清空当前屏幕区域 +- [session](session.md)——查看当前会话的信息 +- [reset](reset.md)——重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类 +- [version](version.md)——输出当前目标 Java 进程所加载的 Arthas 版本号 +- [history](history.md)——打印命令历史 +- [quit](quit.md)——退出当前 Arthas 客户端,其他 Arthas 客户端不受影响 +- [stop](stop.md)——关闭 Arthas 服务端,所有 Arthas 客户端全部退出 +- [keymap](keymap.md)——Arthas 快捷键列表及自定义快捷键 + +## jvm 相关 + +- [dashboard](dashboard.md)——当前系统的实时数据面板 +- [thread](thread.md)——查看当前 JVM 的线程堆栈信息 +- [jvm](jvm.md)——查看当前 JVM 的信息 +- [sysprop](sysprop.md)——查看和修改 JVM 的系统属性 +- [sysenv](sysenv.md)——查看 JVM 的环境变量 +- [vmoption](vmoption.md)——查看和修改 JVM 里诊断相关的 option +- [perfcounter](perfcounter.md)——查看当前 JVM 的 Perf Counter 信息 +- [logger](logger.md)——查看和修改 logger +- [getstatic](getstatic.md)——查看类的静态属性 +- [ognl](ognl.md)——执行 ognl 表达式 +- [mbean](mbean.md)——查看 Mbean 的信息 +- [heapdump](heapdump.md)——dump java heap, 类似 jmap 命令的 heap dump 功能 +- [vmtool](vmtool.md)——从 jvm 里查询对象,执行 forceGc + +## class/classloader 相关 + +- [sc](sc.md)——查看 JVM 已加载的类信息 +- [sm](sm.md)——查看已加载类的方法信息 +- [jad](jad.md)——反编译指定已加载类的源码 +- [mc](mc.md)——内存编译器,内存编译`.java`文件为`.class`文件 +- [retransform](retransform.md)——加载外部的`.class`文件,retransform 到 JVM 里 +- [redefine](redefine.md)——加载外部的`.class`文件,redefine 到 JVM 里 +- [dump](dump.md)——dump 已加载类的 byte code 到特定目录 +- [classloader](classloader.md)——查看 classloader 的继承树,urls,类加载信息,使用 classloader 去 getResource + +## monitor/watch/trace 相关 + +::: warning +请注意,这些命令,都通过字节码增强技术来实现的,会在指定类的方法中插入一些切面来实现数据统计和观测,因此在线上、预发使用时,请尽量明确需要观测的类、方法以及条件,诊断结束要执行 `stop` 或将增强过的类执行 `reset` 命令。 +::: + +- [monitor](monitor.md)——方法执行监控 +- [watch](watch.md)——方法执行数据观测 +- [trace](trace.md)——方法内部调用路径,并输出方法路径上的每个节点上耗时 +- [stack](stack.md)——输出当前方法被调用的调用路径 +- [tt](tt.md)——方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测 + +## profiler/火焰图 + +- [profiler](profiler.md)--使用[async-profiler](https://github.com/jvm-profiling-tools/async-profiler)对应用采样,生成火焰图 + +## 鉴权 + +- [auth](auth.md)——鉴权 + +## options + +- [options](options.md)——查看或设置 Arthas 全局开关 + +## 管道 + +Arthas 支持使用管道对上述命令的结果进行进一步的处理,如`sm java.lang.String * | grep 'index'` + +- [grep](grep.md)——搜索满足条件的结果 +- plaintext——将命令的结果去除 ANSI 颜色 +- wc——按行统计输出结果 + +## 后台异步任务 + +当线上出现偶发的问题,比如需要 watch 某个条件,而这个条件一天可能才会出现一次时,异步后台任务就派上用场了,详情请参考[这里](async.md) + +- 使用 `>` 将结果重写向到日志文件,使用 `&` 指定命令是后台运行,session 断开不影响任务执行(生命周期默认为 1 天) +- jobs——列出所有 job +- kill——强制终止任务 +- fg——将暂停的任务拉到前台执行 +- bg——将暂停的任务放到后台执行 + +## Web Console + +通过 websocket 连接 Arthas。 + +- [Web Console](web-console.md) + +## Arthas Properties + +- [Arthas Properties](arthas-properties.md) + +## 以 java agent 方式启动 + +- [以 java agent 方式启动](agent.md) + +## as.sh 和 arthas-boot 技巧 + +- 通过`select`功能选择 attach 的进程。 + +正常情况下,每次执行`as.sh`/`arthas-boot.jar`需要选择,或者指定 PID。这样会比较麻烦,因为每次启动应用,它的 PID 会变化。 + +比如,已经启动了`math-game.jar`,使用`jps`命令查看: + +```bash +$ jps +58883 math-game.jar +58884 Jps +``` + +通过`select`参数可以指定进程名字,非常方便。 + +```bash +$ ./as.sh --select math-game +Arthas script version: 3.3.6 +[INFO] JAVA_HOME: /tmp/java/8.0.222-zulu +Arthas home: /Users/admin/.arthas/lib/3.3.6/arthas +Calculating attach execution time... +Attaching to 59161 using version /Users/admin/.arthas/lib/3.3.6/arthas... + +real 0m0.572s +user 0m0.281s +sys 0m0.039s +Attach success. +telnet connecting to arthas server... current timestamp is 1594280799 +Trying 127.0.0.1... +Connected to localhost. +Escape character is '^]'. + ,---. ,------. ,--------.,--. ,--. ,---. ,---. + / O \ | .--. ''--. .--'| '--' | / O \ ' .-' +| .-. || '--'.' | | | .--. || .-. |`. `-. +| | | || |\ \ | | | | | || | | |.-' | +`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----' + + +wiki https://arthas.aliyun.com/doc +tutorials https://arthas.aliyun.com/doc/arthas-tutorials.html +version 3.3.6 +pid 58883 +``` + +## 用户数据回报 + +在`3.1.4`版本后,增加了用户数据回报功能,方便统一做安全或者历史数据统计。 + +在启动时,指定`stat-url`,就会回报执行的每一行命令,比如: `./as.sh --stat-url 'http://192.168.10.11:8080/api/stat'` + +在 tunnel server 里有一个示例的回报代码,用户可以自己在服务器上实现。 + +[StatController.java](https://github.com/alibaba/arthas/blob/master/tunnel-server/src/main/java/com/alibaba/arthas/tunnel/server/app/web/StatController.java) diff --git a/site-vuepress/docs/doc/advice-class.md b/site-vuepress/docs/doc/advice-class.md new file mode 100644 index 000000000..8fdce9634 --- /dev/null +++ b/site-vuepress/docs/doc/advice-class.md @@ -0,0 +1,43 @@ +# 表达式核心变量 + +无论是匹配表达式也好、观察表达式也罢,他们核心判断变量都是围绕着一个 Arthas 中的通用通知对象 `Advice` 进行。 + +它的简略代码结构如下 + +```java +public class Advice { + + private final ClassLoader loader; + private final Class clazz; + private final ArthasMethod method; + private final Object target; + private final Object[] params; + private final Object returnObj; + private final Throwable throwExp; + private final boolean isBefore; + private final boolean isThrow; + private final boolean isReturn; + + // getter/setter +} +``` + +这里列一个表格来说明不同变量的含义 + +| 变量名 | 变量解释 | +| --------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| loader | 本次调用类所在的 ClassLoader | +| clazz | 本次调用类的 Class 引用 | +| method | 本次调用方法反射引用 | +| target | 本次调用类的实例 | +| params | 本次调用参数列表,这是一个数组,如果方法是无参方法则为空数组 | +| returnObj | 本次调用返回的对象。当且仅当 `isReturn==true` 成立时候有效,表明方法调用是以正常返回的方式结束。如果当前方法无返回值 `void`,则值为 null | +| throwExp | 本次调用抛出的异常。当且仅当 `isThrow==true` 成立时有效,表明方法调用是以抛出异常的方式结束。 | +| isBefore | 辅助判断标记,当前的通知节点有可能是在方法一开始就通知,此时 `isBefore==true` 成立,同时 `isThrow==false` 和 `isReturn==false`,因为在方法刚开始时,还无法确定方法调用将会如何结束。 | +| isThrow | 辅助判断标记,当前的方法调用以抛异常的形式结束。 | +| isReturn | 辅助判断标记,当前的方法调用以正常返回的形式结束。 | + +所有变量都可以在表达式中直接使用,如果在表达式中编写了不符合 OGNL 脚本语法或者引入了不在表格中的变量,则退出命令的执行;用户可以根据当前的异常信息修正`条件表达式`或`观察表达式` + +- 特殊用法请参考:[https://github.com/alibaba/arthas/issues/71](https://github.com/alibaba/arthas/issues/71) +- OGNL 表达式官网:[https://commons.apache.org/proper/commons-ognl/language-guide.html](https://commons.apache.org/proper/commons-ognl/language-guide.html) diff --git a/site-vuepress/docs/doc/agent.md b/site-vuepress/docs/doc/agent.md new file mode 100644 index 000000000..b71d25c52 --- /dev/null +++ b/site-vuepress/docs/doc/agent.md @@ -0,0 +1,13 @@ +# 以 Java Agent 的方式启动 + +通常 Arthas 是以动态 attach 的方式来诊断应用,但从`3.2.0`版本起,Arthas 支持直接以 java agent 的方式启动。 + +比如下载全量的 arthas zip 包,解压之后以 `-javaagent` 的参数指定`arthas-agent.jar`来启动: + +``` +java -javaagent:/tmp/test/arthas-agent.jar -jar math-game.jar +``` + +默认的配置项在解压目录里的`arthas.properties`文件里。参考:[Arthas Properties](arthas-properties.md) + +Java Agent 机制参考: https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html diff --git a/site-vuepress/docs/doc/arthas-properties.md b/site-vuepress/docs/doc/arthas-properties.md new file mode 100644 index 000000000..d437acce1 --- /dev/null +++ b/site-vuepress/docs/doc/arthas-properties.md @@ -0,0 +1,62 @@ +# Arthas Properties + +`arthas.properties`文件在 arthas 的目录下。 + +- 如果是自动下载的 arthas,则目录在`~/.arthas/lib/3.x.x/arthas/`下面 +- 如果是下载的完整包,在 arthas 解压目录下 + +## 支持的配置项 + +::: warning +注意配置必须是`驼峰`的,和 spring boot 的`-`风格不一样。spring boot 应用才同时支持`驼峰` 和 `-`风格的配置。 +::: + +``` +#arthas.config.overrideAll=true +arthas.telnetPort=3658 +arthas.httpPort=8563 +arthas.ip=127.0.0.1 + +# seconds +arthas.sessionTimeout=1800 + +#arthas.appName=demoapp +#arthas.tunnelServer=ws://127.0.0.1:7777/ws +#arthas.agentId=mmmmmmyiddddd +``` + +- 如果配置 `arthas.telnetPort`为 -1 ,则不 listen telnet 端口。`arthas.httpPort`类似。 +- 如果配置 `arthas.telnetPort`为 0 ,则随机 telnet 端口,在`~/logs/arthas/arthas.log`里可以找到具体端口日志。`arthas.httpPort`类似。 + +:::tip +如果是防止一个机器上启动多个 arthas 端口冲突。可以配置为随机端口,或者配置为 -1,并且通过 tunnel server 来使用 arthas。 +::: + +### 禁止指定命令 + +::: tip +since 3.5.2 +::: + +比如配置: + +``` +arthas.disabledCommands=stop,dump +``` + +也可以在命令行配置: `--disabled-commands stop,dump` 。 + +::: tip +默认情况下,arthas-spring-boot-starter 会禁掉`stop`命令。 +::: + +## 配置的优先级 + +配置的优先级是:命令行参数 > System Env > System Properties > arthas.properties 。 + +比如: + +- `./as.sh --telnet-port 9999` 传入的配置会覆盖掉`arthas.properties`里的默认值`arthas.telnetPort=3658`。 +- 如果应用自身设置了 system properties `arthas.telnetPort=8888`,则会覆盖掉`arthas.properties`里的默认值`arthas.telnetPort=3658`。 + +如果想要 `arthas.properties`的优先级最高,则可以配置 `arthas.config.overrideAll=true` 。 diff --git a/site/src/site/sphinx/arthas3.md b/site-vuepress/docs/doc/arthas3.md similarity index 62% rename from site/src/site/sphinx/arthas3.md rename to site-vuepress/docs/doc/arthas3.md index f510c4bb4..1289f22fc 100644 --- a/site/src/site/sphinx/arthas3.md +++ b/site-vuepress/docs/doc/arthas3.md @@ -1,7 +1,8 @@ -### Arthas3.0的新特性 +### Arthas3.0 的新特性 #### 在线诊断功能 -Arthas3.0中最重要的特性,不需要登陆机器就可以对应用进行诊断,体验和本地诊断完全一致 + +Arthas3.0 中最重要的特性,不需要登陆机器就可以对应用进行诊断,体验和本地诊断完全一致 ##### 使用步骤 @@ -12,26 +13,26 @@ TODO TODO #### 管道支持 -Arthas 3.0开始支持管道, 率先提供了`grep`,`wc`,`plaintext`的支持。 +Arthas 3.0 开始支持管道, 率先提供了`grep`,`wc`,`plaintext`的支持。 -### 去groovy依赖 +### 去 groovy 依赖 -groovy表达式在arthas2.0中大量使用,例如watch表达式 +groovy 表达式在 arthas2.0 中大量使用,例如 watch 表达式 ```bash watch com.alibaba.sample.petstore.web.store.module.screen.ItemList add "params + ' ' + returnObj" params.size()==2 ``` -其中`"params + ' ' + returnObj"`以及`params.size()==2`背后其实都使用了groovy来进行表达式求值,如果反复大量的运行这些表达式,groovy会创建大量的classloader,打满perm区从而触发FGC。 +其中`"params + ' ' + returnObj"`以及`params.size()==2`背后其实都使用了 groovy 来进行表达式求值,如果反复大量的运行这些表达式,groovy 会创建大量的 classloader,打满 perm 区从而触发 FGC。 -为了避免这个问题,Arthas 3.0中使用了ognl这个更加轻量的表达式求值库来代替groovy,彻底解决了groovy引起的FGC风险。但由于这个替换,导致原来使用groovy脚本编写的自定义脚本失效。这个问题留待后续解决。 +为了避免这个问题,Arthas 3.0 中使用了 ognl 这个更加轻量的表达式求值库来代替 groovy,彻底解决了 groovy 引起的 FGC 风险。但由于这个替换,导致原来使用 groovy 脚本编写的自定义脚本失效。这个问题留待后续解决。 -在3.0中,watch命令的表达式部分的书写有了一些改变,详见[这里](https://arthas.aliyun.com/doc/watch) +在 3.0 中,watch 命令的表达式部分的书写有了一些改变,详见[这里](https://arthas.aliyun.com/doc/watch) -#### 提升rt统计精度 +#### 提升 rt 统计精度 -Arthas 2.0中,统计rt都是以`ms`为单位,对于某些比较小的方法调用,耗时在毫秒以下的都会被认为是0ms,造成trace总时间和各方法的时间相加不一致等问题(虽然这里面确实会有误差,主要Arthas自身的开销)。Arthas 3.0中所有rt的单位统一改为使用`ns`来统计,精准捕获你的方法耗时,让0ms这样无意义的统计数据不再出现! +Arthas 2.0 中,统计 rt 都是以`ms`为单位,对于某些比较小的方法调用,耗时在毫秒以下的都会被认为是 0ms,造成 trace 总时间和各方法的时间相加不一致等问题(虽然这里面确实会有误差,主要 Arthas 自身的开销)。Arthas 3.0 中所有 rt 的单位统一改为使用`ns`来统计,精准捕获你的方法耗时,让 0ms 这样无意义的统计数据不再出现! ``` $ tt -l @@ -45,13 +46,13 @@ $ tt -l 1005 2017-02-24 10:57:39 814.657657 true false 0x3bd5e918 TestTraceServlet doGet ``` -#### watch/stack/trace命令支持按耗时过滤 +#### watch/stack/trace 命令支持按耗时过滤 -我们在trace的时候,经常会出现某个方法间隙性的rt飙高,但是我们只想知道rt高的时候,是哪里慢了,对于正常rt的方法我们并不关心,Arthas 3.0支持了按`#cost`(方法执行耗时,单位为`ms`)进行过滤,只输出符合条件的trace路径,目前,这三个命令的相关文档已经做了更新,增加了该用法的示例。 +我们在 trace 的时候,经常会出现某个方法间隙性的 rt 飙高,但是我们只想知道 rt 高的时候,是哪里慢了,对于正常 rt 的方法我们并不关心,Arthas 3.0 支持了按`#cost`(方法执行耗时,单位为`ms`)进行过滤,只输出符合条件的 trace 路径,目前,这三个命令的相关文档已经做了更新,增加了该用法的示例。 -#### sysprop命令操作SystemProperty +#### sysprop 命令操作 SystemProperty -sysprop命令支持查看所有的系统属性,以及针对特定属性进行查看和修改。 +sysprop 命令支持查看所有的系统属性,以及针对特定属性进行查看和修改。 ``` $ sysprop @@ -77,36 +78,32 @@ Successfully changed the system property. production.mode=true ``` -#### thread命令支持指定采样时间 +#### thread 命令支持指定采样时间 -thread命令计算线程cpu占用的逻辑,默认是采样100ms内各个线程的cpu使用情况并计算cpu消耗占比。有时候100ms的时间间隔太短,看不出问题所在,Arthas3.0中thread命令支持设置采样间隔(以`ms`为单位),可以观察任意时间段内的cpu消耗占比情况。 +thread 命令计算线程 cpu 占用的逻辑,默认是采样 100ms 内各个线程的 cpu 使用情况并计算 cpu 消耗占比。有时候 100ms 的时间间隔太短,看不出问题所在,Arthas3.0 中 thread 命令支持设置采样间隔(以`ms`为单位),可以观察任意时间段内的 cpu 消耗占比情况。 ``` -$ thread -i 1000 -Threads Total: 74, NEW: 0, RUNNABLE: 17, BLOCKED: 0, WAITING: 15, TIMED_WAITING: 42, TERMINATED: 0 -ID NAME GROUP PRIORITY STATE %CPU TIME INTERRUPTED DAEMON -78 com.taobao.config.client.timer main 5 TIMED_WAITING 22 0:0 false true -92 Abandoned connection cleanup thread main 5 TIMED_WAITING 15 0:2 false true -361 as-command-execute-daemon system 10 RUNNABLE 14 0:0 false true -67 HSF-Remoting-Timer-10-thread-1 main 10 TIMED_WAITING 12 0:2 false true -113 JamScheduleThread system 9 TIMED_WAITING 2 0:0 false true -14 Thread-3 main 5 RUNNABLE 2 0:0 false false -81 com.taobao.remoting.TimerThread main 5 TIMED_WAITING 2 0:0 false true -104 http-bio-7001-AsyncTimeout main 5 TIMED_WAITING 2 0:0 false true -123 nioEventLoopGroup-2-1 system 10 RUNNABLE 2 0:0 false false -127 nioEventLoopGroup-3-2 system 10 RUNNABLE 2 0:0 false false -345 nioEventLoopGroup-3-3 system 10 RUNNABLE 2 0:0 false false -358 nioEventLoopGroup-3-4 system 10 RUNNABLE 2 0:0 false false -27 qos-boss-1-1 main 5 RUNNABLE 2 0:0 false true -22 EagleEye-AsyncAppender-Thread-BizLog main 5 TIMED_WAITING 1 0:0 false true +$ thread -i 1000 +Threads Total: 74, NEW: 0, RUNNABLE: 17, BLOCKED: 0, WAITING: 15, TIMED_WAITING: 42, TERMINATED: 0 +ID NAME GROUP PRIORITY STATE %CPU TIME INTERRUPTED DAEMON +78 com.taobao.config.client.timer main 5 TIMED_WAITING 22 0:0 false true +92 Abandoned connection cleanup thread main 5 TIMED_WAITING 15 0:2 false true +361 as-command-execute-daemon system 10 RUNNABLE 14 0:0 false true +67 HSF-Remoting-Timer-10-thread-1 main 10 TIMED_WAITING 12 0:2 false true +113 JamScheduleThread system 9 TIMED_WAITING 2 0:0 false true +14 Thread-3 main 5 RUNNABLE 2 0:0 false false +81 com.taobao.remoting.TimerThread main 5 TIMED_WAITING 2 0:0 false true +104 http-bio-7001-AsyncTimeout main 5 TIMED_WAITING 2 0:0 false true +123 nioEventLoopGroup-2-1 system 10 RUNNABLE 2 0:0 false false +127 nioEventLoopGroup-3-2 system 10 RUNNABLE 2 0:0 false false +345 nioEventLoopGroup-3-3 system 10 RUNNABLE 2 0:0 false false +358 nioEventLoopGroup-3-4 system 10 RUNNABLE 2 0:0 false false +27 qos-boss-1-1 main 5 RUNNABLE 2 0:0 false true +22 EagleEye-AsyncAppender-Thread-BizLog main 5 TIMED_WAITING 1 0:0 false true ``` +#### trace 命令自动高亮显示最耗时方法调用 -#### trace命令自动高亮显示最耗时方法调用 - -trace命令现在会自动显示 +trace 命令现在会自动显示 ![Untitled2](TODO /Untitled2.gif) - - - diff --git a/site-vuepress/docs/doc/async.md b/site-vuepress/docs/doc/async.md new file mode 100644 index 000000000..d7347303d --- /dev/null +++ b/site-vuepress/docs/doc/async.md @@ -0,0 +1,80 @@ +# Arthas 后台异步任务 + +[`后台异步任务`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=case-async-jobs) + +arthas 中的后台异步任务,使用了仿 linux 系统任务相关的命令。[linux 任务相关介绍](https://ehlxr.me/2017/01/18/Linux-%E4%B8%AD-fg%E3%80%81bg%E3%80%81jobs%E3%80%81-%E6%8C%87%E4%BB%A4/)。 + +## 1. 使用&在后台执行任务 + +比如希望执行后台执行 trace 命令,那么调用下面命令 + +```bash +trace Test t & +``` + +这时命令在后台执行,可以在 console 中继续执行其他命令。 + +## 2. 通过 jobs 查看任务 + +如果希望查看当前有哪些 arthas 任务在执行,可以执行 jobs 命令,执行结果如下 + +```bash +$ jobs +[10]* + Stopped watch com.taobao.container.Test test "params[0].{? #this.name == null }" -x 2 + execution count : 19 + start time : Fri Sep 22 09:59:55 CST 2017 + timeout date : Sat Sep 23 09:59:55 CST 2017 + session : 3648e874-5e69-473f-9eed-7f89660b079b (current) +``` + +可以看到目前有一个后台任务在执行。 + +- job id 是 10, `*` 表示此 job 是当前 session 创建 +- 状态是 Stopped +- execution count 是执行次数,从启动开始已经执行了 19 次 +- timeout date 是超时的时间,到这个时间,任务将会自动超时退出 + +## 3. 任务暂停和取消 + +当任务正在前台执行,比如直接调用命令`trace Test t`或者调用后台执行命令`trace Test t &`后又通过`fg`命令将任务转到前台。这时 console 中无法继续执行命令,但是可以接收并处理以下事件: + +- ‘ctrl + z’:将任务暂停。通过`jbos`查看任务状态将会变为 Stopped,通过`bg `或者`fg `可让任务重新开始执行 +- ‘ctrl + c’:停止任务 +- ‘ctrl + d’:按照 linux 语义应当是退出终端,目前 arthas 中是空实现,不处理 + +## 4. fg、bg 命令,将命令转到前台、后台继续执行 + +- 任务在后台执行或者暂停状态(`ctrl + z`暂停任务)时,执行`fg `将可以把对应的任务转到前台继续执行。在前台执行时,无法在 console 中执行其他命令 +- 当任务处于暂停状态时(`ctrl + z`暂停任务),执行`bg `将可以把对应的任务在后台继续执行 +- 非当前 session 创建的 job,只能由当前 session fg 到前台执行 + +## 5. 任务输出重定向 + +可通过`>`或者`>>`将任务输出结果输出到指定的文件中,可以和`&`一起使用,实现 arthas 命令的后台异步任务。比如: + +```bash +$ trace Test t >> test.out & +``` + +这时 trace 命令会在后台执行,并且把结果输出到~/logs/arthas-cache/test.out。可继续执行其他命令。并可查看文件中的命令执行结果。 + +当连接到远程的 arthas server 时,可能无法查看远程机器的文件,arthas 同时支持了自动重定向到本地缓存路径。使用方法如下: + +```bash +$ trace Test t >> & +job id : 2 +cache location : /Users/gehui/logs/arthas-cache/28198/2 +``` + +可以看到并没有指定重定向文件位置,arthas 自动重定向到缓存中了,执行命令后会输出 job id 和 cache location。cache location 就是重定向文件的路径,在系统 logs 目录下,路径包括 pid 和 job id,避免和其他任务冲突。命令输出结果到`/Users/gehui/logs/arthas-cache/28198/2`中,job id 为 2。 + +## 6. 停止命令 + +异步执行的命令,如果希望停止,可执行`kill ` + +## 7. 其他 + +- 最多同时支持 8 个命令使用重定向将结果写日志 +- 请勿同时开启过多的后台异步命令,以免对目标 JVM 性能造成影响 +- 如果不想停止 arthas,继续执行后台任务,可以执行 `quit` 退出 arthas 控制台(`stop` 会停止 arthas 服务) diff --git a/site/src/site/sphinx/auth.md b/site-vuepress/docs/doc/auth.md similarity index 57% rename from site/src/site/sphinx/auth.md rename to site-vuepress/docs/doc/auth.md index 35dc3ada8..84cde7554 100644 --- a/site/src/site/sphinx/auth.md +++ b/site-vuepress/docs/doc/auth.md @@ -1,19 +1,20 @@ -auth -=== +# auth -> 验证当前会话 +::: tip +验证当前会话 +::: ### 配置用户名和密码 -在attach时,可以在命令行指定密码。比如: +在 attach 时,可以在命令行指定密码。比如: ``` java -jar arthas-boot.jar --password ppp ``` -* 可以通过 `--username` 选项来指定用户,默认值是`arthas`。 -* 也可以在 `arthas.properties` 里中配置 username/password。命令行的优先级大于配置文件。 -* 如果只配置`username`,没有配置`password`,则会生成随机密码,打印在`~/logs/arthas/arthas.log`中 +- 可以通过 `--username` 选项来指定用户,默认值是`arthas`。 +- 也可以在 `arthas.properties` 里中配置 username/password。命令行的优先级大于配置文件。 +- 如果只配置`username`,没有配置`password`,则会生成随机密码,打印在`~/logs/arthas/arthas.log`中 ``` Using generated security password: 0vUBJpRIppkKuZ7dYzYqOKtranj4unGh @@ -27,11 +28,11 @@ java -jar arthas-boot.jar --password ppp arthas.localConnectionNonAuth=true ``` -当配置密码时,使用本地连接,也不需要鉴权。默认配置值是true,方便本地连接使用。只有远程连接时,才需要鉴权。 +当配置密码时,使用本地连接,也不需要鉴权。默认配置值是 true,方便本地连接使用。只有远程连接时,才需要鉴权。 -### 在telnet console里鉴权 +### 在 telnet console 里鉴权 -连接到arthas后,直接执行命令会提示需要鉴权: +连接到 arthas 后,直接执行命令会提示需要鉴权: ```bash [arthas@37430]$ help @@ -45,10 +46,9 @@ Error! command not permitted, try to use 'auth' command to authenticates. Authentication result: true ``` -* 可以通过 `--username` 选项来指定用户,默认值是`arthas`。 +- 可以通过 `--username` 选项来指定用户,默认值是`arthas`。 - -### Web console密码验证 +### Web console 密码验证 打开浏览器,会有弹窗提示需要输入 用户名 和 密码。 @@ -56,27 +56,25 @@ Authentication result: true ### HTTP API 验证 +#### Authorization Header 方式(推荐) -#### Authorization Header方式(推荐) -Arthas 采用的是 HTTP 标准的 Basic Authorization,客户端请求时增加对应的header即可。 - -* 参考:[https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication) +Arthas 采用的是 HTTP 标准的 Basic Authorization,客户端请求时增加对应的 header 即可。 +- 参考:[https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication) -例如,用户名是:`admin`,密码是 `admin`,则组合为字符串: `admin:admin`,base64结果是: `YWRtaW46YWRtaW4=`,则HTTP 请求增加`Authorization` header: +例如,用户名是:`admin`,密码是 `admin`,则组合为字符串: `admin:admin`,base64 结果是: `YWRtaW46YWRtaW4=`,则 HTTP 请求增加`Authorization` header: ```bash curl 'http://localhost:8563/api' \ -H 'Authorization: Basic YWRtaW46YWRtaW4=' \ - --data-raw '{"action":"exec","command":"version"}' + --data-raw '{"action":"exec","command":"version"}' ``` #### URL 参数传递方式 -为了方便各种特殊情况,支持了以 parameters 方式传递username和password。比如: +为了方便各种特殊情况,支持了以 parameters 方式传递 username 和 password。比如: ```bash curl 'http://localhost:8563/api?password=admin' \ - --data-raw '{"action":"exec","command":"version"}' + --data-raw '{"action":"exec","command":"version"}' ``` - diff --git a/site/src/site/sphinx/base64.md b/site-vuepress/docs/doc/base64.md similarity index 85% rename from site/src/site/sphinx/base64.md rename to site-vuepress/docs/doc/base64.md index 1383f9dcd..045f7d130 100644 --- a/site/src/site/sphinx/base64.md +++ b/site-vuepress/docs/doc/base64.md @@ -1,9 +1,8 @@ -base64 -=== - - -> base64编码转换,和linux里的 base64 命令类似。 +# base64 +::: tip +base64 编码转换,和 linux 里的 base64 命令类似。 +::: ### 对文件进行 base64 编码 diff --git a/site/src/site/sphinx/batch-support.md b/site-vuepress/docs/doc/batch-support.md similarity index 53% rename from site/src/site/sphinx/batch-support.md rename to site-vuepress/docs/doc/batch-support.md index 48a1ddf5e..1446cd0a4 100644 --- a/site/src/site/sphinx/batch-support.md +++ b/site-vuepress/docs/doc/batch-support.md @@ -1,19 +1,22 @@ -批处理功能 -=== +# 批处理功能 -> 通过批处理功能,arthas支持一次性批量运行多个命令,并取得命令执行的结果。 +::: tip +通过批处理功能,arthas 支持一次性批量运行多个命令,并取得命令执行的结果。 +::: ### 使用方法 #### 第一步: 创建你的批处理脚本 -这里我们新建了一个`test.as`脚本,为了规范,我们采用了.as后缀名,但事实上任意的文本文件都ok。 +这里我们新建了一个`test.as`脚本,为了规范,我们采用了.as 后缀名,但事实上任意的文本文件都 ok。 -> 注意事项 -> * 目前需要每个命令占一行 -> * dashboard务必指定执行次数(`-n`),否则会导致批处理脚本无法终止 -> * watch/tt/trace/monitor/stack等命令务必指定执行次数(`-n`),否则会导致批处理脚本无法终止 -> * 可以使用异步后台任务,如 `watch c.t.X test returnObj > &`,让命令一直在后台运行,通过日志获取结果,[获取更多异步任务的信息](async.md) +::: tip + +- 目前需要每个命令占一行 +- dashboard 务必指定执行次数(`-n`),否则会导致批处理脚本无法终止 +- watch/tt/trace/monitor/stack 等命令务必指定执行次数(`-n`),否则会导致批处理脚本无法终止 +- 可以使用异步后台任务,如 `watch c.t.X test returnObj > &`,让命令一直在后台运行,通过日志获取结果,[获取更多异步任务的信息](async.md) + ::: ``` ➜ arthas git:(develop) cat /var/tmp/test.as @@ -42,4 +45,4 @@ sc -d org.apache.commons.lang.StringUtils ```bash cat test.out -``` \ No newline at end of file +``` diff --git a/site/src/site/sphinx/cat.md b/site-vuepress/docs/doc/cat.md similarity index 61% rename from site/src/site/sphinx/cat.md rename to site-vuepress/docs/doc/cat.md index 27a27f929..8ef903264 100644 --- a/site/src/site/sphinx/cat.md +++ b/site-vuepress/docs/doc/cat.md @@ -1,11 +1,11 @@ -cat -=== +# cat [`cat`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-cat) -> 打印文件内容,和linux里的cat命令类似。 - +::: tip +打印文件内容,和 linux 里的 cat 命令类似。 +::: ```bash $ cat /tmp/a.txt -``` \ No newline at end of file +``` diff --git a/site/src/site/sphinx/classloader.md b/site-vuepress/docs/doc/classloader.md similarity index 72% rename from site/src/site/sphinx/classloader.md rename to site-vuepress/docs/doc/classloader.md index d5468efcf..bfac9932f 100644 --- a/site/src/site/sphinx/classloader.md +++ b/site-vuepress/docs/doc/classloader.md @@ -1,26 +1,26 @@ -classloader -=== +# classloader [`classloader`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=command-classloader) -> 查看classloader的继承树,urls,类加载信息 +::: tip +查看 classloader 的继承树,urls,类加载信息 +::: -`classloader` 命令将 JVM 中所有的classloader的信息统计出来,并可以展示继承树,urls等。 - -可以让指定的classloader去getResources,打印出所有查找到的resources的url。对于`ResourceNotFoundException`比较有用。 +`classloader` 命令将 JVM 中所有的 classloader 的信息统计出来,并可以展示继承树,urls 等。 +可以让指定的 classloader 去 getResources,打印出所有查找到的 resources 的 url。对于`ResourceNotFoundException`比较有用。 ### 参数说明 -|参数名称|参数说明| -|---:|:---| -|[l]|按类加载实例进行统计| -|[t]|打印所有ClassLoader的继承树| -|[a]|列出所有ClassLoader加载的类,请谨慎使用| -|`[c:]`|ClassLoader的hashcode| -|`[classLoaderClass:]`|指定执行表达式的 ClassLoader 的 class name| -|`[c: r:]`|用ClassLoader去查找resource| -|`[c: load:]`|用ClassLoader去加载指定的类| +| 参数名称 | 参数说明 | +| --------------------: | :----------------------------------------- | +| [l] | 按类加载实例进行统计 | +| [t] | 打印所有 ClassLoader 的继承树 | +| [a] | 列出所有 ClassLoader 加载的类,请谨慎使用 | +| `[c:]` | ClassLoader 的 hashcode | +| `[classLoaderClass:]` | 指定执行表达式的 ClassLoader 的 class name | +| `[c: r:]` | 用 ClassLoader 去查找 resource | +| `[c: load:]` | 用 ClassLoader 去加载指定的类 | ### 使用参考 @@ -49,7 +49,7 @@ $ classloader -l Affect(row-cnt:4) cost in 2 ms. ``` -#### 查看ClassLoader的继承树 +#### 查看 ClassLoader 的继承树 ```bash $ classloader -t @@ -60,7 +60,7 @@ $ classloader -t Affect(row-cnt:4) cost in 3 ms. ``` -#### 查看URLClassLoader实际的urls +#### 查看 URLClassLoader 实际的 urls ```bash $ classloader -c 3d4eac69 @@ -70,9 +70,9 @@ file:/Users/hengyunabc/.arthas/lib/3.0.5/arthas/arthas-agent.jar Affect(row-cnt:9) cost in 3 ms. ``` -*注意* hashcode是变化的,需要先查看当前的ClassLoader信息,提取对应ClassLoader的hashcode。 +_注意_ hashcode 是变化的,需要先查看当前的 ClassLoader 信息,提取对应 ClassLoader 的 hashcode。 -对于只有唯一实例的ClassLoader可以通过class name指定,使用起来更加方便: +对于只有唯一实例的 ClassLoader 可以通过 class name 指定,使用起来更加方便: ```bash $ classloader --classLoaderClass sun.misc.Launcher$AppClassLoader @@ -82,7 +82,7 @@ file:/Users/hengyunabc/.arthas/lib/3.0.5/arthas/arthas-agent.jar Affect(row-cnt:9) cost in 3 ms. ``` -#### 使用ClassLoader去查找resource +#### 使用 ClassLoader 去查找 resource ```bash $ classloader -c 3d4eac69 -r META-INF/MANIFEST.MF @@ -91,14 +91,14 @@ $ classloader -c 3d4eac69 -r META-INF/MANIFEST.MF jar:file:/Users/hengyunabc/.arthas/lib/3.0.5/arthas/arthas-agent.jar!/META-INF/MANIFEST.MF ``` -也可以尝试查找类的class文件: +也可以尝试查找类的 class 文件: ```bash $ classloader -c 1b6d3586 -r java/lang/String.class jar:file:/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/jre/lib/rt.jar!/java/lang/String.class ``` -#### 使用ClassLoader去加载类 +#### 使用 ClassLoader 去加载类 ```bash $ classloader -c 3d4eac69 --load demo.MathGame @@ -125,9 +125,11 @@ load class success. classLoaderHash 3d4eac69 ``` -#### 统计ClassLoader实际使用URL和未使用的URL +#### 统计 ClassLoader 实际使用 URL 和未使用的 URL -> 注意,基于JVM目前已加载的所有类统计,不代表`Unused URLs`可以从应用中删掉。因为可能将来需要从`Unused URLs`里加载类,或者需要加载`resources`。 +::: warning +注意,基于 JVM 目前已加载的所有类统计,不代表`Unused URLs`可以从应用中删掉。因为可能将来需要从`Unused URLs`里加载类,或者需要加载`resources`。 +::: ``` $ classloader --url-stat @@ -157,4 +159,4 @@ $ classloader --url-stat file:/tmp/jdk1.8/Contents/Home/jre/lib/ext/sunpkcs11.jar file:/tmp/jdk1.8/Contents/Home/jre/lib/ext/jaccess.jar file:/tmp/jdk1.8/Contents/Home/jre/lib/ext/zipfs.jar -``` \ No newline at end of file +``` diff --git a/site-vuepress/docs/doc/cls.md b/site-vuepress/docs/doc/cls.md new file mode 100644 index 000000000..2fd8ce7f9 --- /dev/null +++ b/site-vuepress/docs/doc/cls.md @@ -0,0 +1,7 @@ +# cls + +清空当前屏幕区域。 + +::: tip +非终端模式下使用 cls 指令,会提示"Command 'cls' is only support tty session."。 +::: diff --git a/site-vuepress/docs/doc/commands.md b/site-vuepress/docs/doc/commands.md new file mode 100644 index 000000000..1d0cdd3e4 --- /dev/null +++ b/site-vuepress/docs/doc/commands.md @@ -0,0 +1,50 @@ +# 命令列表 + +- [dashboard](dashboard.md) +- [thread](thread.md) +- [jvm](jvm.md) +- [memory](memory.md) +- [sysprop](sysprop.md) +- [sysenv](sysenv.md) +- [vmoption](vmoption.md) +- [perfcounter](perfcounter.md) +- [logger](logger.md) +- [mbean](mbean.md) +- [getstatic](getstatic.md) +- [ognl](ognl.md) +- [sc](sc.md) +- [sm](sm.md) +- [dump](dump.md) +- [heapdump](heapdump.md) +- [vmtool](vmtool.md) +- [jad](jad.md) +- [classloader](classloader.md) +- [mc](mc.md) +- [retransform](retransform.md) +- [redefine](redefine.md) +- [monitor](monitor.md) +- [watch](watch.md) +- [trace](trace.md) +- [stack](stack.md) +- [tt](tt.md) +- [profiler](profiler.md) +- [cat](cat.md) +- [echo](echo.md) +- [grep](grep.md) +- [base64](base64.md) +- [tee](tee.md) +- [pwd](pwd.md) +- [auth](auth.md) +- [options](options.md) + +### Arthas 基础命令 + +- [help](help.md) +- [cls](cls.md) +- [session](session.md) +- [reset](reset.md) +- [version](version.md) +- [history](history.md) +- [quit](quit.md) +- [stop](stop.md) +- [keymap](keymap.md) diff --git a/site-vuepress/docs/doc/contact-us.md b/site-vuepress/docs/doc/contact-us.md new file mode 100644 index 000000000..58c6ef49e --- /dev/null +++ b/site-vuepress/docs/doc/contact-us.md @@ -0,0 +1,35 @@ +# 联系我们 + +## 招聘 + +- [期待你的加入](https://mp.weixin.qq.com/s/XQv8GnqGT3pzceVwzeiy-A) + +### Issues + +使用疑问,意见可以直接在 Issues 里提出: [https://github.com/alibaba/arthas/issues](https://github.com/alibaba/arthas/issues) + +### 微信公众号 + +欢迎关注公众号,获取 Arthas 项目的信息、源码分析、案例实践。 + +![](/images/qrcode_gongzhonghao.jpg) + +### 钉钉群 + +- Arthas 开源交流钉钉群: 21965291 ,搜索群号即可加入。 + +![](/images/dingding_qr.jpg) + +- Arthas 开源交流钉钉群 2: 30707824 ,搜索群号即可加入。 + +![](/images/dingding2_qr.jpg) + +### QQ 群 + +Arthas 开源交流 QQ 群: 916328269 + +![](/images/qqgroup_qr.jpg) + +Arthas 开源交流 QQ 群 2: 854625984 + +![](/images/qqgroup2_qr.jpg) diff --git a/site/src/site/sphinx/dashboard.md b/site-vuepress/docs/doc/dashboard.md similarity index 61% rename from site/src/site/sphinx/dashboard.md rename to site-vuepress/docs/doc/dashboard.md index fff004078..ed21e8c4f 100644 --- a/site/src/site/sphinx/dashboard.md +++ b/site-vuepress/docs/doc/dashboard.md @@ -1,18 +1,19 @@ -dashboard -=== +# dashboard [`dashboard`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-dashboard) -> 当前系统的实时数据面板,按 ctrl+c 退出。 +::: tip +当前系统的实时数据面板,按 ctrl+c 退出。 +::: -当运行在Ali-tomcat时,会显示当前tomcat的实时信息,如HTTP请求的qps, rt, 错误数, 线程池信息等等。 +当运行在 Ali-tomcat 时,会显示当前 tomcat 的实时信息,如 HTTP 请求的 qps, rt, 错误数, 线程池信息等等。 ### 参数说明 -|参数名称|参数说明| -|---:|:---| -|[i:]|刷新实时数据的时间间隔 (ms),默认5000ms| -|[n:]|刷新实时数据的次数| +| 参数名称 | 参数说明 | +| -------: | :--------------------------------------- | +| [i:] | 刷新实时数据的时间间隔 (ms),默认 5000ms | +| [n:] | 刷新实时数据的次数 | ### 使用参考 @@ -53,30 +54,31 @@ uptime 272s ### 数据说明 -* ID: Java级别的线程ID,注意这个ID不能跟jstack中的nativeID一一对应。 -* NAME: 线程名 -* GROUP: 线程组名 -* PRIORITY: 线程优先级, 1~10之间的数字,越大表示优先级越高 -* STATE: 线程的状态 -* CPU%: 线程的cpu使用率。比如采样间隔1000ms,某个线程的增量cpu时间为100ms,则cpu使用率=100/1000=10% -* DELTA_TIME: 上次采样之后线程运行增量CPU时间,数据格式为`秒` -* TIME: 线程运行总CPU时间,数据格式为`分:秒` -* INTERRUPTED: 线程当前的中断位状态 -* DAEMON: 是否是daemon线程 +- ID: Java 级别的线程 ID,注意这个 ID 不能跟 jstack 中的 nativeID 一一对应。 +- NAME: 线程名 +- GROUP: 线程组名 +- PRIORITY: 线程优先级, 1~10 之间的数字,越大表示优先级越高 +- STATE: 线程的状态 +- CPU%: 线程的 cpu 使用率。比如采样间隔 1000ms,某个线程的增量 cpu 时间为 100ms,则 cpu 使用率=100/1000=10% +- DELTA_TIME: 上次采样之后线程运行增量 CPU 时间,数据格式为`秒` +- TIME: 线程运行总 CPU 时间,数据格式为`分:秒` +- INTERRUPTED: 线程当前的中断位状态 +- DAEMON: 是否是 daemon 线程 -#### JVM内部线程 -Java 8之后支持获取JVM内部线程CPU时间,这些线程只有名称和CPU时间,没有ID及状态等信息(显示ID为-1)。 -通过内部线程可以观测到JVM活动,如GC、JIT编译等占用CPU情况,方便了解JVM整体运行状况。 +#### JVM 内部线程 -* 当JVM 堆(heap)/元数据(metaspace)空间不足或OOM时,可以看到GC线程的CPU占用率明显高于其他的线程。 -* 当执行`trace/watch/tt/redefine`等命令后,可以看到JIT线程活动变得更频繁。因为JVM热更新class字节码时清除了此class相关的JIT编译结果,需要重新编译。 +Java 8 之后支持获取 JVM 内部线程 CPU 时间,这些线程只有名称和 CPU 时间,没有 ID 及状态等信息(显示 ID 为-1)。 +通过内部线程可以观测到 JVM 活动,如 GC、JIT 编译等占用 CPU 情况,方便了解 JVM 整体运行状况。 -JVM内部线程包括下面几种: -* JIT编译线程: 如 `C1 CompilerThread0`, `C2 CompilerThread0` -* GC线程: 如`GC Thread0`, `G1 Young RemSet Sampling` -* 其它内部线程: 如`VM Periodic Task Thread`, `VM Thread`, `Service Thread` +- 当 JVM 堆(heap)/元数据(metaspace)空间不足或 OOM 时,可以看到 GC 线程的 CPU 占用率明显高于其他的线程。 +- 当执行`trace/watch/tt/redefine`等命令后,可以看到 JIT 线程活动变得更频繁。因为 JVM 热更新 class 字节码时清除了此 class 相关的 JIT 编译结果,需要重新编译。 +JVM 内部线程包括下面几种: + +- JIT 编译线程: 如 `C1 CompilerThread0`, `C2 CompilerThread0` +- GC 线程: 如`GC Thread0`, `G1 Young RemSet Sampling` +- 其它内部线程: 如`VM Periodic Task Thread`, `VM Thread`, `Service Thread` ### 截图展示 -![](_static/dashboard.png "dashboard") \ No newline at end of file +![](/images/dashboard.png "dashboard") diff --git a/site-vuepress/docs/doc/docker.md b/site-vuepress/docs/doc/docker.md new file mode 100644 index 000000000..897f39848 --- /dev/null +++ b/site-vuepress/docs/doc/docker.md @@ -0,0 +1,118 @@ +# Docker + +## 在 Docker 里使用 JDK + +很多时候,应用在 docker 里出现 arthas 无法工作的问题,是因为应用没有安装 JDK ,而是安装了 JRE 。如果只安装了 JRE,则会缺少很多 JAVA 的命令行工具和类库,Arthas 也没办法正常工作。下面介绍两种常见的在 Docker 里使用 JDK 的方式。 + +### 使用公开的 JDK 镜像 + +- https://hub.docker.com/_/openjdk/ + +比如: + +``` +FROM openjdk:8-jdk +``` + +或者: + +``` +FROM openjdk:8-jdk-alpine +``` + +### 通过包管理软件来安装 + +比如: + +```bash +# Install OpenJDK-8 +RUN apt-get update && \ + apt-get install -y openjdk-8-jdk && \ + apt-get install -y ant && \ + apt-get clean; + +# Fix certificate issues +RUN apt-get update && \ + apt-get install ca-certificates-java && \ + apt-get clean && \ + update-ca-certificates -f; + +# Setup JAVA_HOME -- useful for docker commandline +ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/ +RUN export JAVA_HOME +``` + +或者: + +```bash +RUN yum install -y \ + java-1.8.0-openjdk \ + java-1.8.0-openjdk-devel + +ENV JAVA_HOME /usr/lib/jvm/java-1.8.0-openjdk/ +RUN export JAVA_HOME +``` + +## 通过 Docker 快速入门 + +1. 删除本地已有的`math-game` docker container(非必要) + + ```sh + $ docker stop math-game || true && docker rm math-game || true + ``` + +1. 启动`math-game` + + ```sh + $ docker run --name math-game -it hengyunabc/arthas:latest /bin/sh -c "java -jar /opt/arthas/math-game.jar" + ``` + +1. 启动`arthas-boot`来进行诊断 + + ```sh + $ docker exec -it math-game /bin/sh -c "java -jar /opt/arthas/arthas-boot.jar" + * [1]: 9 jar + + [INFO] arthas home: /opt/arthas + [INFO] Try to attach process 9 + [INFO] Attach process 9 success. + [INFO] arthas-client connect 127.0.0.1 3658 + ,---. ,------. ,--------.,--. ,--. ,---. ,---. + / O \ | .--. ''--. .--'| '--' | / O \ ' .-' + | .-. || '--'.' | | | .--. || .-. |`. `-. + | | | || |\ \ | | | | | || | | |.-' | + `--' `--'`--' '--' `--' `--' `--'`--' `--'`-----' + + + wiki: https://arthas.aliyun.com/doc + version: 3.0.5 + pid: 9 + time: 2018-12-18 11:30:36 + ``` + +## 诊断 Docker 里的 Java 进程 + +```sh +docker exec -it ${containerId} /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar" +``` + +## 诊断 k8s 里容器里的 Java 进程 + +```sh +kubectl exec -it ${pod} --container ${containerId} -- /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar" +``` + +## 把 Arthas 安装到基础镜像里 + +可以很简单把 Arthas 安装到你的 Docker 镜像里。 + +``` +FROM openjdk:8-jdk-alpine + +# copy arthas +COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas +``` + +如果想指定版本,可以查看具体的 tags: + +[https://hub.docker.com/r/hengyunabc/arthas/tags](https://hub.docker.com/r/hengyunabc/arthas/tags) diff --git a/site/src/site/sphinx/download.md b/site-vuepress/docs/doc/download.md similarity index 88% rename from site/src/site/sphinx/download.md rename to site-vuepress/docs/doc/download.md index 2044664b3..a9191eb9d 100644 --- a/site/src/site/sphinx/download.md +++ b/site-vuepress/docs/doc/download.md @@ -1,18 +1,16 @@ -下载 -=== +# 下载 ## 下载全量包 -### 从Maven仓库下载 +### 从 Maven 仓库下载 最新版本,点击下载:[![](https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square "Arthas")](https://arthas.aliyun.com/download/latest_version?mirror=aliyun) - -### 从Github Releases页下载 +### 从 Github Releases 页下载 [https://github.com/alibaba/arthas/releases](https://github.com/alibaba/arthas/releases) -### 用as.sh启动 +### 用 as.sh 启动 解压后,在文件夹里有`as.sh`,直接用`./as.sh`的方式启动: @@ -26,7 +24,7 @@ ./as.sh -h ``` -### 用arthas-boot启动 +### 用 arthas-boot 启动 或者在解压后,在文件夹里有`arthas-boot.jar`,直接用`java -jar`的方式启动: @@ -40,9 +38,6 @@ java -jar arthas-boot.jar java -jar arthas-boot.jar -h ``` - - ## 下载离线文档 下载文档:[![](https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square "Arthas")](https://arthas.aliyun.com/download/doc/latest_version?mirror=aliyun) - diff --git a/site-vuepress/docs/doc/dump.md b/site-vuepress/docs/doc/dump.md new file mode 100644 index 000000000..68384e63c --- /dev/null +++ b/site-vuepress/docs/doc/dump.md @@ -0,0 +1,65 @@ +# dump + +[`dump`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=command-dump) + +::: tip +dump 已加载类的 bytecode 到特定目录 +::: + +### 参数说明 + +| 参数名称 | 参数说明 | +| --------------------: | :----------------------------------------- | +| _class-pattern_ | 类名表达式匹配 | +| `[c:]` | 类所属 ClassLoader 的 hashcode | +| `[classLoaderClass:]` | 指定执行表达式的 ClassLoader 的 class name | +| `[d:]` | 设置类文件的目标目录 | +| [E] | 开启正则表达式匹配,默认为通配符匹配 | + +### 使用参考 + +```bash +$ dump java.lang.String + HASHCODE CLASSLOADER LOCATION + null /Users/admin/logs/arthas/classdump/java/lang/String.class +Affect(row-cnt:1) cost in 119 ms. +``` + +```bash +$ dump demo.* + HASHCODE CLASSLOADER LOCATION + 3d4eac69 +-sun.misc.Launcher$AppClassLoader@3d4eac69 /Users/admin/logs/arthas/classdump/sun.misc.Launcher$AppClassLoader-3d4eac69/demo/MathGame.class + +-sun.misc.Launcher$ExtClassLoader@66350f69 +Affect(row-cnt:1) cost in 39 ms. +``` + +```bash +$ dump -d /tmp/output java.lang.String + HASHCODE CLASSLOADER LOCATION + null /tmp/output/java/lang/String.class +Affect(row-cnt:1) cost in 138 ms. +``` + +- 指定 classLoader + +注意 hashcode 是变化的,需要先查看当前的 ClassLoader 信息,提取对应 ClassLoader 的 hashcode。 + +如果你使用`-c`,你需要手动输入 hashcode:`-c ` + +```bash +$ dump -c 3d4eac69 demo.* +``` + +对于只有唯一实例的 ClassLoader 可以通过`--classLoaderClass`指定 class name,使用起来更加方便: + +```bash +$ dump --classLoaderClass sun.misc.Launcher$AppClassLoader demo.* + HASHCODE CLASSLOADER LOCATION + 3d4eac69 +-sun.misc.Launcher$AppClassLoader@3d4eac69 /Users/admin/logs/arthas/classdump/sun.misc.Launcher$AppClassLoader-3d4eac69/demo/MathGame.class + +-sun.misc.Launcher$ExtClassLoader@66350f69 +Affect(row-cnt:1) cost in 39 ms. +``` + +- 注: 这里 classLoaderClass 在 java 8 是 sun.misc.Launcher$AppClassLoader,而java 11的classloader是jdk.internal.loader.ClassLoaders$AppClassLoader,katacoda 目前环境是 java8。 + +`--classLoaderClass` 的值是 ClassLoader 的类名,只有匹配到唯一的 ClassLoader 实例时才能工作,目的是方便输入通用命令,而`-c `是动态变化的。 diff --git a/site/src/site/sphinx/echo.md b/site-vuepress/docs/doc/echo.md similarity index 62% rename from site/src/site/sphinx/echo.md rename to site-vuepress/docs/doc/echo.md index 96f180973..5d97ed813 100644 --- a/site/src/site/sphinx/echo.md +++ b/site-vuepress/docs/doc/echo.md @@ -1,11 +1,11 @@ -echo -=== +# echo [`echo`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-echo) -> 打印参数,和linux里的echo命令类似。 - +::: tip +打印参数,和 linux 里的 echo 命令类似。 +::: ```bash $ echo 'hello' -``` \ No newline at end of file +``` diff --git a/site/src/site/sphinx/faq.md b/site-vuepress/docs/doc/faq.md similarity index 58% rename from site/src/site/sphinx/faq.md rename to site-vuepress/docs/doc/faq.md index 3b185070c..e090342ae 100644 --- a/site/src/site/sphinx/faq.md +++ b/site-vuepress/docs/doc/faq.md @@ -1,27 +1,27 @@ +# FAQ -## FAQ - - -> 不在本列表里的问题,请到issue里搜索。 [https://github.com/alibaba/arthas/issues](https://github.com/alibaba/arthas/issues) - +::: tip +不在本列表里的问题,请到 issue 里搜索。 [https://github.com/alibaba/arthas/issues](https://github.com/alibaba/arthas/issues) +::: ##### 日志文件在哪里? 日志文件路径: `~/logs/arthas/arthas.log` -##### Arthas attach之后对原进程性能有多大的影响 -[https://github.com/alibaba/arthas/issues/44](https://github.com/alibaba/arthas/issues/44) +##### Arthas attach 之后对原进程性能有多大的影响 +[https://github.com/alibaba/arthas/issues/44](https://github.com/alibaba/arthas/issues/44) ##### target process not responding or HotSpot VM not loaded com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded -1. 检查当前用户和目标java进程是否一致。如果不一致,则切换到同一用户。JVM只能attach同样用户下的java 进程。 -2. 尝试使用 `jstack -l $pid`,如果进程没有反应,则说明进程可能假死,无法响应JVM attach信号。所以同样基于attach机制的Arthas无法工作。尝试使用`jmap` heapdump后分析。 -3. 尝试按[quick-start](quick-start.md)里的方式attach math-game。 +1. 检查当前用户和目标 java 进程是否一致。如果不一致,则切换到同一用户。JVM 只能 attach 同样用户下的 java 进程。 +2. 尝试使用 `jstack -l $pid`,如果进程没有反应,则说明进程可能假死,无法响应 JVM attach 信号。所以同样基于 attach 机制的 Arthas 无法工作。尝试使用`jmap` heapdump 后分析。 +3. 尝试按[quick-start](quick-start.md)里的方式 attach math-game。 4. 更多情况参考: [https://github.com/alibaba/arthas/issues/347](https://github.com/alibaba/arthas/issues/347) -##### trace/watch等命令能否增强jdk里的类? + +##### trace/watch 等命令能否增强 jdk 里的类? 默认情况下会过滤掉`java.`开头的类和被`BootStrap ClassLoader`加载的类。可以通过参数开启。 @@ -31,7 +31,9 @@ options unsafe true 更多参考 [options](options.md) -> 通过 java.lang.instrument.Instrumentation#appendToBootstrapClassLoaderSearch append到`Bootstrap ClassLoader`的jar包需要开启unsafe。 +::: tip +通过 java.lang.instrument.Instrumentation#appendToBootstrapClassLoaderSearch append 到`Bootstrap ClassLoader`的 jar 包需要开启 unsafe。 +::: ##### 怎么以`json`格式查看结果 @@ -41,18 +43,15 @@ options json-format true 更多参考 [options](options.md) - -##### Arthas能否跟踪 native 函数 +##### Arthas 能否跟踪 native 函数 不能。 - ##### 能不能查看内存里某个变量的值 1. 可以使用[`vmtool`](vmtool.md)命令。 2. 可以用一些技巧,用[`tt`](tt.md)命令拦截到对象,或者从静态函数里取到对象。 - ##### 方法同名过滤 同名方法过滤可以通过匹配表达式,可以使用[表达式核心变量](advice-class.md)中所有变量作为已知条件,可以通过判断参数个数`params.length ==1`, 参数类型`params[0] instanceof java.lang.Integer`、返回值类型 `returnObj instanceof java.util.List` 等等一种或者多种组合进行过滤。 @@ -63,25 +62,25 @@ options json-format true ```bash watch demo.MathGame primeFactors '{params,returnObj,throwExp}' 'params.length >0 && returnObj instanceof java.util.List' -v -``` +``` -##### 怎么watch、trace 构造函数 ? +##### 怎么 watch、trace 构造函数 ? ```bash watch demo.MathGame '{params,returnObj,throwExp}' -v ``` -##### 怎样watch、trace内部类? +##### 怎样 watch、trace 内部类? -在JVM规范里内部类的格式是`OuterClass$InnerClass`。 +在 JVM 规范里内部类的格式是`OuterClass$InnerClass`。 ```bash watch OuterClass$InnerClass ``` -##### 输入中文/Unicode字符 +##### 输入中文/Unicode 字符 -把中文/Unicode字符转为`\u`表示方法: +把中文/Unicode 字符转为`\u`表示方法: ```bash ognl '@java.lang.System@out.println("Hello \u4e2d\u6587")' @@ -89,16 +88,15 @@ ognl '@java.lang.System@out.println("Hello \u4e2d\u6587")' ##### java.lang.ClassFormatError: null、skywalking arthas 兼容使用 -当出现这个错误日志`java.lang.ClassFormatError: null`,通常情况下都是被其他字节码工具修改过与arthas修改字节码不兼容。 - -比如: 使用 skywalking V8.1.0 以下版本 [无法trace、watch 被skywalking agent 增强过的类](https://github.com/alibaba/arthas/issues/1141), V8.1.0 以上版本可以兼容使用,更多参考skywalking配置 [skywalking compatible with other javaagent bytecode processing](https://github.com/apache/skywalking/blob/master/docs/en/FAQ/Compatible-with-other-javaagent-bytecode-processing.md#)。 +当出现这个错误日志`java.lang.ClassFormatError: null`,通常情况下都是被其他字节码工具修改过与 arthas 修改字节码不兼容。 +比如: 使用 skywalking V8.1.0 以下版本 [无法 trace、watch 被 skywalking agent 增强过的类](https://github.com/alibaba/arthas/issues/1141), V8.1.0 以上版本可以兼容使用,更多参考 skywalking 配置 [skywalking compatible with other javaagent bytecode processing](https://github.com/apache/skywalking/blob/master/docs/en/FAQ/Compatible-with-other-javaagent-bytecode-processing.md#)。 #### class redefinition failed: attempted to change the schema (add/remove fields) 参考: [https://github.com/alibaba/arthas/issues/2165](https://github.com/alibaba/arthas/issues/2165) -##### Arthas能不能离线使用 +##### Arthas 能不能离线使用 可以。下载全量包解压即可,参考: [下载](download.md)。 @@ -106,8 +104,8 @@ ognl '@java.lang.System@out.println("Hello \u4e2d\u6587")' 参考: [https://github.com/alibaba/arthas/issues/362#issuecomment-448185416](https://github.com/alibaba/arthas/issues/362#issuecomment-448185416) -##### 为什么下载了新版本的Arthas,连接的却是旧版本? +##### 为什么下载了新版本的 Arthas,连接的却是旧版本? -比如启动的 `as.sh/arthas-boot.jar` 版本是3.5.* 的,但是连接上之后,打印的arthas版本是 3.4.* 的。 +比如启动的 `as.sh/arthas-boot.jar` 版本是 3.5._ 的,但是连接上之后,打印的 arthas 版本是 3.4._ 的。 -可能是之前使用旧版本的arthas诊断过目标进程。可以先执行`stop`停止掉旧版本的arthas,再重新使用新版本attach。 +可能是之前使用旧版本的 arthas 诊断过目标进程。可以先执行`stop`停止掉旧版本的 arthas,再重新使用新版本 attach。 diff --git a/site-vuepress/docs/doc/getstatic.md b/site-vuepress/docs/doc/getstatic.md new file mode 100644 index 000000000..f4a9d8a69 --- /dev/null +++ b/site-vuepress/docs/doc/getstatic.md @@ -0,0 +1,70 @@ +# getstatic + +[`getstatic`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-getstatic) + +- 推荐直接使用[ognl](ognl.md)命令,更加灵活。 + +通过 getstatic 命令可以方便的查看类的静态属性。使用方法为`getstatic class_name field_name` + +```bash +$ getstatic demo.MathGame random +field: random +@Random[ + serialVersionUID=@Long[3905348978240129619], + seed=@AtomicLong[120955813885284], + multiplier=@Long[25214903917], + addend=@Long[11], + mask=@Long[281474976710655], + DOUBLE_UNIT=@Double[1.1102230246251565E-16], + BadBound=@String[bound must be positive], + BadRange=@String[bound must be greater than origin], + BadSize=@String[size must be non-negative], + seedUniquifier=@AtomicLong[-3282039941672302964], + nextNextGaussian=@Double[0.0], + haveNextNextGaussian=@Boolean[false], + serialPersistentFields=@ObjectStreamField[][isEmpty=false;size=3], + unsafe=@Unsafe[sun.misc.Unsafe@2eaa1027], + seedOffset=@Long[24], +] +``` + +- 指定 classLoader + +注意 hashcode 是变化的,需要先查看当前的 ClassLoader 信息,使用`sc -d `提取对应 ClassLoader 的 hashcode。 + +如果你使用`-c`,你需要手动输入 hashcode:`-c ` + +```bash +$ getstatic -c 3d4eac69 demo.MathGame random +``` + +对于只有唯一实例的 ClassLoader 可以通过`--classLoaderClass`指定 class name,使用起来更加方便: + +`getstatic --classLoaderClass sun.misc.Launcher$AppClassLoader demo.MathGame random` + +- 注: 这里 classLoaderClass 在 java 8 是 sun.misc.Launcher$AppClassLoader,而java 11的classloader是jdk.internal.loader.ClassLoaders$AppClassLoader,katacoda 目前环境是 java8。 + +`--classLoaderClass` 的值是 ClassLoader 的类名,只有匹配到唯一的 ClassLoader 实例时才能工作,目的是方便输入通用命令,而`-c `是动态变化的。 + +如果该静态属性是一个复杂对象,还可以支持在该属性上通过 ognl 表示进行遍历,过滤,访问对象的内部属性等操作。 + +- OGNL 特殊用法请参考:[https://github.com/alibaba/arthas/issues/71](https://github.com/alibaba/arthas/issues/71) +- OGNL 表达式官方指南:[https://commons.apache.org/proper/commons-ognl/language-guide.html](https://commons.apache.org/proper/commons-ognl/language-guide.html) + +例如,假设 n 是一个 Map,Map 的 Key 是一个 Enum,我们想过滤出 Map 中 Key 为某个 Enum 的值,可以写如下命令 + +``` +$ getstatic com.alibaba.arthas.Test n 'entrySet().iterator.{? #this.key.name()=="STOP"}' +field: n +@ArrayList[ + @Node[STOP=bbb], +] +Affect(row-cnt:1) cost in 68 ms. + + +$ getstatic com.alibaba.arthas.Test m 'entrySet().iterator.{? #this.key=="a"}' +field: m +@ArrayList[ + @Node[a=aaa], +] +``` diff --git a/site/src/site/sphinx/grep.md b/site-vuepress/docs/doc/grep.md similarity index 97% rename from site/src/site/sphinx/grep.md rename to site-vuepress/docs/doc/grep.md index daa0ce206..b2c0ce2d8 100644 --- a/site/src/site/sphinx/grep.md +++ b/site-vuepress/docs/doc/grep.md @@ -1,10 +1,10 @@ -grep -=== +# grep [`grep`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-grep) -> 类似传统的`grep`命令。 - +::: tip +类似传统的`grep`命令。 +::: ``` USAGE: @@ -36,4 +36,4 @@ grep -e, --regex Enable regular expression to match --trim-end Remove whitespaces at the end of the line Pattern -``` \ No newline at end of file +``` diff --git a/site/src/site/sphinx/groovy.md b/site-vuepress/docs/doc/groovy.md similarity index 83% rename from site/src/site/sphinx/groovy.md rename to site-vuepress/docs/doc/groovy.md index b5f5cff36..516f5527a 100644 --- a/site/src/site/sphinx/groovy.md +++ b/site-vuepress/docs/doc/groovy.md @@ -1,7 +1,8 @@ -groovy -=== +# groovy -> Arthas 支持 groovy 脚本增强,允许像 BTrace 一样编写脚本来解决问题,可以在 groovy 脚本中进行if/for/switch/while 等控制语句,不受限制,但相比 BTrace 而言拥有更多的限制范围。 +::: tip +Arthas 支持 groovy 脚本增强,允许像 BTrace 一样编写脚本来解决问题,可以在 groovy 脚本中进行 if/for/switch/while 等控制语句,不受限制,但相比 BTrace 而言拥有更多的限制范围。 +::: ### 限制内容 @@ -10,16 +11,16 @@ groovy ### 参数说明 -|参数名称|参数说明| -|---:|:---| -|*class-pattern*|类名表达式匹配| -|*method-pattern*|方法名表达式匹配| -|*script-filepath*|groovy 脚本的绝对路径| -|[S]|匹配所有的子类| -|[E]|开启正则表达式匹配,默认为通配符匹配| +| 参数名称 | 参数说明 | +| ----------------: | :----------------------------------- | +| _class-pattern_ | 类名表达式匹配 | +| _method-pattern_ | 方法名表达式匹配 | +| _script-filepath_ | groovy 脚本的绝对路径 | +| [S] | 匹配所有的子类 | +| [E] | 开启正则表达式匹配,默认为通配符匹配 | 需要说明的是,第三个输入参数是脚本的绝对路径,比如 `/tmp/test.groovy`,不建议输入相对路径,比如 `./test.groovy` - + ### 五个关键函数声明 ```java diff --git a/site/src/site/sphinx/heapdump.md b/site-vuepress/docs/doc/heapdump.md similarity index 77% rename from site/src/site/sphinx/heapdump.md rename to site-vuepress/docs/doc/heapdump.md index a98e1c765..d3410f37f 100644 --- a/site/src/site/sphinx/heapdump.md +++ b/site-vuepress/docs/doc/heapdump.md @@ -1,14 +1,14 @@ -heapdump -=== +# heapdump [`heapdump`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-heapdump) -> dump java heap, 类似jmap命令的heap dump功能。 - +::: tip +dump java heap, 类似 jmap 命令的 heap dump 功能。 +::: ### 使用参考 -#### dump到指定文件 +#### dump 到指定文件 ```bash [arthas@58205]$ heapdump /tmp/dump.hprof @@ -16,7 +16,7 @@ Dumping heap to /tmp/dump.hprof... Heap dump file created ``` -#### 只dump live对象 +#### 只 dump live 对象 ```bash [arthas@58205]$ heapdump --live /tmp/dump.hprof @@ -24,13 +24,10 @@ Dumping heap to /tmp/dump.hprof... Heap dump file created ``` -### dump到临时文件 +### dump 到临时文件 ```bash [arthas@58205]$ heapdump Dumping heap to /var/folders/my/wy7c9w9j5732xbkcyt1mb4g40000gp/T/heapdump2019-09-03-16-385121018449645518991.hprof... Heap dump file created ``` - - - diff --git a/site/src/site/sphinx/help.md b/site-vuepress/docs/doc/help.md similarity index 87% rename from site/src/site/sphinx/help.md rename to site-vuepress/docs/doc/help.md index e20034a10..ae9cf92c7 100644 --- a/site/src/site/sphinx/help.md +++ b/site-vuepress/docs/doc/help.md @@ -1,16 +1,17 @@ -help -=== +# help -查看命令帮助信息,可以查看当前arthas版本支持的指令,或者查看具体指令的使用说明。 +查看命令帮助信息,可以查看当前 arthas 版本支持的指令,或者查看具体指令的使用说明。 -> [help 指令]的等同于[指令 -help],都是查看具体指令的使用说明。 +::: tip +[help 指令]的等同于[指令 -help],都是查看具体指令的使用说明。 +::: ### 参数说明 -| 参数名称 | 参数说明 | -| -------: | :--------------------------------------- | -| 不接参数 | 查询当前arthas版本支持的指令以及指令描述 | -| [name:] | 查询具体指令的使用说明 | +| 参数名称 | 参数说明 | +| -------: | :----------------------------------------- | +| 不接参数 | 查询当前 arthas 版本支持的指令以及指令描述 | +| [name:] | 查询具体指令的使用说明 | ### 使用参考 @@ -59,8 +60,8 @@ $ help tee tee command for pipes. profiler Async Profiler. https://github.com/jvm-profiling-tools/async-profiler stop Stop/Shutdown Arthas server and exit the console. - - + + ``` ``` @@ -84,4 +85,3 @@ $ help -i, --interval The interval (in ms) between two executions, default is 5000 ms. -n, --number-of-execution The number of times this command will be executed. ``` - diff --git a/site-vuepress/docs/doc/history.md b/site-vuepress/docs/doc/history.md new file mode 100644 index 000000000..64b24d51e --- /dev/null +++ b/site-vuepress/docs/doc/history.md @@ -0,0 +1,31 @@ +# history + +打印命令历史。 + +::: tip +历史指令会通过一个名叫 history 的文件持久化,所以 history 指令可以查看当前 arthas 服务器的所有历史命令,而不仅只是当前次会话使用过的命令。 +::: + +### 参数说明 + +| 参数名称 | 参数说明 | +| -------: | :---------------------- | +| [c:] | 清空历史指令 | +| [n:] | 显示最近执行的 n 条指令 | + +### 使用参考 + +``` +#查看最近执行的3条指令 +$ history 3 + 269 thread + 270 cls + 271 history 3 +``` + +``` + #清空指令 + $ history -c + $ history 3 + 1 history 3 +``` diff --git a/site-vuepress/docs/doc/http-api.md b/site-vuepress/docs/doc/http-api.md new file mode 100644 index 000000000..0b16bcc45 --- /dev/null +++ b/site-vuepress/docs/doc/http-api.md @@ -0,0 +1,684 @@ +# Http API + +[`Http API`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=case-http-api) + +### 概览 + +Http API +提供类似 RESTful 的交互接口,请求和响应均为 JSON 格式的数据。相对于 Telnet/WebConsole 的输出非结构化文本数据,Http +API 可以提供结构化的数据,支持更复杂的交互功能,比如特定应用场景的一系列诊断操作。 + +#### 访问地址 + +Http API 接口地址为:`http://ip:port/api`,必须使用 POST 方式提交请求参数。如 POST +`http://127.0.0.1:8563/api` 。 + +注意:telnet 服务的 3658 端口与 Chrome 浏览器有兼容性问题,建议使用 http 端口 8563 来访问 http 接口。 + +#### 请求数据格式 + +```json +{ + "action": "exec", + "requestId": "req112", + "sessionId": "94766d3c-8b39-42d3-8596-98aee3ccbefb", + "consumerId": "955dbd1325334a84972b0f3ac19de4f7_2", + "command": "version", + "execTimeout": "10000" +} +``` + +请求数据格式说明: + +- `action` : 请求的动作/行为,可选值请参考"请求 Action"小节。 +- `requestId` : 可选请求 ID,由客户端生成。 +- `sessionId` : Arthas 会话 ID,一次性命令不需要设置会话 ID。 +- `consumerId` : Arthas 消费者 ID,用于多人共享会话。 +- `command` : Arthas command line 。 +- `execTimeout` : 命令同步执行的超时时间(ms),默认为 30000。 + +注意: 不同的 action 使用到参数不同,根据具体的 action 来设置参数。 + +#### 请求 Action + +目前支持的请求 Action 如下: + +- `exec` : 同步执行命令,命令正常结束或者超时后中断命令执行后返回命令的执行结果。 +- `async_exec` : 异步执行命令,立即返回命令的调度结果,命令执行结果通过`pull_results`获取。 +- `interrupt_job` : 中断会话当前的命令,类似 Telnet `Ctrl + c`的功能。 +- `pull_results` : 获取异步执行的命令的结果,以 http 长轮询(long-polling)方式重复执行 +- `init_session` : 创建会话 +- `join_session` : 加入会话,用于支持多人共享同一个 Arthas 会话 +- `close_session` : 关闭会话 + +#### 响应状态 + +响应中的 state 属性表示请求处理状态,取值如下: + +- `SCHEDULED`:异步执行命令时表示已经创建 job 并已提交到命令执行队列,命令可能还没开始执行或者执行中; +- `SUCCEEDED`:请求处理成功(完成状态); +- `FAILED`:请求处理失败(完成状态),通常附带 message 说明原因; +- `REFUSED`:请求被拒绝(完成状态),通常附带 message 说明原因; + +### 一次性命令 + +与执行批处理命令类似,一次性命令以同步方式执行。不需要创建会话,不需要设置`sessionId`选项。 + +```json +{ + "action": "exec", + "command": "" +} +``` + +比如获取 Arthas 版本号: + +```bash +curl -Ss -XPOST http://localhost:8563/api -d ' +{ + "action":"exec", + "command":"version" +} +' +``` + +响应内容如下: + +```json +{ + "state": "SUCCEEDED", + "sessionId": "ee3bc004-4586-43de-bac0-b69d6db7a869", + "body": { + "results": [ + { + "type": "version", + "version": "3.3.7", + "jobId": 5 + }, + { + "jobId": 5, + "statusCode": 0, + "type": "status" + } + ], + "timeExpired": false, + "command": "version", + "jobStatus": "TERMINATED", + "jobId": 5 + } +} +``` + +响应数据解析: + +- `state`: 请求处理状态,参考“接口响应状态”说明 +- `sessionId `: Arthas 会话 ID,一次性命令自动创建及销毁临时会话 +- `body.jobId`: 命令的任务 ID,同一任务输出的所有 Result 都是相同的 jobId +- `body.jobStatus`: 任务状态,同步执行正常结束为`TERMINATED ` +- `body.timeExpired`: 任务执行是否超时 +- `body/results`: 命令执行的结果列表 + +**命令结果格式说明** + +```json +[ + { + "type": "version", + "version": "3.3.7", + "jobId": 5 + }, + { + "jobId": 5, + "statusCode": 0, + "type": "status" + } +] +``` + +- `type` : 命令结果类型,除了`status`等特殊的几个外,其它的保持与 Arthas 命令名称一致。请参考"[特殊命令结果](#special_command_results)"小节。 +- `jobId` : 处理命令的任务 ID。 +- 其它字段为每个不同命令的数据。 + +注意:也可以使用一次性命令的方式执行 watch/trace 等连续输出的命令,但不能中断命令执行,可能出现长时间没有结束的问题。请参考"[watch 命令输出 map 对象](#change_watch_value_to_map)"小节的示例。 + +请尽量按照以下方式处理: + +- 设置合理的`execTimeout`,到达超时时间后强制中断命令执行,避免长时间挂起。 +- 通过`-n`参数指定较少的执行次数。 +- 保证命令匹配的方法可以成功命中和 condition-express 编写正确,如果 watch/trace 没有命中就算指定`-n 1`也会挂起等待到执行超时。 + +### 会话交互 + +由用户创建及管理 Arthas 会话,适用于复杂的交互过程。访问流程如下: + +- 创建会话 +- 加入会话(可选) +- 拉取命令结果 +- 执行一系列命令 +- 中断命令执行 +- 关闭会话 + +#### 创建会话 + +```bash +curl -Ss -XPOST http://localhost:8563/api -d ' +{ + "action":"init_session" +} +' +``` + +响应结果: + +```json +{ + "sessionId": "b09f1353-202c-407b-af24-701b744f971e", + "consumerId": "5ae4e5fbab8b4e529ac404f260d4e2d1_1", + "state": "SUCCEEDED" +} +``` + +当前会话 ID 为: `b09f1353-202c-407b-af24-701b744f971e`, 当前消费者 ID 为:`5ae4e5fbab8b4e529ac404f260d4e2d1_1 `。 + +#### 加入会话 + +指定要加入的会话 ID,服务端将分配一个新的消费者 ID。多个消费者可以接收到同一个会话的命令结果。本接口用于支持多人共享同一个会话或刷新页面后重新拉取会话历史记录。 + +```bash +curl -Ss -XPOST http://localhost:8563/api -d ' +{ + "action":"join_session", + "sessionId" : "b09f1353-202c-407b-af24-701b744f971e" +} +' +``` + +响应结果: + +```json +{ + "consumerId": "8f7f6ad7bc2d4cb5aa57a530927a95cc_2", + "sessionId": "b09f1353-202c-407b-af24-701b744f971e", + "state": "SUCCEEDED" +} +``` + +新的消费者 ID 为`8f7f6ad7bc2d4cb5aa57a530927a95cc_2 ` 。 + +#### 拉取命令结果 + +拉取命令结果消息的 action 为`pull_results`。请使用 Http long-polling 方式,定时循环拉取结果消息。 +消费者的超时时间为 5 分钟,超时后需要调用`join_session`分配新的消费者。每个消费者单独分配一个缓存队列,按顺序拉取命令结果,不会影响到其它消费者。 + +请求参数需要指定会话 ID 及消费者 ID: + +```bash +curl -Ss -XPOST http://localhost:8563/api -d ' +{ + "action":"pull_results", + "sessionId" : "b09f1353-202c-407b-af24-701b744f971e", + "consumerId" : "8f7f6ad7bc2d4cb5aa57a530927a95cc_2" +} +' +``` + +用 Bash 脚本定时拉取结果消息: + +```bash +while true; do curl -Ss -XPOST http://localhost:8563/api -d ' +{ + "action":"pull_results", + "sessionId" : "2b085b5d-883b-4914-ab35-b2c5c1d5aa2a", + "consumerId" : "8ecb9cb7c7804d5d92e258b23d5245cc_1" +} +' | json_pp; sleep 2; done +``` + +注: `json_pp` 工具将输出内容格式化为 pretty json。 + +响应内容如下: + +```json +{ + "body": { + "results": [ + { + "inputStatus": "DISABLED", + "jobId": 0, + "type": "input_status" + }, + { + "type": "message", + "jobId": 0, + "message": "Welcome to arthas!" + }, + { + "tutorials": "https://arthas.aliyun.com/doc/arthas-tutorials.html", + "time": "2020-08-06 15:56:43", + "type": "welcome", + "jobId": 0, + "pid": "7909", + "wiki": "https://arthas.aliyun.com/doc", + "version": "3.3.7" + }, + { + "inputStatus": "ALLOW_INPUT", + "type": "input_status", + "jobId": 0 + } + ] + }, + "sessionId": "b09f1353-202c-407b-af24-701b744f971e", + "consumerId": "8f7f6ad7bc2d4cb5aa57a530927a95cc_2", + "state": "SUCCEEDED" +} +``` + +#### 异步执行命令 + +```bash +curl -Ss -XPOST http://localhost:8563/api -d ''' +{ + "action":"async_exec", + "command":"watch demo.MathGame primeFactors \"{params, returnObj, throwExp}\" ", + "sessionId" : "2b085b5d-883b-4914-ab35-b2c5c1d5aa2a" +} +''' +``` + +`async_exec` 的结果: + +```json +{ + "sessionId": "2b085b5d-883b-4914-ab35-b2c5c1d5aa2a", + "state": "SCHEDULED", + "body": { + "jobStatus": "READY", + "jobId": 3, + "command": "watch demo.MathGame primeFactors \"{params, returnObj, throwExp}\" " + } +} +``` + +- `state` : `SCHEDULED` 状态表示已经解析命令生成任务,但未开始执行。 +- `body.jobId` : + 异步执行命令的任务 ID,可以根据此任务 ID 来过滤在`pull_results`输出的命令结果。 +- `body.jobStatus` : 任务状态`READY`表示未开始执行。 + +查看上面自动拉取结果消息脚本的 shell 输出: + +```json +{ + "body" : { + "results" : [ + { + "type" : "command", + "jobId" : 3, + "state" : "SCHEDULED", + "command" : "watch demo.MathGame primeFactors \"{params, returnObj, throwExp}\" " + }, + { + "inputStatus" : "ALLOW_INTERRUPT", + "jobId" : 0, + "type" : "input_status" + }, + { + "success" : true, + "jobId" : 3, + "effect" : { + "listenerId" : 3, + "cost" : 24, + "classCount" : 1, + "methodCount" : 1 + }, + "type" : "enhancer" + }, + { + "sizeLimit" : 10485760, + "expand" : 1, + "jobId" : 3, + "type" : "watch", + "cost" : 0.071499, + "ts" : 1596703453237, + "value" : [ + [ + -170365 + ], + null, + { + "stackTrace" : [ + { + "className" : "demo.MathGame", + "classLoaderName" : "app", + "methodName" : "primeFactors", + "nativeMethod" : false, + "lineNumber" : 46, + "fileName" : "MathGame.java" + }, + ... + ], + "localizedMessage" : "number is: -170365, need >= 2", + "@type" : "java.lang.IllegalArgumentException", + "message" : "number is: -170365, need >= 2" + } + ] + }, + { + "type" : "watch", + "cost" : 0.033375, + "jobId" : 3, + "ts" : 1596703454241, + "value" : [ + [ + 1 + ], + [ + 2, + 2, + 2, + 2, + 13, + 491 + ], + null + ], + "sizeLimit" : 10485760, + "expand" : 1 + } + ] + }, + "consumerId" : "8ecb9cb7c7804d5d92e258b23d5245cc_1", + "sessionId" : "2b085b5d-883b-4914-ab35-b2c5c1d5aa2a", + "state" : "SUCCEEDED" +} +``` + +watch 命令结果的`value`为 watch-experss 的值,上面命令中为`{params, returnObj, throwExp}`,所以 watch 结果的 value 为一个长度为 3 的数组,每个元素分别对应相应顺序的表达式。 +请参考"[watch 命令输出 map 对象](#change_watch_value_to_map)"小节。 + +#### 中断命令执行 + +中断会话正在运行的前台 Job(前台任务): + +```bash +curl -Ss -XPOST http://localhost:8563/api -d ''' +{ + "action":"interrupt_job", + "sessionId" : "2b085b5d-883b-4914-ab35-b2c5c1d5aa2a" +} +''' +``` + +``` +{ + "state" : "SUCCEEDED", + "body" : { + "jobStatus" : "TERMINATED", + "jobId" : 3 + } +} +``` + +#### 关闭会话 + +指定会话 ID,关闭会话。 + +```bash +curl -Ss -XPOST http://localhost:8563/api -d ''' +{ + "action":"close_session", + "sessionId" : "2b085b5d-883b-4914-ab35-b2c5c1d5aa2a" +} +''' +``` + +```json +{ + "state": "SUCCEEDED" +} +``` + +### 鉴权 + +参考: [auth](auth.md) + +### Web UI + +![](/images/arthas-web-ui.png "arthas web ui") + +一个基于 Http API 接口实现的 Web UI,访问地址为: [http://127.0.0.1:8563/ui](http://127.0.0.1:8563/ui) 。 + +已实现功能: + +- 创建会话 +- 复制并打开 url 加入会话,多人共享会话 +- 周期性拉取会话命令结果消息 +- 刷新页面或者加入会话拉取会话历史命令消息 +- 输入命令/中断命令状态控制 + +待开发功能: + +- 改进将命令结果消息可读性 +- 命令输入支持自动完成及命令模板 +- 提供命令帮助 +- 支持个人选项设置 + + + +### 特殊命令结果 + +#### status + +```json +{ + "jobId": 5, + "statusCode": 0, + "type": "status" +} +``` + +`type`为`status`表示命令执行状态: + +每个命令执行结束后都有唯一一个 status 结果。`statusCode` +为 0 表示执行成功,`statusCode` 为非 0 值表示执行失败,类似进程退出码(exit code)。 + +命令执行失败时一般会提供错误消息,如: + +```json +{ + "jobId": 3, + "message": "The argument 'class-pattern' is required", + "statusCode": -10, + "type": "status" +} +``` + +#### input_status + +```json +{ + "inputStatus": "ALLOW_INPUT", + "type": "input_status", + "jobId": 0 +} +``` + +`type`为`input_status`表示输入状态: + +用于 UI 交互时控制用户输入,每次执行命令前后会发送改变的消息。 +`inputStatus` 的值说明: + +- `ALLOW_INPUT` : + 允许用户输入命令,表示会话没有在执行的前台命令,可以接受新的命令。 +- `ALLOW_INTERRUPT` : + 允许用户中断命令执行,表示当前正在执行命令,用户可以发送`interrupt_job`中断执行。 +- `DISABLED` : 禁用状态,不能输入命令也不能中断命令。 + +#### command + +```json +{ + "type": "command", + "jobId": 3, + "state": "SCHEDULED", + "command": "watch demo.MathGame primeFactors \"{params, returnObj, throwExp}\" " +} +``` + +`type` 为`command`表示输入的命令数据: + +用于交互 UI 回显用户输入的命令,拉取的会话命令消息历史会包含`command`类型的消息,按顺序处理即可。 + +#### enhancer + +```json +{ + "success": true, + "jobId": 3, + "effect": { + "listenerId": 3, + "cost": 24, + "classCount": 1, + "methodCount": 1 + }, + "type": "enhancer" +} +``` + +`type`为`enhancer`表示类增强结果: + +`trace/watch/jad/tt`等命令需要对类进行增强,会接收到这个`enhancer`结果。可能出现`enhancer`结果成功,但没有命中方法的情况,客户端可以根据`enhancer`结果提示用户。 + +### 案例 + +#### 获取 Java 应用的 Classpath + +通过 Http api 查询 Java 应用的 System properties,提取`java.class.path`的值。 + +```bash +json_data=$(curl -Ss -XPOST http://localhost:8563/api -d ' +{ + "action":"exec", + "command":"sysprop" +}') +``` + +- 使用`sed`提取值: + +```bash +class_path=$(echo $json_data | tr -d '\n' | sed 's/.*"java.class.path":"\([^"]*\).*/\1/') +echo "classpath: $class_path" +``` + +- 使用`json_pp/awk`提取值 + +```bash +class_path=$(echo $json_data | tr -d '\n' | json_pp | grep java.class.path | awk -F'"' '{ print $4 }') +echo "classpath: $class_path" +``` + +输出内容: + +``` +classpath: demo-arthas-spring-boot.jar +``` + +注意: + +- `echo $json_data | tr -d '\n'` : 删除换行符(`line.separator`的值),避免影响`sed`/`json_pp`命令处理。 +- `awk -F'"' '{ print $4 }'` : 使用双引号作为分隔符号 + + + +#### watch 命令输出 map 对象 + +watch 的结果值由计算`watch-express` ognl 表达式产生,可以通过改变 ognl 表达式来生成想要的值,请参考[OGNL 文档](https://commons.apache.org/proper/commons-ognl/language-guide.html)。 + +::: tip +Maps can also be created using a special syntax. + +#{ "foo" : "foo value", "bar" : "bar value" } + +This creates a Map initialized with mappings for "foo" and "bar". +::: + +下面的命令生成 map 格式的值: + +```bash +watch *MathGame prime* '#{ "params" : params, "returnObj" : returnObj, "throwExp": throwExp}' -x 2 -n 5 +``` + +在 Telnet shell/WebConsole 中执行上面的命令,输出的结果: + +```bash +ts=2020-08-06 16:57:20; [cost=0.241735ms] result=@LinkedHashMap[ + @String[params]:@Object[][ + @Integer[1], + ], + @String[returnObj]:@ArrayList[ + @Integer[2], + @Integer[241], + @Integer[379], + ], + @String[throwExp]:null, +] +``` + +用 Http api 执行上面的命令,注意对 JSON 双引号转义: + +```bash +curl -Ss -XPOST http://localhost:8563/api -d @- << EOF +{ + "action":"exec", + "execTimeout": 30000, + "command":"watch *MathGame prime* '#{ \"params\" : params, \"returnObj\" : returnObj, \"throwExp\": throwExp}' -n 3 " +} +EOF +``` + +Http api 执行结果: + +```json +{ + "body": { + ... + "results": [ + ... + { + ... + "type": "watch", + "value": { + "params": [ + 1 + ], + "returnObj": [ + 2, + 5, + 17, + 23, + 23 + ] + } + }, + { + ... + "type": "watch", + "value": { + "params": [ + -98278 + ], + "throwExp": { + "@type": "java.lang.IllegalArgumentException", + "localizedMessage": "number is: -98278, need >= 2", + "message": "number is: -98278, need >= 2", + "stackTrace": [ + ... + ] + } + } + }, + ... +} +``` + +可以看到 watch 结果的 value 变成 map 对象,程序可以通过 key 读取结果。 diff --git a/site-vuepress/docs/doc/idea-plugin.md b/site-vuepress/docs/doc/idea-plugin.md new file mode 100644 index 000000000..302304e4a --- /dev/null +++ b/site-vuepress/docs/doc/idea-plugin.md @@ -0,0 +1,23 @@ +# IDEA Plugin + +#### Arthas-idea(部分命令可视化) + +::: tip +插件由社区开发者提供。 +::: + +- Jetbrains 插件获取地址: [https://plugins.jetbrains.com/plugin/13581-arthas-idea](https://plugins.jetbrains.com/plugin/13581-arthas-idea) +- 使用文档:[https://www.yuque.com/arthas-idea-plugin](https://www.yuque.com/arthas-idea-plugin) +- 源码地址: [https://github.com/WangJi92/arthas-idea-plugin](https://github.com/WangJi92/arthas-idea-plugin) + +#### Alibaba Cloud Toolkit 热部署组件(一键 retransform) + +::: tip +热部署组件支持一键将编辑器中修改的 Java 源码快速编译,并更新到远端应用服务中,免去手动 dump、mc 的过程。此外,也可以一键还原 retransform 的类文件。 +::: + +![](/images/alibabacloud_hotreload.png) + +- Jetbrains 插件获取地址: [https://plugins.jetbrains.com/plugin/11386-alibaba-cloud-toolkit](https://plugins.jetbrains.com/plugin/11386-alibaba-cloud-toolkit) +- 使用文档:[https://help.aliyun.com/document_detail/381077.html](https://help.aliyun.com/document_detail/381077.html) +- 联系我们:请加 Alibaba Cloud Toolkit (应用观测器) 钉钉用户交流群(群号:**34965379**) diff --git a/site/src/site/sphinx/install-detail.md b/site-vuepress/docs/doc/install-detail.md similarity index 67% rename from site/src/site/sphinx/install-detail.md rename to site-vuepress/docs/doc/install-detail.md index 88c65c09d..2b4818b3a 100644 --- a/site/src/site/sphinx/install-detail.md +++ b/site-vuepress/docs/doc/install-detail.md @@ -1,5 +1,4 @@ -Arthas Install -============= +# Arthas Install ## 快速安装 @@ -18,11 +17,11 @@ java -jar arthas-boot.jar java -jar arthas-boot.jar -h ``` -* 如果下载速度比较慢,可以使用aliyun的镜像: +- 如果下载速度比较慢,可以使用 aliyun 的镜像: - ```bash - java -jar arthas-boot.jar --repo-mirror aliyun --use-http - ``` + ```bash + java -jar arthas-boot.jar --repo-mirror aliyun --use-http + ``` ### 使用`as.sh` @@ -34,7 +33,7 @@ curl -L https://arthas.aliyun.com/install.sh | sh 上述命令会下载启动脚本文件 `as.sh` 到当前目录,你可以放在任何地方或将其加入到 `$PATH` 中。 -直接在shell下面执行`./as.sh`,就会进入交互界面。 +直接在 shell 下面执行`./as.sh`,就会进入交互界面。 也可以执行`./as.sh -h`来获取更多参数信息。 @@ -54,29 +53,27 @@ java -jar arthas-boot.jar java -jar arthas-boot.jar -h ``` - ## 手动安装 [手动安装](manual-install.md) +## 通过 rpm/deb 来安装 +在 releases 页面下载 rpm/deb 包: https://github.com/alibaba/arthas/releases -## 通过rpm/deb来安装 - -在releases页面下载rpm/deb包: https://github.com/alibaba/arthas/releases - -### 安装deb +### 安装 deb ```bash sudo dpkg -i arthas*.deb ``` -### 安装rpm + +### 安装 rpm ```bash sudo rpm -i arthas*.rpm ``` -### deb/rpm安装的用法 +### deb/rpm 安装的用法 在安装后,可以直接执行: @@ -84,9 +81,9 @@ sudo rpm -i arthas*.rpm as.sh ``` -## 通过Cloud Toolkit插件使用Arthas +## 通过 Cloud Toolkit 插件使用 Arthas -* [通过Cloud Toolkit插件使用Arthas一键诊断远程服务器](https://github.com/alibaba/arthas/issues/570) +- [通过 Cloud Toolkit 插件使用 Arthas 一键诊断远程服务器](https://github.com/alibaba/arthas/issues/570) ## 离线帮助文档 @@ -94,12 +91,13 @@ as.sh ## 卸载 -* 在 Linux/Unix/Mac 平台 +- 在 Linux/Unix/Mac 平台 + + 删除下面文件: - 删除下面文件: - ```bash - rm -rf ~/.arthas/ - rm -rf ~/logs/arthas - ``` + ```bash + rm -rf ~/.arthas/ + rm -rf ~/logs/arthas + ``` -* Windows平台直接删除user home下面的`.arthas`和`logs/arthas`目录 +- Windows 平台直接删除 user home 下面的`.arthas`和`logs/arthas`目录 diff --git a/site/src/site/sphinx/jad.md b/site-vuepress/docs/doc/jad.md similarity index 73% rename from site/src/site/sphinx/jad.md rename to site-vuepress/docs/doc/jad.md index 5cc57e213..a96800e01 100644 --- a/site/src/site/sphinx/jad.md +++ b/site-vuepress/docs/doc/jad.md @@ -1,23 +1,24 @@ -jad -=== +# jad [`jad`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=command-jad) -> 反编译指定已加载类的源码 +::: tip +反编译指定已加载类的源码 +::: `jad` 命令将 JVM 中实际运行的 class 的 byte code 反编译成 java 代码,便于你理解业务逻辑; -* 在 Arthas Console 上,反编译出来的源码是带语法高亮的,阅读更方便 -* 当然,反编译出来的 java 代码可能会存在语法错误,但不影响你进行阅读理解 +- 在 Arthas Console 上,反编译出来的源码是带语法高亮的,阅读更方便 +- 当然,反编译出来的 java 代码可能会存在语法错误,但不影响你进行阅读理解 ### 参数说明 -|参数名称|参数说明| -|---:|:---| -|*class-pattern*|类名表达式匹配| -|`[c:]`|类所属 ClassLoader 的 hashcode| -|`[classLoaderClass:]`|指定执行表达式的 ClassLoader 的 class name| -|[E]|开启正则表达式匹配,默认为通配符匹配| +| 参数名称 | 参数说明 | +| --------------------: | :----------------------------------------- | +| _class-pattern_ | 类名表达式匹配 | +| `[c:]` | 类所属 ClassLoader 的 hashcode | +| `[classLoaderClass:]` | 指定执行表达式的 ClassLoader 的 class name | +| [E] | 开启正则表达式匹配,默认为通配符匹配 | ### 使用参考 @@ -106,7 +107,7 @@ Location: #### 反编译时不显示行号 -`--lineNumber` 参数默认值为true,显示指定为false则不打印行号。 +`--lineNumber` 参数默认值为 true,显示指定为 false 则不打印行号。 ```java $ jad demo.MathGame main --lineNumber false @@ -127,9 +128,11 @@ public static void main(String[] args) throws InterruptedException { } ``` -#### 反编译时指定ClassLoader +#### 反编译时指定 ClassLoader -> 当有多个 `ClassLoader` 都加载了这个类时,`jad` 命令会输出对应 `ClassLoader` 实例的 `hashcode`,然后你只需要重新执行 `jad` 命令,并使用参数 `-c ` 就可以反编译指定 ClassLoader 加载的那个类了; +::: tip +当有多个 `ClassLoader` 都加载了这个类时,`jad` 命令会输出对应 `ClassLoader` 实例的 `hashcode`,然后你只需要重新执行 `jad` 命令,并使用参数 `-c ` 就可以反编译指定 ClassLoader 加载的那个类了; +::: ```java $ jad org.apache.log4j.Logger @@ -170,6 +173,6 @@ public class Logger extends Category Affect(row-cnt:1) cost in 190 ms. ``` -对于只有唯一实例的ClassLoader还可以通过`--classLoaderClass`指定class name,使用起来更加方便: +对于只有唯一实例的 ClassLoader 还可以通过`--classLoaderClass`指定 class name,使用起来更加方便: -`--classLoaderClass` 的值是ClassLoader的类名,只有匹配到唯一的ClassLoader实例时才能工作,目的是方便输入通用命令,而`-c `是动态变化的。 +`--classLoaderClass` 的值是 ClassLoader 的类名,只有匹配到唯一的 ClassLoader 实例时才能工作,目的是方便输入通用命令,而`-c `是动态变化的。 diff --git a/site/src/site/sphinx/jvm.md b/site-vuepress/docs/doc/jvm.md similarity index 69% rename from site/src/site/sphinx/jvm.md rename to site-vuepress/docs/doc/jvm.md index f2ff854e0..a403271e9 100644 --- a/site/src/site/sphinx/jvm.md +++ b/site-vuepress/docs/doc/jvm.md @@ -1,9 +1,10 @@ -jvm -=== +# jvm [`jvm`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-jvm) -> 查看当前JVM信息 +::: tip +查看当前 JVM 信息 +::: ### 使用参考 @@ -46,13 +47,13 @@ RUNTIME -------------------------------------------------------------------------------------------------------------- GARBAGE-COLLECTORS -------------------------------------------------------------------------------------------------------------- - PS Scavenge name : PS Scavenge - [count/time (ms)] collectionCount : 7 - collectionTime : 68 - - PS MarkSweep name : PS MarkSweep - [count/time (ms)] collectionCount : 1 - collectionTime : 47 + PS Scavenge name : PS Scavenge + [count/time (ms)] collectionCount : 7 + collectionTime : 68 + + PS MarkSweep name : PS MarkSweep + [count/time (ms)] collectionCount : 1 + collectionTime : 47 -------------------------------------------------------------------------------------------------------------- MEMORY-MANAGERS @@ -73,15 +74,15 @@ RUNTIME -------------------------------------------------------------------------------------------------------------- MEMORY -------------------------------------------------------------------------------------------------------------- - HEAP-MEMORY-USAGE init : 268435456(256.0 MiB) - [memory in bytes] used : 18039504(17.2 MiB) - committed : 181403648(173.0 MiB) - max : 3817865216(3.6 GiB) - - NO-HEAP-MEMORY-USAGE init : 2555904(2.4 MiB) - [memory in bytes] used : 33926216(32.4 MiB) - committed : 35176448(33.5 MiB) - max : -1(-1 B) + HEAP-MEMORY-USAGE init : 268435456(256.0 MiB) + [memory in bytes] used : 18039504(17.2 MiB) + committed : 181403648(173.0 MiB) + max : 3817865216(3.6 GiB) + + NO-HEAP-MEMORY-USAGE init : 2555904(2.4 MiB) + [memory in bytes] used : 33926216(32.4 MiB) + committed : 35176448(33.5 MiB) + max : -1(-1 B) -------------------------------------------------------------------------------------------------------------- OPERATING-SYSTEM @@ -109,15 +110,15 @@ RUNTIME Affect(row-cnt:0) cost in 88 ms. ``` -### THREAD相关 +### THREAD 相关 -* COUNT: JVM当前活跃的线程数 -* DAEMON-COUNT: JVM当前活跃的守护线程数 -* PEAK-COUNT: 从JVM启动开始曾经活着的最大线程数 -* STARTED-COUNT: 从JVM启动开始总共启动过的线程次数 -* DEADLOCK-COUNT: JVM当前死锁的线程数 +- COUNT: JVM 当前活跃的线程数 +- DAEMON-COUNT: JVM 当前活跃的守护线程数 +- PEAK-COUNT: 从 JVM 启动开始曾经活着的最大线程数 +- STARTED-COUNT: 从 JVM 启动开始总共启动过的线程次数 +- DEADLOCK-COUNT: JVM 当前死锁的线程数 ### 文件描述符相关 -* MAX-FILE-DESCRIPTOR-COUNT:JVM进程最大可以打开的文件描述符数 -* OPEN-FILE-DESCRIPTOR-COUNT:JVM当前打开的文件描述符数 +- MAX-FILE-DESCRIPTOR-COUNT:JVM 进程最大可以打开的文件描述符数 +- OPEN-FILE-DESCRIPTOR-COUNT:JVM 当前打开的文件描述符数 diff --git a/site/src/site/sphinx/keymap.md b/site-vuepress/docs/doc/keymap.md similarity index 56% rename from site/src/site/sphinx/keymap.md rename to site-vuepress/docs/doc/keymap.md index 6d50eca41..254d1845c 100644 --- a/site/src/site/sphinx/keymap.md +++ b/site-vuepress/docs/doc/keymap.md @@ -1,5 +1,4 @@ -Arthas 命令行快捷键 -=== +# Arthas 命令行快捷键 [`keymap`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-keymap) @@ -7,42 +6,36 @@ Arthas 命令行快捷键 默认的快捷键如下: - - - - -| 快捷键 | 快捷键说明 | 命令名称 | 命令说明 | -| ------------- | ---------------- | -------------------- | ---------------- | -| `"\C-a"` | ctrl + a | beginning-of-line | 跳到行首 | -| ` "\C-e"` | ctrl + e | end-of-line | 跳到行尾 | -| `"\C-f"` | ctrl + f | forward-word | 向前移动一个单词 | -| `"\C-b"` | ctrl + b | backward-word | 向后移动一个单词 | -| `"\e[D"` | 键盘左方向键 | backward-char | 光标向前移动一个字符 | -| `"\e[C"` | 键盘右方向键 | forward-char | 光标向后移动一个字符 | -| `"\e[B"` | 键盘下方向键 | next-history | 下翻显示下一个命令 | -| `"\e[A"` | 键盘上方向键 | previous-history | 上翻显示上一个命令 | -| `"\C-h"` | ctrl + h | backward-delete-char | 向后删除一个字符 | -| `"\C-?"` | ctrl + shift + / | backward-delete-char | 向后删除一个字符 | +| 快捷键 | 快捷键说明 | 命令名称 | 命令说明 | +| ------------- | ---------------- | -------------------- | -------------------------------- | +| `"\C-a"` | ctrl + a | beginning-of-line | 跳到行首 | +| ` "\C-e"` | ctrl + e | end-of-line | 跳到行尾 | +| `"\C-f"` | ctrl + f | forward-word | 向前移动一个单词 | +| `"\C-b"` | ctrl + b | backward-word | 向后移动一个单词 | +| `"\e[D"` | 键盘左方向键 | backward-char | 光标向前移动一个字符 | +| `"\e[C"` | 键盘右方向键 | forward-char | 光标向后移动一个字符 | +| `"\e[B"` | 键盘下方向键 | next-history | 下翻显示下一个命令 | +| `"\e[A"` | 键盘上方向键 | previous-history | 上翻显示上一个命令 | +| `"\C-h"` | ctrl + h | backward-delete-char | 向后删除一个字符 | +| `"\C-?"` | ctrl + shift + / | backward-delete-char | 向后删除一个字符 | | `"\C-u"` | ctrl + u | undo | 撤销上一个命令,相当于清空当前行 | -| `"\C-d"` | ctrl + d | delete-char | 删除当前光标所在字符 | -| `"\C-k"` | ctrl + k | kill-line | 删除当前光标到行尾的所有字符 | -| `"\C-i"` | ctrl + i | complete | 自动补全,相当于敲`TAB` | -| `"\C-j"` | ctrl + j | accept-line | 结束当前行,相当于敲回车 | -| `"\C-m"` | ctrl + m | accept-line | 结束当前行,相当于敲回车 | -| `"\C-w"` | | backward-delete-word | | -| `"\C-x\e[3~"` | | backward-kill-line | | -| `"\e\C-?"` | | backward-kill-word | | - - -* 任何时候 `tab` 键,会根据当前的输入给出提示 -* 命令后敲 `-` 或 `--` ,然后按 `tab` 键,可以展示出此命令具体的选项 - +| `"\C-d"` | ctrl + d | delete-char | 删除当前光标所在字符 | +| `"\C-k"` | ctrl + k | kill-line | 删除当前光标到行尾的所有字符 | +| `"\C-i"` | ctrl + i | complete | 自动补全,相当于敲`TAB` | +| `"\C-j"` | ctrl + j | accept-line | 结束当前行,相当于敲回车 | +| `"\C-m"` | ctrl + m | accept-line | 结束当前行,相当于敲回车 | +| `"\C-w"` | | backward-delete-word | | +| `"\C-x\e[3~"` | | backward-kill-line | | +| `"\e\C-?"` | | backward-kill-word | | + +- 任何时候 `tab` 键,会根据当前的输入给出提示 +- 命令后敲 `-` 或 `--` ,然后按 `tab` 键,可以展示出此命令具体的选项 #### 自定义快捷键 在当前用户目录下新建`$USER_HOME/.arthas/conf/inputrc`文件,加入自定义配置。 -假设我是vim的重度用户,我要把`ctrl+h`设置为光标向前一个字符,则设置如下,首先拷贝默认配置 +假设我是 vim 的重度用户,我要把`ctrl+h`设置为光标向前一个字符,则设置如下,首先拷贝默认配置 ``` "\C-a": beginning-of-line @@ -70,11 +63,7 @@ Arthas 命令行快捷键 #### 后台异步命令相关快捷键 -* ctrl + c: 终止当前命令 -* ctrl + z: 挂起当前命令,后续可以 bg/fg 重新支持此命令,或 kill 掉 -* ctrl + a: 回到行首 -* ctrl + e: 回到行尾 - - - - +- ctrl + c: 终止当前命令 +- ctrl + z: 挂起当前命令,后续可以 bg/fg 重新支持此命令,或 kill 掉 +- ctrl + a: 回到行首 +- ctrl + e: 回到行尾 diff --git a/site/src/site/sphinx/logger.md b/site-vuepress/docs/doc/logger.md similarity index 84% rename from site/src/site/sphinx/logger.md rename to site-vuepress/docs/doc/logger.md index 57b53fb42..91dfdd85e 100644 --- a/site/src/site/sphinx/logger.md +++ b/site-vuepress/docs/doc/logger.md @@ -1,13 +1,14 @@ -logger -=== +# logger [`logger`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=command-logger) -> 查看logger信息,更新logger level +::: tip +查看 logger 信息,更新 logger level +::: ### 使用参考 -#### 查看所有logger信息 +#### 查看所有 logger 信息 以下面的`logback.xml`为例: @@ -46,7 +47,6 @@ logger ``` - 使用`logger`命令打印的结果是: ```bash @@ -78,12 +78,11 @@ logger 从`appenders`的信息里,可以看到 -* `CONSOLE` logger的target是`System.out` -* `APPLICATION` logger是`RollingFileAppender`,它的file是`app.log` -* `ASYNC`它的`appenderRef`是`APPLICATION`,即异步输出到文件里 - +- `CONSOLE` logger 的 target 是`System.out` +- `APPLICATION` logger 是`RollingFileAppender`,它的 file 是`app.log` +- `ASYNC`它的`appenderRef`是`APPLICATION`,即异步输出到文件里 -#### 查看指定名字的logger信息 +#### 查看指定名字的 logger 信息 ```bash [arthas@2062]$ logger -n org.springframework.web @@ -97,11 +96,11 @@ logger codeSource file:/Users/hengyunabc/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar ``` -#### 查看指定classloader的logger信息 +#### 查看指定 classloader 的 logger 信息 -注意hashcode是变化的,需要先查看当前的ClassLoader信息,提取对应ClassLoader的hashcode。 +注意 hashcode 是变化的,需要先查看当前的 ClassLoader 信息,提取对应 ClassLoader 的 hashcode。 -如果你使用`-c`,你需要手动输入hashcode:`-c ` +如果你使用`-c`,你需要手动输入 hashcode:`-c ` ```bash [arthas@2062]$ logger -c 2a139a55 @@ -130,35 +129,34 @@ logger appenderRef [APPLICATION] ``` -对于只有唯一实例的ClassLoader可以通过`--classLoaderClass`指定class name,使用起来更加方便: +对于只有唯一实例的 ClassLoader 可以通过`--classLoaderClass`指定 class name,使用起来更加方便: `logger --classLoaderClass sun.misc.Launcher$AppClassLoader` - * 注: 这里classLoaderClass 在 java 8 是 sun.misc.Launcher$AppClassLoader,而java 11的classloader是jdk.internal.loader.ClassLoaders$AppClassLoader。 +- 注: 这里 classLoaderClass 在 java 8 是 sun.misc.Launcher$AppClassLoader,而java 11的classloader是jdk.internal.loader.ClassLoaders$AppClassLoader。 -`--classLoaderClass` 的值是ClassLoader的类名,只有匹配到唯一的ClassLoader实例时才能工作,目的是方便输入通用命令,而`-c `是动态变化的。 +`--classLoaderClass` 的值是 ClassLoader 的类名,只有匹配到唯一的 ClassLoader 实例时才能工作,目的是方便输入通用命令,而`-c `是动态变化的。 -#### 更新logger level +#### 更新 logger level ```bash [arthas@2062]$ logger --name ROOT --level debug update logger level success. ``` -#### 指定classloader更新 logger level +#### 指定 classloader 更新 logger level -默认情况下,logger命令会在SystemClassloader下执行,如果应用是传统的`war`应用,或者spring boot fat jar启动的应用,那么需要指定classloader。 +默认情况下,logger 命令会在 SystemClassloader 下执行,如果应用是传统的`war`应用,或者 spring boot fat jar 启动的应用,那么需要指定 classloader。 -可以先用 `sc -d yourClassName` 来查看具体的 classloader hashcode,然后在更新level时指定classloader: +可以先用 `sc -d yourClassName` 来查看具体的 classloader hashcode,然后在更新 level 时指定 classloader: ```bash [arthas@2062]$ logger -c 2a139a55 --name ROOT --level debug ``` -#### 查看没有appender的logger的信息 - +#### 查看没有 appender 的 logger 的信息 -默认情况下,`logger`命令只打印有appender的logger的信息。如果想查看没有`appender`的logger的信息,可以加上参数`--include-no-appender`。 +默认情况下,`logger`命令只打印有 appender 的 logger 的信息。如果想查看没有`appender`的 logger 的信息,可以加上参数`--include-no-appender`。 注意,通常输出结果会很长。 diff --git a/site-vuepress/docs/doc/manual-install.md b/site-vuepress/docs/doc/manual-install.md new file mode 100644 index 000000000..3d133b4ce --- /dev/null +++ b/site-vuepress/docs/doc/manual-install.md @@ -0,0 +1,112 @@ +# 手动安装 Arthas + +1. 下载最新版本 + + **最新版本,点击下载**:[![](https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square "Arthas")](https://arthas.aliyun.com/download/latest_version?mirror=aliyun) + +2. 解压缩 arthas 的压缩包 + + ``` + unzip arthas-packaging-bin.zip + ``` + +3. 安装 Arthas + + 安装之前最好把所有老版本的 Arthas 全都删掉 + + ``` + sudo su admin + rm -rf /home/admin/.arthas/lib/* + cd arthas + ./install-local.sh + ``` + + ::: warning + 注意,这里根据你需要诊断的 Java 进程的所属用户进行切换 + ::: + +4. 启动 Arthas + + 启动之前,请确保老版本的 Arthas 已经`stop`. + + ``` + ./as.sh + ``` + +## 以脚本的方式启动 as.sh/as.bat + +### Linux/Unix/Mac + +Arthas 支持在 Linux/Unix/Mac 等平台上一键安装,请复制以下内容,并粘贴到命令行中,敲 `回车` 执行即可: + +```bash +curl -L https://arthas.aliyun.com/install.sh | sh +``` + +上述命令会下载启动脚本文件 `as.sh` 到当前目录,你可以放在任何地方或将其加入到 `$PATH` 中。 + +直接在 shell 下面执行`./as.sh`,就会进入交互界面。 + +也可以执行`./as.sh -h`来获取更多参数信息。 + +### Windows + +最新版本,点击下载:[![](https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square "Arthas")](https://arthas.aliyun.com/download/latest_version?mirror=aliyun) + +下载解压后在 bin 目录有 `as.bat`。此脚本暂时只接受一个参数 pid,即只能诊断本机上的 Java 进程。(欢迎精通 bat 脚本的开发者改进) + +``` +as.bat +``` + +使用以下命令诊断 windows 服务模式运行的 Java 进程 (--interact 打开服务 UI 交互模式,方便诊断问题): + +``` +as-service.bat -port +as-service.bat -pid +as-service.bat -pid --interact +``` + +清理 arthas windows 服务执行以下命令: + +``` +as-service.bat -remove +``` + +## 手动拼接命令行启动 + +如果启动遇到问题,可以尝试手动拼接出命令行参数来启动。 + +1. 查找目录 jvm 的 java 文件路径。 + + 在 linux/mac 上执行`ps aux | grep java`,在 windows 上可以通过进程管理器来查看。假设是`/opt/jdk1.8/bin/java`。 + +2. 拼接出命令行 + + ```bash + /opt/jdk1.8/bin/java -Xbootclasspath/a:/opt/jdk1.8/lib/tools.jar \ + -jar /tmp/arthas-packaging/arthas-core.jar \ + -pid 15146 \ + -target-ip 127.0.0.1 -telnet-port 3658 -http-port 8563 \ + -core /tmp/arthas-packaging/arthas-core.jar \ + -agent /tmp/arthas-packaging/arthas/arthas-agent.jar + ``` + + 命令行分几部分组成: + + - `-Xbootclasspath` 增加 tools.jar + - `-jar /tmp/arthas-packaging/arthas-core.jar` 指定 main 函数入口 + - `-pid 15146` 指定目标 java 进程 ID + - `-target-ip 127.0.0.1` 指定 IP + - `-telnet-port 3658 -http-port 8563` 指定 telnet 和 http 端口 + - `-core /tmp/arthas-packaging/arthas-core.jar -agent /tmp/arthas-packaging/arthas/arthas-agent.jar` 指定 core/agent jar 包 + + 如果是`jdk > 9`,即 9/10/11 以上的版本,不需要指定`tools.jar`,直接去掉`-Xbootclasspath` 的配置即可。 + + 启动目志输出在`~/logs/arthas/arthas.log`里。 + +3. attach 成功之后,使用 telnet 连接 + + ```bash + telnet 127.0.0.1 3658 + ``` diff --git a/site-vuepress/docs/doc/mbean.md b/site-vuepress/docs/doc/mbean.md new file mode 100644 index 000000000..733a5d37b --- /dev/null +++ b/site-vuepress/docs/doc/mbean.md @@ -0,0 +1,68 @@ +# mbean + +[`mbean`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-mbean) + +::: tip +查看 Mbean 的信息 +::: + +这个命令可以便捷的查看或监控 Mbean 的属性信息。 + +### 参数说明 + +| 参数名称 | 参数说明 | +| ------------------: | :--------------------------------------------------- | +| _name-pattern_ | 名称表达式匹配 | +| _attribute-pattern_ | 属性名表达式匹配 | +| [m] | 查看元信息 | +| [i:] | 刷新属性值的时间间隔 (ms) | +| [n:] | 刷新属性值的次数 | +| [E] | 开启正则表达式匹配,默认为通配符匹配。仅对属性名有效 | + +### 使用参考 + +列出所有 Mbean 的名称: + +```bash +mbean +``` + +查看 Mbean 的元信息: + +```bash +mbean -m java.lang:type=Threading +``` + +查看 mbean 属性信息: + +```bash +mbean java.lang:type=Threading +``` + +mbean 的 name 支持通配符匹配: + +```bash +mbean java.lang:type=Th* +``` + +::: warning +注意:ObjectName 的匹配规则与正常的通配符存在差异,详细参见:[javax.management.ObjectName](https://docs.oracle.com/javase/8/docs/api/javax/management/ObjectName.html?is-external=true) +::: + +通配符匹配特定的属性字段: + +```bash +mbean java.lang:type=Threading *Count +``` + +使用`-E`命令切换为正则匹配: + +```bash +mbean -E java.lang:type=Threading PeakThreadCount|ThreadCount|DaemonThreadCount +``` + +使用`-i`命令实时监控: + +```bash +mbean -i 1000 java.lang:type=Threading *Count +``` diff --git a/site/src/site/sphinx/mc.md b/site-vuepress/docs/doc/mc.md similarity index 62% rename from site/src/site/sphinx/mc.md rename to site-vuepress/docs/doc/mc.md index 937edb320..a8547d501 100644 --- a/site/src/site/sphinx/mc.md +++ b/site-vuepress/docs/doc/mc.md @@ -1,21 +1,22 @@ -mc -=== +# mc [`mc-retransform`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=command-mc-retransform) -> Memory Compiler/内存编译器,编译`.java`文件生成`.class`。 +::: tip +Memory Compiler/内存编译器,编译`.java`文件生成`.class`。 +::: ```bash mc /tmp/Test.java ``` -可以通过`-c`参数指定classloader: +可以通过`-c`参数指定 classloader: ```bash mc -c 327a647b /tmp/Test.java ``` -也可以通过`--classLoaderClass`参数指定ClassLoader: +也可以通过`--classLoaderClass`参数指定 ClassLoader: ```bash $ mc --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader /tmp/UserController.java -d /tmp @@ -32,4 +33,6 @@ mc -d /tmp/output /tmp/ClassA.java /tmp/ClassB.java 编译生成`.class`文件之后,可以结合[retransform](retransform.md)命令实现热更新代码。 -> 注意,mc命令有可能失败。如果编译失败可以在本地编译好`.class`文件,再上传到服务器。具体参考[retransform](retransform.md)命令说明。 \ No newline at end of file +::: warning +注意,mc 命令有可能失败。如果编译失败可以在本地编译好`.class`文件,再上传到服务器。具体参考[retransform](retransform.md)命令说明。 +::: diff --git a/site/src/site/sphinx/memory.md b/site-vuepress/docs/doc/memory.md similarity index 96% rename from site/src/site/sphinx/memory.md rename to site-vuepress/docs/doc/memory.md index 401c97d19..0102ce28a 100644 --- a/site/src/site/sphinx/memory.md +++ b/site-vuepress/docs/doc/memory.md @@ -1,8 +1,6 @@ -memory -=== - -查看JVM 内存信息。 +# memory +查看 JVM 内存信息。 ### 使用参考 @@ -22,4 +20,3 @@ codeheap_'non-profiled_nmethods' 685K 2496K 120032K 0.57% mapped 0K 0K - 0.00% direct 48M 48M - 100.00% ``` - diff --git a/site/src/site/sphinx/monitor.md b/site-vuepress/docs/doc/monitor.md similarity index 74% rename from site/src/site/sphinx/monitor.md rename to site-vuepress/docs/doc/monitor.md index e86f8d816..fc1245432 100644 --- a/site/src/site/sphinx/monitor.md +++ b/site-vuepress/docs/doc/monitor.md @@ -1,9 +1,10 @@ -monitor -======= +# monitor [`monitor`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-monitor) -> 方法执行监控 +::: tip +方法执行监控 +::: 对匹配 `class-pattern`/`method-pattern`/`condition-express`的类、方法的调用进行监控。 @@ -11,33 +12,33 @@ monitor 实时返回命令是输入之后立即返回,而非实时返回的命令,则是不断的等待目标 Java 进程返回信息,直到用户输入 `Ctrl+C` 为止。 -服务端是以任务的形式在后台跑任务,植入的代码随着任务的中止而不会被执行,所以任务关闭后,不会对原有性能产生太大影响,而且原则上,任何Arthas命令不会引起原有业务逻辑的改变。 +服务端是以任务的形式在后台跑任务,植入的代码随着任务的中止而不会被执行,所以任务关闭后,不会对原有性能产生太大影响,而且原则上,任何 Arthas 命令不会引起原有业务逻辑的改变。 ### 监控的维度说明 -|监控项|说明| -|---:|:---| -|timestamp|时间戳| -|class|Java类| -|method|方法(构造方法、普通方法)| -|total|调用次数| -|success|成功次数| -|fail|失败次数| -|rt|平均RT| -|fail-rate|失败率| +| 监控项 | 说明 | +| --------: | :------------------------- | +| timestamp | 时间戳 | +| class | Java 类 | +| method | 方法(构造方法、普通方法) | +| total | 调用次数 | +| success | 成功次数 | +| fail | 失败次数 | +| rt | 平均 RT | +| fail-rate | 失败率 | ### 参数说明 方法拥有一个命名参数 `[c:]`,意思是统计周期(cycle of output),拥有一个整型的参数值 -|参数名称|参数说明| -|---:|:---| -|*class-pattern*|类名表达式匹配| -|*method-pattern*|方法名表达式匹配| -|*condition-express*|条件表达式| -|[E]|开启正则表达式匹配,默认为通配符匹配| -|`[c:]`|统计周期,默认值为120秒| -|[b]|在**方法调用之前**计算condition-express| +| 参数名称 | 参数说明 | +| ------------------: | :--------------------------------------- | +| _class-pattern_ | 类名表达式匹配 | +| _method-pattern_ | 方法名表达式匹配 | +| _condition-express_ | 条件表达式 | +| [E] | 开启正则表达式匹配,默认为通配符匹配 | +| `[c:]` | 统计周期,默认值为 120 秒 | +| [b] | 在**方法调用之前**计算 condition-express | ### 使用参考 @@ -76,52 +77,50 @@ Affect(class-cnt:1 , method-cnt:1) cost in 94 ms. monitor -c 5 demo.MathGame primeFactors "params[0] <= 2" Press Q or Ctrl+C to abort. Affect(class count: 1 , method count: 1) cost in 19 ms, listenerId: 5 - timestamp class method total success fail avg-rt(ms) fail-rate + timestamp class method total success fail avg-rt(ms) fail-rate ----------------------------------------------------------------------------------------------- - 2020-09-02 09:42:36 demo.MathGame primeFactors 5 3 2 0.09 40.00% + 2020-09-02 09:42:36 demo.MathGame primeFactors 5 3 2 0.09 40.00% - timestamp class method total success fail avg-rt(ms) fail-rate + timestamp class method total success fail avg-rt(ms) fail-rate ---------------------------------------------------------------------------------------------- - 2020-09-02 09:42:41 demo.MathGame primeFactors 5 2 3 0.11 60.00% + 2020-09-02 09:42:41 demo.MathGame primeFactors 5 2 3 0.11 60.00% - timestamp class method total success fail avg-rt(ms) fail-rate + timestamp class method total success fail avg-rt(ms) fail-rate ---------------------------------------------------------------------------------------------- - 2020-09-02 09:42:46 demo.MathGame primeFactors 5 1 4 0.06 80.00% + 2020-09-02 09:42:46 demo.MathGame primeFactors 5 1 4 0.06 80.00% - timestamp class method total success fail avg-rt(ms) fail-rate + timestamp class method total success fail avg-rt(ms) fail-rate ---------------------------------------------------------------------------------------------- - 2020-09-02 09:42:51 demo.MathGame primeFactors 5 1 4 0.12 80.00% + 2020-09-02 09:42:51 demo.MathGame primeFactors 5 1 4 0.12 80.00% - timestamp class method total success fail avg-rt(ms) fail-rate + timestamp class method total success fail avg-rt(ms) fail-rate ---------------------------------------------------------------------------------------------- - 2020-09-02 09:42:56 demo.MathGame primeFactors 5 3 2 0.15 40.00% + 2020-09-02 09:42:56 demo.MathGame primeFactors 5 3 2 0.15 40.00% ``` #### 计算条件表达式过滤统计结果(方法执行完毕之前) - ```bash monitor -b -c 5 com.test.testes.MathGame primeFactors "params[0] <= 2" Press Q or Ctrl+C to abort. Affect(class count: 1 , method count: 1) cost in 21 ms, listenerId: 4 - timestamp class method total success fail avg-rt(ms) fail-rate + timestamp class method total success fail avg-rt(ms) fail-rate ---------------------------------------------------------------------------------------------- - 2020-09-02 09:41:57 demo.MathGame primeFactors 1 0 1 0.10 100.00% + 2020-09-02 09:41:57 demo.MathGame primeFactors 1 0 1 0.10 100.00% - timestamp class method total success fail avg-rt(ms) fail-rate + timestamp class method total success fail avg-rt(ms) fail-rate ---------------------------------------------------------------------------------------------- - 2020-09-02 09:42:02 demo.MathGame primeFactors 3 0 3 0.06 100.00% + 2020-09-02 09:42:02 demo.MathGame primeFactors 3 0 3 0.06 100.00% - timestamp class method total success fail avg-rt(ms) fail-rate + timestamp class method total success fail avg-rt(ms) fail-rate ---------------------------------------------------------------------------------------------- - 2020-09-02 09:42:07 demo.MathGame primeFactors 2 0 2 0.06 100.00% + 2020-09-02 09:42:07 demo.MathGame primeFactors 2 0 2 0.06 100.00% - timestamp class method total success fail avg-rt(ms) fail-rate + timestamp class method total success fail avg-rt(ms) fail-rate ---------------------------------------------------------------------------------------------- - 2020-09-02 09:42:12 demo.MathGame primeFactors 1 0 1 0.05 100.00% + 2020-09-02 09:42:12 demo.MathGame primeFactors 1 0 1 0.05 100.00% - timestamp class method total success fail avg-rt(ms) fail-rate + timestamp class method total success fail avg-rt(ms) fail-rate ---------------------------------------------------------------------------------------------- - 2020-09-02 09:42:17 demo.MathGame primeFactors 2 0 2 0.10 100.00% + 2020-09-02 09:42:17 demo.MathGame primeFactors 2 0 2 0.10 100.00% ``` - diff --git a/site/src/site/sphinx/ognl.md b/site-vuepress/docs/doc/ognl.md similarity index 53% rename from site/src/site/sphinx/ognl.md rename to site-vuepress/docs/doc/ognl.md index be7eb7eca..62457294d 100644 --- a/site/src/site/sphinx/ognl.md +++ b/site-vuepress/docs/doc/ognl.md @@ -1,27 +1,26 @@ -ognl -=== +# ognl [`ognl`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=command-ognl) -> 执行ognl表达式 +::: tip +执行 ognl 表达式 +::: -从3.0.5版本增加 +从 3.0.5 版本增加 ### 参数说明 -|参数名称|参数说明| -|---:|:---| -|*express*|执行的表达式| -|`[c:]`|执行表达式的 ClassLoader 的 hashcode,默认值是SystemClassLoader| -|`[classLoaderClass:]`|指定执行表达式的 ClassLoader 的 class name| -|[x]|结果对象的展开层次,默认值1| - +| 参数名称 | 参数说明 | +| --------------------: | :--------------------------------------------------------------- | +| _express_ | 执行的表达式 | +| `[c:]` | 执行表达式的 ClassLoader 的 hashcode,默认值是 SystemClassLoader | +| `[classLoaderClass:]` | 指定执行表达式的 ClassLoader 的 class name | +| [x] | 结果对象的展开层次,默认值 1 | ### 使用参考 -* OGNL特殊用法请参考:[https://github.com/alibaba/arthas/issues/71](https://github.com/alibaba/arthas/issues/71) -* OGNL表达式官方指南:[https://commons.apache.org/proper/commons-ognl/language-guide.html](https://commons.apache.org/proper/commons-ognl/language-guide.html) - +- OGNL 特殊用法请参考:[https://github.com/alibaba/arthas/issues/71](https://github.com/alibaba/arthas/issues/71) +- OGNL 表达式官方指南:[https://commons.apache.org/proper/commons-ognl/language-guide.html](https://commons.apache.org/proper/commons-ognl/language-guide.html) 调用静态函数: @@ -53,15 +52,15 @@ $ ognl '@demo.MathGame@random' ] ``` -通过hashcode指定ClassLoader: +通过 hashcode 指定 ClassLoader: ```bash $ classloader -t -+-BootstrapClassLoader -+-jdk.internal.loader.ClassLoaders$PlatformClassLoader@301ec38b - +-com.taobao.arthas.agent.ArthasClassloader@472067c7 - +-jdk.internal.loader.ClassLoaders$AppClassLoader@4b85612c - +-org.springframework.boot.loader.LaunchedURLClassLoader@7f9a81e8 ++-BootstrapClassLoader ++-jdk.internal.loader.ClassLoaders$PlatformClassLoader@301ec38b + +-com.taobao.arthas.agent.ArthasClassloader@472067c7 + +-jdk.internal.loader.ClassLoaders$AppClassLoader@4b85612c + +-org.springframework.boot.loader.LaunchedURLClassLoader@7f9a81e8 $ ognl -c 7f9a81e8 @org.springframework.boot.SpringApplication@logger @Slf4jLocationAwareLog[ @@ -69,11 +68,12 @@ $ ognl -c 7f9a81e8 @org.springframework.boot.SpringApplication@logger name=@String[org.springframework.boot.SpringApplication], logger=@Logger[Logger[org.springframework.boot.SpringApplication]], ] -$ +$ ``` -注意hashcode是变化的,需要先查看当前的ClassLoader信息,提取对应ClassLoader的hashcode。 -对于只有唯一实例的ClassLoader可以通过class name指定,使用起来更加方便: +注意 hashcode 是变化的,需要先查看当前的 ClassLoader 信息,提取对应 ClassLoader 的 hashcode。 + +对于只有唯一实例的 ClassLoader 可以通过 class name 指定,使用起来更加方便: ```bash $ ognl --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader @org.springframework.boot.SpringApplication@logger @@ -84,8 +84,7 @@ $ ognl --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader ] ``` - -执行多行表达式,赋值给临时变量,返回一个List: +执行多行表达式,赋值给临时变量,返回一个 List: ```bash $ ognl '#value1=@System@getProperty("java.home"), #value2=@System@getProperty("java.runtime.name"), {#value1, #value2}' @@ -93,4 +92,4 @@ $ ognl '#value1=@System@getProperty("java.home"), #value2=@System@getProperty("j @String[/opt/java/8.0.181-zulu/jre], @String[OpenJDK Runtime Environment], ] -``` \ No newline at end of file +``` diff --git a/site/src/site/sphinx/options.md b/site-vuepress/docs/doc/options.md similarity index 56% rename from site/src/site/sphinx/options.md rename to site-vuepress/docs/doc/options.md index 859a771b7..cf2d4da88 100644 --- a/site/src/site/sphinx/options.md +++ b/site-vuepress/docs/doc/options.md @@ -1,25 +1,26 @@ -options -=== +# options [`options`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-options) -> 全局开关 - -| 名称 | 默认值 | 描述 | -| ------------------ | ----- | ---------------------------------------- | -| unsafe | false | 是否支持对系统级别的类进行增强,打开该开关可能导致把JVM搞挂,请慎重选择! | -| dump | false | 是否支持被增强了的类dump到外部文件中,如果打开开关,class文件会被dump到`/${application working dir}/arthas-class-dump/`目录下,具体位置详见控制台输出 | -| batch-re-transform | true | 是否支持批量对匹配到的类执行retransform操作 | -| json-format | false | 是否支持json化的输出 | -| disable-sub-class | false | 是否禁用子类匹配,默认在匹配目标类的时候会默认匹配到其子类,如果想精确匹配,可以关闭此开关 | -| support-default-method | true | 是否支持匹配到default method,默认会查找interface,匹配里面的default method。参考 [#1105](https://github.com/alibaba/arthas/issues/1105) | -| save-result | false | 是否打开执行结果存日志功能,打开之后所有命令的运行结果都将保存到`~/logs/arthas-cache/result.log`中 | -| job-timeout | 1d | 异步后台任务的默认超时时间,超过这个时间,任务自动停止;比如设置 1d, 2h, 3m, 25s,分别代表天、小时、分、秒 | -| print-parent-fields | true | 是否打印在parent class里的filed | -| verbose | false | 是否打印更多详细信息 | -| strict | true | 是否启用strict模式 | - -### 查看所有的options +::: tip +全局开关 +::: + +| 名称 | 默认值 | 描述 | +| ---------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| unsafe | false | 是否支持对系统级别的类进行增强,打开该开关可能导致把 JVM 搞挂,请慎重选择! | +| dump | false | 是否支持被增强了的类 dump 到外部文件中,如果打开开关,class 文件会被 dump 到`/${application working dir}/arthas-class-dump/`目录下,具体位置详见控制台输出 | +| batch-re-transform | true | 是否支持批量对匹配到的类执行 retransform 操作 | +| json-format | false | 是否支持 json 化的输出 | +| disable-sub-class | false | 是否禁用子类匹配,默认在匹配目标类的时候会默认匹配到其子类,如果想精确匹配,可以关闭此开关 | +| support-default-method | true | 是否支持匹配到 default method, 默认会查找 interface,匹配里面的 default method。参考 [#1105](https://github.com/alibaba/arthas/issues/1105) | +| save-result | false | 是否打开执行结果存日志功能,打开之后所有命令的运行结果都将保存到`~/logs/arthas-cache/result.log`中 | +| job-timeout | 1d | 异步后台任务的默认超时时间,超过这个时间,任务自动停止; 比如设置 1d, 2h, 3m, 25s,分别代表天、小时、分、秒 | +| print-parent-fields | true | 是否打印在 parent class 里的 filed | +| verbose | false | 是否打  印更多详细信息 | +| strict | true | 是否启用 strict 模式 | + +### 查看所有的 options ```bash $ options @@ -63,9 +64,7 @@ $ options false` ``` - -### 获取option的值 - +### 获取 option 的值 ``` $ options json-format @@ -76,22 +75,24 @@ $ options json-format ect output ted. ``` -> 默认情况下`json-format`为false,如果希望`watch`/`tt`等命令结果以json格式输出,则可以设置`json-format`为true。 +::: tip +默认情况下`json-format`为 false,如果希望`watch`/`tt`等命令结果以 json 格式输出,则可以设置`json-format`为 true。 +::: -### 设置指定的option +### 设置指定的 option 例如,想打开执行结果存日志功能,输入如下命令即可: ``` -$ options save-result true - NAME BEFORE-VALUE AFTER-VALUE ----------------------------------------- +$ options save-result true + NAME BEFORE-VALUE AFTER-VALUE +---------------------------------------- save-result false true ``` -### 打开unsafe开关,支持jdk package下的类 +### 打开 unsafe 开关,支持 jdk package 下的类 -默认情况下,`watch`/`trace`/`tt`/`trace`/`monitor`等命令不支持`java.*` package下的类。可以设置`unsafe`为true,则可以增强。 +默认情况下,`watch`/`trace`/`tt`/`trace`/`monitor`等命令不支持`java.*` package 下的类。可以设置`unsafe`为 true,则可以增强。 ```bash $ options unsafe true @@ -106,15 +107,17 @@ Press Q or Ctrl+C to abort. Affect(class count: 1 , method count: 1) cost in 61 ms, listenerId: 1 ``` -### 关闭strict模式,允许在ognl表达式里设置对象属性 +### 关闭 strict 模式,允许在 ognl 表达式里设置对象属性 -> since 3.6.0 +::: tip +since 3.6.0 +::: -对于新用户,在编写ognl表达式时,可能会出现误用。 +对于新用户,在编写 ognl 表达式时,可能会出现误用。 -比如对于`Student`,判断年龄等于18时,可能条件表达式会误写为`target.age=18`,这个表达式实际上是把当前对象的`age`设置为18了。正确的写法是`target.age==18`。 +比如对于`Student`,判断年龄等于 18 时,可能条件表达式会误写为`target.age=18`,这个表达式实际上是把当前对象的`age`设置为 18 了。正确的写法是`target.age==18`。 -为了防止出现类似上面的误用,Arthas默认启用`strict`模式,在`ognl`表达式里,禁止更新对象的Property或者调用`setter`函数。 +为了防止出现类似上面的误用,Arthas 默认启用`strict`模式,在`ognl`表达式里,禁止更新对象的 Property 或者调用`setter`函数。 以`MathGame`为例,会出现以下的错误提示。 @@ -127,4 +130,4 @@ watch failed, condition is: target.illegalArgumentCount=1, express is: target, B 用户如果确定要在`ognl`表达式里更新对象,可以执行`options strict false`,关闭`strict`模式。 -* 更多信息参考: https://github.com/alibaba/arthas/issues/2128 \ No newline at end of file +- 更多信息参考: https://github.com/alibaba/arthas/issues/2128 diff --git a/site/src/site/sphinx/perfcounter.md b/site-vuepress/docs/doc/perfcounter.md similarity index 93% rename from site/src/site/sphinx/perfcounter.md rename to site-vuepress/docs/doc/perfcounter.md index 5176e58ee..6c4cc4835 100644 --- a/site/src/site/sphinx/perfcounter.md +++ b/site-vuepress/docs/doc/perfcounter.md @@ -1,9 +1,10 @@ -perfcounter -=== +# perfcounter [`perfcounter`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-perfcounter) -> 查看当前JVM的 Perf Counter信息 +::: tip +查看当前 JVM 的 Perf Counter 信息 +::: ### 使用参考 @@ -33,10 +34,10 @@ $ perfcounter -d java.cls.unloadedClasses Monotonic Events 0 ``` -### jdk9以上的应用 +### jdk9 以上的应用 如果没有打印出信息,应用在启动时,加下面的参数: ``` --add-opens java.base/jdk.internal.perf=ALL-UNNAMED --add-exports java.base/jdk.internal.perf=ALL-UNNAMED -``` \ No newline at end of file +``` diff --git a/site/src/site/sphinx/profiler.md b/site-vuepress/docs/doc/profiler.md similarity index 53% rename from site/src/site/sphinx/profiler.md rename to site-vuepress/docs/doc/profiler.md index 388977c79..c0656a2d4 100644 --- a/site/src/site/sphinx/profiler.md +++ b/site-vuepress/docs/doc/profiler.md @@ -1,9 +1,10 @@ -profiler -=== +# profiler [`profiler`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-profiler) -> 使用[async-profiler](https://github.com/jvm-profiling-tools/async-profiler)生成火焰图 +::: tip +使用[async-profiler](https://github.com/jvm-profiling-tools/async-profiler)生成火焰图 +::: `profiler` 命令支持生成应用热点的火焰图。本质上是通过不断的采样,然后把收集到的采样结果生成火焰图。 @@ -11,44 +12,45 @@ profiler ### 参数说明 -|参数名称|参数说明| -|---:|:---| -|*action*|要执行的操作| -|*actionArg*|属性名模式| -|[i:]|采样间隔(单位:ns)(默认值:10'000'000,即10 ms)| -|[f:]|将输出转储到指定路径| -|[d:]|运行评测指定秒| -|[e:]|要跟踪哪个事件(cpu, alloc, lock, cache-misses等),默认是cpu| - -### 启动profiler +| 参数名称 | 参数说明 | +| ----------: | :-------------------------------------------------------------- | +| _action_ | 要执行的操作 | +| _actionArg_ | 属性名模式 | +| [i:] | 采样间隔(单位:ns)(默认值:10'000'000,即 10 ms) | +| [f:] | 将输出转储到指定路径 | +| [d:] | 运行评测指定秒 | +| [e:] | 要跟踪哪个事件(cpu, alloc, lock, cache-misses 等),默认是 cpu | +### 启动 profiler ``` $ profiler start Started [cpu] profiling ``` -> 默认情况下,生成的是cpu的火焰图,即event为`cpu`。可以用`--event`参数来指定。 - +::: tip +默认情况下,生成的是 cpu 的火焰图,即 event 为`cpu`。可以用`--event`参数来指定。 +::: -### 获取已采集的sample的数量 +### 获取已采集的 sample 的数量 ``` $ profiler getSamples 23 ``` -### 查看profiler状态 +### 查看 profiler 状态 ```bash $ profiler status [cpu] profiling is running for 4 seconds ``` -可以查看当前profiler在采样哪种`event`和采样时间。 +可以查看当前 profiler 在采样哪种`event`和采样时间。 + +### 停止 profiler -### 停止profiler -#### 生成html格式结果 +#### 生成 html 格式结果 默认情况下,结果文件是`html`格式,也可以用`--format`参数指定: @@ -60,22 +62,23 @@ OK 或者在`--file`参数里用文件名指名格式。比如`--file /tmp/result.html` 。 +### 通过浏览器查看 arthas-output 下面的 profiler 结果 -### 通过浏览器查看arthas-output下面的profiler结果 +默认情况下,arthas 使用 3658 端口,则可以打开: [http://localhost:3658/arthas-output/](http://localhost:3658/arthas-output/) 查看到`arthas-output`目录下面的 profiler 结果: -默认情况下,arthas使用3658端口,则可以打开: [http://localhost:3658/arthas-output/](http://localhost:3658/arthas-output/) 查看到`arthas-output`目录下面的profiler结果: - -![](_static/arthas-output.jpg) +![](/images/arthas-output.jpg) 点击可以查看具体的结果: -![](_static/arthas-output-svg.jpg) +![](/images/arthas-output-svg.jpg) -> 如果是chrome浏览器,可能需要多次刷新。 +::: tip +如果是 chrome 浏览器,可能需要多次刷新。 +::: -### profiler支持的events +### profiler 支持的 events -在不同的平台,不同的OS下面,支持的events各有不同。比如在macos下面: +在不同的平台,不同的 OS 下面,支持的 events 各有不同。比如在 macos 下面: ```bash $ profiler list @@ -87,7 +90,7 @@ Basic events: itimer ``` -在linux下面 +在 linux 下面 ```bash $ profiler list @@ -114,7 +117,7 @@ Perf events: trace:tracepoint ``` -如果遇到OS本身的权限/配置问题,然后缺少部分event,可以参考`async-profiler`本身文档:[async-profiler](https://github.com/jvm-profiling-tools/async-profiler) +如果遇到 OS 本身的权限/配置问题,然后  缺少部分 event,可以参考`async-profiler`本身文档:[async-profiler](https://github.com/jvm-profiling-tools/async-profiler) 可以用`--event`参数指定要采样的事件,比如对`alloc`事件进入采样: @@ -122,7 +125,6 @@ Perf events: $ profiler start --event alloc ``` - ### 恢复采样 ```bash @@ -132,8 +134,7 @@ Started [cpu] profiling `start`和`resume`的区别是:`start`是新开始采样,`resume`会保留上次`stop`时的数据。 -通过执行`profiler getSamples`可以查看samples的数量来验证。 - +通过执行`profiler getSamples`可以查看 samples 的数量来验证。 ### 使用`execute`来执行复杂的命令 @@ -151,14 +152,13 @@ profiler execute 'stop,file=/tmp/result.html' 具体的格式参考: [arguments.cpp](https://github.com/jvm-profiling-tools/async-profiler/blob/v2.5/src/arguments.cpp#L50) -### 查看所有支持的action +### 查看所有支持的 action ```bash $ profiler actions Supported Actions: [resume, dumpCollapsed, getSamples, start, list, execute, version, stop, load, dumpFlat, actions, dumpTraces, status] ``` - ### 查看版本 ```bash @@ -185,18 +185,17 @@ profiler start --include 'java/*' --include 'demo/*' --exclude '*Unsafe.park*' > include/exclude 都支持设置多个值 ,但是需要配置在命令行的最后。 - ### 指定执行时间 -比如,希望profiler执行 300 秒自动结束,可以用 `-d`/`--duration` 参数指定: +比如,希望 profiler 执行 300 秒自动结束,可以用 `-d`/`--duration` 参数指定: ```bash profiler start --duration 300 ``` -### 生成 jfr格式结果 +### 生成 jfr 格式结果 -> 注意,jfr只支持在 `start`时配置。如果是在`stop`时指定,则不会生效。 +> 注意,jfr 只支持在 `start`时配置。如果是在`stop`时指定,则不会生效。 ``` profiler start --file /tmp/test.jfr @@ -204,16 +203,14 @@ profiler start --file /tmp/test.jfr `file`参数支持一些变量: -* 时间戳: `--file /tmp/test-%t.jfr` -* 进程ID: `--file /tmp/test-%p.jfr` - - -生成的结果可以用支持jfr格式的工具来查看。比如: +- 时间戳: `--file /tmp/test-%t.jfr` +- 进程 ID: `--file /tmp/test-%p.jfr` -* JDK Mission Control : https://github.com/openjdk/jmc -* JProfiler : https://github.com/alibaba/arthas/issues/1416 +生成的结果可以用支持 jfr 格式的工具来查看。比如: +- JDK Mission Control : https://github.com/openjdk/jmc +- JProfiler : https://github.com/alibaba/arthas/issues/1416 ### 生成的火焰图里的 unknown -* https://github.com/jvm-profiling-tools/async-profiler/discussions/409 +- https://github.com/jvm-profiling-tools/async-profiler/discussions/409 diff --git a/site/src/site/sphinx/pwd.md b/site-vuepress/docs/doc/pwd.md similarity index 60% rename from site/src/site/sphinx/pwd.md rename to site-vuepress/docs/doc/pwd.md index 5d752fcfa..d2f0f9b58 100644 --- a/site/src/site/sphinx/pwd.md +++ b/site-vuepress/docs/doc/pwd.md @@ -1,11 +1,11 @@ -pwd -=== +# pwd [`pwd`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-pwd) -> 返回当前的工作目录,和linux命令类似 - +::: tip +返回当前的工作目录,和 linux 命令类似 +::: ```bash $ pwd -``` \ No newline at end of file +``` diff --git a/site/src/site/sphinx/quick-start.md b/site-vuepress/docs/doc/quick-start.md similarity index 86% rename from site/src/site/sphinx/quick-start.md rename to site-vuepress/docs/doc/quick-start.md index 41f1cef66..b40bbb323 100644 --- a/site/src/site/sphinx/quick-start.md +++ b/site-vuepress/docs/doc/quick-start.md @@ -1,7 +1,6 @@ -快速入门 -=== +# 快速入门 -## 1. 启动math-game +## 1. 启动 math-game ```bash curl -O https://arthas.aliyun.com/math-game.jar @@ -12,23 +11,21 @@ java -jar math-game.jar `math-game`源代码:[查看](https://github.com/alibaba/arthas/blob/master/math-game/src/main/java/demo/MathGame.java) +## 2. 启动 arthas -## 2. 启动arthas - -在命令行下面执行(使用和目标进程一致的用户启动,否则可能attach失败): +在命令行下面执行(使用和目标进程一致的用户启动,否则可能 attach 失败): ```bash curl -O https://arthas.aliyun.com/arthas-boot.jar java -jar arthas-boot.jar ``` -* 执行该程序的用户需要和目标进程具有相同的权限。比如以`admin`用户来执行:`sudo su admin && java -jar arthas-boot.jar` 或 `sudo -u admin -EH java -jar arthas-boot.jar`。 -* 如果attach不上目标进程,可以查看`~/logs/arthas/` 目录下的日志。 -* 如果下载速度比较慢,可以使用aliyun的镜像:`java -jar arthas-boot.jar --repo-mirror aliyun --use-http` -* `java -jar arthas-boot.jar -h` 打印更多参数信息。 - +- 执行该程序的用户需要和目标进程具有相同的权限。比如以`admin`用户来执行:`sudo su admin && java -jar arthas-boot.jar` 或 `sudo -u admin -EH java -jar arthas-boot.jar`。 +- 如果 attach 不上目标进程,可以查看`~/logs/arthas/` 目录下的日志。 +- 如果下载速度比较慢,可以使用 aliyun 的镜像:`java -jar arthas-boot.jar --repo-mirror aliyun --use-http` +- `java -jar arthas-boot.jar -h` 打印更多参数信息。 -选择应用java进程: +选择应用 java 进程: ```bash $ $ java -jar arthas-boot.jar @@ -36,7 +33,7 @@ $ $ java -jar arthas-boot.jar [2]: 71560 math-game.jar ``` -`math-game`进程是第2个,则输入2,再输入`回车/enter`。Arthas会attach到目标进程上,并输出日志: +`math-game`进程是第 2 个,则输入 2,再输入`回车/enter`。Arthas 会 attach 到目标进程上,并输出日志: ```bash [INFO] Try to attach process 71560 @@ -57,7 +54,7 @@ time: 2018-11-28 19:16:24 $ ``` -## 3. 查看dashboard +## 3. 查看 dashboard 输入[dashboard](dashboard.md),按`回车/enter`,会展示当前进程的信息,按`ctrl+c`可以中断执行。 @@ -95,16 +92,16 @@ java.home /Library/Java/JavaVir e/jre ``` -## 4. 通过thread命令来获取到`math-game`进程的Main Class +## 4. 通过 thread 命令来获取到`math-game`进程的 Main Class -`thread 1`会打印线程ID 1的栈,通常是main函数的线程。 +`thread 1`会打印线程 ID 1 的栈,通常是 main 函数的线程。 ```bash $ thread 1 | grep 'main(' at demo.MathGame.main(MathGame.java:17) ``` -## 5. 通过jad来反编译Main Class +## 5. 通过 jad 来反编译 Main Class ```java $ jad demo.MathGame @@ -226,8 +223,8 @@ ts=2018-11-28 19:22:35; [cost=29.969732ms] result=@ArrayList[ 更多的功能可以查看[进阶使用](advanced-use.md)。 -## 7. 退出arthas +## 7. 退出 arthas -如果只是退出当前的连接,可以用`quit`或者`exit`命令。Attach到目标进程上的arthas还会继续运行,端口会保持开放,下次连接时可以直接连接上。 +如果只是退出当前的连接,可以用`quit`或者`exit`命令。Attach 到目标进程上的 arthas 还会继续运行,端口会保持开放,下次连接时可以直接连接上。 -如果想完全退出arthas,可以执行`stop`命令。 +如果想完全退出 arthas,可以执行`stop`命令。 diff --git a/site-vuepress/docs/doc/quit.md b/site-vuepress/docs/doc/quit.md new file mode 100644 index 000000000..bc1cf6a16 --- /dev/null +++ b/site-vuepress/docs/doc/quit.md @@ -0,0 +1,7 @@ +# quit + +退出当前 Arthas 客户端,其他 Arthas 客户端不受影响。等同于**exit**、**logout**、**q**三个指令。 + +::: tip +只是退出当前 Arthas 客户端,Arthas 的服务器端并没有关闭,所做的修改也不会被重置。 +::: diff --git a/site-vuepress/docs/doc/redefine.md b/site-vuepress/docs/doc/redefine.md new file mode 100644 index 000000000..12cd42b69 --- /dev/null +++ b/site-vuepress/docs/doc/redefine.md @@ -0,0 +1,119 @@ +# redefine + +::: tip +推荐使用 [retransform](retransform.md) 命令 +::: + +[`mc-redefine`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=command-mc-redefine) + +::: tip +加载外部的`.class`文件,redefine jvm 已加载的类。 +::: + +参考:[Instrumentation#redefineClasses](https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/Instrumentation.html#redefineClasses-java.lang.instrument.ClassDefinition...-) + +### 常见问题 + +::: tip +推荐使用 [retransform](retransform.md) 命令 +::: + +- redefine 的 class 不能修改、添加、删除类的 field 和 method,包括方法参数、方法名称及返回值 + +- 如果 mc 失败,可以在本地开发环境编译好 class 文件,上传到目标系统,使用 redefine 热加载 class + +- 目前 redefine 和 watch/trace/jad/tt 等命令冲突,以后重新实现 redefine 功能会解决此问题 + +::: warning +注意, redefine 后的原来的类不能恢复,redefine 有可能失败(比如增加了新的 field),参考 jdk 本身的文档。 +::: + +::: tip +`reset`命令对`redefine`的类无效。如果想重置,需要`redefine`原始的字节码。 +::: + +::: tip +`redefine`命令和`jad`/`watch`/`trace`/`monitor`/`tt`等命令会冲突。执行完`redefine`之后,如果再执行上面提到的命令,则会把`redefine`的字节码重置。 +原因是 jdk 本身 redefine 和 Retransform 是不同的机制,同时使用两种机制来更新字节码,只有最后修改的会生效。 +::: + +### 参数说明 + +| 参数名称 | 参数说明 | +| --------------------: | :----------------------------------------- | +| [c:] | ClassLoader 的 hashcode | +| `[classLoaderClass:]` | 指定执行表达式的 ClassLoader 的 class name | + +### 使用参考 + +```bash + redefine /tmp/Test.class + redefine -c 327a647b /tmp/Test.class /tmp/Test\$Inner.class + redefine --classLoaderClass sun.misc.Launcher$AppClassLoader /tmp/Test.class /tmp/Test\$Inner.class +``` + +### 结合 jad/mc 命令使用 + +```bash +jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java + +mc /tmp/UserController.java -d /tmp + +redefine /tmp/com/example/demo/arthas/user/UserController.class +``` + +- jad 命令反编译,然后可以用其它编译器,比如 vim 来修改源码 +- mc 命令来内存编译修改过的代码 +- 用 redefine 命令加载新的字节码 + +### 上传 .class 文件到服务器的技巧 + +使用`mc`命令来编译`jad`的反编译的代码有可能失败。可以在本地修改代码,编译好后再上传到服务器上。有的服务器不允许直接上传文件,可以使用`base64`命令来绕过。 + +1. 在本地先转换`.class`文件为 base64,再保存为 result.txt + + ```bash + base64 < Test.class > result.txt + ``` + +2. 到服务器上,新建并编辑`result.txt`,复制本地的内容,粘贴再保存 + +3. 把服务器上的 `result.txt`还原为`.class` + + ``` + base64 -d < result.txt > Test.class + ``` + +4. 用 md5 命令计算哈希值,校验是否一致 + +### redefine 的限制 + +- 不允许新增加 field/method +- 正在跑的函数,没有退出不能生效,比如下面新增加的`System.out.println`,只有`run()`函数里的会生效 + +```java +public class MathGame { + public static void main(String[] args) throws InterruptedException { + MathGame game = new MathGame(); + while (true) { + game.run(); + TimeUnit.SECONDS.sleep(1); + // 这个不生效,因为代码一直跑在 while里 + System.out.println("in loop"); + } + } + + public void run() throws InterruptedException { + // 这个生效,因为run()函数每次都可以完整结束 + System.out.println("call run()"); + try { + int number = random.nextInt(); + List primeFactors = primeFactors(number); + print(number, primeFactors); + + } catch (Exception e) { + System.out.println(String.format("illegalArgumentCount:%3d, ", illegalArgumentCount) + e.getMessage()); + } + } +} +``` diff --git a/site-vuepress/docs/doc/release-notes.md b/site-vuepress/docs/doc/release-notes.md new file mode 100644 index 000000000..1025545e1 --- /dev/null +++ b/site-vuepress/docs/doc/release-notes.md @@ -0,0 +1,130 @@ +# Release Notes + +## v3.1.1 + +- [https://github.com/alibaba/arthas/releases/tag/arthas-all-3.1.1](https://github.com/alibaba/arthas/releases/tag/arthas-all-3.1.1) + +## v3.1.0 + +- [https://github.com/alibaba/arthas/releases/tag/3.1.0](https://github.com/alibaba/arthas/releases/tag/3.1.0) + +## v3.0.5 + +- [https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.5](https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.5) + +## v3.0.4 + +- [https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.4](https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.4) + +## v2017-11-03 + +- 增加 getstatic 方法获取静态变量 +- 修复 arthas classloader 加载到应用日志的问题 +- 增加 ognl custom classloader 便于调用静态方法 +- 优化 termd 输出大字符串的性能问题 +- classloader 命令默认按类加载器类型分类编译 +- 修复 wc 命令统计错误的问题 +- 禁止增强特定 JDK 类,如 Classloader, Method, Integer 等 +- 支持 OGNL 表达式出错直接退出命令 +- 修复管道类命令单独出错的问题 +- 优化命令重定向功能,使用异步日志输出结果 +- trace 命令增加过滤 jdk 方法调用的功能 + +## v2017-09-22 + +- 优化 agent server 启动时的异常信息 +- 修复异步命令的一些 bug + +## v2017-09-11 + +- 支持[异步后后命令](async.md) +- jad 命令优化,支持 JDK8 及内部类 +- 修复中文乱码问题 + +## v2017-05-11 + +- tt 命令默认只展开 1 层,防止对象过大造成卡顿 +- 修复中文无法展示的问题 + +## v2017-05-12 + +- Arthas 3.0 release + +## v2016-12-09 + +- as.sh 支持-h 输出帮助 +- [#121] 修复残留的临时文件导致 arthas 启动失败的问题 +- [#123] 修复反复 attach/shutdown 造成 classloader 泄露的问题 +- 优化命令中的帮助提示信息 +- [#126] 修复 tm 命令文档链接错乱的问题 +- [#122] classloader 命令中过滤掉`sun.reflect.DelegatingClassLoader` +- [#129] 修复 classloader 层次展示的问题 +- [#125] arthas 输出的 log 不主动换行,对于日志解析更加友好 +- [#96] sc 等命令支持 com/taobao/xxx/TestClass 这样的格式,以后复制粘贴不需要在把'/'替换成'.'啦 +- [#124] 修复某些情况下 trace 的时间为负值的问题 +- [#128] tt 命令的结果默认自动展开,不需要再增加`-x 2`来看到参数,异常的详细信息了。 +- [#130] 修复当端口冲突时,没有很好地打印错误,而是进入了一个出错的交互界面的问题 +- [#98] 修复 Arthas 启动时,如果下载更新失败,导致启动失败的问题 +- [#139] 修复某些特殊情况下 agent attach 失败的问题 +- [#156] jd-core-java 延迟初始化,避免 arthas 启动时出错 +- 修复线程名重复的问题 +- [#150] trace 命令支持按运行总耗时过滤 +- 修复 sc 查找 SystemClassloader 时可能出现的 NPE +- [#180] 修复第一次 Attach 成功之后,删除之前 Arthas 的安装包,重新编译打包,再次 attach 失败的问题 + +## v2016-06-07 + +- 修复以资源方式加载 spy 类时出现 NPE 的问题 +- 支持一键找出线程中获得锁并阻塞住其他线程的线程 +- 优化 Thread 输出,按线程名排序 +- 获取 topN 忙的线程时,支持指定刷新间隔 + +## v2016-04-08 + +- New feature: + + - dashboard 支持指定刷新频率,支持指定执行次数 + - 命令执行结果保存到日志文件,方便后续查看 + - 启动速度优化,第一次 attach 的速度提升一倍 + - 支持批处理功能,支持执行脚本文件 + - 优化启动逻辑,arthas 脚本启动时交互式选择进程 + - 类默认启用继承关系查询,查找类时默认会查找子类,如果需要关闭,则通过全局开关 Options disable-sub-class 关闭 + - 支持在彩色模式和文本模式中切换 + +- UI Improvement: + + - 合并 exit 和 quit 命令 + - 命令帮助信息增加 wiki 链接 + - 优化 watch 的逻辑,更加符合大家的直觉 + - thread 命令增加 example 说明 + - 自动补全的时候,忽略大小写 + +- Bugfix: + - 修复 trace 命令遇到循环造成输出太长 + - 修复 trace 命令在方法调用中抛出了异常,会让 trace 的节点错位 + - 修正增强 BootstrapClassLoader 加载的类,找不到 Spy 的问题 + - 修复某些配色方案下,结果显示不友好的问题 + +## v2016-03-07 + +- 支持一键查看当前最忙的前 N 个线程及其堆栈 +- 修复 openjdk 下启动 arthas 失败的问题(需要重新安装 as.sh) +- 一些体验优化 + +## v2016-01-18 + +- 优化 jad,实时 dump 内存 byte array,并使用 jd-core-java 反编译,支持`行号显示` +- 修复 tt 命令在监控与线程上下文相关的方法调用时,显示/重做等场景下的 bug + +## v2016-01-08 + +- 修复一些 bug + - jad NPE + - watch/monitor NPE + - 不需要转义 + - 数据统计问题修复 + - sc 查看静态变量内部层次结构 + +## v2015-12-29 + +- Arthas 2.0 测试版本发布! diff --git a/site/src/site/sphinx/reset.md b/site-vuepress/docs/doc/reset.md similarity index 90% rename from site/src/site/sphinx/reset.md rename to site-vuepress/docs/doc/reset.md index f8f3538cb..eea5dd621 100644 --- a/site/src/site/sphinx/reset.md +++ b/site-vuepress/docs/doc/reset.md @@ -1,9 +1,10 @@ -reset命令 -=== +# reset 命令 [`reset`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-reset) -> 重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端`stop`时会重置所有增强过的类 +::: tip +重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端`stop`时会重置所有增强过的类 +::: ### 使用参考 @@ -53,4 +54,4 @@ Affect(class-cnt:1 , method-cnt:1) cost in 15 ms. $ reset Affect(class-cnt:1 , method-cnt:0) cost in 9 ms. -``` \ No newline at end of file +``` diff --git a/site/src/site/sphinx/retransform.md b/site-vuepress/docs/doc/retransform.md similarity index 50% rename from site/src/site/sphinx/retransform.md rename to site-vuepress/docs/doc/retransform.md index e510ef46e..d858127f0 100644 --- a/site/src/site/sphinx/retransform.md +++ b/site-vuepress/docs/doc/retransform.md @@ -1,13 +1,13 @@ -retransform -=== +# retransform [`mc-retransform`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=command-mc-retransform) -> 加载外部的`.class`文件,retransform jvm已加载的类。 +::: tip +加载外部的`.class`文件,retransform jvm 已加载的类。 +::: 参考:[Instrumentation#retransformClasses](https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/Instrumentation.html#retransformClasses-java.lang.Class...-) - ### 使用参考 ```bash @@ -28,9 +28,11 @@ retransform success, size: 1, classes: demo.MathGame ``` -加载指定的 .class 文件,然后解析出class name,再retransform jvm中已加载的对应的类。每加载一个 `.class` 文件,则会记录一个 retransform entry. +加载指定的 .class 文件,然后解析出 class name,再 retransform jvm 中已加载的对应的类。每加载一个 `.class` 文件,则会记录一个 retransform entry. -> 如果多次执行 retransform 加载同一个 class 文件,则会有多条 retransform entry. +::: tip +如果多次执行 retransform 加载同一个 class 文件,则会有多条 retransform entry. +::: ### 查看 retransform entry @@ -40,7 +42,7 @@ Id ClassName TransformCount LoaderHash LoaderClassName 1 demo.MathGame 1 null null ``` -* TransformCount 统计在 ClassFileTransformer#transform 函数里尝试返回 entry对应的 .class文件的次数,但并不表明transform一定成功。 +- TransformCount 统计在 ClassFileTransformer#transform 函数里尝试返回 entry 对应的 .class 文件的次数,但并不表明 transform 一定成功。 ### 删除指定 retransform entry @@ -64,17 +66,18 @@ retransform success, size: 1, classes: demo.MathGame ``` -> 注意:对于同一个类,当存在多个 retransform entry时,如果显式触发 retransform ,则最后添加的entry生效(id最大的)。 +> 注意:对于同一个类,当存在多个 retransform entry 时,如果显式触发 retransform ,则最后添加的 entry 生效(id 最大的)。 ### 消除 retransform 的影响 如果对某个类执行 retransform 之后,想消除影响,则需要: -* 删除这个类对应的 retransform entry -* 重新触发 retransform - -> 如果不清除掉所有的 retransform entry,并重新触发 retransform ,则arthas stop时,retransform过的类仍然生效。 +- 删除这个类对应的 retransform entry +- 重新触发 retransform +::: tip +如果不清除掉所有的 retransform entry,并重新触发 retransform ,则 arthas stop 时,retransform 过的类仍然生效。 +::: ### 结合 jad/mc 命令使用 @@ -86,57 +89,58 @@ mc /tmp/UserController.java -d /tmp retransform /tmp/com/example/demo/arthas/user/UserController.class ``` -* jad命令反编译,然后可以用其它编译器,比如vim来修改源码 -* mc命令来内存编译修改过的代码 -* 用retransform命令加载新的字节码 +- jad 命令反编译,然后可以用其它编译器,比如 vim 来修改源码 +- mc 命令来内存编译修改过的代码 +- 用 retransform 命令加载新的字节码 ### 上传 .class 文件到服务器的技巧 使用`mc`命令来编译`jad`的反编译的代码有可能失败。可以在本地修改代码,编译好后再上传到服务器上。有的服务器不允许直接上传文件,可以使用`base64`命令来绕过。 -1. 在本地先转换`.class`文件为base64,再保存为result.txt +1. 在本地先转换`.class`文件为 base64,再保存为 result.txt - ```bash - base64 < Test.class > result.txt - ``` + ```bash + base64 < Test.class > result.txt + ``` 2. 到服务器上,新建并编辑`result.txt`,复制本地的内容,粘贴再保存 3. 把服务器上的 `result.txt`还原为`.class` - ``` - base64 -d < result.txt > Test.class - ``` + ``` + base64 -d < result.txt > Test.class + ``` -4. 用md5命令计算哈希值,校验是否一致 +4. 用 md5 命令计算哈希值,校验是否一致 -### retransform的限制 +### retransform 的限制 -* 不允许新增加field/method -* 正在跑的函数,没有退出不能生效,比如下面新增加的`System.out.println`,只有`run()`函数里的会生效 +- 不允许新增加 field/method +- 正在跑的函数,没有退出不能生效,比如下面新增加的`System.out.println`,只有`run()`函数里的会生效 - ```java - public class MathGame { - public static void main(String[] args) throws InterruptedException { - MathGame game = new MathGame(); - while (true) { - game.run(); - TimeUnit.SECONDS.sleep(1); - // 这个不生效,因为代码一直跑在 while里 - System.out.println("in loop"); - } +```java +public class MathGame { + public static void main(String[] args) throws InterruptedException { + MathGame game = new MathGame(); + while (true) { + game.run(); + TimeUnit.SECONDS.sleep(1); + // 这个不生效,因为代码一直跑在 while里 + System.out.println("in loop"); } - - public void run() throws InterruptedException { - // 这个生效,因为run()函数每次都可以完整结束 - System.out.println("call run()"); - try { - int number = random.nextInt(); - List primeFactors = primeFactors(number); - print(number, primeFactors); - - } catch (Exception e) { - System.out.println(String.format("illegalArgumentCount:%3d, ", illegalArgumentCount) + e.getMessage()); - } + } + + public void run() throws InterruptedException { + // 这个生效,因为run()函数每次都可以完整结束 + System.out.println("call run()"); + try { + int number = random.nextInt(); + List primeFactors = primeFactors(number); + print(number, primeFactors); + + } catch (Exception e) { + System.out.println(String.format("illegalArgumentCount:%3d, ", illegalArgumentCount) + e.getMessage()); } -``` \ No newline at end of file + } +} +``` diff --git a/site/src/site/sphinx/save-log.md b/site-vuepress/docs/doc/save-log.md similarity index 55% rename from site/src/site/sphinx/save-log.md rename to site-vuepress/docs/doc/save-log.md index 7d844b4ff..d4d9b93af 100644 --- a/site/src/site/sphinx/save-log.md +++ b/site-vuepress/docs/doc/save-log.md @@ -1,11 +1,12 @@ -执行结果存日志 -=== +# 执行结果存日志 [`执行结果存日志`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=case-save-log) -> 将命令的结果完整保存在日志文件中,便于后续进行分析 +::: tip +将命令的结果完整保存在日志文件中,便于后续进行分析 +::: -* 默认情况下,该功能是关闭的,如果需要开启,请执行以下命令: +- 默认情况下,该功能是关闭的,如果需要开启,请执行以下命令: ```bash $ options save-result true @@ -17,11 +18,11 @@ Affect(row-cnt:1) cost in 3 ms. 看到上面的输出,即表示成功开启该功能; -* 日志文件路径 +- 日志文件路径 结果会异步保存在:`{user.home}/logs/arthas-cache/result.log`,请定期进行清理,以免占据磁盘空间 -### 使用新版本Arthas的异步后台任务将结果存日志文件 +### 使用新版本 Arthas 的异步后台任务将结果存日志文件 ```bash $ trace Test t >> & @@ -31,5 +32,5 @@ cache location : /Users/admin/logs/arthas-cache/28198/2 此时命令会在后台异步执行,并将结果异步保存在文件(~/logs/arthas-cache/${PID}/${JobId})中; -* 此时任务的执行不受session断开的影响;任务默认超时时间是1天,可以通过全局 `options` 命令修改默认超时时间; -* 此命令的结果将异步输出到文件中;此时不管 `save-result` 是否为true,都不会再往~/logs/arthas-cache/result.log 中异步写结果 \ No newline at end of file +- 此时任务的执行不受 session 断开的影响;任务默认超时时间是 1 天,可以通过全局 `options` 命令修改默认超时时间; +- 此命令的结果将异步输出到  文件中;此时不管 `save-result` 是否为 true,都不会再往~/logs/arthas-cache/result.log 中异步写结果 diff --git a/site-vuepress/docs/doc/sc.md b/site-vuepress/docs/doc/sc.md new file mode 100644 index 000000000..9c0f258b2 --- /dev/null +++ b/site-vuepress/docs/doc/sc.md @@ -0,0 +1,109 @@ +# sc + +[`sc`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=command-sc) + +::: tip +查看 JVM 已加载的类信息 +::: + +“Search-Class” 的简写,这个命令能搜索出所有已经加载到 JVM 中的 Class 信息,这个命令支持的参数有 `[d]`、`[E]`、`[f]` 和 `[x:]`。 + +## 参数说明 + +### 参数说明 + +| 参数名称 | 参数说明 | +| --------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------- | +| _class-pattern_ | 类名表达式匹配 | +| _method-pattern_ | 方法名表达式匹配 | +| [d] | 输出当前类的详细信息,包括这个类所加载的原始文件来源、类的声明、加载的 ClassLoader 等详细信息。
如果一个类被多个 ClassLoader 所加载,则会出现多次 | +| [E] | 开启正则表达式匹配,默认为通配符匹配 | +| [f] | 输出当前类的成员变量信息(需要配合参数-d 一起使用) | +| [x:] | 指定输出静态变量时属性的遍历深度,默认为 0,即直接使用 `toString` 输出 | +| `[c:]` | 指定 class 的 ClassLoader 的 hashcode | +| `[classLoaderClass:]` | 指定执行表达式的 ClassLoader 的 class name | +| `[n:]` | 具有详细信息的匹配类的最大数量(默认为 100) | + +::: tip +class-pattern 支持全限定名,如 com.taobao.test.AAA,也支持 com/taobao/test/AAA 这样的格式,这样,我们从异常堆栈里面把类名拷贝过来的时候,不需要在手动把`/`替换为`.`啦。 +::: + +::: tip +sc 默认开启了子类匹配功能,也就是说所有当前类的子类也会被搜索出来,想要精确的匹配,请打开`options disable-sub-class true`开关 +::: + +### 使用参考 + +- 模糊搜索 + + ```bash + $ sc demo.* + demo.MathGame + Affect(row-cnt:1) cost in 55 ms. + ``` + +- 打印类的详细信息 + + ```bash + $ sc -d demo.MathGame + class-info demo.MathGame + code-source /private/tmp/math-game.jar + name demo.MathGame + isInterface false + isAnnotation false + isEnum false + isAnonymousClass false + isArray false + isLocalClass false + isMemberClass false + isPrimitive false + isSynthetic false + simple-name MathGame + modifier public + annotation + interfaces + super-class +-java.lang.Object + class-loader +-sun.misc.Launcher$AppClassLoader@3d4eac69 + +-sun.misc.Launcher$ExtClassLoader@66350f69 + classLoaderHash 3d4eac69 + + Affect(row-cnt:1) cost in 875 ms. + ``` + +- 打印出类的 Field 信息 + + ```bash + $ sc -d -f demo.MathGame + class-info demo.MathGame + code-source /private/tmp/math-game.jar + name demo.MathGame + isInterface false + isAnnotation false + isEnum false + isAnonymousClass false + isArray false + isLocalClass false + isMemberClass false + isPrimitive false + isSynthetic false + simple-name MathGame + modifier public + annotation + interfaces + super-class +-java.lang.Object + class-loader +-sun.misc.Launcher$AppClassLoader@3d4eac69 + +-sun.misc.Launcher$ExtClassLoader@66350f69 + classLoaderHash 3d4eac69 + fields modifierprivate,static + type java.util.Random + name random + value java.util.Random@522b4 + 08a + + modifierprivate + type int + name illegalArgumentCount + + + Affect(row-cnt:1) cost in 19 ms. + ``` diff --git a/site-vuepress/docs/doc/session.md b/site-vuepress/docs/doc/session.md new file mode 100644 index 000000000..2cdc2df4a --- /dev/null +++ b/site-vuepress/docs/doc/session.md @@ -0,0 +1,20 @@ +# session + +查看当前会话的信息,显示当前绑定的 pid 以及会话 id。 + +::: tip +如果配置了 tunnel server,会追加打印 代理 id、tunnel 服务器的 url 以及连接状态。 + +如果使用了 staturl 做统计,会追加显示 statUrl 地址。 +::: + +### 使用参考 + +``` +$ session + Name Value +-------------------------------------------------- + JAVA_PID 14584 + SESSION_ID c2073d3b-443a-4a9b-9249-0c5d24a5756c + +``` diff --git a/site/src/site/sphinx/sm.md b/site-vuepress/docs/doc/sm.md similarity index 70% rename from site/src/site/sphinx/sm.md rename to site-vuepress/docs/doc/sm.md index 2da567ce6..06852a854 100644 --- a/site/src/site/sphinx/sm.md +++ b/site-vuepress/docs/doc/sm.md @@ -1,9 +1,10 @@ -sm -=== +# sm [`sm`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=command-sm) -> 查看已加载类的方法信息 +::: tip +查看已加载类的方法信息 +::: “Search-Method” 的简写,这个命令能搜索出所有已经加载了 Class 信息的方法信息。 @@ -11,15 +12,15 @@ sm ### 参数说明 -|参数名称|参数说明| -|---:|:---| -|*class-pattern*|类名表达式匹配| -|*method-pattern*|方法名表达式匹配| -|[d]|展示每个方法的详细信息| -|[E]|开启正则表达式匹配,默认为通配符匹配| -|`[c:]`|指定class的 ClassLoader 的 hashcode| -|`[classLoaderClass:]`|指定执行表达式的 ClassLoader 的 class name| -|`[n:]`|具有详细信息的匹配类的最大数量(默认为100)| +| 参数名称 | 参数说明 | +| --------------------: | :------------------------------------------- | +| _class-pattern_ | 类名表达式匹配 | +| _method-pattern_ | 方法名表达式匹配 | +| [d] | 展示每个方法的详细信息 | +| [E] | 开启正则表达式匹配,默认为通配符匹配 | +| `[c:]` | 指定 class 的 ClassLoader 的 hashcode | +| `[classLoaderClass:]` | 指定执行表达式的 ClassLoader 的 class name | +| `[n:]` | 具有详细信息的匹配类的最大数量(默认为 100) | ### 使用参考 @@ -83,4 +84,4 @@ $ sm -d java.lang.String toString exceptions Affect(row-cnt:1) cost in 3 ms. -``` \ No newline at end of file +``` diff --git a/site/src/site/sphinx/spring-boot-starter.md b/site-vuepress/docs/doc/spring-boot-starter.md similarity index 62% rename from site/src/site/sphinx/spring-boot-starter.md rename to site-vuepress/docs/doc/spring-boot-starter.md index a3c623e8b..60be5434a 100644 --- a/site/src/site/sphinx/spring-boot-starter.md +++ b/site-vuepress/docs/doc/spring-boot-starter.md @@ -1,11 +1,12 @@ -Arthas Spring Boot Starter -===== +# Arthas Spring Boot Starter -> 只支持 spring boot 2 +::: tip +只支持 spring boot 2 +::: 最新版本:[查看](https://search.maven.org/search?q=arthas-spring-boot-starter) -配置maven依赖: +配置 maven 依赖: ```xml @@ -15,14 +16,15 @@ Arthas Spring Boot Starter ``` -应用启动后,spring会启动arthas,并且attach自身进程。 - -> 一键创建包含 Arthas Spring Boot Starter 的工程:点击 +应用启动后,spring 会启动 arthas,并且 attach 自身进程。 +::: tip +一键创建包含 Arthas Spring Boot Starter 的工程:点击 +::: ### 配置属性 -比如,通过配置tunnel server实现远程管理: +比如,通过配置 tunnel server 实现远程管理: ``` arthas.agent-id=hsehdfsfghhwertyfad @@ -31,15 +33,19 @@ arthas.tunnel-server=ws://47.75.156.201:7777/ws 全部支持的配置项:[参考](https://github.com/alibaba/arthas/blob/master/arthas-spring-boot-starter/src/main/java/com/alibaba/arthas/spring/ArthasProperties.java) -> 默认情况下,arthas-spring-boot-starter会禁掉`stop`命令。 +::: tip +默认情况下,arthas-spring-boot-starter 会禁掉`stop`命令。 +::: 参考:[Arthas Properties](arthas-properties.md) -### 查看Endpoint信息 +### 查看 Endpoint 信息 -> 需要配置spring boot暴露endpoint:[参考](https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#production-ready-endpoints) +::: tip +需要配置 spring boot 暴露 endpoint:[参考](https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#production-ready-endpoints) +::: -假定endpoint端口是 8080,则通过下面url可以查看: +假定 endpoint 端口是 8080,则通过下面 url 可以查看: http://localhost:8080/actuator/arthas @@ -52,9 +58,9 @@ http://localhost:8080/actuator/arthas } ``` -### 非spring boot应用使用方式 +### 非 spring boot 应用使用方式 -非Spring Boot应用,可以通过下面的方式来使用: +非 Spring Boot 应用,可以通过下面的方式来使用: ```xml @@ -73,7 +79,7 @@ http://localhost:8080/actuator/arthas import com.taobao.arthas.agent.attach.ArthasAgent; public class ArthasAttachExample { - + public static void main(String[] args) { ArthasAgent.attach(); } @@ -90,4 +96,6 @@ public class ArthasAttachExample { ArthasAgent.attach(configMap); ``` -> 注意配置必须是`驼峰`的,和spring boot的`-`风格不一样。spring boot应用才同时支持`驼峰` 和 `-`风格的配置。 \ No newline at end of file +::: warning +注意配置必须是`驼峰`的,和 spring boot 的`-`风格不一样。spring boot 应用才同时支持`驼峰` 和 `-`风格的配置。 +::: diff --git a/site/src/site/sphinx/stack.md b/site-vuepress/docs/doc/stack.md similarity index 74% rename from site/src/site/sphinx/stack.md rename to site-vuepress/docs/doc/stack.md index 2fd30c8b2..82c8c6ba0 100644 --- a/site/src/site/sphinx/stack.md +++ b/site-vuepress/docs/doc/stack.md @@ -1,31 +1,31 @@ -stack -=== +# stack [`stack`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-stack) -> 输出当前方法被调用的调用路径 +::: tip +输出当前方法被调用的调用路径 +::: 很多时候我们都知道一个方法被执行,但这个方法被执行的路径非常多,或者你根本就不知道这个方法是从那里被执行了,此时你需要的是 stack 命令。 ### 参数说明 -|参数名称|参数说明| -|---:|:---| -|*class-pattern*|类名表达式匹配| -|*method-pattern*|方法名表达式匹配| -|*condition-express*|条件表达式| -|[E]|开启正则表达式匹配,默认为通配符匹配| -|`[n:]`|执行次数限制| +| 参数名称 | 参数说明 | +| ------------------: | :----------------------------------- | +| _class-pattern_ | 类名表达式匹配 | +| _method-pattern_ | 方法名表达式匹配 | +| _condition-express_ | 条件表达式 | +| [E] | 开启正则表达式匹配,默认为通配符匹配 | +| `[n:]` | 执行次数限制 | 这里重点要说明的是观察表达式,观察表达式的构成主要由 ognl 表达式组成,所以你可以这样写`"{params,returnObj}"`,只要是一个合法的 ognl 表达式,都能被正常支持。 观察的维度也比较多,主要体现在参数 `advice` 的数据结构上。`Advice` 参数最主要是封装了通知节点的所有信息。 - 请参考[表达式核心变量](advice-class.md)中关于该节点的描述。 -* 特殊用法请参考:[https://github.com/alibaba/arthas/issues/71](https://github.com/alibaba/arthas/issues/71) -* OGNL表达式官网:[https://commons.apache.org/proper/commons-ognl/language-guide.html](https://commons.apache.org/proper/commons-ognl/language-guide.html) +- 特殊用法请参考:[https://github.com/alibaba/arthas/issues/71](https://github.com/alibaba/arthas/issues/71) +- OGNL 表达式官网:[https://commons.apache.org/proper/commons-ognl/language-guide.html](https://commons.apache.org/proper/commons-ognl/language-guide.html) ### 使用例子 @@ -61,7 +61,6 @@ ts=2018-12-04 01:34:30;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun Command execution times exceed limit: 2, so command will exit. You can set it with -n option. ``` - #### 据执行时间来过滤 ```bash @@ -72,4 +71,3 @@ ts=2018-12-04 01:35:58;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun @demo.MathGame.run() at demo.MathGame.main(MathGame.java:16) ``` - diff --git a/site/src/site/sphinx/start-arthas.md b/site-vuepress/docs/doc/start-arthas.md similarity index 76% rename from site/src/site/sphinx/start-arthas.md rename to site-vuepress/docs/doc/start-arthas.md index 9a8db3492..fc79ddfad 100644 --- a/site/src/site/sphinx/start-arthas.md +++ b/site-vuepress/docs/doc/start-arthas.md @@ -1,5 +1,4 @@ -启动 Arthas -===== +# 启动 Arthas ## 交互模式启动 @@ -30,23 +29,21 @@ $ ./as.sh [@IP:PORT] ``` - - ### 参数说明 -* PID:目标 Java 进程 ID(请确保执行当前执行命令的用户必须有足够的权限操作对应的 Java 进程) -* IP:Arthas Server 侦听的地址,默认值是 `127.00.1`。Arthas允许多个用户同时访问,并且各自的命令不会相互干扰执行 -* PORT:目标服务器 Arthas Server 的端口号,默认的端口号是 3658 +- PID:目标 Java 进程 ID(请确保执行当前执行命令的用户必须有足够的权限操作对应的 Java 进程) +- IP:Arthas Server 侦听的地址,默认值是 `127.00.1`。Arthas 允许多个用户同时访问,并且各自的命令不会相互干扰执行 +- PORT:目标服务器 Arthas Server 的端口号,默认的端口号是 3658 ### 示例 -* 如果不指定 IP 和 PORT,默认是 127.0.0.1 和 3658 +- 如果不指定 IP 和 PORT,默认是 127.0.0.1 和 3658 + + > ./as.sh 12345 - > ./as.sh 12345 + 上述命令等价于: - 上述命令等价于: - - > ./as.sh 12356@127.0.0.1:3658 + > ./as.sh 12356@127.0.0.1:3658 ### 远程诊断 @@ -55,7 +52,7 @@ $ ```bash telnet 192.168.1.119 3658 ``` - + ### sudo 支持 成熟的线上管理环境一般都不会直接开放 JVM 部署用户权限给你,而是通过 sudo-list 来控制和监控用户的越权操作。由于 as.sh 脚本中会对当前用户的环境变量产生感知,所以需要加上 -H 参数 @@ -64,7 +61,6 @@ telnet 192.168.1.119 3658 sudo -u admin -H ./as.sh 12345 ``` - ### Windows 环境支持 目前`as.bat`脚本只支持一个参数:pid diff --git a/site-vuepress/docs/doc/stop.md b/site-vuepress/docs/doc/stop.md new file mode 100644 index 000000000..c4f937a2e --- /dev/null +++ b/site-vuepress/docs/doc/stop.md @@ -0,0 +1,7 @@ +# Stop + +关闭 Arthas 服务端,所有 Arthas 客户端全部退出。 + +::: tip +关闭 Arthas 服务器之前,会重置掉所有做过的增强类。但是用 redefine 重加载的类内容不会被重置。 +::: diff --git a/site/src/site/sphinx/sysenv.md b/site-vuepress/docs/doc/sysenv.md similarity index 94% rename from site/src/site/sphinx/sysenv.md rename to site-vuepress/docs/doc/sysenv.md index 4830a15c7..16beac538 100644 --- a/site/src/site/sphinx/sysenv.md +++ b/site-vuepress/docs/doc/sysenv.md @@ -1,9 +1,10 @@ -sysenv -======================= +# sysenv [`sysenv`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-sysenv) -> 查看当前JVM的环境属性(`System Environment Variables`) +::: tip +查看当前 JVM 的环境属性(`System Environment Variables`) +::: ### 使用参考 @@ -24,11 +25,10 @@ sysenv OPTIONS: -h, --help this help env name - ``` +``` #### 查看所有环境变量 - ``` $ sysenv KEY VALUE @@ -67,7 +67,9 @@ $ sysenv #### 查看单个环境变量 -> 支持通过`TAB`键自动补全 +::: tip +支持通过`TAB`键自动补全 +::: ``` $ sysenv USER diff --git a/site/src/site/sphinx/sysprop.md b/site-vuepress/docs/doc/sysprop.md similarity index 98% rename from site/src/site/sphinx/sysprop.md rename to site-vuepress/docs/doc/sysprop.md index f9991dd46..b097625f4 100644 --- a/site/src/site/sphinx/sysprop.md +++ b/site-vuepress/docs/doc/sysprop.md @@ -1,9 +1,10 @@ -sysprop -======================= +# sysprop [`sysprop`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-sysprop) -> 查看当前JVM的系统属性(`System Property`) +::: tip +查看当前 JVM 的系统属性(`System Property`) +::: ### 使用参考 @@ -30,7 +31,6 @@ sysprop #### 查看所有属性 - ``` $ sysprop KEY VALUE @@ -106,7 +106,9 @@ $ sysprop #### 查看单个属性 -> 支持通过`TAB`键自动补全 +::: tip +支持通过`TAB`键自动补全 +::: ``` $ sysprop java.version @@ -121,4 +123,4 @@ user.country=US $ sysprop user.country CN Successfully changed the system property. user.country=CN -``` \ No newline at end of file +``` diff --git a/site/src/site/sphinx/tee.md b/site-vuepress/docs/doc/tee.md similarity index 68% rename from site/src/site/sphinx/tee.md rename to site-vuepress/docs/doc/tee.md index c95b269b1..2c0c866f5 100644 --- a/site/src/site/sphinx/tee.md +++ b/site-vuepress/docs/doc/tee.md @@ -1,12 +1,12 @@ -tee -=== +# tee [`tee`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-tee) -> 类似传统的`tee`命令, 用于读取标准输入的数据,并将其内容输出成文件。 - -> tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。 +::: tip +类似传统的`tee`命令, 用于读取标准输入的数据,并将其内容输出成文件。 +tee 指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。 +::: ``` USAGE: @@ -26,4 +26,4 @@ tee -a, --append Append to file -h, --help this help File path -``` \ No newline at end of file +``` diff --git a/site/src/site/sphinx/thread.md b/site-vuepress/docs/doc/thread.md similarity index 78% rename from site/src/site/sphinx/thread.md rename to site-vuepress/docs/doc/thread.md index 20bfc68e8..548789aa5 100644 --- a/site/src/site/sphinx/thread.md +++ b/site-vuepress/docs/doc/thread.md @@ -1,39 +1,43 @@ -thread -=== +# thread [`thread`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-thread) -> 查看当前线程信息,查看线程的堆栈 - +::: tip +查看当前线程信息,查看线程的堆栈 +::: ### 参数说明 -|参数名称|参数说明| -|---:|:---| -|*id*|线程id| -|[n:]|指定最忙的前N个线程并打印堆栈| -|[b]|找出当前阻塞其他线程的线程| -|[i ``]|指定cpu使用率统计的采样间隔,单位为毫秒,默认值为200| -|[--all]|显示所有匹配的线程| +| 参数名称 | 参数说明 | +| ------------: | :------------------------------------------------------ | +| _id_ | 线程 id | +| [n:] | 指定最忙的前 N 个线程并打印堆栈 | +| [b] | 找出当前阻塞其他线程的线程 | +| [i ``] | 指定 cpu 使用率统计的采样间隔,单位为毫秒,默认值为 200 | +| [--all] | 显示所有匹配的线程 | -### cpu使用率是如何统计出来的? +### cpu 使用率是如何统计出来的? -这里的cpu使用率与linux 命令`top -H -p ` 的线程`%CPU`类似,一段采样间隔时间内,当前JVM里各个线程的增量cpu时间与采样间隔时间的比例。 +这里的 cpu 使用率与 linux 命令`top -H -p ` 的线程`%CPU`类似,一段采样间隔时间内,当前 JVM 里各个线程的增量 cpu 时间与采样间隔时间的比例。 #### 工作原理说明: -* 首先第一次采样,获取所有线程的CPU时间(调用的是`java.lang.management.ThreadMXBean#getThreadCpuTime()`及`sun.management.HotspotThreadMBean.getInternalThreadCpuTimes()`接口) -* 然后睡眠等待一个间隔时间(默认为200ms,可以通过`-i`指定间隔时间) -* 再次第二次采样,获取所有线程的CPU时间,对比两次采样数据,计算出每个线程的增量CPU时间 -* 线程CPU使用率 = 线程增量CPU时间 / 采样间隔时间 * 100% +- 首先第一次采样,获取所有线程的 CPU 时间(调用的是`java.lang.management.ThreadMXBean#getThreadCpuTime()`及`sun.management.HotspotThreadMBean.getInternalThreadCpuTimes()`接口) +- 然后睡眠等待一个间隔时间(默认为 200ms,可以通过`-i`指定间隔时间) +- 再次第二次采样,获取所有线程的 CPU 时间,对比两次采样数据,计算出每个线程的增量 CPU 时间 +- 线程 CPU 使用率 = 线程增量 CPU 时间 / 采样间隔时间 \* 100% -> 注意: 这个统计也会产生一定的开销(JDK这个接口本身开销比较大),因此会看到as的线程占用一定的百分比,为了降低统计自身的开销带来的影响,可以把采样间隔拉长一些,比如5000毫秒。 +::: warning +注意: 这个统计也会产生一定的开销(JDK 这个接口本身开销比较大),因此会看到 as 的线程占用一定的百分比,为了降低统计自身的开销带来的影响,可以把采样间隔拉长一些,比如 5000 毫秒。 +::: -> 另外一种查看Java进程的线程cpu使用率方法:可以使用[`show-busy-java-threads`](https://github.com/oldratlee/useful-scripts/blob/dev-2.x/docs/java.md#-show-busy-java-threads)这个脚本。 +::: tip +另外一种查看 Java 进程的线程 cpu 使用率方法:可以使用[`show-busy-java-threads`](https://github.com/oldratlee/useful-scripts/blob/dev-2.x/docs/java.md#-show-busy-java-threads)这个脚本。 +::: ### 使用参考 -#### 支持一键展示当前最忙的前N个线程并打印堆栈: +#### 支持一键展示当前最忙的前 N 个线程并打印堆栈: ```shell $ thread -n 3 @@ -61,17 +65,17 @@ $ thread -n 3 "VM Periodic Task Thread" [Internal] cpuUsage=0.07% deltaTime=0ms time=584ms ``` -* 没有线程ID,包含`[Internal]`表示为JVM内部线程,参考[dashboard](dashboard.md)命令的介绍。 -* `cpuUsage`为采样间隔时间内线程的CPU使用率,与[dashboard](dashboard.md)命令的数据一致。 -* `deltaTime`为采样间隔时间内线程的增量CPU时间,小于1ms时被取整显示为0ms。 -* `time` 线程运行总CPU时间。 +- 没有线程 ID,包含`[Internal]`表示为 JVM 内部线程,参考[dashboard](dashboard.md)命令的介绍。 +- `cpuUsage`为采样间隔时间内线程的 CPU 使用率,与[dashboard](dashboard.md)命令的数据一致。 +- `deltaTime`为采样间隔时间内线程的增量 CPU 时间,小于 1ms 时被取整显示为 0ms。 +- `time` 线程运行总 CPU 时间。 注意:线程栈为第二采样结束时获取,不能表明采样间隔时间内该线程都是在处理相同的任务。建议间隔时间不要太长,可能间隔时间越大越不准确。 可以根据具体情况尝试指定不同的间隔时间,观察输出结果。 #### 当没有参数时,显示第一页线程的信息 -默认按照CPU增量时间降序排列,只显示第一页数据。 +默认按照 CPU 增量时间降序排列,只显示第一页数据。 ```shell $ thread @@ -97,8 +101,7 @@ ID NAME GROUP PRIORITY STATE %CPU #### thread --all, 显示所有匹配的线程 -显示所有匹配线程信息,有时需要获取全部JVM的线程数据进行分析。 - +显示所有匹配线程信息,有时需要获取全部 JVM 的线程数据进行分析。 #### thread id, 显示指定线程的运行堆栈 @@ -116,7 +119,7 @@ $ thread 1 #### thread -b, 找出当前阻塞其他线程的线程 -有时候我们发现应用卡住了, 通常是由于某个线程拿住了某个锁, 并且其他线程都在等待这把锁造成的。 为了排查这类问题, arthas提供了`thread -b`, 一键找出那个罪魁祸首。 +有时候我们发现应用卡住了, 通常是由于某个线程拿住了某个锁, 并且其他线程都在等待这把锁造成的。 为了排查这类问题, arthas 提供了`thread -b`, 一键找出那个罪魁祸首。 ```bash $ thread -b @@ -157,15 +160,16 @@ $ thread -b - java.util.concurrent.ThreadPoolExecutor$Worker@31a6493e ``` -> 注意, 目前只支持找出synchronized关键字阻塞住的线程, 如果是`java.util.concurrent.Lock`, 目前还不支持。 - +::: warning +注意, 目前只支持找出 synchronized 关键字阻塞住的线程, 如果是`java.util.concurrent.Lock`, 目前还不支持。 +::: #### thread -i, 指定采样时间间隔 -* `thread -i 1000` : 统计最近1000ms内的线程CPU时间。 +- `thread -i 1000` : 统计最近 1000ms 内的线程 CPU 时间。 + +- `thread -n 3 -i 1000` : 列出 1000ms 内最忙的 3 个线程栈 -* `thread -n 3 -i 1000` : 列出1000ms内最忙的3个线程栈 - ```bash $ thread -n 3 -i 1000 "as-command-execute-daemon" Id=4759 cpuUsage=23% RUNNABLE diff --git a/site/src/site/sphinx/trace.md b/site-vuepress/docs/doc/trace.md similarity index 66% rename from site/src/site/sphinx/trace.md rename to site-vuepress/docs/doc/trace.md index d666452c9..7ac9ad93a 100644 --- a/site/src/site/sphinx/trace.md +++ b/site-vuepress/docs/doc/trace.md @@ -1,55 +1,56 @@ -trace -=== +# trace [`trace`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-trace) -> 方法内部调用路径,并输出方法路径上的每个节点上耗时 +::: tip +方法内部调用路径,并输出方法路径上的每个节点上耗时 +::: `trace` 命令能主动搜索 `class-pattern`/`method-pattern` 对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。 ### 参数说明 -|参数名称|参数说明| -|---:|:---| -|*class-pattern*|类名表达式匹配| -|*method-pattern*|方法名表达式匹配| -|*condition-express*|条件表达式| -|[E]|开启正则表达式匹配,默认为通配符匹配| -|`[n:]`|命令执行次数| -|`#cost`|方法执行耗时| +| 参数名称 | 参数说明 | +| ------------------: | :----------------------------------- | +| _class-pattern_ | 类名表达式匹配 | +| _method-pattern_ | 方法名表达式匹配 | +| _condition-express_ | 条件表达式 | +| [E] | 开启正则表达式匹配,默认为通配符匹配 | +| `[n:]` | 命令执行次数 | +| `#cost` | 方法执行耗时 | 这里重点要说明的是观察表达式,观察表达式的构成主要由 ognl 表达式组成,所以你可以这样写`"{params,returnObj}"`,只要是一个合法的 ognl 表达式,都能被正常支持。 观察的维度也比较多,主要体现在参数 `advice` 的数据结构上。`Advice` 参数最主要是封装了通知节点的所有信息。 - 请参考[表达式核心变量](advice-class.md)中关于该节点的描述。 -* 特殊用法请参考:[https://github.com/alibaba/arthas/issues/71](https://github.com/alibaba/arthas/issues/71) -* OGNL表达式官网:[https://commons.apache.org/proper/commons-ognl/language-guide.html](https://commons.apache.org/proper/commons-ognl/language-guide.html) +- 特殊用法请参考:[https://github.com/alibaba/arthas/issues/71](https://github.com/alibaba/arthas/issues/71) +- OGNL 表达式官网:[https://commons.apache.org/proper/commons-ognl/language-guide.html](https://commons.apache.org/proper/commons-ognl/language-guide.html) -很多时候我们只想看到某个方法的rt大于某个时间之后的trace结果,现在Arthas可以按照方法执行的耗时来进行过滤了,例如`trace *StringUtils isBlank '#cost>100'`表示当执行时间超过100ms的时候,才会输出trace的结果。 +很多时候我们只想看到某个方法的 rt 大于某个时间之后的 trace 结果,现在 Arthas 可以按照方法执行的耗时来进行过滤了,例如`trace *StringUtils isBlank '#cost>100'`表示当执行时间超过 100ms 的时候,才会输出 trace 的结果。 -> watch/stack/trace这个三个命令都支持`#cost` +::: tip +watch/stack/trace 这个三个命令都支持`#cost` +::: ### 注意事项 -* `trace` 能方便的帮助你定位和发现因 RT 高而导致的性能问题缺陷,但其每次只能跟踪一级方法的调用链路。 +- `trace` 能方便的帮助你定位和发现因 RT 高而导致的性能问题缺陷,但其每次只能跟踪一级方法的调用链路。 - 参考:[Trace命令的实现原理](https://github.com/alibaba/arthas/issues/597) + 参考:[Trace 命令的实现原理](https://github.com/alibaba/arthas/issues/597) -* 3.3.0 版本后,可以使用动态Trace功能,不断增加新的匹配类,参考下面的示例。 +- 3.3.0 版本后,可以使用动态 Trace 功能,不断增加新的匹配类,参考下面的示例。 -* 目前不支持 `trace java.lang.Thread getName`,参考issue: [#1610](https://github.com/alibaba/arthas/issues/1610) ,考虑到不是非常必要场景,且修复有一定难度,因此当前暂不修复 +- 目前不支持 `trace java.lang.Thread getName`,参考 issue: [#1610](https://github.com/alibaba/arthas/issues/1610) ,考虑到不是非常必要场景,且修复有一定难度,因此当前暂不修复 ### 使用参考 - #### 启动 Demo 启动[快速入门](quick-start.md)里的`math-game`。 -#### trace函数 +#### trace 函数 ```bash $ trace demo.MathGame run @@ -64,9 +65,11 @@ Affect(class-cnt:1 , method-cnt:1) cost in 28 ms. `---[0.03752ms] demo.MathGame:primeFactors() #24 [throws Exception] ``` -> 结果里的 `#24`,表示在run函数里,在源文件的第`24`行调用了`primeFactors()`函数。 +::: tip +结果里的 `#24`,表示在 run 函数里,在源文件的第`24`行调用了`primeFactors()`函数。 +::: -#### trace次数限制 +#### trace 次数限制 如果方法调用的次数很多,那么可以用`-n`参数指定捕捉结果的次数。比如下面的例子里,捕捉到一次调用就退出命令。 @@ -82,12 +85,11 @@ Affect(class-cnt:1 , method-cnt:1) cost in 20 ms. Command execution times exceed limit: 1, so command will exit. You can set it with -n option. ``` +#### 包含 jdk 的函数 -#### 包含jdk的函数 - -* `--skipJDKMethod ` skip jdk method trace, default value true. +- `--skipJDKMethod ` skip jdk method trace, default value true. -默认情况下,trace不会包含jdk里的函数调用,如果希望trace jdk里的函数,需要显式设置`--skipJDKMethod false`。 +默认情况下,trace 不会包含 jdk 里的函数调用,如果希望 trace jdk 里的函数,需要显式设置`--skipJDKMethod false`。 ```bash $ trace --skipJDKMethod false demo.MathGame run @@ -131,18 +133,20 @@ Affect(class-cnt:1 , method-cnt:1) cost in 41 ms. `---[0.05447ms] demo.MathGame:print() ``` -> 只会展示耗时大于10ms的调用路径,有助于在排查问题的时候,只关注异常情况 +::: tip +只会展示耗时大于 10ms 的调用路径,有助于在排查问题的时候,只关注异常情况 +::: - 是不是很眼熟,没错,在 JProfiler 等收费软件中你曾经见识类似的功能,这里你将可以通过命令就能打印出指定调用路径。 友情提醒下,`trace` 在执行的过程中本身是会有一定的性能开销,在统计的报告中并未像 JProfiler 一样预先减去其自身的统计开销。所以这统计出来有些许的不准,渲染路径上调用的类、方法越多,性能偏差越大。但还是能让你看清一些事情的。 - [12.033735ms] 的含义,`12.033735` 的含义是:当前节点在当前步骤的耗时,单位为毫秒 - [0,0,0ms,11]xxx:yyy() [throws Exception],对该方法中相同的方法调用进行了合并,`0,0,0ms,11` 表示方法调用耗时,`min,max,total,count`;`throws Exception` 表明该方法调用中存在异常返回 - 这里存在一个统计不准确的问题,就是所有方法耗时加起来可能会小于该监测方法的总耗时,这个是由于 Arthas 本身的逻辑会有一定的耗时 -#### trace多个类或者多个函数 +#### trace 多个类或者多个函数 -trace命令只会trace匹配到的函数里的子调用,并不会向下trace多层。因为trace是代价比较贵的,多层trace可能会导致最终要trace的类和函数非常多。 +trace 命令只会 trace 匹配到的函数里的子调用,并不会向下 trace 多层。因为 trace 是代价比较贵的,多层 trace 可能会导致最终要 trace 的类和函数非常多。 -可以用正则表匹配路径上的多个类和函数,一定程度上达到多层trace的效果。 +可以用正则表匹配路径上的多个类和函数,一定程度上达到多层 trace 的效果。 ```bash trace -E com.test.ClassA|org.test.ClassB method1|method2|method3 @@ -156,12 +160,13 @@ trace -E com.test.ClassA|org.test.ClassB method1|method2|method3 trace javax.servlet.Filter * --exclude-class-pattern com.demo.TestFilter ``` -### 动态trace +### 动态 trace -> 3.3.0 版本后支持。 +::: tip +3.3.0 版本后支持。 +::: - -打开终端1,trace上面demo里的`run`函数,可以看到打印出 `listenerId: 1`: +打开终端 1,trace 上面 demo 里的`run`函数,可以看到打印出 `listenerId: 1`: ```bash [arthas@59161]$ trace demo.MathGame run @@ -177,7 +182,7 @@ Affect(class count: 1 , method count: 1) cost in 112 ms, listenerId: 1 `---[0.167786ms] demo.MathGame:print() #25 ``` -现在想要深入子函数`primeFactors`,可以打开一个新终端2,使用`telnet localhost 3658`连接上arthas,再trace `primeFactors`时,指定`listenerId`。 +现在想要深入子函数`primeFactors`,可以打开一个新终端 2,使用`telnet localhost 3658`连接上 arthas,再 trace `primeFactors`时,指定`listenerId`。 ```bash [arthas@59161]$ trace demo.MathGame primeFactors --listenerId 1 @@ -185,9 +190,9 @@ Press Q or Ctrl+C to abort. Affect(class count: 1 , method count: 1) cost in 34 ms, listenerId: 1 ``` -这时终端2打印的结果,说明已经增强了一个函数:`Affect(class count: 1 , method count: 1)`,但不再打印更多的结果。 +这时终端 2 打印的结果,说明已经增强了一个函数:`Affect(class count: 1 , method count: 1)`,但不再打印更多的结果。 -再查看终端1,可以发现trace的结果增加了一层,打印了`primeFactors`函数里的内容: +再查看终端 1,可以发现 trace 的结果增加了一层,打印了`primeFactors`函数里的内容: ```bash `---ts=2020-07-09 16:49:29;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69 @@ -203,12 +208,11 @@ Affect(class count: 1 , method count: 1) cost in 34 ms, listenerId: 1 `---[0.084025ms] demo.MathGame:print() #25 ``` -通过指定`listenerId`的方式动态trace,可以不断深入。另外 `watch`/`tt`/`monitor`等命令也支持类似的功能。 - +通过指定`listenerId`的方式动态 trace,可以不断深入。另外 `watch`/`tt`/`monitor`等命令也支持类似的功能。 -### trace结果时间不准确问题 +### trace 结果时间不准确问题 -比如下面的结果里:`0.705196 > (0.152743 + 0.145825)` +比如下面的结果里:`0.705196 > (0.152743 + 0.145825)` ```bash $ trace demo.MathGame run -n 1 @@ -222,30 +226,33 @@ Affect(class count: 1 , method count: 1) cost in 66 ms, listenerId: 1 那么其它的时间消耗在哪些地方? -1. 没有被trace到的函数。比如`java.*` 下的函数调用默认会忽略掉。通过增加`--skipJDKMethod false`参数可以打印出来。 - - ```bash - $ trace demo.MathGame run --skipJDKMethod false - Press Q or Ctrl+C to abort. - Affect(class count: 1 , method count: 1) cost in 35 ms, listenerId: 2 - `---ts=2021-02-08 11:27:48;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@232204a1 - `---[0.810591ms] demo.MathGame:run() - +---[0.034568ms] java.util.Random:nextInt() #23 - +---[0.119367ms] demo.MathGame:primeFactors() #24 [throws Exception] - +---[0.017407ms] java.lang.StringBuilder:() #28 - +---[0.127922ms] java.lang.String:format() #57 - +---[min=0.01419ms,max=0.020221ms,total=0.034411ms,count=2] java.lang.StringBuilder:append() #57 - +---[0.021911ms] java.lang.Exception:getMessage() #57 - +---[0.015643ms] java.lang.StringBuilder:toString() #57 - `---[0.086622ms] java.io.PrintStream:println() #57 - ``` +1. 没有被 trace 到的函数。比如`java.*` 下的函数调用默认会忽略掉。通过增加`--skipJDKMethod false`参数可以打印出来。 + + ```bash + $ trace demo.MathGame run --skipJDKMethod false + Press Q or Ctrl+C to abort. + Affect(class count: 1 , method count: 1) cost in 35 ms, listenerId: 2 + `---ts=2021-02-08 11:27:48;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@232204a1 + `---[0.810591ms] demo.MathGame:run() + +---[0.034568ms] java.util.Random:nextInt() #23 + +---[0.119367ms] demo.MathGame:primeFactors() #24 [throws Exception] + +---[0.017407ms] java.lang.StringBuilder:() #28 + +---[0.127922ms] java.lang.String:format() #57 + +---[min=0.01419ms,max=0.020221ms,total=0.034411ms,count=2] java.lang.StringBuilder:append() #57 + +---[0.021911ms] java.lang.Exception:getMessage() #57 + +---[0.015643ms] java.lang.StringBuilder:toString() #57 + `---[0.086622ms] java.io.PrintStream:println() #57 + ``` + 2. 非函数调用的指令消耗。比如 `i++`, `getfield`等指令。 -3. 在代码执行过程中,JVM可能出现停顿,比如GC,进入同步块等。 +3. 在代码执行过程中,JVM 可能出现停顿,比如 GC,进入同步块等。 #### 使用 -v 参数打印更多信息 -> watch/trace/monitor/stack/tt 命令都支持 `-v` 参数 +::: tip +watch/trace/monitor/stack/tt 命令都支持 `-v` 参数 +::: 当命令执行之后,没有输出结果。有两种可能: @@ -254,4 +261,4 @@ Affect(class count: 1 , method count: 1) cost in 66 ms, listenerId: 1 但用户区分不出是哪种情况。 -使用 `-v`选项,则会打印`Condition express`的具体值和执行结果,方便确认。 \ No newline at end of file +使用 `-v`选项,则会打印`Condition express`的具体值和执行结果,方便确认。 diff --git a/site/src/site/sphinx/tt.md b/site-vuepress/docs/doc/tt.md similarity index 72% rename from site/src/site/sphinx/tt.md rename to site-vuepress/docs/doc/tt.md index bd9472ce2..b72cd29de 100644 --- a/site/src/site/sphinx/tt.md +++ b/site-vuepress/docs/doc/tt.md @@ -1,9 +1,10 @@ -tt -=== +# tt [`tt`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-tt) -> 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测 +::: tip +方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测 +::: `watch` 虽然很方便和灵活,但需要提前想清楚观察表达式的拼写,这对排查问题而言要求太高,因为很多时候我们并不清楚问题出自于何方,只能靠蛛丝马迹进行猜测。 @@ -13,7 +14,6 @@ tt ### 使用参考 - #### 启动 Demo 启动[快速入门](quick-start.md)里的`math-game`。 @@ -39,50 +39,51 @@ Affect(class-cnt:1 , method-cnt:1) cost in 66 ms. - `-t` - tt 命令有很多个主参数,`-t` 就是其中之一。这个参数的表明希望记录下类 `*Test` 的 `print` 方法的每次执行情况。 - + tt 命令有很多个主参数,`-t` 就是其中之一。这个参数的表明希望记录下类 `*Test` 的 `print` 方法的每次执行情况。 + - `-n 3` - 当你执行一个调用量不高的方法时可能你还能有足够的时间用 `CTRL+C` 中断 tt 命令记录的过程,但如果遇到调用量非常大的方法,瞬间就能将你的 JVM 内存撑爆。 - - 此时你可以通过 `-n` 参数指定你需要记录的次数,当达到记录次数时 Arthas 会主动中断tt命令的记录过程,避免人工操作无法停止的情况。 + 当你执行一个调用量不高的方法时可能你还能有足够的时间用 `CTRL+C` 中断 tt 命令记录的过程,但如果遇到调用量非常大的方法,瞬间就能将你的 JVM 内存撑爆。 + + 此时你可以通过 `-n` 参数指定你需要记录的次数,当达到记录次数时 Arthas 会主动中断 tt 命令的记录过程,避免人工操作无法停止的情况。 - 表格字段说明 -|表格字段|字段解释| -|---|---| -|INDEX|时间片段记录编号,每一个编号代表着一次调用,后续tt还有很多命令都是基于此编号指定记录操作,非常重要。| -|TIMESTAMP|方法执行的本机时间,记录了这个时间片段所发生的本机时间| -|COST(ms)|方法执行的耗时| -|IS-RET|方法是否以正常返回的形式结束| -|IS-EXP|方法是否以抛异常的形式结束| -|OBJECT|执行对象的`hashCode()`,注意,曾经有人误认为是对象在JVM中的内存地址,但很遗憾他不是。但他能帮助你简单的标记当前执行方法的类实体| -|CLASS|执行的类名| -|METHOD|执行的方法名| +| 表格字段 | 字段解释 | +| --------- | --------------------------------------------------------------------------------------------------------------------------------- | +| INDEX | 时间片段记录编号,每一个编号代表着一次调用,后续 tt 还有很多命令都是基于此编号指定记录操作,非常重要。 | +| TIMESTAMP | 方法执行的本机时间,记录了这个时间片段所发生的本机时间 | +| COST(ms) | 方法执行的耗时 | +| IS-RET | 方法是否以正常返回的形式结束 | +| IS-EXP | 方法是否以抛异常的形式结束 | +| OBJECT | 执行对象的`hashCode()`,注意,曾经有人误认为是对象在 JVM 中的内存地址,但很遗憾他不是。但他能帮助你简单的标记当前执行方法的类实体 | +| CLASS | 执行的类名 | +| METHOD | 执行的方法名 | - 条件表达式 - 不知道大家是否有在使用过程中遇到以下困惑 - * Arthas 似乎很难区分出重载的方法 - * 我只需要观察特定参数,但是 tt 却全部都给我记录了下来 - - 条件表达式也是用 `OGNL` 来编写,核心的判断对象依然是 `Advice` 对象。除了 `tt` 命令之外,`watch`、`trace`、`stack` 命令也都支持条件表达式。 - + 不知道大家是否有在使用过程中遇到以下困惑 + + - Arthas 似乎很难区分出重载的方法 + - 我只需要观察特定参数,但是 tt 却全部都给我记录了下来 + + 条件表达式也是用 `OGNL` 来编写,核心的判断对象依然是 `Advice` 对象。除了 `tt` 命令之外,`watch`、`trace`、`stack` 命令也都支持条件表达式。 + - 解决方法重载 - `tt -t *Test print params.length==1` - - 通过制定参数个数的形式解决不同的方法签名,如果参数个数一样,你还可以这样写 - - `tt -t *Test print 'params[1] instanceof Integer'` - + `tt -t *Test print params.length==1` + + 通过制定参数个数的形式解决不同的方法签名,如果参数个数一样,你还可以这样写 + + `tt -t *Test print 'params[1] instanceof Integer'` + - 解决指定参数 - `tt -t *Test print params[0].mobile=="13989838402"` + `tt -t *Test print params[0].mobile=="13989838402"` - 构成条件表达式的 `Advice` 对象 - 前边看到了很多条件表达式中,都使用了 `params[0]`,有关这个变量的介绍,请参考[表达式核心变量](advice-class.md) + 前边看到了很多条件表达式中,都使用了 `params[0]`,有关这个变量的介绍,请参考[表达式核心变量](advice-class.md) #### 检索调用记录 @@ -150,7 +151,7 @@ Affect(row-cnt:1) cost in 11 ms. 当你稍稍做了一些调整之后,你可能需要前端系统重新触发一次你的调用,此时得求爷爷告奶奶的需要前端配合联调的同学再次发起一次调用。而有些场景下,这个调用不是这么好触发的。 `tt` 命令由于保存了当时调用的所有现场信息,所以我们可以自己主动对一个 `INDEX` 编号的时间片自主发起一次调用,从而解放你的沟通成本。此时你需要 `-p` 参数。通过 `--replay-times` 指定 -调用次数,通过 `--replay-interval` 指定多次调用间隔(单位ms, 默认1000ms) +调用次数,通过 `--replay-interval` 指定多次调用间隔(单位 ms, 默认 1000ms) ```bash $ tt -i 1004 -p @@ -175,12 +176,11 @@ Affect(row-cnt:1) cost in 14 ms. 你会发现结果虽然一样,但调用的路径发生了变化,由原来的程序发起变成了 Arthas 自己的内部线程发起的调用了。 - #### 观察表达式 `-w, --watch-express` 观察时空隧道使用`ognl` 表达式 -* 使用[表达式核心变量](advice-class.md)中所有变量作为已知条件编写表达式。 +- 使用[表达式核心变量](advice-class.md)中所有变量作为已知条件编写表达式。 ```bash [arthas@10718]$ tt -t demo.MathGame run -n 5 @@ -194,7 +194,7 @@ Affect(class count: 1 , method count: 1) cost in 56 ms, listenerId: 1 Affect(row-cnt:1) cost in 7 ms. ``` -* 获取类的静态字段、调用类的静态方法 +- 获取类的静态字段、调用类的静态方法 ```bash [arthas@10718]$ tt -t demo.MathGame run -n 5 @@ -209,18 +209,16 @@ Affect(class count: 1 , method count: 1) cost in 56 ms, listenerId: 1 注意这里使用 `com.taobao.arthas.core.advisor.Advice#getLoader`加载,使用精确`classloader` [ognl](ognl.md)更好。 - -高级用法 [获取spring context 调用bean 方法](https://github.com/alibaba/arthas/issues/482) - +高级用法 [获取 spring context 调用 bean 方法](https://github.com/alibaba/arthas/issues/482) - 需要强调的点 1. **ThreadLocal 信息丢失** 很多框架偷偷的将一些环境变量信息塞到了发起调用线程的 ThreadLocal 中,由于调用线程发生了变化,这些 ThreadLocal 线程信息无法通过 Arthas 保存,所以这些信息将会丢失。 - + 一些常见的 CASE 比如:鹰眼的 TraceId 等。 - + 2. **引用的对象** 需要强调的是,`tt` 命令是将当前环境的对象引用保存起来,但仅仅也只能保存一个引用而已。如果方法内部对入参进行了变更,或者返回的对象经过了后续的处理,那么在 `tt` 查看的时候将无法看到当时最准确的值。这也是为什么 `watch` 命令存在的意义。 diff --git a/site-vuepress/docs/doc/tunnel.md b/site-vuepress/docs/doc/tunnel.md new file mode 100644 index 000000000..4b249d892 --- /dev/null +++ b/site-vuepress/docs/doc/tunnel.md @@ -0,0 +1,160 @@ +# Arthas Tunnel + +通过 Arthas Tunnel Server/Client 来远程管理/连接多个 Agent。 + +比如,在流式计算里,Java 进程可以是在不同的机器启动的,想要使用 Arthas 去诊断会比较麻烦,因为用户通常没有机器的权限,即使登陆机器也分不清是哪个 Java 进程。 + +在这种情况下,可以使用 Arthas Tunnel Server/Client。 + +参考: + +- 1: [Web Console](web-console.md) +- 2: [Arthas Spring Boot Starter](spring-boot-starter.md) + +### 下载部署 arthas tunnel server + +[https://github.com/alibaba/arthas/releases](https://github.com/alibaba/arthas/releases) + +- 从 Maven 仓库下载:[![](https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square "Arthas")](https://arthas.aliyun.com/download/arthas-tunnel-server/latest_version?mirror=aliyun) + +- 从 Github Releases 页下载: [https://github.com/alibaba/arthas/releases](https://github.com/alibaba/arthas/releases) + +Arthas tunnel server 是一个 spring boot fat jar 应用,直接`java -jar`启动: + +```bash +java -jar arthas-tunnel-server.jar +``` + +默认情况下,arthas tunnel server 的 web 端口是`8080`,arthas agent 连接的端口是`7777`。 + +启动之后,可以访问 [http://127.0.0.1:8080/](http://127.0.0.1:8080/) ,再通过`agentId`连接到已注册的 arthas agent 上。 + +通过 Spring Boot 的 Endpoint,可以查看到具体的连接信息: [http://127.0.0.1:8080/actuator/arthas](http://127.0.0.1:8080/actuator/arthas) ,登陆用户名是`arthas`,密码在 arthas tunnel server 的日志里可以找到,比如: + +``` +32851 [main] INFO o.s.b.a.s.s.UserDetailsServiceAutoConfiguration + +Using generated security password: f1dca050-3777-48f4-a577-6367e55a78a2 +``` + +### 启动 arthas 时连接到 tunnel server + +在启动 arthas,可以传递`--tunnel-server`参数,比如: + +```bash +as.sh --tunnel-server 'ws://127.0.0.1:7777/ws' +``` + +也可以使用下面的测试地址(不保证一直可用): + +```bash +as.sh --tunnel-server 'ws://47.75.156.201:80/ws' +``` + +- 如果有特殊需求,可以通过`--agent-id`参数里指定 agentId。默认情况下,会生成随机 ID。 + +attach 成功之后,会打印出 agentId,比如: + +```bash + ,---. ,------. ,--------.,--. ,--. ,---. ,---. + / O \ | .--. ''--. .--'| '--' | / O \ ' .-' +| .-. || '--'.' | | | .--. || .-. |`. `-. +| | | || |\ \ | | | | | || | | |.-' | +`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----' + + +wiki https://arthas.aliyun.com/doc +tutorials https://arthas.aliyun.com/doc/arthas-tutorials.html +version 3.1.2 +pid 86183 +time 2019-08-30 15:40:53 +id URJZ5L48RPBR2ALI5K4V +``` + +如果是启动时没有连接到 tunnel server,也可以在后续自动重连成功之后,通过 session 命令来获取 agentId: + +```bash +[arthas@86183]$ session + Name Value +----------------------------------------------------- + JAVA_PID 86183 + SESSION_ID f7273eb5-e7b0-4a00-bc5b-3fe55d741882 + AGENT_ID URJZ5L48RPBR2ALI5K4V + TUNNEL_SERVER ws://47.75.156.201:80/ws +``` + +以上面的为例,在浏览器里访问 [http://47.75.156.201/arthas/?port=80](http://47.75.156.201/arthas/?port=80) ,输入 `agentId`,就可以连接到本机上的 arthas 了。 + +![](/images/arthas-tunnel-server.png) + +### 最佳实践 + +::: tip +注意,agentId 要保持唯一,否则会在 tunnel server 上冲突,不能正常工作。 +::: + +如果 arthas agent 配置了 `appName`,则生成的 agentId 会带上`appName`的前缀。 + +比如在加上启动参数:`as.sh --tunnel-server 'ws://127.0.0.1:7777/ws' --app-name demoapp` ,则生成的 agentId 可能是`demoapp_URJZ5L48RPBR2ALI5K4V`。 + +Tunnel server 会以`_`做分隔符,提取出`appName`,方便按应用进行管理。 + +::: tip +另外,也可以在解压的 arthas 目录下的 `arthas.properties`,或者在 spring boot 应用的`application.properties`里配置`appName`。 +::: + +### Tunnel Server 的管理页面 + +在本地启动 tunnel-server,然后使用`as.sh` attach,并且指定应用名`--app-name test`: + +``` +$ as.sh --tunnel-server 'ws://127.0.0.1:7777/ws' --app-name test +telnet connecting to arthas server... current timestamp is 1627539688 +Trying 127.0.0.1... +Connected to 127.0.0.1. +Escape character is '^]'. + ,---. ,------. ,--------.,--. ,--. ,---. ,---. + / O \ | .--. ''--. .--'| '--' | / O \ ' .-' +| .-. || '--'.' | | | .--. || .-. |`. `-. +| | | || |\ \ | | | | | || | | |.-' | +`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----' + + +wiki https://arthas.aliyun.com/doc +tutorials https://arthas.aliyun.com/doc/arthas-tutorials.html +version 3.5.3 +main_class demo.MathGame +pid 65825 +time 2021-07-29 14:21:29 +id test_PE3LZO9NA9ENJYTPGL9L +``` + +然后访问 tunnel-server,可以看到所有连接的应用列表: + +[http://localhost:8080/apps.html](http://localhost:8080/apps.html) + +![](/images/tunnel-server-apps.png) + +再打开详情,则可以看到连接的所有 agent 列表: + +[http://localhost:8080/agents.html?app=test](http://localhost:8080/agents.html?app=test) + +![](/images/tunnel-server-agents.png) + +### 权限管理 + +目前 tunnel server 没有专门的权限管理,用户需要自行开发,对 app name 鉴权。 + +### 集群方式管理 + +如果希望部署多台 tunnel server,可以通过 nginx 做转发,redis 来保存 agent 信息。 + +- nginx 需要配置 sticky session,保证用户 web socket 连接到同一个后端 tunnel server 上。简单的配置方式是用`ip_hash`。 + +### Arthas tunnel server 的工作原理 + +``` +browser <-> arthas tunnel server <-> arthas tunnel client <-> arthas agent +``` + +[tunnel-server/README.md](https://github.com/alibaba/arthas/blob/master/tunnel-server/README.md#) diff --git a/site/src/site/sphinx/version.md b/site-vuepress/docs/doc/version.md similarity index 88% rename from site/src/site/sphinx/version.md rename to site-vuepress/docs/doc/version.md index 293fa6c6e..d4dbe2d40 100644 --- a/site/src/site/sphinx/version.md +++ b/site-vuepress/docs/doc/version.md @@ -1,5 +1,4 @@ -version -=== +# version 输出当前目标 Java 进程所加载的 Arthas 版本号 @@ -9,4 +8,3 @@ version $ version 3.5.1 ``` - diff --git a/site/src/site/sphinx/vmoption.md b/site-vuepress/docs/doc/vmoption.md similarity index 94% rename from site/src/site/sphinx/vmoption.md rename to site-vuepress/docs/doc/vmoption.md index b56665b6c..08d69bdc4 100644 --- a/site/src/site/sphinx/vmoption.md +++ b/site-vuepress/docs/doc/vmoption.md @@ -1,13 +1,14 @@ -vmoption -=== +# vmoption [`vmoption`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-vmoption) -> 查看,更新VM诊断相关的参数 +::: tip +查看,更新 VM 诊断相关的参数 +::: ### 使用参考 -#### 查看所有的option +#### 查看所有的 option ```bash [arthas@56963]$ vmoption @@ -37,7 +38,7 @@ vmoption PrintConcurrentLocks false DEFAULT true ``` -#### 查看指定的option +#### 查看指定的 option ```bash $ vmoption PrintGC @@ -46,7 +47,7 @@ $ vmoption PrintGC PrintGC false MANAGEMENT true ``` -#### 更新指定的option +#### 更新指定的 option ```bash $ vmoption PrintGC true diff --git a/site/src/site/sphinx/vmtool.md b/site-vuepress/docs/doc/vmtool.md similarity index 76% rename from site/src/site/sphinx/vmtool.md rename to site-vuepress/docs/doc/vmtool.md index e78a0a822..77d6b749a 100644 --- a/site/src/site/sphinx/vmtool.md +++ b/site-vuepress/docs/doc/vmtool.md @@ -1,13 +1,14 @@ -vmtool -=== +# vmtool -> @since 3.5.1 +::: tip +@since 3.5.1 +::: [`vmtool`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-vmtool) -`vmtool` 利用`JVMTI`接口,实现查询内存对象,强制GC等功能。 +`vmtool` 利用`JVMTI`接口,实现查询内存对象,强制 GC 等功能。 -* [JVM Tool Interface](https://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html) +- [JVM Tool Interface](https://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html) ### 获取对象 @@ -27,7 +28,9 @@ $ vmtool --action getInstances --className java.lang.String --limit 10 ] ``` -> 通过 `--limit`参数,可以限制返回值数量,避免获取超大数据时对JVM造成压力。默认值是10。 +::: tip +通过 `--limit`参数,可以限制返回值数量,避免获取超大数据时对 JVM 造成压力。默认值是 10。 +::: ### 指定 classloader name @@ -35,10 +38,9 @@ $ vmtool --action getInstances --className java.lang.String --limit 10 vmtool --action getInstances --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader --className org.springframework.context.ApplicationContext ``` - ### 指定 classloader hash -可以通过`sc`命令查找到加载class的 classloader。 +可以通过`sc`命令查找到加载 class 的 classloader。 ```bash $ sc -d org.springframework.context.ApplicationContext @@ -60,26 +62,30 @@ vmtool --action getInstances -c 19469ea2 --className org.springframework.context ### 指定返回结果展开层数 -> `getInstances` action返回结果绑定到`instances`变量上,它是数组。 +::: tip +`getInstances` action 返回结果绑定到`instances`变量上,它是数组。 -> 通过 `-x`/`--expand` 参数可以指定结果的展开层次,默认值是1。 +通过 `-x`/`--expand` 参数可以指定结果的展开层次,默认值是 1。 +::: -```bash +```bash vmtool --action getInstances -c 19469ea2 --className org.springframework.context.ApplicationContext -x 2 ``` ### 执行表达式 -> `getInstances` action返回结果绑定到`instances`变量上,它是数组。可以通过`--express`参数执行指定的表达式。 +::: tip +`getInstances` action 返回结果绑定到`instances`变量上,它是数组。可以通过`--express`参数执行指定的表达式。 +::: ```bash vmtool --action getInstances --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader --className org.springframework.context.ApplicationContext --express 'instances[0].getBeanDefinitionNames()' ``` -### 强制GC +### 强制 GC ```bash vmtool --action forceGc ``` -* 可以结合 [`vmoption`](vmoption.md) 命令动态打开`PrintGC`开关。 \ No newline at end of file +- 可以结合 [`vmoption`](vmoption.md) 命令动态打开`PrintGC`开关。 diff --git a/site/src/site/sphinx/watch.md b/site-vuepress/docs/doc/watch.md similarity index 70% rename from site/src/site/sphinx/watch.md rename to site-vuepress/docs/doc/watch.md index 62a75ef68..ba8e8d730 100644 --- a/site/src/site/sphinx/watch.md +++ b/site-vuepress/docs/doc/watch.md @@ -1,52 +1,56 @@ -watch -=== +# watch [`watch`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-watch) -> 函数执行数据观测 +::: tip +函数执行数据观测 +::: -让你能方便的观察到指定函数的调用情况。能观察到的范围为:`返回值`、`抛出异常`、`入参`,通过编写 OGNL 表达式进行对应变量的查看。 +让你能方便的观察到指定函数的调用情况。能观察到的范围为:`返回值`、`抛出异常`、`入参`,通过编写 OGNL 表达式进行对应变量的查看。 ### 参数说明 watch 的参数比较多,主要是因为它能在 4 个不同的场景观察对象 -|参数名称|参数说明| -|---:|:---| -|*class-pattern*|类名表达式匹配| -|*method-pattern*|函数名表达式匹配| -|*express*|观察表达式,默认值:`{params, target, returnObj}`| -|*condition-express*|条件表达式| -|[b]|在**函数调用之前**观察| -|[e]|在**函数异常之后**观察| -|[s]|在**函数返回之后**观察| -|[f]|在**函数结束之后**(正常返回和异常返回)观察| -|[E]|开启正则表达式匹配,默认为通配符匹配| -|[x:]|指定输出结果的属性遍历深度,默认为 1,最大值是4| - -这里重点要说明的是观察表达式,观察表达式的构成主要由 ognl 表达式组成,所以你可以这样写`"{params,returnObj}"`,只要是一个合法的 ognl 表达式,都能被正常支持。 +| 参数名称 | 参数说明 | +| ------------------: | :------------------------------------------------ | +| _class-pattern_ | 类名表达式匹配 | +| _method-pattern_ | 函数名表达式匹配 | +| _express_ | 观察表达式,默认值:`{params, target, returnObj}` | +| _condition-express_ | 条件表达式 | +| [b] | 在**函数调用之前**观察 | +| [e] | 在**函数异常之后**观察 | +| [s] | 在**函数返回之后**观察 | +| [f] | 在**函数结束之后**(正常返回和异常返回)观察 | +| [E] | 开启正则表达式匹配,默认为通配符匹配 | +| [x:] | 指定输出结果的属性遍历深度,默认为 1,最大值是 4 | + +这里重点要说明的是观察表达式,观察表达式的构成主要由 ognl 表达式组成,所以你可以这样写`"{params,returnObj}"`,只要是一个合法的 ognl 表达式,都能被正常支持。 观察的维度也比较多,主要体现在参数 `advice` 的数据结构上。`Advice` 参数最主要是封装了通知节点的所有信息。请参考[表达式核心变量](advice-class.md)中关于该节点的描述。 -* 特殊用法请参考:[https://github.com/alibaba/arthas/issues/71](https://github.com/alibaba/arthas/issues/71) -* OGNL表达式官网:[https://commons.apache.org/proper/commons-ognl/language-guide.html](https://commons.apache.org/proper/commons-ognl/language-guide.html) +- 特殊用法请参考:[https://github.com/alibaba/arthas/issues/71](https://github.com/alibaba/arthas/issues/71) +- OGNL 表达式官网:[https://commons.apache.org/proper/commons-ognl/language-guide.html](https://commons.apache.org/proper/commons-ognl/language-guide.html) **特别说明**: -* watch 命令定义了4个观察事件点,即 `-b` 函数调用前,`-e` 函数异常后,`-s` 函数返回后,`-f` 函数结束后 -* 4个观察事件点 `-b`、`-e`、`-s` 默认关闭,`-f` 默认打开,当指定观察点被打开后,在相应事件点会对观察表达式进行求值并输出 -* 这里要注意`函数入参`和`函数出参`的区别,有可能在中间被修改导致前后不一致,除了 `-b` 事件点 `params` 代表函数入参外,其余事件都代表函数出参 -* 当使用 `-b` 时,由于观察事件点是在函数调用前,此时返回值或异常均不存在 -* 在watch命令的结果里,会打印出`location`信息。`location`有三种可能值:`AtEnter`,`AtExit`,`AtExceptionExit`。对应函数入口,函数正常return,函数抛出异常。 +- watch 命令定义了 4 个观察事件点,即 `-b` 函数调用前,`-e` 函数异常后,`-s` 函数返回后,`-f` 函数结束后 +- 4 个观察事件点 `-b`、`-e`、`-s` 默认关闭,`-f` 默认打开,当指定观察点被打开后,在相应事件点会对观察表达式进行求值并输出 +- 这里要注意`函数入参`和`函数出参`的区别,有可能在中间被修改导致前后不一致,除了 `-b` 事件点 `params` 代表函数入参外,其余事件都代表函数出参 +- 当使用 `-b` 时,由于观察事件点是在函数调用前,此时返回值或异常均不存在 +- 在 watch 命令的结果里,会打印出`location`信息。`location`有三种可能值:`AtEnter`,`AtExit`,`AtExceptionExit`。对应函数入口,函数正常 return,函数抛出异常。 + ### 使用参考 #### 启动 Demo 启动[快速入门](quick-start.md)里的`math-game`。 -#### 观察函数调用返回时的参数、this对象和返回值 +#### 观察函数调用返回时的参数、this 对象和返回值 -> 观察表达式,默认值是`{params, target, returnObj}` +::: tip +观察表达式,默认值是`{params, target, returnObj}` +::: ```bash $ watch demo.MathGame primeFactors -x 2 @@ -80,9 +84,8 @@ ts=2021-08-31 15:22:58; [cost=1.020982ms] result=@ArrayList[ ] ``` -* 上面的结果里,说明函数被执行了两次,第一次结果是`location=AtExceptionExit`,说明函数抛出异常了,因此`returnObj`是null -* 在第二次结果里是`location=AtExit`,说明函数正常返回,因此可以看到`returnObj`结果是一个ArrayList - +- 上面的结果里,说明函数被执行了两次,第一次结果是`location=AtExceptionExit`,说明函数抛出异常了,因此`returnObj`是 null +- 在第二次结果里是`location=AtExit`,说明函数正常返回,因此可以看到`returnObj`结果是一个 ArrayList #### 观察函数调用入口的参数和返回值 @@ -98,8 +101,7 @@ ts=2018-12-03 19:23:23; [cost=0.0353ms] result=@ArrayList[ ] ``` -* 对比前一个例子,返回值为空(事件点为函数执行前,因此获取不到返回值) - +- 对比前一个例子,返回值为空(事件点为函数执行前,因此获取不到返回值) #### 同时观察函数调用前和函数返回后 @@ -138,11 +140,11 @@ ts=2018-12-03 19:29:54; [cost=4.277392ms] result=@ArrayList[ ] ``` -* 参数里`-n 2`,表示只执行两次 +- 参数里`-n 2`,表示只执行两次 -* 这里输出结果中,第一次输出的是函数调用前的观察表达式的结果,第二次输出的是函数返回后的表达式的结果 +- 这里输出结果中,第一次输出的是函数调用前的观察表达式的结果,第二次输出的是函数返回后的表达式的结果 -* 结果的输出顺序和事件发生的先后顺序一致,和命令中 `-s -b` 的顺序无关 +- 结果的输出顺序和事件发生的先后顺序一致,和命令中 `-s -b` 的顺序无关 #### 调整`-x`的值,观察具体的函数参数值 @@ -177,8 +179,8 @@ ts=2018-12-03 19:34:19; [cost=0.587833ms] result=@ArrayList[ ] ``` -* `-x`表示遍历深度,可以调整来打印具体的参数和结果内容,默认值是1。 -* `-x`最大值是4,防止展开结果占用太多内存。用户可以在`ognl`表达式里指定更具体的field。 +- `-x`表示遍历深度,可以调整来打印具体的参数和结果内容,默认值是 1。 +- `-x`最大值是 4,防止展开结果占用太多内存。用户可以在`ognl`表达式里指定更具体的 field。 #### 条件表达式的例子 @@ -192,7 +194,7 @@ ts=2018-12-03 19:36:04; [cost=0.530255ms] result=@ArrayList[ ] ``` -* 只有满足条件的调用,才会有响应。 +- 只有满足条件的调用,才会有响应。 #### 观察异常信息的例子 @@ -210,8 +212,8 @@ ts=2018-12-03 19:38:00; [cost=1.414993ms] result=@ArrayList[ ] ``` -* `-e`表示抛出异常时才触发 -* express中,表示异常信息的变量是`throwExp` +- `-e`表示抛出异常时才触发 +- express 中,表示异常信息的变量是`throwExp` #### 按照耗时进行过滤 @@ -230,8 +232,7 @@ ts=2018-12-03 19:40:28; [cost=2112.168897ms] result=@ArrayList[ ] ``` -* `#cost>200`(单位是`ms`)表示只有当耗时大于200ms时才会输出,过滤掉执行时间小于200ms的调用 - +- `#cost>200`(单位是`ms`)表示只有当耗时大于 200ms 时才会输出,过滤掉执行时间小于 200ms 的调用 #### 观察当前对象中的属性 @@ -255,7 +256,7 @@ Press Ctrl+C to abort. Affect(class-cnt:1 , method-cnt:1) cost in 67 ms. ts=2018-12-03 20:04:34; [cost=131.303498ms] result=@Integer[8] ts=2018-12-03 20:04:35; [cost=0.961441ms] result=@Integer[8] -``` +``` #### 获取类的静态字段、调用类的静态函数的例子 @@ -272,17 +273,20 @@ ts=2021-01-05 21:35:20; [cost=0.173966ms] result=@ArrayList[ ] ``` -* 注意这里使用 `Thread.currentThread().getContextClassLoader()` 加载,使用精确`classloader` [ognl](ognl.md)更好。 +- 注意这里使用 `Thread.currentThread().getContextClassLoader()` 加载,使用精确`classloader` [ognl](ognl.md)更好。 #### 排除掉指定的类 -> watch/trace/monitor/stack/tt 命令都支持 `--exclude-class-pattern` 参数 +::: tip +watch/trace/monitor/stack/tt 命令都支持 `--exclude-class-pattern` 参数 +::: 使用 `--exclude-class-pattern` 参数可以排除掉指定的类,比如: ```bash watch javax.servlet.Filter * --exclude-class-pattern com.demo.TestFilter ``` + #### 不匹配子类 默认情况下 watch/trace/monitor/stack/tt 命令都会匹配子类。如果想不匹配,可以通过全局参数关掉。 @@ -293,7 +297,9 @@ options disable-sub-class true #### 使用 -v 参数打印更多信息 -> watch/trace/monitor/stack/tt 命令都支持 `-v` 参数 +::: tip +watch/trace/monitor/stack/tt 命令都支持 `-v` 参数 +::: 当命令执行之后,没有输出结果。有两种可能: @@ -327,4 +333,4 @@ ts=2020-12-02 22:38:57; [cost=0.052877ms] result=@Object[][ @Integer[4243], ], ] -``` \ No newline at end of file +``` diff --git a/site-vuepress/docs/doc/web-console.md b/site-vuepress/docs/doc/web-console.md new file mode 100644 index 000000000..b0c636839 --- /dev/null +++ b/site-vuepress/docs/doc/web-console.md @@ -0,0 +1,36 @@ +# Web Console + +[`Web Console`在线教程](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=case-web-console) + +### 通过浏览器连接 arthas + +Arthas 目前支持 Web Console,用户在 attach 成功之后,可以直接访问:[http://127.0.0.1:8563/](http://127.0.0.1:8563/)。 + +可以填入 IP,远程连接其它机器上的 arthas。 + +![](/images/web-console-local.png) + +::: warning +默认情况下,arthas 只 listen 127.0.0.1,所以如果想从远程连接,则可以使用 `--target-ip`参数指定 listen 的 IP,更多参考`-h`的帮助说明。 +注意会有安全风险,考虑下面的 tunnel server 的方案。 +::: + +- 在 Web Console 复制粘贴快捷键参考: [https://github.com/alibaba/arthas/issues/1056](https://github.com/alibaba/arthas/issues/1056) + +::: tip +3.5.4 版本后,在 Web Console 可以鼠标右键复制粘贴。 +::: + +### scrollback URL 参数 + +::: tip +3.5.5 版本后支持 +::: + +默认 Web Console 支持向上回滚的行数是 1000。可以在 URL 里用`scrollback`指定。比如 + +[http://127.0.0.1:8563/?scrollback=3000](http://127.0.0.1:8563/?scrollback=3000) + +### 使用 arthas tunnel server 连接远程 arthas + +参考:[Arthas Tunnel](tunnel.md) diff --git a/site-vuepress/docs/en/README.md b/site-vuepress/docs/en/README.md new file mode 100644 index 000000000..e398a5ab3 --- /dev/null +++ b/site-vuepress/docs/en/README.md @@ -0,0 +1,55 @@ +--- +home: true +title: Home +heroImage: /images/arthas_light.png +heroImageDark: /images/arthas_dark.png +heroText: null +tagline: Java Diagnostic Tool +sidebar: false +actions: + - text: Quick Start + link: /doc/quick-start.html + type: primary + - text: View on github + link: https://github.com/alibaba/arthas + type: secondary +features: + - icon: 🖥 + title: Dashboard + details: View the operating status of the system in real time + - icon: 🔬 + title: Parameters/Return values/Exceptions + details: View method parameters, return values and exceptions + - icon: 🔩 + title: Online hotswap + details: jad/sc/redefine online hotswap + - icon: 🩺 + title: Class conflict + details: Resolve the class conflict problem in seconds, locate the class loading path + - icon: ⚡️ + title: Flame Graph + details: Quickly locate application hotspots and generate flame graphs + - icon: 📡 + title: WebConsole + details: Online diagnosis +users_title: "Users" +users_details: "Providing your info on Wanted: who's using arthas to help improving arthas better" +users: + - name: Alibaba Group + logo: /images/users/users_alibaba.png + - name: Didiglobal + logo: /images/users/users_didi.png + - name: Kaola + logo: /images/users/users_kaola.png + - name: Qunar + logo: /images/users/users_qunar.png + - name: Telecom + logo: /images/users/users_telecom.png + - name: Weidian + logo: /images/users/users_weidian.png + - name: ICBC + logo: /images/users/users_icbc.png + - name: Chinaums + logo: /images/users/users_yinlian.png +footer: Apache-2.0 license | Copyright 2018-present, Alibaba Middleware Group, and contributors +--- diff --git a/site/src/site/sphinx/en/index.md b/site-vuepress/docs/en/doc/README.md similarity index 52% rename from site/src/site/sphinx/en/index.md rename to site-vuepress/docs/en/doc/README.md index 0d2cf3181..20a62da22 100644 --- a/site/src/site/sphinx/en/index.md +++ b/site-vuepress/docs/en/doc/README.md @@ -1,9 +1,6 @@ -Arthas Documentation -=== +# Introduction -**[中文文档/Chinese Documentation](https://arthas.aliyun.com/doc/)** - -![](arthas.png) +![](/images/arthas.png) Arthas is a Java diagnostic tool open-sourced by Alibaba middleware team. It is widely adopted and popular among the developers inside Alibaba. Arthas helps developers in trouble-shooting issues in production environment for Java based applications without modifying code or restarting servers. @@ -11,7 +8,7 @@ Arthas is a Java diagnostic tool open-sourced by Alibaba middleware team. It is Oftentimes the production system network is inaccessible from local development environment. If issues are encountered in production systems, it is impossible to use IDE to debug the application remotely. What's even worse, debugging in production environment is unacceptable, as it will suspend all the threads, leading to services downtime. -Developers could always try to reproduce the same issue on the test/staging environment. However, this is tricky as some issues cannot be reproduced easily in a different environment, or even disappear once restarted. +Developers could always try to reproduce the same issue on the test/staging environment. However, this is tricky as some issues cannot be reproduced easily in a different environment, or even disappear once restarted. And if you're thinking of adding some logs to your code to help trouble-shoot the issue, you will have to go through the following lifecycle: test, staging, and then to production. Time is money! This approach is inefficient! Worse still, the issue may not be fixed since it might be irreproducible once the JVM is restarted, as described above. @@ -19,43 +16,19 @@ Arthas is built to solve these issues. A developer can troubleshoot production i ### Key features -* Check whether a class is loaded? Or where the class is loaded from? (Useful for trouble-shooting jar file conflicts) -* Decompile a class to ensure the code is running as expected. -* Check classloader statistics, e.g. the number of classloaders, the number of classes loaded per classloader, the classloader hierarchy, possible classloader leaks, etc. -* Check the method invocation details, e.g. method parameter, returned values, exceptions and etc. -* Check the stack trace of specified method invocation. This is useful when a developer wants to know the caller of the method. -* Trace the method invocation to find slow sub-invocations. -* Monitor method invocation statistics, e.g. QPS (Query Per Second), RT (Return Time), success rate and etc. -* Monitor system metrics, thread states and CPU usage, GC statistics and etc. -* Supports command line interactive mode, with auto-complete feature enabled. -* Supports telnet and WebSocket, which enables both local and remote diagnostics with command line and browsers. -* Supports profiler/Flame Graph -* Support get objects in the heap that are instances of the specified class. -* Supports JDK 6+ -* Supports Linux/Mac/Windows - +- Check whether a class is loaded? Or where the class is loaded from? (Useful for trouble-shooting jar file conflicts) +- Decompile a class to ensure the code is running as expected. +- Check classloader statistics, e.g. the number of classloaders, the number of classes loaded per classloader, the classloader hierarchy, possible classloader leaks, etc. +- Check the method invocation details, e.g. method parameter, returned values, exceptions and etc. +- Check the stack trace of specified method invocation. This is useful when a developer wants to know the caller of the method. +- Trace the method invocation to find slow sub-invocations. +- Monitor method invocation statistics, e.g. QPS (Query Per Second), RT (Return Time), success rate and etc. +- Monitor system metrics, thread states and CPU usage, GC statistics and etc. +- Supports command line interactive mode, with auto-complete feature enabled. +- Supports telnet and WebSocket, which enables both local and remote diagnostics with command line and browsers. +- Supports profiler/Flame Graph +- Support get objects in the heap that are instances of the specified class. +- Supports JDK 6+ +- Supports Linux/Mac/Windows **If you are using Arthas, please let us know. Your feedback is very important to us: [View](https://github.com/alibaba/arthas/issues/111)** - -Contents --------- - -* [Home](https://arthas.aliyun.com/) -* [Online tutorials(Recommend)](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en) -* [Installation](install-detail.md) -* [Download](download.md) -* [Quick start](quick-start.md) -* [Advanced usage](advanced-use.md) -* [Commands](commands.md) -* [WebConsole](web-console.md) -* [Arthas Tunnel](tunnel.md) -* [Http API](http-api.md) -* [Docker](docker.md) -* [Arthas Spring Boot Starter](spring-boot-starter.md) -* [IDEA Plugin](idea-plugin.md) -* [User cases](https://github.com/alibaba/arthas/issues?q=label%3Auser-case) -* [FAQ](faq.md) -* [Star me at GitHub](https://github.com/alibaba/arthas) -* [Compile and debug/CONTRIBUTING](https://github.com/alibaba/arthas/blob/master/CONTRIBUTING.md#) -* [Release Notes](https://github.com/alibaba/arthas/releases) -* [Contact us](contact-us.md) diff --git a/site-vuepress/docs/en/doc/advanced-use.md b/site-vuepress/docs/en/doc/advanced-use.md new file mode 100644 index 000000000..8ad8cfd22 --- /dev/null +++ b/site-vuepress/docs/en/doc/advanced-use.md @@ -0,0 +1,157 @@ +# Advanced Usage + +## Basic + +- [help](help.md) - display Arthas help +- [cls](cls.md) - clear the screen +- [cat](cat.md) - Concatenate and print files +- [echo](echo.md) - write arguments to the standard output +- [grep](grep.md) - Pattern searcher +- [base64](base64.md) - Encode and decode using Base64 representation. +- [tee](tee.md) - Copies standard input to standard output, making a copy in zero or more files. +- [pwd](pwd.md) - Return working directory name +- [session](session.md) - display current session information +- [reset](reset.md) - reset all the enhanced classes. All enhanced classes will also be reset when Arthas server is closed by `stop` +- [version](version.md) - print the version for the Arthas attached to the current Java process +- [history](history.md) - view command history +- [quit/exit](quit.md) - exit the current Arthas session, without effecting other sessions +- [stop](stop.md) - terminate the Arthas server, all Arthas sessions will be destroyed +- [keymap](keymap.md) - keymap for Arthas keyboard shortcut + +## JVM + +- [dashboard](dashboard.md) - dashboard for the system's real-time data +- [thread](thread.md) - show java thread information +- [jvm](jvm.md) - show JVM information +- [sysprop](sysprop.md) - view/modify system properties +- [sysenv](sysenv.md) — view system environment variables +- [vmoption](vmoption.md) - view/modify the vm diagnostic options. +- [perfcounter](perfcounter.md) - show JVM Perf Counter information +- [logger](logger.md) - print the logger information, update the logger level +- [getstatic](getstatic.md) - examine class's static properties +- [ognl](ognl.md) - execute ognl expression +- [mbean](mbean.md) - show Mbean information +- [heapdump](heapdump.md) - dump java heap in hprof binary format, like `jmap` +- [vmtool](vmtool.md) - jvm tool, getInstances in jvm, forceGc + +## class/classloader + +- [sc](sc.md) - check the info for the classes loaded by JVM +- [sm](sm.md) - check methods info for the loaded classes +- [jad](jad.md) - decompile the specified loaded classes +- [mc](mc.md) - Memory compiler, compiles `.java` files into `.class` files in memory +- [retransform](retransform.md) - load external `*.class` files and retransform it into JVM +- [redefine](redefine.md) - load external `*.class` files and re-define it into JVM +- [dump](dump.md) - dump the loaded classes in byte code to the specified location +- [classloader](classloader.md) - check the inheritance structure, urls, class loading info for the specified class; using classloader to get the url of the resource e.g. `java/lang/String.class` + +## monitor/watch/trace - related + +::: warning +**Attention**: commands here are taking advantage of byte-code-injection, which means we are injecting some [aspects](https://en.wikipedia.org/wiki/Aspect-oriented_programming) into the current classes for monitoring and statistics purpose. Therefore, when using it for online troubleshooting in your production environment, you'd better **explicitly specify** classes/methods/criteria, and remember to remove the injected code by `stop` or `reset`. +::: + +- [monitor](monitor.md) - monitor method execution statistics +- [watch](watch.md) - display the input/output parameter, return object, and thrown exception of specified method invocation +- [trace](trace.md) - trace the execution time of specified method invocation +- [stack](stack.md) - display the stack trace for the specified class and method +- [tt](tt.md) - time tunnel, record the arguments and returned value for the methods and replay + +## authentication + +- [auth](auth.md) - authentication + +## options + +- [options](options.md) - check/set Arthas global options + +## profiler/flame graph + +- [profiler](profiler.md) - use [async-profiler](https://github.com/jvm-profiling-tools/async-profiler) to generate flame graph + +## pipe + +Arthas provides `pipe` to process the result returned from commands further, e.g. `sm java.lang.String * | grep 'index'`. Commands supported in `pipe`: + +- grep - filter the result with the given keyword +- plaintext - remove the ANSI color +- wc - count lines + +## async jobs + +[async](async.md) can be handy when a problem is hardly to reproduce in the production environment, e.g. one `watch` condition may happen only once in one single day. + +- job control - use `>` to redirect result into the log file, use `&` to put the job to the background. Job keeps running even if the session is disconnected (the session lifecycle is 1 day by default) +- jobs - list all jobs +- kill - forcibly terminate the job +- fg - bring the suspend job to the foreground +- bg - put the job to run in the background + +## Web Console + +Arthas supports living inside a browser. The communication between arthas and browser is via websocket. + +- [Web Console](web-console.md) + +## Arthas Properties + +- [Arthas Properties](arthas-properties.md) + +## Start as a Java Agent + +- [Start as a Java Agent](agent.md) + +## as.sh and arthas-boot tips + +- Select the process to be attached via the `select` option. + +Normally, `as.sh`/`arthas-boot.jar` needs to a pid, bacause the pid will change. + +For example, with `math-game.jar` already started, use the `jps` command to see. + +```bash +$ jps +58883 math-game.jar +58884 Jps +``` + +The `select` option allows you to specify a process name, which is very convenient. + +```bash +$ ./as.sh --select math-game +Arthas script version: 3.3.6 +[INFO] JAVA_HOME: /tmp/java/8.0.222-zulu +Arthas home: /Users/admin/.arthas/lib/3.3.6/arthas +Calculating attach execution time... +Attaching to 59161 using version /Users/admin/.arthas/lib/3.3.6/arthas... + +real 0m0.572s +user 0m0.281s +sys 0m0.039s +Attach success. +telnet connecting to arthas server... current timestamp is 1594280799 +Trying 127.0.0.1... +Connected to localhost. +Escape character is '^]'. + ,---. ,------. ,--------.,--. ,--. ,---. ,---. + / O \ | .--. ''--. .--'| '--' | / O \ ' .-' +| .-. || '--'.' | | | .--. || .-. |`. `-. +| | | || |\ \ | | | | | || | | |.-' | +`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----' + + +wiki https://arthas.aliyun.com/doc +tutorials https://arthas.aliyun.com/doc/arthas-tutorials.html +version 3.3.6 +pid 58883 +``` + +## User data report + +After the `3.1.4` version, arthas support user data report. + +At startup, use the `stat-url` option, such as: `./as.sh --stat-url 'http://192.168.10.11:8080/api/stat'` + +There is a sample data report in the tunnel server that users can implement on their own. + +[StatController.java](https://github.com/alibaba/arthas/blob/master/tunnel-server/src/main/java/com/alibaba/arthas/tunnel/server/app/web/StatController.java) diff --git a/site-vuepress/docs/en/doc/advice-class.md b/site-vuepress/docs/en/doc/advice-class.md new file mode 100644 index 000000000..dabcc9cfc --- /dev/null +++ b/site-vuepress/docs/en/doc/advice-class.md @@ -0,0 +1,41 @@ +# Fundamental Fields in Expressions + +There is a very fundamental class `Advice` for the expressions used in filtering, tracing or monitoring and other aspects in commands. + +```java +public class Advice { + + private final ClassLoader loader; + private final Class clazz; + private final ArthasMethod method; + private final Object target; + private final Object[] params; + private final Object returnObj; + private final Throwable throwExp; + private final boolean isBefore; + private final boolean isThrow; + private final boolean isReturn; + + // getter/setter +} +``` + +Description for the variables in the class `Advice`: + +| Name | Specification | +| --------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| loader | the class loader for the current called class | +| clazz | the reference to the current called class | +| method | the reference to the current called method | +| target | the instance of the current called class | +| params | the parameters for the current call, which is an array (when there's no parameter, it will be an empty array) | +| returnObj | the return value from the current call - only available when the method call returns normally (`isReturn==true`), and `null` is for `void` return value | +| throwExp | the exceptions thrown from the current call - only available when the method call throws exception (`isThrow==true`) | +| isBefore | flag to indicate the method is about to execute. `isBefore==true` but `isThrow==false` and `isReturn==false` since it's no way to know how the method call will end | +| isThrow | flag to indicate the method call ends with exception thrown | +| isReturn | flag to indicate the method call ends normally without exception thrown | + +All variables listed above can be used directly in the [OGNL expression](https://commons.apache.org/proper/commons-ognl/language-guide.html). The command will not execute and exit if there's illegal OGNL grammar or unexpected variable in the expression. + +- [typical use cases](https://github.com/alibaba/arthas/issues/71); +- [OGNL language guide](https://commons.apache.org/proper/commons-ognl/language-guide.html). diff --git a/site/src/site/sphinx/en/agent.md b/site-vuepress/docs/en/doc/agent.md similarity index 89% rename from site/src/site/sphinx/en/agent.md rename to site-vuepress/docs/en/doc/agent.md index 00f62ef9d..c5bd53b80 100644 --- a/site/src/site/sphinx/en/agent.md +++ b/site-vuepress/docs/en/doc/agent.md @@ -1,14 +1,13 @@ -Start as a Java Agent -==== +# Start as a Java Agent Usually Arthas dynamic attach the applications on the fly, but from version `3.2.0` onwards, Arthas supports starting directly as a java agent. For example, download the full arthas zip package, decompress it and start it by specifying `arthas-agent.jar` with the parameter `-javaagent`. -```` +``` java -javaagent:/tmp/test/arthas-agent.jar -jar math-game.jar -```` +``` The default configuration is in the `arthas.properties` file in the decompression directory. Reference: [Arthas Properties](arthas-properties.md) -Reference: https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html \ No newline at end of file +Reference: https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html diff --git a/site/src/site/sphinx/en/arthas-properties.md b/site-vuepress/docs/en/doc/arthas-properties.md similarity index 56% rename from site/src/site/sphinx/en/arthas-properties.md rename to site-vuepress/docs/en/doc/arthas-properties.md index 9f3a5a7f7..65e2168bc 100644 --- a/site/src/site/sphinx/en/arthas-properties.md +++ b/site-vuepress/docs/en/doc/arthas-properties.md @@ -1,14 +1,15 @@ -Arthas Properties -=== +# Arthas Properties The `arthas.properties` file is in the arthas directory. -* If it is automatically downloaded arthas, the directory is under `~/.arthas/lib/3.x.x/arthas/` -* If it is a downloaded complete package, under the decompression directory of arthas +- If it is automatically downloaded arthas, the directory is under `~/.arthas/lib/3.x.x/arthas/` +- If it is a downloaded complete package, under the decompression directory of arthas ## Supported configuration items -> Note that the configuration must be `camel case`, which is different from the `-` style of spring boot. Only the spring boot application supports both `camel case` and `-` style configuration. +::: warning +Note that the configuration must be `camel case`, which is different from the `-` style of spring boot. Only the spring boot application supports both `camel case` and `-` style configuration. +::: ``` #arthas.config.overrideAll=true @@ -24,16 +25,18 @@ arthas.sessionTimeout=1800 #arthas.agentId=mmmmmmyiddddd ``` +- If the configuration of `arthas.telnetPort` is -1, the telnet port will not be listened. `arthas.httpPort` is similar. +- If you configure `arthas.telnetPort` to 0, then random listen telnet port, you can find the random port log in `~/logs/arthas/arthas.log`. `arthas.httpPort` is similar. -* If the configuration of `arthas.telnetPort` is -1, the telnet port will not be listened. `arthas.httpPort` is similar. -* If you configure `arthas.telnetPort` to 0, then random listen telnet port, you can find the random port log in `~/logs/arthas/arthas.log`. `arthas.httpPort` is similar. - -> If you want to prevent multiple arthas port conflicts on a machine. It can be configured as a random port, or configured as -1, and use arthas through the tunnel server. - +::: tip +If you want to prevent multiple arthas port conflicts on a machine. It can be configured as a random port, or configured as -1, and use arthas through the tunnel server. +::: ### disable specify commands -> since 3.5.2 +::: tip +since 3.5.2 +::: Such as configuration: @@ -43,8 +46,9 @@ arthas.disabledCommands=stop,dump It can also be configured on the command line: `--disabled-commands stop,dump`. -> By default, arthas-spring-boot-starter will disable the `stop` command. - +::: tip +By default, arthas-spring-boot-starter will disable the `stop` command. +::: ## Configured order @@ -52,9 +56,7 @@ The order of configuration is: command line parameters > System Env > System Pro such as: -* `./as.sh --telnet-port 9999` command line configuration will overwrite the default value `arthas.telnetPort=3658` in `arthas.properties`. -* If the application itself sets system properties `arthas.telnetPort=8888`, it will override the default value `arthas.telnetPort=3658` in `arthas.properties`. +- `./as.sh --telnet-port 9999` command line configuration will overwrite the default value `arthas.telnetPort=3658` in `arthas.properties`. +- If the application itself sets system properties `arthas.telnetPort=8888`, it will override the default value `arthas.telnetPort=3658` in `arthas.properties`. If you want `arthas.properties` to have the highest order, you can configure `arthas.config.overrideAll=true`. - - diff --git a/site/src/site/sphinx/en/async.md b/site-vuepress/docs/en/doc/async.md similarity index 79% rename from site/src/site/sphinx/en/async.md rename to site-vuepress/docs/en/doc/async.md index ca5970000..145928410 100644 --- a/site/src/site/sphinx/en/async.md +++ b/site-vuepress/docs/en/doc/async.md @@ -1,26 +1,23 @@ -Arthas Async Jobs -=== +# Arthas Async Jobs [`Async Jobs` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=case-async-jobs) Asynchronous jobs in arthas. The idea is borrowed from [linux jobs](http://man7.org/linux/man-pages/man1/jobs.1p.html). - ## 1. Use & to run the command in the background For example, execute the trace command in the background: ```bash -trace Test t & +trace Test t & ``` -By doing this, the current command is put to the background to run, you can continue to execute other commands in the console. +By doing this, the current command is put to the background to run, you can continue to execute other commands in the console. ## 2. List background jobs If you want to list all background jobs, you can execute the `jobs` command and the results are as follows: - ```bash $ jobs [10]* @@ -33,24 +30,24 @@ $ jobs You can see that there is currently a background job executing: -* job id is 10, `*` indicates that this job is created by the current session. -* status is `Stopped` -* execution count is the number of executions, which have been executed 19 times since the start. -* timeout date: timeout timestamp, when the time exceeds this timestamp, the job will be automatically timeout and exit. +- job id is 10, `*` indicates that this job is created by the current session. +- status is `Stopped` +- execution count is the number of executions, which have been executed 19 times since the start. +- timeout date: timeout timestamp, when the time exceeds this timestamp, the job will be automatically timeout and exit. ## 3. Suspend and cancel job When the job is executing in the foreground, for example, directly executing the command `trace Test t`, or executing the background job command `trace Test t &`, then putting the job back to the foreground via `fg` command, the console cannot continue to execute other command, but can receive and process the following keyboard events: -* ‘ctrl + z’: Suspends the job, the job status will change to `Stopped`, and the job can be restarted by `bg ` or `fg ` -* ‘ctrl + c’: Stops the job -* ‘ctrl + d’: According to linux semantics this should lead to exit the terminal, right now Arthas has not implemented this yet, therefore simply ignore this keystroke. +- ‘ctrl + z’: Suspends the job, the job status will change to `Stopped`, and the job can be restarted by `bg ` or `fg ` +- ‘ctrl + c’: Stops the job +- ‘ctrl + d’: According to linux semantics this should lead to exit the terminal, right now Arthas has not implemented this yet, therefore simply ignore this keystroke. ## 4. fg/bg, switch the job from the foreground to the background, and vise verse -* When a job is executed in the background or in suspended status (use `ctrl + z` to suspend job), `fg ` can transfer the job to the foreground to continue to run. -* When a job is in suspended status (use `ctrl + z` to suspend job), `bg ` can put the job to the background to continue to run. -* A job created by other session can only be put to the foreground to run by using `fg` in the current session. +- When a job is executed in the background or in suspended status (use `ctrl + z` to suspend job), `fg ` can transfer the job to the foreground to continue to run. +- When a job is in suspended status (use `ctrl + z` to suspend job), `bg ` can put the job to the background to continue to run. +- A job created by other session can only be put to the foreground to run by using `fg` in the current session. ## 5. Redirect the output @@ -78,6 +75,6 @@ If you want to stop background job, just `kill `. ## 7. Others -* Support up to 8 commands at the same time to redirect the output to the log files. -* Do not open too many background jobs at the same time to avoid negative performance effect to the target JVM. -* If you do not want to stop the Arthas service and continue to perform background tasks, you can exit the Arthas console by executing `quit` command (`stop` command will stop the Arthas service) +- Support up to 8 commands at the same time to redirect the output to the log files. +- Do not open too many background jobs at the same time to avoid negative performance effect to the target JVM. +- If you do not want to stop the Arthas service and continue to perform background tasks, you can exit the Arthas console by executing `quit` command (`stop` command will stop the Arthas service) diff --git a/site/src/site/sphinx/en/auth.md b/site-vuepress/docs/en/doc/auth.md similarity index 81% rename from site/src/site/sphinx/en/auth.md rename to site-vuepress/docs/en/doc/auth.md index 5b11af66d..ceac8ee9e 100644 --- a/site/src/site/sphinx/en/auth.md +++ b/site-vuepress/docs/en/doc/auth.md @@ -1,7 +1,8 @@ -auth -=== +# auth -> Authenticates the current session +::: tip +Authenticates the current session +::: ### Configure username and password @@ -11,20 +12,22 @@ When attaching, you can specify a password on the command line. such as: java -jar arthas-boot.jar --password ppp ``` -* The user can be specified by the `--username` option, the default value is `arthas`. -* You can also configure username/password in `arthas.properties`. The priority of the command line is higher than that of the configuration file. -* If only `username` is configured and no `password` is configured, a random password will be generated and printed in `~/logs/arthas/arthas.log` +- The user can be specified by the `--username` option, the default value is `arthas`. +- You can also configure username/password in `arthas.properties`. The priority of the command line is higher than that of the configuration file. +- If only `username` is configured and no `password` is configured, a random password will be generated and printed in `~/logs/arthas/arthas.log` ``` Using generated security password: 0vUBJpRIppkKuZ7dYzYqOKtranj4unGh ``` ### Local connection does not require authentication + By default, there are configurations in the `arthas.properties` file: ``` arthas.localConnectionNonAuth=true ``` + When the password is configured, connect from localhost, the authentication is not required. The default configuration value is true, which is convenient for local connection. Authentication is only required when connecting remotely. ### Authenticate in the telnet console @@ -43,7 +46,7 @@ Use the `auth` command to authenticate, and you can execute other commands after Authentication result: true ``` -* The user can be specified by the `--username` option, the default value is `arthas`. +- The user can be specified by the `--username` option, the default value is `arthas`. ### Web console Authentication @@ -57,14 +60,14 @@ After success, you can directly connect to the web console. Arthas uses the HTTP standard Basic Authorization. -* Reference: [https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication) +- Reference: [https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication) For example, if the user name is: `admin` and the password is `admin`, the combination is a string: `admin:admin`, the base64 result is: `YWRtaW46YWRtaW4=`, then the HTTP request adds the `Authorization` header: ```bash curl 'http://localhost:8563/api' \ -H 'Authorization: Basic YWRtaW46YWRtaW4=' \ - --data-raw '{"action":"exec","command":"version"}' + --data-raw '{"action":"exec","command":"version"}' ``` #### URL parameters @@ -73,5 +76,5 @@ It supports passing username and password in parameters. such as: ```bash curl 'http://localhost:8563/api?password=admin' \ - --data-raw '{"action":"exec","command":"version"}' -``` \ No newline at end of file + --data-raw '{"action":"exec","command":"version"}' +``` diff --git a/site/src/site/sphinx/en/base64.md b/site-vuepress/docs/en/doc/base64.md similarity index 86% rename from site/src/site/sphinx/en/base64.md rename to site-vuepress/docs/en/doc/base64.md index cd85bdb50..fff7d2810 100644 --- a/site/src/site/sphinx/en/base64.md +++ b/site-vuepress/docs/en/doc/base64.md @@ -1,9 +1,8 @@ -base64 -=== - - -> Encode and decode using Base64 representation. +# base64 +::: tip +Encode and decode using Base64 representation. +::: ### Encode to base64 diff --git a/site/src/site/sphinx/en/batch-support.md b/site-vuepress/docs/en/doc/batch-support.md similarity index 81% rename from site/src/site/sphinx/en/batch-support.md rename to site-vuepress/docs/en/doc/batch-support.md index 0afca2df5..0a2ea7aed 100644 --- a/site/src/site/sphinx/en/batch-support.md +++ b/site-vuepress/docs/en/doc/batch-support.md @@ -1,5 +1,4 @@ -Batch Processing -================ +# Batch Processing With the help of Batch Processing, you can run multiple commands in batch and get the final result at the end. @@ -19,10 +18,11 @@ sc -d org.apache.commons.lang.StringUtils ``` Note: -* Each command takes one line. -* Batch mode execution times (via `-n`) must be explicitly specified for `dashboard`, otherwise batch script cannot terminate. -* Commands such as `watch`/`tt`/`trace`/`monitor`/`stack` should include `-n` option to ensure the script can be able to quit. -* Also consider to use `async` (for example: `watch c.t.X test returnObj > &`) to put commands run at background and get the output from the log file, see more from [asynchronous job](async.md) + +- Each command takes one line. +- Batch mode execution times (via `-n`) must be explicitly specified for `dashboard`, otherwise batch script cannot terminate. +- Commands such as `watch`/`tt`/`trace`/`monitor`/`stack` should include `-n` option to ensure the script can be able to quit. +- Also consider to use `async` (for example: `watch c.t.X test returnObj > &`) to put commands run at background and get the output from the log file, see more from [asynchronous job](async.md) #### Step 2: Run the script diff --git a/site/src/site/sphinx/en/cat.md b/site-vuepress/docs/en/doc/cat.md similarity index 72% rename from site/src/site/sphinx/en/cat.md rename to site-vuepress/docs/en/doc/cat.md index aaca771ca..12794a525 100644 --- a/site/src/site/sphinx/en/cat.md +++ b/site-vuepress/docs/en/doc/cat.md @@ -1,11 +1,11 @@ -cat -=== +# cat [`cat` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-cat) -> Concatenate and print files - +::: tip +Concatenate and print files +::: ```bash $ cat /tmp/a.txt -``` \ No newline at end of file +``` diff --git a/site/src/site/sphinx/en/classloader.md b/site-vuepress/docs/en/doc/classloader.md similarity index 76% rename from site/src/site/sphinx/en/classloader.md rename to site-vuepress/docs/en/doc/classloader.md index e26770377..9aa0df93e 100644 --- a/site/src/site/sphinx/en/classloader.md +++ b/site-vuepress/docs/en/doc/classloader.md @@ -1,23 +1,24 @@ -classloader -=========== +# classloader [`classloader` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=command-classloader) +::: tip View hierarchy, urls and classes-loading info for the class-loaders. +::: `classloader` can search and print out the URLs for a specified resource from one particular classloader. It is quite handy when analyzing `ResourceNotFoundException`. ### Options -|Name|Specification| -|---:|:---| -|[l]|list all classloader instances| -|[t]|print classloader's hierarchy| -|[a]|list all the classes loaded by all the classloaders (use it with great caution since the output can be huge)| -|[c:]|print classloader's hashcode| -|`[classLoaderClass:]`| The class name of the ClassLoader that executes the expression. | -|`[c: r:]`|using ClassLoader to search resource| -|`[c: load:]`|using ClassLoader to load class| +| Name | Specification | +| --------------------: | :----------------------------------------------------------------------------------------------------------- | +| [l] | list all classloader instances | +| [t] | print classloader's hierarchy | +| [a] | list all the classes loaded by all the classloaders (use it with great caution since the output can be huge) | +| [c:] | print classloader's hashcode | +| `[classLoaderClass:]` | The class name of the ClassLoader that executes the expression. | +| `[c: r:]` | using ClassLoader to search resource | +| `[c: load:]` | using ClassLoader to load class | ### Usage @@ -124,7 +125,9 @@ load class success. #### Statistics ClassLoader actually used URLs and unused URLs -> Note that statistics are based on all classes currently loaded by the JVM. Does not mean that `Unused URLs` can be removed from the application. Because it may be necessary to load classes from `Unused URLs` in the future, or to load `resources`. +::: warning +Note that statistics are based on all classes currently loaded by the JVM. Does not mean that `Unused URLs` can be removed from the application. Because it may be necessary to load classes from `Unused URLs` in the future, or to load `resources`. +::: ``` $ classloader --url-stat diff --git a/site-vuepress/docs/en/doc/cls.md b/site-vuepress/docs/en/doc/cls.md new file mode 100644 index 000000000..13aa05b56 --- /dev/null +++ b/site-vuepress/docs/en/doc/cls.md @@ -0,0 +1,7 @@ +# cls + +clear current console. + +::: tip +if not in tty mode,it will warn "Command 'cls' is only support tty session.". +::: diff --git a/site-vuepress/docs/en/doc/commands.md b/site-vuepress/docs/en/doc/commands.md new file mode 100644 index 000000000..7988230cd --- /dev/null +++ b/site-vuepress/docs/en/doc/commands.md @@ -0,0 +1,56 @@ +# All Commands + +- [dashboard](dashboard.md) +- [thread](thread.md) +- [jvm](jvm.md) +- [memory](memory.md) +- [sysprop](sysprop.md) +- [sysenv](sysenv.md) +- [vmoption](vmoption.md) +- [perfcounter](perfcounter.md) +- [logger](logger.md) +- [mbean](mbean.md) +- [getstatic](getstatic.md) + +- [ognl](ognl.md) + +- [sc](sc.md) +- [sm](sm.md) +- [dump](dump.md) +- [heapdump](heapdump.md) +- [vmtool](vmtool.md) + +- [jad](jad.md) +- [classloader](classloader.md) +- [mc](mc.md) +- [retransform](retransform.md) +- [redefine](redefine.md) + +- [monitor](monitor.md) +- [watch](watch.md) +- [trace](trace.md) +- [stack](stack.md) +- [tt](tt.md) + +- [profiler](profiler.md) + +- [cat](cat.md) +- [echo](echo.md) +- [grep](grep.md) +- [base64](base64.md) +- [tee](tee.md) +- [pwd](pwd.md) +- [auth](auth.md) +- [options](options.md) + +### Basic Arthas Commands + +- [help](help.md) - examines help information +- [cls](cls.md) - clears out the screen +- [session](session.md) - examines the current session +- [reset](reset.md) - resets enhanced classes. All enhanced classes will be reset to their original states. When Arthas server closes, all these enhanced classes will be reset too +- [version](version.md) - prints out Arthas's version +- [history](history.md) - view command history +- [quit](quit.md) - exit the current Arthas client without affecting other clients +- [stop](stop.md) - terminates the Arthas server, all the Arthas clients connecting to this server will be disconnected +- [keymap](keymap.md) - lists all Arthas keyboard shortcuts and shortcut customizations. diff --git a/site/src/site/sphinx/en/contact-us.md b/site-vuepress/docs/en/doc/contact-us.md similarity index 63% rename from site/src/site/sphinx/en/contact-us.md rename to site-vuepress/docs/en/doc/contact-us.md index 3720bbcb0..ec6f39ecb 100644 --- a/site/src/site/sphinx/en/contact-us.md +++ b/site-vuepress/docs/en/doc/contact-us.md @@ -1,24 +1,18 @@ -Contact Us -=== - +# Contact Us ### Issues Questions about how to use Arthas and opinions can be directly raised in issues: [https://github.com/alibaba/arthas/issues](https://github.com/alibaba/arthas/issues) - ### DingDing Group -* Arthas open source discussion Group: 21965291 ,You can join by searching for group number。 - -![](_static/dingding_qr.jpg) - - -* Arthas open source discussion Group 2: 30707824 ,You can join by searching for group number。 +- Arthas open source discussion Group: 21965291 ,You can join by searching for group number。 -![](_static/dingding2_qr.jpg) +![](/images/dingding_qr.jpg) +- Arthas open source discussion Group 2: 30707824 ,You can join by searching for group number。 +![](/images/dingding2_qr.jpg) ### Instructions for Installing DingTalk @@ -26,19 +20,14 @@ DingTalk can be downloaded from: [https://www.dingtalk.com/en](https://page.ding After installing you can search for group number and join it. -![](_static/dingding_group_search.png) - - - +![](/images/dingding_group_search.png) ### QQ Group Arthas open source discussion QQ group:916328269 -![](_static/qqgroup_qr.jpg) - +![](/images/qqgroup_qr.jpg) Arthas open source discussion QQ group2:854625984 -![](_static/qqgroup2_qr.jpg) - +![](/images/qqgroup2_qr.jpg) diff --git a/site/src/site/sphinx/en/dashboard.md b/site-vuepress/docs/en/doc/dashboard.md similarity index 68% rename from site/src/site/sphinx/en/dashboard.md rename to site-vuepress/docs/en/doc/dashboard.md index 84589cefa..2b8fc2e2b 100644 --- a/site/src/site/sphinx/en/dashboard.md +++ b/site-vuepress/docs/en/doc/dashboard.md @@ -1,18 +1,19 @@ -dashboard -========= +# dashboard [`dashboard` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-dashboard) -> This is the real time statistics dashboard for the current system, press `Ctrl+C` to exit. +::: tip +This is the real time statistics dashboard for the current system, press `Ctrl+C` to exit. +::: -When running in Apache Tomcat Alibaba edition, the dashboard will also present the real time statistics of the tomcat, including [QPS](https://en.wikipedia.org/wiki/Queries_per_second), RT, error counts, and thread pool, etc. +When running in Apache Tomcat Alibaba edition, the dashboard will also present the real time statistics of the tomcat, including [QPS](https://en.wikipedia.org/wiki/Queries_per_second), RT, error counts, and thread pool, etc. ### Options -|Name|Specification| -|---:|:---| -|[i:]|The interval (in ms) between two executions, default is 5000 ms.| -|[n:]|The number of times this command will be executed.| +| Name | Specification | +| ---: | :--------------------------------------------------------------- | +| [i:] | The interval (in ms) between two executions, default is 5000 ms. | +| [n:] | The number of times this command will be executed. | ### Usage @@ -53,36 +54,36 @@ uptime 272s ### Notes on column headers -* ID: JVM thread ID, pls. note this ID is different from the nativeID in jstack -* NAME: thread name -* GROUP: thread group name -* PRIORITY: thread priority, ranged from 1 to 10. The greater number, the higher priority -* STATE: thread state -* CPU%: the ratio of CPU usage for the thread. For example, the sampling interval is 1000ms, and the incremental cpu time - of a thread is 100ms, then the cpu usage rate=100/1000=10% -* DELTA_TIME: incremental CPU time of thread running after the last sampling in `second` format -* TIME: total CPU time of the thread in `minute:second` format -* INTERRUPTED: the thread interruption state -* DAEMON: daemon thread or not - +- ID: JVM thread ID, pls. note this ID is different from the nativeID in jstack +- NAME: thread name +- GROUP: thread group name +- PRIORITY: thread priority, ranged from 1 to 10. The greater number, the higher priority +- STATE: thread state +- CPU%: the ratio of CPU usage for the thread. For example, the sampling interval is 1000ms, and the incremental cpu time + of a thread is 100ms, then the cpu usage rate=100/1000=10% +- DELTA_TIME: incremental CPU time of thread running after the last sampling in `second` format +- TIME: total CPU time of the thread in `minute:second` format +- INTERRUPTED: the thread interruption state +- DAEMON: daemon thread or not #### JVM internal threads + After Java 8, it is supported to obtain the CPU time of JVM internal threads. These threads only have the name and CPU time, - without ID and status information (display ID is -1). - +without ID and status information (display ID is -1). + JVM activities can be observed through internal threads, such as GC, JIT compilation, etc., to perceive the overall status of JVM. -* When the JVM heap/metaspace space is insufficient or OOM, it can be seen that the CPU usage of the GC threads is - significantly higher than other threads. -* After executing commands such as `trace/watch/tt/redefine`, you can see that JIT threads activities become more frequent. - Because the JIT compilation data related to this class is cleared when the JVM hot update the class bytecode, it needs to be recompiled. +- When the JVM heap/metaspace space is insufficient or OOM, it can be seen that the CPU usage of the GC threads is + significantly higher than other threads. +- After executing commands such as `trace/watch/tt/redefine`, you can see that JIT threads activities become more frequent. + Because the JIT compilation data related to this class is cleared when the JVM hot update the class bytecode, it needs to be recompiled. JVM internal threads include the following: -* JIT compilation thread: such as `C1 CompilerThread0`, `C2 CompilerThread0` -* GC thread: such as `GC Thread0`, `G1 Young RemSet Sampling` -* Other internal threads: such as`VM Periodic Task Thread`, `VM Thread`, `Service Thread` +- JIT compilation thread: such as `C1 CompilerThread0`, `C2 CompilerThread0` +- GC thread: such as `GC Thread0`, `G1 Young RemSet Sampling` +- Other internal threads: such as`VM Periodic Task Thread`, `VM Thread`, `Service Thread` ### Screenshot -![](../_static/dashboard.png "dashboard") +![](/images/dashboard.png "dashboard") diff --git a/site/src/site/sphinx/en/docker.md b/site-vuepress/docs/en/doc/docker.md similarity index 67% rename from site/src/site/sphinx/en/docker.md rename to site-vuepress/docs/en/doc/docker.md index f42faecba..194918a74 100644 --- a/site/src/site/sphinx/en/docker.md +++ b/site-vuepress/docs/en/doc/docker.md @@ -1,6 +1,4 @@ -Docker -=== - +# Docker ## Use JDK in Docker @@ -8,7 +6,7 @@ Many times, the problem that arthas can't work with the application in docker is ### Use public JDK image -* https://hub.docker.com/_/openjdk/ +- https://hub.docker.com/_/openjdk/ such as: @@ -55,43 +53,42 @@ ENV JAVA_HOME /usr/lib/jvm/java-1.8.0-openjdk/ RUN export JAVA_HOME ``` - ## Quick start with Docker 1. Delete the existing `math-game` docker container (not necessary) - ```sh - $ docker stop math-game || true && docker rm math-game || true - ``` + ```sh + $ docker stop math-game || true && docker rm math-game || true + ``` 1. Start `math-game` - ```sh - $ docker run --name math-game -it hengyunabc/arthas:latest /bin/sh -c "java -jar /opt/arthas/math-game.jar" - ``` + ```sh + $ docker run --name math-game -it hengyunabc/arthas:latest /bin/sh -c "java -jar /opt/arthas/math-game.jar" + ``` 1. Start `arthas-boot` for diagnosis - ```sh - $ docker exec -it math-game /bin/sh -c "java -jar /opt/arthas/arthas-boot.jar" - * [1]: 9 jar + ```sh + $ docker exec -it math-game /bin/sh -c "java -jar /opt/arthas/arthas-boot.jar" + * [1]: 9 jar - [INFO] arthas home: /opt/arthas - [INFO] Try to attach process 9 - [INFO] Attach process 9 success. - [INFO] arthas-client connect 127.0.0.1 3658 - ,---. ,------. ,--------.,--. ,--. ,---. ,---. - / O \ | .--. ''--. .--'| '--' | / O \ ' .-' - | .-. || '--'.' | | | .--. || .-. |`. `-. - | | | || |\ \ | | | | | || | | |.-' | - `--' `--'`--' '--' `--' `--' `--'`--' `--'`-----' + [INFO] arthas home: /opt/arthas + [INFO] Try to attach process 9 + [INFO] Attach process 9 success. + [INFO] arthas-client connect 127.0.0.1 3658 + ,---. ,------. ,--------.,--. ,--. ,---. ,---. + / O \ | .--. ''--. .--'| '--' | / O \ ' .-' + | .-. || '--'.' | | | .--. || .-. |`. `-. + | | | || |\ \ | | | | | || | | |.-' | + `--' `--'`--' '--' `--' `--' `--'`--' `--'`-----' - wiki: https://arthas.aliyun.com/doc - version: 3.0.5 - pid: 9 - time: 2018-12-18 11:30:36 - ``` + wiki: https://arthas.aliyun.com/doc + version: 3.0.5 + pid: 9 + time: 2018-12-18 11:30:36 + ``` ## Diagnose the Java process in Docker @@ -118,4 +115,4 @@ COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas If you want to specify a version, you can view all the tags: -[https://hub.docker.com/r/hengyunabc/arthas/tags](https://hub.docker.com/r/hengyunabc/arthas/tags) \ No newline at end of file +[https://hub.docker.com/r/hengyunabc/arthas/tags](https://hub.docker.com/r/hengyunabc/arthas/tags) diff --git a/site/src/site/sphinx/en/download.md b/site-vuepress/docs/en/doc/download.md similarity index 98% rename from site/src/site/sphinx/en/download.md rename to site-vuepress/docs/en/doc/download.md index 50d1b9a6d..7626e66cb 100644 --- a/site/src/site/sphinx/en/download.md +++ b/site-vuepress/docs/en/doc/download.md @@ -1,5 +1,4 @@ -Download -=== +# Download ## Download full package @@ -7,7 +6,6 @@ Download Latest Version, Click To Download: [![](https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square "Arthas")](https://arthas.aliyun.com/download/latest_version) - ### Download from Github Releases [https://github.com/alibaba/arthas/releases](https://github.com/alibaba/arthas/releases) @@ -43,4 +41,3 @@ java -jar arthas-boot.jar -h ## Download Offline Help Documentation Latest Version Documentation, Click To Download:[![](https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square "Arthas")](https://arthas.aliyun.com/download/doc/latest_version) - diff --git a/site/src/site/sphinx/en/dump.md b/site-vuepress/docs/en/doc/dump.md similarity index 64% rename from site/src/site/sphinx/en/dump.md rename to site-vuepress/docs/en/doc/dump.md index a4b92465f..d3c0a8791 100644 --- a/site/src/site/sphinx/en/dump.md +++ b/site-vuepress/docs/en/doc/dump.md @@ -1,19 +1,20 @@ -dump -=== +# dump [`dump` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=command-dump) -> Dump the bytecode for the particular classes to the specified directory. +::: tip +Dump the bytecode for the particular classes to the specified directory. +::: ### Options -|Name|Specification| -|---:|:---| -|*class-pattern*|class name pattern| -|`[c:]`|hashcode of the [class loader](classloader.md) that loaded the target class| -|`[classLoaderClass:]`| The class name of the ClassLoader that executes the expression. | -|`[d:]`|set the destination directory for class files| -|`[E]`|turn on regex match, the default behavior is wild card match| +| Name | Specification | +| --------------------: | :-------------------------------------------------------------------------- | +| _class-pattern_ | class name pattern | +| `[c:]` | hashcode of the [class loader](classloader.md) that loaded the target class | +| `[classLoaderClass:]` | The class name of the ClassLoader that executes the expression. | +| `[d:]` | set the destination directory for class files | +| `[E]` | turn on regex match, the default behavior is wild card match | ### Usage @@ -39,7 +40,7 @@ $ dump -d /tmp/output java.lang.String Affect(row-cnt:1) cost in 138 ms. ``` -* Specify classLoader +- Specify classLoader Note that the hashcode changes, you need to check the current ClassLoader information first, and extract the hashcode corresponding to the ClassLoader. @@ -59,6 +60,6 @@ $ dump --classLoaderClass sun.misc.Launcher$AppClassLoader demo.* Affect(row-cnt:1) cost in 39 ms. ``` - * PS: Here the classLoaderClass in java 8 is sun.misc.Launcher$AppClassLoader, while in java 11 it's jdk.internal.loader.ClassLoaders$AppClassLoader. Currently katacoda using java 8. +- PS: Here the classLoaderClass in java 8 is sun.misc.Launcher$AppClassLoader, while in java 11 it's jdk.internal.loader.ClassLoaders$AppClassLoader. Currently katacoda using java 8. The value of `--classloaderclass` is the class name of classloader. It can only work when it matches a unique classloader instance. The purpose is to facilitate the input of general commands. However, `-c ` is dynamic. diff --git a/site/src/site/sphinx/en/echo.md b/site-vuepress/docs/en/doc/echo.md similarity index 67% rename from site/src/site/sphinx/en/echo.md rename to site-vuepress/docs/en/doc/echo.md index fe37cc077..63335bbcd 100644 --- a/site/src/site/sphinx/en/echo.md +++ b/site-vuepress/docs/en/doc/echo.md @@ -1,11 +1,11 @@ -echo -=== +# echo [`echo` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-echo) -> write arguments to the standard output. - +::: tip +write arguments to the standard output. +::: ```bash $ echo 'hello' -``` \ No newline at end of file +``` diff --git a/site/src/site/sphinx/en/faq.md b/site-vuepress/docs/en/doc/faq.md similarity index 88% rename from site/src/site/sphinx/en/faq.md rename to site-vuepress/docs/en/doc/faq.md index b9e82384e..df4f9ef21 100644 --- a/site/src/site/sphinx/en/faq.md +++ b/site-vuepress/docs/en/doc/faq.md @@ -1,17 +1,17 @@ -## FAQ - - -> For questions that are not in this list, please search in issues. [https://github.com/alibaba/arthas/issues](https://github.com/alibaba/arthas/issues) +# FAQ +::: tip +For questions that are not in this list, please search in issues. [https://github.com/alibaba/arthas/issues](https://github.com/alibaba/arthas/issues) +::: ##### Where is the log file? Log file path: `~/logs/arthas/arthas.log` + ##### How much impact does Arthas attach have on the performance of the original process? [https://github.com/alibaba/arthas/issues/44](https://github.com/alibaba/arthas/issues/44) - ##### target process not responding or HotSpot VM not loaded com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded @@ -19,8 +19,7 @@ com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: ta 1. Check whether the current user and the target java process are consistent. If they are inconsistent, switch to the same user. JVM can only attach java processes under the same user. 2. Try to use `jstack -l $pid`. If the process does not respond, it means that the process may freeze and fail to respond to the JVM attach signal. So Arthas based on the attach mechanism cannot work. Try to use `jmap` heapdump to analyze. 3. Try to attach math-game in [quick-start](quick-start.md). -4. For more information: [https://github.com/alibaba/arthas/issues/347](https://github.com/alibaba/arthas/issues/347) - +4. For more information: [https://github.com/alibaba/arthas/issues/347](https://github.com/alibaba/arthas/issues/347) ##### Can commands such as trace/watch enhance the classes in jdk? @@ -32,7 +31,9 @@ options unsafe true See more at [options](options.md) -> To support the jars appended by java.lang.instrument.Instrumentation#appendToBootstrapClassLoaderSearch need to enable unsafe. +::: tip +To support the jars appended by java.lang.instrument.Instrumentation#appendToBootstrapClassLoaderSearch need to enable unsafe. +::: ##### How to view the result in `json` format @@ -42,7 +43,6 @@ options json-format true See more at [options](options.md) - ##### Can arthas trace native methods No. @@ -52,7 +52,6 @@ No. 1. You can use [`vmtool`](vmtool.md) command. 2. You can use some tricks to intercept the object with the [`tt`](tt.md) command, or fetch it from a static method. - ##### How to filter method with the same name? You can used all variables in [fundamental fields in expressions](advice-class.md) for the condition express to filter method with the same name, you can use the number of parameters `params.length ==1`,parameter type `params[0] instanceof java.lang.Integer`,return value type `returnObj instanceof java.util.List` and so on in one or more combinations as condition express. @@ -63,7 +62,7 @@ example [math-game](quick-start.md) ```bash watch demo.MathGame primeFactors '{params,returnObj,throwExp}' 'params.length >0 && returnObj instanceof java.util.List' -v -``` +``` ##### How to watch or trace constructor? @@ -77,7 +76,7 @@ In the JVM specification the name of inner classes is `OuterClass$InnerClass`. ```bash watch OuterClass$InnerClass -```` +``` ##### Enter Unicode characters @@ -85,7 +84,7 @@ Convert Unicode characters to `\u` representation: ```bash ognl '@java.lang.System@out.println("Hello \u4e2d\u6587")' -```` +``` ##### java.lang.ClassFormatError: null, skywalking arthas compatible use @@ -93,12 +92,10 @@ When error log appear `java.lang.ClassFormatError: null`, it is usually modified For example: use skywalking V8.1.0 below [cannot trace, watch classes enhanced by skywalking agent](https://github.com/alibaba/arthas/issues/1141), V8.1.0 or above is compatible, refer to skywalking configuration for more details. [skywalking compatible with other javaagent bytecode processing](https://github.com/apache/skywalking/blob/master/docs/en/FAQ/Compatible-with-other-javaagent-bytecode-processing.md#). - #### class redefinition failed: attempted to change the schema (add/remove fields) Reference: [https://github.com/alibaba/arthas/issues/2165](https://github.com/alibaba/arthas/issues/2165) - ##### Can I use arthas offline? Yes. Just download the full size package and unzip it, refer to: [Download](download.md). @@ -107,9 +104,8 @@ Yes. Just download the full size package and unzip it, refer to: [Download](down Reference: [https://github.com/alibaba/arthas/issues/362#issuecomment-448185416](https://github.com/alibaba/arthas/issues/362#issuecomment-448185416) - ##### Why is the new version of Arthas downloaded, but the old version is connected? -For example, the started version of `as.sh/arthas-boot.jar` is 3.5.*, but after connecting, the printed arthas version is 3.4.*. +For example, the started version of `as.sh/arthas-boot.jar` is 3.5._, but after connecting, the printed arthas version is 3.4._. -It may be that the target process has been diagnosed with the old version of arthas before. You can execute `stop` to stop the old version of arthas, and then reuse the new version to attach. \ No newline at end of file +It may be that the target process has been diagnosed with the old version of arthas before. You can execute `stop` to stop the old version of arthas, and then reuse the new version to attach. diff --git a/site/src/site/sphinx/en/getstatic.md b/site-vuepress/docs/en/doc/getstatic.md similarity index 84% rename from site/src/site/sphinx/en/getstatic.md rename to site-vuepress/docs/en/doc/getstatic.md index 1e3b77710..ba49c348f 100644 --- a/site/src/site/sphinx/en/getstatic.md +++ b/site-vuepress/docs/en/doc/getstatic.md @@ -1,9 +1,8 @@ -getstatic -========= +# getstatic [`getstatic` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-getstatic) -* It is recommended to use the [OGNL] (ognl.md) command, which will be more flexible. +- It is recommended to use the [OGNL] (ognl.md) command, which will be more flexible. Check the static fields of classes conveniently, the usage is `getstatic class_name field_name`. @@ -29,7 +28,7 @@ field: random ] ``` -* Specify classLoader +- Specify classLoader Note that the hashcode changes, you need to check the current ClassLoader information first, and extract the hashcode corresponding to the ClassLoader using `sc -d `. @@ -43,15 +42,14 @@ For classloader with only one instance, it can be specified by `--classLoaderCla `getstatic --classLoaderClass demo.MathGame random` - * PS: Here the classLoaderClass in java 8 is sun.misc.Launcher$AppClassLoader, while in java 11 it's jdk.internal.loader.ClassLoaders$AppClassLoader. Currently katacoda using java 8. +- PS: Here the classLoaderClass in java 8 is sun.misc.Launcher$AppClassLoader, while in java 11 it's jdk.internal.loader.ClassLoaders$AppClassLoader. Currently katacoda using java 8. The value of `--classloaderclass` is the class name of classloader. It can only work when it matches a unique classloader instance. The purpose is to facilitate the input of general commands. However, `-c ` is dynamic. Tip: if the static field is a complex class, you can even use [`OGNL`](https://commons.apache.org/proper/commons-ognl/language-guide.html) to traverse, filter and access the inner properties of this class. -* [OGNL official guide](https://commons.apache.org/proper/commons-ognl/language-guide.html) -* [Special usages](https://github.com/alibaba/arthas/issues/71) - +- [OGNL official guide](https://commons.apache.org/proper/commons-ognl/language-guide.html) +- [Special usages](https://github.com/alibaba/arthas/issues/71) E.g. suppose `n` is a `Map` and its key is a `Enum`, then you can achieve this if you want to pick the key with a specific `Enum` value: diff --git a/site/src/site/sphinx/en/grep.md b/site-vuepress/docs/en/doc/grep.md similarity index 96% rename from site/src/site/sphinx/en/grep.md rename to site-vuepress/docs/en/doc/grep.md index 771a27c84..47cb2375e 100644 --- a/site/src/site/sphinx/en/grep.md +++ b/site-vuepress/docs/en/doc/grep.md @@ -1,10 +1,10 @@ -grep -=== +# grep [`grep` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-grep) -> Similar to the traditional `grep` command. - +::: tip +Similar to the traditional `grep` command. +::: ``` USAGE: @@ -36,4 +36,4 @@ grep -e, --regex Enable regular expression to match --trim-end Remove whitespaces at the end of the line Pattern -``` \ No newline at end of file +``` diff --git a/site/src/site/sphinx/en/groovy.md b/site-vuepress/docs/en/doc/groovy.md similarity index 84% rename from site/src/site/sphinx/en/groovy.md rename to site-vuepress/docs/en/doc/groovy.md index eb1dc16bb..627331446 100644 --- a/site/src/site/sphinx/en/groovy.md +++ b/site-vuepress/docs/en/doc/groovy.md @@ -1,7 +1,8 @@ -groovy -=== +# groovy -> Arthas support groovy scripting to allow user to use script like BTrace. It is possible to use if/for/switch/while in groovy scripting, but has more limitations compared to BTrace. +::: tip +Arthas support groovy scripting to allow user to use script like BTrace. It is possible to use if/for/switch/while in groovy scripting, but has more limitations compared to BTrace. +::: ### Limitations @@ -10,16 +11,16 @@ groovy ### Parameters -|Parameter|Explanation| -|---:|:---| -|*class-pattern*|class name pattern| -|*method-pattern*|method name pattern| -|*script-filepath*|the absolute path of the groovy script| -|[S]|match all sub classes| -|[E]|enable regex match, the default is wildcard match| +| Parameter | Explanation | +| ----------------: | :------------------------------------------------ | +| _class-pattern_ | class name pattern | +| _method-pattern_ | method name pattern | +| _script-filepath_ | the absolute path of the groovy script | +| [S] | match all sub classes | +| [E] | enable regex match, the default is wildcard match | Note: the third parameter `script-filepath` must be the absolute path of the groovy script, for example `/tmp/test.groovy`. It is not recommended to use relative path, e.g. `./test.groovy`. - + ### Explanation on the important callbacks ```java diff --git a/site/src/site/sphinx/en/heapdump.md b/site-vuepress/docs/en/doc/heapdump.md similarity index 89% rename from site/src/site/sphinx/en/heapdump.md rename to site-vuepress/docs/en/doc/heapdump.md index c01b2bd9a..91f7d82b1 100644 --- a/site/src/site/sphinx/en/heapdump.md +++ b/site-vuepress/docs/en/doc/heapdump.md @@ -1,10 +1,10 @@ -heapdump -=== +# heapdump [`heapdump` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-heapdump) -> dump java heap in hprof binary format, like `jmap`. - +::: tip +dump java heap in hprof binary format, like `jmap`. +::: ### Usage @@ -31,6 +31,3 @@ Heap dump file created Dumping heap to /var/folders/my/wy7c9w9j5732xbkcyt1mb4g40000gp/T/heapdump2019-09-03-16-385121018449645518991.hprof... Heap dump file created ``` - - - diff --git a/site/src/site/sphinx/en/help.md b/site-vuepress/docs/en/doc/help.md similarity index 96% rename from site/src/site/sphinx/en/help.md rename to site-vuepress/docs/en/doc/help.md index bc0b48d6e..60269e3a7 100644 --- a/site/src/site/sphinx/en/help.md +++ b/site-vuepress/docs/en/doc/help.md @@ -1,9 +1,10 @@ -help -=== +# help show help message, the command can show all the commands that current Arthas server supports,or you can use the command to show the detail usage of another command. -> [help command] equals [command -help],both is to show the detail usage of one command. +::: tip +[help command] equals [command -help],both is to show the detail usage of one command. +::: ### Options @@ -59,8 +60,8 @@ $ help tee tee command for pipes. profiler Async Profiler. https://github.com/jvm-profiling-tools/async-profiler stop Stop/Shutdown Arthas server and exit the console. - - + + ``` ```bash @@ -84,4 +85,3 @@ $ help -i, --interval The interval (in ms) between two executions, default is 5000 ms. -n, --number-of-execution The number of times this command will be executed. ``` - diff --git a/site/src/site/sphinx/en/history.md b/site-vuepress/docs/en/doc/history.md similarity index 66% rename from site/src/site/sphinx/en/history.md rename to site-vuepress/docs/en/doc/history.md index 18a48eabe..084efff0d 100644 --- a/site/src/site/sphinx/en/history.md +++ b/site-vuepress/docs/en/doc/history.md @@ -1,9 +1,10 @@ -history -=== +# history view command history. -> history of commands will persisted in a file named history, so the history command can show all the history commands of current Arthas server ,but not only history in current session. +::: tip +history of commands will persisted in a file named history, so the history command can show all the history commands of current Arthas server ,but not only history in current session. +::: ### Options @@ -28,4 +29,3 @@ $ history 3 $ history 3 1 history 3 ``` - diff --git a/site/src/site/sphinx/en/http-api.md b/site-vuepress/docs/en/doc/http-api.md similarity index 68% rename from site/src/site/sphinx/en/http-api.md rename to site-vuepress/docs/en/doc/http-api.md index af386f35c..1ff1ea905 100644 --- a/site/src/site/sphinx/en/http-api.md +++ b/site-vuepress/docs/en/doc/http-api.md @@ -1,5 +1,4 @@ -Http API -======== +# Http API [`Http API` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=case-http-api) @@ -11,7 +10,6 @@ Telnet/WebConsole's output unstructured text data, Http API can provide structured data and support more complex interactive functions, such as a series of diagnostic operations in specific application scenarios. - #### Access address The Http API address is: `http://ip:port/api`, the request parameters @@ -22,7 +20,6 @@ Note: The telnet port `3658` has compatibility issues with the Chrome browser. It is recommended to use the http port `8563` to access the http api. - #### Request data format ```json @@ -35,17 +32,18 @@ http api. "execTimeout": "10000" } ``` + Request data format description: -* `action` : The requested action/behavior, please refer to "Request +- `action` : The requested action/behavior, please refer to "Request Actions" for optional values. -* `requestId` : Optional request ID, generated by the client. -* `sessionId` : Arthas session ID, one-time command does not need to - set the session ID. -* `consumerId` : Arthas consumer ID, used for multi-person sharing - sessions. -* `command` : Arthas command line -* `execTimeout` : Timeout for executing commands (ms), default value is 30000. +- `requestId` : Optional request ID, generated by the client. +- `sessionId` : Arthas session ID, one-time command does not need to + set the session ID. +- `consumerId` : Arthas consumer ID, used for multi-person sharing + sessions. +- `command` : Arthas command line +- `execTimeout` : Timeout for executing commands (ms), default value is 30000. Note: Different actions use different parameters. Set the parameters according to the specific action. @@ -54,33 +52,33 @@ according to the specific action. Currently supported request actions are as follows: -* `exec` : The command is executed synchronously, and the command +- `exec` : The command is executed synchronously, and the command results is returned after the command execution end or interrupted. -* `async_exec` : The command is executed asynchronously, and the - scheduling result of the command is returned immediately. The command - execution result is obtained through `pull_results` action. -* `interrupt_job` : To interrupt the foreground command of the session, - similar to the function of Telnet `Ctrl + c`. -* `pull_results` : Get the result of the command executed - asynchronously, and execute it repeatedly in http long-polling mode. -* `init_session` : Create new session. -* `join_session` : Join the session, used to support multiple people - sharing the same Arthas session. -* `close_session` : Close the session. +- `async_exec` : The command is executed asynchronously, and the + scheduling result of the command is returned immediately. The command + execution result is obtained through `pull_results` action. +- `interrupt_job` : To interrupt the foreground command of the session, + similar to the function of Telnet `Ctrl + c`. +- `pull_results` : Get the result of the command executed + asynchronously, and execute it repeatedly in http long-polling mode. +- `init_session` : Create new session. +- `join_session` : Join the session, used to support multiple people + sharing the same Arthas session. +- `close_session` : Close the session. #### Response status The state attribute in the response indicates the request processing state, and its value is as follows: -* `SCHEDULED`: When the command is executed asynchronously, it means that +- `SCHEDULED`: When the command is executed asynchronously, it means that the job has been created, and may not be executed yet or is being executed; -* `SUCCEEDED`: The request is processed successfully (completed status); -* `FAILED`: Request processing failed (completed status), usually +- `SUCCEEDED`: The request is processed successfully (completed status); +- `FAILED`: Request processing failed (completed status), usually + accompanied by a message explaining the reason; +- `REFUSED`: The request is rejected (completed status), usually accompanied by a message explaining the reason; -* `REFUSED`: The request is rejected (completed status), usually - accompanied by a message explaining the reason; ### One-time command @@ -105,65 +103,69 @@ curl -Ss -XPOST http://localhost:8563/api -d ' } ' ``` + The response is as follows: ```json { - "state" : "SUCCEEDED", - "sessionId" : "ee3bc004-4586-43de-bac0-b69d6db7a869", - "body" : { - "results" : [ - { - "type" : "version", - "version" : "3.3.7", - "jobId" : 5 - }, - { - "jobId" : 5, - "statusCode" : 0, - "type" : "status" - } - ], - "timeExpired" : false, - "command" : "version", - "jobStatus" : "TERMINATED", - "jobId" : 5 - } + "state": "SUCCEEDED", + "sessionId": "ee3bc004-4586-43de-bac0-b69d6db7a869", + "body": { + "results": [ + { + "type": "version", + "version": "3.3.7", + "jobId": 5 + }, + { + "jobId": 5, + "statusCode": 0, + "type": "status" + } + ], + "timeExpired": false, + "command": "version", + "jobStatus": "TERMINATED", + "jobId": 5 + } } ``` + Response data format description: -* `state`: Request processing status, refer to the description of +- `state`: Request processing status, refer to the description of "Response Status". -* `sessionId `: Arthas session ID, one-time command to automatically - create and destroy temporary sessions. -* `body.jobId`: The job ID of the command, all output results of the - same job are the same jobId. -* `body.jobStatus`: The job status of the command. -* `body.timeExpired`: Whether the job execution timed out. -* `body/results`: Command execution results. +- `sessionId `: Arthas session ID, one-time command to automatically + create and destroy temporary sessions. +- `body.jobId`: The job ID of the command, all output results of the + same job are the same jobId. +- `body.jobStatus`: The job status of the command. +- `body.timeExpired`: Whether the job execution timed out. +- `body/results`: Command execution results. **Command result format description** ```json - [{ - "type" : "version", - "version" : "3.3.7", - "jobId" : 5 - }, - { - "jobId" : 5, - "statusCode" : 0, - "type" : "status" - }] -``` - -* `type` : The command result type, except for the special ones such as +[ + { + "type": "version", + "version": "3.3.7", + "jobId": 5 + }, + { + "jobId": 5, + "statusCode": 0, + "type": "status" + } +] +``` + +- `type` : The command result type, except for the special ones such as `status`, the others remain the same as the Arthas command name. Please refer to the section "[Special command results](#special_command_results)". -* `jobId` : The job ID of the command. -* Other fields are the data of each different command. +- `jobId` : The job ID of the command. +- Other fields are the data of each different command. Note: You can also use a one-time command to execute continuous output commands such as watch/trace, but you can't interrupt the command @@ -174,27 +176,25 @@ section. Please try to deal with it in the following way: -* Set a reasonable `execTimeout` to forcibly interrupt the command +- Set a reasonable `execTimeout` to forcibly interrupt the command execution after the timeout period is reached to avoid a long hang. -* Use the `-n` parameter to specify a smaller number of executions. -* Ensure the methods of the command matched can be successfully hit and +- Use the `-n` parameter to specify a smaller number of executions. +- Ensure the methods of the command matched can be successfully hit and the `condition-express` is written correctly. If the `watch/trace` does not hit, even if `-n 1` is specified, it will hang and wait until the execution timeout. - - ### Session interaction Users create and manage Arthas sessions, which are suitable for complex interactive processes. The access process is as follows: -* Create a session -* Join the session (optional) -* Pull command results -* Execute a series of commands -* Interrupt command execution -* Close the session +- Create a session +- Join the session (optional) +- Pull command results +- Execute a series of commands +- Interrupt command execution +- Close the session #### Create session @@ -205,19 +205,20 @@ curl -Ss -XPOST http://localhost:8563/api -d ' } ' ``` + Response result: ```json { - "sessionId" : "b09f1353-202c-407b-af24-701b744f971e", - "consumerId" : "5ae4e5fbab8b4e529ac404f260d4e2d1_1", - "state" : "SUCCEEDED" + "sessionId": "b09f1353-202c-407b-af24-701b744f971e", + "consumerId": "5ae4e5fbab8b4e529ac404f260d4e2d1_1", + "state": "SUCCEEDED" } ``` + The new session ID is: `b09f1353-202c-407b-af24-701b744f971e`, and consumer ID is: `5ae4e5fbab8b4e529ac404f260d4e2d1_1`. - #### Join session Specify the session ID to join, and the server will assign a new @@ -234,15 +235,17 @@ curl -Ss -XPOST http://localhost:8563/api -d ' } ' ``` + Response result: ```json { - "consumerId" : "8f7f6ad7bc2d4cb5aa57a530927a95cc_2", - "sessionId" : "b09f1353-202c-407b-af24-701b744f971e", - "state" : "SUCCEEDED" + "consumerId": "8f7f6ad7bc2d4cb5aa57a530927a95cc_2", + "sessionId": "b09f1353-202c-407b-af24-701b744f971e", + "state": "SUCCEEDED" } ``` + The new consumer ID is `8f7f6ad7bc2d4cb5aa57a530927a95cc_2 ` . #### Pull command results @@ -255,7 +258,6 @@ you need to call `join_session` to allocate a new consumer. Each consumer is allocated a cache queue separately, and the pull order does not affect the content received by the consumer. - The request parameters require session ID and consumer ID: ```bash @@ -286,42 +288,40 @@ The response content is as follows: ```json { - "body" : { - "results" : [ - { - "inputStatus" : "DISABLED", - "jobId" : 0, - "type" : "input_status" - }, - { - "type" : "message", - "jobId" : 0, - "message" : "Welcome to arthas!" - }, - { - "tutorials" : "https://arthas.aliyun.com/doc/arthas-tutorials.html", - "time" : "2020-08-06 15:56:43", - "type" : "welcome", - "jobId" : 0, - "pid" : "7909", - "wiki" : "https://arthas.aliyun.com/doc", - "version" : "3.3.7" - }, - { - "inputStatus" : "ALLOW_INPUT", - "type" : "input_status", - "jobId" : 0 - } - ] - }, - "sessionId" : "b09f1353-202c-407b-af24-701b744f971e", - "consumerId" : "8f7f6ad7bc2d4cb5aa57a530927a95cc_2", - "state" : "SUCCEEDED" + "body": { + "results": [ + { + "inputStatus": "DISABLED", + "jobId": 0, + "type": "input_status" + }, + { + "type": "message", + "jobId": 0, + "message": "Welcome to arthas!" + }, + { + "tutorials": "https://arthas.aliyun.com/doc/arthas-tutorials.html", + "time": "2020-08-06 15:56:43", + "type": "welcome", + "jobId": 0, + "pid": "7909", + "wiki": "https://arthas.aliyun.com/doc", + "version": "3.3.7" + }, + { + "inputStatus": "ALLOW_INPUT", + "type": "input_status", + "jobId": 0 + } + ] + }, + "sessionId": "b09f1353-202c-407b-af24-701b744f971e", + "consumerId": "8f7f6ad7bc2d4cb5aa57a530927a95cc_2", + "state": "SUCCEEDED" } - ``` - #### Execute commands asynchronously ```bash @@ -338,21 +338,21 @@ Response of `async_exec`: ```json { - "sessionId" : "2b085b5d-883b-4914-ab35-b2c5c1d5aa2a", - "state" : "SCHEDULED", - "body" : { - "jobStatus" : "READY", - "jobId" : 3, - "command" : "watch demo.MathGame primeFactors \"{params, returnObj, throwExp}\" " - } + "sessionId": "2b085b5d-883b-4914-ab35-b2c5c1d5aa2a", + "state": "SCHEDULED", + "body": { + "jobStatus": "READY", + "jobId": 3, + "command": "watch demo.MathGame primeFactors \"{params, returnObj, throwExp}\" " + } } ``` -* `state` : The status of `SCHEDULED` means that the command has been +- `state` : The status of `SCHEDULED` means that the command has been parsed and generated the job, but the execution has not started. -* `body.jobId` : The job id of command execution, filter the command +- `body.jobId` : The job id of command execution, filter the command results output in `pull_results` according to this job ID. -* `body.jobStatus` : The job status `READY` means that execution has not started. +- `body.jobStatus` : The job status `READY` means that execution has not started. The shell output of the script that continuously pulls the result message: @@ -442,7 +442,6 @@ The shell output of the script that continuously pulls the result message: } ``` - The `value` of the watch command result is the value of watch-experss, and the above command is `{params, returnObj, throwExp}`, so the value of the watch result is an array of length 3, and each element @@ -465,11 +464,11 @@ curl -Ss -XPOST http://localhost:8563/api -d ''' ```json { - "state" : "SUCCEEDED", - "body" : { - "jobStatus" : "TERMINATED", - "jobId" : 3 - } + "state": "SUCCEEDED", + "body": { + "jobStatus": "TERMINATED", + "jobId": 3 + } } ``` @@ -488,55 +487,54 @@ curl -Ss -XPOST http://localhost:8563/api -d ''' ```json { - "state" : "SUCCEEDED" + "state": "SUCCEEDED" } ``` ### Authentication -* Reference: [auth](auth.md) +- Reference: [auth](auth.md) ### Web UI -![](../_static/arthas-web-ui.png "arthas web ui") +![](/images/arthas-web-ui.png "arthas web ui") A Web UI based on Http API, visit url : [http://127.0.0.1:8563/ui](http://127.0.0.1:8563/ui) . Completed functions: -* Create a session -* Copy and open the url to join the session, share the session with +- Create a session +- Copy and open the url to join the session, share the session with multiple people -* Continuously pull session command result messages -* Refresh the web page or join the session to pull command messages +- Continuously pull session command result messages +- Refresh the web page or join the session to pull command messages history -* Control input or interrupt command status - +- Control input or interrupt command status Pending function: -* Improve the readability of command result messages -* Support automatic completion of input commands and command templates -* Provide command help -* Support personal profile settings +- Improve the readability of command result messages +- Support automatic completion of input commands and command templates +- Provide command help +- Support personal profile settings + ### Special command results #### status ```json { - "jobId" : 5, - "statusCode" : 0, - "type" : "status" + "jobId": 5, + "statusCode": 0, + "type": "status" } ``` `type` is `status` to indicate the command execution status: - After each command is executed, there is a unique status result. If the `statusCode` is 0, it means the execution is successful, and the `statusCode` is a non-zero value that means the execution failed, @@ -546,51 +544,50 @@ When the command execution fails, an error message is generally provided, such a ```json { - "jobId":3, - "message":"The argument 'class-pattern' is required", - "statusCode":-10, - "type":"status" + "jobId": 3, + "message": "The argument 'class-pattern' is required", + "statusCode": -10, + "type": "status" } ``` #### input_status ```json - { - "inputStatus" : "ALLOW_INPUT", - "type" : "input_status", - "jobId" : 0 - } +{ + "inputStatus": "ALLOW_INPUT", + "type": "input_status", + "jobId": 0 +} ``` `type` is `input_status` to indicate input status: - It is used to control user input during UI interaction, and a change message will be sent before and after each command is executed. Possible values ​​of `inputStatus`: -* `ALLOW_INPUT` : Allow users to enter commands, which means that the +- `ALLOW_INPUT` : Allow users to enter commands, which means that the session has no foreground command being executed and can accept new command. -* `ALLOW_INTERRUPT` : Allow the user to interrupt the command execution, +- `ALLOW_INTERRUPT` : Allow the user to interrupt the command execution, indicating that a command is currently being executed, and the user can send `interrupt_job` to interrupt the execution. -* `DISABLED` : In the disabled state, commands cannot be entered or +- `DISABLED` : In the disabled state, commands cannot be entered or interrupted. - #### command ```json - { - "type" : "command", - "jobId" : 3, - "state" : "SCHEDULED", - "command" : "watch demo.MathGame primeFactors \"{params, returnObj, throwExp}\" " - } +{ + "type": "command", + "jobId": 3, + "state": "SCHEDULED", + "command": "watch demo.MathGame primeFactors \"{params, returnObj, throwExp}\" " +} ``` + `type` is `command` to indicate the input command data: It is used for the interactive UI to echo the commands entered by the @@ -600,17 +597,17 @@ of type `command`, which can be processed in order. #### enhancer ```json - { - "success" : true, - "jobId" : 3, - "effect" : { - "listenerId" : 3, - "cost" : 24, - "classCount" : 1, - "methodCount" : 1 - }, - "type" : "enhancer" - } +{ + "success": true, + "jobId": 3, + "effect": { + "listenerId": 3, + "cost": 24, + "classCount": 1, + "methodCount": 1 + }, + "type": "enhancer" +} ``` `type` is `enhancer` to indicate the result of class enhancement: @@ -635,14 +632,14 @@ json_data=$(curl -Ss -XPOST http://localhost:8563/api -d ' }') ``` -* Extract value with `sed`: +- Extract value with `sed`: ```bash class_path=$(echo $json_data | tr -d '\n' | sed 's/.*"java.class.path":"\([^"]*\).*/\1/') echo "classpath: $class_path" ``` -* Extract value with `json_pp/awk`: +- Extract value with `json_pp/awk`: ```bash class_path=$(echo $json_data | tr -d '\n' | json_pp | grep java.class.path | awk -F'"' '{ print $4 }') @@ -657,13 +654,13 @@ classpath: demo-arthas-spring-boot.jar NOTE: -* `echo $json_data | tr -d '\n'` : Delete line breaks (the value of +- `echo $json_data | tr -d '\n'` : Delete line breaks (the value of `line.separator`) to avoid affecting the processing of `sed`/`json_pp` commands. -* `awk -F'"' '{ print $4 }'` : Use double quote as delimiter - +- `awk -F'"' '{ print $4 }'` : Use double quote as delimiter + #### Make watch command output a map object The result value of `watch` is generated by calculating the @@ -671,11 +668,13 @@ The result value of `watch` is generated by calculating the generate the desired value, please refer to [OGNL document](https://commons.apache.org/proper/commons-ognl/language-guide.html). -> Maps can also be created using a special syntax. -> ->#{ "foo" : "foo value", "bar" : "bar value" } -> ->This creates a Map initialized with mappings for "foo" and "bar". +::: tip +Maps can also be created using a special syntax. + +#{ "foo" : "foo value", "bar" : "bar value" } + +This creates a Map initialized with mappings for "foo" and "bar". +::: The following command generates values ​​in map format: diff --git a/site-vuepress/docs/en/doc/idea-plugin.md b/site-vuepress/docs/en/doc/idea-plugin.md new file mode 100644 index 000000000..587aea9c8 --- /dev/null +++ b/site-vuepress/docs/en/doc/idea-plugin.md @@ -0,0 +1,9 @@ +# IDEA Plugin + +::: tip +Plugin is provided by community developers. +::: + +- Jetbrains Plugin: [https://plugins.jetbrains.com/plugin/13581-arthas-idea](https://plugins.jetbrains.com/plugin/13581-arthas-idea) +- Plugin Doc:[https://www.yuque.com/arthas-idea-plugin](https://www.yuque.com/arthas-idea-plugin) +- Plugin Github: [https://github.com/WangJi92/arthas-idea-plugin](https://github.com/WangJi92/arthas-idea-plugin) diff --git a/site/src/site/sphinx/en/install-detail.md b/site-vuepress/docs/en/doc/install-detail.md similarity index 80% rename from site/src/site/sphinx/en/install-detail.md rename to site-vuepress/docs/en/doc/install-detail.md index a7b6e14c1..9dfd8e64c 100644 --- a/site/src/site/sphinx/en/install-detail.md +++ b/site-vuepress/docs/en/doc/install-detail.md @@ -1,9 +1,7 @@ -Install Arthas -============== +# Install Arthas ## Quick installation - ### Use `arthas-boot`(Recommended) Download`arthas-boot.jar`,Start with `java` command: @@ -19,10 +17,9 @@ Print usage: java -jar arthas-boot.jar -h ``` - ### Use `as.sh` -You can install Arthas with one single line command on Linux, Unix, and Mac. Pls. copy the following command and paste it into the command line, then press *Enter* to run: +You can install Arthas with one single line command on Linux, Unix, and Mac. Pls. copy the following command and paste it into the command line, then press _Enter_ to run: ```bash curl -L https://arthas.aliyun.com/install.sh | sh @@ -32,7 +29,6 @@ The command above will download the bootstrap script `as.sh` to the current dire You can enter its interactive interface by executing `as.sh`, or execute `as.sh -h` for more help information. - ## Full installation Latest Version, Click To Download: [![](https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square "Arthas")](https://arthas.aliyun.com/download/latest_version) @@ -53,18 +49,18 @@ java -jar arthas-boot.jar -h [Manual Installation](manual-install.md) - -## Installation via Packages +## Installation via Packages Arthas has packages for Debian and Fedora based systems. you can get them from the github releases page https://github.com/alibaba/arthas/releases. -### Instruction for Debian based systems +### Instruction for Debian based systems ```bash sudo dpkg -i arthas*.deb ``` -### Instruction for Fedora based systems + +### Instruction for Fedora based systems ```bash sudo rpm -i arthas*.rpm @@ -72,7 +68,7 @@ sudo rpm -i arthas*.rpm ### Usage -After the installation of packages, execute +After the installation of packages, execute ```bash as.sh @@ -82,14 +78,13 @@ as.sh Latest Version Documentation, Click To Download:[![](https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square "Arthas")](https://arthas.aliyun.com/download/doc/latest_version) - ## Uninstall -* On Linux/Unix/Mac, delete the files with the following command: +- On Linux/Unix/Mac, delete the files with the following command: - ```bash - rm -rf ~/.arthas/ - rm -rf ~/logs/arthas/ - ``` + ```bash + rm -rf ~/.arthas/ + rm -rf ~/logs/arthas/ + ``` -* On Windows, delete `.arthas` and `logs/arthas` directory under user home. +- On Windows, delete `.arthas` and `logs/arthas` directory under user home. diff --git a/site/src/site/sphinx/en/jad.md b/site-vuepress/docs/en/doc/jad.md similarity index 79% rename from site/src/site/sphinx/en/jad.md rename to site-vuepress/docs/en/doc/jad.md index b364c3a5b..8b5de4217 100644 --- a/site/src/site/sphinx/en/jad.md +++ b/site-vuepress/docs/en/doc/jad.md @@ -1,23 +1,24 @@ -jad -=== +# jad [`jad` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=command-jad) -> Decompile the specified classes. +::: tip +Decompile the specified classes. +::: `jad` helps to decompile the byte code running in JVM to the source code to assist you to understand the logic behind better. -* The decompiled code is syntax highlighted for better readability in Arthas console. -* It is possible that there's grammar error in the decompiled code, but it should not affect your interpretation. +- The decompiled code is syntax highlighted for better readability in Arthas console. +- It is possible that there's grammar error in the decompiled code, but it should not affect your interpretation. ### Options -|Name|Specification| -|---:|:---| -|*class-pattern*|pattern for the class name| -|`[c:]`|hashcode of the class loader that loads the class| -|`[classLoaderClass:]`| The class name of the ClassLoader that executes the expression. | -|`[E]`|turn on regex match while the default is wildcard match| +| Name | Specification | +| --------------------: | :-------------------------------------------------------------- | +| _class-pattern_ | pattern for the class name | +| `[c:]` | hashcode of the class loader that loads the class | +| `[classLoaderClass:]` | The class name of the ClassLoader that executes the expression. | +| `[E]` | turn on regex match while the default is wildcard match | ### Usage @@ -106,7 +107,7 @@ Location: #### Do not print line numbers -* `--lineNumber`: Output source code contins line numbers, default value true +- `--lineNumber`: Output source code contins line numbers, default value true ```java $ jad demo.MathGame main --lineNumber false @@ -129,7 +130,9 @@ public static void main(String[] args) throws InterruptedException { #### Decompile with specified classLoader -> If the target class is loaded by multiple classloaders, `jad` outputs the `hashcode` of the corresponding classloaders, then you can re-run `jad` and specify `-c ` to decompile the target class from the specified classloader. +::: tip +If the target class is loaded by multiple classloaders, `jad` outputs the `hashcode` of the corresponding classloaders, then you can re-run `jad` and specify `-c ` to decompile the target class from the specified classloader. +::: ```java $ jad org.apache.log4j.Logger diff --git a/site/src/site/sphinx/en/jvm.md b/site-vuepress/docs/en/doc/jvm.md similarity index 70% rename from site/src/site/sphinx/en/jvm.md rename to site-vuepress/docs/en/doc/jvm.md index a650bf9ea..55f62bf0d 100644 --- a/site/src/site/sphinx/en/jvm.md +++ b/site-vuepress/docs/en/doc/jvm.md @@ -1,9 +1,10 @@ -jvm -=== +# jvm [`jvm` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-jvm) -> Check the current JVM's info +::: tip +Check the current JVM's info +::: ### Usage @@ -46,13 +47,13 @@ RUNTIME -------------------------------------------------------------------------------------------------------------- GARBAGE-COLLECTORS -------------------------------------------------------------------------------------------------------------- - PS Scavenge name : PS Scavenge - [count/time (ms)] collectionCount : 7 - collectionTime : 68 - - PS MarkSweep name : PS MarkSweep - [count/time (ms)] collectionCount : 1 - collectionTime : 47 + PS Scavenge name : PS Scavenge + [count/time (ms)] collectionCount : 7 + collectionTime : 68 + + PS MarkSweep name : PS MarkSweep + [count/time (ms)] collectionCount : 1 + collectionTime : 47 -------------------------------------------------------------------------------------------------------------- MEMORY-MANAGERS @@ -73,15 +74,15 @@ RUNTIME -------------------------------------------------------------------------------------------------------------- MEMORY -------------------------------------------------------------------------------------------------------------- - HEAP-MEMORY-USAGE init : 268435456(256.0 MiB) - [memory in bytes] used : 18039504(17.2 MiB) - committed : 181403648(173.0 MiB) - max : 3817865216(3.6 GiB) - - NO-HEAP-MEMORY-USAGE init : 2555904(2.4 MiB) - [memory in bytes] used : 33926216(32.4 MiB) - committed : 35176448(33.5 MiB) - max : -1(-1 B) + HEAP-MEMORY-USAGE init : 268435456(256.0 MiB) + [memory in bytes] used : 18039504(17.2 MiB) + committed : 181403648(173.0 MiB) + max : 3817865216(3.6 GiB) + + NO-HEAP-MEMORY-USAGE init : 2555904(2.4 MiB) + [memory in bytes] used : 33926216(32.4 MiB) + committed : 35176448(33.5 MiB) + max : -1(-1 B) -------------------------------------------------------------------------------------------------------------- OPERATING-SYSTEM @@ -111,14 +112,13 @@ Affect(row-cnt:0) cost in 88 ms. ### Thread related -* COUNT: the count of active threads -* DAEMON-COUNT: the count of active daemon threads -* PEAK-COUNT: the maximum count of the live threads since JVM starts -* STARTED-COUNT: the total count of the created threads since JVM starts -* DEADLOCK-COUNT: the count of deadlocked threads - +- COUNT: the count of active threads +- DAEMON-COUNT: the count of active daemon threads +- PEAK-COUNT: the maximum count of the live threads since JVM starts +- STARTED-COUNT: the total count of the created threads since JVM starts +- DEADLOCK-COUNT: the count of deadlocked threads ### File descriptor related -* MAX-FILE-DESCRIPTOR-COUNT:the count of max file descriptor JVM process can open -* OPEN-FILE-DESCRIPTOR-COUNT:the current count of file descriptor JVM process open +- MAX-FILE-DESCRIPTOR-COUNT:the count of max file descriptor JVM process can open +- OPEN-FILE-DESCRIPTOR-COUNT:the current count of file descriptor JVM process open diff --git a/site-vuepress/docs/en/doc/keymap.md b/site-vuepress/docs/en/doc/keymap.md new file mode 100644 index 000000000..a1d32d95a --- /dev/null +++ b/site-vuepress/docs/en/doc/keymap.md @@ -0,0 +1,69 @@ +# Arthas Console Keymap + +[`keymap` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-keymap) + +Use `keymap` command to print the current keymap: + +The default keymap is: + +| Shortcut | Shortcut Description | Command Name | Command Description | +| ------------- | -------------------- | -------------------- | -------------------------------------------------------------------- | +| `"\C-a"` | ctrl + a | beginning-of-line | go to the beginning of the line | +| ` "\C-e"` | ctrl + e | end-of-line | go to the end of the line | +| `"\C-f"` | ctrl + f | forward-word | forward a word | +| `"\C-b"` | ctrl + b | backward-word | backward a word | +| `"\e[D"` | left arrow | backward-char | backward a character | +| `"\e[C"` | right arrow | forward-char | forward a character | +| `"\e[B"` | down arrow | next-history | show next history command | +| `"\e[A"` | up arrow | previous-history | show previous history command | +| `"\C-h"` | ctrl + h | backward-delete-char | backward delete a character | +| `"\C-?"` | ctrl + shift + / | backward-delete-char | backward delete a character | +| `"\C-u"` | ctrl + u | undo | clear current line | +| `"\C-d"` | ctrl + d | delete-char | delete the character of the current cursor | +| `"\C-k"` | ctrl + k | kill-line | delete all characters from the current cursor to the end of the line | +| `"\C-i"` | ctrl + i | complete | Auto completion, equivalent to `TAB` | +| `"\C-j"` | ctrl + j | accept-line | end the current line, equivalent to `enter` | +| `"\C-m"` | ctrl + m | accept-line | end the current line, equivalent to `enter` | +| `"\C-w"` | | backward-delete-word | | +| `"\C-x\e[3~"` | | backward-kill-line | | +| `"\e\C-?"` | | backward-kill-word | | + +- Press `tab` to enable auto-completion prompt at any time. +- Enter command and `-` or `--`, then press `tab` to display the concrete options for the current command. + +#### Custom shortcuts + +Specify customization in `$USER_HOME/.arthas/conf/inputrc` file in the current user home directory. + +Vim user may want to map `ctrl+h` to moving the cursor forward one character. To achieve this, copy the default configuration first, + +``` +"\C-a": beginning-of-line +"\C-e": end-of-line +"\C-f": forward-word +"\C-b": backward-word +"\e[D": backward-char +"\e[C": forward-char +"\e[B": next-history +"\e[A": previous-history +"\C-h": backward-delete-char +"\C-?": backward-delete-char +"\C-u": undo +"\C-d": delete-char +"\C-k": kill-line +"\C-i": complete +"\C-j": accept-line +"\C-m": accept-line +"\C-w": backward-delete-word +"\C-x\e[3~": backward-kill-line +"\e\C-?": backward-kill-word +``` + +then replace `"\C-h": backward-delete-char` with `"\C-h": backward-char`, then reconnect to Arthas console to take effect. + +#### Shortcuts for jobs + +- `ctrl + c`: Terminates current command +- `ctrl + z`: Suspends the current command, you can restore this command with `bg`/`fg`, or `kill` it. +- `ctrl + a`: Go to the beginning the line +- `ctrl + e`: Go to the end of the line diff --git a/site/src/site/sphinx/en/logger.md b/site-vuepress/docs/en/doc/logger.md similarity index 95% rename from site/src/site/sphinx/en/logger.md rename to site-vuepress/docs/en/doc/logger.md index b2d9d1eeb..7f4ba75a8 100644 --- a/site/src/site/sphinx/en/logger.md +++ b/site-vuepress/docs/en/doc/logger.md @@ -1,9 +1,10 @@ -logger -=== +# logger [`logger` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=command-logger) -> Print the logger information, update the logger level +::: tip +Print the logger information, update the logger level +::: ### Usage @@ -46,7 +47,6 @@ Take the following `logback.xml` as an example: ``` - The result of the `logger` command: ```bash @@ -78,9 +78,9 @@ The result of the `logger` command: In the `appenders` section: -* The target of `CONSOLE` logger is `System.out` -* `APPLICATION` logger is `RollingFileAppender`, the file is `app.log` -* `ASYNC` its `appenderRef` is `APPLICATION`, which means asynchronous output to the file +- The target of `CONSOLE` logger is `System.out` +- `APPLICATION` logger is `RollingFileAppender`, the file is `app.log` +- `ASYNC` its `appenderRef` is `APPLICATION`, which means asynchronous output to the file #### View logger information for the special name @@ -131,9 +131,9 @@ if you use`-c`, you have to manually type hashcode by `-c `. For classloader with only one instance, it can be specified by `--classLoaderClass` using class name, which is more convenient to use. -`logger --classLoaderClass sun.misc.Launcher$AppClassLoader` +`logger --classLoaderClass sun.misc.Launcher$AppClassLoader` - * PS: Here the classLoaderClass in java 8 is sun.misc.Launcher$AppClassLoader, while in java 11 it's jdk.internal.loader.ClassLoaders$AppClassLoader. +- PS: Here the classLoaderClass in java 8 is sun.misc.Launcher$AppClassLoader, while in java 11 it's jdk.internal.loader.ClassLoaders$AppClassLoader. The value of `--classloaderclass` is the class name of classloader. It can only work when it matches a unique classloader instance. The purpose is to facilitate the input of general commands. However, `-c ` is dynamic. @@ -156,7 +156,6 @@ You can first use `sc -d yourClassName` to check specified classloader hashcode #### View the logger information without appenders - By default, the `logger` command only prints information about the logger with appenders. If you want to see information about loggers without `appender`, you can use the parameter `--include-no-appender`. Note that the output will usually be very long. diff --git a/site-vuepress/docs/en/doc/manual-install.md b/site-vuepress/docs/en/doc/manual-install.md new file mode 100644 index 000000000..90b1c4d99 --- /dev/null +++ b/site-vuepress/docs/en/doc/manual-install.md @@ -0,0 +1,109 @@ +# Manually Install Arthas + +1. Download the latest version + + **Latest version, Click To Download**: [![](https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square "Arthas")](https://arthas.aliyun.com/download/latest_version) + +2. Unzip zip file + + ```bash + unzip arthas-packaging-bin.zip + ``` + +3. Install Arthas + + It is recommended to completely remove all old versions of Arthas before installation. + + ```bash + sudo su admin + rm -rf /home/admin/.arthas/lib/* # remove all the leftover of the old outdated Arthas + cd arthas + ./install-local.sh # switch the user based on the owner of the target Java process. + ``` + +4. Start Arthas + + Make sure `stop` the old Arthas server before start. + + ```bash + ./as.sh + ``` + +## Startup with as.sh/as.bat + +### Linux/Unix/Mac + +You can install Arthas with one single line command on Linux, Unix, and Mac. Pls. copy the following command and paste it into the command line, then press _Enter_ to run: + +```bash +curl -L https://arthas.aliyun.com/install.sh | sh +``` + +The command above will download the bootstrap script `as.sh` to the current directory. You can move it the any other place you want, or put its location in `$PATH`. + +You can enter its interactive interface by executing `as.sh`, or execute `as.sh -h` for more help information. + +### Windows + +Latest Version, Click To Download: [![](https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square "Arthas")](https://arthas.aliyun.com/download/latest_version) + +Download and unzip, then find `as.bat` from 'bin' directory. For now this script will only take one argument `pid`, which means you can only diagnose the local Java process. (Welcome any bat script expert to make it better :heart:) + +```bash +as.bat +``` + +If you want to diagnose Java process run as windows service, try these commands: + +```bash +as-service.bat -port +as-service.bat -pid +as-service.bat -pid --interact +``` + +Use this command to remove arthas service: + +```bash +as-service.bat -remove +``` + +## Manual command line startup + +If you fail to boot Arthas with the provided batch file, you could try to assemble the bootstrap command in the following way. + +1. Locate java in the target JVM: + + - Linux/Unix/Mac: `ps aux | grep java` + - Windows: open the Process Monitor to search java + +2. Assemble bootstrap command: + + Let's suppose we are using `/opt/jdk1.8/bin/java`, then the command should be: + + ```bash + /opt/jdk1.8/bin/java -Xbootclasspath/a:/opt/jdk1.8/lib/tools.jar \ + -jar /tmp/arthas-packaging/arthas-core.jar \ + -pid 15146 \ + -target-ip 127.0.0.1 -telnet-port 3658 -http-port 8563 \ + -core /tmp/arthas-packaging/arthas-core.jar \ + -agent /tmp/arthas-packaging/arthas/arthas-agent.jar + ``` + + Note: + + - `-Xbootclasspath` adds tools.jar + - `-jar /tmp/arthas-packaging/arthas-core.jar` specifies main entry + - `-pid 15146` specifies the target java process PID + - `-target-ip 127.0.0.1` specifies the IP + - `-telnet-port 3658 -http-port 8563` specifies telnet and HTTP ports for remote access + - `-core /tmp/arthas-packaging/arthas-core.jar -agent /tmp/arthas-packaging/arthas/arthas-agent.jar` specifies core/agent jar package + + If you are running on JDK 1.9 or above,then it's unnecessary to add `tools.jar` in option `-Xbootclasspath`. + + You can find the logs from `~/logs/arthas/arthas.log`. + +3. Use telnet to connect once attaching to the target JVM (in step 2) succeeds + + ```bash + telnet 127.0.0.1 3658 + ``` diff --git a/site-vuepress/docs/en/doc/mbean.md b/site-vuepress/docs/en/doc/mbean.md new file mode 100644 index 000000000..7880407ea --- /dev/null +++ b/site-vuepress/docs/en/doc/mbean.md @@ -0,0 +1,68 @@ +# mbean + +[`mbean` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-mbean) + +::: tip +show Mbean information +::: + +This command can show or monitor Mbean attribute information. + +### Parameters + +| Name | Specification | +| ------------------: | :---------------------------------------------------------------------------------------------------- | +| _name-pattern_ | pattern for the Mbean name | +| _attribute-pattern_ | pattern for the attribute name | +| [m] | show meta information | +| [i:] | specify the interval to refresh attribute value (ms) | +| [n:] | execution times | +| [E] | turn on regex matching while the default mode is wildcard matching. Only effect on the attribute name | + +### Usage + +show all Mbean names: + +```bash +mbean +``` + +show meta data of Mbean: + +```bash +mbean -m java.lang:type=Threading +``` + +show attributes of Mbean: + +```bash +mbean java.lang:type=Threading +``` + +Mbean name support wildcard matcher: + +```bash +mbean java.lang:type=Th* +``` + +::: warning +Notes:ObjectName matching rules differ from normal wildcards, Reference resources:[javax.management.ObjectName](https://docs.oracle.com/javase/8/docs/api/javax/management/ObjectName.html?is-external=true) +::: + +Wildcards match specific attributes: + +```bash +mbean java.lang:type=Threading *Count +``` + +Switch to regular matching using the `-E` command: + +```bash +mbean -E java.lang:type=Threading PeakThreadCount|ThreadCount|DaemonThreadCount +``` + +Real-time monitoring using `-i` command: + +```bash +mbean -i 1000 java.lang:type=Threading *Count +``` diff --git a/site/src/site/sphinx/en/mc.md b/site-vuepress/docs/en/doc/mc.md similarity index 72% rename from site/src/site/sphinx/en/mc.md rename to site-vuepress/docs/en/doc/mc.md index 933e972b8..fc93c8b90 100644 --- a/site/src/site/sphinx/en/mc.md +++ b/site-vuepress/docs/en/doc/mc.md @@ -1,9 +1,10 @@ -mc -=== +# mc [`mc-retransform` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=command-mc-retransform) -> Memory compiler, compiles `.java` files into `.class` files in memory. +::: tip +Memory compiler, compiles `.java` files into `.class` files in memory. +::: ```bash mc /tmp/Test.java @@ -32,4 +33,6 @@ mc -d /tmp/output /tmp/ClassA.java /tmp/ClassB.java After compiling the `.class` file, you can use the [retransform](retransform.md) command to re-define the loaded classes in JVM. -> Note that the mc command may fail. If the compilation fails, the `.class` file can be compiled locally and uploaded to the server. Refer to the [retransform](retransform.md) command description for details. \ No newline at end of file +::: warning +Note that the mc command may fail. If the compilation fails, the `.class` file can be compiled locally and uploaded to the server. Refer to the [retransform](retransform.md) command description for details. +::: diff --git a/site/src/site/sphinx/en/memory.md b/site-vuepress/docs/en/doc/memory.md similarity index 98% rename from site/src/site/sphinx/en/memory.md rename to site-vuepress/docs/en/doc/memory.md index 6e11c4280..f2c66d81e 100644 --- a/site/src/site/sphinx/en/memory.md +++ b/site-vuepress/docs/en/doc/memory.md @@ -1,9 +1,7 @@ -memory -=== +# memory View the JVM memory information. - ### Usage ```bash @@ -22,4 +20,3 @@ codeheap_'non-profiled_nmethods' 685K 2496K 120032K 0.57% mapped 0K 0K - 0.00% direct 48M 48M - 100.00% ``` - diff --git a/site/src/site/sphinx/en/monitor.md b/site-vuepress/docs/en/doc/monitor.md similarity index 73% rename from site/src/site/sphinx/en/monitor.md rename to site-vuepress/docs/en/doc/monitor.md index 40aaf1c83..8d04094b2 100644 --- a/site/src/site/sphinx/en/monitor.md +++ b/site-vuepress/docs/en/doc/monitor.md @@ -1,9 +1,10 @@ -monitor -======= +# monitor [`monitor` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-monitor) -> Monitor method invocation. +::: tip +Monitor method invocation. +::: Monitor invocation for the method matched with `class-pattern` and `method-pattern` and filter by `condition-expression`. @@ -15,29 +16,29 @@ On Arthas's server side, the command is running as a background job, but the wea ### Items to monitor -|Item|Specification| -|---:|:---| -|timestamp|timestamp| -|class|Java class| -|method|method (constructor and regular methods)| -|total|calling times| -|success|success count| -|fail|failure count| -|rt|average RT| -|fail-rate|failure ratio| +| Item | Specification | +| --------: | :--------------------------------------- | +| timestamp | timestamp | +| class | Java class | +| method | method (constructor and regular methods) | +| total | calling times | +| success | success count | +| fail | failure count | +| rt | average RT | +| fail-rate | failure ratio | ### Parameters Parameter `[c:]` stands for cycles of statistics. Its value is an integer value in seconds. -|Name|Specification| -|---:|:---| -|*class-pattern*|pattern for the class name| -|*method-pattern*|pattern for the method name| -|*condition-expression*|condition expression for filtering method calls| -|`[E]`|turn on regex matching while the default is wildcard matching| -|`[c:]`|cycle of statistics, the default value: `120`s| -|`[b]`|evaluate the condition-expression before method invoke| +| Name | Specification | +| ---------------------: | :------------------------------------------------------------ | +| _class-pattern_ | pattern for the class name | +| _method-pattern_ | pattern for the method name | +| _condition-expression_ | condition expression for filtering method calls | +| `[E]` | turn on regex matching while the default is wildcard matching | +| `[c:]` | cycle of statistics, the default value: `120`s | +| `[b]` | evaluate the condition-expression before method invoke | ### Usage @@ -76,25 +77,25 @@ Affect(class-cnt:1 , method-cnt:1) cost in 94 ms. monitor -c 5 demo.MathGame primeFactors "params[0] <= 2" Press Q or Ctrl+C to abort. Affect(class count: 1 , method count: 1) cost in 19 ms, listenerId: 5 - timestamp class method total success fail avg-rt(ms) fail-rate + timestamp class method total success fail avg-rt(ms) fail-rate ----------------------------------------------------------------------------------------------- - 2020-09-02 09:42:36 demo.MathGame primeFactors 5 3 2 0.09 40.00% + 2020-09-02 09:42:36 demo.MathGame primeFactors 5 3 2 0.09 40.00% - timestamp class method total success fail avg-rt(ms) fail-rate + timestamp class method total success fail avg-rt(ms) fail-rate ---------------------------------------------------------------------------------------------- - 2020-09-02 09:42:41 demo.MathGame primeFactors 5 2 3 0.11 60.00% + 2020-09-02 09:42:41 demo.MathGame primeFactors 5 2 3 0.11 60.00% - timestamp class method total success fail avg-rt(ms) fail-rate + timestamp class method total success fail avg-rt(ms) fail-rate ---------------------------------------------------------------------------------------------- - 2020-09-02 09:42:46 demo.MathGame primeFactors 5 1 4 0.06 80.00% + 2020-09-02 09:42:46 demo.MathGame primeFactors 5 1 4 0.06 80.00% - timestamp class method total success fail avg-rt(ms) fail-rate + timestamp class method total success fail avg-rt(ms) fail-rate ---------------------------------------------------------------------------------------------- - 2020-09-02 09:42:51 demo.MathGame primeFactors 5 1 4 0.12 80.00% + 2020-09-02 09:42:51 demo.MathGame primeFactors 5 1 4 0.12 80.00% - timestamp class method total success fail avg-rt(ms) fail-rate + timestamp class method total success fail avg-rt(ms) fail-rate ---------------------------------------------------------------------------------------------- - 2020-09-02 09:42:56 demo.MathGame primeFactors 5 3 2 0.15 40.00% + 2020-09-02 09:42:56 demo.MathGame primeFactors 5 3 2 0.15 40.00% ``` #### Evaluate condition-express to filter method (before method call) @@ -103,24 +104,23 @@ Affect(class count: 1 , method count: 1) cost in 19 ms, listenerId: 5 monitor -b -c 5 com.test.testes.MathGame primeFactors "params[0] <= 2" Press Q or Ctrl+C to abort. Affect(class count: 1 , method count: 1) cost in 21 ms, listenerId: 4 - timestamp class method total success fail avg-rt(ms) fail-rate + timestamp class method total success fail avg-rt(ms) fail-rate ---------------------------------------------------------------------------------------------- - 2020-09-02 09:41:57 demo.MathGame primeFactors 1 0 1 0.10 100.00% + 2020-09-02 09:41:57 demo.MathGame primeFactors 1 0 1 0.10 100.00% - timestamp class method total success fail avg-rt(ms) fail-rate + timestamp class method total success fail avg-rt(ms) fail-rate ---------------------------------------------------------------------------------------------- - 2020-09-02 09:42:02 demo.MathGame primeFactors 3 0 3 0.06 100.00% + 2020-09-02 09:42:02 demo.MathGame primeFactors 3 0 3 0.06 100.00% - timestamp class method total success fail avg-rt(ms) fail-rate + timestamp class method total success fail avg-rt(ms) fail-rate ---------------------------------------------------------------------------------------------- - 2020-09-02 09:42:07 demo.MathGame primeFactors 2 0 2 0.06 100.00% + 2020-09-02 09:42:07 demo.MathGame primeFactors 2 0 2 0.06 100.00% - timestamp class method total success fail avg-rt(ms) fail-rate + timestamp class method total success fail avg-rt(ms) fail-rate ---------------------------------------------------------------------------------------------- - 2020-09-02 09:42:12 demo.MathGame primeFactors 1 0 1 0.05 100.00% + 2020-09-02 09:42:12 demo.MathGame primeFactors 1 0 1 0.05 100.00% - timestamp class method total success fail avg-rt(ms) fail-rate + timestamp class method total success fail avg-rt(ms) fail-rate ---------------------------------------------------------------------------------------------- - 2020-09-02 09:42:17 demo.MathGame primeFactors 2 0 2 0.10 100.00% + 2020-09-02 09:42:17 demo.MathGame primeFactors 2 0 2 0.10 100.00% ``` - diff --git a/site/src/site/sphinx/en/ognl.md b/site-vuepress/docs/en/doc/ognl.md similarity index 71% rename from site/src/site/sphinx/en/ognl.md rename to site-vuepress/docs/en/doc/ognl.md index f6095534a..d9d13ca6b 100644 --- a/site/src/site/sphinx/en/ognl.md +++ b/site-vuepress/docs/en/doc/ognl.md @@ -1,26 +1,26 @@ -ognl -=== +# ognl [`ognl` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=command-ognl) -> Execute ognl expression. +::: tip +Execute ognl expression. +::: Since 3.0.5. ### Parameters -|Name|Specification| -|---:|:---| -|*express*|expression to be executed| -|`[c:]`| The hashcode of the ClassLoader that executes the expression, default ClassLoader is SystemClassLoader. | -|`[classLoaderClass:]`| The class name of the ClassLoader that executes the expression. | -|[x]|Expand level of object (1 by default).| - +| Name | Specification | +| --------------------: | :------------------------------------------------------------------------------------------------------ | +| _express_ | expression to be executed | +| `[c:]` | The hashcode of the ClassLoader that executes the expression, default ClassLoader is SystemClassLoader. | +| `[classLoaderClass:]` | The class name of the ClassLoader that executes the expression. | +| [x] | Expand level of object (1 by default). | ### Usage -* [Special usages](https://github.com/alibaba/arthas/issues/71) -* [OGNL official guide](https://commons.apache.org/proper/commons-ognl/language-guide.html) +- [Special usages](https://github.com/alibaba/arthas/issues/71) +- [OGNL official guide](https://commons.apache.org/proper/commons-ognl/language-guide.html) Call static method: @@ -52,16 +52,15 @@ $ ognl '@demo.MathGame@random' ] ``` - -Specify ClassLoader by hashcode: +Specify ClassLoader by hashcode: ```bash $ classloader -t -+-BootstrapClassLoader -+-jdk.internal.loader.ClassLoaders$PlatformClassLoader@301ec38b - +-com.taobao.arthas.agent.ArthasClassloader@472067c7 - +-jdk.internal.loader.ClassLoaders$AppClassLoader@4b85612c - +-org.springframework.boot.loader.LaunchedURLClassLoader@7f9a81e8 ++-BootstrapClassLoader ++-jdk.internal.loader.ClassLoaders$PlatformClassLoader@301ec38b + +-com.taobao.arthas.agent.ArthasClassloader@472067c7 + +-jdk.internal.loader.ClassLoaders$AppClassLoader@4b85612c + +-org.springframework.boot.loader.LaunchedURLClassLoader@7f9a81e8 $ ognl -c 7f9a81e8 @org.springframework.boot.SpringApplication@logger @Slf4jLocationAwareLog[ @@ -69,8 +68,9 @@ $ ognl -c 7f9a81e8 @org.springframework.boot.SpringApplication@logger name=@String[org.springframework.boot.SpringApplication], logger=@Logger[Logger[org.springframework.boot.SpringApplication]], ] -$ +$ ``` + Note that the hashcode changes, you need to check the current ClassLoader information first, and extract the hashcode corresponding to the ClassLoader. For ClassLoader with only unique instance, it can be specified by class name, which is more convenient to use: @@ -92,4 +92,4 @@ $ ognl '#value1=@System@getProperty("java.home"), #value2=@System@getProperty("j @String[/opt/java/8.0.181-zulu/jre], @String[OpenJDK Runtime Environment], ] -``` \ No newline at end of file +``` diff --git a/site/src/site/sphinx/en/options.md b/site-vuepress/docs/en/doc/options.md similarity index 62% rename from site/src/site/sphinx/en/options.md rename to site-vuepress/docs/en/doc/options.md index 85eef00f3..2f985e5a2 100644 --- a/site/src/site/sphinx/en/options.md +++ b/site-vuepress/docs/en/doc/options.md @@ -1,25 +1,26 @@ -options -=== +# options [`options` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-options) -> Global options - -|Name| Default Value | Description | -| ------------------------- | ----- | ---------------------------------------- | -| unsafe | false | whether to enhance to system-level class. Use it with caution since JVM may hang| -| dump | false | whether to dump enhanced class to the external files. If it's on, enhanced class will be dumped into `/${application dir}/arthas-class-dump/`, the specific output path will be output in the console | -| batch-re-transform | true | whether to re-transform matched classes in batch| -| json-format | false | whether to output in JSON format| -| disable-sub-class | false | whether to enable matching child classes. The default value is `true`. If exact match is desire, turn off this flag| -| support-default-method | true | whether to enable matching default method in interface. The default value is `true`. Refer to [#1105](https://github.com/alibaba/arthas/issues/1105) | -| save-result | false | whether to save execution result. All execution results will be saved to `~/logs/arthas-cache/result.log` when it's turned on| -| job-timeout | 1d | default timeout for background jobs. Background job will be terminated once it's timed out (i.e. 1d, 2h, 3m, 25s)| print-parent-fields | true | This option enables print files in parent class, default value true.| -| verbose | false | This option enables print verbose information| -| strict | true | whether to enable strict mode | - +::: tip +Global options +::: + +| Name | Default Value | Description | +| ---------------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ---- | -------------------------------------------------------------------- | +| unsafe | false | whether to enhance to system-level class. Use it with caution since JVM may hang | +| dump | false | whether to dump enhanced class to the external files. If it's on, enhanced class will be dumped into `/${application dir}/arthas-class-dump/`, the specific output path will be output in the console | +| batch-re-transform | true | whether to re-transform matched classes in batch | +| json-format | false | whether to output in JSON format | +| disable-sub-class | false | whether to enable matching child classes. The default value is `true`. If exact match is desire, turn off this flag | +| support-default-method | true | whether to enable matching default method in interface. The default value is `true`. Refer to [#1105](https://github.com/alibaba/arthas/issues/1105) | +| save-result | false | whether to save execution result. All execution results will be saved to `~/logs/arthas-cache/result.log` when it's turned on | +| job-timeout | 1d | default timeout for background jobs. Background job will be terminated once it's timed out (i.e. 1d, 2h, 3m, 25s) | print-parent-fields | true | This option enables print files in parent class, default value true. | +| verbose | false | This option enables print verbose information | +| strict | true | whether to enable strict mode | ### View all options + ```bash $ options LEVEL TYPE NAME VALUE SUMMARY DESCRIPTION @@ -62,10 +63,8 @@ $ options false` ``` - ### Get special option value - ``` $ options json-format LEVEL TYPE NAME VALUE SUMMARY DESCRIPTION @@ -75,16 +74,18 @@ $ options json-format ect output ted. ``` -> By default, `json-format` is false. When set `json-format` to true, commands like `wathc`/`tt` will print result with `json` format. +::: tip +By default, `json-format` is false. When set `json-format` to true, commands like `wathc`/`tt` will print result with `json` format. +::: ### Set special option value For example, to enable saving command execution result, input the command below: ``` -$ options save-result true - NAME BEFORE-VALUE AFTER-VALUE ----------------------------------------- +$ options save-result true + NAME BEFORE-VALUE AFTER-VALUE +---------------------------------------- save-result false true ``` @@ -105,10 +106,11 @@ Press Q or Ctrl+C to abort. Affect(class count: 1 , method count: 1) cost in 61 ms, listenerId: 1 ``` - ### Turn off strict mode, allow setting object properties in ognl expressions -> since 3.6.0 +::: tip +since 3.6.0 +::: For new users, there may be misuses when writing ognl expressions. @@ -127,4 +129,4 @@ watch failed, condition is: target.illegalArgumentCount=1, express is: target, B If the user want to change the object properties in the `ognl` expression, you can execute `options strict false` to turn off the `strict` mode. -* For more information, please refer to: https://github.com/alibaba/arthas/issues/2128 \ No newline at end of file +- For more information, please refer to: https://github.com/alibaba/arthas/issues/2128 diff --git a/site/src/site/sphinx/en/perfcounter.md b/site-vuepress/docs/en/doc/perfcounter.md similarity index 94% rename from site/src/site/sphinx/en/perfcounter.md rename to site-vuepress/docs/en/doc/perfcounter.md index 14ef691ce..f72c77852 100644 --- a/site/src/site/sphinx/en/perfcounter.md +++ b/site-vuepress/docs/en/doc/perfcounter.md @@ -1,9 +1,10 @@ -perfcounter -=== +# perfcounter [`perfcounter` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-perfcounter) -> Check the current JVM Perf Counter information. +::: tip +Check the current JVM Perf Counter information. +::: ### Usage @@ -39,4 +40,4 @@ If the information is not printed, when the application starts, add the followin ``` --add-opens java.base/jdk.internal.perf=ALL-UNNAMED --add-exports java.base/jdk.internal.perf=ALL-UNNAMED -``` \ No newline at end of file +``` diff --git a/site/src/site/sphinx/en/profiler.md b/site-vuepress/docs/en/doc/profiler.md similarity index 71% rename from site/src/site/sphinx/en/profiler.md rename to site-vuepress/docs/en/doc/profiler.md index 94296f230..554f78398 100644 --- a/site/src/site/sphinx/en/profiler.md +++ b/site-vuepress/docs/en/doc/profiler.md @@ -1,9 +1,10 @@ -profiler -=== +# profiler [`profiler` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-profiler) -> Generate a flame graph using [async-profiler](https://github.com/jvm-profiling-tools/async-profiler) +::: tip +Generate a flame graph using [async-profiler](https://github.com/jvm-profiling-tools/async-profiler) +::: The `profiler` command supports generate flame graph for application hotspots. @@ -11,14 +12,14 @@ The basic usage of the `profiler` command is `profiler action [actionArg]` ### Supported Options -|Name|Specification| -|---:|:---| -|*action*|Action to execute| -|*actionArg*|Attribute name pattern| -|[i:]|sampling interval in ns (default: 10'000'000, i.e. 10 ms)| -|[f:]|dump output to specified directory| -|[d:]|run profiling for specified seconds| -|[e:]|which event to trace (cpu, alloc, lock, cache-misses etc.), default value is cpu| +| Name | Specification | +| ----------: | :------------------------------------------------------------------------------- | +| _action_ | Action to execute | +| _actionArg_ | Attribute name pattern | +| [i:] | sampling interval in ns (default: 10'000'000, i.e. 10 ms) | +| [f:] | dump output to specified directory | +| [d:] | run profiling for specified seconds | +| [e:] | which event to trace (cpu, alloc, lock, cache-misses etc.), default value is cpu | ### Start profiler @@ -27,8 +28,9 @@ $ profiler start Started [cpu] profiling ``` -> By default, the sample event is `cpu`. Can be specified with the `--event` parameter. - +::: tip +By default, the sample event is `cpu`. Can be specified with the `--event` parameter. +::: ### Get the number of samples collected @@ -64,13 +66,15 @@ Or use the file name name format in the `--file` parameter. For example, `--file By default, arthas uses port 3658, which can be opened: [http://localhost:3658/arthas-output/](http://localhost:3658/arthas-output/) View the `arthas-output` directory below Profiler results: -![](_static/arthas-output.jpg) +![](/images/arthas-output.jpg) Click to view specific results: -![](_static/arthas-output-svg.jpg) +![](/images/arthas-output-svg.jpg) -> If using the chrome browser, may need to be refreshed multiple times. +::: tip +If using the chrome browser, may need to be refreshed multiple times. +::: ### Profiler supported events @@ -121,7 +125,6 @@ You can use the `--event` parameter to specify the event to sample, such as samp $ profiler start --event alloc ``` - ### Resume sampling ```bash @@ -133,10 +136,9 @@ The difference between `start` and `resume` is: `start` is the new start samplin You can verify the number of samples by executing `profiler getSamples`. - ### Use `execute` action to execute complex commands -For example, start sampling: +For example, start sampling: ```bash profiler execute 'start,framebuf=5000000' @@ -157,7 +159,6 @@ $ profiler actions Supported Actions: [resume, dumpCollapsed, getSamples, start, list, execute, version, stop, load, dumpFlat, actions, dumpTraces, status] ``` - ### View version ```bash @@ -168,7 +169,9 @@ Copyright 2019 Andrei Pangin ### Configure framebuf option -> If you encounter `[frame_buffer_overflow]` in the generated result, you need to increase the framebuf (the default value is 1'000'000), which can be configured explicitly, such as: +::: tip +you encounter `[frame_buffer_overflow]` in the generated result, you need to increase the framebuf (the default value is 1'000'000), which can be configured explicitly, such as: +::: ```bash profiler start --framebuf 5000000 @@ -184,7 +187,6 @@ profiler start --include'java/*' --include'demo/*' --exclude'*Unsafe.park*' > Both include/exclude support setting multiple values, but need to be configured at the end of the command line. - ### Specify execution time For example, if you want the profiler to automatically end after 300 seconds, you can specify it with the `-d`/`--duration` parameter: @@ -203,16 +205,14 @@ profiler start --file /tmp/test.jfr The `file` parameter supports some variables: -* Timestamp: `--file /tmp/test-%t.jfr` -* Process ID: `--file /tmp/test-%p.jfr` - +- Timestamp: `--file /tmp/test-%t.jfr` +- Process ID: `--file /tmp/test-%p.jfr` The generated results can be viewed with tools that support the jfr format. such as: -* JDK Mission Control: https://github.com/openjdk/jmc -* JProfiler: https://github.com/alibaba/arthas/issues/1416 - +- JDK Mission Control: https://github.com/openjdk/jmc +- JProfiler: https://github.com/alibaba/arthas/issues/1416 ### The 'unknown' in profiler result -* https://github.com/jvm-profiling-tools/async-profiler/discussions/409 \ No newline at end of file +- https://github.com/jvm-profiling-tools/async-profiler/discussions/409 diff --git a/site/src/site/sphinx/en/pwd.md b/site-vuepress/docs/en/doc/pwd.md similarity index 69% rename from site/src/site/sphinx/en/pwd.md rename to site-vuepress/docs/en/doc/pwd.md index a5ac649ad..022e56ea5 100644 --- a/site/src/site/sphinx/en/pwd.md +++ b/site-vuepress/docs/en/doc/pwd.md @@ -1,11 +1,11 @@ -pwd -=== +# pwd [`pwd` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-pwd) -> Return working directory name - +::: tip +Return working directory name +::: ```bash $ pwd -``` \ No newline at end of file +``` diff --git a/site/src/site/sphinx/en/quick-start.md b/site-vuepress/docs/en/doc/quick-start.md similarity index 97% rename from site/src/site/sphinx/en/quick-start.md rename to site-vuepress/docs/en/doc/quick-start.md index cab86a0b8..f8f5ff334 100644 --- a/site/src/site/sphinx/en/quick-start.md +++ b/site-vuepress/docs/en/doc/quick-start.md @@ -1,5 +1,4 @@ -Quick Start -=========== +# Quick Start ## 1. Start math-game @@ -23,9 +22,9 @@ curl -O https://arthas.aliyun.com/arthas-boot.jar java -jar arthas-boot.jar ``` -* The user to run this command *MUST* have the same privilege as the owner of the target process, as a simple example you can try the following command if the target process is managed by user `admin`: `sudo su admin && java -jar arthas-boot.jar` or `sudo -u admin -EH java -jar arthas-boot.jar` -* If you cannot be able to attach to the target process, please check the logs under `~/logs/arthas` for troubleshooting. -* `java -jar arthas-boot.jar -h` print usage. +- The user to run this command _MUST_ have the same privilege as the owner of the target process, as a simple example you can try the following command if the target process is managed by user `admin`: `sudo su admin && java -jar arthas-boot.jar` or `sudo -u admin -EH java -jar arthas-boot.jar` +- If you cannot be able to attach to the target process, please check the logs under `~/logs/arthas` for troubleshooting. +- `java -jar arthas-boot.jar -h` print usage. Select the target Java process to attach: diff --git a/site-vuepress/docs/en/doc/quit.md b/site-vuepress/docs/en/doc/quit.md new file mode 100644 index 000000000..8d92f91c6 --- /dev/null +++ b/site-vuepress/docs/en/doc/quit.md @@ -0,0 +1,7 @@ +# quit + +exit the current Arthas client without affecting other clients. equals **exit**、**logout**、**q** command. + +::: tip +just exit Arthas client,it means Arthas server is not closed,so the changes you do will not be reseted. +::: diff --git a/site-vuepress/docs/en/doc/redefine.md b/site-vuepress/docs/en/doc/redefine.md new file mode 100644 index 000000000..42c33716e --- /dev/null +++ b/site-vuepress/docs/en/doc/redefine.md @@ -0,0 +1,119 @@ +# redefine + +::: tip +Recommend to use the [retransform](retransform.md) command. +::: + +[`mc-redefine` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=command-mc-redefine) + +::: tip +Load the external `*.class` files to re-define the loaded classes in JVM. +::: + +Reference: [Instrumentation#redefineClasses](https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/Instrumentation.html#redefineClasses-java.lang.instrument.ClassDefinition...-) + +### Frequently asked questions + +::: tip +Recommend to use the [retransform](retransform.md) command. +::: + +- The class of `redefine` cannot modify, add or delete the field and method of the class, including method parameters, method names and return values. + +- If `mc` fails, you can compile the class file in the local development environment, upload it to the target system, and use `redefine` to hot load the class. + +- At present, `redefine` conflicts with `watch / trace / jad / tt` commands. Reimplementing `redefine` function in the future will solve this problem. + +::: warning +Notes: Re-defined classes cannot be restored. There are chances that redefining may fail due to some reasons, for example: there's new field introduced in the new version of the class, pls. refer to JDK's documentation for the limitations. +::: + +::: tip +The `reset` command is not valid for classes that have been processed by `redefine`. If you want to reset, you need `redefine` the original bytecode. +::: + +::: tip +The `redefine` command will conflict with the `jad`/`watch`/`trace`/`monitor`/`tt` commands. After executing `redefine`, if you execute the above mentioned command, the bytecode of the class will be reset. +The reason is that in the JDK `redefine` and `retransform` are different mechanisms. When two mechanisms are both used to update the bytecode, only the last modified will take effect. +::: + +### Options + +| Name | Specification | +| --------------------: | :-------------------------------------------------------------- | +| `[c:]` | hashcode of the class loader | +| `[classLoaderClass:]` | The class name of the ClassLoader that executes the expression. | + +### Usage + +```bash +redefine /tmp/Test.class +redefine -c 327a647b /tmp/Test.class /tmp/Test\$Inner.class +redefine --classLoaderClass sun.misc.Launcher$AppClassLoader /tmp/Test.class /tmp/Test\$Inner.class +``` + +### Use with the jad/mc command + +```bash +jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java + +mc /tmp/UserController.java -d /tmp + +redefine /tmp/com/example/demo/arthas/user/UserController.class +``` + +- Use `jad` command to decompile bytecode, and then you can use other editors, such as vim to modify the source code. +- `mc` command to compile the modified code +- Load new bytecode with `redefine` command + +### Tips for uploading .class files to the server + +The `mc` command may fail. You can modify the code locally, compile it, and upload it to the server. Some servers do not allow direct uploading files, you can use the `base64` command to bypass. + +1. Convert the `.class` file to base64 first, then save it as result.txt + + ```bash + Base64 < Test.class > result.txt + ``` + +2. Login the server, create and edit `result.txt`, copy the local content, paste and save + +3. Restore `result.txt` on the server to `.class` + + ``` + Base64 -d < result.txt > Test.class + ``` + +4. Use the md5 command to verify that the `.class` files are consistent. + +### Restrictions of the redefine command + +- New field/method is not allowed +- The function that is running, no exit can not take effect, such as the new `System.out.println` added below, only the `run()` function will take effect. + +```java +public class MathGame { + public static void main(String[] args) throws InterruptedException { + MathGame game = new MathGame(); + while (true) { + game.run(); + TimeUnit.SECONDS.sleep(1); + // This doesn't work because the code keeps running in while + System.out.println("in loop"); + } + } + + public void run() throws InterruptedException { + // This works because the run() function ends completely every time + System.out.println("call run()"); + try { + int number = random.nextInt(); + List primeFactors = primeFactors(number); + print(number, primeFactors); + + } catch (Exception e) { + System.out.println(String.format("illegalArgumentCount:%3d, ", illegalArgumentCount) + e.getMessage()); + } + } +} +``` diff --git a/site-vuepress/docs/en/doc/release-notes.md b/site-vuepress/docs/en/doc/release-notes.md new file mode 100644 index 000000000..c8a77ae73 --- /dev/null +++ b/site-vuepress/docs/en/doc/release-notes.md @@ -0,0 +1,122 @@ +# Release Notes + +## v3.1.1 + +- [https://github.com/alibaba/arthas/releases/tag/arthas-all-3.1.1](https://github.com/alibaba/arthas/releases/tag/arthas-all-3.1.1) + +## v3.1.0 + +- [https://github.com/alibaba/arthas/releases/tag/3.1.0](https://github.com/alibaba/arthas/releases/tag/3.1.0) + +## v3.0.5 + +- [https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.5](https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.5) + +## v3.0.4 + +- [https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.4](https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.4) + +## v2017-11-03 + +- [improvement] add [`getstatic`](getstatic.md) +- [bug] fix Arthas class loader logs loading issues +- [improvement] introduce [OGNL](https://en.wikipedia.org/wiki/OGNL) to customize `classloader` to invoke static methods +- [improvement] optimise `termd` uppercase output performance +- [improvement] `classloader` compile in class loader category by default +- [bug] fix `wc` counting issue +- [improvement] disable certain JDK classes e.g. `Classloader`, `Method`, `Integer` and the lik +- [improvement] quit directly when encountering incorrect [OGNL](https://en.wikipedia.org/wiki/OGNL) expression +- [bug] fix `pipe` issues +- [improvement] optimize command re-direct features using asynchronous log +- [improvement] [`trace`](trace.md) can filter JDK method calls + +## v2017-09-22 + +- [improvement] improve the error message when starting agent and server fails +- [bug] fix some asynchronous issues + +## v2017-09-11 + +- [improvement] [`async`](async.md) supported +- [improvement] optimize [`jad`](jad.md) support JDK 8 and inner class +- [bug] fix Chinese encoding issues + +## v2017-05-11 + +- [improvement] [`tt`](tt.md) investigating/recording level one to avoid too much performance overhead +- [bug] fix Chinese characters can not be presented issue + +## v2017-05-12 + +- Arthas 3.0 release :confetti_ball: + +## v2016-12-09 + +- [feature] [`as.sh`](https://github.com/alibaba/arthas/blob/master/bin/as.sh) support `-h` to print help info +- [bug] [#121] fix leftover temp files causing Arthas cannot start issue +- [bug] [#123] fix `attach/shutdown` repeatedly causing Arthas classloader leakage issue +- [improvement] make the help info more readable +- [bug] [#126] fix the documents links issues +- [bug] [#122] fix the [`classloader`](classloader.md) filtering out `sun.reflect.DelegatingClassLoader` issue +- [bug] [#129] fix [`classloader`](classloader.md) presenting structure issues +- [improvement] [#125] make the Arthas log output more readable +- [improvement] [#96] [`sc`](sc.md) and more commands are supporting format as `com/taobao/xxx/TestClass` +- [bug] [#124] fix the negative values of [`trace`](trace.md) +- [improvement] [#128] the output of [`tt`](tt.md) will auto-expand now +- [bug] [#130] providing more meaningful error messages when port conflicts +- [bug] [#98] fix Arthas starting issue: when updating/downloading failed, Arthas will fail to start +- [bug] [#139] fix agent attaching fails under some scenarios issues +- [improvement] [#156] delay `jd-core-java` initialization to avoid Arthas starting failure +- [bug] avoid thread names duplicate issue +- [improvement] [#150] filtering by total time cost in [`trace`](trace.md) +- [bug] fix [`sc`](sc.md) `NPE` issue when searching `SystemClassloader` +- [bug] [#180] fix attach fails issues: attaching succeed at the first time, delete the Arthas installer, re-compile and package => attaching fails + +## v2016-06-07 + +- [bug] fix NPE when loading `spy` as resource +- [improvement] locating the blocking thread +- [improvement] print out thread in name order +- [improvement] specify the refreshing interval when checking topN busiest threads + +## v2016-04-08 + +- [feature] specify refreshing interval and execution times in [`dashboard`](dashboard.md) +- [feature] log the command execution result +- [feature] speed up the booting and attaching while the first attaching is even quicker by 100% than before +- [feature] batch supported; script supported +- [feature] interactive mode used in Arthas +- [feature] inheritance relation included in class searching; global option `disable-sub-class` can be used to turn it off +- [feature] colorful and plain text modes both supported +- [improvement] merge `exit` and `quit` commands +- [improvement] help info enclosed with wiki links +- [improvement] optimize [`watch`](watch.md) using flow for better UX +- [improvement] add examples to [`thread`](thread.md) +- [improvement] auto-completion ignores character case +- [improvement] make the UI more beautiful/friendly +- [bug] fix [`trace`](trace.md) printing too much encountering loop issues +- [bug] fix [`trace`](trace.md) node twisting issues when method throwing exceptions +- [bug] fix injected/enhanced `BootstrapClassLoader` cannot locate `spy` issues + +## v2016-03-07 + +- [feature] checking the topN thread and related stack traces +- [bug] fix Arthas starting failure in OpenJdk issues (requiring to reinstall [as.sh](https://github.com/alibaba/arthas/blob/master/bin/as.sh)) +- [improvement] optimize UX + +## v2016-01-18 + +- [improvement] optimise [`jad`](jad.md); dump memory byte array in real time; using `jd-core-java` to decompile; line number presented; +- [bug] fix checking/re-producing issues when [`tt`](tt.md) is watching thread-context related methods invoking + +## v2016-01-08 + +- [bug] jad NPE +- [bug] watch/monitor NPE +- [bug] wrong escaping issues +- [bug] wrong statistics +- [bug] [`sc`](sc.md) checking internal structure issues + +## v2015-12-29 + +- Arthas 2.0 Beta :boom:! diff --git a/site/src/site/sphinx/en/reset.md b/site-vuepress/docs/en/doc/reset.md similarity index 90% rename from site/src/site/sphinx/en/reset.md rename to site-vuepress/docs/en/doc/reset.md index c339a5d96..c4b08c5f6 100644 --- a/site/src/site/sphinx/en/reset.md +++ b/site-vuepress/docs/en/doc/reset.md @@ -1,9 +1,10 @@ -reset -=== +# reset [`reset` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-reset) -> Reset all classes that have been enhanced by Arthas. These enhanced classes will also be reset when Arthas server is `stop`. +::: tip +Reset all classes that have been enhanced by Arthas. These enhanced classes will also be reset when Arthas server is `stop`. +::: ### Usage diff --git a/site/src/site/sphinx/en/retransform.md b/site-vuepress/docs/en/doc/retransform.md similarity index 58% rename from site/src/site/sphinx/en/retransform.md rename to site-vuepress/docs/en/doc/retransform.md index 7af430b50..69a0bd325 100644 --- a/site/src/site/sphinx/en/retransform.md +++ b/site-vuepress/docs/en/doc/retransform.md @@ -1,9 +1,10 @@ -retransform -======== +# retransform [`mc-retransform` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=command-mc-retransform) -> Load the external `*.class` files to retransform the loaded classes in JVM. +::: tip +Load the external `*.class` files to retransform the loaded classes in JVM. +::: Reference: [Instrumentation#retransformClasses](https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/Instrumentation.html#retransformClasses-java.lang.Class...-) @@ -19,7 +20,7 @@ Reference: [Instrumentation#retransformClasses](https://docs.oracle.com/javase/8 retransform --classLoaderClass 'sun.misc.Launcher$AppClassLoader' /tmp/Test.class ``` -### retransform the specified .class file +### retransform the specified .class file ```bash $ retransform /tmp/MathGame.class @@ -29,7 +30,9 @@ demo.MathGame Load the specified .class file, then parse out the class name, and then retransform the corresponding class loaded in the jvm. Every time a `.class` file is loaded, a retransform entry is recorded. -> If retransform is executed multiple times to load the same class file, there will be multiple retransform entries. +::: tip +If retransform is executed multiple times to load the same class file, there will be multiple retransform entries. +::: ### View retransform entry @@ -39,7 +42,8 @@ Id ClassName TransformCount LoaderHash LoaderClassName 1 demo.MathGame 1 null null ``` -* TransformCount counts the times of attempts to return the .class file corresponding to the entry in the ClassFileTransformer#transform method, but it does not mean that the transform must be successful. +- TransformCount counts the times of attempts to return the .class file corresponding to the entry in the ClassFileTransformer#transform method, but it does not mean that the transform must be successful. + ### Delete the specified retransform entry Need to specify id: @@ -62,16 +66,20 @@ retransform success, size: 1, classes: demo.MathGame ``` -> Note: For the same class, when there are multiple retransform entries, if retransform is explicitly triggered, the entry added last will take effect (the one with the largest id). +::: warning +Note: For the same class, when there are multiple retransform entries, if retransform is explicitly triggered, the entry added last will take effect (the one with the largest id). +::: ### Eliminate the influence of retransform If you want to eliminate the impact after performing retransform on a class, you need to: -* Delete the retransform entry corresponding to this class -* Re-trigger retransform +- Delete the retransform entry corresponding to this class +- Re-trigger retransform -> If you do not clear all retransform entries and trigger retransform again, the retransformed classes will still take effect when arthas stop. +::: tip +If you do not clear all retransform entries and trigger retransform again, the retransformed classes will still take effect when arthas stop. +::: ### Use with the jad/mc command @@ -83,9 +91,9 @@ mc /tmp/UserController.java -d /tmp retransform /tmp/com/example/demo/arthas/user/UserController.class ``` -* Use `jad` command to decompile bytecode, and then you can use other editors, such as vim to modify the source code. -* `mc` command to compile the modified code -* Load new bytecode with `retransform` command +- Use `jad` command to decompile bytecode, and then you can use other editors, such as vim to modify the source code. +- `mc` command to compile the modified code +- Load new bytecode with `retransform` command ### Tips for uploading .class files to the server @@ -93,48 +101,48 @@ The `mc` command may fail. You can modify the code locally, compile it, and uplo 1. Convert the `.class` file to base64 first, then save it as result.txt - ```bash - Base64 < Test.class > result.txt - ``` + ```bash + Base64 < Test.class > result.txt + ``` 2. Login the server, create and edit `result.txt`, copy the local content, paste and save 3. Restore `result.txt` on the server to `.class` - ``` - Base64 -d < result.txt > Test.class - ``` + ``` + Base64 -d < result.txt > Test.class + ``` 4. Use the md5 command to verify that the `.class` files are consistent. - ### Restrictions of the retransform command -* New field/method is not allowed -* The function that is running, no exit can not take effect, such as the new `System.out.println` added below, only the `run()` function will take effect. - - ```java - public class MathGame { - public static void main(String[] args) throws InterruptedException { - MathGame game = new MathGame(); - while (true) { - game.run(); - TimeUnit.SECONDS.sleep(1); - // This doesn't work because the code keeps running in while - System.out.println("in loop"); - } +- New field/method is not allowed +- The function that is running, no exit can not take effect, such as the new `System.out.println` added below, only the `run()` function will take effect. + +```java +public class MathGame { + public static void main(String[] args) throws InterruptedException { + MathGame game = new MathGame(); + while (true) { + game.run(); + TimeUnit.SECONDS.sleep(1); + // This doesn't work because the code keeps running in while + System.out.println("in loop"); } - - public void run() throws InterruptedException { - // This works because the run() function ends completely every time - System.out.println("call run()"); - try { - int number = random.nextInt(); - List primeFactors = primeFactors(number); - print(number, primeFactors); - - } catch (Exception e) { - System.out.println(String.format("illegalArgumentCount:%3d, ", illegalArgumentCount) + e.getMessage()); - } + } + + public void run() throws InterruptedException { + // This works because the run() function ends completely every time + System.out.println("call run()"); + try { + int number = random.nextInt(); + List primeFactors = primeFactors(number); + print(number, primeFactors); + + } catch (Exception e) { + System.out.println(String.format("illegalArgumentCount:%3d, ", illegalArgumentCount) + e.getMessage()); } -``` \ No newline at end of file + } +} +``` diff --git a/site/src/site/sphinx/en/save-log.md b/site-vuepress/docs/en/doc/save-log.md similarity index 53% rename from site/src/site/sphinx/en/save-log.md rename to site-vuepress/docs/en/doc/save-log.md index e4b64de70..9373284f8 100644 --- a/site/src/site/sphinx/en/save-log.md +++ b/site-vuepress/docs/en/doc/save-log.md @@ -1,25 +1,26 @@ -Log command outputs -=================== +# Log command outputs [`Log command outputs` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=case-save-log) -> Log command outputs for later analysis +::: tip +Log command outputs for later analysis +::: -* By default, this behavior is turned off. To enable it, execute the command below: +- By default, this behavior is turned off. To enable it, execute the command below: - ```bash - $ options save-result true - NAME BEFORE-VALUE AFTER-VALUE - ---------------------------------------- - save-result false true - Affect(row-cnt:1) cost in 3 ms. - ``` + ```bash + $ options save-result true + NAME BEFORE-VALUE AFTER-VALUE + ---------------------------------------- + save-result false true + Affect(row-cnt:1) cost in 3 ms. + ``` - If the message above is output on the console, then this behavior is enabled successfully. - -* Log file path + If the message above is output on the console, then this behavior is enabled successfully. - The command execution result will be save in `{user.home}/logs/arthas-cache/result.log`. Pls. clean it up regularly to save disk space. +- Log file path + + The command execution result will be save in `{user.home}/logs/arthas-cache/result.log`. Pls. clean it up regularly to save disk space. ### Use asynchronous job to log @@ -31,6 +32,5 @@ cache location : /Users/zhuyong/logs/arthas-cache/28198/2 By doing this, the command will run at background asynchronously, and output the execution result into `~/logs/arthas-cache/{PID}/{JobId}`: -* The background job will continue to run even if the current session is disconnected. The default job timeout value is 1 day, use global '[options](options.md)' command to alternate it. -* The execution result will be output into the file asynchronously. Pls. note the behavior of this command is not controlled by `save-result` option from global [options](options.md). No matter `save-result` is set to `true` or not, this command will write into `~/logs/arthas-cache/{PID}/{JobId}` anyway, instead of into `~/logs/arthas-cache/result.log`. - +- The background job will continue to run even if the current session is disconnected. The default job timeout value is 1 day, use global '[options](options.md)' command to alternate it. +- The execution result will be output into the file asynchronously. Pls. note the behavior of this command is not controlled by `save-result` option from global [options](options.md). No matter `save-result` is set to `true` or not, this command will write into `~/logs/arthas-cache/{PID}/{JobId}` anyway, instead of into `~/logs/arthas-cache/result.log`. diff --git a/site-vuepress/docs/en/doc/sc.md b/site-vuepress/docs/en/doc/sc.md new file mode 100644 index 000000000..431a9923e --- /dev/null +++ b/site-vuepress/docs/en/doc/sc.md @@ -0,0 +1,107 @@ +# sc + +[`sc` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=command-sc) + +::: tip +Search classes loaded by JVM. +::: + +`sc` stands for search class. This command can search all possible classes loaded by JVM and show their information. The supported options are: `[d]`、`[E]`、`[f]` and `[x:]`. + +### Supported Options + +| Name | Specification | +| --------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| _class-pattern_ | pattern for the class name | +| _method-pattern_ | pattern for the method name | +| `[d]` | print the details of the current class, including its code source, class specification, its class loader and so on.
If a class is loaded by more than one class loader, then the class details will be printed several times | +| `[E]` | turn on regex match, the default behavior is wildcards match | +| `[f]` | print the fields info of the current class, MUST be used with `-d` together | +| `[x:]` | specify the depth of recursive traverse the static fields, the default value is '0' - equivalent to use `toString` to output | +| `[c:]` | The hash code of the special class's classLoader | +| `[classLoaderClass:]` | The class name of the ClassLoader that executes the expression. | +| `[n:]` | Maximum number of matching classes with details (100 by default) | + +::: tip +_class-patten_ supports full qualified class name, e.g. com.taobao.test.AAA and com/taobao/test/AAA. It also supports the format of 'com/taobao/test/AAA', so that it is convenient to directly copy class name from the exception stack trace without replacing '/' to '.'. +::: + +::: tip +`sc` turns on matching sub-class match by default, that is, `sc` will also search the sub classes of the target class too. If exact-match is desired, pls. use `options disable-sub-class true`. +::: + +### Usage + +- Wildcards match search + + ```bash + $ sc demo.* + demo.MathGame + Affect(row-cnt:1) cost in 55 ms. + ``` + +- View class details + + ```bash + $ sc -d demo.MathGame + class-info demo.MathGame + code-source /private/tmp/math-game.jar + name demo.MathGame + isInterface false + isAnnotation false + isEnum false + isAnonymousClass false + isArray false + isLocalClass false + isMemberClass false + isPrimitive false + isSynthetic false + simple-name MathGame + modifier public + annotation + interfaces + super-class +-java.lang.Object + class-loader +-sun.misc.Launcher$AppClassLoader@3d4eac69 + +-sun.misc.Launcher$ExtClassLoader@66350f69 + classLoaderHash 3d4eac69 + + Affect(row-cnt:1) cost in 875 ms. + ``` + +- View class fields + + ```bash + $ sc -d -f demo.MathGame + class-info demo.MathGame + code-source /private/tmp/math-game.jar + name demo.MathGame + isInterface false + isAnnotation false + isEnum false + isAnonymousClass false + isArray false + isLocalClass false + isMemberClass false + isPrimitive false + isSynthetic false + simple-name MathGame + modifier public + annotation + interfaces + super-class +-java.lang.Object + class-loader +-sun.misc.Launcher$AppClassLoader@3d4eac69 + +-sun.misc.Launcher$ExtClassLoader@66350f69 + classLoaderHash 3d4eac69 + fields modifierprivate,static + type java.util.Random + name random + value java.util.Random@522b4 + 08a + + modifierprivate + type int + name illegalArgumentCount + + + Affect(row-cnt:1) cost in 19 ms. + ``` diff --git a/site/src/site/sphinx/en/session.md b/site-vuepress/docs/en/doc/session.md similarity index 62% rename from site/src/site/sphinx/en/session.md rename to site-vuepress/docs/en/doc/session.md index 3597c76b2..c8bce31f4 100644 --- a/site/src/site/sphinx/en/session.md +++ b/site-vuepress/docs/en/doc/session.md @@ -1,13 +1,11 @@ -session -=== +# session examines the current session,show the current binded processId and the sessionId. +::: tip +if exits tunnel server,it will also show agentId、tunnelServerUrl、connected status. -> if exits tunnel server,it will also show agentId、tunnelServerUrl、connected status. -> -> if exits statUrl,it will also show statUrl. - - +if exits statUrl,it will also show statUrl. +::: ### Usage @@ -18,4 +16,3 @@ $ session JAVA_PID 14584 SESSION_ID c2073d3b-443a-4a9b-9249-0c5d24a5756c ``` - diff --git a/site/src/site/sphinx/en/sm.md b/site-vuepress/docs/en/doc/sm.md similarity index 68% rename from site/src/site/sphinx/en/sm.md rename to site-vuepress/docs/en/doc/sm.md index 47852adef..2e2c40003 100644 --- a/site/src/site/sphinx/en/sm.md +++ b/site-vuepress/docs/en/doc/sm.md @@ -1,24 +1,24 @@ -sm -== +# sm [`sm` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=command-sm) -> Search method from the loaded classes. +::: tip +Search method from the loaded classes. +::: `sm` stands for search method. This command can search and show method information from all loaded classes. `sm` can only view the methods declared on the target class, that is, methods from its parent classes are invisible. - ### Options -|Name|Specification| -|---:|:---| -|*class-pattern*|pattern for class name| -|*method-pattern*|pattern for method name| -|`[d]`|print the details of the method| -|`[E]`|turn on regex matching while the default mode is wildcard matching| -|`[c:]`|The hash code of the special class's classLoader| -|`[classLoaderClass:]`| The class name of the ClassLoader that executes the expression. | -|`[n:]`|Maximum number of matching classes with details (100 by default)| +| Name | Specification | +| --------------------: | :----------------------------------------------------------------- | +| _class-pattern_ | pattern for class name | +| _method-pattern_ | pattern for method name | +| `[d]` | print the details of the method | +| `[E]` | turn on regex matching while the default mode is wildcard matching | +| `[c:]` | The hash code of the special class's classLoader | +| `[classLoaderClass:]` | The class name of the ClassLoader that executes the expression. | +| `[n:]` | Maximum number of matching classes with details (100 by default) | ### Usage @@ -73,7 +73,6 @@ java.lang.String->intern Affect(row-cnt:44) cost in 1342 ms. ``` - View method `java.lang.String#toString` details: ```bash @@ -87,4 +86,4 @@ $ sm -d java.lang.String toString exceptions Affect(row-cnt:1) cost in 3 ms. -``` \ No newline at end of file +``` diff --git a/site/src/site/sphinx/en/spring-boot-starter.md b/site-vuepress/docs/en/doc/spring-boot-starter.md similarity index 79% rename from site/src/site/sphinx/en/spring-boot-starter.md rename to site-vuepress/docs/en/doc/spring-boot-starter.md index d4b711f02..3b0b2da99 100644 --- a/site/src/site/sphinx/en/spring-boot-starter.md +++ b/site-vuepress/docs/en/doc/spring-boot-starter.md @@ -1,7 +1,8 @@ -Arthas Spring Boot Starter -===== +# Arthas Spring Boot Starter -> Support spring boot 2 +::: tip +Support spring boot 2 +::: Latest Version: [View](https://search.maven.org/search?q=arthas-spring-boot-starter) @@ -17,7 +18,6 @@ Add maven dependency: When the application is started, spring will start arthas and attach its own process. - ### Configuration properties For example, by configuring the tunnel server for remote management. @@ -29,13 +29,17 @@ arthas.tunnel-server=ws://47.75.156.201:7777/ws All supported configuration: [Reference](https://github.com/alibaba/arthas/blob/master/arthas-spring-boot-starter/src/main/java/com/alibaba/arthas/spring/ArthasProperties.java) -> By default, arthas-spring-boot-starter will disable the `stop` command. +::: tip +By default, arthas-spring-boot-starter will disable the `stop` command. +::: Reference: [Arthas Properties](arthas-properties.md) ### View Endpoint Information -> Need to configure spring boot to expose endpoint: [Reference](https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#production-ready-endpoints). +::: tip +Need to configure spring boot to expose endpoint: [Reference](https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#production-ready-endpoints). +::: Assuming the endpoint port is 8080, it can be viewed via the following url. @@ -71,7 +75,7 @@ Non-Spring Boot applications can be used in the following ways. import com.taobao.arthas.agent.attach.ArthasAgent; public class ArthasAttachExample { - + public static void main(String[] args) { ArthasAgent.attach(); } @@ -79,7 +83,6 @@ public class ArthasAttachExample { } ``` - You can also configure properties: ```java @@ -89,4 +92,6 @@ You can also configure properties: ArthasAgent.attach(configMap); ``` -> Note that the configuration must be `camel case`, which is different from the `-` style of spring boot. Only the spring boot application supports both `camel case` and `-` style configuration. \ No newline at end of file +::: warning +Note that the configuration must be `camel case`, which is different from the `-` style of spring boot. Only the spring boot application supports both `camel case` and `-` style configuration. +::: diff --git a/site/src/site/sphinx/en/stack.md b/site-vuepress/docs/en/doc/stack.md similarity index 75% rename from site/src/site/sphinx/en/stack.md rename to site-vuepress/docs/en/doc/stack.md index 904f2aaea..59d07369e 100644 --- a/site/src/site/sphinx/en/stack.md +++ b/site-vuepress/docs/en/doc/stack.md @@ -1,29 +1,31 @@ -stack -===== +# stack [`stack` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-stack) -> Print out the full call stack of the current method. +::: tip +Print out the full call stack of the current method. +::: Most often we know one method gets called, but we have no idea on which code path gets executed or when the method gets called since there are so many code paths to the target method. The command `stack` comes to rescue in this difficult situation. ### Parameters -|Name|Specification| -|---:|:---| -|*class-pattern*|pattern for the class name| -|*method-pattern*|pattern for the method name| -|*condition-expression*|condition expression| -|`[E]`|turn on regex match, the default behavior is wildcard match| -|`[n:]`|execution times| +| Name | Specification | +| ---------------------: | :---------------------------------------------------------- | +| _class-pattern_ | pattern for the class name | +| _method-pattern_ | pattern for the method name | +| _condition-expression_ | condition expression | +| `[E]` | turn on regex match, the default behavior is wildcard match | +| `[n:]` | execution times | There's one thing worthy noting here is observation expression. The observation expression supports OGNL grammar, for example, you can come up a expression like this `"{params,returnObj}"`. All OGNL expressions are supported as long as they are legal to the grammar. Thanks for `advice`'s data structure, it is possible to observe from varieties of different angles. Inside `advice` parameter, all necessary information for notification can be found. Pls. refer to [core parameters in expression](advice-class.md) for more details. -* Pls. also refer to [https://github.com/alibaba/arthas/issues/71](https://github.com/alibaba/arthas/issues/71) for more advanced usage -* OGNL official site: [https://commons.apache.org/proper/commons-ognl/language-guide.html](https://commons.apache.org/proper/commons-ognl/language-guide.html) + +- Pls. also refer to [https://github.com/alibaba/arthas/issues/71](https://github.com/alibaba/arthas/issues/71) for more advanced usage +- OGNL official site: [https://commons.apache.org/proper/commons-ognl/language-guide.html](https://commons.apache.org/proper/commons-ognl/language-guide.html) ### Usage @@ -31,7 +33,6 @@ Pls. refer to [core parameters in expression](advice-class.md) for more details. Start `math-game` in [Quick Start](quick-start.md). - #### stack ```bash @@ -60,7 +61,6 @@ ts=2018-12-04 01:34:30;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun Command execution times exceed limit: 2, so command will exit. You can set it with -n option. ``` - #### Filtering by cost ```bash @@ -71,5 +71,3 @@ ts=2018-12-04 01:35:58;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun @demo.MathGame.run() at demo.MathGame.main(MathGame.java:16) ``` - - diff --git a/site/src/site/sphinx/en/start-arthas.md b/site-vuepress/docs/en/doc/start-arthas.md similarity index 82% rename from site/src/site/sphinx/en/start-arthas.md rename to site-vuepress/docs/en/doc/start-arthas.md index 482ba14a8..564fe4b34 100644 --- a/site/src/site/sphinx/en/start-arthas.md +++ b/site-vuepress/docs/en/doc/start-arthas.md @@ -1,5 +1,4 @@ -Start Arthas -===== +# Start Arthas ## Interactive Mode @@ -32,19 +31,19 @@ Startup script is as follows: ### Parameter Description -* *PID*: Target Java process ID (Make sure that the user executing the command has sufficient permissions to operate the target Java process.) -* *IP*: The address that Arthas Server listens on, the default value is `127.0.0.1`. Arthas allows multiple users to access simultaneously without interfering with each other. -* *PORT*: Arthas Server port,the default value is 3658 +- _PID_: Target Java process ID (Make sure that the user executing the command has sufficient permissions to operate the target Java process.) +- _IP_: The address that Arthas Server listens on, the default value is `127.0.0.1`. Arthas allows multiple users to access simultaneously without interfering with each other. +- _PORT_: Arthas Server port,the default value is 3658 ### Sample -* If IP and PORT are not specified, then the default values are 127.0.0.1 and 3658 +- If IP and PORT are not specified, then the default values are 127.0.0.1 and 3658 - > ./as.sh 12345 + > ./as.sh 12345 - Equivalent to: - - > ./as.sh 12356@127.0.0.1:3658 + Equivalent to: + + > ./as.sh 12356@127.0.0.1:3658 ### Remote Diagnosis @@ -53,7 +52,7 @@ After starting Arthas Server on the target Java process, users can use `telnet` ```bash telnet 192.168.1.119 3658 ``` - + ### sudo Support Usually online environment will only grant users privilege as low as possible, instead, all advanced operations are through sudo-list. Since `as.sh` script takes into account the current effective user, it is possible to run the script in the other rule, by specifying `-H` option like this: @@ -62,7 +61,6 @@ Usually online environment will only grant users privilege as low as possible, i sudo -u admin -H ./as.sh 12345 ``` - ### Windows Support Right now `as.bat` script supports one parameter only, which is: pid diff --git a/site/src/site/sphinx/en/stop.md b/site-vuepress/docs/en/doc/stop.md similarity index 56% rename from site/src/site/sphinx/en/stop.md rename to site-vuepress/docs/en/doc/stop.md index 84b3f71cc..86589bbec 100644 --- a/site/src/site/sphinx/en/stop.md +++ b/site-vuepress/docs/en/doc/stop.md @@ -1,7 +1,7 @@ -Stop -=== +# Stop terminates the Arthas server, all the Arthas clients connecting to this server will be disconnected. -> the class redefined by redefine command will not be reset. - +::: tip +the class redefined by redefine command will not be reset. +::: diff --git a/site/src/site/sphinx/en/sysenv.md b/site-vuepress/docs/en/doc/sysenv.md similarity index 94% rename from site/src/site/sphinx/en/sysenv.md rename to site-vuepress/docs/en/doc/sysenv.md index 8973a9a75..40962c1dd 100644 --- a/site/src/site/sphinx/en/sysenv.md +++ b/site-vuepress/docs/en/doc/sysenv.md @@ -1,9 +1,10 @@ -sysenv -======================= +# sysenv [`sysenv` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-sysenv) -> View the current JVM environment variables. +::: tip +View the current JVM environment variables. +::: ### Usage @@ -24,11 +25,10 @@ sysenv OPTIONS: -h, --help this help env name - ``` +``` #### View all environment variables - ``` $ sysenv KEY VALUE @@ -67,7 +67,9 @@ $ sysenv #### View individual environment variables -> Use `tab` for auto-completion +::: tip +Use `tab` for auto-completion +::: ``` $ sysenv USER diff --git a/site/src/site/sphinx/en/sysprop.md b/site-vuepress/docs/en/doc/sysprop.md similarity index 98% rename from site/src/site/sphinx/en/sysprop.md rename to site-vuepress/docs/en/doc/sysprop.md index c16999d65..ae614ff99 100644 --- a/site/src/site/sphinx/en/sysprop.md +++ b/site-vuepress/docs/en/doc/sysprop.md @@ -1,9 +1,10 @@ -sysprop -======= +# sysprop [`sysprop` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-sysprop) -> Examine the system properties from the target JVM +::: tip +Examine the system properties from the target JVM +::: ### Usage @@ -30,7 +31,6 @@ sysprop #### Check all properties - ``` $ sysprop KEY VALUE @@ -106,7 +106,9 @@ $ sysprop #### Check One Single Property -> Use `tab` for auto-completion +::: tip +Use `tab` for auto-completion +::: ```bash $ sysprop java.version diff --git a/site/src/site/sphinx/en/tee.md b/site-vuepress/docs/en/doc/tee.md similarity index 66% rename from site/src/site/sphinx/en/tee.md rename to site-vuepress/docs/en/doc/tee.md index 380eddf8f..c337240ad 100644 --- a/site/src/site/sphinx/en/tee.md +++ b/site-vuepress/docs/en/doc/tee.md @@ -1,12 +1,12 @@ -tee -=== +# tee [`tee` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-tee) -> Similar to the traditional `tee` command, it is used to read standard input data and output its contents into a file. - -> `tee` will read data from standard input device, output its content to standard output device, and save it as a file. +::: tip +Similar to the traditional `tee` command, it is used to read standard input data and output its contents into a file. +`tee` will read data from standard input device, output its content to standard output device, and save it as a file. +::: ``` USAGE: @@ -26,4 +26,4 @@ tee -a, --append Append to file -h, --help this help File path -``` \ No newline at end of file +``` diff --git a/site/src/site/sphinx/en/thread.md b/site-vuepress/docs/en/doc/thread.md similarity index 88% rename from site/src/site/sphinx/en/thread.md rename to site-vuepress/docs/en/doc/thread.md index 092a4f109..889862ed7 100644 --- a/site/src/site/sphinx/en/thread.md +++ b/site-vuepress/docs/en/doc/thread.md @@ -1,31 +1,33 @@ -thread -====== +# thread [`thread` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-thread) -> Check the basic info and stack trace of the target thread. +::: tip +Check the basic info and stack trace of the target thread. +::: ### Parameters -|Name|Specification| -|---:|:---| -|*id*|thread id in JVM| -|`[n:]`|the top n busiest threads with stack traces printed| -|`[b]`|locate the thread blocking the others| -|[i ``]|specify the interval to collect data to compute CPU ratios (ms)| -|[--all]|Show all matching threads| +| Name | Specification | +| ------------: | :-------------------------------------------------------------- | +| _id_ | thread id in JVM | +| `[n:]` | the top n busiest threads with stack traces printed | +| `[b]` | locate the thread blocking the others | +| [i ``] | specify the interval to collect data to compute CPU ratios (ms) | +| [--all] | Show all matching threads | -### How the CPU ratios are calculated? +### How the CPU ratios are calculated? -The cpu ratios here is similar to the thread `%CPU` of the linux command `top -H -p `. During a sampling interval, +The cpu ratios here is similar to the thread `%CPU` of the linux command `top -H -p `. During a sampling interval, the ratio of the incremental cpu time of each thread in the current JVM to the sampling interval time. -> Working principle description: -* Do the first sampling, get the CPU time of all threads ( by calling `java.lang.management.ThreadMXBean#getThreadCpuTime()` and -`sun.management.HotspotThreadMBean.getInternalThreadCpuTimes()` ) -* Sleep and wait for an interval (the default is 200ms, the interval can be specified by `-i`) -* Do the second sampling, get the CPU time of all threads, compare the two sampling data, and calculate the incremental CPU time of each thread -* `Thread CPU usage ratio` = `Thread increment CPU time` / `Sampling interval time` * 100% +#### Working principle description: + +- Do the first sampling, get the CPU time of all threads ( by calling `java.lang.management.ThreadMXBean#getThreadCpuTime()` and + `sun.management.HotspotThreadMBean.getInternalThreadCpuTimes()` ) +- Sleep and wait for an interval (the default is 200ms, the interval can be specified by `-i`) +- Do the second sampling, get the CPU time of all threads, compare the two sampling data, and calculate the incremental CPU time of each thread +- `Thread CPU usage ratio` = `Thread increment CPU time` / `Sampling interval time` \* 100% > Note: this operation consumes CPU time too (`getThreadCpuTime` is time-consuming), therefore it is possible to observe Arthas's thread appears in the list. To avoid this, try to increase sample interval, for example: 5000 ms.
@@ -61,18 +63,17 @@ $ thread -n 3 "VM Periodic Task Thread" [Internal] cpuUsage=0.07% deltaTime=0ms time=584ms ``` -* Without thread ID, including `[Internal]` means JVM internal thread, refer to the introduction of [dashboard](dashboard.md) command. -* `cpuUsage` is the CPU usage of the thread during the sampling interval, consistent with the data of the [dashboard](dashboard.md) command. -* `deltaTime` is the incremental CPU time of the thread during the sampling interval. If it is less than 1ms, it will be rounded and displayed as 0ms. -* `time` The total CPU time of thread. +- Without thread ID, including `[Internal]` means JVM internal thread, refer to the introduction of [dashboard](dashboard.md) command. +- `cpuUsage` is the CPU usage of the thread during the sampling interval, consistent with the data of the [dashboard](dashboard.md) command. +- `deltaTime` is the incremental CPU time of the thread during the sampling interval. If it is less than 1ms, it will be rounded and displayed as 0ms. +- `time` The total CPU time of thread. -**Note:** The thread stack is acquired at the end of the second sampling, which does not indicate that the thread is -processing the same task during the sampling interval. It is recommended that the interval time should not be too long. +**Note:** The thread stack is acquired at the end of the second sampling, which does not indicate that the thread is +processing the same task during the sampling interval. It is recommended that the interval time should not be too long. The larger the interval time, the more inaccurate. You can try to specify different intervals according to the specific situation and observe the output results. - #### List first page threads' info when no options provided By default, they are arranged in descending order of CPU increment time, and only the first page of data is displayed. @@ -162,12 +163,11 @@ $ thread -b > Note: By now Arthas only supports to locate the thread blocked by `synchronzied`, while `java.util.concurrent.Lock` is not supported yet. - #### thread -i, specify the sampling interval -* `thread -i 1000`: Count the thread cpu time of the last 1000ms. +- `thread -i 1000`: Count the thread cpu time of the last 1000ms. -* `thread -n 3 -i 1000`: List the 3 busiest thread stacks in 1000ms +- `thread -n 3 -i 1000`: List the 3 busiest thread stacks in 1000ms ```bash $ thread -n 3 -i 1000 diff --git a/site/src/site/sphinx/en/trace.md b/site-vuepress/docs/en/doc/trace.md similarity index 77% rename from site/src/site/sphinx/en/trace.md rename to site-vuepress/docs/en/doc/trace.md index ed9b5d421..35c4d2a74 100644 --- a/site/src/site/sphinx/en/trace.md +++ b/site-vuepress/docs/en/doc/trace.md @@ -1,43 +1,46 @@ -trace -===== +# trace [`trace` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-trace) -> Trace method calling path, and output the time cost for each node in the path. +::: tip +Trace method calling path, and output the time cost for each node in the path. +::: `trace` can track the calling path specified by `class-pattern` / `method-pattern`, and calculate the time cost on the whole path. ### Parameters -|Name|Specification| -|---:|:---| -|*class-pattern*|pattern for the class name| -|*method-pattern*|pattern for the method name| -|*condition-express*|condition expression| -|`[E]`|enable regex match, the default behavior is wildcards match| -|`[n:]`|execution times| -|#cost|time cost| +| Name | Specification | +| ------------------: | :---------------------------------------------------------- | +| _class-pattern_ | pattern for the class name | +| _method-pattern_ | pattern for the method name | +| _condition-express_ | condition expression | +| `[E]` | enable regex match, the default behavior is wildcards match | +| `[n:]` | execution times | +| #cost | time cost | There's one thing worthy noting here is observation expression. The observation expression supports OGNL grammar, for example, you can come up a expression like this `"{params,returnObj}"`. All OGNL expressions are supported as long as they are legal to the grammar. Thanks for `advice`'s data structure, it is possible to observe from varieties of different angles. Inside `advice` parameter, all necessary information for notification can be found. Pls. refer to [core parameters in expression](advice-class.md) for more details. -* Pls. also refer to [https://github.com/alibaba/arthas/issues/71](https://github.com/alibaba/arthas/issues/71) for more advanced usage -* OGNL official site: [https://commons.apache.org/proper/commons-ognl/language-guide.html](https://commons.apache.org/proper/commons-ognl/language-guide.html) -Many times what we are interested is the exact trace result when the method call takes time over one particular period. It is possible to achieve this in Arthas, for example: `trace *StringUtils isBlank '#cost>100'` means trace result will only be output when the executing time exceeds 100ms. +- Pls. also refer to [https://github.com/alibaba/arthas/issues/71](https://github.com/alibaba/arthas/issues/71) for more advanced usage +- OGNL official site: [https://commons.apache.org/proper/commons-ognl/language-guide.html](https://commons.apache.org/proper/commons-ognl/language-guide.html) +Many times what we are interested is the exact trace result when the method call takes time over one particular period. It is possible to achieve this in Arthas, for example: `trace *StringUtils isBlank '#cost>100'` means trace result will only be output when the executing time exceeds 100ms. -> `watch`/`stack`/`trace`, these three commands all support `#cost`. +::: tip +`watch`/`stack`/`trace`, these three commands all support `#cost`. +::: ### Notice -* `trace` is handy to help discovering and locating the performance flaws in your system, but pls. note Arthas can only trace the first level method call each time. +- `trace` is handy to help discovering and locating the performance flaws in your system, but pls. note Arthas can only trace the first level method call each time. -* After version 3.3.0, you can use the Dynamic Trace feature to add new matching classes/methods, see the following example. +- After version 3.3.0, you can use the Dynamic Trace feature to add new matching classes/methods, see the following example. -* Currently `trace java.lang.Thread getName` is not supported, please refer to issue: [#1610](https://github.com/alibaba/arthas/issues/1610), considering that it is not very necessary and it is difficult to repair , So it won’t be fixed for now +- Currently `trace java.lang.Thread getName` is not supported, please refer to issue: [#1610](https://github.com/alibaba/arthas/issues/1610), considering that it is not very necessary and it is difficult to repair , So it won’t be fixed for now ### Usage @@ -60,7 +63,9 @@ Affect(class-cnt:1 , method-cnt:1) cost in 28 ms. `---[0.03752ms] demo.MathGame:primeFactors() #24 [throws Exception] ``` -> The `#24` in the result indicates that in the run function, the `primeFactors()` function was called on line `24` of the source file. +::: tip +The `#24` in the result indicates that in the run function, the `primeFactors()` function was called on line `24` of the source file. +::: #### Trace times limit @@ -80,7 +85,7 @@ Command execution times exceed limit: 1, so command will exit. You can set it wi #### Include jdk method -* `--skipJDKMethod ` skip jdk method trace, default value true. +- `--skipJDKMethod ` skip jdk method trace, default value true. ```bash $ trace --skipJDKMethod false demo.MathGame run @@ -124,13 +129,14 @@ Affect(class-cnt:1 , method-cnt:1) cost in 41 ms. `---[0.05447ms] demo.MathGame:print() ``` -> Only the call path which's time cost is higher than `10ms` will be shown. This feature is handy to focus on what's needed to focus when troubleshoot. - -* Here Arthas provides the similar functionality JProfile and other commercial software provide. Compared to these professional softwares, Arthas doesn't deduce the time cost `trace` itself takes, therefore it is not as accurate as these softwares offer. More classes and methods on the calling path, more inaccurate `trace` output is, but it is still helpful for diagnostics where the bottleneck is. -* "[12.033735ms]" means the method on the node takes `12.033735` ms. -* "[min=0.005428ms,max=0.094064ms,total=0.105228ms,count=3] demo:call()" means aggregating all same method calls into one single line. The minimum time cost is `0.005428` ms, the maximum time cost is `0.094064` ms, and the total time cost for all method calls (`3` times in total) to "demo:call()" is `0.105228ms`. If "throws Exception" appears in this line, it means some exceptions have been thrown from this method calls. -* The total time cost may not equal to the sum of the time costs each sub method call takes, this is because Arthas instrumented code takes time too. +::: tip +Only the call path which's time cost is higher than `10ms` will be shown. This feature is handy to focus on what's needed to focus when troubleshoot. +::: +- Here Arthas provides the similar functionality JProfile and other commercial software provide. Compared to these professional softwares, Arthas doesn't deduce the time cost `trace` itself takes, therefore it is not as accurate as these softwares offer. More classes and methods on the calling path, more inaccurate `trace` output is, but it is still helpful for diagnostics where the bottleneck is. +- "[12.033735ms]" means the method on the node takes `12.033735` ms. +- "[min=0.005428ms,max=0.094064ms,total=0.105228ms,count=3] demo:call()" means aggregating all same method calls into one single line. The minimum time cost is `0.005428` ms, the maximum time cost is `0.094064` ms, and the total time cost for all method calls (`3` times in total) to "demo:call()" is `0.105228ms`. If "throws Exception" appears in this line, it means some exceptions have been thrown from this method calls. +- The total time cost may not equal to the sum of the time costs each sub method call takes, this is because Arthas instrumented code takes time too. #### Trace multiple classes or multiple methods @@ -142,10 +148,11 @@ You can use the regular expression to match multiple classes and methods on the Trace -E com.test.ClassA|org.test.ClassB method1|method2|method3 ``` - #### Exclude the specified class -> The watch/trace/monitor/stack/tt commands all support the `--exclude-class-pattern` parameter +::: tip +The watch/trace/monitor/stack/tt commands all support the `--exclude-class-pattern` parameter +::: Use the `--exclude-class-pattern` parameter to exclude the specified class, for example: @@ -155,7 +162,9 @@ watch javax.servlet.Filter * --exclude-class-pattern com.demo.TestFilter #### Dynamic trace -> Supported since version 3.3.0. +::: tip +Supported since version 3.3.0. +::: Open terminal 1, trace the `run` method in the above demo, and you can see the printout `listenerId: 1` . @@ -201,7 +210,6 @@ At terminal 1, you can see that the trace result has increased by one layer: Dynamic trace by specifying `listenerId`, you can go deeper and deeper. In addition, commands such as `watch`/`tt`/`monitor` also support similar functionality. - ### Trace result time inaccuracy problem For example, in the following result: `0.705196 > (0.152743 + 0.145825)` @@ -220,28 +228,31 @@ So where is the rest of the time consumed? 1. Methods that are not traced to. For example, methods under `java.*` are ignored by default. This can be printed out by adding the `-skipJDKMethod false` parameter. - ```bash - $ trace demo.MathGame run --skipJDKMethod false - Press Q or Ctrl+C to abort. - Affect(class count: 1 , method count: 1) cost in 35 ms, listenerId: 2 - `---ts=2021-02-08 11:27:48;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@232204a1 - `--[0.810591ms] demo.MathGame:run() - +--[0.034568ms] java.util.Random:nextInt() #23 - +---[0.119367ms] demo.MathGame:timeFactors() #24 [throws Exception] - +---[0.017407ms] java.lang.StringBuilder:() #28 - +--[0.127922ms] java.lang.String:format() #57 - +---[min=0.01419ms,max=0.020221ms,total=0.034411ms,count=2] java.lang.StringBuilder:append() #57 - +--[0.021911ms] java.lang.Exception:getMessage() #57 - +---[0.015643ms] java.lang.StringBuilder:toString() #57 - `--[0.086622ms] java.io.PrintStream:println() #57 - ``` + ```bash + $ trace demo.MathGame run --skipJDKMethod false + Press Q or Ctrl+C to abort. + Affect(class count: 1 , method count: 1) cost in 35 ms, listenerId: 2 + `---ts=2021-02-08 11:27:48;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@232204a1 + `--[0.810591ms] demo.MathGame:run() + +--[0.034568ms] java.util.Random:nextInt() #23 + +---[0.119367ms] demo.MathGame:timeFactors() #24 [throws Exception] + +---[0.017407ms] java.lang.StringBuilder:() #28 + +--[0.127922ms] java.lang.String:format() #57 + +---[min=0.01419ms,max=0.020221ms,total=0.034411ms,count=2] java.lang.StringBuilder:append() #57 + +--[0.021911ms] java.lang.Exception:getMessage() #57 + +---[0.015643ms] java.lang.StringBuilder:toString() #57 + `--[0.086622ms] java.io.PrintStream:println() #57 + ``` + 2. Instruction consumption. For example, instructions such as `i++`, `getfield`, etc. 3. Possible JVM pause during code execution, such as GC, entering synchronization blocks, etc. #### Use the -v parameter to print more information -> The watch/trace/monitor/stack/tt commands all support the `-v` parameter. +::: tip +The watch/trace/monitor/stack/tt commands all support the `-v` parameter. +::: When the command is executed, there is no output result. There are two possibilities: diff --git a/site/src/site/sphinx/en/tt.md b/site-vuepress/docs/en/doc/tt.md similarity index 77% rename from site/src/site/sphinx/en/tt.md rename to site-vuepress/docs/en/doc/tt.md index fb391762e..834b3d242 100644 --- a/site/src/site/sphinx/en/tt.md +++ b/site-vuepress/docs/en/doc/tt.md @@ -1,27 +1,23 @@ -tt -== +# tt [`tt` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-tt) Check the `parameters`, `return values` and `exceptions` of the methods at different times. -`watch` is a powerful command but due to its feasibility and complexity, it's quite hard to locate the issue effectively. +`watch` is a powerful command but due to its feasibility and complexity, it's quite hard to locate the issue effectively. -In such difficulties, `tt` comes into play. +In such difficulties, `tt` comes into play. -With the help of `tt` (*TimeTunnel*), you can check the contexts of the methods at different times in execution history. +With the help of `tt` (_TimeTunnel_), you can check the contexts of the methods at different times in execution history. ### Usage - #### Start Demo Start `math-game` in [Quick Start](quick-start.md). - #### Record method calls - ```bash $ tt -t demo.MathGame primeFactors Press Ctrl+C to abort. @@ -35,38 +31,40 @@ Affect(class-cnt:1 , method-cnt:1) cost in 66 ms. 1004 2018-12-04 11:15:42 17.76437 true false 0x4b67cf4d MathGame primeFactors ``` -* `-t` +- `-t` + + record the calling context of the method `demo.MathGame primeFactors` - record the calling context of the method `demo.MathGame primeFactors` - -* `-n 3` +- `-n 3` - limit the number of the records (avoid overflow for too many records; with `-n` option, Arthas can automatically stop recording once the records reach the specified limit) + limit the number of the records (avoid overflow for too many records; with `-n` option, Arthas can automatically stop recording once the records reach the specified limit) -* Property +- Property -|Name|Specification| -|---|---| -|INDEX|the index for each call based on time| -|TIMESTAMP|time to invoke the method| -|COST(ms)|time cost of the method call| -|IS-RET|whether method exits with normal return| -|IS-EXP|whether method failed with exceptions| -|OBJECT|`hashCode()` of the object invoking the method| -|CLASS|class name of the object invoking the method| -|METHOD|method being invoked| +| Name | Specification | +| --------- | ---------------------------------------------- | +| INDEX | the index for each call based on time | +| TIMESTAMP | time to invoke the method | +| COST(ms) | time cost of the method call | +| IS-RET | whether method exits with normal return | +| IS-EXP | whether method failed with exceptions | +| OBJECT | `hashCode()` of the object invoking the method | +| CLASS | class name of the object invoking the method | +| METHOD | method being invoked | -* Condition expression +- Condition expression Tips: + 1. `tt -t *Test print params.length==1` with different amounts of parameters; 2. `tt -t *Test print 'params[1] instanceof Integer'` with different types of parameters; 3. `tt -t *Test print params[0].mobile=="13989838402"` with specified parameter. - + Advanced: -* [Critical fields in expression](advice-class.md) -* [Special usage](https://github.com/alibaba/arthas/issues/71) -* [OGNL official guide](https://commons.apache.org/proper/commons-ognl/language-guide.html) + +- [Critical fields in expression](advice-class.md) +- [Special usage](https://github.com/alibaba/arthas/issues/71) +- [OGNL official guide](https://commons.apache.org/proper/commons-ognl/language-guide.html) #### List all records @@ -84,7 +82,6 @@ $ tt -l Affect(row-cnt:6) cost in 4 ms. ``` - #### Searching for records ```bash @@ -102,7 +99,8 @@ Affect(row-cnt:6) cost in 607 ms. ``` Advanced: -* [Critical fields in expression](advice-class.md) + +- [Critical fields in expression](advice-class.md) #### Check context of the call @@ -129,8 +127,8 @@ Affect(row-cnt:1) cost in 11 ms. #### Replay record -Since Arthas stores the context of the call, you can even *replay* the method calling afterwards with extra option `-p` to replay the issue for advanced troubleshooting, option `--replay-times` -define the replay execution times, option `--replay-interval` define the interval(unit in ms,with default value 1000) of replays +Since Arthas stores the context of the call, you can even _replay_ the method calling afterwards with extra option `-p` to replay the issue for advanced troubleshooting, option `--replay-times` +define the replay execution times, option `--replay-interval` define the interval(unit in ms,with default value 1000) of replays ```bash $ tt -i 1004 -p @@ -156,10 +154,10 @@ Affect(row-cnt:1) cost in 14 ms. `-w, --watch-express` watch the time fragment by ognl express. -* You can used all variables in [fundamental fields in expressions](advice-class.md) for the watch express。 +- You can used all variables in [fundamental fields in expressions](advice-class.md) for the watch express。 ```bash -[arthas@10718]$ tt -t demo.MathGame run -n 5 +[arthas@10718]$ tt -t demo.MathGame run -n 5 Press Q or Ctrl+C to abort. Affect(class count: 1 , method count: 1) cost in 56 ms, listenerId: 1 INDEX TIMESTAMP COST(ms) IS-RET IS-EXP OBJECT CLASS METHOD @@ -170,7 +168,7 @@ Affect(class count: 1 , method count: 1) cost in 56 ms, listenerId: 1 Affect(row-cnt:1) cost in 7 ms. ``` -* Get a static field and calling a static method +- Get a static field and calling a static method ```bash [arthas@10718]$ tt -t demo.MathGame run -n 5 @@ -185,17 +183,14 @@ Affect(class count: 1 , method count: 1) cost in 56 ms, listenerId: 1 Note that `com.taobao.arthas.core.advisor.Advice#getLoader` is used here, and that it is better to use the exact `classloader` [ognl](ognl.md). - Advanced usage [get spring context to call the bean method](https://github.com/alibaba/arthas/issues/482) - F.Y.I 1. **Loss** of the `ThreadLocal` - Arthas save params into an array, then invoke the method with the params again. The method execute in another thread, so the `ThreadLocal` **lost**. + Arthas save params into an array, then invoke the method with the params again. The method execute in another thread, so the `ThreadLocal` **lost**. 2. params may be modified - Arthas save params into an array, they are object references. The Objects may be modified by other code. - + Arthas save params into an array, they are object references. The Objects may be modified by other code. diff --git a/site/src/site/sphinx/en/tunnel.md b/site-vuepress/docs/en/doc/tunnel.md similarity index 89% rename from site/src/site/sphinx/en/tunnel.md rename to site-vuepress/docs/en/doc/tunnel.md index 59a9d0bbd..615bbb246 100644 --- a/site/src/site/sphinx/en/tunnel.md +++ b/site-vuepress/docs/en/doc/tunnel.md @@ -1,6 +1,4 @@ -Arthas Tunnel -=== - +# Arthas Tunnel Manage/connect multiple Agents remotely via Arthas Tunnel Server/Client. @@ -8,9 +6,10 @@ For example, in streaming computing, Java processes can be started on different In this case, Arthas Tunnel Server/Client can be used. -Reference: -* 1: [Web Console](web-console.md) -* 2: [Arthas Spring Boot Starter](spring-boot-starter.md) +Reference: + +- 1: [Web Console](web-console.md) +- 2: [Arthas Spring Boot Starter](spring-boot-starter.md) ### Download and deploy arthas tunnel server @@ -36,7 +35,6 @@ Using generated security password: f1dca050-3777-48f4-a577-6367e55a78a2 ### Connecting to the tunnel server when starting arthas - When starting arthas, you can use the `--tunnel-server` parameter, for example: ```bash @@ -49,7 +47,7 @@ You can also use the following test address (not guaranteed to be available all as.sh --tunnel-server 'ws://47.75.156.201:80/ws' ``` -* You can specify the agentId by the `--agent-id` parameter. By default, a random ID is generated. +- You can specify the agentId by the `--agent-id` parameter. By default, a random ID is generated. After Arthas attach succeeds, the agentId will be printed, such as: @@ -81,16 +79,15 @@ If the connection is not connected to the tunnel server at startup, you can also TUNNEL_SERVER ws://47.75.156.201:80/ws ``` - For the above example, go to [http://47.75.156.201/arthas/?port=80](http://47.75.156.201/arthas/?port=80) in the browser and input the `agentId` to connect to arthas on remote machine. - -![](_static/arthas-tunnel-server.png) - +![](/images/arthas-tunnel-server.png) ### Best practices -> Note that the agentId must be unique, otherwise it will conflict on the tunnel server and not work properly. +::: warning +Note that the agentId must be unique, otherwise it will conflict on the tunnel server and not work properly. +::: If the arthas agent is configured with `appName`, the generated agentId will be prefixed with `appName`. @@ -98,14 +95,14 @@ For example, if you add the startup parameter `as.sh --tunnel-server 'ws://127.0 Tunnel server will use `_` as a delimiter to extract `appName`, which is convenient to manage by application. -> Alternatively, you can configure `appName` in `arthas.properties` in the unzipped arthas directory, or in `application.properties` of the spring boot application. - +::: tip +Alternatively, you can configure `appName` in `arthas.properties` in the unzipped arthas directory, or in `application.properties` of the spring boot application. +::: ### Tunnel Server Management Page Start the tunnel-server locally, then use `as.sh` attach, and specify the application name `--app-name test`: - ``` $ as.sh --tunnel-server 'ws://127.0.0.1:7777/ws' --app-name test telnet connecting to arthas server... current timestamp is 1627539688 @@ -132,23 +129,24 @@ Then visit tunnel-server, you can see a list of all connected applications: [http://localhost:8080/apps.html](http://localhost:8080/apps.html) -![](_static/tunnel-server-apps.png) +![](/images/tunnel-server-apps.png) Then open the details, you can see a list of all connected agents: [http://localhost:8080/agents.html?app=test](http://localhost:8080/agents.html?app=test) -![](_static/tunnel-server-agents.png) - +![](/images/tunnel-server-agents.png) ### Authority Management At present, the tunnel server does not have special authority management. Users need to develop their own and authenticate the app name. + ### Cluster Management If you want to deploy multiple tunnel servers, you can use nginx for forwarding and redis to store agent information. Nginx needs to configure sticky session to ensure that the user's web socket is connected to the same back-end tunnel server. The simple configuration method is to use `ip_hash`. + ### How arthas tunnel server works ``` diff --git a/site/src/site/sphinx/en/version.md b/site-vuepress/docs/en/doc/version.md similarity index 84% rename from site/src/site/sphinx/en/version.md rename to site-vuepress/docs/en/doc/version.md index 6619b897d..8b4b4c701 100644 --- a/site/src/site/sphinx/en/version.md +++ b/site-vuepress/docs/en/doc/version.md @@ -1,5 +1,4 @@ -version -=== +# version prints out Arthas's version. @@ -9,4 +8,3 @@ prints out Arthas's version. $ version 3.5.1 ``` - diff --git a/site/src/site/sphinx/en/vmoption.md b/site-vuepress/docs/en/doc/vmoption.md similarity index 97% rename from site/src/site/sphinx/en/vmoption.md rename to site-vuepress/docs/en/doc/vmoption.md index 64e1f548d..93c044857 100644 --- a/site/src/site/sphinx/en/vmoption.md +++ b/site-vuepress/docs/en/doc/vmoption.md @@ -1,9 +1,10 @@ -vmoption -=== +# vmoption [`vmoption` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-vmoption) -> Display, and update the vm diagnostic options. +::: tip +Display, and update the vm diagnostic options. +::: ### Usage @@ -62,4 +63,4 @@ Successfully updated the vm option. NAME BEFORE-VALUE AFTER-VALUE ------------------------------------------- PrintGCDetails false true -``` \ No newline at end of file +``` diff --git a/site/src/site/sphinx/en/vmtool.md b/site-vuepress/docs/en/doc/vmtool.md similarity index 76% rename from site/src/site/sphinx/en/vmtool.md rename to site-vuepress/docs/en/doc/vmtool.md index f44eab10b..e2f97f29c 100644 --- a/site/src/site/sphinx/en/vmtool.md +++ b/site-vuepress/docs/en/doc/vmtool.md @@ -1,12 +1,14 @@ -vmtool -=== +# vmtool + +::: tip +@since 3.5.1 +::: -> @since 3.5.1 [`vmtool` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-vmtool) `vmtool` uses the `JVMTI` to support `getInstances` in jvm and `forceGc`. -* [JVM Tool Interface](https://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html) +- [JVM Tool Interface](https://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html) ### getInstances @@ -26,7 +28,9 @@ $ vmtool --action getInstances --className java.lang.String --limit 10 ] ``` -> Through the `--limit` parameter, you can limit the number of return values to avoid pressure on the JVM when obtaining large data. The default value of limit is 10. +::: tip +Through the `--limit` parameter, you can limit the number of return values to avoid pressure on the JVM when obtaining large data. The default value of limit is 10. +::: ### Specify classloader name @@ -34,7 +38,6 @@ $ vmtool --action getInstances --className java.lang.String --limit 10 vmtool --action getInstances --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader --className org.springframework.context.ApplicationContext ``` - ### Specify classloader hash The classloader that loads the class can be found through the `sc` command. @@ -59,9 +62,11 @@ vmtool --action getInstances -c 19469ea2 --className org.springframework.context ### Specify the number of expanded layers of returned results -> The return result of the `getInstances` action is bound to the `instances` variable, which is an array. +::: tip +The return result of the `getInstances` action is bound to the `instances` variable, which is an array. -> The expansion level of the result can be specified by the `-x`/`--expand` parameter, the default value is 1. +The expansion level of the result can be specified by the `-x`/`--expand` parameter, the default value is 1. +::: ```bash vmtool --action getInstances -c 19469ea2 --className org.springframework.context.ApplicationContext -x 2 @@ -69,7 +74,9 @@ vmtool --action getInstances -c 19469ea2 --className org.springframework.context ### Execute expression -> The return result of the `getInstances` action is bound to the `instances` variable, which is an array. The specified expression can be executed through the `--express` parameter. +::: tip +The return result of the `getInstances` action is bound to the `instances` variable, which is an array. The specified expression can be executed through the `--express` parameter. +::: ```bash vmtool --action getInstances --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader --className org.springframework.context.ApplicationContext --express'instances[0].getBeanDefinitionNames()' @@ -81,4 +88,4 @@ vmtool --action getInstances --classLoaderClass org.springframework.boot.loader. vmtool --action forceGc ``` -* Use the [`vmoption`](vmoption.md) command to dynamically turn on the `PrintGC` option. \ No newline at end of file +- Use the [`vmoption`](vmoption.md) command to dynamically turn on the `PrintGC` option. diff --git a/site/src/site/sphinx/en/watch.md b/site-vuepress/docs/en/doc/watch.md similarity index 74% rename from site/src/site/sphinx/en/watch.md rename to site-vuepress/docs/en/doc/watch.md index f034525bc..01697687f 100644 --- a/site/src/site/sphinx/en/watch.md +++ b/site-vuepress/docs/en/doc/watch.md @@ -1,5 +1,4 @@ -watch -===== +# watch [`watch` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-watch) @@ -9,33 +8,35 @@ With the help of [OGNL](https://commons.apache.org/proper/commons-ognl/index.htm ### Parameters & Options -There are four different scenarios for `watch` command, which makes it rather complicated. - -|Name|Specification| -|---:|:---| -|*class-pattern*|pattern for the class name| -|*method-pattern*|pattern for the method name| -|*expression*|expression to watch, default value `{params, target, returnObj}`| -|*condition-expression*|condition expression to filter| -|[b]|before method being invoked| -|[e]|when method encountering exceptions| -|[s]|when method exits normally| -|[f]|when method exits (either succeed or fail with exceptions)| -|[E]|turn on regex matching while the default is wildcard matching| -|[x:]|the depth to print the specified property with default value: 1, the max value is 4| +There are four different scenarios for `watch` command, which makes it rather complicated. + +| Name | Specification | +| ---------------------: | :---------------------------------------------------------------------------------- | +| _class-pattern_ | pattern for the class name | +| _method-pattern_ | pattern for the method name | +| _expression_ | expression to watch, default value `{params, target, returnObj}` | +| _condition-expression_ | condition expression to filter | +| [b] | before method being invoked | +| [e] | when method encountering exceptions | +| [s] | when method exits normally | +| [f] | when method exits (either succeed or fail with exceptions) | +| [E] | turn on regex matching while the default is wildcard matching | +| [x:] | the depth to print the specified property with default value: 1, the max value is 4 | F.Y.I + 1. any valid OGNL expression as `"{params,returnObj}"` supported -2. there are four *watching* points: `-b`, `-e`, `-s` and `-f` (the first three are off in default while `-f` on); -3. at the *watching* point, Arthas will use the *expression* to evaluate the variables and print them out; -4. `in parameters` and `out parameters` are different since they can be modified within the invoked methods; `params` stands for `in parameters` in `-b`while `out parameters` in other *watching* points; +2. there are four _watching_ points: `-b`, `-e`, `-s` and `-f` (the first three are off in default while `-f` on); +3. at the _watching_ point, Arthas will use the _expression_ to evaluate the variables and print them out; +4. `in parameters` and `out parameters` are different since they can be modified within the invoked methods; `params` stands for `in parameters` in `-b`while `out parameters` in other _watching_ points; 5. there are no `return values` and `exceptions` when using `-b`. 6. In the result of the watch command, the `location` information will be printed. There are three possible values for `location`: `AtEnter`, `AtExit`, and `AtExceptionExit`. Corresponding to the method entry, the method returns normally, and the method throws an exception. Advanced: -* [Critical fields in *expression*](advice-class.md) -* [Special usages](https://github.com/alibaba/arthas/issues/71) -* [OGNL official guide](https://commons.apache.org/proper/commons-ognl/language-guide.html) + +- [Critical fields in _expression_](advice-class.md) +- [Special usages](https://github.com/alibaba/arthas/issues/71) +- [OGNL official guide](https://commons.apache.org/proper/commons-ognl/language-guide.html) ### Usage @@ -45,7 +46,9 @@ Start `math-game` in [Quick Start](quick-start.md). #### Check the `out parameters`, `this` and `return value` -> The expression to watch, default value `{params, target, returnObj}` +::: tip +The expression to watch, default value `{params, target, returnObj}` +::: ```bash $ watch demo.MathGame primeFactors -x 2 @@ -79,8 +82,9 @@ ts=2021-08-31 15:22:58; [cost=1.020982ms] result=@ArrayList[ ] ``` -* In the above result, the method is executed twice, the first result is `location=AtExceptionExit`, indicating that the method throws an exception, so `returnObj` is null -* In the second result is `location=AtExit`, indicating that the method returns normally, so you can see that the result of `returnObj` is an ArrayList +- In the above result, the method is executed twice, the first result is `location=AtExceptionExit`, indicating that the method throws an exception, so `returnObj` is null +- In the second result is `location=AtExit`, indicating that the method returns normally, so you can see that the result of `returnObj` is an ArrayList + #### Check `in parameters` ```bash @@ -95,13 +99,11 @@ ts=2018-12-03 19:23:23; [cost=0.0353ms] result=@ArrayList[ ] ``` -Compared to the previous *check*: +Compared to the previous _check_: -* `return value` is `null` since it's `-b`. - - -#### Check *before* and *after* at the same time +- `return value` is `null` since it's `-b`. +#### Check _before_ and _after_ at the same time ```bash $ watch demo.MathGame primeFactors "{params,target,returnObj}" -x 2 -b -s -n 2 @@ -140,9 +142,9 @@ ts=2018-12-03 19:29:54; [cost=4.277392ms] result=@ArrayList[ F.Y.I -* `-n 2`: threshold of execution times is 2. -* the first block of output is the *before watching* point; -* *the order of the output determined by the *watching* order itself (nothing to do with the order of the options `-b -s`). +- `-n 2`: threshold of execution times is 2. +- the first block of output is the _before watching_ point; +- *the order of the output determined by the *watching\* order itself (nothing to do with the order of the options `-b -s`). #### Use `-x` to check more details @@ -177,8 +179,9 @@ ts=2018-12-03 19:34:19; [cost=0.587833ms] result=@ArrayList[ ] ``` -* `-x`: Expand level of object (1 by default) -* The max value of `-x` is 4, to prevent the expansion result taking up too much memory. Users can specify the field in the `ognl` expression. +- `-x`: Expand level of object (1 by default) +- The max value of `-x` is 4, to prevent the expansion result taking up too much memory. Users can specify the field in the `ognl` expression. + #### Use condition expressions to locate specific call ```bash @@ -207,8 +210,8 @@ ts=2018-12-03 19:38:00; [cost=1.414993ms] result=@ArrayList[ ] ``` -* `-e`: Trigger when an exception is thrown -* `throwExp`: the exception object +- `-e`: Trigger when an exception is thrown +- `throwExp`: the exception object #### Filter by time cost @@ -227,12 +230,11 @@ ts=2018-12-03 19:40:28; [cost=2112.168897ms] result=@ArrayList[ ] ``` -* `#cost>200` (`ms`) filter out all invokings that take less than `200ms`. - +- `#cost>200` (`ms`) filter out all invokings that take less than `200ms`. #### Check the field of the target object -* `target` is the `this` object in java. +- `target` is the `this` object in java. ```bash $ watch demo.MathGame primeFactors 'target' @@ -244,7 +246,7 @@ ts=2018-12-03 19:41:52; [cost=0.477882ms] result=@MathGame[ ] ``` -* `target.field_name`: the field of the current object. +- `target.field_name`: the field of the current object. ```bash $ watch demo.MathGame primeFactors 'target.illegalArgumentCount' @@ -252,9 +254,9 @@ Press Ctrl+C to abort. Affect(class-cnt:1 , method-cnt:1) cost in 67 ms. ts=2018-12-03 20:04:34; [cost=131.303498ms] result=@Integer[8] ts=2018-12-03 20:04:35; [cost=0.961441ms] result=@Integer[8] -``` +``` -#### Get a static field and calling a static method +#### Get a static field and calling a static method ```bash watch demo.MathGame * '{params,@demo.MathGame@random.nextInt(100)}' -v -n 1 -x 2 @@ -269,18 +271,20 @@ ts=2021-01-05 21:35:20; [cost=0.173966ms] result=@ArrayList[ ] ``` -* Note that here you use `Thread.currentThread().getContextClassLoader()` to load, and it is better to use the exact `classloader` [ognl](ognl.md). - +- Note that here you use `Thread.currentThread().getContextClassLoader()` to load, and it is better to use the exact `classloader` [ognl](ognl.md). #### Exclude the specified class -> The watch/trace/monitor/stack/tt commands all support the `--exclude-class-pattern` parameter +::: tip +The watch/trace/monitor/stack/tt commands all support the `--exclude-class-pattern` parameter +::: Use the `--exclude-class-pattern` parameter to exclude the specified class, for example: ```bash watch javax.servlet.Filter * --exclude-class-pattern com.demo.TestFilter ``` + #### Does not match subclass By default, the watch/trace/monitor/stack/tt commands will match subclass. If you don't want to match, you can turn it off. @@ -289,7 +293,6 @@ By default, the watch/trace/monitor/stack/tt commands will match subclass. If yo options disable-sub-class true ``` - #### Use the -v parameter to print more information > The watch/trace/monitor/stack/tt commands all support the `-v` parameter. @@ -326,4 +329,4 @@ ts=2020-12-02 22:38:57; [cost=0.052877ms] result=@Object[][ @Integer[4243], ], ] -``` \ No newline at end of file +``` diff --git a/site/src/site/sphinx/en/web-console.md b/site-vuepress/docs/en/doc/web-console.md similarity index 65% rename from site/src/site/sphinx/en/web-console.md rename to site-vuepress/docs/en/doc/web-console.md index 91848ba18..6d8dbe28a 100644 --- a/site/src/site/sphinx/en/web-console.md +++ b/site-vuepress/docs/en/doc/web-console.md @@ -1,5 +1,4 @@ -Web Console -=== +# Web Console [`Web Console` online tutorial](https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=case-web-console) @@ -9,20 +8,30 @@ Arthas supports the Web Console. After attach success, the user can access: [htt The user can fill in the IP and connect the remote arthas on other machines. -![](_static/web-console-local.png) +![](/images/web-console-local.png) -> By default, arthas only listens to `127.0.0.1`, so if you want to connect from a remote, you can use the `--target-ip` parameter to specify the IP. See the help description for `-h` for more information. +::: warning +By default, arthas only listens to `127.0.0.1`, so if you want to connect from a remote, you can use the `--target-ip` parameter to specify the IP. See the help description for `-h` for more information. +::: If you have suggestions for the Web Console, please leave a message here: [https://github.com/alibaba/arthas/issues/15](https://github.com/alibaba/arthas/issues/15) -* Copy and paste shortcut keys in Web Console: [https://github.com/alibaba/arthas/issues/1056](https://github.com/alibaba/arthas/issues/1056) +- Copy and paste shortcut keys in Web Console: [https://github.com/alibaba/arthas/issues/1056](https://github.com/alibaba/arthas/issues/1056) + +::: tip +Since 3.5.4, you can right-click to copy and paste in the Web Console. +::: -> Since 3.5.4, you can right-click to copy and paste in the Web Console. ### scrollback URL parameters -> Since 3.5.5 + +::: tip +Since 3.5.5 +::: + By default, the number of rows that the Web Console supports to roll back upwards is 1000. It can be specified with `scrollback` in the URL. for example [http://127.0.0.1:8563/?scrollback=3000](http://127.0.0.1:8563/?scrollback=3000) + ### Connect remote arthas through arthas tunnel server -Reference: [Arthas Tunnel](tunnel.md) \ No newline at end of file +Reference: [Arthas Tunnel](tunnel.md) diff --git a/site-vuepress/package-lock.json b/site-vuepress/package-lock.json new file mode 100644 index 000000000..96fb2e964 --- /dev/null +++ b/site-vuepress/package-lock.json @@ -0,0 +1,6530 @@ +{ + "name": "site-vuepress", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "site-vuepress", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "@vuepress/plugin-search": "^2.0.0-beta.48", + "prettier": "2.7.1", + "vuepress": "^2.0.0-beta.48", + "vuepress-plugin-copy-code2": "^2.0.0-beta.84", + "vuepress-plugin-redirect": "^2.0.0-beta.86" + } + }, + "node_modules/@babel/parser": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", + "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", + "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@mdit-vue/plugin-component": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-component/-/plugin-component-0.6.0.tgz", + "integrity": "sha512-S/Dd0eoOipbUAMdJ6A7M20dDizJxbtGAcL6T1iiJ0cEzjTrHP1kRT421+JMGPL8gcdsrIxgVSW8bI/R6laqBtA==", + "dev": true, + "dependencies": { + "@types/markdown-it": "^12.2.3", + "markdown-it": "^13.0.1" + } + }, + "node_modules/@mdit-vue/plugin-frontmatter": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-frontmatter/-/plugin-frontmatter-0.6.0.tgz", + "integrity": "sha512-cRunxy0q1gcqxUHAAiV8hMKh2qZOTDKXt8YOWfWNtf7IzaAL0v/nCOfh+O7AsHRmyc25Th8sL3H85HKWnNJtdw==", + "dev": true, + "dependencies": { + "@mdit-vue/types": "0.6.0", + "@types/markdown-it": "^12.2.3", + "gray-matter": "^4.0.3", + "markdown-it": "^13.0.1" + } + }, + "node_modules/@mdit-vue/plugin-headers": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-headers/-/plugin-headers-0.6.0.tgz", + "integrity": "sha512-pg56w9/UooYuIZIoM0iQ021hrXt450fuRG3duxcwngw3unmE80rkvG3C0lT9ZnNXHSSYC9vGWUJh6EEN4nB34A==", + "dev": true, + "dependencies": { + "@mdit-vue/shared": "0.6.0", + "@mdit-vue/types": "0.6.0", + "@types/markdown-it": "^12.2.3", + "markdown-it": "^13.0.1" + } + }, + "node_modules/@mdit-vue/plugin-sfc": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-sfc/-/plugin-sfc-0.6.0.tgz", + "integrity": "sha512-R7mwUz2MxEopVQwpcOqCcqqvKx3ibRNcZ7QC31w4VblRb3Srk1st1UuGwHJxZ6Biro8ZWdPpMfpSsSk+2G+mIg==", + "dev": true, + "dependencies": { + "@mdit-vue/types": "0.6.0", + "@types/markdown-it": "^12.2.3", + "markdown-it": "^13.0.1" + } + }, + "node_modules/@mdit-vue/plugin-title": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-title/-/plugin-title-0.6.0.tgz", + "integrity": "sha512-K2qUIrHmCp9w+/p1lWfkr808+Ge6FksM1ny/siiXHMHB0enArUd7G7SaEtro8JRb/hewd9qKq5xTOSWN2Q5jow==", + "dev": true, + "dependencies": { + "@mdit-vue/shared": "0.6.0", + "@mdit-vue/types": "0.6.0", + "@types/markdown-it": "^12.2.3", + "markdown-it": "^13.0.1" + } + }, + "node_modules/@mdit-vue/plugin-toc": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-toc/-/plugin-toc-0.6.0.tgz", + "integrity": "sha512-5pgKY2++3w2/9Pqpgz7mZUiXs6jDcEyFPcf14QdiqSZ2eL+4VLuupcoC4JIDF+mAFHt+TJCfhk3oeG8Y6s6TBg==", + "dev": true, + "dependencies": { + "@mdit-vue/shared": "0.6.0", + "@mdit-vue/types": "0.6.0", + "@types/markdown-it": "^12.2.3", + "markdown-it": "^13.0.1" + } + }, + "node_modules/@mdit-vue/shared": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mdit-vue/shared/-/shared-0.6.0.tgz", + "integrity": "sha512-RtV1P8jrEV/cl0WckOvpefiEWScw7omCQrIEtorlagG2XmnI9YbxMkLD53ETscA7lTVzqhGyzfoSrAiPi0Sjnw==", + "dev": true, + "dependencies": { + "@mdit-vue/types": "0.6.0", + "@types/markdown-it": "^12.2.3", + "markdown-it": "^13.0.1" + } + }, + "node_modules/@mdit-vue/types": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mdit-vue/types/-/types-0.6.0.tgz", + "integrity": "sha512-2Gf6MkEmoHrvO/IJsz48T+Ns9lW17ReC1vdhtCUGSCv0fFCm/L613uu/hpUrHuT3jTQHP90LcbXTQB2w4L1G8w==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dev": true, + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.4.3", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.3.tgz", + "integrity": "sha512-YP1S7YJRMPs+7KZKDb9G63n8YejIwW9BALq7a5j2+H4yl6iOv9CB29edho+cuFRrvmJbbaH2yiVChKLJVysDGw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@types/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==", + "dev": true + }, + "node_modules/@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "dev": true, + "dependencies": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "node_modules/@types/markdown-it-emoji": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it-emoji/-/markdown-it-emoji-2.0.2.tgz", + "integrity": "sha512-2ln8Wjbcj/0oRi/6VnuMeWEHHuK8uapFttvcLmDIe1GKCsFBLOLBX+D+xhDa9oWOQV0IpvxwrSfKKssAqqroog==", + "dev": true, + "dependencies": { + "@types/markdown-it": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", + "dev": true + }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", + "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==", + "dev": true + }, + "node_modules/@vitejs/plugin-vue": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.3.3.tgz", + "integrity": "sha512-SmQLDyhz+6lGJhPELsBdzXGc+AcaT8stgkbiTFGpXPe8Tl1tJaBw1A6pxDqDuRsVkD8uscrkx3hA7QDOoKYtyw==", + "dev": true, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "vite": "^2.5.10", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.37.tgz", + "integrity": "sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.37", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz", + "integrity": "sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==", + "dev": true, + "dependencies": { + "@vue/compiler-core": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz", + "integrity": "sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.37", + "@vue/compiler-dom": "3.2.37", + "@vue/compiler-ssr": "3.2.37", + "@vue/reactivity-transform": "3.2.37", + "@vue/shared": "3.2.37", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz", + "integrity": "sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==", + "dev": true, + "dependencies": { + "@vue/compiler-dom": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.2.1.tgz", + "integrity": "sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ==", + "dev": true + }, + "node_modules/@vue/reactivity": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.37.tgz", + "integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==", + "dev": true, + "dependencies": { + "@vue/shared": "3.2.37" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz", + "integrity": "sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.37", + "@vue/shared": "3.2.37", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.37.tgz", + "integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==", + "dev": true, + "dependencies": { + "@vue/reactivity": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz", + "integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==", + "dev": true, + "dependencies": { + "@vue/runtime-core": "3.2.37", + "@vue/shared": "3.2.37", + "csstype": "^2.6.8" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.37.tgz", + "integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==", + "dev": true, + "dependencies": { + "@vue/compiler-ssr": "3.2.37", + "@vue/shared": "3.2.37" + }, + "peerDependencies": { + "vue": "3.2.37" + } + }, + "node_modules/@vue/shared": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.37.tgz", + "integrity": "sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==", + "dev": true + }, + "node_modules/@vuepress/bundler-vite": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/bundler-vite/-/bundler-vite-2.0.0-beta.48.tgz", + "integrity": "sha512-ORT1cY2ScBWVuN/oCa5z0GqkbpdDmy6Pf0oe3GdiPA/w0kUbKeUPrWGDGHINqrSyvN0h5GbmLbvw6jSeUr2gAQ==", + "dev": true, + "dependencies": { + "@vitejs/plugin-vue": "^2.3.3", + "@vuepress/client": "2.0.0-beta.48", + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/shared": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "autoprefixer": "^10.4.7", + "connect-history-api-fallback": "^1.6.0", + "postcss": "^8.4.14", + "rollup": "^2.75.0", + "vite": "~2.9.9", + "vue": "^3.2.36", + "vue-router": "^4.0.15" + } + }, + "node_modules/@vuepress/cli": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/cli/-/cli-2.0.0-beta.48.tgz", + "integrity": "sha512-nsLTNyQqKpwZXNrP0rJnDfvoBHm0KtdgLUIq5mfib9DTMic0ziaBUlfUvavcz18ovg3MwtLSUQbSjIsQskdaIw==", + "dev": true, + "dependencies": { + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/shared": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "cac": "^6.7.12", + "chokidar": "^3.5.3", + "envinfo": "^7.8.1", + "esbuild": "^0.14.41" + }, + "bin": { + "vuepress-cli": "bin/vuepress.js" + } + }, + "node_modules/@vuepress/client": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-beta.48.tgz", + "integrity": "sha512-XqTmoNqgJuO5IpiEQl3xZOFVZ/oXxCk5LNg+432/4hOTz92VdzOn1KNIQFmWxZaQ6s+8v6BimqRi0ZxMCwQ+Pg==", + "dev": true, + "dependencies": { + "@vue/devtools-api": "^6.1.4", + "@vuepress/shared": "2.0.0-beta.48", + "vue": "^3.2.36", + "vue-router": "^4.0.15" + } + }, + "node_modules/@vuepress/core": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-beta.48.tgz", + "integrity": "sha512-J9fge3oV5amAkx2g8TOPp8EpHyFgm6jy/FbCkYIGCBkKiERn91iz5aGCgoUF4O8AToLekbKpLwdZtNKF+wxAew==", + "dev": true, + "dependencies": { + "@vuepress/client": "2.0.0-beta.48", + "@vuepress/markdown": "2.0.0-beta.48", + "@vuepress/shared": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "gray-matter": "^4.0.3", + "toml": "^3.0.0", + "vue": "^3.2.36" + } + }, + "node_modules/@vuepress/markdown": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-beta.48.tgz", + "integrity": "sha512-gbrVAgJRsQ5hxJM7yyoNv5NbtlgxW/YVyfhFG28aac5gyQ6p3WTOJjpH//F1H431gDVqXS+q+Umhb/vH2QWalg==", + "dev": true, + "dependencies": { + "@types/markdown-it": "^12.2.3", + "@vuepress/shared": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "markdown-it": "^13.0.1", + "markdown-it-anchor": "^8.6.4", + "markdown-it-emoji": "^2.0.2", + "mdurl": "^1.0.1" + } + }, + "node_modules/@vuepress/plugin-active-header-links": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-active-header-links/-/plugin-active-header-links-2.0.0-beta.48.tgz", + "integrity": "sha512-xNR3qTk9ECmYf5mvXhv2DpZu2VIxd6iVQ5Kvkw29zDjZc42uxo7QU9uIhAg6BOy0hNDFyn33DUxqlj7abpUf4w==", + "dev": true, + "dependencies": { + "@vuepress/client": "2.0.0-beta.48", + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "ts-debounce": "^4.0.0", + "vue": "^3.2.36", + "vue-router": "^4.0.15" + } + }, + "node_modules/@vuepress/plugin-back-to-top": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-back-to-top/-/plugin-back-to-top-2.0.0-beta.48.tgz", + "integrity": "sha512-TYmtNnE+WoKbI1DnUzKGEprp5CVfvisuZCOi0coEA4g1jrSoEX6hgO4i+k8621ZBmpIdmIhI2+saoVdqN2duUw==", + "dev": true, + "dependencies": { + "@vuepress/client": "2.0.0-beta.48", + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "ts-debounce": "^4.0.0", + "vue": "^3.2.36" + } + }, + "node_modules/@vuepress/plugin-container": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-container/-/plugin-container-2.0.0-beta.48.tgz", + "integrity": "sha512-EdPXZRmhjbfZdTMGCzyj5G3xbZEjh2VWuFNbNYy5K195OnF+gO/GOJmIso1fnqmRdBgkHQkwdOqz/bZ6CuJP/g==", + "dev": true, + "dependencies": { + "@types/markdown-it": "^12.2.3", + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/markdown": "2.0.0-beta.48", + "@vuepress/shared": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "markdown-it": "^13.0.1", + "markdown-it-container": "^3.0.0" + } + }, + "node_modules/@vuepress/plugin-external-link-icon": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-external-link-icon/-/plugin-external-link-icon-2.0.0-beta.48.tgz", + "integrity": "sha512-RXENrUGpE8L32bsRxrxepRclvz/RVRA6Wj1NLTBweitxpbJukRNTsCX9mD/8KwQWc3Rkf+Zv+k6NDe5rDPoLeg==", + "dev": true, + "dependencies": { + "@vuepress/client": "2.0.0-beta.48", + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/markdown": "2.0.0-beta.48", + "@vuepress/shared": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "vue": "^3.2.36" + } + }, + "node_modules/@vuepress/plugin-git": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-git/-/plugin-git-2.0.0-beta.48.tgz", + "integrity": "sha512-ycNGAl+O1kHErsPt7uWGsR0S/o09b7JZnssM2WxWJPA9E+MtSgm6YzQcV8uK22GF2OCrwtv2z/6cNLkGz+NDfA==", + "dev": true, + "dependencies": { + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "execa": "^5.1.1" + } + }, + "node_modules/@vuepress/plugin-medium-zoom": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-medium-zoom/-/plugin-medium-zoom-2.0.0-beta.48.tgz", + "integrity": "sha512-CQIJo/ndHYjrOBwyzp4TP6AfwNGi1aae9BATlIyXl/xxFqX4hD7DN6JqYJ78tbgPMCU5I3H5UY1RNd6dfV4T+A==", + "dev": true, + "dependencies": { + "@vuepress/client": "2.0.0-beta.48", + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "medium-zoom": "^1.0.6", + "vue": "^3.2.36" + } + }, + "node_modules/@vuepress/plugin-nprogress": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-nprogress/-/plugin-nprogress-2.0.0-beta.48.tgz", + "integrity": "sha512-qA6SZ/R9ufnMR6qQbTAqWGxtNOIzxrA3gopOaNuD8T+hGJVTnYeGwDFk2S30G5HuqgbECsYDQfomo6SOjyREZQ==", + "dev": true, + "dependencies": { + "@vuepress/client": "2.0.0-beta.48", + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "vue": "^3.2.36", + "vue-router": "^4.0.15" + } + }, + "node_modules/@vuepress/plugin-palette": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-palette/-/plugin-palette-2.0.0-beta.48.tgz", + "integrity": "sha512-zqWk2NV1gInPLqlHGgu7YO7dsRMJz28pMzcL7Z/SuI+rGu/MKqCSk6IBC/Fz7xO09XA+Ke8a+zxfVINnhpdH8Q==", + "dev": true, + "dependencies": { + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "chokidar": "^3.5.3" + } + }, + "node_modules/@vuepress/plugin-prismjs": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-prismjs/-/plugin-prismjs-2.0.0-beta.48.tgz", + "integrity": "sha512-xTdk3DEJmzuzeRcm0fZfJFLs6/oN2T/sm+KtSh7whVbHcgEKFdj0vHkiWswp3bnNWE3FHUwO1UQq9K21zEwpUw==", + "dev": true, + "dependencies": { + "@vuepress/core": "2.0.0-beta.48", + "prismjs": "^1.28.0" + } + }, + "node_modules/@vuepress/plugin-search": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-search/-/plugin-search-2.0.0-beta.48.tgz", + "integrity": "sha512-1ADG3Zw6CBwERiW5l3spoONrHT6pcOGzlEiOhjAEYcOv7edzaoGQTahpgGvCXiXY5b11Z9bsr13NgCgr0YMGIQ==", + "dev": true, + "dependencies": { + "@vuepress/client": "2.0.0-beta.48", + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/shared": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "chokidar": "^3.5.3", + "vue": "^3.2.36", + "vue-router": "^4.0.15" + } + }, + "node_modules/@vuepress/plugin-theme-data": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-theme-data/-/plugin-theme-data-2.0.0-beta.48.tgz", + "integrity": "sha512-7DH/tKiPg63wA77C9xNVF5Le5r1Apmd9mvz4NEeG0dhmuSPr456oM8aApE0s1XkY+vrmIXsTUjDK8+HvF8irUQ==", + "dev": true, + "dependencies": { + "@vue/devtools-api": "^6.1.4", + "@vuepress/client": "2.0.0-beta.48", + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/shared": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "vue": "^3.2.36" + } + }, + "node_modules/@vuepress/shared": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-beta.48.tgz", + "integrity": "sha512-0i3lklFroOAtaHWfCjyvwBe8u5Jl668C/aMe9MWrsQI2qv40LiExgm82nNxc3tD2hoKKVpIxRvWaKXbJI1VXjg==", + "dev": true, + "dependencies": { + "@vue/shared": "^3.2.36" + } + }, + "node_modules/@vuepress/theme-default": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/theme-default/-/theme-default-2.0.0-beta.48.tgz", + "integrity": "sha512-dJfqO1XW23es7d84B/iEOzKfwNtB0+UoG1PNOhDua2rPpDreOcO1sI2DntmOClYaRR/SB7zSdiSEynzRC5Nwrw==", + "dev": true, + "dependencies": { + "@vuepress/client": "2.0.0-beta.48", + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/plugin-active-header-links": "2.0.0-beta.48", + "@vuepress/plugin-back-to-top": "2.0.0-beta.48", + "@vuepress/plugin-container": "2.0.0-beta.48", + "@vuepress/plugin-external-link-icon": "2.0.0-beta.48", + "@vuepress/plugin-git": "2.0.0-beta.48", + "@vuepress/plugin-medium-zoom": "2.0.0-beta.48", + "@vuepress/plugin-nprogress": "2.0.0-beta.48", + "@vuepress/plugin-palette": "2.0.0-beta.48", + "@vuepress/plugin-prismjs": "2.0.0-beta.48", + "@vuepress/plugin-theme-data": "2.0.0-beta.48", + "@vuepress/shared": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "@vueuse/core": "^8.5.0", + "sass": "^1.52.1", + "vue": "^3.2.36", + "vue-router": "^4.0.15" + }, + "peerDependencies": { + "sass-loader": "^13.0.0" + }, + "peerDependenciesMeta": { + "sass-loader": { + "optional": true + } + } + }, + "node_modules/@vuepress/utils": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-beta.48.tgz", + "integrity": "sha512-Y0e3j0SHkPHMWnNlZZOcdN3G4zhdTIs63Ywy4IULFsrpKAihRIUcSe4Yry6lCJyYCCS/gebwc1fQYAmPuNkijg==", + "dev": true, + "dependencies": { + "@types/debug": "^4.1.7", + "@types/fs-extra": "^9.0.13", + "@vuepress/shared": "2.0.0-beta.48", + "chalk": "^4.1.2", + "debug": "^4.3.4", + "fs-extra": "^10.1.0", + "globby": "^11.0.4", + "hash-sum": "^2.0.0", + "ora": "^5.4.1", + "upath": "^2.0.1" + } + }, + "node_modules/@vueuse/core": { + "version": "8.7.4", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-8.7.4.tgz", + "integrity": "sha512-dQgxjb79PDcizlaclgCkCzNoqNv12PnbXxUOFL9VacakmD/ACoSMWwTpcG3HKoDoYyl2V3kSW/8AkvXGEYEGFA==", + "dev": true, + "dependencies": { + "@vueuse/metadata": "8.7.4", + "@vueuse/shared": "8.7.4", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.1.0", + "vue": "^2.6.0 || ^3.2.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "8.7.4", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-8.7.4.tgz", + "integrity": "sha512-CwEYS6/M6JDxk9D1mUsZq3F0VnYnf39rAxOytP58vb4BrhmPKEVfiSpvxuYcJimU9ccT/xjWhwBnsdGC2H9mIQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "8.7.4", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-8.7.4.tgz", + "integrity": "sha512-QhwTEd2Gr/8ZliWVEM8sbMUkXtVVV1Mt1mOkCnIbIN33D/V28FwGKUKqEPGZZCXuJchARnun/J1TAiT/UmZd1w==", + "dev": true, + "dependencies": { + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.1.0", + "vue": "^2.6.0 || ^3.2.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "optional": true, + "peer": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "optional": true, + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", + "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.20.3", + "caniuse-lite": "^1.0.30001335", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/balloon-css": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/balloon-css/-/balloon-css-1.2.0.tgz", + "integrity": "sha512-urXwkHgwp6GsXVF+it01485Z2Cj4pnW02ICnM0TemOlkKmCNnDLmyy+ZZiRXBpwldUXO+aRNr7Hdia4CBvXJ5A==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.20.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz", + "integrity": "sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001349", + "electron-to-chromium": "^1.4.147", + "escalade": "^3.1.1", + "node-releases": "^2.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/cac": { + "version": "6.7.12", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.12.tgz", + "integrity": "sha512-rM7E2ygtMkJqD9c7WnFU6fruFcN3xe4FM5yUmgxhZzIKJk4uHl9U/fhwdajGFQbQuv43FAUo1Fe8gX/oIKDeSA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001356", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001356.tgz", + "integrity": "sha512-/30854bktMLhxtjieIxsrJBfs2gTM1pel6MXKF3K+RdIVJZcsn2A2QdhsuR4/p9+R204fZw0zCBBhktX8xWuyQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "2.6.20", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", + "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==", + "dev": true + }, + "node_modules/dayjs": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.3.tgz", + "integrity": "sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.161", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.161.tgz", + "integrity": "sha512-sTjBRhqh6wFodzZtc5Iu8/R95OkwaPNn7tj/TaDU5nu/5EFiQDtADGAXdR4tJcTEHlYfJpHqigzJqHvPgehP8A==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/esbuild": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.49.tgz", + "integrity": "sha512-/TlVHhOaq7Yz8N1OJrjqM3Auzo5wjvHFLk+T8pIue+fhnhIMpfAzsG6PLVMbFveVxqD2WOp3QHei+52IMUNmCw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "esbuild-android-64": "0.14.49", + "esbuild-android-arm64": "0.14.49", + "esbuild-darwin-64": "0.14.49", + "esbuild-darwin-arm64": "0.14.49", + "esbuild-freebsd-64": "0.14.49", + "esbuild-freebsd-arm64": "0.14.49", + "esbuild-linux-32": "0.14.49", + "esbuild-linux-64": "0.14.49", + "esbuild-linux-arm": "0.14.49", + "esbuild-linux-arm64": "0.14.49", + "esbuild-linux-mips64le": "0.14.49", + "esbuild-linux-ppc64le": "0.14.49", + "esbuild-linux-riscv64": "0.14.49", + "esbuild-linux-s390x": "0.14.49", + "esbuild-netbsd-64": "0.14.49", + "esbuild-openbsd-64": "0.14.49", + "esbuild-sunos-64": "0.14.49", + "esbuild-windows-32": "0.14.49", + "esbuild-windows-64": "0.14.49", + "esbuild-windows-arm64": "0.14.49" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.49.tgz", + "integrity": "sha512-vYsdOTD+yi+kquhBiFWl3tyxnj2qZJsl4tAqwhT90ktUdnyTizgle7TjNx6Ar1bN7wcwWqZ9QInfdk2WVagSww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.49.tgz", + "integrity": "sha512-g2HGr/hjOXCgSsvQZ1nK4nW/ei8JUx04Li74qub9qWrStlysaVmadRyTVuW32FGIpLQyc5sUjjZopj49eGGM2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.49.tgz", + "integrity": "sha512-3rvqnBCtX9ywso5fCHixt2GBCUsogNp9DjGmvbBohh31Ces34BVzFltMSxJpacNki96+WIcX5s/vum+ckXiLYg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.49.tgz", + "integrity": "sha512-XMaqDxO846srnGlUSJnwbijV29MTKUATmOLyQSfswbK/2X5Uv28M9tTLUJcKKxzoo9lnkYPsx2o8EJcTYwCs/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.49.tgz", + "integrity": "sha512-NJ5Q6AjV879mOHFri+5lZLTp5XsO2hQ+KSJYLbfY9DgCu8s6/Zl2prWXVANYTeCDLlrIlNNYw8y34xqyLDKOmQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.49.tgz", + "integrity": "sha512-lFLtgXnAc3eXYqj5koPlBZvEbBSOSUbWO3gyY/0+4lBdRqELyz4bAuamHvmvHW5swJYL7kngzIZw6kdu25KGOA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.49.tgz", + "integrity": "sha512-zTTH4gr2Kb8u4QcOpTDVn7Z8q7QEIvFl/+vHrI3cF6XOJS7iEI1FWslTo3uofB2+mn6sIJEQD9PrNZKoAAMDiA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.49.tgz", + "integrity": "sha512-hYmzRIDzFfLrB5c1SknkxzM8LdEUOusp6M2TnuQZJLRtxTgyPnZZVtyMeCLki0wKgYPXkFsAVhi8vzo2mBNeTg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.49.tgz", + "integrity": "sha512-iE3e+ZVv1Qz1Sy0gifIsarJMQ89Rpm9mtLSRtG3AH0FPgAzQ5Z5oU6vYzhc/3gSPi2UxdCOfRhw2onXuFw/0lg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.49.tgz", + "integrity": "sha512-KLQ+WpeuY+7bxukxLz5VgkAAVQxUv67Ft4DmHIPIW+2w3ObBPQhqNoeQUHxopoW/aiOn3m99NSmSV+bs4BSsdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.49.tgz", + "integrity": "sha512-n+rGODfm8RSum5pFIqFQVQpYBw+AztL8s6o9kfx7tjfK0yIGF6tm5HlG6aRjodiiKkH2xAiIM+U4xtQVZYU4rA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.49.tgz", + "integrity": "sha512-WP9zR4HX6iCBmMFH+XHHng2LmdoIeUmBpL4aL2TR8ruzXyT4dWrJ5BSbT8iNo6THN8lod6GOmYDLq/dgZLalGw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.49.tgz", + "integrity": "sha512-h66ORBz+Dg+1KgLvzTVQEA1LX4XBd1SK0Fgbhhw4akpG/YkN8pS6OzYI/7SGENiN6ao5hETRDSkVcvU9NRtkMQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.49.tgz", + "integrity": "sha512-DhrUoFVWD+XmKO1y7e4kNCqQHPs6twz6VV6Uezl/XHYGzM60rBewBF5jlZjG0nCk5W/Xy6y1xWeopkrhFFM0sQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.49.tgz", + "integrity": "sha512-BXaUwFOfCy2T+hABtiPUIpWjAeWK9P8O41gR4Pg73hpzoygVGnj0nI3YK4SJhe52ELgtdgWP/ckIkbn2XaTxjQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.49.tgz", + "integrity": "sha512-lP06UQeLDGmVPw9Rg437Btu6J9/BmyhdoefnQ4gDEJTtJvKtQaUcOQrhjTq455ouZN4EHFH1h28WOJVANK41kA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.49.tgz", + "integrity": "sha512-4c8Zowp+V3zIWje329BeLbGh6XI9c/rqARNaj5yPHdC61pHI9UNdDxT3rePPJeWcEZVKjkiAS6AP6kiITp7FSw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.49.tgz", + "integrity": "sha512-q7Rb+J9yHTeKr9QTPDYkqfkEj8/kcKz9lOabDuvEXpXuIcosWCJgo5Z7h/L4r7rbtTH4a8U2FGKb6s1eeOHmJA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.49.tgz", + "integrity": "sha512-+Cme7Ongv0UIUTniPqfTX6mJ8Deo7VXw9xN0yJEN1lQMHDppTNmKwAM3oGbD/Vqff+07K2gN0WfNkMohmG+dVw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.49.tgz", + "integrity": "sha512-v+HYNAXzuANrCbbLFJ5nmO3m5y2PGZWLe3uloAkLt87aXiO2mZr3BTmacZdjwNkNEHuH3bNtN8cak+mzVjVPfA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dev": true, + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "dev": true + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/linkify-it": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", + "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", + "dev": true, + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/markdown-it": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", + "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "~3.0.1", + "linkify-it": "^4.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it-anchor": { + "version": "8.6.4", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.4.tgz", + "integrity": "sha512-Ul4YVYZNxMJYALpKtu+ZRdrryYt/GlQ5CK+4l1bp/gWXOG2QWElt6AqF3Mih/wfUKdZbNAZVXGR73/n6U/8img==", + "dev": true, + "peerDependencies": { + "@types/markdown-it": "*", + "markdown-it": "*" + } + }, + "node_modules/markdown-it-container": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/markdown-it-container/-/markdown-it-container-3.0.0.tgz", + "integrity": "sha512-y6oKTq4BB9OQuY/KLfk/O3ysFhB3IMYoIWhGJEidXt1NQFocFK2sA2t0NYZAMyMShAGL6x5OPIbrmXPIqaN9rw==", + "dev": true + }, + "node_modules/markdown-it-emoji": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/markdown-it-emoji/-/markdown-it-emoji-2.0.2.tgz", + "integrity": "sha512-zLftSaNrKuYl0kR5zm4gxXjHaOI3FAOEaloKmRA5hijmJZvSjmxcokOLlzycb/HXlUFWzXqpIEoyEMCE4i9MvQ==", + "dev": true + }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, + "node_modules/medium-zoom": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.0.6.tgz", + "integrity": "sha512-UdiUWfvz9fZMg1pzf4dcuqA0W079o0mpqbTnOz5ip4VGYX96QjmbM+OgOU/0uOzAytxC0Ny4z+VcYQnhdifimg==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/node-releases": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prismjs": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz", + "integrity": "sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "2.75.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.75.6.tgz", + "integrity": "sha512-OEf0TgpC9vU6WGROJIk1JA3LR5vk/yvqlzxqdrE2CzzXnqKXNzbAwlWUXis8RS3ZPe7LAq+YUxsRa0l3r27MLA==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/sass": { + "version": "1.52.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.52.3.tgz", + "integrity": "sha512-LNNPJ9lafx+j1ArtA7GyEJm9eawXN8KlA1+5dF6IZyoONg1Tyo/g+muOsENWJH/2Q1FHbbV4UwliU0cXMa/VIA==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/sass-loader": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.0.2.tgz", + "integrity": "sha512-BbiqbVmbfJaWVeOOAu2o7DhYWtcNmTfvroVgFXa6k2hHheMxNAeDHLNoDy/Q5aoaVlz0LH+MbMktKwm9vN/j8Q==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.1.tgz", + "integrity": "sha512-+ahUAE+iheqBTDxXhTisdA8hgvbEG1hHOQ9xmNjeUJSoi6DU/gMrKNcfZjHkyY6Alnuyc+ikYJaxxfHkT3+WuQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz", + "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.7", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.7.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", + "dev": true + }, + "node_modules/ts-debounce": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ts-debounce/-/ts-debounce-4.0.0.tgz", + "integrity": "sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==", + "dev": true + }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/vite": { + "version": "2.9.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.12.tgz", + "integrity": "sha512-suxC36dQo9Rq1qMB2qiRorNJtJAdxguu5TMvBHOc/F370KvqAe9t48vYp+/TbPKRNrMh/J55tOUmkuIqstZaew==", + "dev": true, + "dependencies": { + "esbuild": "^0.14.27", + "postcss": "^8.4.13", + "resolve": "^1.22.0", + "rollup": "^2.59.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": ">=12.2.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "less": "*", + "sass": "*", + "stylus": "*" + }, + "peerDependenciesMeta": { + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.37.tgz", + "integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==", + "dev": true, + "dependencies": { + "@vue/compiler-dom": "3.2.37", + "@vue/compiler-sfc": "3.2.37", + "@vue/runtime-dom": "3.2.37", + "@vue/server-renderer": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "node_modules/vue-demi": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.1.tgz", + "integrity": "sha512-xmkJ56koG3ptpLnpgmIzk9/4nFf4CqduSJbUM0OdPoU87NwRuZ6x49OLhjSa/fC15fV+5CbEnrxU4oyE022svg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-router": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.2.tgz", + "integrity": "sha512-5BP1qXFncVRwgV/XnqzsKApdMjQPqWIpoUBdL1ynz8HyLxIX/UDAx7Ql2BjmA5CXT/p61JfZvkpiFWFpaqcfag==", + "dev": true, + "dependencies": { + "@vue/devtools-api": "^6.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vuepress": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/vuepress/-/vuepress-2.0.0-beta.48.tgz", + "integrity": "sha512-m1CzjgMrHdrOzNr3eMoFrdqHlp3wK23TBIHZJtm9tDnwg4OF59FG6y6gGoBLo+zpfzVOwi/V8FR13ehiQwG/3A==", + "dev": true, + "dependencies": { + "vuepress-vite": "2.0.0-beta.48" + }, + "bin": { + "vuepress": "bin/vuepress.js" + } + }, + "node_modules/vuepress-plugin-copy-code2": { + "version": "2.0.0-beta.84", + "resolved": "https://registry.npmjs.org/vuepress-plugin-copy-code2/-/vuepress-plugin-copy-code2-2.0.0-beta.84.tgz", + "integrity": "sha512-jSI/k4HLSTr+0RhsJ+omr3RsrUrlBAhtdgIQYGdhy8Wm2g5NjMXjQZ3d7rs+gSIvQH1RDj2wRorV26yEKARw3g==", + "dev": true, + "dependencies": { + "@vuepress/client": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "balloon-css": "^1.2.0", + "vue": "^3.2.37", + "vue-router": "^4.0.16", + "vuepress-plugin-sass-palette": "2.0.0-beta.84", + "vuepress-shared": "2.0.0-beta.84" + }, + "peerDependencies": { + "sass-loader": "^13.0.0" + }, + "peerDependenciesMeta": { + "sass-loader": { + "optional": true + } + } + }, + "node_modules/vuepress-plugin-redirect": { + "version": "2.0.0-beta.86", + "resolved": "https://registry.npmjs.org/vuepress-plugin-redirect/-/vuepress-plugin-redirect-2.0.0-beta.86.tgz", + "integrity": "sha512-kxPyPAhH1U0UJdsq8qLMu4UDTaNxzPUZWalHGNYE/EZ4EYA0uSlkobjvppFr3baR9KpNyi/DlnW/SOSCw6EwQg==", + "dev": true, + "dependencies": { + "@vuepress/cli": "2.0.0-beta.49", + "@vuepress/core": "2.0.0-beta.49", + "@vuepress/shared": "2.0.0-beta.49", + "@vuepress/utils": "2.0.0-beta.49", + "cac": "^6.7.12", + "vuepress-shared": "2.0.0-beta.86" + }, + "bin": { + "vp-redirect": "lib/cli/index.js" + } + }, + "node_modules/vuepress-plugin-redirect/node_modules/@vuepress/cli": { + "version": "2.0.0-beta.49", + "resolved": "https://registry.npmjs.org/@vuepress/cli/-/cli-2.0.0-beta.49.tgz", + "integrity": "sha512-3RtuZvtLIGXEtsLgc3AnDr4jxiFeFDWfNw6MTb22YwuttBr5h5pZO/F8XMyP9+tEi73q3/l4keNQftU4msHysQ==", + "dev": true, + "dependencies": { + "@vuepress/core": "2.0.0-beta.49", + "@vuepress/shared": "2.0.0-beta.49", + "@vuepress/utils": "2.0.0-beta.49", + "cac": "^6.7.12", + "chokidar": "^3.5.3", + "envinfo": "^7.8.1", + "esbuild": "^0.14.49" + }, + "bin": { + "vuepress-cli": "bin/vuepress.js" + } + }, + "node_modules/vuepress-plugin-redirect/node_modules/@vuepress/client": { + "version": "2.0.0-beta.49", + "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-beta.49.tgz", + "integrity": "sha512-zfGlCAF/LwDOrZXZPqADsMgWRuH/2GFOGSOCvt7ZUZHnSrYBdK2FOez/ksWL8EwGNLsRLB8ny1IachMwTew5og==", + "dev": true, + "dependencies": { + "@vue/devtools-api": "^6.2.0", + "@vuepress/shared": "2.0.0-beta.49", + "vue": "^3.2.37", + "vue-router": "^4.1.2" + } + }, + "node_modules/vuepress-plugin-redirect/node_modules/@vuepress/core": { + "version": "2.0.0-beta.49", + "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-beta.49.tgz", + "integrity": "sha512-40J74qGOPqF9yGdXdzPD1kW9mv5/jfJenmhsH1xaErPsr6qIM8jcraVRC+R7NoVTIecRk9cC9MJcDRnLmDDiAg==", + "dev": true, + "dependencies": { + "@vuepress/client": "2.0.0-beta.49", + "@vuepress/markdown": "2.0.0-beta.49", + "@vuepress/shared": "2.0.0-beta.49", + "@vuepress/utils": "2.0.0-beta.49", + "vue": "^3.2.37" + } + }, + "node_modules/vuepress-plugin-redirect/node_modules/@vuepress/markdown": { + "version": "2.0.0-beta.49", + "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-beta.49.tgz", + "integrity": "sha512-aAw41NArV5leIpZOFmElxzRG29LDdEQe7oIcZtIvKPhVmEfg9/mgx4ea2OqY5DaBvEhkG42SojjKvmHiJKrwJw==", + "dev": true, + "dependencies": { + "@mdit-vue/plugin-component": "^0.6.0", + "@mdit-vue/plugin-frontmatter": "^0.6.0", + "@mdit-vue/plugin-headers": "^0.6.0", + "@mdit-vue/plugin-sfc": "^0.6.0", + "@mdit-vue/plugin-title": "^0.6.0", + "@mdit-vue/plugin-toc": "^0.6.0", + "@mdit-vue/shared": "^0.6.0", + "@mdit-vue/types": "^0.6.0", + "@types/markdown-it": "^12.2.3", + "@types/markdown-it-emoji": "^2.0.2", + "@vuepress/shared": "2.0.0-beta.49", + "@vuepress/utils": "2.0.0-beta.49", + "markdown-it": "^13.0.1", + "markdown-it-anchor": "^8.6.4", + "markdown-it-emoji": "^2.0.2", + "mdurl": "^1.0.1" + } + }, + "node_modules/vuepress-plugin-redirect/node_modules/@vuepress/plugin-git": { + "version": "2.0.0-beta.49", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-git/-/plugin-git-2.0.0-beta.49.tgz", + "integrity": "sha512-CjaBYWBAkQmlpx5v+mp2vsoRxqRTi/mSvXy8im/ftc8zX/sVT4V1LBWX1IsDQn1VpWnArlfAsFd+BrmxzPFePA==", + "dev": true, + "dependencies": { + "@vuepress/core": "2.0.0-beta.49", + "@vuepress/utils": "2.0.0-beta.49", + "execa": "^5.1.1" + } + }, + "node_modules/vuepress-plugin-redirect/node_modules/@vuepress/shared": { + "version": "2.0.0-beta.49", + "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-beta.49.tgz", + "integrity": "sha512-yoUgOtRUrIfe0O1HMTIMj0NYU3tAiUZ4rwVEtemtGa7/RK7qIZdBpAfv08Ve2CUpa3wrMb1Pux1aBsiz1EQx+g==", + "dev": true, + "dependencies": { + "@vue/shared": "^3.2.37" + } + }, + "node_modules/vuepress-plugin-redirect/node_modules/@vuepress/utils": { + "version": "2.0.0-beta.49", + "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-beta.49.tgz", + "integrity": "sha512-t5i0V9FqpKLGlu2kMP/Y9+wdgEmsD2yQAMGojxpMoFhJBmqn2L9Rkk4WYzHKzPGDkm1KbBFzYQqjAhZQ7xtY1A==", + "dev": true, + "dependencies": { + "@types/debug": "^4.1.7", + "@types/fs-extra": "^9.0.13", + "@vuepress/shared": "2.0.0-beta.49", + "chalk": "^4.1.2", + "debug": "^4.3.4", + "fs-extra": "^10.1.0", + "globby": "^11.0.4", + "hash-sum": "^2.0.0", + "ora": "^5.4.1", + "upath": "^2.0.1" + } + }, + "node_modules/vuepress-plugin-redirect/node_modules/vuepress-shared": { + "version": "2.0.0-beta.86", + "resolved": "https://registry.npmjs.org/vuepress-shared/-/vuepress-shared-2.0.0-beta.86.tgz", + "integrity": "sha512-8XjUscW4dmP59WxqhPg42okoarlybMNXAyi9k5J0KeQLHTeDMySSzqrYkF/iQdv63PKE3JFIhSRhUsaK0yedMw==", + "dev": true, + "dependencies": { + "@vuepress/client": "2.0.0-beta.49", + "@vuepress/plugin-git": "2.0.0-beta.49", + "@vuepress/shared": "2.0.0-beta.49", + "@vuepress/utils": "2.0.0-beta.49", + "dayjs": "^1.11.3", + "execa": "^5.1.1", + "ora": "^5.4.1", + "vue": "^3.2.37", + "vue-router": "^4.1.2" + } + }, + "node_modules/vuepress-plugin-sass-palette": { + "version": "2.0.0-beta.84", + "resolved": "https://registry.npmjs.org/vuepress-plugin-sass-palette/-/vuepress-plugin-sass-palette-2.0.0-beta.84.tgz", + "integrity": "sha512-cdl/caVQk3hWvpzO9dcy+KfFa/0pHCvkSZy+xOk7lAUL7srVQnCIEs1ii7D+/ngmyve8+JENy2+Ch15exYibJA==", + "dev": true, + "dependencies": { + "@vuepress/utils": "2.0.0-beta.48", + "chokidar": "^3.5.3", + "sass": "^1.52.3", + "vuepress-shared": "2.0.0-beta.84" + }, + "peerDependencies": { + "sass-loader": "^13.0.0" + }, + "peerDependenciesMeta": { + "sass-loader": { + "optional": true + } + } + }, + "node_modules/vuepress-shared": { + "version": "2.0.0-beta.84", + "resolved": "https://registry.npmjs.org/vuepress-shared/-/vuepress-shared-2.0.0-beta.84.tgz", + "integrity": "sha512-yfN2ng7X0oFlIPLX3AJMK8PuQYrqcKrKa8Gm77sH3bGKJjhKBr7UO9jXh/io3vBIoqd4vjiKHYyOHJqB/nIWoQ==", + "dev": true, + "dependencies": { + "@vuepress/client": "2.0.0-beta.48", + "@vuepress/plugin-git": "2.0.0-beta.48", + "@vuepress/plugin-theme-data": "2.0.0-beta.48", + "@vuepress/shared": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "dayjs": "^1.11.3", + "execa": "^5.1.1", + "ora": "^5.4.1", + "vue": "^3.2.37", + "vue-router": "^4.0.16" + } + }, + "node_modules/vuepress-vite": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/vuepress-vite/-/vuepress-vite-2.0.0-beta.48.tgz", + "integrity": "sha512-1TKEXg26W7VlTBU9J6BcJTW/NFtzkAveM33jccVs6HieYgvK7lyTpbhs5eRu9fUWawGR8ULa+b5kdk0dSLpjew==", + "dev": true, + "dependencies": { + "@vuepress/bundler-vite": "2.0.0-beta.48", + "@vuepress/cli": "2.0.0-beta.48", + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/theme-default": "2.0.0-beta.48" + }, + "bin": { + "vuepress": "bin/vuepress.js", + "vuepress-vite": "bin/vuepress.js" + }, + "peerDependencies": { + "@vuepress/client": "^2.0.0-beta.42", + "vue": "^3.2.36" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webpack": { + "version": "5.73.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.73.0.tgz", + "integrity": "sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.9.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + } + }, + "dependencies": { + "@babel/parser": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", + "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", + "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==", + "dev": true, + "optional": true, + "peer": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "optional": true, + "peer": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true, + "optional": true, + "peer": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@mdit-vue/plugin-component": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-component/-/plugin-component-0.6.0.tgz", + "integrity": "sha512-S/Dd0eoOipbUAMdJ6A7M20dDizJxbtGAcL6T1iiJ0cEzjTrHP1kRT421+JMGPL8gcdsrIxgVSW8bI/R6laqBtA==", + "dev": true, + "requires": { + "@types/markdown-it": "^12.2.3", + "markdown-it": "^13.0.1" + } + }, + "@mdit-vue/plugin-frontmatter": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-frontmatter/-/plugin-frontmatter-0.6.0.tgz", + "integrity": "sha512-cRunxy0q1gcqxUHAAiV8hMKh2qZOTDKXt8YOWfWNtf7IzaAL0v/nCOfh+O7AsHRmyc25Th8sL3H85HKWnNJtdw==", + "dev": true, + "requires": { + "@mdit-vue/types": "0.6.0", + "@types/markdown-it": "^12.2.3", + "gray-matter": "^4.0.3", + "markdown-it": "^13.0.1" + } + }, + "@mdit-vue/plugin-headers": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-headers/-/plugin-headers-0.6.0.tgz", + "integrity": "sha512-pg56w9/UooYuIZIoM0iQ021hrXt450fuRG3duxcwngw3unmE80rkvG3C0lT9ZnNXHSSYC9vGWUJh6EEN4nB34A==", + "dev": true, + "requires": { + "@mdit-vue/shared": "0.6.0", + "@mdit-vue/types": "0.6.0", + "@types/markdown-it": "^12.2.3", + "markdown-it": "^13.0.1" + } + }, + "@mdit-vue/plugin-sfc": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-sfc/-/plugin-sfc-0.6.0.tgz", + "integrity": "sha512-R7mwUz2MxEopVQwpcOqCcqqvKx3ibRNcZ7QC31w4VblRb3Srk1st1UuGwHJxZ6Biro8ZWdPpMfpSsSk+2G+mIg==", + "dev": true, + "requires": { + "@mdit-vue/types": "0.6.0", + "@types/markdown-it": "^12.2.3", + "markdown-it": "^13.0.1" + } + }, + "@mdit-vue/plugin-title": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-title/-/plugin-title-0.6.0.tgz", + "integrity": "sha512-K2qUIrHmCp9w+/p1lWfkr808+Ge6FksM1ny/siiXHMHB0enArUd7G7SaEtro8JRb/hewd9qKq5xTOSWN2Q5jow==", + "dev": true, + "requires": { + "@mdit-vue/shared": "0.6.0", + "@mdit-vue/types": "0.6.0", + "@types/markdown-it": "^12.2.3", + "markdown-it": "^13.0.1" + } + }, + "@mdit-vue/plugin-toc": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-toc/-/plugin-toc-0.6.0.tgz", + "integrity": "sha512-5pgKY2++3w2/9Pqpgz7mZUiXs6jDcEyFPcf14QdiqSZ2eL+4VLuupcoC4JIDF+mAFHt+TJCfhk3oeG8Y6s6TBg==", + "dev": true, + "requires": { + "@mdit-vue/shared": "0.6.0", + "@mdit-vue/types": "0.6.0", + "@types/markdown-it": "^12.2.3", + "markdown-it": "^13.0.1" + } + }, + "@mdit-vue/shared": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mdit-vue/shared/-/shared-0.6.0.tgz", + "integrity": "sha512-RtV1P8jrEV/cl0WckOvpefiEWScw7omCQrIEtorlagG2XmnI9YbxMkLD53ETscA7lTVzqhGyzfoSrAiPi0Sjnw==", + "dev": true, + "requires": { + "@mdit-vue/types": "0.6.0", + "@types/markdown-it": "^12.2.3", + "markdown-it": "^13.0.1" + } + }, + "@mdit-vue/types": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mdit-vue/types/-/types-0.6.0.tgz", + "integrity": "sha512-2Gf6MkEmoHrvO/IJsz48T+Ns9lW17ReC1vdhtCUGSCv0fFCm/L613uu/hpUrHuT3jTQHP90LcbXTQB2w4L1G8w==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dev": true, + "requires": { + "@types/ms": "*" + } + }, + "@types/eslint": { + "version": "8.4.3", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.3.tgz", + "integrity": "sha512-YP1S7YJRMPs+7KZKDb9G63n8YejIwW9BALq7a5j2+H4yl6iOv9CB29edho+cuFRrvmJbbaH2yiVChKLJVysDGw==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true, + "optional": true, + "peer": true + }, + "@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true, + "optional": true, + "peer": true + }, + "@types/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==", + "dev": true + }, + "@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "dev": true, + "requires": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "@types/markdown-it-emoji": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it-emoji/-/markdown-it-emoji-2.0.2.tgz", + "integrity": "sha512-2ln8Wjbcj/0oRi/6VnuMeWEHHuK8uapFttvcLmDIe1GKCsFBLOLBX+D+xhDa9oWOQV0IpvxwrSfKKssAqqroog==", + "dev": true, + "requires": { + "@types/markdown-it": "*" + } + }, + "@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", + "dev": true + }, + "@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true + }, + "@types/node": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", + "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==", + "dev": true + }, + "@vitejs/plugin-vue": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.3.3.tgz", + "integrity": "sha512-SmQLDyhz+6lGJhPELsBdzXGc+AcaT8stgkbiTFGpXPe8Tl1tJaBw1A6pxDqDuRsVkD8uscrkx3hA7QDOoKYtyw==", + "dev": true, + "requires": {} + }, + "@vue/compiler-core": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.37.tgz", + "integrity": "sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==", + "dev": true, + "requires": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.37", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "@vue/compiler-dom": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz", + "integrity": "sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==", + "dev": true, + "requires": { + "@vue/compiler-core": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "@vue/compiler-sfc": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz", + "integrity": "sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==", + "dev": true, + "requires": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.37", + "@vue/compiler-dom": "3.2.37", + "@vue/compiler-ssr": "3.2.37", + "@vue/reactivity-transform": "3.2.37", + "@vue/shared": "3.2.37", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "@vue/compiler-ssr": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz", + "integrity": "sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==", + "dev": true, + "requires": { + "@vue/compiler-dom": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "@vue/devtools-api": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.2.1.tgz", + "integrity": "sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ==", + "dev": true + }, + "@vue/reactivity": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.37.tgz", + "integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==", + "dev": true, + "requires": { + "@vue/shared": "3.2.37" + } + }, + "@vue/reactivity-transform": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz", + "integrity": "sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==", + "dev": true, + "requires": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.37", + "@vue/shared": "3.2.37", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "@vue/runtime-core": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.37.tgz", + "integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==", + "dev": true, + "requires": { + "@vue/reactivity": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "@vue/runtime-dom": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz", + "integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==", + "dev": true, + "requires": { + "@vue/runtime-core": "3.2.37", + "@vue/shared": "3.2.37", + "csstype": "^2.6.8" + } + }, + "@vue/server-renderer": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.37.tgz", + "integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==", + "dev": true, + "requires": { + "@vue/compiler-ssr": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "@vue/shared": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.37.tgz", + "integrity": "sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==", + "dev": true + }, + "@vuepress/bundler-vite": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/bundler-vite/-/bundler-vite-2.0.0-beta.48.tgz", + "integrity": "sha512-ORT1cY2ScBWVuN/oCa5z0GqkbpdDmy6Pf0oe3GdiPA/w0kUbKeUPrWGDGHINqrSyvN0h5GbmLbvw6jSeUr2gAQ==", + "dev": true, + "requires": { + "@vitejs/plugin-vue": "^2.3.3", + "@vuepress/client": "2.0.0-beta.48", + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/shared": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "autoprefixer": "^10.4.7", + "connect-history-api-fallback": "^1.6.0", + "postcss": "^8.4.14", + "rollup": "^2.75.0", + "vite": "~2.9.9", + "vue": "^3.2.36", + "vue-router": "^4.0.15" + } + }, + "@vuepress/cli": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/cli/-/cli-2.0.0-beta.48.tgz", + "integrity": "sha512-nsLTNyQqKpwZXNrP0rJnDfvoBHm0KtdgLUIq5mfib9DTMic0ziaBUlfUvavcz18ovg3MwtLSUQbSjIsQskdaIw==", + "dev": true, + "requires": { + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/shared": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "cac": "^6.7.12", + "chokidar": "^3.5.3", + "envinfo": "^7.8.1", + "esbuild": "^0.14.41" + } + }, + "@vuepress/client": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-beta.48.tgz", + "integrity": "sha512-XqTmoNqgJuO5IpiEQl3xZOFVZ/oXxCk5LNg+432/4hOTz92VdzOn1KNIQFmWxZaQ6s+8v6BimqRi0ZxMCwQ+Pg==", + "dev": true, + "requires": { + "@vue/devtools-api": "^6.1.4", + "@vuepress/shared": "2.0.0-beta.48", + "vue": "^3.2.36", + "vue-router": "^4.0.15" + } + }, + "@vuepress/core": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-beta.48.tgz", + "integrity": "sha512-J9fge3oV5amAkx2g8TOPp8EpHyFgm6jy/FbCkYIGCBkKiERn91iz5aGCgoUF4O8AToLekbKpLwdZtNKF+wxAew==", + "dev": true, + "requires": { + "@vuepress/client": "2.0.0-beta.48", + "@vuepress/markdown": "2.0.0-beta.48", + "@vuepress/shared": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "gray-matter": "^4.0.3", + "toml": "^3.0.0", + "vue": "^3.2.36" + } + }, + "@vuepress/markdown": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-beta.48.tgz", + "integrity": "sha512-gbrVAgJRsQ5hxJM7yyoNv5NbtlgxW/YVyfhFG28aac5gyQ6p3WTOJjpH//F1H431gDVqXS+q+Umhb/vH2QWalg==", + "dev": true, + "requires": { + "@types/markdown-it": "^12.2.3", + "@vuepress/shared": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "markdown-it": "^13.0.1", + "markdown-it-anchor": "^8.6.4", + "markdown-it-emoji": "^2.0.2", + "mdurl": "^1.0.1" + } + }, + "@vuepress/plugin-active-header-links": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-active-header-links/-/plugin-active-header-links-2.0.0-beta.48.tgz", + "integrity": "sha512-xNR3qTk9ECmYf5mvXhv2DpZu2VIxd6iVQ5Kvkw29zDjZc42uxo7QU9uIhAg6BOy0hNDFyn33DUxqlj7abpUf4w==", + "dev": true, + "requires": { + "@vuepress/client": "2.0.0-beta.48", + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "ts-debounce": "^4.0.0", + "vue": "^3.2.36", + "vue-router": "^4.0.15" + } + }, + "@vuepress/plugin-back-to-top": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-back-to-top/-/plugin-back-to-top-2.0.0-beta.48.tgz", + "integrity": "sha512-TYmtNnE+WoKbI1DnUzKGEprp5CVfvisuZCOi0coEA4g1jrSoEX6hgO4i+k8621ZBmpIdmIhI2+saoVdqN2duUw==", + "dev": true, + "requires": { + "@vuepress/client": "2.0.0-beta.48", + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "ts-debounce": "^4.0.0", + "vue": "^3.2.36" + } + }, + "@vuepress/plugin-container": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-container/-/plugin-container-2.0.0-beta.48.tgz", + "integrity": "sha512-EdPXZRmhjbfZdTMGCzyj5G3xbZEjh2VWuFNbNYy5K195OnF+gO/GOJmIso1fnqmRdBgkHQkwdOqz/bZ6CuJP/g==", + "dev": true, + "requires": { + "@types/markdown-it": "^12.2.3", + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/markdown": "2.0.0-beta.48", + "@vuepress/shared": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "markdown-it": "^13.0.1", + "markdown-it-container": "^3.0.0" + } + }, + "@vuepress/plugin-external-link-icon": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-external-link-icon/-/plugin-external-link-icon-2.0.0-beta.48.tgz", + "integrity": "sha512-RXENrUGpE8L32bsRxrxepRclvz/RVRA6Wj1NLTBweitxpbJukRNTsCX9mD/8KwQWc3Rkf+Zv+k6NDe5rDPoLeg==", + "dev": true, + "requires": { + "@vuepress/client": "2.0.0-beta.48", + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/markdown": "2.0.0-beta.48", + "@vuepress/shared": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "vue": "^3.2.36" + } + }, + "@vuepress/plugin-git": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-git/-/plugin-git-2.0.0-beta.48.tgz", + "integrity": "sha512-ycNGAl+O1kHErsPt7uWGsR0S/o09b7JZnssM2WxWJPA9E+MtSgm6YzQcV8uK22GF2OCrwtv2z/6cNLkGz+NDfA==", + "dev": true, + "requires": { + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "execa": "^5.1.1" + } + }, + "@vuepress/plugin-medium-zoom": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-medium-zoom/-/plugin-medium-zoom-2.0.0-beta.48.tgz", + "integrity": "sha512-CQIJo/ndHYjrOBwyzp4TP6AfwNGi1aae9BATlIyXl/xxFqX4hD7DN6JqYJ78tbgPMCU5I3H5UY1RNd6dfV4T+A==", + "dev": true, + "requires": { + "@vuepress/client": "2.0.0-beta.48", + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "medium-zoom": "^1.0.6", + "vue": "^3.2.36" + } + }, + "@vuepress/plugin-nprogress": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-nprogress/-/plugin-nprogress-2.0.0-beta.48.tgz", + "integrity": "sha512-qA6SZ/R9ufnMR6qQbTAqWGxtNOIzxrA3gopOaNuD8T+hGJVTnYeGwDFk2S30G5HuqgbECsYDQfomo6SOjyREZQ==", + "dev": true, + "requires": { + "@vuepress/client": "2.0.0-beta.48", + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "vue": "^3.2.36", + "vue-router": "^4.0.15" + } + }, + "@vuepress/plugin-palette": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-palette/-/plugin-palette-2.0.0-beta.48.tgz", + "integrity": "sha512-zqWk2NV1gInPLqlHGgu7YO7dsRMJz28pMzcL7Z/SuI+rGu/MKqCSk6IBC/Fz7xO09XA+Ke8a+zxfVINnhpdH8Q==", + "dev": true, + "requires": { + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "chokidar": "^3.5.3" + } + }, + "@vuepress/plugin-prismjs": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-prismjs/-/plugin-prismjs-2.0.0-beta.48.tgz", + "integrity": "sha512-xTdk3DEJmzuzeRcm0fZfJFLs6/oN2T/sm+KtSh7whVbHcgEKFdj0vHkiWswp3bnNWE3FHUwO1UQq9K21zEwpUw==", + "dev": true, + "requires": { + "@vuepress/core": "2.0.0-beta.48", + "prismjs": "^1.28.0" + } + }, + "@vuepress/plugin-search": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-search/-/plugin-search-2.0.0-beta.48.tgz", + "integrity": "sha512-1ADG3Zw6CBwERiW5l3spoONrHT6pcOGzlEiOhjAEYcOv7edzaoGQTahpgGvCXiXY5b11Z9bsr13NgCgr0YMGIQ==", + "dev": true, + "requires": { + "@vuepress/client": "2.0.0-beta.48", + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/shared": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "chokidar": "^3.5.3", + "vue": "^3.2.36", + "vue-router": "^4.0.15" + } + }, + "@vuepress/plugin-theme-data": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-theme-data/-/plugin-theme-data-2.0.0-beta.48.tgz", + "integrity": "sha512-7DH/tKiPg63wA77C9xNVF5Le5r1Apmd9mvz4NEeG0dhmuSPr456oM8aApE0s1XkY+vrmIXsTUjDK8+HvF8irUQ==", + "dev": true, + "requires": { + "@vue/devtools-api": "^6.1.4", + "@vuepress/client": "2.0.0-beta.48", + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/shared": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "vue": "^3.2.36" + } + }, + "@vuepress/shared": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-beta.48.tgz", + "integrity": "sha512-0i3lklFroOAtaHWfCjyvwBe8u5Jl668C/aMe9MWrsQI2qv40LiExgm82nNxc3tD2hoKKVpIxRvWaKXbJI1VXjg==", + "dev": true, + "requires": { + "@vue/shared": "^3.2.36" + } + }, + "@vuepress/theme-default": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/theme-default/-/theme-default-2.0.0-beta.48.tgz", + "integrity": "sha512-dJfqO1XW23es7d84B/iEOzKfwNtB0+UoG1PNOhDua2rPpDreOcO1sI2DntmOClYaRR/SB7zSdiSEynzRC5Nwrw==", + "dev": true, + "requires": { + "@vuepress/client": "2.0.0-beta.48", + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/plugin-active-header-links": "2.0.0-beta.48", + "@vuepress/plugin-back-to-top": "2.0.0-beta.48", + "@vuepress/plugin-container": "2.0.0-beta.48", + "@vuepress/plugin-external-link-icon": "2.0.0-beta.48", + "@vuepress/plugin-git": "2.0.0-beta.48", + "@vuepress/plugin-medium-zoom": "2.0.0-beta.48", + "@vuepress/plugin-nprogress": "2.0.0-beta.48", + "@vuepress/plugin-palette": "2.0.0-beta.48", + "@vuepress/plugin-prismjs": "2.0.0-beta.48", + "@vuepress/plugin-theme-data": "2.0.0-beta.48", + "@vuepress/shared": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "@vueuse/core": "^8.5.0", + "sass": "^1.52.1", + "vue": "^3.2.36", + "vue-router": "^4.0.15" + } + }, + "@vuepress/utils": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-beta.48.tgz", + "integrity": "sha512-Y0e3j0SHkPHMWnNlZZOcdN3G4zhdTIs63Ywy4IULFsrpKAihRIUcSe4Yry6lCJyYCCS/gebwc1fQYAmPuNkijg==", + "dev": true, + "requires": { + "@types/debug": "^4.1.7", + "@types/fs-extra": "^9.0.13", + "@vuepress/shared": "2.0.0-beta.48", + "chalk": "^4.1.2", + "debug": "^4.3.4", + "fs-extra": "^10.1.0", + "globby": "^11.0.4", + "hash-sum": "^2.0.0", + "ora": "^5.4.1", + "upath": "^2.0.1" + } + }, + "@vueuse/core": { + "version": "8.7.4", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-8.7.4.tgz", + "integrity": "sha512-dQgxjb79PDcizlaclgCkCzNoqNv12PnbXxUOFL9VacakmD/ACoSMWwTpcG3HKoDoYyl2V3kSW/8AkvXGEYEGFA==", + "dev": true, + "requires": { + "@vueuse/metadata": "8.7.4", + "@vueuse/shared": "8.7.4", + "vue-demi": "*" + } + }, + "@vueuse/metadata": { + "version": "8.7.4", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-8.7.4.tgz", + "integrity": "sha512-CwEYS6/M6JDxk9D1mUsZq3F0VnYnf39rAxOytP58vb4BrhmPKEVfiSpvxuYcJimU9ccT/xjWhwBnsdGC2H9mIQ==", + "dev": true + }, + "@vueuse/shared": { + "version": "8.7.4", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-8.7.4.tgz", + "integrity": "sha512-QhwTEd2Gr/8ZliWVEM8sbMUkXtVVV1Mt1mOkCnIbIN33D/V28FwGKUKqEPGZZCXuJchARnun/J1TAiT/UmZd1w==", + "dev": true, + "requires": { + "vue-demi": "*" + } + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true, + "optional": true, + "peer": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true, + "optional": true, + "peer": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true, + "optional": true, + "peer": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true, + "optional": true, + "peer": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true, + "optional": true, + "peer": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "optional": true, + "peer": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "optional": true, + "peer": true + }, + "acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true, + "optional": true, + "peer": true + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "optional": true, + "peer": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "optional": true, + "peer": true, + "requires": {} + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "autoprefixer": { + "version": "10.4.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", + "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", + "dev": true, + "requires": { + "browserslist": "^4.20.3", + "caniuse-lite": "^1.0.30001335", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "balloon-css": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/balloon-css/-/balloon-css-1.2.0.tgz", + "integrity": "sha512-urXwkHgwp6GsXVF+it01485Z2Cj4pnW02ICnM0TemOlkKmCNnDLmyy+ZZiRXBpwldUXO+aRNr7Hdia4CBvXJ5A==", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.20.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz", + "integrity": "sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001349", + "electron-to-chromium": "^1.4.147", + "escalade": "^3.1.1", + "node-releases": "^2.0.5", + "picocolors": "^1.0.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "optional": true, + "peer": true + }, + "cac": { + "version": "6.7.12", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.12.tgz", + "integrity": "sha512-rM7E2ygtMkJqD9c7WnFU6fruFcN3xe4FM5yUmgxhZzIKJk4uHl9U/fhwdajGFQbQuv43FAUo1Fe8gX/oIKDeSA==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001356", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001356.tgz", + "integrity": "sha512-/30854bktMLhxtjieIxsrJBfs2gTM1pel6MXKF3K+RdIVJZcsn2A2QdhsuR4/p9+R204fZw0zCBBhktX8xWuyQ==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "optional": true, + "peer": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "optional": true, + "peer": true + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "csstype": { + "version": "2.6.20", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", + "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==", + "dev": true + }, + "dayjs": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.3.tgz", + "integrity": "sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "electron-to-chromium": { + "version": "1.4.161", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.161.tgz", + "integrity": "sha512-sTjBRhqh6wFodzZtc5Iu8/R95OkwaPNn7tj/TaDU5nu/5EFiQDtADGAXdR4tJcTEHlYfJpHqigzJqHvPgehP8A==", + "dev": true + }, + "enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true + }, + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true, + "optional": true, + "peer": true + }, + "esbuild": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.49.tgz", + "integrity": "sha512-/TlVHhOaq7Yz8N1OJrjqM3Auzo5wjvHFLk+T8pIue+fhnhIMpfAzsG6PLVMbFveVxqD2WOp3QHei+52IMUNmCw==", + "dev": true, + "requires": { + "esbuild-android-64": "0.14.49", + "esbuild-android-arm64": "0.14.49", + "esbuild-darwin-64": "0.14.49", + "esbuild-darwin-arm64": "0.14.49", + "esbuild-freebsd-64": "0.14.49", + "esbuild-freebsd-arm64": "0.14.49", + "esbuild-linux-32": "0.14.49", + "esbuild-linux-64": "0.14.49", + "esbuild-linux-arm": "0.14.49", + "esbuild-linux-arm64": "0.14.49", + "esbuild-linux-mips64le": "0.14.49", + "esbuild-linux-ppc64le": "0.14.49", + "esbuild-linux-riscv64": "0.14.49", + "esbuild-linux-s390x": "0.14.49", + "esbuild-netbsd-64": "0.14.49", + "esbuild-openbsd-64": "0.14.49", + "esbuild-sunos-64": "0.14.49", + "esbuild-windows-32": "0.14.49", + "esbuild-windows-64": "0.14.49", + "esbuild-windows-arm64": "0.14.49" + } + }, + "esbuild-android-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.49.tgz", + "integrity": "sha512-vYsdOTD+yi+kquhBiFWl3tyxnj2qZJsl4tAqwhT90ktUdnyTizgle7TjNx6Ar1bN7wcwWqZ9QInfdk2WVagSww==", + "dev": true, + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.49.tgz", + "integrity": "sha512-g2HGr/hjOXCgSsvQZ1nK4nW/ei8JUx04Li74qub9qWrStlysaVmadRyTVuW32FGIpLQyc5sUjjZopj49eGGM2g==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.49.tgz", + "integrity": "sha512-3rvqnBCtX9ywso5fCHixt2GBCUsogNp9DjGmvbBohh31Ces34BVzFltMSxJpacNki96+WIcX5s/vum+ckXiLYg==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.49.tgz", + "integrity": "sha512-XMaqDxO846srnGlUSJnwbijV29MTKUATmOLyQSfswbK/2X5Uv28M9tTLUJcKKxzoo9lnkYPsx2o8EJcTYwCs/A==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.49.tgz", + "integrity": "sha512-NJ5Q6AjV879mOHFri+5lZLTp5XsO2hQ+KSJYLbfY9DgCu8s6/Zl2prWXVANYTeCDLlrIlNNYw8y34xqyLDKOmQ==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.49.tgz", + "integrity": "sha512-lFLtgXnAc3eXYqj5koPlBZvEbBSOSUbWO3gyY/0+4lBdRqELyz4bAuamHvmvHW5swJYL7kngzIZw6kdu25KGOA==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.49.tgz", + "integrity": "sha512-zTTH4gr2Kb8u4QcOpTDVn7Z8q7QEIvFl/+vHrI3cF6XOJS7iEI1FWslTo3uofB2+mn6sIJEQD9PrNZKoAAMDiA==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.49.tgz", + "integrity": "sha512-hYmzRIDzFfLrB5c1SknkxzM8LdEUOusp6M2TnuQZJLRtxTgyPnZZVtyMeCLki0wKgYPXkFsAVhi8vzo2mBNeTg==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.49.tgz", + "integrity": "sha512-iE3e+ZVv1Qz1Sy0gifIsarJMQ89Rpm9mtLSRtG3AH0FPgAzQ5Z5oU6vYzhc/3gSPi2UxdCOfRhw2onXuFw/0lg==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.49.tgz", + "integrity": "sha512-KLQ+WpeuY+7bxukxLz5VgkAAVQxUv67Ft4DmHIPIW+2w3ObBPQhqNoeQUHxopoW/aiOn3m99NSmSV+bs4BSsdA==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.49.tgz", + "integrity": "sha512-n+rGODfm8RSum5pFIqFQVQpYBw+AztL8s6o9kfx7tjfK0yIGF6tm5HlG6aRjodiiKkH2xAiIM+U4xtQVZYU4rA==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.49.tgz", + "integrity": "sha512-WP9zR4HX6iCBmMFH+XHHng2LmdoIeUmBpL4aL2TR8ruzXyT4dWrJ5BSbT8iNo6THN8lod6GOmYDLq/dgZLalGw==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.49.tgz", + "integrity": "sha512-h66ORBz+Dg+1KgLvzTVQEA1LX4XBd1SK0Fgbhhw4akpG/YkN8pS6OzYI/7SGENiN6ao5hETRDSkVcvU9NRtkMQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.49.tgz", + "integrity": "sha512-DhrUoFVWD+XmKO1y7e4kNCqQHPs6twz6VV6Uezl/XHYGzM60rBewBF5jlZjG0nCk5W/Xy6y1xWeopkrhFFM0sQ==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.49.tgz", + "integrity": "sha512-BXaUwFOfCy2T+hABtiPUIpWjAeWK9P8O41gR4Pg73hpzoygVGnj0nI3YK4SJhe52ELgtdgWP/ckIkbn2XaTxjQ==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.49.tgz", + "integrity": "sha512-lP06UQeLDGmVPw9Rg437Btu6J9/BmyhdoefnQ4gDEJTtJvKtQaUcOQrhjTq455ouZN4EHFH1h28WOJVANK41kA==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.49.tgz", + "integrity": "sha512-4c8Zowp+V3zIWje329BeLbGh6XI9c/rqARNaj5yPHdC61pHI9UNdDxT3rePPJeWcEZVKjkiAS6AP6kiITp7FSw==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.49.tgz", + "integrity": "sha512-q7Rb+J9yHTeKr9QTPDYkqfkEj8/kcKz9lOabDuvEXpXuIcosWCJgo5Z7h/L4r7rbtTH4a8U2FGKb6s1eeOHmJA==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.49.tgz", + "integrity": "sha512-+Cme7Ongv0UIUTniPqfTX6mJ8Deo7VXw9xN0yJEN1lQMHDppTNmKwAM3oGbD/Vqff+07K2gN0WfNkMohmG+dVw==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.49.tgz", + "integrity": "sha512-v+HYNAXzuANrCbbLFJ5nmO3m5y2PGZWLe3uloAkLt87aXiO2mZr3BTmacZdjwNkNEHuH3bNtN8cak+mzVjVPfA==", + "dev": true, + "optional": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "optional": true, + "peer": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "optional": true, + "peer": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "optional": true, + "peer": true + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "optional": true, + "peer": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "optional": true, + "peer": true + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dev": true, + "requires": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "optional": true, + "peer": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "optional": true, + "peer": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "dev": true, + "optional": true, + "peer": true + }, + "linkify-it": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", + "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", + "dev": true, + "requires": { + "uc.micro": "^1.0.1" + } + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "optional": true, + "peer": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "markdown-it": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", + "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", + "dev": true, + "requires": { + "argparse": "^2.0.1", + "entities": "~3.0.1", + "linkify-it": "^4.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + } + } + }, + "markdown-it-anchor": { + "version": "8.6.4", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.4.tgz", + "integrity": "sha512-Ul4YVYZNxMJYALpKtu+ZRdrryYt/GlQ5CK+4l1bp/gWXOG2QWElt6AqF3Mih/wfUKdZbNAZVXGR73/n6U/8img==", + "dev": true, + "requires": {} + }, + "markdown-it-container": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/markdown-it-container/-/markdown-it-container-3.0.0.tgz", + "integrity": "sha512-y6oKTq4BB9OQuY/KLfk/O3ysFhB3IMYoIWhGJEidXt1NQFocFK2sA2t0NYZAMyMShAGL6x5OPIbrmXPIqaN9rw==", + "dev": true + }, + "markdown-it-emoji": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/markdown-it-emoji/-/markdown-it-emoji-2.0.2.tgz", + "integrity": "sha512-zLftSaNrKuYl0kR5zm4gxXjHaOI3FAOEaloKmRA5hijmJZvSjmxcokOLlzycb/HXlUFWzXqpIEoyEMCE4i9MvQ==", + "dev": true + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, + "medium-zoom": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.0.6.tgz", + "integrity": "sha512-UdiUWfvz9fZMg1pzf4dcuqA0W079o0mpqbTnOz5ip4VGYX96QjmbM+OgOU/0uOzAytxC0Ny4z+VcYQnhdifimg==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "optional": true, + "peer": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "optional": true, + "peer": true + }, + "node-releases": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, + "prismjs": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz", + "integrity": "sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "optional": true, + "peer": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rollup": { + "version": "2.75.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.75.6.tgz", + "integrity": "sha512-OEf0TgpC9vU6WGROJIk1JA3LR5vk/yvqlzxqdrE2CzzXnqKXNzbAwlWUXis8RS3ZPe7LAq+YUxsRa0l3r27MLA==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "sass": { + "version": "1.52.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.52.3.tgz", + "integrity": "sha512-LNNPJ9lafx+j1ArtA7GyEJm9eawXN8KlA1+5dF6IZyoONg1Tyo/g+muOsENWJH/2Q1FHbbV4UwliU0cXMa/VIA==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "sass-loader": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.0.2.tgz", + "integrity": "sha512-BbiqbVmbfJaWVeOOAu2o7DhYWtcNmTfvroVgFXa6k2hHheMxNAeDHLNoDy/Q5aoaVlz0LH+MbMktKwm9vN/j8Q==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "optional": true, + "peer": true + }, + "terser": { + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.1.tgz", + "integrity": "sha512-+ahUAE+iheqBTDxXhTisdA8hgvbEG1hHOQ9xmNjeUJSoi6DU/gMrKNcfZjHkyY6Alnuyc+ikYJaxxfHkT3+WuQ==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "terser-webpack-plugin": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz", + "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.7", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.7.2" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", + "dev": true + }, + "ts-debounce": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ts-debounce/-/ts-debounce-4.0.0.tgz", + "integrity": "sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==", + "dev": true + }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "vite": { + "version": "2.9.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.12.tgz", + "integrity": "sha512-suxC36dQo9Rq1qMB2qiRorNJtJAdxguu5TMvBHOc/F370KvqAe9t48vYp+/TbPKRNrMh/J55tOUmkuIqstZaew==", + "dev": true, + "requires": { + "esbuild": "^0.14.27", + "fsevents": "~2.3.2", + "postcss": "^8.4.13", + "resolve": "^1.22.0", + "rollup": "^2.59.0" + } + }, + "vue": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.37.tgz", + "integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==", + "dev": true, + "requires": { + "@vue/compiler-dom": "3.2.37", + "@vue/compiler-sfc": "3.2.37", + "@vue/runtime-dom": "3.2.37", + "@vue/server-renderer": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "vue-demi": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.1.tgz", + "integrity": "sha512-xmkJ56koG3ptpLnpgmIzk9/4nFf4CqduSJbUM0OdPoU87NwRuZ6x49OLhjSa/fC15fV+5CbEnrxU4oyE022svg==", + "dev": true, + "requires": {} + }, + "vue-router": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.2.tgz", + "integrity": "sha512-5BP1qXFncVRwgV/XnqzsKApdMjQPqWIpoUBdL1ynz8HyLxIX/UDAx7Ql2BjmA5CXT/p61JfZvkpiFWFpaqcfag==", + "dev": true, + "requires": { + "@vue/devtools-api": "^6.1.4" + } + }, + "vuepress": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/vuepress/-/vuepress-2.0.0-beta.48.tgz", + "integrity": "sha512-m1CzjgMrHdrOzNr3eMoFrdqHlp3wK23TBIHZJtm9tDnwg4OF59FG6y6gGoBLo+zpfzVOwi/V8FR13ehiQwG/3A==", + "dev": true, + "requires": { + "vuepress-vite": "2.0.0-beta.48" + } + }, + "vuepress-plugin-copy-code2": { + "version": "2.0.0-beta.84", + "resolved": "https://registry.npmjs.org/vuepress-plugin-copy-code2/-/vuepress-plugin-copy-code2-2.0.0-beta.84.tgz", + "integrity": "sha512-jSI/k4HLSTr+0RhsJ+omr3RsrUrlBAhtdgIQYGdhy8Wm2g5NjMXjQZ3d7rs+gSIvQH1RDj2wRorV26yEKARw3g==", + "dev": true, + "requires": { + "@vuepress/client": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "balloon-css": "^1.2.0", + "vue": "^3.2.37", + "vue-router": "^4.0.16", + "vuepress-plugin-sass-palette": "2.0.0-beta.84", + "vuepress-shared": "2.0.0-beta.84" + } + }, + "vuepress-plugin-redirect": { + "version": "2.0.0-beta.86", + "resolved": "https://registry.npmjs.org/vuepress-plugin-redirect/-/vuepress-plugin-redirect-2.0.0-beta.86.tgz", + "integrity": "sha512-kxPyPAhH1U0UJdsq8qLMu4UDTaNxzPUZWalHGNYE/EZ4EYA0uSlkobjvppFr3baR9KpNyi/DlnW/SOSCw6EwQg==", + "dev": true, + "requires": { + "@vuepress/cli": "2.0.0-beta.49", + "@vuepress/core": "2.0.0-beta.49", + "@vuepress/shared": "2.0.0-beta.49", + "@vuepress/utils": "2.0.0-beta.49", + "cac": "^6.7.12", + "vuepress-shared": "2.0.0-beta.86" + }, + "dependencies": { + "@vuepress/cli": { + "version": "2.0.0-beta.49", + "resolved": "https://registry.npmjs.org/@vuepress/cli/-/cli-2.0.0-beta.49.tgz", + "integrity": "sha512-3RtuZvtLIGXEtsLgc3AnDr4jxiFeFDWfNw6MTb22YwuttBr5h5pZO/F8XMyP9+tEi73q3/l4keNQftU4msHysQ==", + "dev": true, + "requires": { + "@vuepress/core": "2.0.0-beta.49", + "@vuepress/shared": "2.0.0-beta.49", + "@vuepress/utils": "2.0.0-beta.49", + "cac": "^6.7.12", + "chokidar": "^3.5.3", + "envinfo": "^7.8.1", + "esbuild": "^0.14.49" + } + }, + "@vuepress/client": { + "version": "2.0.0-beta.49", + "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-beta.49.tgz", + "integrity": "sha512-zfGlCAF/LwDOrZXZPqADsMgWRuH/2GFOGSOCvt7ZUZHnSrYBdK2FOez/ksWL8EwGNLsRLB8ny1IachMwTew5og==", + "dev": true, + "requires": { + "@vue/devtools-api": "^6.2.0", + "@vuepress/shared": "2.0.0-beta.49", + "vue": "^3.2.37", + "vue-router": "^4.1.2" + } + }, + "@vuepress/core": { + "version": "2.0.0-beta.49", + "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-beta.49.tgz", + "integrity": "sha512-40J74qGOPqF9yGdXdzPD1kW9mv5/jfJenmhsH1xaErPsr6qIM8jcraVRC+R7NoVTIecRk9cC9MJcDRnLmDDiAg==", + "dev": true, + "requires": { + "@vuepress/client": "2.0.0-beta.49", + "@vuepress/markdown": "2.0.0-beta.49", + "@vuepress/shared": "2.0.0-beta.49", + "@vuepress/utils": "2.0.0-beta.49", + "vue": "^3.2.37" + } + }, + "@vuepress/markdown": { + "version": "2.0.0-beta.49", + "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-beta.49.tgz", + "integrity": "sha512-aAw41NArV5leIpZOFmElxzRG29LDdEQe7oIcZtIvKPhVmEfg9/mgx4ea2OqY5DaBvEhkG42SojjKvmHiJKrwJw==", + "dev": true, + "requires": { + "@mdit-vue/plugin-component": "^0.6.0", + "@mdit-vue/plugin-frontmatter": "^0.6.0", + "@mdit-vue/plugin-headers": "^0.6.0", + "@mdit-vue/plugin-sfc": "^0.6.0", + "@mdit-vue/plugin-title": "^0.6.0", + "@mdit-vue/plugin-toc": "^0.6.0", + "@mdit-vue/shared": "^0.6.0", + "@mdit-vue/types": "^0.6.0", + "@types/markdown-it": "^12.2.3", + "@types/markdown-it-emoji": "^2.0.2", + "@vuepress/shared": "2.0.0-beta.49", + "@vuepress/utils": "2.0.0-beta.49", + "markdown-it": "^13.0.1", + "markdown-it-anchor": "^8.6.4", + "markdown-it-emoji": "^2.0.2", + "mdurl": "^1.0.1" + } + }, + "@vuepress/plugin-git": { + "version": "2.0.0-beta.49", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-git/-/plugin-git-2.0.0-beta.49.tgz", + "integrity": "sha512-CjaBYWBAkQmlpx5v+mp2vsoRxqRTi/mSvXy8im/ftc8zX/sVT4V1LBWX1IsDQn1VpWnArlfAsFd+BrmxzPFePA==", + "dev": true, + "requires": { + "@vuepress/core": "2.0.0-beta.49", + "@vuepress/utils": "2.0.0-beta.49", + "execa": "^5.1.1" + } + }, + "@vuepress/shared": { + "version": "2.0.0-beta.49", + "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-beta.49.tgz", + "integrity": "sha512-yoUgOtRUrIfe0O1HMTIMj0NYU3tAiUZ4rwVEtemtGa7/RK7qIZdBpAfv08Ve2CUpa3wrMb1Pux1aBsiz1EQx+g==", + "dev": true, + "requires": { + "@vue/shared": "^3.2.37" + } + }, + "@vuepress/utils": { + "version": "2.0.0-beta.49", + "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-beta.49.tgz", + "integrity": "sha512-t5i0V9FqpKLGlu2kMP/Y9+wdgEmsD2yQAMGojxpMoFhJBmqn2L9Rkk4WYzHKzPGDkm1KbBFzYQqjAhZQ7xtY1A==", + "dev": true, + "requires": { + "@types/debug": "^4.1.7", + "@types/fs-extra": "^9.0.13", + "@vuepress/shared": "2.0.0-beta.49", + "chalk": "^4.1.2", + "debug": "^4.3.4", + "fs-extra": "^10.1.0", + "globby": "^11.0.4", + "hash-sum": "^2.0.0", + "ora": "^5.4.1", + "upath": "^2.0.1" + } + }, + "vuepress-shared": { + "version": "2.0.0-beta.86", + "resolved": "https://registry.npmjs.org/vuepress-shared/-/vuepress-shared-2.0.0-beta.86.tgz", + "integrity": "sha512-8XjUscW4dmP59WxqhPg42okoarlybMNXAyi9k5J0KeQLHTeDMySSzqrYkF/iQdv63PKE3JFIhSRhUsaK0yedMw==", + "dev": true, + "requires": { + "@vuepress/client": "2.0.0-beta.49", + "@vuepress/plugin-git": "2.0.0-beta.49", + "@vuepress/shared": "2.0.0-beta.49", + "@vuepress/utils": "2.0.0-beta.49", + "dayjs": "^1.11.3", + "execa": "^5.1.1", + "ora": "^5.4.1", + "vue": "^3.2.37", + "vue-router": "^4.1.2" + } + } + } + }, + "vuepress-plugin-sass-palette": { + "version": "2.0.0-beta.84", + "resolved": "https://registry.npmjs.org/vuepress-plugin-sass-palette/-/vuepress-plugin-sass-palette-2.0.0-beta.84.tgz", + "integrity": "sha512-cdl/caVQk3hWvpzO9dcy+KfFa/0pHCvkSZy+xOk7lAUL7srVQnCIEs1ii7D+/ngmyve8+JENy2+Ch15exYibJA==", + "dev": true, + "requires": { + "@vuepress/utils": "2.0.0-beta.48", + "chokidar": "^3.5.3", + "sass": "^1.52.3", + "vuepress-shared": "2.0.0-beta.84" + } + }, + "vuepress-shared": { + "version": "2.0.0-beta.84", + "resolved": "https://registry.npmjs.org/vuepress-shared/-/vuepress-shared-2.0.0-beta.84.tgz", + "integrity": "sha512-yfN2ng7X0oFlIPLX3AJMK8PuQYrqcKrKa8Gm77sH3bGKJjhKBr7UO9jXh/io3vBIoqd4vjiKHYyOHJqB/nIWoQ==", + "dev": true, + "requires": { + "@vuepress/client": "2.0.0-beta.48", + "@vuepress/plugin-git": "2.0.0-beta.48", + "@vuepress/plugin-theme-data": "2.0.0-beta.48", + "@vuepress/shared": "2.0.0-beta.48", + "@vuepress/utils": "2.0.0-beta.48", + "dayjs": "^1.11.3", + "execa": "^5.1.1", + "ora": "^5.4.1", + "vue": "^3.2.37", + "vue-router": "^4.0.16" + } + }, + "vuepress-vite": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/vuepress-vite/-/vuepress-vite-2.0.0-beta.48.tgz", + "integrity": "sha512-1TKEXg26W7VlTBU9J6BcJTW/NFtzkAveM33jccVs6HieYgvK7lyTpbhs5eRu9fUWawGR8ULa+b5kdk0dSLpjew==", + "dev": true, + "requires": { + "@vuepress/bundler-vite": "2.0.0-beta.48", + "@vuepress/cli": "2.0.0-beta.48", + "@vuepress/core": "2.0.0-beta.48", + "@vuepress/theme-default": "2.0.0-beta.48" + } + }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webpack": { + "version": "5.73.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.73.0.tgz", + "integrity": "sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.9.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "optional": true, + "peer": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } +} diff --git a/site-vuepress/package.json b/site-vuepress/package.json new file mode 100644 index 000000000..e97cf3828 --- /dev/null +++ b/site-vuepress/package.json @@ -0,0 +1,20 @@ +{ + "name": "site-vuepress", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "docs:dev": "vuepress dev docs", + "docs:build": "vuepress build docs", + "prettier": "prettier --write ." + }, + "author": "", + "license": "ISC", + "devDependencies": { + "@vuepress/plugin-search": "^2.0.0-beta.48", + "prettier": "2.7.1", + "vuepress": "^2.0.0-beta.48", + "vuepress-plugin-copy-code2": "^2.0.0-beta.84", + "vuepress-plugin-redirect": "^2.0.0-beta.86" + } +} diff --git a/site/src/site/sphinx/README.md b/site/src/site/sphinx/README.md deleted file mode 100644 index 8451d95f0..000000000 --- a/site/src/site/sphinx/README.md +++ /dev/null @@ -1 +0,0 @@ -Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率 \ No newline at end of file diff --git a/site/src/site/sphinx/_include_html/arthas-tutorials.html b/site/src/site/sphinx/_include_html/arthas-tutorials.html deleted file mode 100644 index 95cff06fd..000000000 --- a/site/src/site/sphinx/_include_html/arthas-tutorials.html +++ /dev/null @@ -1,1026 +0,0 @@ - - - - - - - - - - - - - - - Arthas Tutorials - - - - - - - - - - - - - - - -