From 191964bc2c9be04046a94b00bdf800fe7bac5275 Mon Sep 17 00:00:00 2001 From: hengyunabc Date: Wed, 2 Sep 2026 02:09:28 +0000 Subject: [PATCH] Update docs to version 4.3.5 --- 404.html | 6 +- arthas-boot.jar | Bin 147979 -> 148033 bytes as.sh | 25 ++-- ....html.532e346d.js => 404.html.1b87fa04.js} | 2 +- ....html.0f0756d7.js => 404.html.58d317de.js} | 2 +- ...d6f5f.js => advanced-use.html.2466ac6e.js} | 5 +- ...d36c2.js => advanced-use.html.2b80fa7d.js} | 2 +- ...65376.js => advanced-use.html.38aef1b4.js} | 5 +- ...32b6f.js => advanced-use.html.5dddb9fa.js} | 2 +- ...2e515.js => advice-class.html.12568df6.js} | 2 +- ...022df.js => advice-class.html.3778e1f2.js} | 2 +- ...1abce.js => advice-class.html.7352d445.js} | 4 +- ...7560f.js => advice-class.html.79697a1e.js} | 4 +- ...tml.bb83a7be.js => agent.html.2480ffd9.js} | 2 +- ...tml.80af310f.js => agent.html.55a8cd63.js} | 2 +- ...tml.b37100a4.js => agent.html.d7974fce.js} | 2 +- ...tml.c6c0324b.js => agent.html.d870df79.js} | 2 +- ...i.html.b2d958f1.js => ai.html.0d965d9d.js} | 2 +- ...i.html.eea262b3.js => ai.html.4fc4211a.js} | 2 +- ...i.html.a6d2ae52.js => ai.html.530e41ed.js} | 2 +- ...i.html.77daefd0.js => ai.html.76467e93.js} | 2 +- assets/{app.524ecf5c.js => app.e2427bec.js} | 24 ++-- ....js => arthas-properties.html.1c61e69c.js} | 2 +- ....js => arthas-properties.html.7dc17e44.js} | 2 +- ....js => arthas-properties.html.962908f3.js} | 2 +- ....js => arthas-properties.html.c45f5949.js} | 2 +- ...l.316cb2e0.js => arthas3.html.11401e69.js} | 2 +- ...l.8d4e3261.js => arthas3.html.98a1b21b.js} | 2 +- ...tml.1e360242.js => async.html.4eaabb46.js} | 4 +- ...tml.51567fc5.js => async.html.58415566.js} | 2 +- ...tml.b03735d9.js => async.html.60215e2c.js} | 4 +- ...tml.332dfef1.js => async.html.89c66164.js} | 2 +- ...html.a546b6c7.js => auth.html.031f3521.js} | 2 +- ...html.e8af6dce.js => auth.html.10e5d242.js} | 2 +- ...html.4c6c9a22.js => auth.html.15a8fda2.js} | 2 +- ...html.dc89b429.js => auth.html.9f2ff1c7.js} | 2 +- ...ml.afb50617.js => base64.html.26159b8a.js} | 2 +- ...ml.750bcc95.js => base64.html.4b84930d.js} | 2 +- ...ml.ba24ac32.js => base64.html.9f351db1.js} | 2 +- ...ml.e2a165a5.js => base64.html.a74ba9fa.js} | 2 +- ...0179.js => batch-support.html.2f7463e9.js} | 2 +- ...5a76.js => batch-support.html.2fd7dfc3.js} | 2 +- ...c58d.js => batch-support.html.8e77cbb4.js} | 2 +- ...d4ad.js => batch-support.html.f1130b14.js} | 2 +- assets/cat.html.294a7128.js | 2 - assets/cat.html.2fba4fba.js | 2 - ....html.3a5d25c6.js => cat.html.317b776a.js} | 2 +- assets/cat.html.5c2eddad.js | 2 + ....html.18f65deb.js => cat.html.8d80e219.js} | 2 +- assets/cat.html.a8a712c6.js | 2 + ...=> classloader-metaspace.html.1c3e8440.js} | 2 +- ...=> classloader-metaspace.html.1d325e53.js} | 2 +- ...=> classloader-metaspace.html.249e56bc.js} | 2 +- ...=> classloader-metaspace.html.466bb431.js} | 2 +- ...574e27.js => classloader.html.0346e215.js} | 4 +- ...5df726.js => classloader.html.1dbda3bd.js} | 4 +- ...c01982.js => classloader.html.3876b1e0.js} | 2 +- ...884720.js => classloader.html.3c2e72a7.js} | 2 +- ....html.454065a9.js => cls.html.14369b3c.js} | 2 +- ....html.c9aa0c61.js => cls.html.60c40d73.js} | 2 +- ....html.73fb0901.js => cls.html.77bb73a5.js} | 2 +- ....html.fe97eb01.js => cls.html.8f3a5491.js} | 2 +- ....26baabfd.js => commands.html.0766e205.js} | 2 +- ....3ba84332.js => commands.html.3d045ea7.js} | 2 +- ....610808a3.js => commands.html.4d2820b1.js} | 2 +- ....85ad84a0.js => commands.html.f93b9fc8.js} | 2 +- ...45ccfc1.js => contact-us.html.bca72555.js} | 2 +- ...90c3a5d.js => contact-us.html.c13483a2.js} | 2 +- ...7c63609.js => contact-us.html.f14b9ed1.js} | 2 +- ...dfc329b.js => contact-us.html.f31aa912.js} | 2 +- ...b6965a28.js => dashboard.html.113af276.js} | 4 +- ...14eaa588.js => dashboard.html.1a8e32e4.js} | 2 +- ...9ad443d2.js => dashboard.html.981a5405.js} | 4 +- ...61a4e15d.js => dashboard.html.f3712bf4.js} | 2 +- assets/docker.html.27b15072.js | 50 -------- assets/docker.html.3597bdbf.js | 107 ++++++++++++++++++ ...ml.17377288.js => docker.html.7291090b.js} | 2 +- assets/docker.html.a1aa4dd5.js | 1 - assets/docker.html.a457bc6d.js | 50 -------- assets/docker.html.ab7f2873.js | 1 + assets/docker.html.da50033d.js | 107 ++++++++++++++++++ ....9f397283.js => download.html.1a63d650.js} | 2 +- ....336d4739.js => download.html.5f1c78c9.js} | 2 +- ....96b3e09e.js => download.html.6df5a02f.js} | 2 +- ....1194e616.js => download.html.c5d48124.js} | 2 +- ...html.c3f8bd1c.js => dump.html.0eae962a.js} | 2 +- ...html.d49fa0fb.js => dump.html.24ea4d2e.js} | 2 +- ...html.f81dadc5.js => dump.html.30dc9666.js} | 4 +- ...html.68dd64e1.js => dump.html.894aad59.js} | 4 +- assets/echo.html.1ca1bcbf.js | 2 + assets/echo.html.42bccc7b.js | 2 - ...html.e5a5e66b.js => echo.html.4b25719e.js} | 2 +- assets/echo.html.6baec513.js | 2 - assets/echo.html.8bd53ad3.js | 2 + ...html.54dceeee.js => echo.html.fdda77b4.js} | 2 +- ...4.js => external-command.html.3e8d782b.js} | 2 +- ...c.js => external-command.html.9a47f025.js} | 2 +- ...7.js => external-command.html.cc4ab827.js} | 2 +- ...3.js => external-command.html.f331f51e.js} | 2 +- ....html.5b15bab7.js => faq.html.0b4e272a.js} | 10 +- ....html.92bd353a.js => faq.html.188c09a3.js} | 2 +- ....html.44fb2f53.js => faq.html.36186b06.js} | 2 +- ....html.7de57ec6.js => faq.html.8aecb0b8.js} | 8 +- ...bb912d8f.js => getstatic.html.0079aa66.js} | 6 +- ...07f2529e.js => getstatic.html.06e13f21.js} | 2 +- ...a9eaa5e6.js => getstatic.html.99701f59.js} | 2 +- ...36841961.js => getstatic.html.d3e5edb1.js} | 6 +- ...html.577df941.js => grep.html.6ba4e7cd.js} | 2 +- ...html.7b4c2cd4.js => grep.html.831320e0.js} | 2 +- ...html.57324644.js => grep.html.a6f74b81.js} | 4 +- ...html.c6a57b9b.js => grep.html.c007dc7c.js} | 4 +- ...ml.4ef1e7fc.js => groovy.html.47cc1adc.js} | 2 +- ...ml.1c2baf9b.js => groovy.html.6c982925.js} | 2 +- ...ml.fc87055f.js => groovy.html.74effc34.js} | 2 +- ...ml.bf8a6589.js => groovy.html.d70f2cba.js} | 2 +- ....0ba3823c.js => heapdump.html.291f6f55.js} | 4 +- ....22c951fc.js => heapdump.html.2cfa3407.js} | 2 +- ....7a6011ee.js => heapdump.html.3c58b047.js} | 4 +- ....986bb645.js => heapdump.html.aa31b283.js} | 2 +- ...html.fcbdb8fe.js => help.html.026cd72d.js} | 2 +- ...html.1c79c4bb.js => help.html.0f234388.js} | 2 +- ...html.2db31f67.js => help.html.66e76dc7.js} | 2 +- ...html.c94858ab.js => help.html.9a08c3c3.js} | 2 +- ...l.5487cd70.js => history.html.0a1c3393.js} | 2 +- ...l.0118eb18.js => history.html.62683097.js} | 2 +- ...l.aed5546b.js => history.html.9f5e30aa.js} | 2 +- ...l.5ac8e7b1.js => history.html.a9fdd95c.js} | 2 +- ....78a51f51.js => http-api.html.132670cd.js} | 2 +- ....a397734f.js => http-api.html.99c4fcf0.js} | 11 +- ....0b120e8b.js => http-api.html.a3d3ab18.js} | 2 +- ....fd0631ff.js => http-api.html.d561b855.js} | 11 +- ...b84f96.js => idea-plugin.html.34a25f10.js} | 2 +- ...2bba00.js => idea-plugin.html.57e8f57c.js} | 2 +- ...a5ce05.js => idea-plugin.html.7d6cbcc9.js} | 2 +- ...9405cc.js => idea-plugin.html.ae6aa4f7.js} | 2 +- ...tml.5332fd62.js => index.html.086821c2.js} | 2 +- ...tml.74bff2cf.js => index.html.18118d67.js} | 2 +- ...tml.8c8f4e7a.js => index.html.34145a94.js} | 2 +- ...tml.7ce27c03.js => index.html.6dcd1531.js} | 2 +- ...tml.58d0a509.js => index.html.760efd19.js} | 2 +- ...tml.7f2e8ca4.js => index.html.787b4b50.js} | 2 +- ...tml.ed9ed3a9.js => index.html.cd23e113.js} | 2 +- ...tml.8cbf0aa1.js => index.html.e6b12e55.js} | 2 +- ...623.js => install-detail.html.041805f1.js} | 2 +- ...8fe.js => install-detail.html.40e05e2a.js} | 2 +- ...b63.js => install-detail.html.743978fa.js} | 2 +- ...dbb.js => install-detail.html.93881ff8.js} | 2 +- ....html.acef5a50.js => jad.html.039013c5.js} | 2 +- ....html.e5676fd2.js => jad.html.1626c1c4.js} | 6 +- ....html.eb7a2926.js => jad.html.2e62e37f.js} | 6 +- ....html.403e568d.js => jad.html.49ef2409.js} | 2 +- ....html.5ac2287e.js => jfr.html.2139c5d1.js} | 6 +- ....html.7ec12793.js => jfr.html.b77304ea.js} | 2 +- ....html.35e0ac56.js => jfr.html.bab2ebee.js} | 2 +- ....html.b9abd2e5.js => jfr.html.fc123fb3.js} | 6 +- ....html.ff68b164.js => jvm.html.43ae7a7d.js} | 4 +- ....html.432f6c94.js => jvm.html.684dd27a.js} | 2 +- ....html.9c086903.js => jvm.html.9b922226.js} | 4 +- ....html.24d408b0.js => jvm.html.eac591a0.js} | 2 +- assets/keymap.html.1f91f840.js | 20 ---- assets/keymap.html.33e7213e.js | 20 ++++ ...ml.bda8b228.js => keymap.html.4bc836ba.js} | 2 +- ...ml.32f701a7.js => keymap.html.96d9632d.js} | 2 +- assets/keymap.html.bf1351b4.js | 20 ++++ assets/keymap.html.caa095a2.js | 20 ---- ...html.7a5cbdbd.js => line.html.01eb3559.js} | 4 +- ...html.57fda898.js => line.html.70ec176e.js} | 4 +- ...html.e9882513.js => line.html.a9e8e2e4.js} | 2 +- ...html.d873e96f.js => line.html.bfbf7f2b.js} | 2 +- ...ml.52980a8c.js => logger.html.3d035db4.js} | 2 +- ...ml.71a07287.js => logger.html.b88626af.js} | 4 +- ...ml.2c243abb.js => logger.html.c09808a8.js} | 4 +- ...ml.274394d2.js => logger.html.e09aeaa6.js} | 2 +- ...a08.js => manual-install.html.315a4f72.js} | 2 +- ...151.js => manual-install.html.81853c98.js} | 2 +- ...2ca.js => manual-install.html.85f99b8b.js} | 2 +- ...6a2.js => manual-install.html.c9b06816.js} | 2 +- ...tml.95b86909.js => mbean.html.0bf95e2b.js} | 2 +- ...tml.8a3771f2.js => mbean.html.927e96dd.js} | 2 +- ...tml.9eaf227e.js => mbean.html.d1e0ff54.js} | 6 +- ...tml.c8caf62f.js => mbean.html.ee4f07f1.js} | 6 +- assets/mc.html.3c57e00d.js | 8 -- assets/mc.html.9ed50f47.js | 8 ++ ...c.html.96f7758d.js => mc.html.d96eb37d.js} | 2 +- ...c.html.2bb09391.js => mc.html.e292ce83.js} | 2 +- assets/mc.html.f0819ad2.js | 8 ++ assets/mc.html.f537545c.js | 8 -- ...0f4ef7d.js => mcp-server.html.3cd2eec5.js} | 2 +- ...548e7c2.js => mcp-server.html.609551f2.js} | 2 +- assets/mcp-server.html.675136b6.js | 28 ----- assets/mcp-server.html.b2d1ada5.js | 28 +++++ ...0555bb2.js => mcp-server.html.c2f288cd.js} | 4 +- ...ml.290d23a6.js => memory.html.3bde6b86.js} | 2 +- ...ml.492ae9d3.js => memory.html.8e88a19c.js} | 2 +- ...ml.7f3cbe90.js => memory.html.a1b2b15c.js} | 2 +- ...ml.4cb5296e.js => memory.html.e96b1c33.js} | 2 +- ...l.aa324b7d.js => monitor.html.5a803975.js} | 2 +- ...l.78686d08.js => monitor.html.b4c17a07.js} | 4 +- ...l.4f1f94d6.js => monitor.html.be46b9bd.js} | 4 +- ...l.fff63a76.js => monitor.html.fc2a02d0.js} | 2 +- assets/ognl-express.html.0cd6cdc8.js | 1 + assets/ognl-express.html.1fb465fc.js | 37 ++++++ assets/ognl-express.html.3082adb7.js | 37 ++++++ assets/ognl-express.html.f156515d.js | 1 + ...html.ab98468a.js => ognl.html.67f38565.js} | 2 +- ...html.bd362a1e.js => ognl.html.c20b61d9.js} | 2 +- ...html.7836f77d.js => ognl.html.c39364dd.js} | 4 +- ...html.075b13f3.js => ognl.html.d226d5a4.js} | 4 +- ...l.144916f6.js => options.html.12136572.js} | 6 +- ...l.3ab55601.js => options.html.7c3bfae1.js} | 2 +- ...l.ec66483d.js => options.html.7de13b4f.js} | 2 +- ...l.c70226da.js => options.html.dae019ce.js} | 6 +- ...5a5ce5.js => perfcounter.html.02a2f773.js} | 2 +- ...ce5e22.js => perfcounter.html.27f41458.js} | 2 +- ...590f54.js => perfcounter.html.96a88381.js} | 4 +- ...c8c8a4.js => perfcounter.html.e11ca3a1.js} | 4 +- ....f515f668.js => profiler.html.0cd67a30.js} | 2 +- ....887a8a7c.js => profiler.html.3f6cfb27.js} | 28 ++--- ....e7fb718f.js => profiler.html.67035c12.js} | 2 +- ....fd3324a8.js => profiler.html.8e2f4114.js} | 28 ++--- ....html.b52402a6.js => pwd.html.5af5f815.js} | 2 +- assets/pwd.html.60a0a503.js | 2 + assets/pwd.html.9c033639.js | 2 - assets/pwd.html.a1551912.js | 2 + assets/pwd.html.f8e10ae4.js | 2 - ....html.48cbf02c.js => pwd.html.fe379ca1.js} | 2 +- ...a18fad.js => quick-start.html.0a841ca8.js} | 2 +- ...104c27.js => quick-start.html.4a4a854b.js} | 2 +- ...7d975b.js => quick-start.html.7059ebe7.js} | 10 +- ...df7a28.js => quick-start.html.90bb144c.js} | 10 +- ...html.515a6f81.js => quit.html.44df6ca4.js} | 2 +- ...html.2267f888.js => quit.html.47228ba9.js} | 2 +- ...html.dcd270e6.js => quit.html.de692497.js} | 2 +- ...html.df8a6408.js => quit.html.e375b368.js} | 2 +- ....30ef7ca4.js => redefine.html.02b78145.js} | 2 +- ....7b61fdfa.js => redefine.html.05bba39f.js} | 4 +- ....8eaa7cae.js => redefine.html.68e8d9d1.js} | 2 +- ....f31e034f.js => redefine.html.c7e214b6.js} | 4 +- ...cf20.js => release-notes.html.4d2c5e1d.js} | 2 +- ...ffc5.js => release-notes.html.bb1f1375.js} | 2 +- ...62a1.js => release-notes.html.c5c1003b.js} | 2 +- ...1eb1.js => release-notes.html.daaf684d.js} | 2 +- ...tml.d05a2660.js => reset.html.334188fe.js} | 2 +- ...tml.538a5ab2.js => reset.html.5e039e96.js} | 4 +- ...tml.2e9fc05c.js => reset.html.94ebcaf7.js} | 2 +- ...tml.86808cc2.js => reset.html.9c6228ed.js} | 4 +- ...f08601.js => retransform.html.5a86cbf5.js} | 2 +- ...00567a.js => retransform.html.822f2ec7.js} | 4 +- ...2cdadb.js => retransform.html.8ab36d20.js} | 2 +- ...cdf8c0.js => retransform.html.cee06ec8.js} | 4 +- assets/save-log.html.02816c57.js | 6 - assets/save-log.html.19fe32a1.js | 6 - ....d56e7726.js => save-log.html.6b300b97.js} | 2 +- assets/save-log.html.aaad8817.js | 6 + ....dcea4094.js => save-log.html.f871291e.js} | 2 +- assets/save-log.html.fea95237.js | 6 + ...c.html.98f7cc34.js => sc.html.049f2400.js} | 4 +- ...c.html.bdfbd20c.js => sc.html.13503b4f.js} | 2 +- ...c.html.27f757b3.js => sc.html.7cdf140e.js} | 2 +- ...c.html.3b5ef46c.js => sc.html.982b84c0.js} | 4 +- ...l.a2ad9e80.js => session.html.0168cb9d.js} | 2 +- ...l.a83717c2.js => session.html.35f7a4aa.js} | 2 +- ...l.01d5cdb0.js => session.html.602a88b1.js} | 2 +- ...l.aac6a451.js => session.html.fa0a110f.js} | 2 +- ...m.html.8bd93288.js => sm.html.552b6b44.js} | 4 +- ...m.html.599ec454.js => sm.html.a226714f.js} | 2 +- ...m.html.a2e231e6.js => sm.html.fd569c95.js} | 4 +- ...m.html.ddce8266.js => sm.html.fe572b7b.js} | 2 +- ...s => spring-boot-starter.html.78d66843.js} | 2 +- ...s => spring-boot-starter.html.89e33109.js} | 2 +- ...s => spring-boot-starter.html.adad135d.js} | 2 +- ...s => spring-boot-starter.html.cb1cd476.js} | 2 +- ...tml.5eeaffe9.js => stack.html.39dc52db.js} | 4 +- ...tml.9612a18d.js => stack.html.67e8e31b.js} | 2 +- ...tml.a0d22cd5.js => stack.html.aa5021d8.js} | 2 +- ...tml.7399ec24.js => stack.html.bdb92f2d.js} | 4 +- ...bd996.js => start-arthas.html.1a3db2ff.js} | 2 +- ...01c09.js => start-arthas.html.497d3293.js} | 2 +- ...d95da.js => start-arthas.html.614c57c4.js} | 2 +- ...c8e7c.js => start-arthas.html.6198e218.js} | 2 +- ...html.7682683c.js => stop.html.481c9049.js} | 2 +- ...html.150a6560.js => stop.html.9224e553.js} | 2 +- ...html.b32333b4.js => stop.html.c30e7079.js} | 2 +- ...html.92337bb0.js => stop.html.c39fd416.js} | 2 +- ...ml.f5be624d.js => sysenv.html.152ba8c4.js} | 2 +- ...ml.190ccd25.js => sysenv.html.33a80b4e.js} | 4 +- ...ml.0c3d74c0.js => sysenv.html.e76b6bf3.js} | 4 +- ...ml.416666a5.js => sysenv.html.f7014c3b.js} | 2 +- ...l.bd1fe463.js => sysprop.html.0dfbbffb.js} | 4 +- ...l.8ac285ec.js => sysprop.html.93843170.js} | 2 +- ...l.c463bcd7.js => sysprop.html.ae3ef70a.js} | 4 +- ...l.83009099.js => sysprop.html.f03585de.js} | 2 +- assets/tee.html.14530271.js | 18 --- assets/tee.html.26f3bf83.js | 18 --- assets/tee.html.26f6c8a9.js | 18 +++ ....html.ffedf5a9.js => tee.html.796f8441.js} | 2 +- assets/tee.html.80593816.js | 18 +++ ....html.1fd68c76.js => tee.html.dccc689b.js} | 2 +- ...ml.0170c85f.js => thread.html.96dd9ac3.js} | 2 +- ...ml.553b1dd3.js => thread.html.bceb3488.js} | 6 +- ...ml.1d083244.js => thread.html.c9f7c599.js} | 2 +- ...ml.3d486268.js => thread.html.f8f09dc5.js} | 6 +- ...tml.1fba9aaf.js => trace.html.05e818e5.js} | 2 +- ...tml.2d811f32.js => trace.html.27ac97ec.js} | 4 +- ...tml.89cc6cb1.js => trace.html.4fabc19b.js} | 2 +- ...tml.f4675ea7.js => trace.html.63fe4169.js} | 4 +- ...t.html.53706e22.js => tt.html.2b487719.js} | 12 +- ...t.html.f4a8867b.js => tt.html.a410b6a0.js} | 10 +- ...t.html.e26b44fd.js => tt.html.ab370b4f.js} | 2 +- ...t.html.06ba156a.js => tt.html.ec638e55.js} | 2 +- ...ml.244face9.js => tunnel.html.3a98510a.js} | 10 +- ...ml.3a583b73.js => tunnel.html.5c03c09c.js} | 2 +- ...ml.634d8c45.js => tunnel.html.6d15b349.js} | 2 +- ...ml.0c3c205b.js => tunnel.html.7e8c485e.js} | 10 +- ...l.5f312c99.js => version.html.08321a1e.js} | 2 +- ...l.7908d9e9.js => version.html.3edc2ceb.js} | 2 +- ...l.5bd75c3c.js => version.html.acfdfafa.js} | 2 +- ...l.76793579.js => version.html.e13ddf0e.js} | 2 +- ....1f830c74.js => vmoption.html.698e78cd.js} | 2 +- ....2893cc9a.js => vmoption.html.7a568db9.js} | 4 +- ....5081a863.js => vmoption.html.b0134475.js} | 4 +- ....f7b6a945.js => vmoption.html.d219c85b.js} | 2 +- ...ml.cf122534.js => vmtool.html.27325bff.js} | 12 +- ...ml.a0367808.js => vmtool.html.9e179166.js} | 12 +- ...ml.7c48ec6d.js => vmtool.html.ab938841.js} | 2 +- ...ml.a7d95339.js => vmtool.html.b5c2a935.js} | 2 +- ...tml.bed23820.js => watch.html.2383ed88.js} | 6 +- ...tml.ae8c575e.js => watch.html.72a5979d.js} | 2 +- ...tml.fadb694e.js => watch.html.9d383a57.js} | 6 +- ...tml.ebf01288.js => watch.html.a9d6b6e1.js} | 2 +- assets/web-console.html.0614d78d.js | 1 + assets/web-console.html.17603cf0.js | 1 - ...278269.js => web-console.html.6349f4a1.js} | 2 +- ...3210f1.js => web-console.html.7d232bc6.js} | 2 +- assets/web-console.html.8abc2cdc.js | 1 - assets/web-console.html.e58ea91b.js | 1 + doc/advanced-use.html | 9 +- doc/advice-class.html | 8 +- doc/agent.html | 6 +- doc/ai.html | 6 +- doc/arthas-properties.html | 6 +- doc/arthas3.html | 6 +- doc/async.html | 6 +- doc/auth.html | 6 +- doc/base64.html | 6 +- doc/batch-support.html | 6 +- doc/cat.html | 6 +- doc/classloader-metaspace.html | 6 +- doc/classloader.html | 6 +- doc/cls.html | 6 +- doc/commands.html | 6 +- doc/contact-us.html | 6 +- doc/dashboard.html | 6 +- doc/docker.html | 67 ++++++++++- doc/download.html | 6 +- doc/dump.html | 6 +- doc/echo.html | 6 +- doc/en/ognl-express.html | 17 +++ doc/external-command.html | 6 +- doc/faq.html | 8 +- doc/getstatic.html | 8 +- doc/grep.html | 6 +- doc/groovy.html | 6 +- doc/heapdump.html | 6 +- doc/help.html | 6 +- doc/history.html | 6 +- doc/http-api.html | 11 +- doc/idea-plugin.html | 6 +- doc/index.html | 6 +- doc/install-detail.html | 6 +- doc/jad.html | 6 +- doc/jfr.html | 6 +- doc/jvm.html | 6 +- doc/keymap.html | 6 +- doc/line.html | 6 +- doc/logger.html | 6 +- doc/manual-install.html | 6 +- doc/mbean.html | 6 +- doc/mc.html | 6 +- doc/mcp-server.html | 6 +- doc/memory.html | 6 +- doc/monitor.html | 6 +- doc/ognl-express.html | 77 +++++++++++++ doc/ognl.html | 8 +- doc/options.html | 10 +- doc/perfcounter.html | 6 +- doc/profiler.html | 6 +- doc/pwd.html | 6 +- doc/quick-start.html | 8 +- doc/quit.html | 6 +- doc/redefine.html | 6 +- doc/release-notes.html | 6 +- doc/reset.html | 6 +- doc/retransform.html | 6 +- doc/save-log.html | 6 +- doc/sc.html | 6 +- doc/session.html | 6 +- doc/sm.html | 6 +- doc/spring-boot-starter.html | 6 +- doc/stack.html | 6 +- doc/start-arthas.html | 6 +- doc/stop.html | 6 +- doc/sysenv.html | 6 +- doc/sysprop.html | 6 +- doc/tee.html | 6 +- doc/thread.html | 6 +- doc/trace.html | 6 +- doc/tt.html | 8 +- doc/tunnel.html | 12 +- doc/version.html | 6 +- doc/vmoption.html | 6 +- doc/vmtool.html | 8 +- doc/watch.html | 6 +- doc/web-console.html | 6 +- en/doc/advanced-use.html | 9 +- en/doc/advice-class.html | 8 +- en/doc/agent.html | 6 +- en/doc/ai.html | 6 +- en/doc/arthas-properties.html | 6 +- en/doc/async.html | 6 +- en/doc/auth.html | 6 +- en/doc/base64.html | 6 +- en/doc/batch-support.html | 6 +- en/doc/cat.html | 6 +- en/doc/classloader-metaspace.html | 6 +- en/doc/classloader.html | 6 +- en/doc/cls.html | 6 +- en/doc/commands.html | 6 +- en/doc/contact-us.html | 6 +- en/doc/dashboard.html | 6 +- en/doc/docker.html | 67 ++++++++++- en/doc/download.html | 6 +- en/doc/dump.html | 6 +- en/doc/echo.html | 6 +- en/doc/external-command.html | 6 +- en/doc/faq.html | 8 +- en/doc/getstatic.html | 8 +- en/doc/grep.html | 6 +- en/doc/groovy.html | 6 +- en/doc/heapdump.html | 6 +- en/doc/help.html | 6 +- en/doc/history.html | 6 +- en/doc/http-api.html | 11 +- en/doc/idea-plugin.html | 6 +- en/doc/index.html | 6 +- en/doc/install-detail.html | 6 +- en/doc/jad.html | 6 +- en/doc/jfr.html | 6 +- en/doc/jvm.html | 6 +- en/doc/keymap.html | 6 +- en/doc/line.html | 6 +- en/doc/logger.html | 6 +- en/doc/manual-install.html | 6 +- en/doc/mbean.html | 6 +- en/doc/mc.html | 6 +- en/doc/mcp-server.html | 6 +- en/doc/memory.html | 6 +- en/doc/monitor.html | 6 +- en/doc/ognl-express.html | 77 +++++++++++++ en/doc/ognl.html | 8 +- en/doc/options.html | 10 +- en/doc/perfcounter.html | 6 +- en/doc/profiler.html | 6 +- en/doc/pwd.html | 6 +- en/doc/quick-start.html | 8 +- en/doc/quit.html | 6 +- en/doc/redefine.html | 6 +- en/doc/release-notes.html | 6 +- en/doc/reset.html | 6 +- en/doc/retransform.html | 6 +- en/doc/save-log.html | 6 +- en/doc/sc.html | 6 +- en/doc/session.html | 6 +- en/doc/sm.html | 6 +- en/doc/spring-boot-starter.html | 6 +- en/doc/stack.html | 6 +- en/doc/start-arthas.html | 6 +- en/doc/stop.html | 6 +- en/doc/sysenv.html | 6 +- en/doc/sysprop.html | 6 +- en/doc/tee.html | 6 +- en/doc/thread.html | 6 +- en/doc/trace.html | 6 +- en/doc/tt.html | 8 +- en/doc/tunnel.html | 12 +- en/doc/version.html | 6 +- en/doc/vmoption.html | 6 +- en/doc/vmtool.html | 8 +- en/doc/watch.html | 6 +- en/doc/web-console.html | 6 +- en/index.html | 6 +- index.html | 6 +- math-game.jar | Bin 4365 -> 4370 bytes 493 files changed, 1681 insertions(+), 1219 deletions(-) rename assets/{404.html.532e346d.js => 404.html.1b87fa04.js} (87%) rename assets/{404.html.0f0756d7.js => 404.html.58d317de.js} (63%) rename assets/{advanced-use.html.ce7d6f5f.js => advanced-use.html.2466ac6e.js} (51%) rename assets/{advanced-use.html.899d36c2.js => advanced-use.html.2b80fa7d.js} (92%) rename assets/{advanced-use.html.cf065376.js => advanced-use.html.38aef1b4.js} (52%) rename assets/{advanced-use.html.59632b6f.js => advanced-use.html.5dddb9fa.js} (95%) rename assets/{advice-class.html.9482e515.js => advice-class.html.12568df6.js} (67%) rename assets/{advice-class.html.1fb022df.js => advice-class.html.3778e1f2.js} (67%) rename assets/{advice-class.html.d491abce.js => advice-class.html.7352d445.js} (74%) rename assets/{advice-class.html.0437560f.js => advice-class.html.79697a1e.js} (78%) rename assets/{agent.html.bb83a7be.js => agent.html.2480ffd9.js} (96%) rename assets/{agent.html.80af310f.js => agent.html.55a8cd63.js} (68%) rename assets/{agent.html.b37100a4.js => agent.html.d7974fce.js} (72%) rename assets/{agent.html.c6c0324b.js => agent.html.d870df79.js} (95%) rename assets/{ai.html.b2d958f1.js => ai.html.0d965d9d.js} (74%) rename assets/{ai.html.eea262b3.js => ai.html.4fc4211a.js} (94%) rename assets/{ai.html.a6d2ae52.js => ai.html.530e41ed.js} (75%) rename assets/{ai.html.77daefd0.js => ai.html.76467e93.js} (93%) rename assets/{app.524ecf5c.js => app.e2427bec.js} (62%) rename assets/{arthas-properties.html.898cc171.js => arthas-properties.html.1c61e69c.js} (87%) rename assets/{arthas-properties.html.4827d4b8.js => arthas-properties.html.7dc17e44.js} (99%) rename assets/{arthas-properties.html.d7076c7d.js => arthas-properties.html.962908f3.js} (87%) rename assets/{arthas-properties.html.79bcd7b4.js => arthas-properties.html.c45f5949.js} (98%) rename assets/{arthas3.html.316cb2e0.js => arthas3.html.11401e69.js} (81%) rename assets/{arthas3.html.8d4e3261.js => arthas3.html.98a1b21b.js} (99%) rename assets/{async.html.1e360242.js => async.html.4eaabb46.js} (86%) rename assets/{async.html.51567fc5.js => async.html.58415566.js} (87%) rename assets/{async.html.b03735d9.js => async.html.60215e2c.js} (84%) rename assets/{async.html.332dfef1.js => async.html.89c66164.js} (95%) rename assets/{auth.html.a546b6c7.js => auth.html.031f3521.js} (99%) rename assets/{auth.html.e8af6dce.js => auth.html.10e5d242.js} (94%) rename assets/{auth.html.4c6c9a22.js => auth.html.15a8fda2.js} (99%) rename assets/{auth.html.dc89b429.js => auth.html.9f2ff1c7.js} (92%) rename assets/{base64.html.afb50617.js => base64.html.26159b8a.js} (93%) rename assets/{base64.html.750bcc95.js => base64.html.4b84930d.js} (86%) rename assets/{base64.html.ba24ac32.js => base64.html.9f351db1.js} (98%) rename assets/{base64.html.e2a165a5.js => base64.html.a74ba9fa.js} (97%) rename assets/{batch-support.html.67f90179.js => batch-support.html.2f7463e9.js} (90%) rename assets/{batch-support.html.c65a5a76.js => batch-support.html.2fd7dfc3.js} (78%) rename assets/{batch-support.html.d25cc58d.js => batch-support.html.8e77cbb4.js} (98%) rename assets/{batch-support.html.6d0dd4ad.js => batch-support.html.f1130b14.js} (98%) delete mode 100644 assets/cat.html.294a7128.js delete mode 100644 assets/cat.html.2fba4fba.js rename assets/{cat.html.3a5d25c6.js => cat.html.317b776a.js} (71%) create mode 100644 assets/cat.html.5c2eddad.js rename assets/{cat.html.18f65deb.js => cat.html.8d80e219.js} (68%) create mode 100644 assets/cat.html.a8a712c6.js rename assets/{classloader-metaspace.html.7b8a7fb0.js => classloader-metaspace.html.1c3e8440.js} (91%) rename assets/{classloader-metaspace.html.53200b46.js => classloader-metaspace.html.1d325e53.js} (99%) rename assets/{classloader-metaspace.html.2959f628.js => classloader-metaspace.html.249e56bc.js} (99%) rename assets/{classloader-metaspace.html.2c85daa1.js => classloader-metaspace.html.466bb431.js} (92%) rename assets/{classloader.html.fe574e27.js => classloader.html.0346e215.js} (78%) rename assets/{classloader.html.885df726.js => classloader.html.1dbda3bd.js} (75%) rename assets/{classloader.html.f7c01982.js => classloader.html.3876b1e0.js} (95%) rename assets/{classloader.html.af884720.js => classloader.html.3c2e72a7.js} (93%) rename assets/{cls.html.454065a9.js => cls.html.14369b3c.js} (90%) rename assets/{cls.html.c9aa0c61.js => cls.html.60c40d73.js} (60%) rename assets/{cls.html.73fb0901.js => cls.html.77bb73a5.js} (88%) rename assets/{cls.html.fe97eb01.js => cls.html.8f3a5491.js} (61%) rename assets/{commands.html.26baabfd.js => commands.html.0766e205.js} (99%) rename assets/{commands.html.3ba84332.js => commands.html.3d045ea7.js} (99%) rename assets/{commands.html.610808a3.js => commands.html.4d2820b1.js} (91%) rename assets/{commands.html.85ad84a0.js => commands.html.f93b9fc8.js} (92%) rename assets/{contact-us.html.f45ccfc1.js => contact-us.html.bca72555.js} (98%) rename assets/{contact-us.html.490c3a5d.js => contact-us.html.c13483a2.js} (97%) rename assets/{contact-us.html.e7c63609.js => contact-us.html.f14b9ed1.js} (80%) rename assets/{contact-us.html.3dfc329b.js => contact-us.html.f31aa912.js} (83%) rename assets/{dashboard.html.b6965a28.js => dashboard.html.113af276.js} (91%) rename assets/{dashboard.html.14eaa588.js => dashboard.html.1a8e32e4.js} (84%) rename assets/{dashboard.html.9ad443d2.js => dashboard.html.981a5405.js} (77%) rename assets/{dashboard.html.61a4e15d.js => dashboard.html.f3712bf4.js} (82%) delete mode 100644 assets/docker.html.27b15072.js create mode 100644 assets/docker.html.3597bdbf.js rename assets/{docker.html.17377288.js => docker.html.7291090b.js} (61%) delete mode 100644 assets/docker.html.a1aa4dd5.js delete mode 100644 assets/docker.html.a457bc6d.js create mode 100644 assets/docker.html.ab7f2873.js create mode 100644 assets/docker.html.da50033d.js rename assets/{download.html.9f397283.js => download.html.1a63d650.js} (90%) rename assets/{download.html.336d4739.js => download.html.5f1c78c9.js} (98%) rename assets/{download.html.96b3e09e.js => download.html.6df5a02f.js} (97%) rename assets/{download.html.1194e616.js => download.html.c5d48124.js} (88%) rename assets/{dump.html.c3f8bd1c.js => dump.html.0eae962a.js} (78%) rename assets/{dump.html.d49fa0fb.js => dump.html.24ea4d2e.js} (65%) rename assets/{dump.html.f81dadc5.js => dump.html.30dc9666.js} (61%) rename assets/{dump.html.68dd64e1.js => dump.html.894aad59.js} (87%) create mode 100644 assets/echo.html.1ca1bcbf.js delete mode 100644 assets/echo.html.42bccc7b.js rename assets/{echo.html.e5a5e66b.js => echo.html.4b25719e.js} (71%) delete mode 100644 assets/echo.html.6baec513.js create mode 100644 assets/echo.html.8bd53ad3.js rename assets/{echo.html.54dceeee.js => echo.html.fdda77b4.js} (68%) rename assets/{external-command.html.669250f4.js => external-command.html.3e8d782b.js} (92%) rename assets/{external-command.html.4a91a1bc.js => external-command.html.9a47f025.js} (93%) rename assets/{external-command.html.07feb147.js => external-command.html.cc4ab827.js} (99%) rename assets/{external-command.html.16e594f3.js => external-command.html.f331f51e.js} (99%) rename assets/{faq.html.5b15bab7.js => faq.html.0b4e272a.js} (59%) rename assets/{faq.html.92bd353a.js => faq.html.188c09a3.js} (97%) rename assets/{faq.html.44fb2f53.js => faq.html.36186b06.js} (97%) rename assets/{faq.html.7de57ec6.js => faq.html.8aecb0b8.js} (59%) rename assets/{getstatic.html.bb912d8f.js => getstatic.html.0079aa66.js} (74%) rename assets/{getstatic.html.07f2529e.js => getstatic.html.06e13f21.js} (76%) rename assets/{getstatic.html.a9eaa5e6.js => getstatic.html.99701f59.js} (72%) rename assets/{getstatic.html.36841961.js => getstatic.html.d3e5edb1.js} (75%) rename assets/{grep.html.577df941.js => grep.html.6ba4e7cd.js} (71%) rename assets/{grep.html.7b4c2cd4.js => grep.html.831320e0.js} (68%) rename assets/{grep.html.57324644.js => grep.html.a6f74b81.js} (75%) rename assets/{grep.html.c6a57b9b.js => grep.html.c007dc7c.js} (73%) rename assets/{groovy.html.4ef1e7fc.js => groovy.html.47cc1adc.js} (99%) rename assets/{groovy.html.1c2baf9b.js => groovy.html.6c982925.js} (87%) rename assets/{groovy.html.fc87055f.js => groovy.html.74effc34.js} (99%) rename assets/{groovy.html.bf8a6589.js => groovy.html.d70f2cba.js} (89%) rename assets/{heapdump.html.0ba3823c.js => heapdump.html.291f6f55.js} (60%) rename assets/{heapdump.html.22c951fc.js => heapdump.html.2cfa3407.js} (88%) rename assets/{heapdump.html.7a6011ee.js => heapdump.html.3c58b047.js} (59%) rename assets/{heapdump.html.986bb645.js => heapdump.html.aa31b283.js} (86%) rename assets/{help.html.fcbdb8fe.js => help.html.026cd72d.js} (78%) rename assets/{help.html.1c79c4bb.js => help.html.0f234388.js} (99%) rename assets/{help.html.2db31f67.js => help.html.66e76dc7.js} (65%) rename assets/{help.html.c94858ab.js => help.html.9a08c3c3.js} (99%) rename assets/{history.html.5487cd70.js => history.html.0a1c3393.js} (97%) rename assets/{history.html.0118eb18.js => history.html.62683097.js} (77%) rename assets/{history.html.aed5546b.js => history.html.9f5e30aa.js} (78%) rename assets/{history.html.5ac8e7b1.js => history.html.a9fdd95c.js} (97%) rename assets/{http-api.html.78a51f51.js => http-api.html.132670cd.js} (97%) rename assets/{http-api.html.a397734f.js => http-api.html.99c4fcf0.js} (93%) rename assets/{http-api.html.0b120e8b.js => http-api.html.a3d3ab18.js} (96%) rename assets/{http-api.html.fd0631ff.js => http-api.html.d561b855.js} (94%) rename assets/{idea-plugin.html.ccb84f96.js => idea-plugin.html.34a25f10.js} (97%) rename assets/{idea-plugin.html.b12bba00.js => idea-plugin.html.57e8f57c.js} (87%) rename assets/{idea-plugin.html.9ba5ce05.js => idea-plugin.html.7d6cbcc9.js} (89%) rename assets/{idea-plugin.html.c59405cc.js => idea-plugin.html.ae6aa4f7.js} (72%) rename assets/{index.html.5332fd62.js => index.html.086821c2.js} (63%) rename assets/{index.html.74bff2cf.js => index.html.18118d67.js} (63%) rename assets/{index.html.8c8f4e7a.js => index.html.34145a94.js} (98%) rename assets/{index.html.7ce27c03.js => index.html.6dcd1531.js} (94%) rename assets/{index.html.58d0a509.js => index.html.760efd19.js} (98%) rename assets/{index.html.7f2e8ca4.js => index.html.787b4b50.js} (88%) rename assets/{index.html.ed9ed3a9.js => index.html.cd23e113.js} (94%) rename assets/{index.html.8cbf0aa1.js => index.html.e6b12e55.js} (83%) rename assets/{install-detail.html.43202623.js => install-detail.html.041805f1.js} (99%) rename assets/{install-detail.html.0520b8fe.js => install-detail.html.40e05e2a.js} (99%) rename assets/{install-detail.html.624d7b63.js => install-detail.html.743978fa.js} (92%) rename assets/{install-detail.html.c1229dbb.js => install-detail.html.93881ff8.js} (95%) rename assets/{jad.html.acef5a50.js => jad.html.039013c5.js} (92%) rename assets/{jad.html.e5676fd2.js => jad.html.1626c1c4.js} (90%) rename assets/{jad.html.eb7a2926.js => jad.html.2e62e37f.js} (88%) rename assets/{jad.html.403e568d.js => jad.html.49ef2409.js} (93%) rename assets/{jfr.html.5ac2287e.js => jfr.html.2139c5d1.js} (55%) rename assets/{jfr.html.7ec12793.js => jfr.html.b77304ea.js} (88%) rename assets/{jfr.html.35e0ac56.js => jfr.html.bab2ebee.js} (90%) rename assets/{jfr.html.b9abd2e5.js => jfr.html.fc123fb3.js} (51%) rename assets/{jvm.html.ff68b164.js => jvm.html.43ae7a7d.js} (90%) rename assets/{jvm.html.432f6c94.js => jvm.html.684dd27a.js} (84%) rename assets/{jvm.html.9c086903.js => jvm.html.9b922226.js} (90%) rename assets/{jvm.html.24d408b0.js => jvm.html.eac591a0.js} (81%) delete mode 100644 assets/keymap.html.1f91f840.js create mode 100644 assets/keymap.html.33e7213e.js rename assets/{keymap.html.bda8b228.js => keymap.html.4bc836ba.js} (80%) rename assets/{keymap.html.32f701a7.js => keymap.html.96d9632d.js} (84%) create mode 100644 assets/keymap.html.bf1351b4.js delete mode 100644 assets/keymap.html.caa095a2.js rename assets/{line.html.7a5cbdbd.js => line.html.01eb3559.js} (57%) rename assets/{line.html.57fda898.js => line.html.70ec176e.js} (55%) rename assets/{line.html.e9882513.js => line.html.a9e8e2e4.js} (92%) rename assets/{line.html.d873e96f.js => line.html.bfbf7f2b.js} (95%) rename assets/{logger.html.52980a8c.js => logger.html.3d035db4.js} (92%) rename assets/{logger.html.71a07287.js => logger.html.b88626af.js} (95%) rename assets/{logger.html.2c243abb.js => logger.html.c09808a8.js} (94%) rename assets/{logger.html.274394d2.js => logger.html.e09aeaa6.js} (88%) rename assets/{manual-install.html.c8373a08.js => manual-install.html.315a4f72.js} (99%) rename assets/{manual-install.html.0447e151.js => manual-install.html.81853c98.js} (99%) rename assets/{manual-install.html.0d9682ca.js => manual-install.html.85f99b8b.js} (85%) rename assets/{manual-install.html.73a696a2.js => manual-install.html.c9b06816.js} (88%) rename assets/{mbean.html.95b86909.js => mbean.html.0bf95e2b.js} (78%) rename assets/{mbean.html.8a3771f2.js => mbean.html.927e96dd.js} (77%) rename assets/{mbean.html.9eaf227e.js => mbean.html.d1e0ff54.js} (52%) rename assets/{mbean.html.c8caf62f.js => mbean.html.ee4f07f1.js} (52%) delete mode 100644 assets/mc.html.3c57e00d.js create mode 100644 assets/mc.html.9ed50f47.js rename assets/{mc.html.96f7758d.js => mc.html.d96eb37d.js} (68%) rename assets/{mc.html.2bb09391.js => mc.html.e292ce83.js} (71%) create mode 100644 assets/mc.html.f0819ad2.js delete mode 100644 assets/mc.html.f537545c.js rename assets/{mcp-server.html.f0f4ef7d.js => mcp-server.html.3cd2eec5.js} (97%) rename assets/{mcp-server.html.2548e7c2.js => mcp-server.html.609551f2.js} (96%) delete mode 100644 assets/mcp-server.html.675136b6.js create mode 100644 assets/mcp-server.html.b2d1ada5.js rename assets/{mcp-server.html.d0555bb2.js => mcp-server.html.c2f288cd.js} (50%) rename assets/{memory.html.290d23a6.js => memory.html.3bde6b86.js} (77%) rename assets/{memory.html.492ae9d3.js => memory.html.8e88a19c.js} (97%) rename assets/{memory.html.7f3cbe90.js => memory.html.a1b2b15c.js} (72%) rename assets/{memory.html.4cb5296e.js => memory.html.e96b1c33.js} (98%) rename assets/{monitor.html.aa324b7d.js => monitor.html.5a803975.js} (93%) rename assets/{monitor.html.78686d08.js => monitor.html.b4c17a07.js} (75%) rename assets/{monitor.html.4f1f94d6.js => monitor.html.be46b9bd.js} (78%) rename assets/{monitor.html.fff63a76.js => monitor.html.fc2a02d0.js} (91%) create mode 100644 assets/ognl-express.html.0cd6cdc8.js create mode 100644 assets/ognl-express.html.1fb465fc.js create mode 100644 assets/ognl-express.html.3082adb7.js create mode 100644 assets/ognl-express.html.f156515d.js rename assets/{ognl.html.ab98468a.js => ognl.html.67f38565.js} (78%) rename assets/{ognl.html.bd362a1e.js => ognl.html.c20b61d9.js} (77%) rename assets/{ognl.html.7836f77d.js => ognl.html.c39364dd.js} (77%) rename assets/{ognl.html.075b13f3.js => ognl.html.d226d5a4.js} (80%) rename assets/{options.html.144916f6.js => options.html.12136572.js} (73%) rename assets/{options.html.3ab55601.js => options.html.7c3bfae1.js} (89%) rename assets/{options.html.ec66483d.js => options.html.7de13b4f.js} (91%) rename assets/{options.html.c70226da.js => options.html.dae019ce.js} (68%) rename assets/{perfcounter.html.245a5ce5.js => perfcounter.html.02a2f773.js} (80%) rename assets/{perfcounter.html.cbce5e22.js => perfcounter.html.27f41458.js} (75%) rename assets/{perfcounter.html.19590f54.js => perfcounter.html.96a88381.js} (69%) rename assets/{perfcounter.html.0dc8c8a4.js => perfcounter.html.e11ca3a1.js} (70%) rename assets/{profiler.html.f515f668.js => profiler.html.0cd67a30.js} (98%) rename assets/{profiler.html.887a8a7c.js => profiler.html.3f6cfb27.js} (84%) rename assets/{profiler.html.e7fb718f.js => profiler.html.67035c12.js} (97%) rename assets/{profiler.html.fd3324a8.js => profiler.html.8e2f4114.js} (82%) rename assets/{pwd.html.b52402a6.js => pwd.html.5af5f815.js} (68%) create mode 100644 assets/pwd.html.60a0a503.js delete mode 100644 assets/pwd.html.9c033639.js create mode 100644 assets/pwd.html.a1551912.js delete mode 100644 assets/pwd.html.f8e10ae4.js rename assets/{pwd.html.48cbf02c.js => pwd.html.fe379ca1.js} (71%) rename assets/{quick-start.html.bca18fad.js => quick-start.html.0a841ca8.js} (90%) rename assets/{quick-start.html.c6104c27.js => quick-start.html.4a4a854b.js} (92%) rename assets/{quick-start.html.687d975b.js => quick-start.html.7059ebe7.js} (92%) rename assets/{quick-start.html.4adf7a28.js => quick-start.html.90bb144c.js} (93%) rename assets/{quit.html.515a6f81.js => quit.html.44df6ca4.js} (92%) rename assets/{quit.html.2267f888.js => quit.html.47228ba9.js} (61%) rename assets/{quit.html.dcd270e6.js => quit.html.de692497.js} (90%) rename assets/{quit.html.df8a6408.js => quit.html.e375b368.js} (60%) rename assets/{redefine.html.30ef7ca4.js => redefine.html.02b78145.js} (91%) rename assets/{redefine.html.7b61fdfa.js => redefine.html.05bba39f.js} (69%) rename assets/{redefine.html.8eaa7cae.js => redefine.html.68e8d9d1.js} (85%) rename assets/{redefine.html.f31e034f.js => redefine.html.c7e214b6.js} (71%) rename assets/{release-notes.html.d64bcf20.js => release-notes.html.4d2c5e1d.js} (99%) rename assets/{release-notes.html.5fb5ffc5.js => release-notes.html.bb1f1375.js} (94%) rename assets/{release-notes.html.0eb362a1.js => release-notes.html.c5c1003b.js} (99%) rename assets/{release-notes.html.14a11eb1.js => release-notes.html.daaf684d.js} (92%) rename assets/{reset.html.d05a2660.js => reset.html.334188fe.js} (84%) rename assets/{reset.html.538a5ab2.js => reset.html.5e039e96.js} (72%) rename assets/{reset.html.2e9fc05c.js => reset.html.94ebcaf7.js} (80%) rename assets/{reset.html.86808cc2.js => reset.html.9c6228ed.js} (74%) rename assets/{retransform.html.92f08601.js => retransform.html.5a86cbf5.js} (93%) rename assets/{retransform.html.7800567a.js => retransform.html.822f2ec7.js} (91%) rename assets/{retransform.html.f32cdadb.js => retransform.html.8ab36d20.js} (94%) rename assets/{retransform.html.b4cdf8c0.js => retransform.html.cee06ec8.js} (91%) delete mode 100644 assets/save-log.html.02816c57.js delete mode 100644 assets/save-log.html.19fe32a1.js rename assets/{save-log.html.d56e7726.js => save-log.html.6b300b97.js} (84%) create mode 100644 assets/save-log.html.aaad8817.js rename assets/{save-log.html.dcea4094.js => save-log.html.f871291e.js} (77%) create mode 100644 assets/save-log.html.fea95237.js rename assets/{sc.html.98f7cc34.js => sc.html.049f2400.js} (60%) rename assets/{sc.html.bdfbd20c.js => sc.html.13503b4f.js} (75%) rename assets/{sc.html.27f757b3.js => sc.html.7cdf140e.js} (77%) rename assets/{sc.html.3b5ef46c.js => sc.html.982b84c0.js} (56%) rename assets/{session.html.a2ad9e80.js => session.html.0168cb9d.js} (72%) rename assets/{session.html.a83717c2.js => session.html.35f7a4aa.js} (95%) rename assets/{session.html.01d5cdb0.js => session.html.602a88b1.js} (77%) rename assets/{session.html.aac6a451.js => session.html.fa0a110f.js} (94%) rename assets/{sm.html.8bd93288.js => sm.html.552b6b44.js} (65%) rename assets/{sm.html.599ec454.js => sm.html.a226714f.js} (80%) rename assets/{sm.html.a2e231e6.js => sm.html.fd569c95.js} (69%) rename assets/{sm.html.ddce8266.js => sm.html.fe572b7b.js} (77%) rename assets/{spring-boot-starter.html.90204de4.js => spring-boot-starter.html.78d66843.js} (87%) rename assets/{spring-boot-starter.html.17c047b1.js => spring-boot-starter.html.89e33109.js} (86%) rename assets/{spring-boot-starter.html.4d61e938.js => spring-boot-starter.html.adad135d.js} (99%) rename assets/{spring-boot-starter.html.e05dbeb5.js => spring-boot-starter.html.cb1cd476.js} (99%) rename assets/{stack.html.5eeaffe9.js => stack.html.39dc52db.js} (68%) rename assets/{stack.html.9612a18d.js => stack.html.67e8e31b.js} (92%) rename assets/{stack.html.a0d22cd5.js => stack.html.aa5021d8.js} (86%) rename assets/{stack.html.7399ec24.js => stack.html.bdb92f2d.js} (71%) rename assets/{start-arthas.html.643bd996.js => start-arthas.html.1a3db2ff.js} (99%) rename assets/{start-arthas.html.19401c09.js => start-arthas.html.497d3293.js} (99%) rename assets/{start-arthas.html.14fd95da.js => start-arthas.html.614c57c4.js} (88%) rename assets/{start-arthas.html.13fc8e7c.js => start-arthas.html.6198e218.js} (87%) rename assets/{stop.html.7682683c.js => stop.html.481c9049.js} (61%) rename assets/{stop.html.150a6560.js => stop.html.9224e553.js} (92%) rename assets/{stop.html.b32333b4.js => stop.html.c30e7079.js} (89%) rename assets/{stop.html.92337bb0.js => stop.html.c39fd416.js} (60%) rename assets/{sysenv.html.f5be624d.js => sysenv.html.152ba8c4.js} (88%) rename assets/{sysenv.html.190ccd25.js => sysenv.html.33a80b4e.js} (82%) rename assets/{sysenv.html.0c3d74c0.js => sysenv.html.e76b6bf3.js} (80%) rename assets/{sysenv.html.416666a5.js => sysenv.html.f7014c3b.js} (82%) rename assets/{sysprop.html.bd1fe463.js => sysprop.html.0dfbbffb.js} (90%) rename assets/{sysprop.html.8ac285ec.js => sysprop.html.93843170.js} (83%) rename assets/{sysprop.html.c463bcd7.js => sysprop.html.ae3ef70a.js} (91%) rename assets/{sysprop.html.83009099.js => sysprop.html.f03585de.js} (86%) delete mode 100644 assets/tee.html.14530271.js delete mode 100644 assets/tee.html.26f3bf83.js create mode 100644 assets/tee.html.26f6c8a9.js rename assets/{tee.html.ffedf5a9.js => tee.html.796f8441.js} (68%) create mode 100644 assets/tee.html.80593816.js rename assets/{tee.html.1fd68c76.js => tee.html.dccc689b.js} (71%) rename assets/{thread.html.0170c85f.js => thread.html.96dd9ac3.js} (94%) rename assets/{thread.html.553b1dd3.js => thread.html.bceb3488.js} (86%) rename assets/{thread.html.1d083244.js => thread.html.c9f7c599.js} (96%) rename assets/{thread.html.3d486268.js => thread.html.f8f09dc5.js} (82%) rename assets/{trace.html.1fba9aaf.js => trace.html.05e818e5.js} (95%) rename assets/{trace.html.2d811f32.js => trace.html.27ac97ec.js} (87%) rename assets/{trace.html.89cc6cb1.js => trace.html.4fabc19b.js} (94%) rename assets/{trace.html.f4675ea7.js => trace.html.63fe4169.js} (89%) rename assets/{tt.html.53706e22.js => tt.html.2b487719.js} (85%) rename assets/{tt.html.f4a8867b.js => tt.html.a410b6a0.js} (84%) rename assets/{tt.html.e26b44fd.js => tt.html.ab370b4f.js} (92%) rename assets/{tt.html.06ba156a.js => tt.html.ec638e55.js} (95%) rename assets/{tunnel.html.244face9.js => tunnel.html.3a98510a.js} (79%) rename assets/{tunnel.html.3a583b73.js => tunnel.html.5c03c09c.js} (93%) rename assets/{tunnel.html.634d8c45.js => tunnel.html.6d15b349.js} (91%) rename assets/{tunnel.html.0c3c205b.js => tunnel.html.7e8c485e.js} (81%) rename assets/{version.html.5f312c99.js => version.html.08321a1e.js} (72%) rename assets/{version.html.7908d9e9.js => version.html.3edc2ceb.js} (91%) rename assets/{version.html.5bd75c3c.js => version.html.acfdfafa.js} (77%) rename assets/{version.html.76793579.js => version.html.e13ddf0e.js} (92%) rename assets/{vmoption.html.1f830c74.js => vmoption.html.698e78cd.js} (83%) rename assets/{vmoption.html.2893cc9a.js => vmoption.html.7a568db9.js} (80%) rename assets/{vmoption.html.5081a863.js => vmoption.html.b0134475.js} (82%) rename assets/{vmoption.html.f7b6a945.js => vmoption.html.d219c85b.js} (86%) rename assets/{vmtool.html.cf122534.js => vmtool.html.27325bff.js} (73%) rename assets/{vmtool.html.a0367808.js => vmtool.html.9e179166.js} (74%) rename assets/{vmtool.html.7c48ec6d.js => vmtool.html.ab938841.js} (93%) rename assets/{vmtool.html.a7d95339.js => vmtool.html.b5c2a935.js} (94%) rename assets/{watch.html.bed23820.js => watch.html.2383ed88.js} (83%) rename assets/{watch.html.ae8c575e.js => watch.html.72a5979d.js} (95%) rename assets/{watch.html.fadb694e.js => watch.html.9d383a57.js} (87%) rename assets/{watch.html.ebf01288.js => watch.html.a9d6b6e1.js} (97%) create mode 100644 assets/web-console.html.0614d78d.js delete mode 100644 assets/web-console.html.17603cf0.js rename assets/{web-console.html.db278269.js => web-console.html.6349f4a1.js} (85%) rename assets/{web-console.html.553210f1.js => web-console.html.7d232bc6.js} (88%) delete mode 100644 assets/web-console.html.8abc2cdc.js create mode 100644 assets/web-console.html.e58ea91b.js create mode 100644 doc/en/ognl-express.html create mode 100644 doc/ognl-express.html create mode 100644 en/doc/ognl-express.html diff --git a/404.html b/404.html index 8e474eb44..533a34830 100644 --- a/404.html +++ b/404.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); arthas - + -

404

这是一个 404 页面
回到首页
- +

404

我们怎么到这来了?
回到首页
+ diff --git a/arthas-boot.jar b/arthas-boot.jar index f76698492ae651eb04a5151c804d6d57fedfc1a4..d741614fdf831d2122a229b2c6851ff5e471bb42 100644 GIT binary patch delta 10024 zcmZ8{1y~hb*EVP9?rxCo?o>b;lt#J)Dd`>>DG`aGL0Umt>GDWPgGx6@N~ePS=aKjM zzW4jjb)9qeeXo13y=TqZQ)}WQF}ou%iFDMFQAm)GFffn|{H1jJoS(NP6Y+qdd#m-T zlw7D>Jt41Yz1``pe8VpHn(3Efdh_PT=JtlA2Dd8D)fbFeC;<~e~djggj-jAqm#%=?0Zz&Yl-?e ze!x1Ni)^m+-bc!khrQ+%E?Y8GsBz(fd4eir+9GY1Lfvxxzi+?r{xqp@%p9$qW=Fy6 zZ7m4DK|(?z1CWqNk)R}cfE-Lq9(IEB6GR^PW8F{cQG5+rqoYL8DZ0s=X2jdRCk^9{ zXu!JsSs~7&nUy}#jx!WgU+@i1Cyf$Yfc=3aFn;4iTGQCv>uTq9ZHNswQCj8XItt_L zOnjDJvGGm!Fd-9BYBbI>0rg|{{YQLkm+pKy8h$y*3faM0{-zUEmD3=#3!c<0y-$M7 zg!EKmJi~Q`?FSv56Wt3^sO^3B#{4MB_oyz;^2dz#$1KJE0uG!hBZxSxa_Ce?-$%#7oQD z^_kw%raoq|30enGz*Os(#y|Jey}sMdNPhC+IQ@egm?#_ZWCQ5^s7#QXF*c-gJvNV7 zVZ0#$`Q34{Co0cPR}$MJEg(J9@!M%IHEKhan&0r4O6}A*<@s9Gm+~oZQznmKH!qjh zk8vHWv!i>2kS5WmOPnYZW+dw+-e>!KD}UUoRe9fOpoX>E$zRWt>+pV#l2KfadFR(7 zo8}U%1!mmDxjrutqTI2n)bP`f4!rD0^~{-^h$=G}FCS(fsrbY%MpDD^=`iv02l@$O zO3_uyNO22p3do9k(ekTWKw!e}SE&*2YkK$HAHXZ(P_EqhXEV7SKPySY*#urlW;k#s zqjYvjM~q?i*0UziQX8;5?@)HIh+Ju=ZxB!qB39Q9YGP{!FRgK9jK8_9{iGZ|qX`~+ zCJ7@St|G2BY~xU2a<`$Qtk>=9DHQu~Yi6#YZ~2GesYIYFcg8=an+1V54RT{bfg_GDR-o-w)S5< zKEi)RUwXaUuaeCX68S{!IpvjVTt1VW_7U0fAW5fUNXlyC<-ML;66wbALL5p<>l3Mm zOVNx6M?<)Yf_uxx8o)AgP~_za3%q_)AaS!6d%!TP3)8&{`> zT+T^UF0W)7`77n=H#U&hfDy}pjx=*9lbzS#!k7N~YH7=Rrxs0SxqgS9 zv((EXMteR|4e>eqk{F8DYbR&#i}r-x;1W`ru~carCdu=@^RJWs2Rr*_ zjniD!T#1bzdv*pSz%yAtUsw_L?%MKh5@cxMS{>vtU+ex+Vp6%b;dv&ziF&^aw-e?n zA$+Bvb;p?l5_z@jh2BjNv7xFq^Rf;jy#88z7}+D0xQ()xSQ%wCG01Q_<^9tH(}E(A z*bg+niS^@dj_JPG(*-B+d>*A7rXs6~IP28aiIhXLA{oJ?0bfNO+MS@lk#2Zn+5aTU zt18vHp{UkNL$n<^3&FI2SKiWt~F~^sIL7IDTde>`}ytu7=QL!v_j~zs_Dxh zjpO!f{6#1ymquhJo>ta->OyMY$udSlT+I3FuO#6)hn!!eZ=VIu-8{jXtG#Sf+?Aig ziVWc_p?oD0kO+SAe9;p6!Qkh*gEbeZyD`q$l~EsR_`l(Zw;+KNdNa#f35MZL>h4pRX}`YQeY@# z&`Vx`Gv#_(0=@LfUoF(Zi&$?4Guhv;Cd+1ASb30;zS*X9GEhL(asX;0MK$aN1t|WD z;83g1i(SI#h$nxi%Cc;Ji5@FRXa9@iX#!=8{PPm~m{1xb#){vi$LEXt_ume`>JsNK z5nN31cqdK6EX5G6lV`*2{~{5u<g4P+t&oO#jjjnHs!>liryi)u=6s|8d z>AKl9{!V5ngx;pn#^w4-)cnK3_vxGXy^Evs-;aI=M=gAxafw){s++TKHG9^$`}5qk zb>V5_`*&t2?6=OZ4UPKUav8pWc54w{lyv~2LEu$FH3(Ax~ z(EHqJlZn#xoO@#96*|`&46RVz8Y<=c*a;C$qB$y>@in4~TXt6oiUXetDblQ!lVCCJNU?f~PGw@%x8A2J z&dd4ClpfBHsQWbKsq^hM$;Rsh+P;Gt-+cvlTRm#h7qshn-D~r@ij&lwh(D;RvX8O4 zjg^X5mU#%_j!=FI_{E#?YT#Fh{f#`{cj7d~*-EzAN)^uU{ZIUtoTDe3Ibv=^;Z)gH z<}(=~8Ex2Kg#7odMYcSThSX1nBCx#Ko%2ZV`=in3kuQ;zl0@GhOq9 zVvciG4s!;Exm|ojyGOp*UJ7HMXVQeHrDWNQJFvqg@b1I1vxC_-?FHvYaq>sI-8%x= zHu3GmN3F#3vr%U#dHZcIiG+eA(BV#E@SQg}6*SS`f=reMM%=Af;rW8_{0+;d{$clV zooH;@=sx#)_TSCYqA4qU87tYK1jYBJQM<(98a;t~60b!fUar^9(?GeqO&V1P{8PT3 z?z9I#BttL^UHGSZ=D7!W=X)}rEZJ0bj&^&$HEmKCYO2FE;lwuIaX0H7KHhr**?HWA zHiu+H>|%*ck=}2vdWBl;)%4xtF*He+@Wu98>?1ljYK4#IITrzs-Xcl@=cJQ1OJ&(c zCp7Ztg+_1JmnC|KJ%@Di96KkvG;Mq|C7DuIHn|u0JRbU1nx^#PopEV?^4??cHt8A0 zoDuV}Lwoi$qmm7MSMs9wJFZMc1#R^3e1olnUl1!?n)SzMcTM+jjTJjw1P}gUzH)G+ zMj*wCk(ldCw|iRl%DXo>ptcu9)u#P@pJ+B)L7JY=Y99Q~K0?lP?_`JZ;3-WK5>oJV zjp(Ax=?og2sTRsA+Ar?!;fExyTEipmW~^`|V(R>el>jmL*?py!aVtM6u{V1-Vzz=g zL!V36E&b}UR|f7I`qjZ}(y~A9;b;%o8jXAom!NR<5}FtHiu#EM2l>TlXDIX12i(bs zvvVV?DzdG1b)s|e;Jp1s{wANT#hnGRD+rN#H<)LCF+PzCrcd3E(%kjEfAPYI{#0Z0 z_Dta&{l}Mw7v0Uc8^0|T{pp{KQFy`3zsPsPx(0u(Pz#2TTm;wSSG7M!^5|pe&s}z$ z#}1*pGFZa^<>nu4aDZp2XK>oUW!`X3x3^-``1pH~6Py-rtMTdlF?^taUsi7P(gVZw z8e3Pi%OFO`SN!U#wZ{B|P(ogc;c$N&dJY+NVS&)nXysMMipEvECH*QMyFKsC*0#!mJqX_(klce*T@Qa(n4-n3H2=)ncAgi{bn3+ z>pO@j$04y{=E~+-w|>&I8jN9h;wDg~Du>DvQ7ElEh|%)CCu?S8VxDYFkyu3_EkhV$(bkVN0q?Omm3LO zBjM^X11Ik>^3G-aq`Dv1w7;vN_cb7O^o)VX_G64olzv;O2`p}SZ*gA1sng33YL(iF zIb}R!4kAHEgwfL4(aKSme$f}PpBb@h8(tl$#Xr!daQ}KptHY$H7LWE>Pfwq{a2YR< zSPi>A_7`DtAHGeLvbRYQ-y^d4w^qqJd7w65Im$9k7y9jl+ zTk^@)hlt5?Nf{-K{_MU%*;T{-s+HAq$(+YB=>xXJAC(A43auIX^|Dl=S05+5SFk^< z59T-NvheLH;gk6lA54%sZeh>Dijx+I0rc%pyOt$hO>)I3z3Lb~ z zI{*|Or4unL^4}h}I^S}i+NwEyS}S9+O2zXrkJf5zrRv5ZQS%~+Oq17L_$rcp3a@wrRtDc=L>`aHisJI@;lu3|Ub%2A%0YJWP;U5nHs45{We znsb$24F~J7#EeYX`8;fRSZc1PA#(mz-vSJXs12}H{sEJ!mUBq4lg?-nNBMEr0ve!7XAKE_G7mSg)*&F4HC0BrI-~# zQ4><@5rs4|xeZ`wNklCWwOd23-2)E$vAV)ft}b@{$XxsCkIb*JWD_hl^v$|RY&CGYS0C8yRS-`UB_ymQa% zh;y`%f*YdS${V`d!kgGR{3Eb>R^<|Z)auf0RQx*0fi7g#_+@^8RyUt?_F*WS>hcxm z8wYfMna1Q%PrmIuhk?U3MgKhffrBgbjld3u$=x!=19#42It6(9H{pra3}t`n^3T*I zj}FMFezu4A`uUC#E~0NeJaDDj4UX>h2Q`V?z~Z8|+k)6dWZ|C8qPJkjitw=SJ*HJ0DM#r56+OL^hN<L)hHp|>S8P-6q^DflYMKs+H1o>y(U3U*+)F;$?{}`1Y*WhUt z^D%8D`b5^{+ed*XVYU>rnGN!fNY|L6H*8T^scC0tW+igIQ;)@meT%> zWg1#>cI&kH%wogKzSg`fIMI`mzG@6|BtJ|E!~Y%f2J0#${rG4$O8W6*i?G3l_=fm5 z@^Y|>59$r-RvC0Zz|_OtSv#HbKKDu=iP4gWztKhu6L?;Hh~u)%kQwEg$S@QvMFmme z;Ny}}6%Y+Z`w?UX>5e`*#(Rq@qFXXudS#6+%$G%2#I$<5NHO5Q{Cs^{f$h5&aam)w`zQ z^lFQGBNtP2Mc$r*Cxw(k$%Bp=s%>R_<}d~~60#4%ddvLtRyHi{5As+y(BG58y6v8) zl}$ms+)pXgP@!L%S!PybR<=;EP`*&PP`IFW@T_rWyWFSLw&vK^MVvN``+{`DaD$IO zS5gb;!d>eFpYM!6(vXqe!29A%UbiTuwZX7>wCx4glJAwEO+Ca>)D7m4(n;Slemvue zy6(x;o<&LX-BjjQZ!;Os&7`&?}sg%rYTn*r>3F*-mdU$FKScz*{B#IV5ZmOILIA>yM#3v zzx|q1TOfFWXpY^@I~PPMRVf%e8UwJzTs}0VZLf-!TcZe44IdR zGuWhkyIwpx8{FY=>SXGSFHfvLoYqZ0*=^?NH@J+fLN-p5JP0$|F1(W~LSc(8Aw8Z6?R1)_e z&@UwV?>&ndzwr~730>P#s4Os(9*lV|Dii1FC^k|QA|1`VPF2TSJ%U2~2a~zspiX26 z4hP>n_)TZpFD;H6f)&`1TN&zdX!FvEwN_;Q^T(avCUjgAyY6*9Y!_F{nnu+NJ=&6O z=!vrnvog-)n_(8M(EAqFol>)M*JoD)Epcl{HmSJx?2w1OMoH(HcY-P@@`PqeYf%Y3 z6*s>S(-*{A$j8>9&3U)T$`h0CdM&|}r<}ouNCGcHya|q9Tzz?ya(_93=R1!;-mvHE z`(X9cx``>XKGPYG8?TYH!ML|cB7qC1GTbar*_ZAoG4_S5U9C8#+BPRM=GE`2DE*P0 z?R4D?YivG1?cOOPFA@Dv*p?siq>5b_%>_#+91m5NW;;WVJuRT}!IaWrN$#srVUSZ8 z9Q50Q<<*qv#fO309Q|cw#&7eiq>i~0N;apX_aaPY@y|}B8^*BRnQkz&O3978&BN=r z?3$9z!%VmJFJ*7^Tz=7zeF~zeS}4moH0IZm@t;;)C|#(=>?Cwg@uAgU{Oy1g2-A?wmKWJT<7?r7@|cqu~Ry@V%eGg5XcWGyNzSn^S9Qms)|=?xauanQ3BeS8B%P z*B~^wF>ijY_T;ZlqzEuMcT@PebInbs z*#0>2NR>8PRu9$4xqeXK6k$IN`-DQ)CqV)c;|Jl~W+oi>AssJT*t3v)&Do&aO>6#S03^R4g`?7WzNsCmxmn6nIS5dyC4w`mm{~6bL8GJfg zw;dFDTh!gM{hGhFT@ML#L5U-^U?-E|^!97#Z~b zvr=_`VVSTz^3bMndz70)roR7=%3fQu34ZQ|WNMdnYlR=ixbz0TV3PFtc-e)mhBJ*e zcNcN?GLx~imv!feWbK!sSj_>+T1;a$0}jMpc51A?ede@Ro{@xhy_R;DbDf)Sqeo6{`Qd3}yc}VHH0;)KE|(8Eia98`eu;aM72C$k zC1|hzIxVxG%}(hYA(JKcw=oF2k>T>NVf8RI7`ZY|p0Z=|wcn5y;X01iSl2X8mK%u+ zQe^dz<~nvTPBs-xPBET(l1h4&s2A7S@2TNxoQ@bcii2&l>~9?F*SuDG{e$@Re-ajSRmq@L$F z@x&ph-5>ODGEM~VOazF(1T>*ED4yXR2Ef z2IUG=S?2sSNbqJk?b5Hot+LwNr2x?%H_@H*r#UR!UlPv0PJfFx>NNT=ve@~0r2s?| z66ef%%w<=YWECZx&#yfZQgFUu>@5S{8~q`%YY>wEaVfxWvAOJa)S`x z;VQ#ES$YkKBB@LPoZM>W2YVX&)Y)C1(=I}4SWBAW?1Z{CiW z;Re>G1PFpnS?IpB=cdbpM9wa60z5|A@b}~8nk!|sye^J@oLBQTzVSTg&T$)P(5-xG z#u_I|mtlN?N?>P>({yyb+*)Q7Agu>e+bwd>+bP0ajjIG z6QaR>>08x;v|({^H;=j871Bvcr>SCLA(TWT7eBbs-8bfNx1dd zVmKghFH2-&Ju=1F%{=&gR+qdUO=@o81pZ4aDd^lM5Q_7g5wD-UXbJZ=Uubh!WdI+Minc8X31k$9;N;gI8LCEwHO9Zp z$gKX6kL3B+aq4hQ{8XVSH0?`);1dhFD^0MhlBl{ zEli$MSbC=4s?7PyzB4xV2>2YAx1l92H8?GLz444fd;Je@OVtg!Xp6n_yCY?-Pyq!V z_aZJwuj*PZq#v?nc1x`7)2$D%>06zHgd}*xhBeVqYz`edZ1)O2&@(?hy4oh08xX^h z{*)F;W&+(FBA$fZ{(m(NZB_vT$c+*J$u*i0CKy11{D0qdXhfv~Tv1W~zE1%8(E~;> zCTN@*!PaT5y3LlbY zMc61A0V-gQ;U5yxVFbj0WzN6tVn#q7c)|Nu9M6jj;V}W6z)w*~ff}HJ4442RfJ^Ex zNa2&hy>s=M3E^r|_D*um1V{lb3W)wpkSQ}D0eC-vj+g;f&t8x;~{M{MNV zmk2@&qWmX}J?w}u9z)CQKoBsN@mHA3fpG9L`)`|)6A*=MLpq#*FTh@tGM*=&qEmwi zFc%_lf*<~oq!@o7hN?IauFAL&+j7?Um!xUJf$+EyB9hj>SgMr_O8N))wg1KY?c{gk zGx8uhp>!iiStyVP;0N%&BHFAeG+)X7dZqbWaz;i%y2M0668(3>5&y+uT;CuaM;Pfp z^)m)YjTazB`KPu9S@8m7!1w9@vFQOWGf;OTj3%8AcnB!Z|81wJ&f`I&(ui3{@*yU$ zy$l`k0klv%A0P;eh7S1vV*qXAPKmjJ1357xlo9+0rSjfi7Sc*aj6B8<@WUz~m;hi6 z6ktHzGKe%P!hjLqc`g<}=$mox=y?G^1<+%-1BMJRTF6`w5snh3JEoioMg?{K!;G-s zF&ILCG?2`B2ikC9I8Xs6;wL}|p@Avh(YXAGjKNogp+Q#yhzYIj>k6B*Xz8WJkxpNCIl&MGRjjj_6O}bk~L235InyE{X(#rgXle zr6mA4z}EK;WJ(~?dKdhkF=!w>NkkZq!tWRZNkqKaqwfGBc z7qgXk7fAxBMG7&ddh(qOkr=cPzBIz~aLPXnJ2anyn4HT$3{%=2(=82%11;%yU?3f_ zTlr)VX6%eRhAQLVD5_<`2(bT6`r@$XP?ro~0Sks0WC2?MKNn(@1vsE;S>PV+|5l2T zkXZli@pqXZ>cx=NK4PvIa)1PK`22s+6FEQzId1naVu8Bl00CtG{lAF&E|N+|Faq3v zJr##JAN@y)IIfXHaq<8aGVbYrs3Cbo?~3!k=pH1>3XuKh5>8G5AVtn61^(HKB+yGr lfDVdPKrGb1Cx`+CfDAc>@_&u&(3t{2fW}6Jc#{h0{{bvoQ9S?v delta 9929 zcmY+q1yodT&_51WIz_q>B_tP+hFt*>=~7BSI;1-UmPQ&};L;%_ND4?wO1E@(Nq36> zRetaLf4}#fJ$L3a@ys(b&%Jxj+?GJ>@IdSbD)RTxNKjC)uuwESL{*EDzh}li;Dn>N z@w|)Y)xgmR`~6rnG~gPm{?YP63Ii6KKy^*(wUEJTdRQXgTI-W>m8o2f83oo=h2zgz z@=3nS&9Tq0+5kXwV=D>)TXm);_f3CeO(f*1@nyYZKIwaX^2$p+{4a7}?m0ev6P?=^ z*@BZthG^#?=lG^5Yt1Jc8AgtdtN@t ziiUo>6K8UTKu2eU_r7a`kUT%X#E}BqB@^g>ph{$g59yKXnPqqWAnM}XBsy5oEPs>y zlrz_j58|}$UqW|gf50e7?#Ok^dWacrv_C+zkA*JOxBcePxbtxc;#_px!uXasW z9IV*qJol?eDjt(x>izohfzWO3d02io!s6>7>$Y4SC;QopdU#t&0YQC&_)oEk$k&Xw zuX&TVZ3uA+M6svXhrex_Olb16jh}^WJ+fi2)LR(;5c6~8X6lyg9okyt4|)g6BkC39 zp%3?epg1awI}+j&sp!(4CFo4tgyqIW`>Rs)D%-cErpElTtf3%ZCD4PegzGxmc%@#d zPWtwX-qo#w6=M_!Uwm!$A{szJF+f8>;Xg963{_&* zfzyJTTvy`cBZdx^EORZoN6+jxN~{s)G!9-L>L!2Xfr~}V11aJ3naYoc-JpWc2K?+j z;%yWB2F=&yLMxD`iWh?o zpE@3pqVTDOj}`1vD4Gc*p&eULnc;n`$yl_1z^@3G$;T{23xC znw2X%mmb6D(b%YAw?J`l(@*KtUnFc}PAXhdq8TaE zA~5ibZZ=Y!%TkOKmihI~hV@!9w}`6+XHOT}sZGuu_d-#f_Dy?|l|Y9S5p}kJ?d#D6 z&1fdLJL~!fdl@YfLg%;!%P$(!3vB6@br{y2wzh;FG=b2EDjz;B)oxg-KYh4Dt-P#W z#3vUk0_zl!T@B9mR-J+J7U{4xJ})24-W0by;ep!-! zqGQ|T{$)Fiol)sJCM10^i-$hLbMhqltcmsxqo#4HpsQtLab~J(qlk$mOa#_`+^og{4euH^%Nyd5Pi`p^Kc<)lc-Xmm? zIMh$oAKxoM4RbQ^oB>)}>^BioaY_8F1^tN1lv)D;9aF_GG$jQ-zsvmukaA)jB2vd# z;PXY2Bt>Fuyh(hj4cgw`HD}x!b_hg`#t}<@#Cgut3v;I8uHwEA4liZW*++^PMm#pV=Maa;)2C zz&bpSu0D_YIv6PM+{8KF*HX7T^~lcV7d-TsV&zfNYqmJ+UnyeUCP8?yPhvl?sz0Dz zq5Jxd!8rOcpS`sqJs#T=BQeRMW!DenS*#s1s;m-hB2})uxa+UX!^XZX%PJdiRER__ z%f9{PpY&Ch=%OXCA}$B*+)Sgt&?!MRt3XMY_S*RUudN0*mvh@UJMk0o9dBlgPFGXm zp7ag%zQaMM4hOsaYh(G>>`SwTW*2-INaW}KXo2+1gq>=IY|}!~h_mzdS-eqG1HCC< zG_-?kc_YFMA9teVYJrutl|BH1vw=nc?~=Uu>fvwb>jOR~`ST((=hLL1f6i2DE5#c| zo@Tg=p|kbd4+DitJP65V){1?cKxzw;Yq*<5V!uNh!?S}NP8lfkrT#7EzWjhvRPs(c zK}Oy7HLV+eSsP6%wZOaIGReDqO25NKtG@60a0TsZdFf}lWLlw1!s378by1~d!w-N@ zTn5FjMK6;kd)~gf$*Ajp5uJR)1Q zkB=msPBn_TrB3?8&)`EE%c;*1`YyP94%fUL+`nj?m?LA|6nm1m5HhX&;t)EiY|km& zQp)^7Cp=B(;do1oDzh-#DfbP$4LBLuXrlP4PF9;Ojw(g*Fh6mil;{8n*%rkooOfhf z&O>VGrpCWI#LB{2--W$JtTgy>LKx3#C99T8HQHEI=7&j>YyfdzRBycbo zizh5l5V^vf8L3>s9Bwg1p>G9e-WE+d)f3k0-OJY|uhCLA_$k9w6*`^sn8X4hXrWFs zu3npjv4LkO?oF=HW#SF1@L|B*4wZXoGfr$X{)p7dq@=-4plxe5uFWUKFtQ&~YOMfM zm`7hr5_2o3I;nME&-GZB2ofO?7!1o23m_Q8v1M~QD(YLU1wEh%0UK}y!NDXcj{$r4 zfmO2v0nro#b5mZgWb|tVf|edxMZQ$NxFwp9EZ_eAMuZa|<(_%);D&+F!gs`R2yf~J zBz3Uge+Q4;gx4#SvN1KluqwsyR3-Q|LEAfM@xF<94Fs{IoU}CP2+>_NtFd5h3nFMU zuF;PBtxK2EeL&uK&=04IDZ2&nolNnm&JsV zt{K$y^xKcA1jAWG@Ftup9*VXR^HN3`88Hb{2-H&w5WdbZ3t5t#O-)TRlxJ=mRvt5zIF;ui-)%`i4dhw%C79S-Q$%oZEzmMW(2@22=A=Dw!FnJ3_>! z`VUsK*u|y{Cwmm%xCZB&@N$?Nwb0-R)=}Eh)U~>X7{U`%qIU3%EtQ3 zTv*$bLJY}Qhs8LJcxb*Q_K#tqtQ-;9{Jvk3(MTwF-kNt>pY{HE5us<^@t-S(F~T=8 z7uSok!AIVZtOi0Z3%oiMZqv*~ltt6u2l$k*uhNbQz%oCJ7(tb8?bxTLE8kHcwaf!NY*q`N>&cm0P5j{s7(j zIUyw!@(s}e=HE4zw>#TXCf<{vDA?|GKDy*F$U;MFXXW8liFhh!fU@@4F5~n6dM({ThO0j4L}pQ`q0gs=+oyy-p0eb@!4s|L&$Lns^6CKy7`0GeZMVO3;Q}= z5o+$B%(YQ{>F1<)ZT~2Ot7A9eDaSe^0TEi$>B^X76@6)EVe3!B_XlsV1Y4JK+g2|% z(3G#~8qyY@OzOX$j28V8R$1F7k9*!$^z+kiNG`?xk%)8r%@V%+==tQQdF=S~+BUaV zc;(Me-jMRjvdYhd`}N2=#{_BVbh+nBe`3KCdUrv;eJI;04?_Ja{BhS!o zqRxn?<>=TrTlDdF$whz1(rDQu6RIMAS@ zCa%exefqPcb0V`f44=yW;}ChvE`Aj%epPFAf;ibkwTkQF_iUzQiWV;l&GYRv zMU5}d#rC>rAK1^8-4>5t5#Hv1uWS*vgRQuo{dIkg;V(oY?$$vMD#^K_@;>*+1!_BkaCW(DFhn z9yiM{#s{Z*O!(RGPBy>gkder+6}^s*_+)7=`gaL5y*M&wSX!S^{`gPH%Ex*-IpPE} z=PH<};akp8kHuARWhe0jTgJ-n*#@T^sNOtm{IGVCZf0>gyB}NjlDhYjYS9aRuml_! zlcL!_ROm3y#3PqrqQk8?6#Cq5IuzKuM52o-D@G?^%xT?%Aw-z6$f%31Y0S6NOuS@f z?f1qWe>Tc$395@pxP&noz|x}bjjx z&K)n^FPz7Z9TFOu*y=JFp1%w?6CNufPAc zBmBUnfnuRm{!kF_5>-DK-p+n#JgWq42n${rdm1%^?T(LrsFU2iOVbclc;KlMD5#1* zufTrzW;C#RsN0?0Wy!{wR5bbh0f8r4lZ^7Rl4tPD#(|P2_Wmc$L#QVle?Q;t5Y>~A zKJU-+BdTSt{$?Le`s+%-OOo18`Q6Cj6B`U@F=vZ;CF#Yd@jz}%&Wo^b1n{DugV#2E zw+f=TZ$}2&C#p)9sHd4O@?7sV=Fau)Rv+5z)?cvi(s_Zur|hccE<|@Ny_BzoZzbN} zgAMtF!pD80;lsB-c0(@Un!Ar~LN*{b)#fy}oqU9_Lyk^m@%%;dbVc`O#Nz|6_@Rn` zhV+@Pjatxou)@S$KTB*dWcB4sw$HTAS3--zDq960Fnbm4b zKl(SmOI~`Tz~_zsw6{8a{X!`_+dIXg#16OrJWU?g3sj5W*AeM(;n{!v^jsG%f|QQPRoG@ zDUEaItDkBr{yh37heU8=D}Xmof!1U1y79YmNS z(Q+etKWnO?bNKV9U}sm22uloQVl%%>86Dw-sD;0q^K#V>27JQ&WY3!)a}J2;Kl>9T zSsaoPJY0W&bYSQK9v>}q^dlr9BYDw-GxxL=qEwdgQ-JR~TymGAMti1JS$ev*Olqdb zzRe@!+q)Txl4rbly9zoC1z`?EZH`|7L?pqk^)8K)=>Q*2rIT>{@FHVdep9O7nc+J& z%`}}0Q6O}J%U!ta^0JN^3u)A+Zm8vW2bimNkp0kUCx!H-Z;)E{u~UxtH~B9$75v=D zh6VT%%)k(^X!oVcb`k2Vdk`Wok^T+ay^)sEwz;}*v@w`6q!DcCDwo0>C+=pnzU483 zBm*ml5Y_}j_FEDvSimC}-9t*}!+n+*I11S_9}N;X-GoE<@*%cCs4ERGn-2l0$b9Qi zM%(aB_`GZgt#5ZkLI7HGep%5K-=<*^B_A|sH1-Uh(Jc1|b<+TK)kq29ETo*T7=dlS z8bLWd#x~M7QZigJVmo9zYCCQ_Y@2&tHM8UVN>rU!>#|-THA*hw8fW9n5qY8#Eeq;m z@Zkzv=+xp#9$khbrs+3a?S0C8$NT#i&UJ?})3U+FNBjMQj z9-KyexlM({0UPu*^y4jSt*+g2XM(3AwPoo80qUDx@rIbAyFUx$I3>hGaXxw01!O!` z#nngm!O8#ZLS|8P(X7(E@^wD{z|!jbiA?Y@yy5|8#c#Nj$Mo*;$ok31_{m7pR({29 zzJ$Je#0>g=uG0kJd9&@6+#?N-o}Pf;Cu6nqs`H=D-aKqd-JSri z;I1Q4Y}uom+0<^$LY7Uh<292t6{^pMZBh%t_19aXE!D@(qPbVlM4iGfvHRG4#Ob02 z&kH;)GTI9~VRJ5}IYu6$hFZov;>{c$dV~&9-rN>K5#oCab%f*gqF{CaPAX?HDQU9} zBtFRJA%!zhL}vIBRvjAiNG>FRD}b#IPBT6fZ%^e-JZ&Lr{pkyXgl1ckGk&V_M60wj z?d-FOwlrtrSsB5$iW5$EKU+U=OTazNHbiiXz&*MV7oNA@0<&bH$=uI=;r1zduS4vt zs%_IpES0X=;enQWdUHmTZn+3)*CVdI4w#E3_Lf;_=L25s+V0YQ z3qNiyo$J-mBX$|#dR1L@W1`o7c)`}Xd&B9pcq^i?#^n`e5$>* zU9wVaUF##V(PP>^+L`>__KGgy!PB_?tj-wYro)?qr*dCsyY3H8on|w_>382Ei#0QQ z?r(5960Vk_qdKn)kV;KoAGT?5}KH;5xS=wBD z!seCXQz+m~fNKcFo7huVy5OM5PZzV!vK`r*2wcFbkrmbqBsPpZGw`g>SvQZ=i=}fC zu%)?ZMETa6GFl>ji>+`=1AiepC_|iLe|asa(NEaP^DrP*siI%iJE_pgJs+krE(5b; zUEq#hi)>+8_k7CpI9sf`Ww=FkUb~P$rs?y~wbjNsnWj1-0z~@4&Y~3l`iYuoOMP>= zC}9J{`>8e(L6e%!K3o;H`Vv>^$r&)IUc)f!LEOCH? zllhjv-}<&RbqzQr3kgi#zJ=W0)9_D$N`|pqaOzX?P z`FPTQuf8Wx{%3k%3Ql+XA(AP7d#5gJE4m+_@{_Jns9H>ZMR#0kdM?bA`+L)TLB~Z7 zffRiq!0~NrjpC{oAy*bHz6o&VH4*s9U4Q326gh!rbP;BLfCfG}Ar}h1#lb%zsvKEZ z#PeB@{1aGwQvQG+Q`#P{Z}^Pum=|4Xh|W0Ras2xBE}_!VA{=Me!MduQ5@irIF{>{K z2XFoO&m%bt2b%Ch;`EMYPJZPz2lrM26t%NXYQ*mA(f!<};swP&7Ob7nEAuI5XzQP0 zgE?ne3RO6R9tJlNu4KknI`0nLE1DO>8aaW)k{| zp{W`1$5z_0EGCTPW>N`FbcT=U?H-Y1ANee(_~nk zDid}6xM;q$x}vX8%t^!eE0-k&*>qQ=fMYqsaZxbgmwLDi-Sy_kdtPRNC>FBCP(}M# z4my$Yx8`YDrt3fQOwuL;i-^C(g+?m({9vn4uoh7+N@dY-7z!PB&^~u?SpQ*WKG$ig z9SfQ=4)%tL5!rV6i|wW3t^O)vOhSVzK2oRhxcE-l)oJ$nW}?Dzpm(+5G5ZGL;h=Vm zxoL@qw8j9O+hon_IrGL!h2!{FM*5V{*|^u!F50B_uhuJ5Di{S#rMdc_>w~0}6>Qx- z3af~(jMqrDjL-(2FU_~}cM0 zU?&qVh^02Nu;tyOF^{V)vERT|5fP4mFFv8Dw%(s!_xge3c>Hu-+G2rQ$y7oOw&g_= ziwQKxvYjeKMH$+~jw3~~oJuv1S)ZBlrdNX-GqwYrrbDkQ_FS4qOSjLjFSiV7Rm+*aJ51&2X4VJBJ@2e2=D)YyZY67?RL$Cl!8q)rP zc;4a8GRb7+L>5b!%JorET{`Te`EjZXdz12vow(Tk?8u*kKd9CIv#9LC_|`X+5n1<8 zP&{!_P@W!mdM@8D`0hbPT}x6ZhMe z(XgPlM#pr|$A{f~vQ3R~919%-*1mWU!qtcEQgV;ezI%W6u+Nm^dopkRfW!`9`@oSj z*)-+V^qyYdW`3PqJ9`x#m$)cVk;Y6~d|3Q=QYgPC(Tp4}%@0-avkyRhp|+b{`W7k; zvc7OI;5U?BZP)689 zl9~f+Zgnwv>}$?V2G{9qTB0;x8viu=lmLBCY8MqH2QCMZMqaB(xMx?gU(}qj(X*Y! zvY4MH!_V#D{RC2#B)QtoiD(aM@|@o0m#fI~s}_}y4O}m(r&U>!4qo%_ClyQssB2hG z8jFC;_Z0q$^;9CZr(?BW47pv^l-Id6j~BnS-C}uZ`xkS*QXWV;Z}C240mnK+ZDG0# zUbn8qBIbjwmkA2g?P24lpDZ3dtS%^gM4?DQ;D0s-7gph-X4tU7Y`-56?;$Z2`<28W z*|qB*`W*ewTiplBo;AeppJ{w0?f*n@P^n~8+z|GGW`+ODw-Mtn?QnsLA8 z#lbng7Lr9U`4MSjzpWyKU=5Yxg#Yfvdi83D{*52**BnUu_)ENlV^)P9dqEaz@1+=n ze0j_k;H0c>L#$_iY^@XL8Vv6<3>Q6NVM#T4|9iP&BC0Nte{yOsoqpWSbG4%S5lxhU z_0N;@II#yxZB&Ah-#2{dnC2i})0v{r1aacH=6$V)t>SbgMoEi~f31rXV_qT(%a(T2 zLt7r78egPFHp#K!HRw72=<_1Sm~TbxQ8kj1uYu>H*BGQK88u3FuSGa|KIkijy{e1= zU-oJcd9F;D?0qvKORGw9>L`wVJLAu%w|1UrCBmC7iSV4-wx!7Lp-0Xi)_N;_MFgb@ zt?R5XY6H;u*NGg9hiecI;&R@cq+|DG5s_njamLel|4w7e-J;n4E5D-Eo|dBF!wE%# zV@^213ao8+yMA?yE7T3#iXI6|zpCjJhmQ_L;FB_WHAj?ssfZI8uX%{hC2^gL2#u+w z+Pa$GoVf1O(W92sa!2pVvlHC29yt1AaXlcz&n~YNtuxA3`5NHe{s1Fr zE6ht&U_Wpw*lp@^cOpumtn(Z6RJoT3Ee$s=k} zROC?sl6(LCI-y#W3a~}L`vL$gp$D`8dJIJDb83V(20jR30PfTLXBv+5`9D{V-}e2# zntzAmFrb6@A3eeVJOe&c{i7id0bwAY;U69R5D)~4*#6Pe50N^rxc<_JCN6yN7b9>V zaV>Bk@BjB)D*(1I0yJO*Bftloi~MEOfeh$B5P=IL0?nC_HeC|`*Ctp3>5&m}AwdXc zJ_6VPiRVb38@z=9_d(pp02T1{1rlHdl^+82I;wwyR!`Yzphxq{z<=u z5rA*lkkaa?|0{Kg`YQ!zS&-|L6`jWSve*|Itu(WK_46NcuV0#104nE!9X`{$K9FR~$$Oi*?{32k;Cm;{af& z2=IUd@B@aLkxEd6ehUUz&52Cu^azq?MyQOE{acyl->@3_%DKQsK@s?$iX-nie&?fL zDHp&G`f>rp)PE;(Vn|p5`4j(-S{7Ks1-t`dKw8apl2X@TL%C@WZR19|TYXh<5&;?G81F$Ah$WMFWZWkaVE`SR!$Kthd;aPK;@`pDY^Zo39WOFb^bB`M1OqB9cnL*TIENRxiap~UJjaMi z^{+)h3_gGgH3@vk2WSJjZ2#+q0xaW0I_{JBhaehPaKR_M02xU66zPTg`CpU;)P0KF z?D)$&MoAWx0$dbDu5^mjLA3+#^8*e*tmV=D~>dLCWvez_qTVFY(Zo{j2Qg2p#h&6qEi1oTlc|k6V&_2 zzYKR*j$bec6$12urW<9fHiODDVyb zzYAc3+#<-x8vO5&2oYpt$3cG?7SJjfmF#ZA5itGxq*nf5i zpB++ATnykvO$6=506kzg?ruNlVt^285C{T-eCEzd&pah{XWaboS@0jXYRN}jWCvN{I zS+Bt%81gaueDALwGpO @@ -468,7 +468,7 @@ EXAMPLES: ./as.sh --stat-url 'http://192.168.10.11:8080/api/stat' ./as.sh -c 'sysprop; thread' ./as.sh -f batch.as - ./as.sh --use-version 4.3.3 + ./as.sh --use-version 4.3.5 ./as.sh --session-timeout 3600 ./as.sh --attach-only ./as.sh --disabled-commands stop,dump @@ -926,14 +926,17 @@ sanity_check() { # 1 check the current user matches the process owner local current_user=$(id -u -n) - # the last '=' after 'user' eliminates the column header - local target_user=$(ps -p "${TARGET_PID}" -o user=) - if [ "$current_user" != "$target_user" ]; then - echo "The current user ($current_user) does not match with the owner of process ${TARGET_PID} ($target_user)." - echo "To solve this, choose one of the following command:" - echo " 1) sudo su $target_user && ./as.sh" - echo " 2) sudo -u $target_user -EH ./as.sh" - exit_on_err 1 + # root 可以 attach 任意进程(例如 k8s 临时 debug 容器以 root 调试普通用户的应用),跳过一致性检查 + if [ "$(id -u)" != "0" ]; then + # the last '=' after 'user' eliminates the column header + local target_user=$(ps -p "${TARGET_PID}" -o user=) + if [ "$current_user" != "$target_user" ]; then + echo "The current user ($current_user) does not match with the owner of process ${TARGET_PID} ($target_user)." + echo "To solve this, choose one of the following command:" + echo " 1) sudo su $target_user && ./as.sh" + echo " 2) sudo -u $target_user -EH ./as.sh" + exit_on_err 1 + fi fi } diff --git a/assets/404.html.532e346d.js b/assets/404.html.1b87fa04.js similarity index 87% rename from assets/404.html.532e346d.js rename to assets/404.html.1b87fa04.js index 34d358225..9c7871dd7 100644 --- a/assets/404.html.532e346d.js +++ b/assets/404.html.1b87fa04.js @@ -1 +1 @@ -const t=JSON.parse('{"key":"v-3706649a","path":"/404.html","title":"","lang":"zh-CN","frontmatter":{"layout":"NotFound"},"excerpt":"","headers":[],"git":{},"filePathRelative":null,"version":"4.3.3"}');export{t as data}; +const t=JSON.parse('{"key":"v-3706649a","path":"/404.html","title":"","lang":"zh-CN","frontmatter":{"layout":"NotFound"},"excerpt":"","headers":[],"git":{},"filePathRelative":null,"version":"4.3.5"}');export{t as data}; diff --git a/assets/404.html.0f0756d7.js b/assets/404.html.58d317de.js similarity index 63% rename from assets/404.html.0f0756d7.js rename to assets/404.html.58d317de.js index 174c2e543..5843a1d52 100644 --- a/assets/404.html.0f0756d7.js +++ b/assets/404.html.58d317de.js @@ -1 +1 @@ -import{_ as e,o as c,c as t}from"./app.524ecf5c.js";const _={};function o(r,n){return c(),t("div")}const a=e(_,[["render",o],["__file","404.html.vue"]]);export{a as default}; +import{_ as e,o as c,c as t}from"./app.e2427bec.js";const _={};function o(r,n){return c(),t("div")}const a=e(_,[["render",o],["__file","404.html.vue"]]);export{a as default}; diff --git a/assets/advanced-use.html.ce7d6f5f.js b/assets/advanced-use.html.2466ac6e.js similarity index 51% rename from assets/advanced-use.html.ce7d6f5f.js rename to assets/advanced-use.html.2466ac6e.js index 98dfe539d..648a68c04 100644 --- a/assets/advanced-use.html.ce7d6f5f.js +++ b/assets/advanced-use.html.2466ac6e.js @@ -1,4 +1,4 @@ -import{_ as r,o as i,c,a,b as n,w as t,e as s,d,r as o}from"./app.524ecf5c.js";const p={},h=a("h1",{id:"\u5176\u4ED6\u7279\u6027",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u5176\u4ED6\u7279\u6027","aria-hidden":"true"},"#"),s(" \u5176\u4ED6\u7279\u6027")],-1),u=a("h2",{id:"arthas-\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#arthas-\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1","aria-hidden":"true"},"#"),s(" Arthas \u540E\u53F0\u5F02\u6B65\u4EFB\u52A1")],-1),_=a("p",null,"\u5F53\u9700\u8981\u6392\u67E5\u4E00\u4E2A\u95EE\u9898\uFF0C\u4F46\u662F\u8FD9\u4E2A\u95EE\u9898\u7684\u51FA\u73B0\u65F6\u95F4\u4E0D\u80FD\u786E\u5B9A\uFF0C\u90A3\u6211\u4EEC\u5C31\u53EF\u4EE5\u628A\u68C0\u6D4B\u547D\u4EE4\u6302\u5728\u540E\u53F0\u8FD0\u884C\uFF0C\u5E76\u5C06\u4FDD\u5B58\u5230\u8F93\u51FA\u65E5\u5FD7\u3002",-1),b=s("Arthas \u540E\u53F0\u5F02\u6B65\u4EFB\u52A1"),v=a("h2",{id:"\u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7","aria-hidden":"true"},"#"),s(" \u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7")],-1),m=a("p",null,"\u6240\u6709\u6267\u884C\u8BB0\u5F55\u7684\u7ED3\u679C\u5B8C\u6574\u4FDD\u5B58\u5728\u65E5\u5FD7\u6587\u4EF6\u4E2D\uFF0C\u4FBF\u4E8E\u540E\u7EED\u8FDB\u884C\u5206\u6790\u3002",-1),k=s("\u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7"),g=a("h2",{id:"docker",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#docker","aria-hidden":"true"},"#"),s(" Docker")],-1),f=a("p",null,"Arthas \u5728 docker \u5BB9\u5668\u4E2D\u4F7F\u7528\u914D\u7F6E\u53C2\u8003\u3002",-1),x=s("Docker"),A=a("h2",{id:"web-console",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#web-console","aria-hidden":"true"},"#"),s(" Web Console")],-1),j=a("p",null,"\u901A\u8FC7 websocket \u8FDE\u63A5 Arthas\u3002",-1),I=s("Web Console"),P=a("h2",{id:"arthas-tunnel",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#arthas-tunnel","aria-hidden":"true"},"#"),s(" Arthas Tunnel")],-1),C=a("p",null,"\u901A\u8FC7 Arthas Tunnel Server/Client \u6765\u8FDC\u7A0B\u7BA1\u7406/\u8FDE\u63A5\u591A\u4E2A\u670D\u52A1\u5668\u4E0B\u7684Java\u670D\u52A1\u3002",-1),T=s("Arthas Tunnel"),w=a("h2",{id:"ognl-\u8868\u8FBE\u5F0F\u7528\u6CD5",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#ognl-\u8868\u8FBE\u5F0F\u7528\u6CD5","aria-hidden":"true"},"#"),s(" ognl \u8868\u8FBE\u5F0F\u7528\u6CD5")],-1),E={href:"https://github.com/alibaba/arthas/issues/11",target:"_blank",rel:"noopener noreferrer"},S=s("ognl \u8868\u8FBE\u5F0F\u7684\u7528\u6CD5\u8BF4\u660E"),D={href:"https://github.com/alibaba/arthas/issues/71",target:"_blank",rel:"noopener noreferrer"},y=s("\u4E00\u4E9B ognl \u7279\u6B8A\u7528\u6CD5"),B=a("h2",{id:"idea-plugin",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#idea-plugin","aria-hidden":"true"},"#"),s(" IDEA Plugin")],-1),N=a("p",null,"IntelliJ IDEA \u7F16\u8BD1\u5668\u4E2D\u66F4\u52A0\u5FEB\u6377\u6784\u5EFA arhtas \u547D\u4EE4\u3002",-1),V=s("IDEA Plugin"),H=a("h2",{id:"arthas-properties",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#arthas-properties","aria-hidden":"true"},"#"),s(" Arthas Properties")],-1),J=a("p",null,"Arthas \u652F\u6301\u914D\u7F6E\u9879\u53C2\u8003\u3002",-1),L=s("Arthas Properties"),O=a("h2",{id:"\u4EE5-java-agent-\u65B9\u5F0F\u542F\u52A8",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u4EE5-java-agent-\u65B9\u5F0F\u542F\u52A8","aria-hidden":"true"},"#"),s(" \u4EE5 java agent \u65B9\u5F0F\u542F\u52A8")],-1),U=s("\u4EE5 java agent \u65B9\u5F0F\u542F\u52A8"),R=a("h2",{id:"arthas-spring-boot-starter",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#arthas-spring-boot-starter","aria-hidden":"true"},"#"),s(" Arthas Spring Boot Starter")],-1),W=a("p",null,"\u968F\u5E94\u7528\u4E00\u8D77\u542F\u52A8\u3002",-1),$=s("Arthas Spring Boot Starter"),z=a("h2",{id:"\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4","aria-hidden":"true"},"#"),s(" \u52A0\u8F7D\u5916\u90E8\u547D\u4EE4")],-1),F=a("p",null,"\u5728 Arthas \u542F\u52A8\u65F6\u52A0\u8F7D\u5916\u90E8 command jar\uFF0C\u628A\u56E2\u961F\u5185\u90E8\u8BCA\u65AD\u52A8\u4F5C\u6269\u5C55\u4E3A\u65B0\u7684 Arthas \u547D\u4EE4\u3002",-1),M=s("\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4"),q=a("h2",{id:"http-api",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#http-api","aria-hidden":"true"},"#"),s(" HTTP API")],-1),G=a("p",null,"Http API \u63D0\u4F9B\u7ED3\u6784\u5316\u7684\u6570\u636E\uFF0C\u652F\u6301\u66F4\u590D\u6742\u7684\u4EA4\u4E92\u529F\u80FD\uFF0C\u65B9\u4FBF\u81EA\u5B9A\u4E49\u754C\u9762\u96C6\u6210 arthas\u3002",-1),K=s("HTTP API"),Q=a("h2",{id:"\u6279\u5904\u7406\u529F\u80FD",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u6279\u5904\u7406\u529F\u80FD","aria-hidden":"true"},"#"),s(" \u6279\u5904\u7406\u529F\u80FD")],-1),X=a("p",null,[s("\u65B9\u4FBF\u81EA\u5B9A\u4E49\u811A\u672C\u4E00\u6B21\u6027\u6279\u91CF\u8FD0\u884C\u591A\u4E2A\u547D\u4EE4\uFF0C\u53EF\u7ED3\u5408 "),a("code",null,"--select"),s(" \u53C2\u6570\u53EF\u4EE5\u6307\u5B9A\u8FDB\u7A0B\u540D\u5B57\u4E00\u8D77\u4F7F\u7528\u3002")],-1),Y=s("\u6279\u5904\u7406\u529F\u80FD"),Z=d(`

as.sh \u548C arthas-boot \u6280\u5DE7

  • \u901A\u8FC7select\u529F\u80FD\u9009\u62E9 attach \u7684\u8FDB\u7A0B\u3002

\u6B63\u5E38\u60C5\u51B5\u4E0B\uFF0C\u6BCF\u6B21\u6267\u884Cas.sh/arthas-boot.jar\u9700\u8981\u9009\u62E9\uFF0C\u6216\u8005\u6307\u5B9A PID\u3002\u8FD9\u6837\u4F1A\u6BD4\u8F83\u9EBB\u70E6\uFF0C\u56E0\u4E3A\u6BCF\u6B21\u542F\u52A8\u5E94\u7528\uFF0C\u5B83\u7684 PID \u4F1A\u53D8\u5316\u3002

\u6BD4\u5982\uFF0C\u5DF2\u7ECF\u542F\u52A8\u4E86math-game.jar\uFF0C\u4F7F\u7528jps\u547D\u4EE4\u67E5\u770B\uFF1A

$ jps
+import{_ as r,o as i,c,a,b as n,w as t,e as s,d,r as o}from"./app.e2427bec.js";const p={},h=a("h1",{id:"\u5176\u4ED6\u7279\u6027",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u5176\u4ED6\u7279\u6027","aria-hidden":"true"},"#"),s(" \u5176\u4ED6\u7279\u6027")],-1),u=a("h2",{id:"arthas-\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#arthas-\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1","aria-hidden":"true"},"#"),s(" Arthas \u540E\u53F0\u5F02\u6B65\u4EFB\u52A1")],-1),_=a("p",null,"\u5F53\u9700\u8981\u6392\u67E5\u4E00\u4E2A\u95EE\u9898\uFF0C\u4F46\u662F\u8FD9\u4E2A\u95EE\u9898\u7684\u51FA\u73B0\u65F6\u95F4\u4E0D\u80FD\u786E\u5B9A\uFF0C\u90A3\u6211\u4EEC\u5C31\u53EF\u4EE5\u628A\u68C0\u6D4B\u547D\u4EE4\u6302\u5728\u540E\u53F0\u8FD0\u884C\uFF0C\u5E76\u5C06\u4FDD\u5B58\u5230\u8F93\u51FA\u65E5\u5FD7\u3002",-1),b=s("Arthas \u540E\u53F0\u5F02\u6B65\u4EFB\u52A1"),v=a("h2",{id:"\u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7","aria-hidden":"true"},"#"),s(" \u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7")],-1),m=a("p",null,"\u6240\u6709\u6267\u884C\u8BB0\u5F55\u7684\u7ED3\u679C\u5B8C\u6574\u4FDD\u5B58\u5728\u65E5\u5FD7\u6587\u4EF6\u4E2D\uFF0C\u4FBF\u4E8E\u540E\u7EED\u8FDB\u884C\u5206\u6790\u3002",-1),k=s("\u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7"),g=a("h2",{id:"docker",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#docker","aria-hidden":"true"},"#"),s(" Docker")],-1),f=a("p",null,"Arthas \u5728 docker \u5BB9\u5668\u4E2D\u4F7F\u7528\u914D\u7F6E\u53C2\u8003\u3002",-1),x=s("Docker"),A=a("h2",{id:"web-console",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#web-console","aria-hidden":"true"},"#"),s(" Web Console")],-1),j=a("p",null,"\u901A\u8FC7 websocket \u8FDE\u63A5 Arthas\u3002",-1),I=s("Web Console"),P=a("h2",{id:"arthas-tunnel",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#arthas-tunnel","aria-hidden":"true"},"#"),s(" Arthas Tunnel")],-1),C=a("p",null,"\u901A\u8FC7 Arthas Tunnel Server/Client \u6765\u8FDC\u7A0B\u7BA1\u7406/\u8FDE\u63A5\u591A\u4E2A\u670D\u52A1\u5668\u4E0B\u7684Java\u670D\u52A1\u3002",-1),T=s("Arthas Tunnel"),w=a("h2",{id:"ognl-\u8868\u8FBE\u5F0F\u7528\u6CD5",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#ognl-\u8868\u8FBE\u5F0F\u7528\u6CD5","aria-hidden":"true"},"#"),s(" ognl \u8868\u8FBE\u5F0F\u7528\u6CD5")],-1),E=s("OGNL \u590D\u6742\u8868\u8FBE\u5F0F\u4F7F\u7528\u6280\u5DE7"),S={href:"https://github.com/alibaba/arthas/issues/11",target:"_blank",rel:"noopener noreferrer"},D=s("ognl \u8868\u8FBE\u5F0F\u7684\u7528\u6CD5\u8BF4\u660E"),N=a("h2",{id:"idea-plugin",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#idea-plugin","aria-hidden":"true"},"#"),s(" IDEA Plugin")],-1),B=a("p",null,"IntelliJ IDEA \u7F16\u8BD1\u5668\u4E2D\u66F4\u52A0\u5FEB\u6377\u6784\u5EFA arhtas \u547D\u4EE4\u3002",-1),L=s("IDEA Plugin"),O=a("h2",{id:"arthas-properties",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#arthas-properties","aria-hidden":"true"},"#"),s(" Arthas Properties")],-1),V=a("p",null,"Arthas \u652F\u6301\u914D\u7F6E\u9879\u53C2\u8003\u3002",-1),y=s("Arthas Properties"),H=a("h2",{id:"\u4EE5-java-agent-\u65B9\u5F0F\u542F\u52A8",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u4EE5-java-agent-\u65B9\u5F0F\u542F\u52A8","aria-hidden":"true"},"#"),s(" \u4EE5 java agent \u65B9\u5F0F\u542F\u52A8")],-1),J=s("\u4EE5 java agent \u65B9\u5F0F\u542F\u52A8"),U=a("h2",{id:"arthas-spring-boot-starter",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#arthas-spring-boot-starter","aria-hidden":"true"},"#"),s(" Arthas Spring Boot Starter")],-1),R=a("p",null,"\u968F\u5E94\u7528\u4E00\u8D77\u542F\u52A8\u3002",-1),W=s("Arthas Spring Boot Starter"),$=a("h2",{id:"\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4","aria-hidden":"true"},"#"),s(" \u52A0\u8F7D\u5916\u90E8\u547D\u4EE4")],-1),z=a("p",null,"\u5728 Arthas \u542F\u52A8\u65F6\u52A0\u8F7D\u5916\u90E8 command jar\uFF0C\u628A\u56E2\u961F\u5185\u90E8\u8BCA\u65AD\u52A8\u4F5C\u6269\u5C55\u4E3A\u65B0\u7684 Arthas \u547D\u4EE4\u3002",-1),F=s("\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4"),G=a("h2",{id:"http-api",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#http-api","aria-hidden":"true"},"#"),s(" HTTP API")],-1),M=a("p",null,"Http API \u63D0\u4F9B\u7ED3\u6784\u5316\u7684\u6570\u636E\uFF0C\u652F\u6301\u66F4\u590D\u6742\u7684\u4EA4\u4E92\u529F\u80FD\uFF0C\u65B9\u4FBF\u81EA\u5B9A\u4E49\u754C\u9762\u96C6\u6210 arthas\u3002",-1),q=s("HTTP API"),K=a("h2",{id:"\u6279\u5904\u7406\u529F\u80FD",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u6279\u5904\u7406\u529F\u80FD","aria-hidden":"true"},"#"),s(" \u6279\u5904\u7406\u529F\u80FD")],-1),Q=a("p",null,[s("\u65B9\u4FBF\u81EA\u5B9A\u4E49\u811A\u672C\u4E00\u6B21\u6027\u6279\u91CF\u8FD0\u884C\u591A\u4E2A\u547D\u4EE4\uFF0C\u53EF\u7ED3\u5408 "),a("code",null,"--select"),s(" \u53C2\u6570\u53EF\u4EE5\u6307\u5B9A\u8FDB\u7A0B\u540D\u5B57\u4E00\u8D77\u4F7F\u7528\u3002")],-1),X=s("\u6279\u5904\u7406\u529F\u80FD"),Y=d(`

as.sh \u548C arthas-boot \u6280\u5DE7

  • \u901A\u8FC7select\u529F\u80FD\u9009\u62E9 attach \u7684\u8FDB\u7A0B\u3002

\u6B63\u5E38\u60C5\u51B5\u4E0B\uFF0C\u6BCF\u6B21\u6267\u884Cas.sh/arthas-boot.jar\u9700\u8981\u9009\u62E9\uFF0C\u6216\u8005\u6307\u5B9A PID\u3002\u8FD9\u6837\u4F1A\u6BD4\u8F83\u9EBB\u70E6\uFF0C\u56E0\u4E3A\u6BCF\u6B21\u542F\u52A8\u5E94\u7528\uFF0C\u5B83\u7684 PID \u4F1A\u53D8\u5316\u3002

\u6BD4\u5982\uFF0C\u5DF2\u7ECF\u542F\u52A8\u4E86math-game.jar\uFF0C\u4F7F\u7528jps\u547D\u4EE4\u67E5\u770B\uFF1A

$ jps
 58883 math-game.jar
 58884 Jps
 

\u901A\u8FC7select\u53C2\u6570\u53EF\u4EE5\u6307\u5B9A\u8FDB\u7A0B\u540D\u5B57\uFF0C\u975E\u5E38\u65B9\u4FBF\u3002

$ ./as.sh --select math-game
@@ -24,7 +24,6 @@ Escape character is '^]'3.3.6
 pid       58883
-

\u7528\u6237\u6570\u636E\u56DE\u62A5

\u57283.1.4\u7248\u672C\u540E\uFF0C\u589E\u52A0\u4E86\u7528\u6237\u6570\u636E\u56DE\u62A5\u529F\u80FD\uFF0C\u65B9\u4FBF\u7EDF\u4E00\u505A\u5B89\u5168\u6216\u8005\u5386\u53F2\u6570\u636E\u7EDF\u8BA1\u3002

\u5728\u542F\u52A8\u65F6\uFF0C\u6307\u5B9Astat-url\uFF0C\u5C31\u4F1A\u56DE\u62A5\u6267\u884C\u7684\u6BCF\u4E00\u884C\u547D\u4EE4\uFF0C\u6BD4\u5982\uFF1A ./as.sh --stat-url 'http://192.168.10.11:8080/api/stat'

\u5728 tunnel server \u91CC\u6709\u4E00\u4E2A\u793A\u4F8B\u7684\u56DE\u62A5\u4EE3\u7801\uFF0C\u7528\u6237\u53EF\u4EE5\u81EA\u5DF1\u5728\u670D\u52A1\u5668\u4E0A\u5B9E\u73B0\u3002

`,11),aa={href:"https://github.com/alibaba/arthas/blob/master/tunnel-server/src/main/java/com/alibaba/arthas/tunnel/server/app/web/StatController.java",target:"_blank",rel:"noopener noreferrer"},sa=s("StatController.java");function na(ea,ta){const e=o("RouterLink"),l=o("ExternalLinkIcon");return i(),c("div",null,[h,u,_,a("ul",null,[a("li",null,[n(e,{to:"/doc/async.html"},{default:t(()=>[b]),_:1})])]),v,m,a("ul",null,[a("li",null,[n(e,{to:"/doc/save-log.html"},{default:t(()=>[k]),_:1})])]),g,f,a("ul",null,[a("li",null,[n(e,{to:"/doc/docker.html"},{default:t(()=>[x]),_:1})])]),A,j,a("ul",null,[a("li",null,[n(e,{to:"/doc/web-console.html"},{default:t(()=>[I]),_:1})])]),P,C,a("ul",null,[a("li",null,[n(e,{to:"/doc/tunnel.html"},{default:t(()=>[T]),_:1})])]),w,a("ul",null,[a("li",null,[a("a",E,[S,n(l)])]),a("li",null,[a("a",D,[y,n(l)])])]),B,N,a("ul",null,[a("li",null,[n(e,{to:"/doc/idea-plugin.html"},{default:t(()=>[V]),_:1})])]),H,J,a("ul",null,[a("li",null,[n(e,{to:"/doc/arthas-properties.html"},{default:t(()=>[L]),_:1})])]),O,a("ul",null,[a("li",null,[n(e,{to:"/doc/agent.html"},{default:t(()=>[U]),_:1})])]),R,W,a("ul",null,[a("li",null,[n(e,{to:"/doc/spring-boot-starter.html"},{default:t(()=>[$]),_:1})])]),z,F,a("ul",null,[a("li",null,[n(e,{to:"/doc/external-command.html"},{default:t(()=>[M]),_:1})])]),q,G,a("ul",null,[a("li",null,[n(e,{to:"/doc/http-api.html"},{default:t(()=>[K]),_:1})])]),Q,X,a("ul",null,[a("li",null,[n(e,{to:"/doc/batch-support.html"},{default:t(()=>[Y]),_:1})])]),Z,a("p",null,[a("a",aa,[sa,n(l)])])])}const oa=r(p,[["render",na],["__file","advanced-use.html.vue"]]);export{oa as default}; +

\u7528\u6237\u6570\u636E\u56DE\u62A5

\u57283.1.4\u7248\u672C\u540E\uFF0C\u589E\u52A0\u4E86\u7528\u6237\u6570\u636E\u56DE\u62A5\u529F\u80FD\uFF0C\u65B9\u4FBF\u7EDF\u4E00\u505A\u5B89\u5168\u6216\u8005\u5386\u53F2\u6570\u636E\u7EDF\u8BA1\u3002

\u5728\u542F\u52A8\u65F6\uFF0C\u6307\u5B9Astat-url\uFF0C\u5C31\u4F1A\u56DE\u62A5\u6267\u884C\u7684\u6BCF\u4E00\u884C\u547D\u4EE4\uFF0C\u6BD4\u5982\uFF1A ./as.sh --stat-url 'http://192.168.10.11:8080/api/stat'

\u5728 tunnel server \u91CC\u6709\u4E00\u4E2A\u793A\u4F8B\u7684\u56DE\u62A5\u4EE3\u7801\uFF0C\u7528\u6237\u53EF\u4EE5\u81EA\u5DF1\u5728\u670D\u52A1\u5668\u4E0A\u5B9E\u73B0\u3002

`,11),Z={href:"https://github.com/alibaba/arthas/blob/master/tunnel-server/src/main/java/com/alibaba/arthas/tunnel/server/app/web/StatController.java",target:"_blank",rel:"noopener noreferrer"},aa=s("StatController.java");function sa(na,ea){const e=o("RouterLink"),l=o("ExternalLinkIcon");return i(),c("div",null,[h,u,_,a("ul",null,[a("li",null,[n(e,{to:"/doc/async.html"},{default:t(()=>[b]),_:1})])]),v,m,a("ul",null,[a("li",null,[n(e,{to:"/doc/save-log.html"},{default:t(()=>[k]),_:1})])]),g,f,a("ul",null,[a("li",null,[n(e,{to:"/doc/docker.html"},{default:t(()=>[x]),_:1})])]),A,j,a("ul",null,[a("li",null,[n(e,{to:"/doc/web-console.html"},{default:t(()=>[I]),_:1})])]),P,C,a("ul",null,[a("li",null,[n(e,{to:"/doc/tunnel.html"},{default:t(()=>[T]),_:1})])]),w,a("ul",null,[a("li",null,[n(e,{to:"/doc/ognl-express.html"},{default:t(()=>[E]),_:1})]),a("li",null,[a("a",S,[D,n(l)])])]),N,B,a("ul",null,[a("li",null,[n(e,{to:"/doc/idea-plugin.html"},{default:t(()=>[L]),_:1})])]),O,V,a("ul",null,[a("li",null,[n(e,{to:"/doc/arthas-properties.html"},{default:t(()=>[y]),_:1})])]),H,a("ul",null,[a("li",null,[n(e,{to:"/doc/agent.html"},{default:t(()=>[J]),_:1})])]),U,R,a("ul",null,[a("li",null,[n(e,{to:"/doc/spring-boot-starter.html"},{default:t(()=>[W]),_:1})])]),$,z,a("ul",null,[a("li",null,[n(e,{to:"/doc/external-command.html"},{default:t(()=>[F]),_:1})])]),G,M,a("ul",null,[a("li",null,[n(e,{to:"/doc/http-api.html"},{default:t(()=>[q]),_:1})])]),K,Q,a("ul",null,[a("li",null,[n(e,{to:"/doc/batch-support.html"},{default:t(()=>[X]),_:1})])]),Y,a("p",null,[a("a",Z,[aa,n(l)])])])}const la=r(p,[["render",sa],["__file","advanced-use.html.vue"]]);export{la as default}; diff --git a/assets/advanced-use.html.899d36c2.js b/assets/advanced-use.html.2b80fa7d.js similarity index 92% rename from assets/advanced-use.html.899d36c2.js rename to assets/advanced-use.html.2b80fa7d.js index 434b2b8af..0bf33a66e 100644 --- a/assets/advanced-use.html.899d36c2.js +++ b/assets/advanced-use.html.2b80fa7d.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-0d09f68d","path":"/doc/advanced-use.html","title":"\u5176\u4ED6\u7279\u6027","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Arthas \u540E\u53F0\u5F02\u6B65\u4EFB\u52A1","slug":"arthas-\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1","link":"#arthas-\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1","children":[]},{"level":2,"title":"\u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7","slug":"\u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7","link":"#\u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7","children":[]},{"level":2,"title":"Docker","slug":"docker","link":"#docker","children":[]},{"level":2,"title":"Web Console","slug":"web-console","link":"#web-console","children":[]},{"level":2,"title":"Arthas Tunnel","slug":"arthas-tunnel","link":"#arthas-tunnel","children":[]},{"level":2,"title":"ognl \u8868\u8FBE\u5F0F\u7528\u6CD5","slug":"ognl-\u8868\u8FBE\u5F0F\u7528\u6CD5","link":"#ognl-\u8868\u8FBE\u5F0F\u7528\u6CD5","children":[]},{"level":2,"title":"IDEA Plugin","slug":"idea-plugin","link":"#idea-plugin","children":[]},{"level":2,"title":"Arthas Properties","slug":"arthas-properties","link":"#arthas-properties","children":[]},{"level":2,"title":"\u4EE5 java agent \u65B9\u5F0F\u542F\u52A8","slug":"\u4EE5-java-agent-\u65B9\u5F0F\u542F\u52A8","link":"#\u4EE5-java-agent-\u65B9\u5F0F\u542F\u52A8","children":[]},{"level":2,"title":"Arthas Spring Boot Starter","slug":"arthas-spring-boot-starter","link":"#arthas-spring-boot-starter","children":[]},{"level":2,"title":"\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4","slug":"\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4","link":"#\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4","children":[]},{"level":2,"title":"HTTP API","slug":"http-api","link":"#http-api","children":[]},{"level":2,"title":"\u6279\u5904\u7406\u529F\u80FD","slug":"\u6279\u5904\u7406\u529F\u80FD","link":"#\u6279\u5904\u7406\u529F\u80FD","children":[]},{"level":2,"title":"as.sh \u548C arthas-boot \u6280\u5DE7","slug":"as-sh-\u548C-arthas-boot-\u6280\u5DE7","link":"#as-sh-\u548C-arthas-boot-\u6280\u5DE7","children":[]},{"level":2,"title":"\u7528\u6237\u6570\u636E\u56DE\u62A5","slug":"\u7528\u6237\u6570\u636E\u56DE\u62A5","link":"#\u7528\u6237\u6570\u636E\u56DE\u62A5","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/advanced-use.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-0d09f68d","path":"/doc/advanced-use.html","title":"\u5176\u4ED6\u7279\u6027","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Arthas \u540E\u53F0\u5F02\u6B65\u4EFB\u52A1","slug":"arthas-\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1","link":"#arthas-\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1","children":[]},{"level":2,"title":"\u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7","slug":"\u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7","link":"#\u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7","children":[]},{"level":2,"title":"Docker","slug":"docker","link":"#docker","children":[]},{"level":2,"title":"Web Console","slug":"web-console","link":"#web-console","children":[]},{"level":2,"title":"Arthas Tunnel","slug":"arthas-tunnel","link":"#arthas-tunnel","children":[]},{"level":2,"title":"ognl \u8868\u8FBE\u5F0F\u7528\u6CD5","slug":"ognl-\u8868\u8FBE\u5F0F\u7528\u6CD5","link":"#ognl-\u8868\u8FBE\u5F0F\u7528\u6CD5","children":[]},{"level":2,"title":"IDEA Plugin","slug":"idea-plugin","link":"#idea-plugin","children":[]},{"level":2,"title":"Arthas Properties","slug":"arthas-properties","link":"#arthas-properties","children":[]},{"level":2,"title":"\u4EE5 java agent \u65B9\u5F0F\u542F\u52A8","slug":"\u4EE5-java-agent-\u65B9\u5F0F\u542F\u52A8","link":"#\u4EE5-java-agent-\u65B9\u5F0F\u542F\u52A8","children":[]},{"level":2,"title":"Arthas Spring Boot Starter","slug":"arthas-spring-boot-starter","link":"#arthas-spring-boot-starter","children":[]},{"level":2,"title":"\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4","slug":"\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4","link":"#\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4","children":[]},{"level":2,"title":"HTTP API","slug":"http-api","link":"#http-api","children":[]},{"level":2,"title":"\u6279\u5904\u7406\u529F\u80FD","slug":"\u6279\u5904\u7406\u529F\u80FD","link":"#\u6279\u5904\u7406\u529F\u80FD","children":[]},{"level":2,"title":"as.sh \u548C arthas-boot \u6280\u5DE7","slug":"as-sh-\u548C-arthas-boot-\u6280\u5DE7","link":"#as-sh-\u548C-arthas-boot-\u6280\u5DE7","children":[]},{"level":2,"title":"\u7528\u6237\u6570\u636E\u56DE\u62A5","slug":"\u7528\u6237\u6570\u636E\u56DE\u62A5","link":"#\u7528\u6237\u6570\u636E\u56DE\u62A5","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/advanced-use.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/advanced-use.html.cf065376.js b/assets/advanced-use.html.38aef1b4.js similarity index 52% rename from assets/advanced-use.html.cf065376.js rename to assets/advanced-use.html.38aef1b4.js index 281c915d9..925a62173 100644 --- a/assets/advanced-use.html.cf065376.js +++ b/assets/advanced-use.html.38aef1b4.js @@ -1,4 +1,4 @@ -import{_ as i,o as l,c,a,b as e,w as t,e as s,d,r}from"./app.524ecf5c.js";const p={},h=a("h1",{id:"other-features",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#other-features","aria-hidden":"true"},"#"),s(" Other features")],-1),u=a("h2",{id:"arthas-async-jobs",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#arthas-async-jobs","aria-hidden":"true"},"#"),s(" Arthas Async Jobs")],-1),m=a("p",null,"If you need to investigate an issue, but you are unsure about the exact time it occurs, you can run the monitoring command in the background and save the output to a log file.",-1),b=s("Arthas Async Jobs"),_=a("h2",{id:"log-the-output",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#log-the-output","aria-hidden":"true"},"#"),s(" Log the output")],-1),v=a("p",null,"All execution records are fully saved in the log file for subsequent analysis.",-1),k=s("log the output"),g=a("h2",{id:"docker",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#docker","aria-hidden":"true"},"#"),s(" Docker")],-1),f=a("p",null,"Arthas configuration reference for using in Docker containers.",-1),x=s("Docker"),A=a("h2",{id:"web-console",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#web-console","aria-hidden":"true"},"#"),s(" Web Console")],-1),w=a("p",null,"Arthas supports living inside a browser. The communication between arthas and browser is via websocket.",-1),y=s("Web Console"),j=a("h2",{id:"arthas-tunnel",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#arthas-tunnel","aria-hidden":"true"},"#"),s(" Arthas Tunnel")],-1),I=a("p",null,"Arthas Tunnel Server/Client enables remote management/connection to Java services across multiple servers.",-1),T=s("Arthas Tunnel"),S=a("h2",{id:"how-to-use-ognl",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#how-to-use-ognl","aria-hidden":"true"},"#"),s(" How to use ognl")],-1),C={href:"https://github.com/alibaba/arthas/issues/11",target:"_blank",rel:"noopener noreferrer"},P=s("Basic ognl example"),E={href:"https://github.com/alibaba/arthas/issues/71",target:"_blank",rel:"noopener noreferrer"},B=s("Ognl special uses"),J=a("h2",{id:"idea-plugin",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#idea-plugin","aria-hidden":"true"},"#"),s(" IDEA Plugin")],-1),L=a("p",null,"Build arthas commands more efficiently in the IntelliJ IDEA compiler.",-1),D=s("IDEA Plugin"),N=a("h2",{id:"arthas-properties",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#arthas-properties","aria-hidden":"true"},"#"),s(" Arthas Properties")],-1),O=a("p",null,"Arthas supports configuration options reference.",-1),H=s("Arthas Properties"),V=a("h2",{id:"start-as-a-java-agent",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#start-as-a-java-agent","aria-hidden":"true"},"#"),s(" Start as a Java Agent")],-1),U=s("Start as a Java Agent"),F=a("h2",{id:"arthas-spring-boot-starter",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#arthas-spring-boot-starter","aria-hidden":"true"},"#"),s(" Arthas Spring Boot Starter")],-1),R=a("p",null,"Starting with the application.",-1),W=s("Arthas Spring Boot Starter"),$=a("h2",{id:"load-external-commands",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#load-external-commands","aria-hidden":"true"},"#"),s(" Load External Commands")],-1),q=a("p",null,"Load external command jars when Arthas starts and extend team-specific diagnostic actions as Arthas commands.",-1),z=s("Load External Commands"),M=a("h2",{id:"http-api",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#http-api","aria-hidden":"true"},"#"),s(" HTTP API")],-1),G=a("p",null,"The Http API provides structured data and supports more complex interactive functions, making it easier to integrate Arthas into custom interfaces.",-1),K=s("HTTP API"),Q=a("h2",{id:"batch-processing",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#batch-processing","aria-hidden":"true"},"#"),s(" Batch Processing")],-1),X=a("p",null,[s("It is convenient for running multiple commands in bulk with custom scripts. It can be used in conjunction with the "),a("code",null,"--select"),s(" parameter to specify the process name.")],-1),Y=s("Batch Processing"),Z=d(`

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.

$ jps
+import{_ as i,o as l,c,a,b as e,w as t,e as s,d,r}from"./app.e2427bec.js";const p={},h=a("h1",{id:"other-features",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#other-features","aria-hidden":"true"},"#"),s(" Other features")],-1),u=a("h2",{id:"arthas-async-jobs",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#arthas-async-jobs","aria-hidden":"true"},"#"),s(" Arthas Async Jobs")],-1),m=a("p",null,"If you need to investigate an issue, but you are unsure about the exact time it occurs, you can run the monitoring command in the background and save the output to a log file.",-1),b=s("Arthas Async Jobs"),_=a("h2",{id:"log-the-output",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#log-the-output","aria-hidden":"true"},"#"),s(" Log the output")],-1),v=a("p",null,"All execution records are fully saved in the log file for subsequent analysis.",-1),k=s("log the output"),g=a("h2",{id:"docker",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#docker","aria-hidden":"true"},"#"),s(" Docker")],-1),f=a("p",null,"Arthas configuration reference for using in Docker containers.",-1),x=s("Docker"),A=a("h2",{id:"web-console",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#web-console","aria-hidden":"true"},"#"),s(" Web Console")],-1),w=a("p",null,"Arthas supports living inside a browser. The communication between arthas and browser is via websocket.",-1),y=s("Web Console"),j=a("h2",{id:"arthas-tunnel",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#arthas-tunnel","aria-hidden":"true"},"#"),s(" Arthas Tunnel")],-1),T=a("p",null,"Arthas Tunnel Server/Client enables remote management/connection to Java services across multiple servers.",-1),I=s("Arthas Tunnel"),S=a("h2",{id:"how-to-use-ognl",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#how-to-use-ognl","aria-hidden":"true"},"#"),s(" How to use ognl")],-1),C=s("Tips for complex OGNL expressions"),P={href:"https://github.com/alibaba/arthas/issues/11",target:"_blank",rel:"noopener noreferrer"},E=s("Basic ognl example"),B=a("h2",{id:"idea-plugin",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#idea-plugin","aria-hidden":"true"},"#"),s(" IDEA Plugin")],-1),L=a("p",null,"Build arthas commands more efficiently in the IntelliJ IDEA compiler.",-1),J=s("IDEA Plugin"),N=a("h2",{id:"arthas-properties",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#arthas-properties","aria-hidden":"true"},"#"),s(" Arthas Properties")],-1),D=a("p",null,"Arthas supports configuration options reference.",-1),O=s("Arthas Properties"),H=a("h2",{id:"start-as-a-java-agent",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#start-as-a-java-agent","aria-hidden":"true"},"#"),s(" Start as a Java Agent")],-1),V=s("Start as a Java Agent"),U=a("h2",{id:"arthas-spring-boot-starter",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#arthas-spring-boot-starter","aria-hidden":"true"},"#"),s(" Arthas Spring Boot Starter")],-1),F=a("p",null,"Starting with the application.",-1),R=s("Arthas Spring Boot Starter"),W=a("h2",{id:"load-external-commands",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#load-external-commands","aria-hidden":"true"},"#"),s(" Load External Commands")],-1),$=a("p",null,"Load external command jars when Arthas starts and extend team-specific diagnostic actions as Arthas commands.",-1),q=s("Load External Commands"),z=a("h2",{id:"http-api",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#http-api","aria-hidden":"true"},"#"),s(" HTTP API")],-1),G=a("p",null,"The Http API provides structured data and supports more complex interactive functions, making it easier to integrate Arthas into custom interfaces.",-1),M=s("HTTP API"),K=a("h2",{id:"batch-processing",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#batch-processing","aria-hidden":"true"},"#"),s(" Batch Processing")],-1),Q=a("p",null,[s("It is convenient for running multiple commands in bulk with custom scripts. It can be used in conjunction with the "),a("code",null,"--select"),s(" parameter to specify the process name.")],-1),X=s("Batch Processing"),Y=d(`

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.

$ jps
 58883 math-game.jar
 58884 Jps
 

The select option allows you to specify a process name, which is very convenient.

$ ./as.sh --select math-game
@@ -24,7 +24,6 @@ Escape character is '^]'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.

`,11),aa={href:"https://github.com/alibaba/arthas/blob/master/tunnel-server/src/main/java/com/alibaba/arthas/tunnel/server/app/web/StatController.java",target:"_blank",rel:"noopener noreferrer"},sa=s("StatController.java");function ea(na,ta){const n=r("RouterLink"),o=r("ExternalLinkIcon");return l(),c("div",null,[h,u,m,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/async.html"},{default:t(()=>[b]),_:1})])]),_,v,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/save-log.html"},{default:t(()=>[k]),_:1})])]),g,f,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/docker.html"},{default:t(()=>[x]),_:1})])]),A,w,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/web-console.html"},{default:t(()=>[y]),_:1})])]),j,I,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/tunnel.html"},{default:t(()=>[T]),_:1})])]),S,a("ul",null,[a("li",null,[a("a",C,[P,e(o)])]),a("li",null,[a("a",E,[B,e(o)])])]),J,L,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/idea-plugin.html"},{default:t(()=>[D]),_:1})])]),N,O,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/arthas-properties.html"},{default:t(()=>[H]),_:1})])]),V,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/agent.html"},{default:t(()=>[U]),_:1})])]),F,R,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/spring-boot-starter.html"},{default:t(()=>[W]),_:1})])]),$,q,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/external-command.html"},{default:t(()=>[z]),_:1})])]),M,G,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/http-api.html"},{default:t(()=>[K]),_:1})])]),Q,X,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/batch-support.html"},{default:t(()=>[Y]),_:1})])]),Z,a("p",null,[a("a",aa,[sa,e(o)])])])}const ra=i(p,[["render",ea],["__file","advanced-use.html.vue"]]);export{ra as default}; +

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.

`,11),Z={href:"https://github.com/alibaba/arthas/blob/master/tunnel-server/src/main/java/com/alibaba/arthas/tunnel/server/app/web/StatController.java",target:"_blank",rel:"noopener noreferrer"},aa=s("StatController.java");function sa(ea,na){const n=r("RouterLink"),o=r("ExternalLinkIcon");return l(),c("div",null,[h,u,m,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/async.html"},{default:t(()=>[b]),_:1})])]),_,v,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/save-log.html"},{default:t(()=>[k]),_:1})])]),g,f,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/docker.html"},{default:t(()=>[x]),_:1})])]),A,w,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/web-console.html"},{default:t(()=>[y]),_:1})])]),j,T,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/tunnel.html"},{default:t(()=>[I]),_:1})])]),S,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/ognl-express.html"},{default:t(()=>[C]),_:1})]),a("li",null,[a("a",P,[E,e(o)])])]),B,L,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/idea-plugin.html"},{default:t(()=>[J]),_:1})])]),N,D,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/arthas-properties.html"},{default:t(()=>[O]),_:1})])]),H,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/agent.html"},{default:t(()=>[V]),_:1})])]),U,F,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/spring-boot-starter.html"},{default:t(()=>[R]),_:1})])]),W,$,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/external-command.html"},{default:t(()=>[q]),_:1})])]),z,G,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/http-api.html"},{default:t(()=>[M]),_:1})])]),K,Q,a("ul",null,[a("li",null,[e(n,{to:"/en/doc/batch-support.html"},{default:t(()=>[X]),_:1})])]),Y,a("p",null,[a("a",Z,[aa,e(o)])])])}const oa=i(p,[["render",sa],["__file","advanced-use.html.vue"]]);export{oa as default}; diff --git a/assets/advanced-use.html.59632b6f.js b/assets/advanced-use.html.5dddb9fa.js similarity index 95% rename from assets/advanced-use.html.59632b6f.js rename to assets/advanced-use.html.5dddb9fa.js index f48ef2913..56e999fa2 100644 --- a/assets/advanced-use.html.59632b6f.js +++ b/assets/advanced-use.html.5dddb9fa.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-463d120e","path":"/en/doc/advanced-use.html","title":"Other features","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Arthas Async Jobs","slug":"arthas-async-jobs","link":"#arthas-async-jobs","children":[]},{"level":2,"title":"Log the output","slug":"log-the-output","link":"#log-the-output","children":[]},{"level":2,"title":"Docker","slug":"docker","link":"#docker","children":[]},{"level":2,"title":"Web Console","slug":"web-console","link":"#web-console","children":[]},{"level":2,"title":"Arthas Tunnel","slug":"arthas-tunnel","link":"#arthas-tunnel","children":[]},{"level":2,"title":"How to use ognl","slug":"how-to-use-ognl","link":"#how-to-use-ognl","children":[]},{"level":2,"title":"IDEA Plugin","slug":"idea-plugin","link":"#idea-plugin","children":[]},{"level":2,"title":"Arthas Properties","slug":"arthas-properties","link":"#arthas-properties","children":[]},{"level":2,"title":"Start as a Java Agent","slug":"start-as-a-java-agent","link":"#start-as-a-java-agent","children":[]},{"level":2,"title":"Arthas Spring Boot Starter","slug":"arthas-spring-boot-starter","link":"#arthas-spring-boot-starter","children":[]},{"level":2,"title":"Load External Commands","slug":"load-external-commands","link":"#load-external-commands","children":[]},{"level":2,"title":"HTTP API","slug":"http-api","link":"#http-api","children":[]},{"level":2,"title":"Batch Processing","slug":"batch-processing","link":"#batch-processing","children":[]},{"level":2,"title":"as.sh and arthas-boot tips","slug":"as-sh-and-arthas-boot-tips","link":"#as-sh-and-arthas-boot-tips","children":[]},{"level":2,"title":"User data report","slug":"user-data-report","link":"#user-data-report","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/advanced-use.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-463d120e","path":"/en/doc/advanced-use.html","title":"Other features","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Arthas Async Jobs","slug":"arthas-async-jobs","link":"#arthas-async-jobs","children":[]},{"level":2,"title":"Log the output","slug":"log-the-output","link":"#log-the-output","children":[]},{"level":2,"title":"Docker","slug":"docker","link":"#docker","children":[]},{"level":2,"title":"Web Console","slug":"web-console","link":"#web-console","children":[]},{"level":2,"title":"Arthas Tunnel","slug":"arthas-tunnel","link":"#arthas-tunnel","children":[]},{"level":2,"title":"How to use ognl","slug":"how-to-use-ognl","link":"#how-to-use-ognl","children":[]},{"level":2,"title":"IDEA Plugin","slug":"idea-plugin","link":"#idea-plugin","children":[]},{"level":2,"title":"Arthas Properties","slug":"arthas-properties","link":"#arthas-properties","children":[]},{"level":2,"title":"Start as a Java Agent","slug":"start-as-a-java-agent","link":"#start-as-a-java-agent","children":[]},{"level":2,"title":"Arthas Spring Boot Starter","slug":"arthas-spring-boot-starter","link":"#arthas-spring-boot-starter","children":[]},{"level":2,"title":"Load External Commands","slug":"load-external-commands","link":"#load-external-commands","children":[]},{"level":2,"title":"HTTP API","slug":"http-api","link":"#http-api","children":[]},{"level":2,"title":"Batch Processing","slug":"batch-processing","link":"#batch-processing","children":[]},{"level":2,"title":"as.sh and arthas-boot tips","slug":"as-sh-and-arthas-boot-tips","link":"#as-sh-and-arthas-boot-tips","children":[]},{"level":2,"title":"User data report","slug":"user-data-report","link":"#user-data-report","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/advanced-use.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/advice-class.html.9482e515.js b/assets/advice-class.html.12568df6.js similarity index 67% rename from assets/advice-class.html.9482e515.js rename to assets/advice-class.html.12568df6.js index 445746cfe..6455527b9 100644 --- a/assets/advice-class.html.9482e515.js +++ b/assets/advice-class.html.12568df6.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-a736375c","path":"/en/doc/advice-class.html","title":"Fundamental Fields in Expressions","lang":"en-US","frontmatter":{},"excerpt":"","headers":[],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/advice-class.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-a736375c","path":"/en/doc/advice-class.html","title":"Fundamental Fields in Expressions","lang":"en-US","frontmatter":{},"excerpt":"","headers":[],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/advice-class.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/advice-class.html.1fb022df.js b/assets/advice-class.html.3778e1f2.js similarity index 67% rename from assets/advice-class.html.1fb022df.js rename to assets/advice-class.html.3778e1f2.js index e3b9d89e3..e4341b571 100644 --- a/assets/advice-class.html.1fb022df.js +++ b/assets/advice-class.html.3778e1f2.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-46e53834","path":"/doc/advice-class.html","title":"\u8868\u8FBE\u5F0F\u6838\u5FC3\u53D8\u91CF","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/advice-class.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-46e53834","path":"/doc/advice-class.html","title":"\u8868\u8FBE\u5F0F\u6838\u5FC3\u53D8\u91CF","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/advice-class.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/advice-class.html.d491abce.js b/assets/advice-class.html.7352d445.js similarity index 74% rename from assets/advice-class.html.d491abce.js rename to assets/advice-class.html.7352d445.js index 4f7460799..368915396 100644 --- a/assets/advice-class.html.d491abce.js +++ b/assets/advice-class.html.7352d445.js @@ -1,4 +1,4 @@ -import{_ as s,o as l,c as o,a as e,b as a,d as r,e as t,r as i}from"./app.524ecf5c.js";const c={},d=r(`

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.

public class Advice {
+import{_ as a,o as n,c as s,a as e,b as l,w as o,d as i,r,e as c}from"./app.e2427bec.js";const d={},p=i(`

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.

public class Advice {
 
     private final ClassLoader loader;
     private final Class<?> clazz;
@@ -13,4 +13,4 @@ import{_ as s,o as l,c as o,a as e,b as a,d as r,e as t,r as i}from"./app.524ecf
 
     // getter/setter
 }
-

Description for the variables in the class Advice:

NameSpecification
loaderthe class loader for the current called class
clazzthe reference to the current called class
methodthe reference to the current called method
targetthe instance of the current called class
paramsthe parameters for the current call, which is an array (when there's no parameter, it will be an empty array)
returnObjthe return value from the current call - only available when the method call returns normally (isReturn==true), and null is for void return value
throwExpthe exceptions thrown from the current call - only available when the method call throws exception (isThrow==true)
isBeforeflag 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
isThrowflag to indicate the method call ends with exception thrown
isReturnflag to indicate the method call ends normally without exception thrown
`,5),p=t("All variables listed above can be used directly in the "),h={href:"https://commons.apache.org/dormant/commons-ognl/language-guide.html",target:"_blank",rel:"noopener noreferrer"},u=t("OGNL expression"),k=t(". The command will not execute and exit if there's illegal OGNL grammar or unexpected variable in the expression."),m={href:"https://github.com/alibaba/arthas/issues/71",target:"_blank",rel:"noopener noreferrer"},g=t("typical use cases"),v=t(";"),f={href:"https://commons.apache.org/dormant/commons-ognl/language-guide.html",target:"_blank",rel:"noopener noreferrer"},y=t("OGNL language guide"),b=t(".");function w(x,_){const n=i("ExternalLinkIcon");return l(),o("div",null,[d,e("p",null,[p,e("a",h,[u,a(n)]),k]),e("ul",null,[e("li",null,[e("a",m,[g,a(n)]),v]),e("li",null,[e("a",f,[y,a(n)]),b])])])}const N=s(c,[["render",w],["__file","advice-class.html.vue"]]);export{N as default}; +

Description for the variables in the class Advice:

NameSpecification
loaderthe class loader for the current called class
clazzthe reference to the current called class
methodthe reference to the current called method
targetthe instance of the current called class
paramsthe parameters for the current call, which is an array (when there's no parameter, it will be an empty array)
returnObjthe return value from the current call - only available when the method call returns normally (isReturn==true), and null is for void return value
throwExpthe exceptions thrown from the current call - only available when the method call throws exception (isThrow==true)
isBeforeflag 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
isThrowflag to indicate the method call ends with exception thrown
isReturnflag to indicate the method call ends normally without exception thrown

All variables listed above can be used directly in the OGNL expression. The command will not execute and exit if there's illegal OGNL grammar or unexpected variable in the expression.

`,6),u=c("Tips for complex OGNL expressions");function h(k,m){const t=r("RouterLink");return n(),s("div",null,[p,e("ul",null,[e("li",null,[l(t,{to:"/en/doc/ognl-express.html"},{default:o(()=>[u]),_:1})])])])}const y=a(d,[["render",h],["__file","advice-class.html.vue"]]);export{y as default}; diff --git a/assets/advice-class.html.0437560f.js b/assets/advice-class.html.79697a1e.js similarity index 78% rename from assets/advice-class.html.0437560f.js rename to assets/advice-class.html.79697a1e.js index 2fffb0f7a..1668b61d8 100644 --- a/assets/advice-class.html.0437560f.js +++ b/assets/advice-class.html.79697a1e.js @@ -1,4 +1,4 @@ -import{_ as e,o as l,c as o,a as s,b as n,d as r,e as a,r as i}from"./app.524ecf5c.js";const c={},d=r(`

\u8868\u8FBE\u5F0F\u6838\u5FC3\u53D8\u91CF

\u65E0\u8BBA\u662F\u5339\u914D\u8868\u8FBE\u5F0F\u4E5F\u597D\u3001\u89C2\u5BDF\u8868\u8FBE\u5F0F\u4E5F\u7F62\uFF0C\u4ED6\u4EEC\u6838\u5FC3\u5224\u65AD\u53D8\u91CF\u90FD\u662F\u56F4\u7ED5\u7740\u4E00\u4E2A Arthas \u4E2D\u7684\u901A\u7528\u901A\u77E5\u5BF9\u8C61 Advice \u8FDB\u884C\u3002

\u5B83\u7684\u7B80\u7565\u4EE3\u7801\u7ED3\u6784\u5982\u4E0B

public class Advice {
+import{_ as t,o as n,c as e,a as s,b as l,w as o,d,r as i,e as c}from"./app.e2427bec.js";const p={},r=d(`

\u8868\u8FBE\u5F0F\u6838\u5FC3\u53D8\u91CF

\u65E0\u8BBA\u662F\u5339\u914D\u8868\u8FBE\u5F0F\u4E5F\u597D\u3001\u89C2\u5BDF\u8868\u8FBE\u5F0F\u4E5F\u7F62\uFF0C\u4ED6\u4EEC\u6838\u5FC3\u5224\u65AD\u53D8\u91CF\u90FD\u662F\u56F4\u7ED5\u7740\u4E00\u4E2A Arthas \u4E2D\u7684\u901A\u7528\u901A\u77E5\u5BF9\u8C61 Advice \u8FDB\u884C\u3002

\u5B83\u7684\u7B80\u7565\u4EE3\u7801\u7ED3\u6784\u5982\u4E0B

public class Advice {
 
     private final ClassLoader loader;
     private final Class<?> clazz;
@@ -13,4 +13,4 @@ import{_ as e,o as l,c as o,a as s,b as n,d as r,e as a,r as i}from"./app.524ecf
 
     // getter/setter
 }
-

\u8FD9\u91CC\u5217\u4E00\u4E2A\u8868\u683C\u6765\u8BF4\u660E\u4E0D\u540C\u53D8\u91CF\u7684\u542B\u4E49

\u53D8\u91CF\u540D\u53D8\u91CF\u89E3\u91CA
loader\u672C\u6B21\u8C03\u7528\u7C7B\u6240\u5728\u7684 ClassLoader
clazz\u672C\u6B21\u8C03\u7528\u7C7B\u7684 Class \u5F15\u7528
method\u672C\u6B21\u8C03\u7528\u65B9\u6CD5\u53CD\u5C04\u5F15\u7528
target\u672C\u6B21\u8C03\u7528\u7C7B\u7684\u5B9E\u4F8B
params\u672C\u6B21\u8C03\u7528\u53C2\u6570\u5217\u8868\uFF0C\u8FD9\u662F\u4E00\u4E2A\u6570\u7EC4\uFF0C\u5982\u679C\u65B9\u6CD5\u662F\u65E0\u53C2\u65B9\u6CD5\u5219\u4E3A\u7A7A\u6570\u7EC4
returnObj\u672C\u6B21\u8C03\u7528\u8FD4\u56DE\u7684\u5BF9\u8C61\u3002\u5F53\u4E14\u4EC5\u5F53 isReturn==true \u6210\u7ACB\u65F6\u5019\u6709\u6548\uFF0C\u8868\u660E\u65B9\u6CD5\u8C03\u7528\u662F\u4EE5\u6B63\u5E38\u8FD4\u56DE\u7684\u65B9\u5F0F\u7ED3\u675F\u3002\u5982\u679C\u5F53\u524D\u65B9\u6CD5\u65E0\u8FD4\u56DE\u503C void\uFF0C\u5219\u503C\u4E3A null
throwExp\u672C\u6B21\u8C03\u7528\u629B\u51FA\u7684\u5F02\u5E38\u3002\u5F53\u4E14\u4EC5\u5F53 isThrow==true \u6210\u7ACB\u65F6\u6709\u6548\uFF0C\u8868\u660E\u65B9\u6CD5\u8C03\u7528\u662F\u4EE5\u629B\u51FA\u5F02\u5E38\u7684\u65B9\u5F0F\u7ED3\u675F\u3002
isBefore\u8F85\u52A9\u5224\u65AD\u6807\u8BB0\uFF0C\u5F53\u524D\u7684\u901A\u77E5\u8282\u70B9\u6709\u53EF\u80FD\u662F\u5728\u65B9\u6CD5\u4E00\u5F00\u59CB\u5C31\u901A\u77E5\uFF0C\u6B64\u65F6 isBefore==true \u6210\u7ACB\uFF0C\u540C\u65F6 isThrow==false \u548C isReturn==false\uFF0C\u56E0\u4E3A\u5728\u65B9\u6CD5\u521A\u5F00\u59CB\u65F6\uFF0C\u8FD8\u65E0\u6CD5\u786E\u5B9A\u65B9\u6CD5\u8C03\u7528\u5C06\u4F1A\u5982\u4F55\u7ED3\u675F\u3002
isThrow\u8F85\u52A9\u5224\u65AD\u6807\u8BB0\uFF0C\u5F53\u524D\u7684\u65B9\u6CD5\u8C03\u7528\u4EE5\u629B\u5F02\u5E38\u7684\u5F62\u5F0F\u7ED3\u675F\u3002
isReturn\u8F85\u52A9\u5224\u65AD\u6807\u8BB0\uFF0C\u5F53\u524D\u7684\u65B9\u6CD5\u8C03\u7528\u4EE5\u6B63\u5E38\u8FD4\u56DE\u7684\u5F62\u5F0F\u7ED3\u675F\u3002

\u6240\u6709\u53D8\u91CF\u90FD\u53EF\u4EE5\u5728\u8868\u8FBE\u5F0F\u4E2D\u76F4\u63A5\u4F7F\u7528\uFF0C\u5982\u679C\u5728\u8868\u8FBE\u5F0F\u4E2D\u7F16\u5199\u4E86\u4E0D\u7B26\u5408 OGNL \u811A\u672C\u8BED\u6CD5\u6216\u8005\u5F15\u5165\u4E86\u4E0D\u5728\u8868\u683C\u4E2D\u7684\u53D8\u91CF\uFF0C\u5219\u9000\u51FA\u547D\u4EE4\u7684\u6267\u884C\uFF1B\u7528\u6237\u53EF\u4EE5\u6839\u636E\u5F53\u524D\u7684\u5F02\u5E38\u4FE1\u606F\u4FEE\u6B63\u6761\u4EF6\u8868\u8FBE\u5F0F\u6216\u89C2\u5BDF\u8868\u8FBE\u5F0F

`,7),p=a("\u7279\u6B8A\u7528\u6CD5\u8BF7\u53C2\u8003\uFF1A"),k={href:"https://github.com/alibaba/arthas/issues/71",target:"_blank",rel:"noopener noreferrer"},u=a("https://github.com/alibaba/arthas/issues/71"),h=a("OGNL \u8868\u8FBE\u5F0F\u5B98\u7F51\uFF1A"),g={href:"https://commons.apache.org/dormant/commons-ognl/language-guide.html",target:"_blank",rel:"noopener noreferrer"},v=a("https://commons.apache.org/dormant/commons-ognl/language-guide.html");function m(y,b){const t=i("ExternalLinkIcon");return l(),o("div",null,[d,s("ul",null,[s("li",null,[p,s("a",k,[u,n(t)])]),s("li",null,[h,s("a",g,[v,n(t)])])])])}const w=e(c,[["render",m],["__file","advice-class.html.vue"]]);export{w as default}; +

\u8FD9\u91CC\u5217\u4E00\u4E2A\u8868\u683C\u6765\u8BF4\u660E\u4E0D\u540C\u53D8\u91CF\u7684\u542B\u4E49

\u53D8\u91CF\u540D\u53D8\u91CF\u89E3\u91CA
loader\u672C\u6B21\u8C03\u7528\u7C7B\u6240\u5728\u7684 ClassLoader
clazz\u672C\u6B21\u8C03\u7528\u7C7B\u7684 Class \u5F15\u7528
method\u672C\u6B21\u8C03\u7528\u65B9\u6CD5\u53CD\u5C04\u5F15\u7528
target\u672C\u6B21\u8C03\u7528\u7C7B\u7684\u5B9E\u4F8B
params\u672C\u6B21\u8C03\u7528\u53C2\u6570\u5217\u8868\uFF0C\u8FD9\u662F\u4E00\u4E2A\u6570\u7EC4\uFF0C\u5982\u679C\u65B9\u6CD5\u662F\u65E0\u53C2\u65B9\u6CD5\u5219\u4E3A\u7A7A\u6570\u7EC4
returnObj\u672C\u6B21\u8C03\u7528\u8FD4\u56DE\u7684\u5BF9\u8C61\u3002\u5F53\u4E14\u4EC5\u5F53 isReturn==true \u6210\u7ACB\u65F6\u5019\u6709\u6548\uFF0C\u8868\u660E\u65B9\u6CD5\u8C03\u7528\u662F\u4EE5\u6B63\u5E38\u8FD4\u56DE\u7684\u65B9\u5F0F\u7ED3\u675F\u3002\u5982\u679C\u5F53\u524D\u65B9\u6CD5\u65E0\u8FD4\u56DE\u503C void\uFF0C\u5219\u503C\u4E3A null
throwExp\u672C\u6B21\u8C03\u7528\u629B\u51FA\u7684\u5F02\u5E38\u3002\u5F53\u4E14\u4EC5\u5F53 isThrow==true \u6210\u7ACB\u65F6\u6709\u6548\uFF0C\u8868\u660E\u65B9\u6CD5\u8C03\u7528\u662F\u4EE5\u629B\u51FA\u5F02\u5E38\u7684\u65B9\u5F0F\u7ED3\u675F\u3002
isBefore\u8F85\u52A9\u5224\u65AD\u6807\u8BB0\uFF0C\u5F53\u524D\u7684\u901A\u77E5\u8282\u70B9\u6709\u53EF\u80FD\u662F\u5728\u65B9\u6CD5\u4E00\u5F00\u59CB\u5C31\u901A\u77E5\uFF0C\u6B64\u65F6 isBefore==true \u6210\u7ACB\uFF0C\u540C\u65F6 isThrow==false \u548C isReturn==false\uFF0C\u56E0\u4E3A\u5728\u65B9\u6CD5\u521A\u5F00\u59CB\u65F6\uFF0C\u8FD8\u65E0\u6CD5\u786E\u5B9A\u65B9\u6CD5\u8C03\u7528\u5C06\u4F1A\u5982\u4F55\u7ED3\u675F\u3002
isThrow\u8F85\u52A9\u5224\u65AD\u6807\u8BB0\uFF0C\u5F53\u524D\u7684\u65B9\u6CD5\u8C03\u7528\u4EE5\u629B\u5F02\u5E38\u7684\u5F62\u5F0F\u7ED3\u675F\u3002
isReturn\u8F85\u52A9\u5224\u65AD\u6807\u8BB0\uFF0C\u5F53\u524D\u7684\u65B9\u6CD5\u8C03\u7528\u4EE5\u6B63\u5E38\u8FD4\u56DE\u7684\u5F62\u5F0F\u7ED3\u675F\u3002

\u6240\u6709\u53D8\u91CF\u90FD\u53EF\u4EE5\u5728\u8868\u8FBE\u5F0F\u4E2D\u76F4\u63A5\u4F7F\u7528\uFF0C\u5982\u679C\u5728\u8868\u8FBE\u5F0F\u4E2D\u7F16\u5199\u4E86\u4E0D\u7B26\u5408 OGNL \u811A\u672C\u8BED\u6CD5\u6216\u8005\u5F15\u5165\u4E86\u4E0D\u5728\u8868\u683C\u4E2D\u7684\u53D8\u91CF\uFF0C\u5219\u9000\u51FA\u547D\u4EE4\u7684\u6267\u884C\uFF1B\u7528\u6237\u53EF\u4EE5\u6839\u636E\u5F53\u524D\u7684\u5F02\u5E38\u4FE1\u606F\u4FEE\u6B63\u6761\u4EF6\u8868\u8FBE\u5F0F\u6216\u89C2\u5BDF\u8868\u8FBE\u5F0F

`,7),k=c("OGNL \u590D\u6742\u8868\u8FBE\u5F0F\u4F7F\u7528\u6280\u5DE7");function u(v,y){const a=i("RouterLink");return n(),e("div",null,[r,s("ul",null,[s("li",null,[l(a,{to:"/doc/ognl-express.html"},{default:o(()=>[k]),_:1})])])])}const h=t(p,[["render",u],["__file","advice-class.html.vue"]]);export{h as default}; diff --git a/assets/agent.html.bb83a7be.js b/assets/agent.html.2480ffd9.js similarity index 96% rename from assets/agent.html.bb83a7be.js rename to assets/agent.html.2480ffd9.js index c76160c29..197534353 100644 --- a/assets/agent.html.bb83a7be.js +++ b/assets/agent.html.2480ffd9.js @@ -1,2 +1,2 @@ -import{_ as s,o,c as n,a as e,b as r,w as c,d,e as a,r as i}from"./app.524ecf5c.js";const l={},h=d(`

\u4EE5 Java Agent \u7684\u65B9\u5F0F\u542F\u52A8

\u901A\u5E38 Arthas \u662F\u4EE5\u52A8\u6001 attach \u7684\u65B9\u5F0F\u6765\u8BCA\u65AD\u5E94\u7528\uFF0C\u4F46\u4ECE3.2.0\u7248\u672C\u8D77\uFF0CArthas \u652F\u6301\u76F4\u63A5\u4EE5 java agent \u7684\u65B9\u5F0F\u542F\u52A8\u3002

\u6BD4\u5982\u4E0B\u8F7D\u5168\u91CF\u7684 arthas zip \u5305\uFF0C\u89E3\u538B\u4E4B\u540E\u4EE5 -javaagent \u7684\u53C2\u6570\u6307\u5B9Aarthas-agent.jar\u6765\u542F\u52A8\uFF1A

java -javaagent:/tmp/test/arthas-agent.jar -jar math-game.jar
+import{_ as s,o,c as n,a as e,b as r,w as c,d,e as a,r as i}from"./app.e2427bec.js";const l={},h=d(`

\u4EE5 Java Agent \u7684\u65B9\u5F0F\u542F\u52A8

\u901A\u5E38 Arthas \u662F\u4EE5\u52A8\u6001 attach \u7684\u65B9\u5F0F\u6765\u8BCA\u65AD\u5E94\u7528\uFF0C\u4F46\u4ECE3.2.0\u7248\u672C\u8D77\uFF0CArthas \u652F\u6301\u76F4\u63A5\u4EE5 java agent \u7684\u65B9\u5F0F\u542F\u52A8\u3002

\u6BD4\u5982\u4E0B\u8F7D\u5168\u91CF\u7684 arthas zip \u5305\uFF0C\u89E3\u538B\u4E4B\u540E\u4EE5 -javaagent \u7684\u53C2\u6570\u6307\u5B9Aarthas-agent.jar\u6765\u542F\u52A8\uFF1A

java -javaagent:/tmp/test/arthas-agent.jar -jar math-game.jar
 
`,4),_=a("\u9ED8\u8BA4\u7684\u914D\u7F6E\u9879\u5728\u89E3\u538B\u76EE\u5F55\u91CC\u7684"),p=e("code",null,"arthas.properties",-1),m=a("\u6587\u4EF6\u91CC\u3002\u53C2\u8003\uFF1A"),u=a("Arthas Properties"),v=e("p",null,"Java Agent \u673A\u5236\u53C2\u8003\uFF1A https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html",-1);function g(j,x){const t=i("RouterLink");return o(),n("div",null,[h,e("p",null,[_,p,m,r(t,{to:"/doc/arthas-properties.html"},{default:c(()=>[u]),_:1})]),v])}const b=s(l,[["render",g],["__file","agent.html.vue"]]);export{b as default}; diff --git a/assets/agent.html.80af310f.js b/assets/agent.html.55a8cd63.js similarity index 68% rename from assets/agent.html.80af310f.js rename to assets/agent.html.55a8cd63.js index 54d0f7f92..f37e5634c 100644 --- a/assets/agent.html.80af310f.js +++ b/assets/agent.html.55a8cd63.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-37178538","path":"/doc/agent.html","title":"\u4EE5 Java Agent \u7684\u65B9\u5F0F\u542F\u52A8","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/agent.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-37178538","path":"/doc/agent.html","title":"\u4EE5 Java Agent \u7684\u65B9\u5F0F\u542F\u52A8","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/agent.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/agent.html.b37100a4.js b/assets/agent.html.d7974fce.js similarity index 72% rename from assets/agent.html.b37100a4.js rename to assets/agent.html.d7974fce.js index cfea525a2..5788a92a3 100644 --- a/assets/agent.html.b37100a4.js +++ b/assets/agent.html.d7974fce.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-f6b5c310","path":"/en/doc/agent.html","title":"Start as a Java Agent","lang":"en-US","frontmatter":{},"excerpt":"","headers":[],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/agent.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-f6b5c310","path":"/en/doc/agent.html","title":"Start as a Java Agent","lang":"en-US","frontmatter":{},"excerpt":"","headers":[],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/agent.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/agent.html.c6c0324b.js b/assets/agent.html.d870df79.js similarity index 95% rename from assets/agent.html.c6c0324b.js rename to assets/agent.html.d870df79.js index 50a254ee1..dceb248ea 100644 --- a/assets/agent.html.c6c0324b.js +++ b/assets/agent.html.d870df79.js @@ -1,2 +1,2 @@ -import{_ as s,o as r,c as n,a as e,b as o,w as c,d as i,e as a,r as d}from"./app.524ecf5c.js";const l={},h=i(`

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
+import{_ as s,o as r,c as n,a as e,b as o,w as c,d as i,e as a,r as d}from"./app.e2427bec.js";const l={},h=i(`

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
 
`,4),p=a("The default configuration is in the "),m=e("code",null,"arthas.properties",-1),_=a(" file in the decompression directory. Reference: "),u=a("Arthas Properties"),g=e("p",null,"Reference: https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html",-1);function v(f,j){const t=d("RouterLink");return r(),n("div",null,[h,e("p",null,[p,m,_,o(t,{to:"/en/doc/arthas-properties.html"},{default:c(()=>[u]),_:1})]),g])}const y=s(l,[["render",v],["__file","agent.html.vue"]]);export{y as default}; diff --git a/assets/ai.html.b2d958f1.js b/assets/ai.html.0d965d9d.js similarity index 74% rename from assets/ai.html.b2d958f1.js rename to assets/ai.html.0d965d9d.js index 06ea3d562..a520268bb 100644 --- a/assets/ai.html.b2d958f1.js +++ b/assets/ai.html.0d965d9d.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-7a0f16ad","path":"/en/doc/ai.html","title":"AI Integration","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"MCP Server","slug":"mcp-server","link":"#mcp-server","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/ai.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-7a0f16ad","path":"/en/doc/ai.html","title":"AI Integration","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"MCP Server","slug":"mcp-server","link":"#mcp-server","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/ai.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/ai.html.eea262b3.js b/assets/ai.html.4fc4211a.js similarity index 94% rename from assets/ai.html.eea262b3.js rename to assets/ai.html.4fc4211a.js index 52fc93be3..c36bb2444 100644 --- a/assets/ai.html.eea262b3.js +++ b/assets/ai.html.4fc4211a.js @@ -1 +1 @@ -import{_ as r,o as s,c as o,a as e,b as n,w as c,e as t,r as i}from"./app.524ecf5c.js";const _={},d=e("h1",{id:"ai-\u76F8\u5173",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#ai-\u76F8\u5173","aria-hidden":"true"},"#"),t(" AI \u76F8\u5173")],-1),h=e("p",null,"Arthas \u53EF\u4EE5\u901A\u8FC7 MCP Server \u63A5\u5165 AI \u52A9\u624B\uFF0C\u8BA9 AI \u5BA2\u6237\u7AEF\u4EE5\u5DE5\u5177\u8C03\u7528\u7684\u65B9\u5F0F\u6267\u884C Arthas \u8BCA\u65AD\u547D\u4EE4\uFF0C\u9002\u5408\u7ED3\u5408 Java \u5E94\u7528\u6392\u969C\u3001\u8FD0\u884C\u65F6\u5206\u6790\u548C\u81EA\u52A8\u5316\u8BCA\u65AD\u573A\u666F\u4F7F\u7528\u3002",-1),l=e("h2",{id:"mcp-server",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#mcp-server","aria-hidden":"true"},"#"),t(" MCP Server")],-1),u=t("Arthas MCP Server"),m=t("\uFF1A\u4E86\u89E3\u5982\u4F55\u542F\u7528 MCP \u670D\u52A1\u3001\u914D\u7F6E AI \u5BA2\u6237\u7AEF\u3001\u4F7F\u7528 Streamable HTTP \u4F20\u8F93\u6A21\u5F0F\u4EE5\u53CA\u67E5\u770B\u652F\u6301\u7684\u8BCA\u65AD\u5DE5\u5177\u3002");function f(p,v){const a=i("RouterLink");return s(),o("div",null,[d,h,l,e("ul",null,[e("li",null,[n(a,{to:"/doc/mcp-server.html"},{default:c(()=>[u]),_:1}),m])])])}const A=r(_,[["render",f],["__file","ai.html.vue"]]);export{A as default}; +import{_ as r,o as s,c as o,a as e,b as n,w as c,e as t,r as i}from"./app.e2427bec.js";const _={},d=e("h1",{id:"ai-\u76F8\u5173",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#ai-\u76F8\u5173","aria-hidden":"true"},"#"),t(" AI \u76F8\u5173")],-1),h=e("p",null,"Arthas \u53EF\u4EE5\u901A\u8FC7 MCP Server \u63A5\u5165 AI \u52A9\u624B\uFF0C\u8BA9 AI \u5BA2\u6237\u7AEF\u4EE5\u5DE5\u5177\u8C03\u7528\u7684\u65B9\u5F0F\u6267\u884C Arthas \u8BCA\u65AD\u547D\u4EE4\uFF0C\u9002\u5408\u7ED3\u5408 Java \u5E94\u7528\u6392\u969C\u3001\u8FD0\u884C\u65F6\u5206\u6790\u548C\u81EA\u52A8\u5316\u8BCA\u65AD\u573A\u666F\u4F7F\u7528\u3002",-1),l=e("h2",{id:"mcp-server",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#mcp-server","aria-hidden":"true"},"#"),t(" MCP Server")],-1),u=t("Arthas MCP Server"),m=t("\uFF1A\u4E86\u89E3\u5982\u4F55\u542F\u7528 MCP \u670D\u52A1\u3001\u914D\u7F6E AI \u5BA2\u6237\u7AEF\u3001\u4F7F\u7528 Streamable HTTP \u4F20\u8F93\u6A21\u5F0F\u4EE5\u53CA\u67E5\u770B\u652F\u6301\u7684\u8BCA\u65AD\u5DE5\u5177\u3002");function f(p,v){const a=i("RouterLink");return s(),o("div",null,[d,h,l,e("ul",null,[e("li",null,[n(a,{to:"/doc/mcp-server.html"},{default:c(()=>[u]),_:1}),m])])])}const A=r(_,[["render",f],["__file","ai.html.vue"]]);export{A as default}; diff --git a/assets/ai.html.a6d2ae52.js b/assets/ai.html.530e41ed.js similarity index 75% rename from assets/ai.html.a6d2ae52.js rename to assets/ai.html.530e41ed.js index fd40b3758..f13c6f36c 100644 --- a/assets/ai.html.a6d2ae52.js +++ b/assets/ai.html.530e41ed.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-71d23f41","path":"/doc/ai.html","title":"AI \u76F8\u5173","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"MCP Server","slug":"mcp-server","link":"#mcp-server","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/ai.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-71d23f41","path":"/doc/ai.html","title":"AI \u76F8\u5173","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"MCP Server","slug":"mcp-server","link":"#mcp-server","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/ai.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/ai.html.77daefd0.js b/assets/ai.html.76467e93.js similarity index 93% rename from assets/ai.html.77daefd0.js rename to assets/ai.html.76467e93.js index 4e9d10ca4..3d51ce77a 100644 --- a/assets/ai.html.77daefd0.js +++ b/assets/ai.html.76467e93.js @@ -1 +1 @@ -import{_ as s,o,c as n,a as e,b as r,w as i,e as t,r as c}from"./app.524ecf5c.js";const l={},d=e("h1",{id:"ai-integration",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#ai-integration","aria-hidden":"true"},"#"),t(" AI Integration")],-1),h=e("p",null,"Arthas can integrate with AI assistants through MCP Server, allowing AI clients to execute Arthas diagnostic commands as tool calls. This is useful for Java troubleshooting, runtime analysis, and automated diagnostics.",-1),_=e("h2",{id:"mcp-server",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#mcp-server","aria-hidden":"true"},"#"),t(" MCP Server")],-1),u=t("Arthas MCP Server"),m=t(": Learn how to enable the MCP service, configure AI clients, use Streamable HTTP transport, and view supported diagnostic tools.");function f(p,v){const a=c("RouterLink");return o(),n("div",null,[d,h,_,e("ul",null,[e("li",null,[r(a,{to:"/en/doc/mcp-server.html"},{default:i(()=>[u]),_:1}),m])])])}const x=s(l,[["render",f],["__file","ai.html.vue"]]);export{x as default}; +import{_ as s,o,c as n,a as e,b as r,w as i,e as t,r as c}from"./app.e2427bec.js";const l={},d=e("h1",{id:"ai-integration",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#ai-integration","aria-hidden":"true"},"#"),t(" AI Integration")],-1),h=e("p",null,"Arthas can integrate with AI assistants through MCP Server, allowing AI clients to execute Arthas diagnostic commands as tool calls. This is useful for Java troubleshooting, runtime analysis, and automated diagnostics.",-1),_=e("h2",{id:"mcp-server",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#mcp-server","aria-hidden":"true"},"#"),t(" MCP Server")],-1),u=t("Arthas MCP Server"),m=t(": Learn how to enable the MCP service, configure AI clients, use Streamable HTTP transport, and view supported diagnostic tools.");function f(p,v){const a=c("RouterLink");return o(),n("div",null,[d,h,_,e("ul",null,[e("li",null,[r(a,{to:"/en/doc/mcp-server.html"},{default:i(()=>[u]),_:1}),m])])])}const x=s(l,[["render",f],["__file","ai.html.vue"]]);export{x as default}; diff --git a/assets/app.524ecf5c.js b/assets/app.e2427bec.js similarity index 62% rename from assets/app.524ecf5c.js rename to assets/app.e2427bec.js index ad3bac236..1765e2f15 100644 --- a/assets/app.524ecf5c.js +++ b/assets/app.e2427bec.js @@ -1,13 +1,13 @@ -const Pm="modulepreload",Sm=function(e){return"/"+e},Ai={},h=function(t,n,o){return!n||n.length===0?t():Promise.all(n.map(r=>{if(r=Sm(r),r in Ai)return;Ai[r]=!0;const a=r.endsWith(".css"),i=a?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${r}"]${i}`))return;const c=document.createElement("link");if(c.rel=a?"stylesheet":Pm,a||(c.as="script",c.crossOrigin=""),c.href=r,document.head.appendChild(c),a)return new Promise((s,l)=>{c.addEventListener("load",s),c.addEventListener("error",()=>l(new Error(`Unable to preload CSS for ${r}`)))})})).then(()=>t())},Am={"v-8daa1a0e":()=>h(()=>import("./index.html.ed9ed3a9.js"),[]).then(({data:e})=>e),"v-2d0a870d":()=>h(()=>import("./index.html.7ce27c03.js"),[]).then(({data:e})=>e),"v-7445f070":()=>h(()=>import("./index.html.7f2e8ca4.js"),[]).then(({data:e})=>e),"v-0d09f68d":()=>h(()=>import("./advanced-use.html.899d36c2.js"),[]).then(({data:e})=>e),"v-46e53834":()=>h(()=>import("./advice-class.html.1fb022df.js"),[]).then(({data:e})=>e),"v-37178538":()=>h(()=>import("./agent.html.80af310f.js"),[]).then(({data:e})=>e),"v-71d23f41":()=>h(()=>import("./ai.html.a6d2ae52.js"),[]).then(({data:e})=>e),"v-5c517900":()=>h(()=>import("./arthas-properties.html.898cc171.js"),[]).then(({data:e})=>e),"v-02eb6d0d":()=>h(()=>import("./arthas3.html.316cb2e0.js"),[]).then(({data:e})=>e),"v-4f82df66":()=>h(()=>import("./async.html.332dfef1.js"),[]).then(({data:e})=>e),"v-d0358c7e":()=>h(()=>import("./auth.html.e8af6dce.js"),[]).then(({data:e})=>e),"v-3157067a":()=>h(()=>import("./base64.html.afb50617.js"),[]).then(({data:e})=>e),"v-cc8f4ae6":()=>h(()=>import("./batch-support.html.67f90179.js"),[]).then(({data:e})=>e),"v-6542b733":()=>h(()=>import("./cat.html.3a5d25c6.js"),[]).then(({data:e})=>e),"v-d6087b6c":()=>h(()=>import("./classloader-metaspace.html.7b8a7fb0.js"),[]).then(({data:e})=>e),"v-49b1709e":()=>h(()=>import("./classloader.html.f7c01982.js"),[]).then(({data:e})=>e),"v-ad1b2b42":()=>h(()=>import("./cls.html.c9aa0c61.js"),[]).then(({data:e})=>e),"v-5ed4d0e1":()=>h(()=>import("./commands.html.85ad84a0.js"),[]).then(({data:e})=>e),"v-3992adde":()=>h(()=>import("./contact-us.html.e7c63609.js"),[]).then(({data:e})=>e),"v-0d1e3f35":()=>h(()=>import("./dashboard.html.61a4e15d.js"),[]).then(({data:e})=>e),"v-02361049":()=>h(()=>import("./docker.html.17377288.js"),[]).then(({data:e})=>e),"v-2116d2e1":()=>h(()=>import("./download.html.9f397283.js"),[]).then(({data:e})=>e),"v-1fe4a616":()=>h(()=>import("./dump.html.c3f8bd1c.js"),[]).then(({data:e})=>e),"v-2c48f364":()=>h(()=>import("./echo.html.e5a5e66b.js"),[]).then(({data:e})=>e),"v-6a3a70c0":()=>h(()=>import("./external-command.html.4a91a1bc.js"),[]).then(({data:e})=>e),"v-d070981a":()=>h(()=>import("./faq.html.44fb2f53.js"),[]).then(({data:e})=>e),"v-78c35af6":()=>h(()=>import("./getstatic.html.a9eaa5e6.js"),[]).then(({data:e})=>e),"v-63f4cd5a":()=>h(()=>import("./grep.html.577df941.js"),[]).then(({data:e})=>e),"v-809381ca":()=>h(()=>import("./groovy.html.1c2baf9b.js"),[]).then(({data:e})=>e),"v-07868089":()=>h(()=>import("./heapdump.html.22c951fc.js"),[]).then(({data:e})=>e),"v-e3b34070":()=>h(()=>import("./help.html.fcbdb8fe.js"),[]).then(({data:e})=>e),"v-26f43d96":()=>h(()=>import("./history.html.aed5546b.js"),[]).then(({data:e})=>e),"v-225de034":()=>h(()=>import("./http-api.html.78a51f51.js"),[]).then(({data:e})=>e),"v-7c670020":()=>h(()=>import("./idea-plugin.html.b12bba00.js"),[]).then(({data:e})=>e),"v-0cb398f4":()=>h(()=>import("./install-detail.html.c1229dbb.js"),[]).then(({data:e})=>e),"v-211d675c":()=>h(()=>import("./jad.html.403e568d.js"),[]).then(({data:e})=>e),"v-41806853":()=>h(()=>import("./jfr.html.35e0ac56.js"),[]).then(({data:e})=>e),"v-f1483d70":()=>h(()=>import("./jvm.html.432f6c94.js"),[]).then(({data:e})=>e),"v-4039cdec":()=>h(()=>import("./keymap.html.32f701a7.js"),[]).then(({data:e})=>e),"v-54781216":()=>h(()=>import("./line.html.d873e96f.js"),[]).then(({data:e})=>e),"v-5ae8aed9":()=>h(()=>import("./logger.html.52980a8c.js"),[]).then(({data:e})=>e),"v-6a31cc55":()=>h(()=>import("./manual-install.html.73a696a2.js"),[]).then(({data:e})=>e),"v-8ebd6c68":()=>h(()=>import("./mbean.html.95b86909.js"),[]).then(({data:e})=>e),"v-3b401ada":()=>h(()=>import("./mc.html.2bb09391.js"),[]).then(({data:e})=>e),"v-67bc6553":()=>h(()=>import("./mcp-server.html.f0f4ef7d.js"),[]).then(({data:e})=>e),"v-4d9433f0":()=>h(()=>import("./memory.html.7f3cbe90.js"),[]).then(({data:e})=>e),"v-6e88d7a2":()=>h(()=>import("./monitor.html.aa324b7d.js"),[]).then(({data:e})=>e),"v-627e52da":()=>h(()=>import("./ognl.html.ab98468a.js"),[]).then(({data:e})=>e),"v-27b6152a":()=>h(()=>import("./options.html.ec66483d.js"),[]).then(({data:e})=>e),"v-2f05b636":()=>h(()=>import("./perfcounter.html.245a5ce5.js"),[]).then(({data:e})=>e),"v-13eae420":()=>h(()=>import("./profiler.html.f515f668.js"),[]).then(({data:e})=>e),"v-1c2d8c2c":()=>h(()=>import("./pwd.html.48cbf02c.js"),[]).then(({data:e})=>e),"v-5afc3a07":()=>h(()=>import("./quick-start.html.c6104c27.js"),[]).then(({data:e})=>e),"v-aa7c750c":()=>h(()=>import("./quit.html.df8a6408.js"),[]).then(({data:e})=>e),"v-0446ad7b":()=>h(()=>import("./redefine.html.30ef7ca4.js"),[]).then(({data:e})=>e),"v-648880ae":()=>h(()=>import("./release-notes.html.14a11eb1.js"),[]).then(({data:e})=>e),"v-71f77d4c":()=>h(()=>import("./reset.html.d05a2660.js"),[]).then(({data:e})=>e),"v-54cde250":()=>h(()=>import("./retransform.html.f32cdadb.js"),[]).then(({data:e})=>e),"v-8e632816":()=>h(()=>import("./save-log.html.d56e7726.js"),[]).then(({data:e})=>e),"v-1fc55619":()=>h(()=>import("./sc.html.27f757b3.js"),[]).then(({data:e})=>e),"v-3891b473":()=>h(()=>import("./session.html.a2ad9e80.js"),[]).then(({data:e})=>e),"v-30d5cc4f":()=>h(()=>import("./sm.html.ddce8266.js"),[]).then(({data:e})=>e),"v-07cf9d55":()=>h(()=>import("./spring-boot-starter.html.17c047b1.js"),[]).then(({data:e})=>e),"v-b75a107e":()=>h(()=>import("./stack.html.9612a18d.js"),[]).then(({data:e})=>e),"v-a9c412f2":()=>h(()=>import("./start-arthas.html.13fc8e7c.js"),[]).then(({data:e})=>e),"v-bc0910b2":()=>h(()=>import("./stop.html.92337bb0.js"),[]).then(({data:e})=>e),"v-0333612e":()=>h(()=>import("./sysenv.html.f5be624d.js"),[]).then(({data:e})=>e),"v-7012b8ce":()=>h(()=>import("./sysprop.html.83009099.js"),[]).then(({data:e})=>e),"v-0536edb5":()=>h(()=>import("./tee.html.1fd68c76.js"),[]).then(({data:e})=>e),"v-10845ac2":()=>h(()=>import("./thread.html.1d083244.js"),[]).then(({data:e})=>e),"v-65d67724":()=>h(()=>import("./trace.html.1fba9aaf.js"),[]).then(({data:e})=>e),"v-71adf3e9":()=>h(()=>import("./tt.html.06ba156a.js"),[]).then(({data:e})=>e),"v-d2ddc9fe":()=>h(()=>import("./tunnel.html.3a583b73.js"),[]).then(({data:e})=>e),"v-5b5d3371":()=>h(()=>import("./version.html.5f312c99.js"),[]).then(({data:e})=>e),"v-40db67fd":()=>h(()=>import("./vmoption.html.f7b6a945.js"),[]).then(({data:e})=>e),"v-10890efa":()=>h(()=>import("./vmtool.html.a7d95339.js"),[]).then(({data:e})=>e),"v-24fc49da":()=>h(()=>import("./watch.html.ebf01288.js"),[]).then(({data:e})=>e),"v-a5f6e7aa":()=>h(()=>import("./web-console.html.553210f1.js"),[]).then(({data:e})=>e),"v-07555a84":()=>h(()=>import("./index.html.8cbf0aa1.js"),[]).then(({data:e})=>e),"v-463d120e":()=>h(()=>import("./advanced-use.html.59632b6f.js"),[]).then(({data:e})=>e),"v-a736375c":()=>h(()=>import("./advice-class.html.9482e515.js"),[]).then(({data:e})=>e),"v-f6b5c310":()=>h(()=>import("./agent.html.b37100a4.js"),[]).then(({data:e})=>e),"v-7a0f16ad":()=>h(()=>import("./ai.html.b2d958f1.js"),[]).then(({data:e})=>e),"v-74fb2694":()=>h(()=>import("./arthas-properties.html.d7076c7d.js"),[]).then(({data:e})=>e),"v-786f7161":()=>h(()=>import("./async.html.51567fc5.js"),[]).then(({data:e})=>e),"v-f76c33a6":()=>h(()=>import("./auth.html.dc89b429.js"),[]).then(({data:e})=>e),"v-d17b7034":()=>h(()=>import("./base64.html.750bcc95.js"),[]).then(({data:e})=>e),"v-765e30be":()=>h(()=>import("./batch-support.html.c65a5a76.js"),[]).then(({data:e})=>e),"v-64a0cd47":()=>h(()=>import("./cat.html.18f65deb.js"),[]).then(({data:e})=>e),"v-6e8ffb5e":()=>h(()=>import("./classloader-metaspace.html.2c85daa1.js"),[]).then(({data:e})=>e),"v-fc1b9a9c":()=>h(()=>import("./classloader.html.af884720.js"),[]).then(({data:e})=>e),"v-ae5eff1a":()=>h(()=>import("./cls.html.fe97eb01.js"),[]).then(({data:e})=>e),"v-12153166":()=>h(()=>import("./commands.html.610808a3.js"),[]).then(({data:e})=>e),"v-4be7594a":()=>h(()=>import("./contact-us.html.3dfc329b.js"),[]).then(({data:e})=>e),"v-79107649":()=>h(()=>import("./dashboard.html.14eaa588.js"),[]).then(({data:e})=>e),"v-682151b5":()=>h(()=>import("./docker.html.a1aa4dd5.js"),[]).then(({data:e})=>e),"v-8d912d66":()=>h(()=>import("./download.html.1194e616.js"),[]).then(({data:e})=>e),"v-471b4d3e":()=>h(()=>import("./dump.html.d49fa0fb.js"),[]).then(({data:e})=>e),"v-18ad9fd0":()=>h(()=>import("./echo.html.54dceeee.js"),[]).then(({data:e})=>e),"v-ef7849a8":()=>h(()=>import("./external-command.html.669250f4.js"),[]).then(({data:e})=>e),"v-d1b46bf2":()=>h(()=>import("./faq.html.92bd353a.js"),[]).then(({data:e})=>e),"v-2f908999":()=>h(()=>import("./getstatic.html.07f2529e.js"),[]).then(({data:e})=>e),"v-8b2b7482":()=>h(()=>import("./grep.html.7b4c2cd4.js"),[]).then(({data:e})=>e),"v-25a18087":()=>h(()=>import("./groovy.html.bf8a6589.js"),[]).then(({data:e})=>e),"v-c0b1d216":()=>h(()=>import("./heapdump.html.986bb645.js"),[]).then(({data:e})=>e),"v-7a8b0c34":()=>h(()=>import("./help.html.2db31f67.js"),[]).then(({data:e})=>e),"v-4402cd49":()=>h(()=>import("./history.html.0118eb18.js"),[]).then(({data:e})=>e),"v-8b0312c0":()=>h(()=>import("./http-api.html.0b120e8b.js"),[]).then(({data:e})=>e),"v-96b07b98":()=>h(()=>import("./idea-plugin.html.c59405cc.js"),[]).then(({data:e})=>e),"v-319f48f2":()=>h(()=>import("./install-detail.html.624d7b63.js"),[]).then(({data:e})=>e),"v-207b7d70":()=>h(()=>import("./jad.html.acef5a50.js"),[]).then(({data:e})=>e),"v-40de7e67":()=>h(()=>import("./jfr.html.7ec12793.js"),[]).then(({data:e})=>e),"v-f28c1148":()=>h(()=>import("./jvm.html.24d408b0.js"),[]).then(({data:e})=>e),"v-b3b5e150":()=>h(()=>import("./keymap.html.bda8b228.js"),[]).then(({data:e})=>e),"v-7baeb93e":()=>h(()=>import("./line.html.e9882513.js"),[]).then(({data:e})=>e),"v-7e581f76":()=>h(()=>import("./logger.html.274394d2.js"),[]).then(({data:e})=>e),"v-bbaa3c7e":()=>h(()=>import("./manual-install.html.0d9682ca.js"),[]).then(({data:e})=>e),"v-58d22ae0":()=>h(()=>import("./mbean.html.8a3771f2.js"),[]).then(({data:e})=>e),"v-2ac66c02":()=>h(()=>import("./mc.html.96f7758d.js"),[]).then(({data:e})=>e),"v-7a1110bf":()=>h(()=>import("./mcp-server.html.2548e7c2.js"),[]).then(({data:e})=>e),"v-3f212774":()=>h(()=>import("./memory.html.290d23a6.js"),[]).then(({data:e})=>e),"v-20388043":()=>h(()=>import("./monitor.html.fff63a76.js"),[]).then(({data:e})=>e),"v-89b4fa02":()=>h(()=>import("./ognl.html.bd362a1e.js"),[]).then(({data:e})=>e),"v-43a1e17f":()=>h(()=>import("./options.html.3ab55601.js"),[]).then(({data:e})=>e),"v-6746784a":()=>h(()=>import("./perfcounter.html.cbce5e22.js"),[]).then(({data:e})=>e),"v-a7e90ae8":()=>h(()=>import("./profiler.html.e7fb718f.js"),[]).then(({data:e})=>e),"v-1b8ba240":()=>h(()=>import("./pwd.html.b52402a6.js"),[]).then(({data:e})=>e),"v-d98607ca":()=>h(()=>import("./quick-start.html.bca18fad.js"),[]).then(({data:e})=>e),"v-d1b31c34":()=>h(()=>import("./quit.html.2267f888.js"),[]).then(({data:e})=>e),"v-c7317832":()=>h(()=>import("./redefine.html.8eaa7cae.js"),[]).then(({data:e})=>e),"v-e0bde47c":()=>h(()=>import("./release-notes.html.5fb5ffc5.js"),[]).then(({data:e})=>e),"v-6735226e":()=>h(()=>import("./reset.html.2e9fc05c.js"),[]).then(({data:e})=>e),"v-e5e2b738":()=>h(()=>import("./retransform.html.92f08601.js"),[]).then(({data:e})=>e),"v-50ef0261":()=>h(()=>import("./save-log.html.dcea4094.js"),[]).then(({data:e})=>e),"v-28022d85":()=>h(()=>import("./sc.html.bdfbd20c.js"),[]).then(({data:e})=>e),"v-dfe2bef2":()=>h(()=>import("./session.html.01d5cdb0.js"),[]).then(({data:e})=>e),"v-3912a3bb":()=>h(()=>import("./sm.html.599ec454.js"),[]).then(({data:e})=>e),"v-71870b69":()=>h(()=>import("./spring-boot-starter.html.90204de4.js"),[]).then(({data:e})=>e),"v-4483d8d5":()=>h(()=>import("./stack.html.a0d22cd5.js"),[]).then(({data:e})=>e),"v-7af576f3":()=>h(()=>import("./start-arthas.html.14fd95da.js"),[]).then(({data:e})=>e),"v-e33fb7da":()=>h(()=>import("./stop.html.7682683c.js"),[]).then(({data:e})=>e),"v-645190d5":()=>h(()=>import("./sysenv.html.416666a5.js"),[]).then(({data:e})=>e),"v-1f738fad":()=>h(()=>import("./sysprop.html.8ac285ec.js"),[]).then(({data:e})=>e),"v-049503c9":()=>h(()=>import("./tee.html.ffedf5a9.js"),[]).then(({data:e})=>e),"v-5da9140b":()=>h(()=>import("./thread.html.0170c85f.js"),[]).then(({data:e})=>e),"v-06075838":()=>h(()=>import("./trace.html.89cc6cb1.js"),[]).then(({data:e})=>e),"v-79eacb55":()=>h(()=>import("./tt.html.e26b44fd.js"),[]).then(({data:e})=>e),"v-07074726":()=>h(()=>import("./tunnel.html.634d8c45.js"),[]).then(({data:e})=>e),"v-9a4bc0f6":()=>h(()=>import("./version.html.5bd75c3c.js"),[]).then(({data:e})=>e),"v-4e08032e":()=>h(()=>import("./vmoption.html.1f830c74.js"),[]).then(({data:e})=>e),"v-76745066":()=>h(()=>import("./vmtool.html.7c48ec6d.js"),[]).then(({data:e})=>e),"v-75a5aa24":()=>h(()=>import("./watch.html.ae8c575e.js"),[]).then(({data:e})=>e),"v-35756382":()=>h(()=>import("./web-console.html.db278269.js"),[]).then(({data:e})=>e),"v-3706649a":()=>h(()=>import("./404.html.532e346d.js"),[]).then(({data:e})=>e)};function Va(e,t){const n=Object.create(null),o=e.split(",");for(let r=0;r!!n[r.toLowerCase()]:r=>!!n[r]}const Tm="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Im=Va(Tm);function el(e){return!!e||e===""}function Eo(e){if(ce(e)){const t={};for(let n=0;n{if(n){const o=n.split(Dm);o.length>1&&(t[o[0].trim()]=o[1].trim())}}),t}function Be(e){let t="";if(De(e))t=e;else if(ce(e))for(let n=0;nDe(e)?e:e==null?"":ce(e)||Ve(e)&&(e.toString===rl||!he(e.toString))?JSON.stringify(e,tl,2):String(e),tl=(e,t)=>t&&t.__v_isRef?tl(e,t.value):Ln(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[o,r])=>(n[`${o} =>`]=r,n),{})}:nl(t)?{[`Set(${t.size})`]:[...t.values()]}:Ve(t)&&!ce(t)&&!al(t)?String(t):t,Me={},In=[],_t=()=>{},km=()=>!1,xm=/^on[^a-z]/,wo=e=>xm.test(e),Na=e=>e.startsWith("onUpdate:"),Ye=Object.assign,Fa=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Cm=Object.prototype.hasOwnProperty,ye=(e,t)=>Cm.call(e,t),ce=Array.isArray,Ln=e=>Pr(e)==="[object Map]",nl=e=>Pr(e)==="[object Set]",he=e=>typeof e=="function",De=e=>typeof e=="string",Ba=e=>typeof e=="symbol",Ve=e=>e!==null&&typeof e=="object",ol=e=>Ve(e)&&he(e.then)&&he(e.catch),rl=Object.prototype.toString,Pr=e=>rl.call(e),Mm=e=>Pr(e).slice(8,-1),al=e=>Pr(e)==="[object Object]",za=e=>De(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,to=Va(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Sr=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},$m=/-(\w)/g,It=Sr(e=>e.replace($m,(t,n)=>n?n.toUpperCase():"")),jm=/\B([A-Z])/g,_n=Sr(e=>e.replace(jm,"-$1").toLowerCase()),Ar=Sr(e=>e.charAt(0).toUpperCase()+e.slice(1)),Nr=Sr(e=>e?`on${Ar(e)}`:""),lo=(e,t)=>!Object.is(e,t),Yo=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},or=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Ti;const Hm=()=>Ti||(Ti=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});let at;class qm{constructor(t=!1){this.active=!0,this.effects=[],this.cleanups=[],!t&&at&&(this.parent=at,this.index=(at.scopes||(at.scopes=[])).push(this)-1)}run(t){if(this.active){const n=at;try{return at=this,t()}finally{at=n}}}on(){at=this}off(){at=this.parent}stop(t){if(this.active){let n,o;for(n=0,o=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},il=e=>(e.w&Qt)>0,cl=e=>(e.n&Qt)>0,Bm=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let o=0;o{(l==="length"||l>=o)&&c.push(s)});else switch(n!==void 0&&c.push(i.get(n)),t){case"add":ce(e)?za(n)&&c.push(i.get("length")):(c.push(i.get(fn)),Ln(e)&&c.push(i.get(ua)));break;case"delete":ce(e)||(c.push(i.get(fn)),Ln(e)&&c.push(i.get(ua)));break;case"set":Ln(e)&&c.push(i.get(fn));break}if(c.length===1)c[0]&&ma(c[0]);else{const s=[];for(const l of c)l&&s.push(...l);ma(Ua(s))}}function ma(e,t){const n=ce(e)?e:[...e];for(const o of n)o.computed&&Li(o);for(const o of n)o.computed||Li(o)}function Li(e,t){(e!==ht||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const Um=Va("__proto__,__v_isRef,__isVue"),ul=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Ba)),Wm=Ka(),Km=Ka(!1,!0),Ym=Ka(!0),Di=Jm();function Jm(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const o=Oe(this);for(let a=0,i=this.length;a{e[t]=function(...n){qn();const o=Oe(this)[t].apply(this,n);return Vn(),o}}),e}function Ka(e=!1,t=!1){return function(o,r,a){if(r==="__v_isReactive")return!e;if(r==="__v_isReadonly")return e;if(r==="__v_isShallow")return t;if(r==="__v_raw"&&a===(e?t?md:pl:t?hl:fl).get(o))return o;const i=ce(o);if(!e&&i&&ye(Di,r))return Reflect.get(Di,r,a);const c=Reflect.get(o,r,a);return(Ba(r)?ul.has(r):Um(r))||(e||ct(o,"get",r),t)?c:Ke(c)?i&&za(r)?c:c.value:Ve(c)?e?Qa(c):Nn(c):c}}const Qm=ml(),Gm=ml(!0);function ml(e=!1){return function(n,o,r,a){let i=n[o];if(Cn(i)&&Ke(i)&&!Ke(r))return!1;if(!e&&(!rr(r)&&!Cn(r)&&(i=Oe(i),r=Oe(r)),!ce(n)&&Ke(i)&&!Ke(r)))return i.value=r,!0;const c=ce(n)&&za(o)?Number(o)e,Tr=e=>Reflect.getPrototypeOf(e);function Do(e,t,n=!1,o=!1){e=e.__v_raw;const r=Oe(e),a=Oe(t);n||(t!==a&&ct(r,"get",t),ct(r,"get",a));const{has:i}=Tr(r),c=o?Ya:n?Za:uo;if(i.call(r,t))return c(e.get(t));if(i.call(r,a))return c(e.get(a));e!==r&&e.get(t)}function Ro(e,t=!1){const n=this.__v_raw,o=Oe(n),r=Oe(e);return t||(e!==r&&ct(o,"has",e),ct(o,"has",r)),e===r?n.has(e):n.has(e)||n.has(r)}function ko(e,t=!1){return e=e.__v_raw,!t&&ct(Oe(e),"iterate",fn),Reflect.get(e,"size",e)}function Ri(e){e=Oe(e);const t=Oe(this);return Tr(t).has.call(t,e)||(t.add(e),qt(t,"add",e,e)),this}function ki(e,t){t=Oe(t);const n=Oe(this),{has:o,get:r}=Tr(n);let a=o.call(n,e);a||(e=Oe(e),a=o.call(n,e));const i=r.call(n,e);return n.set(e,t),a?lo(t,i)&&qt(n,"set",e,t):qt(n,"add",e,t),this}function xi(e){const t=Oe(this),{has:n,get:o}=Tr(t);let r=n.call(t,e);r||(e=Oe(e),r=n.call(t,e)),o&&o.call(t,e);const a=t.delete(e);return r&&qt(t,"delete",e,void 0),a}function Ci(){const e=Oe(this),t=e.size!==0,n=e.clear();return t&&qt(e,"clear",void 0,void 0),n}function xo(e,t){return function(o,r){const a=this,i=a.__v_raw,c=Oe(i),s=t?Ya:e?Za:uo;return!e&&ct(c,"iterate",fn),i.forEach((l,u)=>o.call(r,s(l),s(u),a))}}function Co(e,t,n){return function(...o){const r=this.__v_raw,a=Oe(r),i=Ln(a),c=e==="entries"||e===Symbol.iterator&&i,s=e==="keys"&&i,l=r[e](...o),u=n?Ya:t?Za:uo;return!t&&ct(a,"iterate",s?ua:fn),{next(){const{value:m,done:d}=l.next();return d?{value:m,done:d}:{value:c?[u(m[0]),u(m[1])]:u(m),done:d}},[Symbol.iterator](){return this}}}}function Nt(e){return function(...t){return e==="delete"?!1:this}}function od(){const e={get(a){return Do(this,a)},get size(){return ko(this)},has:Ro,add:Ri,set:ki,delete:xi,clear:Ci,forEach:xo(!1,!1)},t={get(a){return Do(this,a,!1,!0)},get size(){return ko(this)},has:Ro,add:Ri,set:ki,delete:xi,clear:Ci,forEach:xo(!1,!0)},n={get(a){return Do(this,a,!0)},get size(){return ko(this,!0)},has(a){return Ro.call(this,a,!0)},add:Nt("add"),set:Nt("set"),delete:Nt("delete"),clear:Nt("clear"),forEach:xo(!0,!1)},o={get(a){return Do(this,a,!0,!0)},get size(){return ko(this,!0)},has(a){return Ro.call(this,a,!0)},add:Nt("add"),set:Nt("set"),delete:Nt("delete"),clear:Nt("clear"),forEach:xo(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(a=>{e[a]=Co(a,!1,!1),n[a]=Co(a,!0,!1),t[a]=Co(a,!1,!0),o[a]=Co(a,!0,!0)}),[e,n,t,o]}const[rd,ad,id,cd]=od();function Ja(e,t){const n=t?e?cd:id:e?ad:rd;return(o,r,a)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?o:Reflect.get(ye(n,r)&&r in o?n:o,r,a)}const sd={get:Ja(!1,!1)},ld={get:Ja(!1,!0)},ud={get:Ja(!0,!1)},fl=new WeakMap,hl=new WeakMap,pl=new WeakMap,md=new WeakMap;function dd(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function fd(e){return e.__v_skip||!Object.isExtensible(e)?0:dd(Mm(e))}function Nn(e){return Cn(e)?e:Ga(e,!1,dl,sd,fl)}function hd(e){return Ga(e,!1,nd,ld,hl)}function Qa(e){return Ga(e,!0,td,ud,pl)}function Ga(e,t,n,o,r){if(!Ve(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const a=r.get(e);if(a)return a;const i=fd(e);if(i===0)return e;const c=new Proxy(e,i===2?o:n);return r.set(e,c),c}function Dn(e){return Cn(e)?Dn(e.__v_raw):!!(e&&e.__v_isReactive)}function Cn(e){return!!(e&&e.__v_isReadonly)}function rr(e){return!!(e&&e.__v_isShallow)}function _l(e){return Dn(e)||Cn(e)}function Oe(e){const t=e&&e.__v_raw;return t?Oe(t):e}function vl(e){return nr(e,"__v_skip",!0),e}const uo=e=>Ve(e)?Nn(e):e,Za=e=>Ve(e)?Qa(e):e;function gl(e){Yt&&ht&&(e=Oe(e),ll(e.dep||(e.dep=Ua())))}function bl(e,t){e=Oe(e),e.dep&&ma(e.dep)}function Ke(e){return!!(e&&e.__v_isRef===!0)}function Ie(e){return El(e,!1)}function yl(e){return El(e,!0)}function El(e,t){return Ke(e)?e:new pd(e,t)}class pd{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:Oe(t),this._value=n?t:uo(t)}get value(){return gl(this),this._value}set value(t){const n=this.__v_isShallow||rr(t)||Cn(t);t=n?t:Oe(t),lo(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:uo(t),bl(this))}}function V(e){return Ke(e)?e.value:e}const _d={get:(e,t,n)=>V(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const r=e[t];return Ke(r)&&!Ke(n)?(r.value=n,!0):Reflect.set(e,t,n,o)}};function wl(e){return Dn(e)?e:new Proxy(e,_d)}function Xa(e){const t=ce(e)?new Array(e.length):{};for(const n in e)t[n]=gd(e,n);return t}class vd{constructor(t,n,o){this._object=t,this._key=n,this._defaultValue=o,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}}function gd(e,t,n){const o=e[t];return Ke(o)?o:new vd(e,t,n)}var Ol;class bd{constructor(t,n,o,r){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this[Ol]=!1,this._dirty=!0,this.effect=new Wa(t,()=>{this._dirty||(this._dirty=!0,bl(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=o}get value(){const t=Oe(this);return gl(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}Ol="__v_isReadonly";function yd(e,t,n=!1){let o,r;const a=he(e);return a?(o=e,r=_t):(o=e.get,r=e.set),new bd(o,r,a||!r,n)}function Jt(e,t,n,o){let r;try{r=o?e(...o):e()}catch(a){Oo(a,t,n)}return r}function ut(e,t,n,o){if(he(e)){const a=Jt(e,t,n,o);return a&&ol(a)&&a.catch(i=>{Oo(i,t,n)}),a}const r=[];for(let a=0;a>>1;mo(Qe[o])Ot&&Qe.splice(t,1)}function Pd(e){ce(e)?Rn.push(...e):(!Ct||!Ct.includes(e,e.allowRecurse?ln+1:ln))&&Rn.push(e),Sl()}function Mi(e,t=Ot){for(;tmo(n)-mo(o)),ln=0;lne.id==null?1/0:e.id,Sd=(e,t)=>{const n=mo(e)-mo(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Al(e){da=!1,ar=!0,Qe.sort(Sd);const t=_t;try{for(Ot=0;Otf.trim())),m&&(r=n.map(or))}let c,s=o[c=Nr(t)]||o[c=Nr(It(t))];!s&&a&&(s=o[c=Nr(_n(t))]),s&&ut(s,e,6,r);const l=o[c+"Once"];if(l){if(!e.emitted)e.emitted={};else if(e.emitted[c])return;e.emitted[c]=!0,ut(l,e,6,r)}}function Tl(e,t,n=!1){const o=t.emitsCache,r=o.get(e);if(r!==void 0)return r;const a=e.emits;let i={},c=!1;if(!he(e)){const s=l=>{const u=Tl(l,t,!0);u&&(c=!0,Ye(i,u))};!n&&t.mixins.length&&t.mixins.forEach(s),e.extends&&s(e.extends),e.mixins&&e.mixins.forEach(s)}return!a&&!c?(Ve(e)&&o.set(e,null),null):(ce(a)?a.forEach(s=>i[s]=null):Ye(i,a),Ve(e)&&o.set(e,i),i)}function Lr(e,t){return!e||!wo(t)?!1:(t=t.slice(2).replace(/Once$/,""),ye(e,t[0].toLowerCase()+t.slice(1))||ye(e,_n(t))||ye(e,t))}let Ge=null,Dr=null;function cr(e){const t=Ge;return Ge=e,Dr=e&&e.type.__scopeId||null,t}function Td(e){Dr=e}function Id(){Dr=null}function We(e,t=Ge,n){if(!t||e._n)return e;const o=(...r)=>{o._d&&Wi(-1);const a=cr(t),i=e(...r);return cr(a),o._d&&Wi(1),i};return o._n=!0,o._c=!0,o._d=!0,o}function Fr(e){const{type:t,vnode:n,proxy:o,withProxy:r,props:a,propsOptions:[i],slots:c,attrs:s,emit:l,render:u,renderCache:m,data:d,setupState:f,ctx:v,inheritAttrs:g}=e;let b,p;const y=cr(e);try{if(n.shapeFlag&4){const A=r||o;b=ft(u.call(A,A,m,a,f,d,v)),p=s}else{const A=t;b=ft(A.length>1?A(a,{attrs:s,slots:c,emit:l}):A(a,null)),p=t.props?s:Ld(s)}}catch(A){oo.length=0,Oo(A,e,1),b=ie(it)}let P=b;if(p&&g!==!1){const A=Object.keys(p),{shapeFlag:D}=P;A.length&&D&7&&(i&&A.some(Na)&&(p=Dd(p,i)),P=Gt(P,p))}return n.dirs&&(P=Gt(P),P.dirs=P.dirs?P.dirs.concat(n.dirs):n.dirs),n.transition&&(P.transition=n.transition),b=P,cr(y),b}const Ld=e=>{let t;for(const n in e)(n==="class"||n==="style"||wo(n))&&((t||(t={}))[n]=e[n]);return t},Dd=(e,t)=>{const n={};for(const o in e)(!Na(o)||!(o.slice(9)in t))&&(n[o]=e[o]);return n};function Rd(e,t,n){const{props:o,children:r,component:a}=e,{props:i,children:c,patchFlag:s}=t,l=a.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&s>=0){if(s&1024)return!0;if(s&16)return o?$i(o,i,l):!!i;if(s&8){const u=t.dynamicProps;for(let m=0;me.__isSuspense;function Il(e,t){t&&t.pendingBranch?ce(e)?t.effects.push(...e):t.effects.push(e):Pd(e)}function hn(e,t){if(ze){let n=ze.provides;const o=ze.parent&&ze.parent.provides;o===n&&(n=ze.provides=Object.create(o)),n[e]=t}}function Ue(e,t,n=!1){const o=ze||Ge;if(o){const r=o.parent==null?o.vnode.appContext&&o.vnode.appContext.provides:o.parent.provides;if(r&&e in r)return r[e];if(arguments.length>1)return n&&he(t)?t.call(o.proxy):t}}const ji={};function Xe(e,t,n){return Ll(e,t,n)}function Ll(e,t,{immediate:n,deep:o,flush:r,onTrack:a,onTrigger:i}=Me){const c=ze;let s,l=!1,u=!1;if(Ke(e)?(s=()=>e.value,l=rr(e)):Dn(e)?(s=()=>e,o=!0):ce(e)?(u=!0,l=e.some(p=>Dn(p)||rr(p)),s=()=>e.map(p=>{if(Ke(p))return p.value;if(Dn(p))return dn(p);if(he(p))return Jt(p,c,2)})):he(e)?t?s=()=>Jt(e,c,2):s=()=>{if(!(c&&c.isUnmounted))return m&&m(),ut(e,c,3,[d])}:s=_t,t&&o){const p=s;s=()=>dn(p())}let m,d=p=>{m=b.onStop=()=>{Jt(p,c,4)}};if($n)return d=_t,t?n&&ut(t,c,3,[s(),u?[]:void 0,d]):s(),_t;let f=u?[]:ji;const v=()=>{if(!!b.active)if(t){const p=b.run();(o||l||(u?p.some((y,P)=>lo(y,f[P])):lo(p,f)))&&(m&&m(),ut(t,c,3,[p,f===ji?void 0:f,d]),f=p)}else b.run()};v.allowRecurse=!!t;let g;r==="sync"?g=v:r==="post"?g=()=>nt(v,c&&c.suspense):(v.pre=!0,c&&(v.id=c.uid),g=()=>Ir(v));const b=new Wa(s,g);return t?n?v():f=b.run():r==="post"?nt(b.run.bind(b),c&&c.suspense):b.run(),()=>{b.stop(),c&&c.scope&&Fa(c.scope.effects,b)}}function Cd(e,t,n){const o=this.proxy,r=De(e)?e.includes(".")?Dl(o,e):()=>o[e]:e.bind(o,o);let a;he(t)?a=t:(a=t.handler,n=t);const i=ze;Mn(this);const c=Ll(r,a.bind(o),n);return i?Mn(i):pn(),c}function Dl(e,t){const n=t.split(".");return()=>{let o=e;for(let r=0;r{dn(n,t)});else if(al(e))for(const n in e)dn(e[n],t);return e}function Md(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return tt(()=>{e.isMounted=!0}),kr(()=>{e.isUnmounting=!0}),e}const st=[Function,Array],$d={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:st,onEnter:st,onAfterEnter:st,onEnterCancelled:st,onBeforeLeave:st,onLeave:st,onAfterLeave:st,onLeaveCancelled:st,onBeforeAppear:st,onAppear:st,onAfterAppear:st,onAppearCancelled:st},setup(e,{slots:t}){const n=ai(),o=Md();let r;return()=>{const a=t.default&&xl(t.default(),!0);if(!a||!a.length)return;let i=a[0];if(a.length>1){for(const g of a)if(g.type!==it){i=g;break}}const c=Oe(e),{mode:s}=c;if(o.isLeaving)return Br(i);const l=Hi(i);if(!l)return Br(i);const u=fa(l,c,o,n);ha(l,u);const m=n.subTree,d=m&&Hi(m);let f=!1;const{getTransitionKey:v}=l.type;if(v){const g=v();r===void 0?r=g:g!==r&&(r=g,f=!0)}if(d&&d.type!==it&&(!un(l,d)||f)){const g=fa(d,c,o,n);if(ha(d,g),s==="out-in")return o.isLeaving=!0,g.afterLeave=()=>{o.isLeaving=!1,n.update()},Br(i);s==="in-out"&&l.type!==it&&(g.delayLeave=(b,p,y)=>{const P=kl(o,d);P[String(d.key)]=d,b._leaveCb=()=>{p(),b._leaveCb=void 0,delete u.delayedLeave},u.delayedLeave=y})}return i}}},Rl=$d;function kl(e,t){const{leavingVNodes:n}=e;let o=n.get(t.type);return o||(o=Object.create(null),n.set(t.type,o)),o}function fa(e,t,n,o){const{appear:r,mode:a,persisted:i=!1,onBeforeEnter:c,onEnter:s,onAfterEnter:l,onEnterCancelled:u,onBeforeLeave:m,onLeave:d,onAfterLeave:f,onLeaveCancelled:v,onBeforeAppear:g,onAppear:b,onAfterAppear:p,onAppearCancelled:y}=t,P=String(e.key),A=kl(n,e),D=(E,z)=>{E&&ut(E,o,9,z)},q=(E,z)=>{const Y=z[1];D(E,z),ce(E)?E.every(j=>j.length<=1)&&Y():E.length<=1&&Y()},R={mode:a,persisted:i,beforeEnter(E){let z=c;if(!n.isMounted)if(r)z=g||c;else return;E._leaveCb&&E._leaveCb(!0);const Y=A[P];Y&&un(e,Y)&&Y.el._leaveCb&&Y.el._leaveCb(),D(z,[E])},enter(E){let z=s,Y=l,j=u;if(!n.isMounted)if(r)z=b||s,Y=p||l,j=y||u;else return;let S=!1;const T=E._enterCb=k=>{S||(S=!0,k?D(j,[E]):D(Y,[E]),R.delayedLeave&&R.delayedLeave(),E._enterCb=void 0)};z?q(z,[E,T]):T()},leave(E,z){const Y=String(e.key);if(E._enterCb&&E._enterCb(!0),n.isUnmounting)return z();D(m,[E]);let j=!1;const S=E._leaveCb=T=>{j||(j=!0,z(),T?D(v,[E]):D(f,[E]),E._leaveCb=void 0,A[Y]===e&&delete A[Y])};A[Y]=e,d?q(d,[E,S]):S()},clone(E){return fa(E,t,n,o)}};return R}function Br(e){if(So(e))return e=Gt(e),e.children=null,e}function Hi(e){return So(e)?e.children?e.children[0]:void 0:e}function ha(e,t){e.shapeFlag&6&&e.component?ha(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function xl(e,t=!1,n){let o=[],r=0;for(let a=0;a1)for(let a=0;a!!e.type.__asyncLoader;function L(e){he(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:o,delay:r=200,timeout:a,suspensible:i=!0,onError:c}=e;let s=null,l,u=0;const m=()=>(u++,s=null,d()),d=()=>{let f;return s||(f=s=t().catch(v=>{if(v=v instanceof Error?v:new Error(String(v)),c)return new Promise((g,b)=>{c(v,()=>g(m()),()=>b(v),u+1)});throw v}).then(v=>f!==s&&s?s:(v&&(v.__esModule||v[Symbol.toStringTag]==="Module")&&(v=v.default),l=v,v)))};return Ne({name:"AsyncComponentWrapper",__asyncLoader:d,get __asyncResolved(){return l},setup(){const f=ze;if(l)return()=>zr(l,f);const v=y=>{s=null,Oo(y,f,13,!o)};if(i&&f.suspense||$n)return d().then(y=>()=>zr(y,f)).catch(y=>(v(y),()=>o?ie(o,{error:y}):null));const g=Ie(!1),b=Ie(),p=Ie(!!r);return r&&setTimeout(()=>{p.value=!1},r),a!=null&&setTimeout(()=>{if(!g.value&&!b.value){const y=new Error(`Async component timed out after ${a}ms.`);v(y),b.value=y}},a),d().then(()=>{g.value=!0,f.parent&&So(f.parent.vnode)&&Ir(f.parent.update)}).catch(y=>{v(y),b.value=y}),()=>{if(g.value&&l)return zr(l,f);if(b.value&&o)return ie(o,{error:b.value});if(n&&!p.value)return ie(n)}}})}function zr(e,{vnode:{ref:t,props:n,children:o,shapeFlag:r},parent:a}){const i=ie(e,n,o);return i.ref=t,i}const So=e=>e.type.__isKeepAlive;function jd(e,t){Cl(e,"a",t)}function Hd(e,t){Cl(e,"da",t)}function Cl(e,t,n=ze){const o=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Rr(t,o,n),n){let r=n.parent;for(;r&&r.parent;)So(r.parent.vnode)&&qd(o,t,n,r),r=r.parent}}function qd(e,t,n,o){const r=Rr(t,e,o,!0);xr(()=>{Fa(o[t],r)},n)}function Rr(e,t,n=ze,o=!1){if(n){const r=n[e]||(n[e]=[]),a=t.__weh||(t.__weh=(...i)=>{if(n.isUnmounted)return;qn(),Mn(n);const c=ut(t,n,e,i);return pn(),Vn(),c});return o?r.unshift(a):r.push(a),a}}const Vt=e=>(t,n=ze)=>(!$n||e==="sp")&&Rr(e,t,n),ti=Vt("bm"),tt=Vt("m"),Vd=Vt("bu"),Nd=Vt("u"),kr=Vt("bum"),xr=Vt("um"),Fd=Vt("sp"),Bd=Vt("rtg"),zd=Vt("rtc");function Ud(e,t=ze){Rr("ec",e,t)}function fo(e,t){const n=Ge;if(n===null)return e;const o=Mr(n)||n.proxy,r=e.dirs||(e.dirs=[]);for(let a=0;at(i,c,void 0,a&&a[c]));else{const i=Object.keys(e);r=new Array(i.length);for(let c=0,s=i.length;cmr(t)?!(t.type===it||t.type===Se&&!jl(t.children)):!0)?e:null}const pa=e=>e?Jl(e)?Mr(e)||e.proxy:pa(e.parent):null,sr=Ye(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>pa(e.parent),$root:e=>pa(e.root),$emit:e=>e.emit,$options:e=>ql(e),$forceUpdate:e=>e.f||(e.f=()=>Ir(e.update)),$nextTick:e=>e.n||(e.n=Po.bind(e.proxy)),$watch:e=>Cd.bind(e)}),Kd={get({_:e},t){const{ctx:n,setupState:o,data:r,props:a,accessCache:i,type:c,appContext:s}=e;let l;if(t[0]!=="$"){const f=i[t];if(f!==void 0)switch(f){case 1:return o[t];case 2:return r[t];case 4:return n[t];case 3:return a[t]}else{if(o!==Me&&ye(o,t))return i[t]=1,o[t];if(r!==Me&&ye(r,t))return i[t]=2,r[t];if((l=e.propsOptions[0])&&ye(l,t))return i[t]=3,a[t];if(n!==Me&&ye(n,t))return i[t]=4,n[t];_a&&(i[t]=0)}}const u=sr[t];let m,d;if(u)return t==="$attrs"&&ct(e,"get",t),u(e);if((m=c.__cssModules)&&(m=m[t]))return m;if(n!==Me&&ye(n,t))return i[t]=4,n[t];if(d=s.config.globalProperties,ye(d,t))return d[t]},set({_:e},t,n){const{data:o,setupState:r,ctx:a}=e;return r!==Me&&ye(r,t)?(r[t]=n,!0):o!==Me&&ye(o,t)?(o[t]=n,!0):ye(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(a[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:o,appContext:r,propsOptions:a}},i){let c;return!!n[i]||e!==Me&&ye(e,i)||t!==Me&&ye(t,i)||(c=a[0])&&ye(c,i)||ye(o,i)||ye(sr,i)||ye(r.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ye(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};let _a=!0;function Yd(e){const t=ql(e),n=e.proxy,o=e.ctx;_a=!1,t.beforeCreate&&Vi(t.beforeCreate,e,"bc");const{data:r,computed:a,methods:i,watch:c,provide:s,inject:l,created:u,beforeMount:m,mounted:d,beforeUpdate:f,updated:v,activated:g,deactivated:b,beforeDestroy:p,beforeUnmount:y,destroyed:P,unmounted:A,render:D,renderTracked:q,renderTriggered:R,errorCaptured:E,serverPrefetch:z,expose:Y,inheritAttrs:j,components:S,directives:T,filters:k}=t;if(l&&Jd(l,o,null,e.appContext.config.unwrapInjectedRef),i)for(const K in i){const te=i[K];he(te)&&(o[K]=te.bind(n))}if(r){const K=r.call(n,n);Ve(K)&&(e.data=Nn(K))}if(_a=!0,a)for(const K in a){const te=a[K],me=he(te)?te.bind(n,n):he(te.get)?te.get.bind(n,n):_t,de=!he(te)&&he(te.set)?te.set.bind(n):_t,ve=Z({get:me,set:de});Object.defineProperty(o,K,{enumerable:!0,configurable:!0,get:()=>ve.value,set:Ae=>ve.value=Ae})}if(c)for(const K in c)Hl(c[K],o,n,K);if(s){const K=he(s)?s.call(n):s;Reflect.ownKeys(K).forEach(te=>{hn(te,K[te])})}u&&Vi(u,e,"c");function $(K,te){ce(te)?te.forEach(me=>K(me.bind(n))):te&&K(te.bind(n))}if($(ti,m),$(tt,d),$(Vd,f),$(Nd,v),$(jd,g),$(Hd,b),$(Ud,E),$(zd,q),$(Bd,R),$(kr,y),$(xr,A),$(Fd,z),ce(Y))if(Y.length){const K=e.exposed||(e.exposed={});Y.forEach(te=>{Object.defineProperty(K,te,{get:()=>n[te],set:me=>n[te]=me})})}else e.exposed||(e.exposed={});D&&e.render===_t&&(e.render=D),j!=null&&(e.inheritAttrs=j),S&&(e.components=S),T&&(e.directives=T)}function Jd(e,t,n=_t,o=!1){ce(e)&&(e=va(e));for(const r in e){const a=e[r];let i;Ve(a)?"default"in a?i=Ue(a.from||r,a.default,!0):i=Ue(a.from||r):i=Ue(a),Ke(i)&&o?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>i.value,set:c=>i.value=c}):t[r]=i}}function Vi(e,t,n){ut(ce(e)?e.map(o=>o.bind(t.proxy)):e.bind(t.proxy),t,n)}function Hl(e,t,n,o){const r=o.includes(".")?Dl(n,o):()=>n[o];if(De(e)){const a=t[e];he(a)&&Xe(r,a)}else if(he(e))Xe(r,e.bind(n));else if(Ve(e))if(ce(e))e.forEach(a=>Hl(a,t,n,o));else{const a=he(e.handler)?e.handler.bind(n):t[e.handler];he(a)&&Xe(r,a,e)}}function ql(e){const t=e.type,{mixins:n,extends:o}=t,{mixins:r,optionsCache:a,config:{optionMergeStrategies:i}}=e.appContext,c=a.get(t);let s;return c?s=c:!r.length&&!n&&!o?s=t:(s={},r.length&&r.forEach(l=>lr(s,l,i,!0)),lr(s,t,i)),Ve(t)&&a.set(t,s),s}function lr(e,t,n,o=!1){const{mixins:r,extends:a}=t;a&&lr(e,a,n,!0),r&&r.forEach(i=>lr(e,i,n,!0));for(const i in t)if(!(o&&i==="expose")){const c=Qd[i]||n&&n[i];e[i]=c?c(e[i],t[i]):t[i]}return e}const Qd={data:Ni,props:an,emits:an,methods:an,computed:an,beforeCreate:Ze,created:Ze,beforeMount:Ze,mounted:Ze,beforeUpdate:Ze,updated:Ze,beforeDestroy:Ze,beforeUnmount:Ze,destroyed:Ze,unmounted:Ze,activated:Ze,deactivated:Ze,errorCaptured:Ze,serverPrefetch:Ze,components:an,directives:an,watch:Zd,provide:Ni,inject:Gd};function Ni(e,t){return t?e?function(){return Ye(he(e)?e.call(this,this):e,he(t)?t.call(this,this):t)}:t:e}function Gd(e,t){return an(va(e),va(t))}function va(e){if(ce(e)){const t={};for(let n=0;n0)&&!(i&16)){if(i&8){const u=e.vnode.dynamicProps;for(let m=0;m{s=!0;const[d,f]=Nl(m,t,!0);Ye(i,d),f&&c.push(...f)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!a&&!s)return Ve(e)&&o.set(e,In),In;if(ce(a))for(let u=0;u-1,f[1]=g<0||v-1||ye(f,"default"))&&c.push(m)}}}const l=[i,c];return Ve(e)&&o.set(e,l),l}function Fi(e){return e[0]!=="$"}function Bi(e){const t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:e===null?"null":""}function zi(e,t){return Bi(e)===Bi(t)}function Ui(e,t){return ce(t)?t.findIndex(n=>zi(n,e)):he(t)&&zi(t,e)?0:-1}const Fl=e=>e[0]==="_"||e==="$stable",oi=e=>ce(e)?e.map(ft):[ft(e)],tf=(e,t,n)=>{if(t._n)return t;const o=We((...r)=>oi(t(...r)),n);return o._c=!1,o},Bl=(e,t,n)=>{const o=e._ctx;for(const r in e){if(Fl(r))continue;const a=e[r];if(he(a))t[r]=tf(r,a,o);else if(a!=null){const i=oi(a);t[r]=()=>i}}},zl=(e,t)=>{const n=oi(t);e.slots.default=()=>n},nf=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=Oe(t),nr(t,"_",n)):Bl(t,e.slots={})}else e.slots={},t&&zl(e,t);nr(e.slots,Cr,1)},of=(e,t,n)=>{const{vnode:o,slots:r}=e;let a=!0,i=Me;if(o.shapeFlag&32){const c=t._;c?n&&c===1?a=!1:(Ye(r,t),!n&&c===1&&delete r._):(a=!t.$stable,Bl(t,r)),i=t}else t&&(zl(e,t),i={default:1});if(a)for(const c in r)!Fl(c)&&!(c in i)&&delete r[c]};function Ul(){return{app:null,config:{isNativeTag:km,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let rf=0;function af(e,t){return function(o,r=null){he(o)||(o=Object.assign({},o)),r!=null&&!Ve(r)&&(r=null);const a=Ul(),i=new Set;let c=!1;const s=a.app={_uid:rf++,_component:o,_props:r,_container:null,_context:a,_instance:null,version:Sf,get config(){return a.config},set config(l){},use(l,...u){return i.has(l)||(l&&he(l.install)?(i.add(l),l.install(s,...u)):he(l)&&(i.add(l),l(s,...u))),s},mixin(l){return a.mixins.includes(l)||a.mixins.push(l),s},component(l,u){return u?(a.components[l]=u,s):a.components[l]},directive(l,u){return u?(a.directives[l]=u,s):a.directives[l]},mount(l,u,m){if(!c){const d=ie(o,r);return d.appContext=a,u&&t?t(d,l):e(d,l,m),c=!0,s._container=l,l.__vue_app__=s,Mr(d.component)||d.component.proxy}},unmount(){c&&(e(null,s._container),delete s._container.__vue_app__)},provide(l,u){return a.provides[l]=u,s}};return s}}function ur(e,t,n,o,r=!1){if(ce(e)){e.forEach((d,f)=>ur(d,t&&(ce(t)?t[f]:t),n,o,r));return}if(kn(o)&&!r)return;const a=o.shapeFlag&4?Mr(o.component)||o.component.proxy:o.el,i=r?null:a,{i:c,r:s}=e,l=t&&t.r,u=c.refs===Me?c.refs={}:c.refs,m=c.setupState;if(l!=null&&l!==s&&(De(l)?(u[l]=null,ye(m,l)&&(m[l]=null)):Ke(l)&&(l.value=null)),he(s))Jt(s,c,12,[i,u]);else{const d=De(s),f=Ke(s);if(d||f){const v=()=>{if(e.f){const g=d?u[s]:s.value;r?ce(g)&&Fa(g,a):ce(g)?g.includes(a)||g.push(a):d?(u[s]=[a],ye(m,s)&&(m[s]=u[s])):(s.value=[a],e.k&&(u[e.k]=s.value))}else d?(u[s]=i,ye(m,s)&&(m[s]=i)):f&&(s.value=i,e.k&&(u[e.k]=i))};i?(v.id=-1,nt(v,n)):v()}}}let Ft=!1;const Mo=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",$o=e=>e.nodeType===8;function cf(e){const{mt:t,p:n,o:{patchProp:o,createText:r,nextSibling:a,parentNode:i,remove:c,insert:s,createComment:l}}=e,u=(p,y)=>{if(!y.hasChildNodes()){n(null,p,y),ir(),y._vnode=p;return}Ft=!1,m(y.firstChild,p,null,null,null),ir(),y._vnode=p,Ft&&console.error("Hydration completed but contains mismatches.")},m=(p,y,P,A,D,q=!1)=>{const R=$o(p)&&p.data==="[",E=()=>g(p,y,P,A,D,R),{type:z,ref:Y,shapeFlag:j,patchFlag:S}=y,T=p.nodeType;y.el=p,S===-2&&(q=!1,y.dynamicChildren=null);let k=null;switch(z){case ho:T!==3?y.children===""?(s(y.el=r(""),i(p),p),k=p):k=E():(p.data!==y.children&&(Ft=!0,p.data=y.children),k=a(p));break;case it:T!==8||R?k=E():k=a(p);break;case no:if(T!==1&&T!==3)k=E();else{k=p;const M=!y.children.length;for(let $=0;${q=q||!!y.dynamicChildren;const{type:R,props:E,patchFlag:z,shapeFlag:Y,dirs:j}=y,S=R==="input"&&j||R==="option";if(S||z!==-1){if(j&&yt(y,null,P,"created"),E)if(S||!q||z&48)for(const k in E)(S&&k.endsWith("value")||wo(k)&&!to(k))&&o(p,k,null,E[k],!1,void 0,P);else E.onClick&&o(p,"onClick",null,E.onClick,!1,void 0,P);let T;if((T=E&&E.onVnodeBeforeMount)&<(T,P,y),j&&yt(y,null,P,"beforeMount"),((T=E&&E.onVnodeMounted)||j)&&Il(()=>{T&<(T,P,y),j&&yt(y,null,P,"mounted")},A),Y&16&&!(E&&(E.innerHTML||E.textContent))){let k=f(p.firstChild,y,p,P,A,D,q);for(;k;){Ft=!0;const M=k;k=k.nextSibling,c(M)}}else Y&8&&p.textContent!==y.children&&(Ft=!0,p.textContent=y.children)}return p.nextSibling},f=(p,y,P,A,D,q,R)=>{R=R||!!y.dynamicChildren;const E=y.children,z=E.length;for(let Y=0;Y{const{slotScopeIds:R}=y;R&&(D=D?D.concat(R):R);const E=i(p),z=f(a(p),y,E,P,A,D,q);return z&&$o(z)&&z.data==="]"?a(y.anchor=z):(Ft=!0,s(y.anchor=l("]"),E,z),z)},g=(p,y,P,A,D,q)=>{if(Ft=!0,y.el=null,q){const z=b(p);for(;;){const Y=a(p);if(Y&&Y!==z)c(Y);else break}}const R=a(p),E=i(p);return c(p),n(null,y,E,R,P,A,Mo(E),D),R},b=p=>{let y=0;for(;p;)if(p=a(p),p&&$o(p)&&(p.data==="["&&y++,p.data==="]")){if(y===0)return a(p);y--}return p};return[u,m]}const nt=Il;function sf(e){return lf(e,cf)}function lf(e,t){const n=Hm();n.__VUE__=!0;const{insert:o,remove:r,patchProp:a,createElement:i,createText:c,createComment:s,setText:l,setElementText:u,parentNode:m,nextSibling:d,setScopeId:f=_t,cloneNode:v,insertStaticContent:g}=e,b=(_,w,I,C=null,H=null,F=null,J=!1,W=null,G=!!w.dynamicChildren)=>{if(_===w)return;_&&!un(_,w)&&(C=X(_),ke(_,H,F,!0),_=null),w.patchFlag===-2&&(G=!1,w.dynamicChildren=null);const{type:U,ref:re,shapeFlag:oe}=w;switch(U){case ho:p(_,w,I,C);break;case it:y(_,w,I,C);break;case no:_==null&&P(w,I,C,J);break;case Se:T(_,w,I,C,H,F,J,W,G);break;default:oe&1?q(_,w,I,C,H,F,J,W,G):oe&6?k(_,w,I,C,H,F,J,W,G):(oe&64||oe&128)&&U.process(_,w,I,C,H,F,J,W,G,be)}re!=null&&H&&ur(re,_&&_.ref,F,w||_,!w)},p=(_,w,I,C)=>{if(_==null)o(w.el=c(w.children),I,C);else{const H=w.el=_.el;w.children!==_.children&&l(H,w.children)}},y=(_,w,I,C)=>{_==null?o(w.el=s(w.children||""),I,C):w.el=_.el},P=(_,w,I,C)=>{[_.el,_.anchor]=g(_.children,w,I,C,_.el,_.anchor)},A=({el:_,anchor:w},I,C)=>{let H;for(;_&&_!==w;)H=d(_),o(_,I,C),_=H;o(w,I,C)},D=({el:_,anchor:w})=>{let I;for(;_&&_!==w;)I=d(_),r(_),_=I;r(w)},q=(_,w,I,C,H,F,J,W,G)=>{J=J||w.type==="svg",_==null?R(w,I,C,H,F,J,W,G):Y(_,w,H,F,J,W,G)},R=(_,w,I,C,H,F,J,W)=>{let G,U;const{type:re,props:oe,shapeFlag:ne,transition:se,patchFlag:_e,dirs:xe}=_;if(_.el&&v!==void 0&&_e===-1)G=_.el=v(_.el);else{if(G=_.el=i(_.type,F,oe&&oe.is,oe),ne&8?u(G,_.children):ne&16&&z(_.children,G,null,C,H,F&&re!=="foreignObject",J,W),xe&&yt(_,null,C,"created"),oe){for(const He in oe)He!=="value"&&!to(He)&&a(G,He,null,oe[He],F,_.children,C,H,B);"value"in oe&&a(G,"value",null,oe.value),(U=oe.onVnodeBeforeMount)&<(U,C,_)}E(G,_,_.scopeId,J,C)}xe&&yt(_,null,C,"beforeMount");const Ce=(!H||H&&!H.pendingBranch)&&se&&!se.persisted;Ce&&se.beforeEnter(G),o(G,w,I),((U=oe&&oe.onVnodeMounted)||Ce||xe)&&nt(()=>{U&<(U,C,_),Ce&&se.enter(G),xe&&yt(_,null,C,"mounted")},H)},E=(_,w,I,C,H)=>{if(I&&f(_,I),C)for(let F=0;F{for(let U=G;U<_.length;U++){const re=_[U]=W?Ut(_[U]):ft(_[U]);b(null,re,w,I,C,H,F,J,W)}},Y=(_,w,I,C,H,F,J)=>{const W=w.el=_.el;let{patchFlag:G,dynamicChildren:U,dirs:re}=w;G|=_.patchFlag&16;const oe=_.props||Me,ne=w.props||Me;let se;I&&en(I,!1),(se=ne.onVnodeBeforeUpdate)&<(se,I,w,_),re&&yt(w,_,I,"beforeUpdate"),I&&en(I,!0);const _e=H&&w.type!=="foreignObject";if(U?j(_.dynamicChildren,U,W,I,C,_e,F):J||me(_,w,W,null,I,C,_e,F,!1),G>0){if(G&16)S(W,w,oe,ne,I,C,H);else if(G&2&&oe.class!==ne.class&&a(W,"class",null,ne.class,H),G&4&&a(W,"style",oe.style,ne.style,H),G&8){const xe=w.dynamicProps;for(let Ce=0;Ce{se&<(se,I,w,_),re&&yt(w,_,I,"updated")},C)},j=(_,w,I,C,H,F,J)=>{for(let W=0;W{if(I!==C){for(const W in C){if(to(W))continue;const G=C[W],U=I[W];G!==U&&W!=="value"&&a(_,W,U,G,J,w.children,H,F,B)}if(I!==Me)for(const W in I)!to(W)&&!(W in C)&&a(_,W,I[W],null,J,w.children,H,F,B);"value"in C&&a(_,"value",I.value,C.value)}},T=(_,w,I,C,H,F,J,W,G)=>{const U=w.el=_?_.el:c(""),re=w.anchor=_?_.anchor:c("");let{patchFlag:oe,dynamicChildren:ne,slotScopeIds:se}=w;se&&(W=W?W.concat(se):se),_==null?(o(U,I,C),o(re,I,C),z(w.children,I,re,H,F,J,W,G)):oe>0&&oe&64&&ne&&_.dynamicChildren?(j(_.dynamicChildren,ne,I,H,F,J,W),(w.key!=null||H&&w===H.subTree)&&Wl(_,w,!0)):me(_,w,I,re,H,F,J,W,G)},k=(_,w,I,C,H,F,J,W,G)=>{w.slotScopeIds=W,_==null?w.shapeFlag&512?H.ctx.activate(w,I,C,J,G):M(w,I,C,H,F,J,G):$(_,w,G)},M=(_,w,I,C,H,F,J)=>{const W=_.component=gf(_,C,H);if(So(_)&&(W.ctx.renderer=be),bf(W),W.asyncDep){if(H&&H.registerDep(W,K),!_.el){const G=W.subTree=ie(it);y(null,G,w,I)}return}K(W,_,w,I,H,F,J)},$=(_,w,I)=>{const C=w.component=_.component;if(Rd(_,w,I))if(C.asyncDep&&!C.asyncResolved){te(C,w,I);return}else C.next=w,Od(C.update),C.update();else w.el=_.el,C.vnode=w},K=(_,w,I,C,H,F,J)=>{const W=()=>{if(_.isMounted){let{next:re,bu:oe,u:ne,parent:se,vnode:_e}=_,xe=re,Ce;en(_,!1),re?(re.el=_e.el,te(_,re,J)):re=_e,oe&&Yo(oe),(Ce=re.props&&re.props.onVnodeBeforeUpdate)&<(Ce,se,re,_e),en(_,!0);const He=Fr(_),dt=_.subTree;_.subTree=He,b(dt,He,m(dt.el),X(dt),_,H,F),re.el=He.el,xe===null&&kd(_,He.el),ne&&nt(ne,H),(Ce=re.props&&re.props.onVnodeUpdated)&&nt(()=>lt(Ce,se,re,_e),H)}else{let re;const{el:oe,props:ne}=w,{bm:se,m:_e,parent:xe}=_,Ce=kn(w);if(en(_,!1),se&&Yo(se),!Ce&&(re=ne&&ne.onVnodeBeforeMount)&<(re,xe,w),en(_,!0),oe&&ue){const He=()=>{_.subTree=Fr(_),ue(oe,_.subTree,_,H,null)};Ce?w.type.__asyncLoader().then(()=>!_.isUnmounted&&He()):He()}else{const He=_.subTree=Fr(_);b(null,He,I,C,_,H,F),w.el=He.el}if(_e&&nt(_e,H),!Ce&&(re=ne&&ne.onVnodeMounted)){const He=w;nt(()=>lt(re,xe,He),H)}(w.shapeFlag&256||xe&&kn(xe.vnode)&&xe.vnode.shapeFlag&256)&&_.a&&nt(_.a,H),_.isMounted=!0,w=I=C=null}},G=_.effect=new Wa(W,()=>Ir(U),_.scope),U=_.update=()=>G.run();U.id=_.uid,en(_,!0),U()},te=(_,w,I)=>{w.component=_;const C=_.vnode.props;_.vnode=w,_.next=null,ef(_,w.props,C,I),of(_,w.children,I),qn(),Mi(),Vn()},me=(_,w,I,C,H,F,J,W,G=!1)=>{const U=_&&_.children,re=_?_.shapeFlag:0,oe=w.children,{patchFlag:ne,shapeFlag:se}=w;if(ne>0){if(ne&128){ve(U,oe,I,C,H,F,J,W,G);return}else if(ne&256){de(U,oe,I,C,H,F,J,W,G);return}}se&8?(re&16&&B(U,H,F),oe!==U&&u(I,oe)):re&16?se&16?ve(U,oe,I,C,H,F,J,W,G):B(U,H,F,!0):(re&8&&u(I,""),se&16&&z(oe,I,C,H,F,J,W,G))},de=(_,w,I,C,H,F,J,W,G)=>{_=_||In,w=w||In;const U=_.length,re=w.length,oe=Math.min(U,re);let ne;for(ne=0;nere?B(_,H,F,!0,!1,oe):z(w,I,C,H,F,J,W,G,oe)},ve=(_,w,I,C,H,F,J,W,G)=>{let U=0;const re=w.length;let oe=_.length-1,ne=re-1;for(;U<=oe&&U<=ne;){const se=_[U],_e=w[U]=G?Ut(w[U]):ft(w[U]);if(un(se,_e))b(se,_e,I,null,H,F,J,W,G);else break;U++}for(;U<=oe&&U<=ne;){const se=_[oe],_e=w[ne]=G?Ut(w[ne]):ft(w[ne]);if(un(se,_e))b(se,_e,I,null,H,F,J,W,G);else break;oe--,ne--}if(U>oe){if(U<=ne){const se=ne+1,_e=sene)for(;U<=oe;)ke(_[U],H,F,!0),U++;else{const se=U,_e=U,xe=new Map;for(U=_e;U<=ne;U++){const rt=w[U]=G?Ut(w[U]):ft(w[U]);rt.key!=null&&xe.set(rt.key,U)}let Ce,He=0;const dt=ne-_e+1;let gn=!1,Oi=0;const zn=new Array(dt);for(U=0;U=dt){ke(rt,H,F,!0);continue}let bt;if(rt.key!=null)bt=xe.get(rt.key);else for(Ce=_e;Ce<=ne;Ce++)if(zn[Ce-_e]===0&&un(rt,w[Ce])){bt=Ce;break}bt===void 0?ke(rt,H,F,!0):(zn[bt-_e]=U+1,bt>=Oi?Oi=bt:gn=!0,b(rt,w[bt],I,null,H,F,J,W,G),He++)}const Pi=gn?uf(zn):In;for(Ce=Pi.length-1,U=dt-1;U>=0;U--){const rt=_e+U,bt=w[rt],Si=rt+1{const{el:F,type:J,transition:W,children:G,shapeFlag:U}=_;if(U&6){Ae(_.component.subTree,w,I,C);return}if(U&128){_.suspense.move(w,I,C);return}if(U&64){J.move(_,w,I,be);return}if(J===Se){o(F,w,I);for(let oe=0;oeW.enter(F),H);else{const{leave:oe,delayLeave:ne,afterLeave:se}=W,_e=()=>o(F,w,I),xe=()=>{oe(F,()=>{_e(),se&&se()})};ne?ne(F,_e,xe):xe()}else o(F,w,I)},ke=(_,w,I,C=!1,H=!1)=>{const{type:F,props:J,ref:W,children:G,dynamicChildren:U,shapeFlag:re,patchFlag:oe,dirs:ne}=_;if(W!=null&&ur(W,null,I,_,!0),re&256){w.ctx.deactivate(_);return}const se=re&1&&ne,_e=!kn(_);let xe;if(_e&&(xe=J&&J.onVnodeBeforeUnmount)&<(xe,w,_),re&6)ee(_.component,I,C);else{if(re&128){_.suspense.unmount(I,C);return}se&&yt(_,null,w,"beforeUnmount"),re&64?_.type.remove(_,w,I,H,be,C):U&&(F!==Se||oe>0&&oe&64)?B(U,w,I,!1,!0):(F===Se&&oe&384||!H&&re&16)&&B(G,w,I),C&&Fe(_)}(_e&&(xe=J&&J.onVnodeUnmounted)||se)&&nt(()=>{xe&<(xe,w,_),se&&yt(_,null,w,"unmounted")},I)},Fe=_=>{const{type:w,el:I,anchor:C,transition:H}=_;if(w===Se){x(I,C);return}if(w===no){D(_);return}const F=()=>{r(I),H&&!H.persisted&&H.afterLeave&&H.afterLeave()};if(_.shapeFlag&1&&H&&!H.persisted){const{leave:J,delayLeave:W}=H,G=()=>J(I,F);W?W(_.el,F,G):G()}else F()},x=(_,w)=>{let I;for(;_!==w;)I=d(_),r(_),_=I;r(w)},ee=(_,w,I)=>{const{bum:C,scope:H,update:F,subTree:J,um:W}=_;C&&Yo(C),H.stop(),F&&(F.active=!1,ke(J,_,w,I)),W&&nt(W,w),nt(()=>{_.isUnmounted=!0},w),w&&w.pendingBranch&&!w.isUnmounted&&_.asyncDep&&!_.asyncResolved&&_.suspenseId===w.pendingId&&(w.deps--,w.deps===0&&w.resolve())},B=(_,w,I,C=!1,H=!1,F=0)=>{for(let J=F;J<_.length;J++)ke(_[J],w,I,C,H)},X=_=>_.shapeFlag&6?X(_.component.subTree):_.shapeFlag&128?_.suspense.next():d(_.anchor||_.el),pe=(_,w,I)=>{_==null?w._vnode&&ke(w._vnode,null,null,!0):b(w._vnode||null,_,w,null,null,null,I),Mi(),ir(),w._vnode=_},be={p:b,um:ke,m:Ae,r:Fe,mt:M,mc:z,pc:me,pbc:j,n:X,o:e};let fe,ue;return t&&([fe,ue]=t(be)),{render:pe,hydrate:fe,createApp:af(pe,fe)}}function en({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Wl(e,t,n=!1){const o=e.children,r=t.children;if(ce(o)&&ce(r))for(let a=0;a>1,e[n[c]]0&&(t[o]=n[a-1]),n[a]=o)}}for(a=n.length,i=n[a-1];a-- >0;)n[a]=i,i=t[i];return n}const mf=e=>e.__isTeleport,Se=Symbol(void 0),ho=Symbol(void 0),it=Symbol(void 0),no=Symbol(void 0),oo=[];let pt=null;function N(e=!1){oo.push(pt=e?null:[])}function df(){oo.pop(),pt=oo[oo.length-1]||null}let po=1;function Wi(e){po+=e}function Kl(e){return e.dynamicChildren=po>0?pt||In:null,df(),po>0&&pt&&pt.push(e),e}function Q(e,t,n,o,r,a){return Kl(le(e,t,n,o,r,a,!0))}function je(e,t,n,o,r){return Kl(ie(e,t,n,o,r,!0))}function mr(e){return e?e.__v_isVNode===!0:!1}function un(e,t){return e.type===t.type&&e.key===t.key}const Cr="__vInternal",Yl=({key:e})=>e!=null?e:null,Jo=({ref:e,ref_key:t,ref_for:n})=>e!=null?De(e)||Ke(e)||he(e)?{i:Ge,r:e,k:t,f:!!n}:e:null;function le(e,t=null,n=null,o=0,r=null,a=e===Se?0:1,i=!1,c=!1){const s={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Yl(t),ref:t&&Jo(t),scopeId:Dr,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:a,patchFlag:o,dynamicProps:r,dynamicChildren:null,appContext:null};return c?(ri(s,n),a&128&&e.normalize(s)):n&&(s.shapeFlag|=De(n)?8:16),po>0&&!i&&pt&&(s.patchFlag>0||a&6)&&s.patchFlag!==32&&pt.push(s),s}const ie=ff;function ff(e,t=null,n=null,o=0,r=null,a=!1){if((!e||e===Ml)&&(e=it),mr(e)){const c=Gt(e,t,!0);return n&&ri(c,n),po>0&&!a&&pt&&(c.shapeFlag&6?pt[pt.indexOf(e)]=c:pt.push(c)),c.patchFlag|=-2,c}if(Pf(e)&&(e=e.__vccOpts),t){t=hf(t);let{class:c,style:s}=t;c&&!De(c)&&(t.class=Be(c)),Ve(s)&&(_l(s)&&!ce(s)&&(s=Ye({},s)),t.style=Eo(s))}const i=De(e)?1:xd(e)?128:mf(e)?64:Ve(e)?4:he(e)?2:0;return le(e,t,n,o,r,i,a,!0)}function hf(e){return e?_l(e)||Cr in e?Ye({},e):e:null}function Gt(e,t,n=!1){const{props:o,ref:r,patchFlag:a,children:i}=e,c=t?ba(o||{},t):o;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&Yl(c),ref:t&&t.ref?n&&r?ce(r)?r.concat(Jo(t)):[r,Jo(t)]:Jo(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Se?a===-1?16:a|16:a,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Gt(e.ssContent),ssFallback:e.ssFallback&&Gt(e.ssFallback),el:e.el,anchor:e.anchor}}function Xt(e=" ",t=0){return ie(ho,null,e,t)}function pf(e,t){const n=ie(no,null,e);return n.staticCount=t,n}function qe(e="",t=!1){return t?(N(),je(it,null,e)):ie(it,null,e)}function ft(e){return e==null||typeof e=="boolean"?ie(it):ce(e)?ie(Se,null,e.slice()):typeof e=="object"?Ut(e):ie(ho,null,String(e))}function Ut(e){return e.el===null||e.memo?e:Gt(e)}function ri(e,t){let n=0;const{shapeFlag:o}=e;if(t==null)t=null;else if(ce(t))n=16;else if(typeof t=="object")if(o&65){const r=t.default;r&&(r._c&&(r._d=!1),ri(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!(Cr in t)?t._ctx=Ge:r===3&&Ge&&(Ge.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else he(t)?(t={default:t,_ctx:Ge},n=32):(t=String(t),o&64?(n=16,t=[Xt(t)]):n=8);e.children=t,e.shapeFlag|=n}function ba(...e){const t={};for(let n=0;nze||Ge,Mn=e=>{ze=e,e.scope.on()},pn=()=>{ze&&ze.scope.off(),ze=null};function Jl(e){return e.vnode.shapeFlag&4}let $n=!1;function bf(e,t=!1){$n=t;const{props:n,children:o}=e.vnode,r=Jl(e);Xd(e,n,r,t),nf(e,o);const a=r?yf(e,t):void 0;return $n=!1,a}function yf(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=vl(new Proxy(e.ctx,Kd));const{setup:o}=n;if(o){const r=e.setupContext=o.length>1?wf(e):null;Mn(e),qn();const a=Jt(o,e,0,[e.props,r]);if(Vn(),pn(),ol(a)){if(a.then(pn,pn),t)return a.then(i=>{Ki(e,i,t)}).catch(i=>{Oo(i,e,0)});e.asyncDep=a}else Ki(e,a,t)}else Ql(e,t)}function Ki(e,t,n){he(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Ve(t)&&(e.setupState=wl(t)),Ql(e,n)}let Yi;function Ql(e,t,n){const o=e.type;if(!e.render){if(!t&&Yi&&!o.render){const r=o.template;if(r){const{isCustomElement:a,compilerOptions:i}=e.appContext.config,{delimiters:c,compilerOptions:s}=o,l=Ye(Ye({isCustomElement:a,delimiters:c},i),s);o.render=Yi(r,l)}}e.render=o.render||_t}Mn(e),qn(),Yd(e),Vn(),pn()}function Ef(e){return new Proxy(e.attrs,{get(t,n){return ct(e,"get","$attrs"),t[n]}})}function wf(e){const t=o=>{e.exposed=o||{}};let n;return{get attrs(){return n||(n=Ef(e))},slots:e.slots,emit:e.emit,expose:t}}function Mr(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(wl(vl(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in sr)return sr[n](e)}}))}function Of(e,t=!0){return he(e)?e.displayName||e.name:e.name||t&&e.__name}function Pf(e){return he(e)&&"__vccOpts"in e}const Z=(e,t)=>yd(e,t,$n);function Te(e,t,n){const o=arguments.length;return o===2?Ve(t)&&!ce(t)?mr(t)?ie(e,null,[t]):ie(e,t):ie(e,null,t):(o>3?n=Array.prototype.slice.call(arguments,2):o===3&&mr(n)&&(n=[n]),ie(e,t,n))}const Sf="3.2.38",Af="http://www.w3.org/2000/svg",mn=typeof document<"u"?document:null,Ji=mn&&mn.createElement("template"),Tf={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,o)=>{const r=t?mn.createElementNS(Af,e):mn.createElement(e,n?{is:n}:void 0);return e==="select"&&o&&o.multiple!=null&&r.setAttribute("multiple",o.multiple),r},createText:e=>mn.createTextNode(e),createComment:e=>mn.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>mn.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},cloneNode(e){const t=e.cloneNode(!0);return"_value"in e&&(t._value=e._value),t},insertStaticContent(e,t,n,o,r,a){const i=n?n.previousSibling:t.lastChild;if(r&&(r===a||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===a||!(r=r.nextSibling)););else{Ji.innerHTML=o?`${e}`:e;const c=Ji.content;if(o){const s=c.firstChild;for(;s.firstChild;)c.appendChild(s.firstChild);c.removeChild(s)}t.insertBefore(c,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function If(e,t,n){const o=e._vtc;o&&(t=(t?[t,...o]:[...o]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function Lf(e,t,n){const o=e.style,r=De(n);if(n&&!r){for(const a in n)ya(o,a,n[a]);if(t&&!De(t))for(const a in t)n[a]==null&&ya(o,a,"")}else{const a=o.display;r?t!==n&&(o.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(o.display=a)}}const Qi=/\s*!important$/;function ya(e,t,n){if(ce(n))n.forEach(o=>ya(e,t,o));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const o=Df(e,t);Qi.test(n)?e.setProperty(_n(o),n.replace(Qi,""),"important"):e[o]=n}}const Gi=["Webkit","Moz","ms"],Ur={};function Df(e,t){const n=Ur[t];if(n)return n;let o=It(t);if(o!=="filter"&&o in e)return Ur[t]=o;o=Ar(o);for(let r=0;r{let e=Date.now,t=!1;if(typeof window<"u"){Date.now()>document.createEvent("Event").timeStamp&&(e=performance.now.bind(performance));const n=navigator.userAgent.match(/firefox\/(\d+)/i);t=!!(n&&Number(n[1])<=53)}return[e,t]})();let Ea=0;const Cf=Promise.resolve(),Mf=()=>{Ea=0},$f=()=>Ea||(Cf.then(Mf),Ea=Gl());function On(e,t,n,o){e.addEventListener(t,n,o)}function jf(e,t,n,o){e.removeEventListener(t,n,o)}function Hf(e,t,n,o,r=null){const a=e._vei||(e._vei={}),i=a[t];if(o&&i)i.value=o;else{const[c,s]=qf(t);if(o){const l=a[t]=Vf(o,r);On(e,c,l,s)}else i&&(jf(e,c,i,s),a[t]=void 0)}}const Xi=/(?:Once|Passive|Capture)$/;function qf(e){let t;if(Xi.test(e)){t={};let o;for(;o=e.match(Xi);)e=e.slice(0,e.length-o[0].length),t[o[0].toLowerCase()]=!0}return[e[2]===":"?e.slice(3):_n(e.slice(2)),t]}function Vf(e,t){const n=o=>{const r=o.timeStamp||Gl();(xf||r>=n.attached-1)&&ut(Nf(o,n.value),t,5,[o])};return n.value=e,n.attached=$f(),n}function Nf(e,t){if(ce(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(o=>r=>!r._stopped&&o&&o(r))}else return t}const ec=/^on[a-z]/,Ff=(e,t,n,o,r=!1,a,i,c,s)=>{t==="class"?If(e,o,r):t==="style"?Lf(e,n,o):wo(t)?Na(t)||Hf(e,t,n,o,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Bf(e,t,o,r))?kf(e,t,o,a,i,c,s):(t==="true-value"?e._trueValue=o:t==="false-value"&&(e._falseValue=o),Rf(e,t,o,r))};function Bf(e,t,n,o){return o?!!(t==="innerHTML"||t==="textContent"||t in e&&ec.test(t)&&he(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||ec.test(t)&&De(n)?!1:t in e}const Bt="transition",Un="animation",Ao=(e,{slots:t})=>Te(Rl,zf(e),t);Ao.displayName="Transition";const Zl={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};Ao.props=Ye({},Rl.props,Zl);const tn=(e,t=[])=>{ce(e)?e.forEach(n=>n(...t)):e&&e(...t)},tc=e=>e?ce(e)?e.some(t=>t.length>1):e.length>1:!1;function zf(e){const t={};for(const S in e)S in Zl||(t[S]=e[S]);if(e.css===!1)return t;const{name:n="v",type:o,duration:r,enterFromClass:a=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:c=`${n}-enter-to`,appearFromClass:s=a,appearActiveClass:l=i,appearToClass:u=c,leaveFromClass:m=`${n}-leave-from`,leaveActiveClass:d=`${n}-leave-active`,leaveToClass:f=`${n}-leave-to`}=e,v=Uf(r),g=v&&v[0],b=v&&v[1],{onBeforeEnter:p,onEnter:y,onEnterCancelled:P,onLeave:A,onLeaveCancelled:D,onBeforeAppear:q=p,onAppear:R=y,onAppearCancelled:E=P}=t,z=(S,T,k)=>{nn(S,T?u:c),nn(S,T?l:i),k&&k()},Y=(S,T)=>{S._isLeaving=!1,nn(S,m),nn(S,f),nn(S,d),T&&T()},j=S=>(T,k)=>{const M=S?R:y,$=()=>z(T,S,k);tn(M,[T,$]),nc(()=>{nn(T,S?s:a),zt(T,S?u:c),tc(M)||oc(T,o,g,$)})};return Ye(t,{onBeforeEnter(S){tn(p,[S]),zt(S,a),zt(S,i)},onBeforeAppear(S){tn(q,[S]),zt(S,s),zt(S,l)},onEnter:j(!1),onAppear:j(!0),onLeave(S,T){S._isLeaving=!0;const k=()=>Y(S,T);zt(S,m),Yf(),zt(S,d),nc(()=>{!S._isLeaving||(nn(S,m),zt(S,f),tc(A)||oc(S,o,b,k))}),tn(A,[S,k])},onEnterCancelled(S){z(S,!1),tn(P,[S])},onAppearCancelled(S){z(S,!0),tn(E,[S])},onLeaveCancelled(S){Y(S),tn(D,[S])}})}function Uf(e){if(e==null)return null;if(Ve(e))return[Wr(e.enter),Wr(e.leave)];{const t=Wr(e);return[t,t]}}function Wr(e){return or(e)}function zt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function nn(e,t){t.split(/\s+/).forEach(o=>o&&e.classList.remove(o));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function nc(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Wf=0;function oc(e,t,n,o){const r=e._endId=++Wf,a=()=>{r===e._endId&&o()};if(n)return setTimeout(a,n);const{type:i,timeout:c,propCount:s}=Kf(e,t);if(!i)return o();const l=i+"end";let u=0;const m=()=>{e.removeEventListener(l,d),a()},d=f=>{f.target===e&&++u>=s&&m()};setTimeout(()=>{u(n[v]||"").split(", "),r=o(Bt+"Delay"),a=o(Bt+"Duration"),i=rc(r,a),c=o(Un+"Delay"),s=o(Un+"Duration"),l=rc(c,s);let u=null,m=0,d=0;t===Bt?i>0&&(u=Bt,m=i,d=a.length):t===Un?l>0&&(u=Un,m=l,d=s.length):(m=Math.max(i,l),u=m>0?i>l?Bt:Un:null,d=u?u===Bt?a.length:s.length:0);const f=u===Bt&&/\b(transform|all)(,|$)/.test(n[Bt+"Property"]);return{type:u,timeout:m,propCount:d,hasTransform:f}}function rc(e,t){for(;e.lengthac(n)+ac(e[o])))}function ac(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function Yf(){return document.body.offsetHeight}const ic=e=>{const t=e.props["onUpdate:modelValue"]||!1;return ce(t)?n=>Yo(t,n):t};function Jf(e){e.target.composing=!0}function cc(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Qf={created(e,{modifiers:{lazy:t,trim:n,number:o}},r){e._assign=ic(r);const a=o||r.props&&r.props.type==="number";On(e,t?"change":"input",i=>{if(i.target.composing)return;let c=e.value;n&&(c=c.trim()),a&&(c=or(c)),e._assign(c)}),n&&On(e,"change",()=>{e.value=e.value.trim()}),t||(On(e,"compositionstart",Jf),On(e,"compositionend",cc),On(e,"change",cc))},mounted(e,{value:t}){e.value=t==null?"":t},beforeUpdate(e,{value:t,modifiers:{lazy:n,trim:o,number:r}},a){if(e._assign=ic(a),e.composing||document.activeElement===e&&e.type!=="range"&&(n||o&&e.value.trim()===t||(r||e.type==="number")&&or(e.value)===t))return;const i=t==null?"":t;e.value!==i&&(e.value=i)}},Gf={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},Zf=(e,t)=>n=>{if(!("key"in n))return;const o=_n(n.key);if(t.some(r=>r===o||Gf[r]===o))return e(n)},dr={beforeMount(e,{value:t},{transition:n}){e._vod=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):Wn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:o}){!t!=!n&&(o?t?(o.beforeEnter(e),Wn(e,!0),o.enter(e)):o.leave(e,()=>{Wn(e,!1)}):Wn(e,t))},beforeUnmount(e,{value:t}){Wn(e,t)}};function Wn(e,t){e.style.display=t?e._vod:"none"}const Xf=Ye({patchProp:Ff},Tf);let Kr,sc=!1;function eh(){return Kr=sc?Kr:sf(Xf),sc=!0,Kr}const th=(...e)=>{const t=eh().createApp(...e),{mount:n}=t;return t.mount=o=>{const r=nh(o);if(r)return n(r,!0,r instanceof SVGElement)},t};function nh(e){return De(e)?document.querySelector(e):e}const oh=JSON.parse('{"base":"/","lang":"en-US","title":"arthas","description":"arthas user document","head":[["link",{"rel":"icon","href":"/images/favicon.ico"}],["meta",{"name":"viewport","content":"width=device-width, initial-scale=1.0"}],["meta",{"property":"og:title","content":"Arthas"}],["meta",{"property":"og:image:alt","content":"Alibaba Java Diagnostic Tool Arthas/Alibaba Java\u8BCA\u65AD\u5229\u5668Arthas - alibaba/arthas: Alibaba Java Diagnostic Tool Arthas/Alibaba Java\u8BCA\u65AD\u5229\u5668Arthas"}],["meta",{"property":"og:image","content":"/images/arthas_mate_image.png"}],["meta",{"property":"og:description","content":"Alibaba Java Diagnostic Tool Arthas/Alibaba Java\u8BCA\u65AD\u5229\u5668Arthas - alibaba/arthas: Alibaba Java Diagnostic Tool Arthas/Alibaba Java\u8BCA\u65AD\u5229\u5668Arthas"}],["meta",{"property":"og:image:width","content":"1200"}],["meta",{"property":"og:image:height","content":"600"}],["meta",{"property":"twitter:image:src","content":"/images/arthas_mate_image.png"}],["meta",{"property":"twitter:image:alt","content":"Alibaba Java Diagnostic Tool Arthas/Alibaba Java\u8BCA\u65AD\u5229\u5668Arthas - alibaba/arthas: Alibaba Java Diagnostic Tool Arthas/Alibaba Java\u8BCA\u65AD\u5229\u5668Arthas"}],["meta",{"itemprop":"name","content":"Arthas"}],["meta",{"itemprop":"image","content":"/images/arthas_mate_image.png"}],["meta",{"itemprop":"description","content":"Alibaba Java Diagnostic Tool Arthas/Alibaba Java\u8BCA\u65AD\u5229\u5668Arthas - alibaba/arthas: Alibaba Java Diagnostic Tool Arthas/Alibaba Java\u8BCA\u65AD\u5229\u5668Arthas"}],["script",{},"\\n var _hmt = _hmt || [];\\n (function() {\\n var hm = document.createElement(\\"script\\");\\n hm.src = \\"https://hm.baidu.com/hm.js?d5c5e25b100f0eb51a4c35c8a86ea9b4\\";\\n var s = document.getElementsByTagName(\\"script\\")[0]; \\n s.parentNode.insertBefore(hm, s);\\n })();\\n "],["meta",{"name":"aes-config","content":"pid=xux-opensource&user_type=101&uid=&username=&dim10=arthas"}],["script",{"src":"//g.alicdn.com/alilog/mlog/aplus_v2.js","id":"beacon-aplus","exparams":"clog=o&aplus&sidx=aplusSidx&ckx=aplusCkx"}],["script",{"src":"//g.alicdn.com/aes/??tracker/1.0.34/index.js,tracker-plugin-pv/2.4.5/index.js,tracker-plugin-event/1.2.5/index.js,tracker-plugin-jserror/1.0.13/index.js,tracker-plugin-api/1.1.14/index.js,tracker-plugin-perf/1.1.8/index.js,tracker-plugin-eventTiming/1.0.4/index.js"}]],"locales":{"/":{"lang":"zh-CN","title":"arthas","description":"arthas \u4F7F\u7528\u6587\u6863"},"/en/":{"lang":"en-US","title":"arthas","description":"arthas user document"}}}');var rh=([e,t,n])=>e==="meta"&&t.name?`${e}.${t.name}`:["title","base"].includes(e)?e:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,t,n]),ah=e=>{const t=new Set,n=[];return e.forEach(o=>{const r=rh(o);t.has(r)||(t.add(r),n.push(o))}),n},To=e=>/^(https?:)?\/\//.test(e),ih=e=>/^mailto:/.test(e),ch=e=>/^tel:/.test(e),ii=e=>Object.prototype.toString.call(e)==="[object Object]",Xl=e=>e.replace(/\/$/,""),eu=e=>e.replace(/^\//,""),tu=(e,t)=>{const n=Object.keys(e).sort((o,r)=>{const a=r.split("/").length-o.split("/").length;return a!==0?a:r.length-o.length});for(const o of n)if(t.startsWith(o))return o;return"/"},lc=(e,t="/")=>e.replace(/^(https?:)?\/\/[^/]*/,"").replace(new RegExp(`^${t}`),"/");const nu={"v-8daa1a0e":L(()=>h(()=>import("./index.html.5332fd62.js"),[])),"v-2d0a870d":L(()=>h(()=>import("./index.html.74bff2cf.js"),[])),"v-7445f070":L(()=>h(()=>import("./index.html.58d0a509.js"),["assets/index.html.58d0a509.js","assets/arthas.b23d3e5a.js"])),"v-0d09f68d":L(()=>h(()=>import("./advanced-use.html.ce7d6f5f.js"),[])),"v-46e53834":L(()=>h(()=>import("./advice-class.html.0437560f.js"),[])),"v-37178538":L(()=>h(()=>import("./agent.html.bb83a7be.js"),[])),"v-71d23f41":L(()=>h(()=>import("./ai.html.eea262b3.js"),[])),"v-5c517900":L(()=>h(()=>import("./arthas-properties.html.4827d4b8.js"),[])),"v-02eb6d0d":L(()=>h(()=>import("./arthas3.html.8d4e3261.js"),[])),"v-4f82df66":L(()=>h(()=>import("./async.html.b03735d9.js"),[])),"v-d0358c7e":L(()=>h(()=>import("./auth.html.4c6c9a22.js"),[])),"v-3157067a":L(()=>h(()=>import("./base64.html.ba24ac32.js"),[])),"v-cc8f4ae6":L(()=>h(()=>import("./batch-support.html.6d0dd4ad.js"),[])),"v-6542b733":L(()=>h(()=>import("./cat.html.2fba4fba.js"),[])),"v-d6087b6c":L(()=>h(()=>import("./classloader-metaspace.html.2959f628.js"),[])),"v-49b1709e":L(()=>h(()=>import("./classloader.html.885df726.js"),[])),"v-ad1b2b42":L(()=>h(()=>import("./cls.html.454065a9.js"),[])),"v-5ed4d0e1":L(()=>h(()=>import("./commands.html.3ba84332.js"),[])),"v-3992adde":L(()=>h(()=>import("./contact-us.html.f45ccfc1.js"),["assets/contact-us.html.f45ccfc1.js","assets/qqgroup3_qr.a24fdd88.js"])),"v-0d1e3f35":L(()=>h(()=>import("./dashboard.html.b6965a28.js"),["assets/dashboard.html.b6965a28.js","assets/dashboard.eb1e1fee.js"])),"v-02361049":L(()=>h(()=>import("./docker.html.a457bc6d.js"),[])),"v-2116d2e1":L(()=>h(()=>import("./download.html.96b3e09e.js"),[])),"v-1fe4a616":L(()=>h(()=>import("./dump.html.68dd64e1.js"),[])),"v-2c48f364":L(()=>h(()=>import("./echo.html.42bccc7b.js"),[])),"v-6a3a70c0":L(()=>h(()=>import("./external-command.html.16e594f3.js"),[])),"v-d070981a":L(()=>h(()=>import("./faq.html.5b15bab7.js"),[])),"v-78c35af6":L(()=>h(()=>import("./getstatic.html.bb912d8f.js"),[])),"v-63f4cd5a":L(()=>h(()=>import("./grep.html.c6a57b9b.js"),[])),"v-809381ca":L(()=>h(()=>import("./groovy.html.fc87055f.js"),[])),"v-07868089":L(()=>h(()=>import("./heapdump.html.7a6011ee.js"),[])),"v-e3b34070":L(()=>h(()=>import("./help.html.1c79c4bb.js"),[])),"v-26f43d96":L(()=>h(()=>import("./history.html.5ac8e7b1.js"),[])),"v-225de034":L(()=>h(()=>import("./http-api.html.a397734f.js"),["assets/http-api.html.a397734f.js","assets/arthas-web-ui.89f4fc6d.js"])),"v-7c670020":L(()=>h(()=>import("./idea-plugin.html.ccb84f96.js"),[])),"v-0cb398f4":L(()=>h(()=>import("./install-detail.html.0520b8fe.js"),[])),"v-211d675c":L(()=>h(()=>import("./jad.html.eb7a2926.js"),[])),"v-41806853":L(()=>h(()=>import("./jfr.html.b9abd2e5.js"),["assets/jfr.html.b9abd2e5.js","assets/arthas-output-recording.5e4ef7bc.js"])),"v-f1483d70":L(()=>h(()=>import("./jvm.html.9c086903.js"),[])),"v-4039cdec":L(()=>h(()=>import("./keymap.html.1f91f840.js"),[])),"v-54781216":L(()=>h(()=>import("./line.html.57fda898.js"),[])),"v-5ae8aed9":L(()=>h(()=>import("./logger.html.2c243abb.js"),[])),"v-6a31cc55":L(()=>h(()=>import("./manual-install.html.0447e151.js"),[])),"v-8ebd6c68":L(()=>h(()=>import("./mbean.html.c8caf62f.js"),[])),"v-3b401ada":L(()=>h(()=>import("./mc.html.3c57e00d.js"),[])),"v-67bc6553":L(()=>h(()=>import("./mcp-server.html.675136b6.js"),[])),"v-4d9433f0":L(()=>h(()=>import("./memory.html.492ae9d3.js"),[])),"v-6e88d7a2":L(()=>h(()=>import("./monitor.html.78686d08.js"),[])),"v-627e52da":L(()=>h(()=>import("./ognl.html.7836f77d.js"),[])),"v-27b6152a":L(()=>h(()=>import("./options.html.c70226da.js"),[])),"v-2f05b636":L(()=>h(()=>import("./perfcounter.html.19590f54.js"),[])),"v-13eae420":L(()=>h(()=>import("./profiler.html.fd3324a8.js"),["assets/profiler.html.fd3324a8.js","assets/arthas-output-svg.30f64f53.js"])),"v-1c2d8c2c":L(()=>h(()=>import("./pwd.html.f8e10ae4.js"),[])),"v-5afc3a07":L(()=>h(()=>import("./quick-start.html.687d975b.js"),[])),"v-aa7c750c":L(()=>h(()=>import("./quit.html.515a6f81.js"),[])),"v-0446ad7b":L(()=>h(()=>import("./redefine.html.7b61fdfa.js"),[])),"v-648880ae":L(()=>h(()=>import("./release-notes.html.0eb362a1.js"),[])),"v-71f77d4c":L(()=>h(()=>import("./reset.html.538a5ab2.js"),[])),"v-54cde250":L(()=>h(()=>import("./retransform.html.b4cdf8c0.js"),[])),"v-8e632816":L(()=>h(()=>import("./save-log.html.02816c57.js"),[])),"v-1fc55619":L(()=>h(()=>import("./sc.html.3b5ef46c.js"),[])),"v-3891b473":L(()=>h(()=>import("./session.html.a83717c2.js"),[])),"v-30d5cc4f":L(()=>h(()=>import("./sm.html.8bd93288.js"),[])),"v-07cf9d55":L(()=>h(()=>import("./spring-boot-starter.html.4d61e938.js"),[])),"v-b75a107e":L(()=>h(()=>import("./stack.html.5eeaffe9.js"),[])),"v-a9c412f2":L(()=>h(()=>import("./start-arthas.html.19401c09.js"),[])),"v-bc0910b2":L(()=>h(()=>import("./stop.html.150a6560.js"),[])),"v-0333612e":L(()=>h(()=>import("./sysenv.html.0c3d74c0.js"),[])),"v-7012b8ce":L(()=>h(()=>import("./sysprop.html.bd1fe463.js"),[])),"v-0536edb5":L(()=>h(()=>import("./tee.html.14530271.js"),[])),"v-10845ac2":L(()=>h(()=>import("./thread.html.3d486268.js"),[])),"v-65d67724":L(()=>h(()=>import("./trace.html.2d811f32.js"),[])),"v-71adf3e9":L(()=>h(()=>import("./tt.html.f4a8867b.js"),[])),"v-d2ddc9fe":L(()=>h(()=>import("./tunnel.html.244face9.js"),["assets/tunnel.html.244face9.js","assets/tunnel-server-agents.03d5eafa.js"])),"v-5b5d3371":L(()=>h(()=>import("./version.html.76793579.js"),[])),"v-40db67fd":L(()=>h(()=>import("./vmoption.html.2893cc9a.js"),[])),"v-10890efa":L(()=>h(()=>import("./vmtool.html.cf122534.js"),[])),"v-24fc49da":L(()=>h(()=>import("./watch.html.bed23820.js"),[])),"v-a5f6e7aa":L(()=>h(()=>import("./web-console.html.17603cf0.js"),["assets/web-console.html.17603cf0.js","assets/web-console-local.156ba0ce.js"])),"v-07555a84":L(()=>h(()=>import("./index.html.8c8f4e7a.js"),["assets/index.html.8c8f4e7a.js","assets/arthas.b23d3e5a.js"])),"v-463d120e":L(()=>h(()=>import("./advanced-use.html.cf065376.js"),[])),"v-a736375c":L(()=>h(()=>import("./advice-class.html.d491abce.js"),[])),"v-f6b5c310":L(()=>h(()=>import("./agent.html.c6c0324b.js"),[])),"v-7a0f16ad":L(()=>h(()=>import("./ai.html.77daefd0.js"),[])),"v-74fb2694":L(()=>h(()=>import("./arthas-properties.html.79bcd7b4.js"),[])),"v-786f7161":L(()=>h(()=>import("./async.html.1e360242.js"),[])),"v-f76c33a6":L(()=>h(()=>import("./auth.html.a546b6c7.js"),[])),"v-d17b7034":L(()=>h(()=>import("./base64.html.e2a165a5.js"),[])),"v-765e30be":L(()=>h(()=>import("./batch-support.html.d25cc58d.js"),[])),"v-64a0cd47":L(()=>h(()=>import("./cat.html.294a7128.js"),[])),"v-6e8ffb5e":L(()=>h(()=>import("./classloader-metaspace.html.53200b46.js"),[])),"v-fc1b9a9c":L(()=>h(()=>import("./classloader.html.fe574e27.js"),[])),"v-ae5eff1a":L(()=>h(()=>import("./cls.html.73fb0901.js"),[])),"v-12153166":L(()=>h(()=>import("./commands.html.26baabfd.js"),[])),"v-4be7594a":L(()=>h(()=>import("./contact-us.html.490c3a5d.js"),["assets/contact-us.html.490c3a5d.js","assets/qqgroup3_qr.a24fdd88.js"])),"v-79107649":L(()=>h(()=>import("./dashboard.html.9ad443d2.js"),["assets/dashboard.html.9ad443d2.js","assets/dashboard.eb1e1fee.js"])),"v-682151b5":L(()=>h(()=>import("./docker.html.27b15072.js"),[])),"v-8d912d66":L(()=>h(()=>import("./download.html.336d4739.js"),[])),"v-471b4d3e":L(()=>h(()=>import("./dump.html.f81dadc5.js"),[])),"v-18ad9fd0":L(()=>h(()=>import("./echo.html.6baec513.js"),[])),"v-ef7849a8":L(()=>h(()=>import("./external-command.html.07feb147.js"),[])),"v-d1b46bf2":L(()=>h(()=>import("./faq.html.7de57ec6.js"),[])),"v-2f908999":L(()=>h(()=>import("./getstatic.html.36841961.js"),[])),"v-8b2b7482":L(()=>h(()=>import("./grep.html.57324644.js"),[])),"v-25a18087":L(()=>h(()=>import("./groovy.html.4ef1e7fc.js"),[])),"v-c0b1d216":L(()=>h(()=>import("./heapdump.html.0ba3823c.js"),[])),"v-7a8b0c34":L(()=>h(()=>import("./help.html.c94858ab.js"),[])),"v-4402cd49":L(()=>h(()=>import("./history.html.5487cd70.js"),[])),"v-8b0312c0":L(()=>h(()=>import("./http-api.html.fd0631ff.js"),["assets/http-api.html.fd0631ff.js","assets/arthas-web-ui.89f4fc6d.js"])),"v-96b07b98":L(()=>h(()=>import("./idea-plugin.html.9ba5ce05.js"),[])),"v-319f48f2":L(()=>h(()=>import("./install-detail.html.43202623.js"),[])),"v-207b7d70":L(()=>h(()=>import("./jad.html.e5676fd2.js"),[])),"v-40de7e67":L(()=>h(()=>import("./jfr.html.5ac2287e.js"),["assets/jfr.html.5ac2287e.js","assets/arthas-output-recording.5e4ef7bc.js"])),"v-f28c1148":L(()=>h(()=>import("./jvm.html.ff68b164.js"),[])),"v-b3b5e150":L(()=>h(()=>import("./keymap.html.caa095a2.js"),[])),"v-7baeb93e":L(()=>h(()=>import("./line.html.7a5cbdbd.js"),[])),"v-7e581f76":L(()=>h(()=>import("./logger.html.71a07287.js"),[])),"v-bbaa3c7e":L(()=>h(()=>import("./manual-install.html.c8373a08.js"),[])),"v-58d22ae0":L(()=>h(()=>import("./mbean.html.9eaf227e.js"),[])),"v-2ac66c02":L(()=>h(()=>import("./mc.html.f537545c.js"),[])),"v-7a1110bf":L(()=>h(()=>import("./mcp-server.html.d0555bb2.js"),[])),"v-3f212774":L(()=>h(()=>import("./memory.html.4cb5296e.js"),[])),"v-20388043":L(()=>h(()=>import("./monitor.html.4f1f94d6.js"),[])),"v-89b4fa02":L(()=>h(()=>import("./ognl.html.075b13f3.js"),[])),"v-43a1e17f":L(()=>h(()=>import("./options.html.144916f6.js"),[])),"v-6746784a":L(()=>h(()=>import("./perfcounter.html.0dc8c8a4.js"),[])),"v-a7e90ae8":L(()=>h(()=>import("./profiler.html.887a8a7c.js"),["assets/profiler.html.887a8a7c.js","assets/arthas-output-svg.30f64f53.js"])),"v-1b8ba240":L(()=>h(()=>import("./pwd.html.9c033639.js"),[])),"v-d98607ca":L(()=>h(()=>import("./quick-start.html.4adf7a28.js"),[])),"v-d1b31c34":L(()=>h(()=>import("./quit.html.dcd270e6.js"),[])),"v-c7317832":L(()=>h(()=>import("./redefine.html.f31e034f.js"),[])),"v-e0bde47c":L(()=>h(()=>import("./release-notes.html.d64bcf20.js"),[])),"v-6735226e":L(()=>h(()=>import("./reset.html.86808cc2.js"),[])),"v-e5e2b738":L(()=>h(()=>import("./retransform.html.7800567a.js"),[])),"v-50ef0261":L(()=>h(()=>import("./save-log.html.19fe32a1.js"),[])),"v-28022d85":L(()=>h(()=>import("./sc.html.98f7cc34.js"),[])),"v-dfe2bef2":L(()=>h(()=>import("./session.html.aac6a451.js"),[])),"v-3912a3bb":L(()=>h(()=>import("./sm.html.a2e231e6.js"),[])),"v-71870b69":L(()=>h(()=>import("./spring-boot-starter.html.e05dbeb5.js"),[])),"v-4483d8d5":L(()=>h(()=>import("./stack.html.7399ec24.js"),[])),"v-7af576f3":L(()=>h(()=>import("./start-arthas.html.643bd996.js"),[])),"v-e33fb7da":L(()=>h(()=>import("./stop.html.b32333b4.js"),[])),"v-645190d5":L(()=>h(()=>import("./sysenv.html.190ccd25.js"),[])),"v-1f738fad":L(()=>h(()=>import("./sysprop.html.c463bcd7.js"),[])),"v-049503c9":L(()=>h(()=>import("./tee.html.26f3bf83.js"),[])),"v-5da9140b":L(()=>h(()=>import("./thread.html.553b1dd3.js"),[])),"v-06075838":L(()=>h(()=>import("./trace.html.f4675ea7.js"),[])),"v-79eacb55":L(()=>h(()=>import("./tt.html.53706e22.js"),[])),"v-07074726":L(()=>h(()=>import("./tunnel.html.0c3c205b.js"),["assets/tunnel.html.0c3c205b.js","assets/tunnel-server-agents.03d5eafa.js"])),"v-9a4bc0f6":L(()=>h(()=>import("./version.html.7908d9e9.js"),[])),"v-4e08032e":L(()=>h(()=>import("./vmoption.html.5081a863.js"),[])),"v-76745066":L(()=>h(()=>import("./vmtool.html.a0367808.js"),[])),"v-75a5aa24":L(()=>h(()=>import("./watch.html.fadb694e.js"),[])),"v-35756382":L(()=>h(()=>import("./web-console.html.8abc2cdc.js"),["assets/web-console.html.8abc2cdc.js","assets/web-console-local.156ba0ce.js"])),"v-3706649a":L(()=>h(()=>import("./404.html.0f0756d7.js"),[]))};var Dt=(e={})=>e;function ci(e,t,n){var o,r,a;t===void 0&&(t=50),n===void 0&&(n={});var i=(o=n.isImmediate)!=null&&o,c=(r=n.callback)!=null&&r,s=n.maxWait,l=Date.now(),u=[];function m(){if(s!==void 0){var f=Date.now()-l;if(f+t>=s)return s-f}return t}var d=function(){var f=[].slice.call(arguments),v=this;return new Promise(function(g,b){var p=i&&a===void 0;if(a!==void 0&&clearTimeout(a),a=setTimeout(function(){if(a=void 0,l=Date.now(),!i){var P=e.apply(v,f);c&&c(P),u.forEach(function(A){return(0,A.resolve)(P)}),u=[]}},m()),p){var y=e.apply(v,f);return c&&c(y),g(y)}u.push({resolve:g,reject:b})})};return d.cancel=function(f){a!==void 0&&clearTimeout(a),u.forEach(function(v){return(0,v.reject)(f)}),u=[]},d}const uc=()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,sh=()=>window.scrollTo({top:0,behavior:"smooth"});const lh=Ne({name:"BackToTop",setup(){const e=Ie(0),t=Z(()=>e.value>300),n=ci(()=>{e.value=uc()},100);tt(()=>{e.value=uc(),window.addEventListener("scroll",()=>n())});const o=Te("div",{class:"back-to-top",onClick:sh});return()=>Te(Ao,{name:"back-to-top"},()=>t.value?o:null)}}),uh=Dt({rootComponents:[lh]});const mh=Te("svg",{class:"external-link-icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[Te("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),Te("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),dh=Ne({name:"ExternalLinkIcon",props:{locales:{type:Object,required:!1,default:()=>({})}},setup(e){const t=Bn(),n=Z(()=>{var o;return(o=e.locales[t.value])!=null?o:{openInNewWindow:"open in new window"}});return()=>Te("span",[mh,Te("span",{class:"external-link-icon-sr-only"},n.value.openInNewWindow)])}}),fh={"/":{openInNewWindow:"\u5728\u65B0\u7A97\u53E3\u6253\u5F00"},"/en/":{openInNewWindow:"open in new window"}},hh=Dt({enhance({app:e}){e.component("ExternalLinkIcon",Te(dh,{locales:fh}))}});/*! medium-zoom 1.0.6 | MIT License | https://github.com/francoischalifour/medium-zoom */var cn=Object.assign||function(e){for(var t=1;t{if(r=Sm(r),r in Ai)return;Ai[r]=!0;const a=r.endsWith(".css"),i=a?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${r}"]${i}`))return;const c=document.createElement("link");if(c.rel=a?"stylesheet":Pm,a||(c.as="script",c.crossOrigin=""),c.href=r,document.head.appendChild(c),a)return new Promise((s,l)=>{c.addEventListener("load",s),c.addEventListener("error",()=>l(new Error(`Unable to preload CSS for ${r}`)))})})).then(()=>t())},Am={"v-8daa1a0e":()=>h(()=>import("./index.html.cd23e113.js"),[]).then(({data:e})=>e),"v-2d0a870d":()=>h(()=>import("./index.html.6dcd1531.js"),[]).then(({data:e})=>e),"v-7445f070":()=>h(()=>import("./index.html.787b4b50.js"),[]).then(({data:e})=>e),"v-0d09f68d":()=>h(()=>import("./advanced-use.html.2b80fa7d.js"),[]).then(({data:e})=>e),"v-46e53834":()=>h(()=>import("./advice-class.html.3778e1f2.js"),[]).then(({data:e})=>e),"v-37178538":()=>h(()=>import("./agent.html.55a8cd63.js"),[]).then(({data:e})=>e),"v-71d23f41":()=>h(()=>import("./ai.html.530e41ed.js"),[]).then(({data:e})=>e),"v-5c517900":()=>h(()=>import("./arthas-properties.html.1c61e69c.js"),[]).then(({data:e})=>e),"v-02eb6d0d":()=>h(()=>import("./arthas3.html.11401e69.js"),[]).then(({data:e})=>e),"v-4f82df66":()=>h(()=>import("./async.html.89c66164.js"),[]).then(({data:e})=>e),"v-d0358c7e":()=>h(()=>import("./auth.html.10e5d242.js"),[]).then(({data:e})=>e),"v-3157067a":()=>h(()=>import("./base64.html.26159b8a.js"),[]).then(({data:e})=>e),"v-cc8f4ae6":()=>h(()=>import("./batch-support.html.2f7463e9.js"),[]).then(({data:e})=>e),"v-6542b733":()=>h(()=>import("./cat.html.317b776a.js"),[]).then(({data:e})=>e),"v-d6087b6c":()=>h(()=>import("./classloader-metaspace.html.1c3e8440.js"),[]).then(({data:e})=>e),"v-49b1709e":()=>h(()=>import("./classloader.html.3876b1e0.js"),[]).then(({data:e})=>e),"v-ad1b2b42":()=>h(()=>import("./cls.html.60c40d73.js"),[]).then(({data:e})=>e),"v-5ed4d0e1":()=>h(()=>import("./commands.html.f93b9fc8.js"),[]).then(({data:e})=>e),"v-3992adde":()=>h(()=>import("./contact-us.html.f14b9ed1.js"),[]).then(({data:e})=>e),"v-0d1e3f35":()=>h(()=>import("./dashboard.html.f3712bf4.js"),[]).then(({data:e})=>e),"v-02361049":()=>h(()=>import("./docker.html.7291090b.js"),[]).then(({data:e})=>e),"v-2116d2e1":()=>h(()=>import("./download.html.1a63d650.js"),[]).then(({data:e})=>e),"v-1fe4a616":()=>h(()=>import("./dump.html.0eae962a.js"),[]).then(({data:e})=>e),"v-2c48f364":()=>h(()=>import("./echo.html.4b25719e.js"),[]).then(({data:e})=>e),"v-6a3a70c0":()=>h(()=>import("./external-command.html.9a47f025.js"),[]).then(({data:e})=>e),"v-d070981a":()=>h(()=>import("./faq.html.36186b06.js"),[]).then(({data:e})=>e),"v-78c35af6":()=>h(()=>import("./getstatic.html.99701f59.js"),[]).then(({data:e})=>e),"v-63f4cd5a":()=>h(()=>import("./grep.html.6ba4e7cd.js"),[]).then(({data:e})=>e),"v-809381ca":()=>h(()=>import("./groovy.html.6c982925.js"),[]).then(({data:e})=>e),"v-07868089":()=>h(()=>import("./heapdump.html.2cfa3407.js"),[]).then(({data:e})=>e),"v-e3b34070":()=>h(()=>import("./help.html.026cd72d.js"),[]).then(({data:e})=>e),"v-26f43d96":()=>h(()=>import("./history.html.9f5e30aa.js"),[]).then(({data:e})=>e),"v-225de034":()=>h(()=>import("./http-api.html.132670cd.js"),[]).then(({data:e})=>e),"v-7c670020":()=>h(()=>import("./idea-plugin.html.57e8f57c.js"),[]).then(({data:e})=>e),"v-0cb398f4":()=>h(()=>import("./install-detail.html.93881ff8.js"),[]).then(({data:e})=>e),"v-211d675c":()=>h(()=>import("./jad.html.49ef2409.js"),[]).then(({data:e})=>e),"v-41806853":()=>h(()=>import("./jfr.html.bab2ebee.js"),[]).then(({data:e})=>e),"v-f1483d70":()=>h(()=>import("./jvm.html.684dd27a.js"),[]).then(({data:e})=>e),"v-4039cdec":()=>h(()=>import("./keymap.html.96d9632d.js"),[]).then(({data:e})=>e),"v-54781216":()=>h(()=>import("./line.html.bfbf7f2b.js"),[]).then(({data:e})=>e),"v-5ae8aed9":()=>h(()=>import("./logger.html.3d035db4.js"),[]).then(({data:e})=>e),"v-6a31cc55":()=>h(()=>import("./manual-install.html.c9b06816.js"),[]).then(({data:e})=>e),"v-8ebd6c68":()=>h(()=>import("./mbean.html.0bf95e2b.js"),[]).then(({data:e})=>e),"v-3b401ada":()=>h(()=>import("./mc.html.e292ce83.js"),[]).then(({data:e})=>e),"v-67bc6553":()=>h(()=>import("./mcp-server.html.3cd2eec5.js"),[]).then(({data:e})=>e),"v-4d9433f0":()=>h(()=>import("./memory.html.a1b2b15c.js"),[]).then(({data:e})=>e),"v-6e88d7a2":()=>h(()=>import("./monitor.html.5a803975.js"),[]).then(({data:e})=>e),"v-dcfb9060":()=>h(()=>import("./ognl-express.html.f156515d.js"),[]).then(({data:e})=>e),"v-627e52da":()=>h(()=>import("./ognl.html.67f38565.js"),[]).then(({data:e})=>e),"v-27b6152a":()=>h(()=>import("./options.html.7de13b4f.js"),[]).then(({data:e})=>e),"v-2f05b636":()=>h(()=>import("./perfcounter.html.02a2f773.js"),[]).then(({data:e})=>e),"v-13eae420":()=>h(()=>import("./profiler.html.0cd67a30.js"),[]).then(({data:e})=>e),"v-1c2d8c2c":()=>h(()=>import("./pwd.html.fe379ca1.js"),[]).then(({data:e})=>e),"v-5afc3a07":()=>h(()=>import("./quick-start.html.4a4a854b.js"),[]).then(({data:e})=>e),"v-aa7c750c":()=>h(()=>import("./quit.html.e375b368.js"),[]).then(({data:e})=>e),"v-0446ad7b":()=>h(()=>import("./redefine.html.02b78145.js"),[]).then(({data:e})=>e),"v-648880ae":()=>h(()=>import("./release-notes.html.daaf684d.js"),[]).then(({data:e})=>e),"v-71f77d4c":()=>h(()=>import("./reset.html.334188fe.js"),[]).then(({data:e})=>e),"v-54cde250":()=>h(()=>import("./retransform.html.8ab36d20.js"),[]).then(({data:e})=>e),"v-8e632816":()=>h(()=>import("./save-log.html.6b300b97.js"),[]).then(({data:e})=>e),"v-1fc55619":()=>h(()=>import("./sc.html.7cdf140e.js"),[]).then(({data:e})=>e),"v-3891b473":()=>h(()=>import("./session.html.0168cb9d.js"),[]).then(({data:e})=>e),"v-30d5cc4f":()=>h(()=>import("./sm.html.fe572b7b.js"),[]).then(({data:e})=>e),"v-07cf9d55":()=>h(()=>import("./spring-boot-starter.html.89e33109.js"),[]).then(({data:e})=>e),"v-b75a107e":()=>h(()=>import("./stack.html.67e8e31b.js"),[]).then(({data:e})=>e),"v-a9c412f2":()=>h(()=>import("./start-arthas.html.6198e218.js"),[]).then(({data:e})=>e),"v-bc0910b2":()=>h(()=>import("./stop.html.c39fd416.js"),[]).then(({data:e})=>e),"v-0333612e":()=>h(()=>import("./sysenv.html.152ba8c4.js"),[]).then(({data:e})=>e),"v-7012b8ce":()=>h(()=>import("./sysprop.html.f03585de.js"),[]).then(({data:e})=>e),"v-0536edb5":()=>h(()=>import("./tee.html.dccc689b.js"),[]).then(({data:e})=>e),"v-10845ac2":()=>h(()=>import("./thread.html.c9f7c599.js"),[]).then(({data:e})=>e),"v-65d67724":()=>h(()=>import("./trace.html.05e818e5.js"),[]).then(({data:e})=>e),"v-71adf3e9":()=>h(()=>import("./tt.html.ec638e55.js"),[]).then(({data:e})=>e),"v-d2ddc9fe":()=>h(()=>import("./tunnel.html.5c03c09c.js"),[]).then(({data:e})=>e),"v-5b5d3371":()=>h(()=>import("./version.html.08321a1e.js"),[]).then(({data:e})=>e),"v-40db67fd":()=>h(()=>import("./vmoption.html.d219c85b.js"),[]).then(({data:e})=>e),"v-10890efa":()=>h(()=>import("./vmtool.html.b5c2a935.js"),[]).then(({data:e})=>e),"v-24fc49da":()=>h(()=>import("./watch.html.a9d6b6e1.js"),[]).then(({data:e})=>e),"v-a5f6e7aa":()=>h(()=>import("./web-console.html.7d232bc6.js"),[]).then(({data:e})=>e),"v-07555a84":()=>h(()=>import("./index.html.e6b12e55.js"),[]).then(({data:e})=>e),"v-463d120e":()=>h(()=>import("./advanced-use.html.5dddb9fa.js"),[]).then(({data:e})=>e),"v-a736375c":()=>h(()=>import("./advice-class.html.12568df6.js"),[]).then(({data:e})=>e),"v-f6b5c310":()=>h(()=>import("./agent.html.d7974fce.js"),[]).then(({data:e})=>e),"v-7a0f16ad":()=>h(()=>import("./ai.html.0d965d9d.js"),[]).then(({data:e})=>e),"v-74fb2694":()=>h(()=>import("./arthas-properties.html.962908f3.js"),[]).then(({data:e})=>e),"v-786f7161":()=>h(()=>import("./async.html.58415566.js"),[]).then(({data:e})=>e),"v-f76c33a6":()=>h(()=>import("./auth.html.9f2ff1c7.js"),[]).then(({data:e})=>e),"v-d17b7034":()=>h(()=>import("./base64.html.4b84930d.js"),[]).then(({data:e})=>e),"v-765e30be":()=>h(()=>import("./batch-support.html.2fd7dfc3.js"),[]).then(({data:e})=>e),"v-64a0cd47":()=>h(()=>import("./cat.html.8d80e219.js"),[]).then(({data:e})=>e),"v-6e8ffb5e":()=>h(()=>import("./classloader-metaspace.html.466bb431.js"),[]).then(({data:e})=>e),"v-fc1b9a9c":()=>h(()=>import("./classloader.html.3c2e72a7.js"),[]).then(({data:e})=>e),"v-ae5eff1a":()=>h(()=>import("./cls.html.8f3a5491.js"),[]).then(({data:e})=>e),"v-12153166":()=>h(()=>import("./commands.html.4d2820b1.js"),[]).then(({data:e})=>e),"v-4be7594a":()=>h(()=>import("./contact-us.html.f31aa912.js"),[]).then(({data:e})=>e),"v-79107649":()=>h(()=>import("./dashboard.html.1a8e32e4.js"),[]).then(({data:e})=>e),"v-682151b5":()=>h(()=>import("./docker.html.ab7f2873.js"),[]).then(({data:e})=>e),"v-8d912d66":()=>h(()=>import("./download.html.c5d48124.js"),[]).then(({data:e})=>e),"v-471b4d3e":()=>h(()=>import("./dump.html.24ea4d2e.js"),[]).then(({data:e})=>e),"v-18ad9fd0":()=>h(()=>import("./echo.html.fdda77b4.js"),[]).then(({data:e})=>e),"v-ef7849a8":()=>h(()=>import("./external-command.html.3e8d782b.js"),[]).then(({data:e})=>e),"v-d1b46bf2":()=>h(()=>import("./faq.html.188c09a3.js"),[]).then(({data:e})=>e),"v-2f908999":()=>h(()=>import("./getstatic.html.06e13f21.js"),[]).then(({data:e})=>e),"v-8b2b7482":()=>h(()=>import("./grep.html.831320e0.js"),[]).then(({data:e})=>e),"v-25a18087":()=>h(()=>import("./groovy.html.d70f2cba.js"),[]).then(({data:e})=>e),"v-c0b1d216":()=>h(()=>import("./heapdump.html.aa31b283.js"),[]).then(({data:e})=>e),"v-7a8b0c34":()=>h(()=>import("./help.html.66e76dc7.js"),[]).then(({data:e})=>e),"v-4402cd49":()=>h(()=>import("./history.html.62683097.js"),[]).then(({data:e})=>e),"v-8b0312c0":()=>h(()=>import("./http-api.html.a3d3ab18.js"),[]).then(({data:e})=>e),"v-96b07b98":()=>h(()=>import("./idea-plugin.html.ae6aa4f7.js"),[]).then(({data:e})=>e),"v-319f48f2":()=>h(()=>import("./install-detail.html.743978fa.js"),[]).then(({data:e})=>e),"v-207b7d70":()=>h(()=>import("./jad.html.039013c5.js"),[]).then(({data:e})=>e),"v-40de7e67":()=>h(()=>import("./jfr.html.b77304ea.js"),[]).then(({data:e})=>e),"v-f28c1148":()=>h(()=>import("./jvm.html.eac591a0.js"),[]).then(({data:e})=>e),"v-b3b5e150":()=>h(()=>import("./keymap.html.4bc836ba.js"),[]).then(({data:e})=>e),"v-7baeb93e":()=>h(()=>import("./line.html.a9e8e2e4.js"),[]).then(({data:e})=>e),"v-7e581f76":()=>h(()=>import("./logger.html.e09aeaa6.js"),[]).then(({data:e})=>e),"v-bbaa3c7e":()=>h(()=>import("./manual-install.html.85f99b8b.js"),[]).then(({data:e})=>e),"v-58d22ae0":()=>h(()=>import("./mbean.html.927e96dd.js"),[]).then(({data:e})=>e),"v-2ac66c02":()=>h(()=>import("./mc.html.d96eb37d.js"),[]).then(({data:e})=>e),"v-7a1110bf":()=>h(()=>import("./mcp-server.html.609551f2.js"),[]).then(({data:e})=>e),"v-3f212774":()=>h(()=>import("./memory.html.3bde6b86.js"),[]).then(({data:e})=>e),"v-20388043":()=>h(()=>import("./monitor.html.fc2a02d0.js"),[]).then(({data:e})=>e),"v-6159b83c":()=>h(()=>import("./ognl-express.html.0cd6cdc8.js"),[]).then(({data:e})=>e),"v-89b4fa02":()=>h(()=>import("./ognl.html.c20b61d9.js"),[]).then(({data:e})=>e),"v-43a1e17f":()=>h(()=>import("./options.html.7c3bfae1.js"),[]).then(({data:e})=>e),"v-6746784a":()=>h(()=>import("./perfcounter.html.27f41458.js"),[]).then(({data:e})=>e),"v-a7e90ae8":()=>h(()=>import("./profiler.html.67035c12.js"),[]).then(({data:e})=>e),"v-1b8ba240":()=>h(()=>import("./pwd.html.5af5f815.js"),[]).then(({data:e})=>e),"v-d98607ca":()=>h(()=>import("./quick-start.html.0a841ca8.js"),[]).then(({data:e})=>e),"v-d1b31c34":()=>h(()=>import("./quit.html.47228ba9.js"),[]).then(({data:e})=>e),"v-c7317832":()=>h(()=>import("./redefine.html.68e8d9d1.js"),[]).then(({data:e})=>e),"v-e0bde47c":()=>h(()=>import("./release-notes.html.bb1f1375.js"),[]).then(({data:e})=>e),"v-6735226e":()=>h(()=>import("./reset.html.94ebcaf7.js"),[]).then(({data:e})=>e),"v-e5e2b738":()=>h(()=>import("./retransform.html.5a86cbf5.js"),[]).then(({data:e})=>e),"v-50ef0261":()=>h(()=>import("./save-log.html.f871291e.js"),[]).then(({data:e})=>e),"v-28022d85":()=>h(()=>import("./sc.html.13503b4f.js"),[]).then(({data:e})=>e),"v-dfe2bef2":()=>h(()=>import("./session.html.602a88b1.js"),[]).then(({data:e})=>e),"v-3912a3bb":()=>h(()=>import("./sm.html.a226714f.js"),[]).then(({data:e})=>e),"v-71870b69":()=>h(()=>import("./spring-boot-starter.html.78d66843.js"),[]).then(({data:e})=>e),"v-4483d8d5":()=>h(()=>import("./stack.html.aa5021d8.js"),[]).then(({data:e})=>e),"v-7af576f3":()=>h(()=>import("./start-arthas.html.614c57c4.js"),[]).then(({data:e})=>e),"v-e33fb7da":()=>h(()=>import("./stop.html.481c9049.js"),[]).then(({data:e})=>e),"v-645190d5":()=>h(()=>import("./sysenv.html.f7014c3b.js"),[]).then(({data:e})=>e),"v-1f738fad":()=>h(()=>import("./sysprop.html.93843170.js"),[]).then(({data:e})=>e),"v-049503c9":()=>h(()=>import("./tee.html.796f8441.js"),[]).then(({data:e})=>e),"v-5da9140b":()=>h(()=>import("./thread.html.96dd9ac3.js"),[]).then(({data:e})=>e),"v-06075838":()=>h(()=>import("./trace.html.4fabc19b.js"),[]).then(({data:e})=>e),"v-79eacb55":()=>h(()=>import("./tt.html.ab370b4f.js"),[]).then(({data:e})=>e),"v-07074726":()=>h(()=>import("./tunnel.html.6d15b349.js"),[]).then(({data:e})=>e),"v-9a4bc0f6":()=>h(()=>import("./version.html.acfdfafa.js"),[]).then(({data:e})=>e),"v-4e08032e":()=>h(()=>import("./vmoption.html.698e78cd.js"),[]).then(({data:e})=>e),"v-76745066":()=>h(()=>import("./vmtool.html.ab938841.js"),[]).then(({data:e})=>e),"v-75a5aa24":()=>h(()=>import("./watch.html.72a5979d.js"),[]).then(({data:e})=>e),"v-35756382":()=>h(()=>import("./web-console.html.6349f4a1.js"),[]).then(({data:e})=>e),"v-3706649a":()=>h(()=>import("./404.html.1b87fa04.js"),[]).then(({data:e})=>e)};function Va(e,t){const n=Object.create(null),o=e.split(",");for(let r=0;r!!n[r.toLowerCase()]:r=>!!n[r]}const Tm="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Im=Va(Tm);function el(e){return!!e||e===""}function Eo(e){if(ce(e)){const t={};for(let n=0;n{if(n){const o=n.split(Dm);o.length>1&&(t[o[0].trim()]=o[1].trim())}}),t}function Be(e){let t="";if(De(e))t=e;else if(ce(e))for(let n=0;nDe(e)?e:e==null?"":ce(e)||Ve(e)&&(e.toString===rl||!he(e.toString))?JSON.stringify(e,tl,2):String(e),tl=(e,t)=>t&&t.__v_isRef?tl(e,t.value):Ln(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[o,r])=>(n[`${o} =>`]=r,n),{})}:nl(t)?{[`Set(${t.size})`]:[...t.values()]}:Ve(t)&&!ce(t)&&!al(t)?String(t):t,Me={},In=[],_t=()=>{},xm=()=>!1,km=/^on[^a-z]/,wo=e=>km.test(e),Na=e=>e.startsWith("onUpdate:"),Ye=Object.assign,Fa=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Cm=Object.prototype.hasOwnProperty,ye=(e,t)=>Cm.call(e,t),ce=Array.isArray,Ln=e=>Pr(e)==="[object Map]",nl=e=>Pr(e)==="[object Set]",he=e=>typeof e=="function",De=e=>typeof e=="string",Ba=e=>typeof e=="symbol",Ve=e=>e!==null&&typeof e=="object",ol=e=>Ve(e)&&he(e.then)&&he(e.catch),rl=Object.prototype.toString,Pr=e=>rl.call(e),Mm=e=>Pr(e).slice(8,-1),al=e=>Pr(e)==="[object Object]",za=e=>De(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,to=Va(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Sr=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},$m=/-(\w)/g,It=Sr(e=>e.replace($m,(t,n)=>n?n.toUpperCase():"")),jm=/\B([A-Z])/g,_n=Sr(e=>e.replace(jm,"-$1").toLowerCase()),Ar=Sr(e=>e.charAt(0).toUpperCase()+e.slice(1)),Nr=Sr(e=>e?`on${Ar(e)}`:""),lo=(e,t)=>!Object.is(e,t),Yo=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},or=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Ti;const Hm=()=>Ti||(Ti=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});let at;class qm{constructor(t=!1){this.active=!0,this.effects=[],this.cleanups=[],!t&&at&&(this.parent=at,this.index=(at.scopes||(at.scopes=[])).push(this)-1)}run(t){if(this.active){const n=at;try{return at=this,t()}finally{at=n}}}on(){at=this}off(){at=this.parent}stop(t){if(this.active){let n,o;for(n=0,o=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},il=e=>(e.w&Qt)>0,cl=e=>(e.n&Qt)>0,Bm=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let o=0;o{(l==="length"||l>=o)&&c.push(s)});else switch(n!==void 0&&c.push(i.get(n)),t){case"add":ce(e)?za(n)&&c.push(i.get("length")):(c.push(i.get(fn)),Ln(e)&&c.push(i.get(ua)));break;case"delete":ce(e)||(c.push(i.get(fn)),Ln(e)&&c.push(i.get(ua)));break;case"set":Ln(e)&&c.push(i.get(fn));break}if(c.length===1)c[0]&&ma(c[0]);else{const s=[];for(const l of c)l&&s.push(...l);ma(Ua(s))}}function ma(e,t){const n=ce(e)?e:[...e];for(const o of n)o.computed&&Li(o);for(const o of n)o.computed||Li(o)}function Li(e,t){(e!==ht||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const Um=Va("__proto__,__v_isRef,__isVue"),ul=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Ba)),Wm=Ka(),Km=Ka(!1,!0),Ym=Ka(!0),Di=Jm();function Jm(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const o=Oe(this);for(let a=0,i=this.length;a{e[t]=function(...n){qn();const o=Oe(this)[t].apply(this,n);return Vn(),o}}),e}function Ka(e=!1,t=!1){return function(o,r,a){if(r==="__v_isReactive")return!e;if(r==="__v_isReadonly")return e;if(r==="__v_isShallow")return t;if(r==="__v_raw"&&a===(e?t?md:pl:t?hl:fl).get(o))return o;const i=ce(o);if(!e&&i&&ye(Di,r))return Reflect.get(Di,r,a);const c=Reflect.get(o,r,a);return(Ba(r)?ul.has(r):Um(r))||(e||ct(o,"get",r),t)?c:Ke(c)?i&&za(r)?c:c.value:Ve(c)?e?Qa(c):Nn(c):c}}const Qm=ml(),Gm=ml(!0);function ml(e=!1){return function(n,o,r,a){let i=n[o];if(Cn(i)&&Ke(i)&&!Ke(r))return!1;if(!e&&(!rr(r)&&!Cn(r)&&(i=Oe(i),r=Oe(r)),!ce(n)&&Ke(i)&&!Ke(r)))return i.value=r,!0;const c=ce(n)&&za(o)?Number(o)e,Tr=e=>Reflect.getPrototypeOf(e);function Do(e,t,n=!1,o=!1){e=e.__v_raw;const r=Oe(e),a=Oe(t);n||(t!==a&&ct(r,"get",t),ct(r,"get",a));const{has:i}=Tr(r),c=o?Ya:n?Za:uo;if(i.call(r,t))return c(e.get(t));if(i.call(r,a))return c(e.get(a));e!==r&&e.get(t)}function Ro(e,t=!1){const n=this.__v_raw,o=Oe(n),r=Oe(e);return t||(e!==r&&ct(o,"has",e),ct(o,"has",r)),e===r?n.has(e):n.has(e)||n.has(r)}function xo(e,t=!1){return e=e.__v_raw,!t&&ct(Oe(e),"iterate",fn),Reflect.get(e,"size",e)}function Ri(e){e=Oe(e);const t=Oe(this);return Tr(t).has.call(t,e)||(t.add(e),qt(t,"add",e,e)),this}function xi(e,t){t=Oe(t);const n=Oe(this),{has:o,get:r}=Tr(n);let a=o.call(n,e);a||(e=Oe(e),a=o.call(n,e));const i=r.call(n,e);return n.set(e,t),a?lo(t,i)&&qt(n,"set",e,t):qt(n,"add",e,t),this}function ki(e){const t=Oe(this),{has:n,get:o}=Tr(t);let r=n.call(t,e);r||(e=Oe(e),r=n.call(t,e)),o&&o.call(t,e);const a=t.delete(e);return r&&qt(t,"delete",e,void 0),a}function Ci(){const e=Oe(this),t=e.size!==0,n=e.clear();return t&&qt(e,"clear",void 0,void 0),n}function ko(e,t){return function(o,r){const a=this,i=a.__v_raw,c=Oe(i),s=t?Ya:e?Za:uo;return!e&&ct(c,"iterate",fn),i.forEach((l,u)=>o.call(r,s(l),s(u),a))}}function Co(e,t,n){return function(...o){const r=this.__v_raw,a=Oe(r),i=Ln(a),c=e==="entries"||e===Symbol.iterator&&i,s=e==="keys"&&i,l=r[e](...o),u=n?Ya:t?Za:uo;return!t&&ct(a,"iterate",s?ua:fn),{next(){const{value:m,done:d}=l.next();return d?{value:m,done:d}:{value:c?[u(m[0]),u(m[1])]:u(m),done:d}},[Symbol.iterator](){return this}}}}function Nt(e){return function(...t){return e==="delete"?!1:this}}function od(){const e={get(a){return Do(this,a)},get size(){return xo(this)},has:Ro,add:Ri,set:xi,delete:ki,clear:Ci,forEach:ko(!1,!1)},t={get(a){return Do(this,a,!1,!0)},get size(){return xo(this)},has:Ro,add:Ri,set:xi,delete:ki,clear:Ci,forEach:ko(!1,!0)},n={get(a){return Do(this,a,!0)},get size(){return xo(this,!0)},has(a){return Ro.call(this,a,!0)},add:Nt("add"),set:Nt("set"),delete:Nt("delete"),clear:Nt("clear"),forEach:ko(!0,!1)},o={get(a){return Do(this,a,!0,!0)},get size(){return xo(this,!0)},has(a){return Ro.call(this,a,!0)},add:Nt("add"),set:Nt("set"),delete:Nt("delete"),clear:Nt("clear"),forEach:ko(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(a=>{e[a]=Co(a,!1,!1),n[a]=Co(a,!0,!1),t[a]=Co(a,!1,!0),o[a]=Co(a,!0,!0)}),[e,n,t,o]}const[rd,ad,id,cd]=od();function Ja(e,t){const n=t?e?cd:id:e?ad:rd;return(o,r,a)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?o:Reflect.get(ye(n,r)&&r in o?n:o,r,a)}const sd={get:Ja(!1,!1)},ld={get:Ja(!1,!0)},ud={get:Ja(!0,!1)},fl=new WeakMap,hl=new WeakMap,pl=new WeakMap,md=new WeakMap;function dd(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function fd(e){return e.__v_skip||!Object.isExtensible(e)?0:dd(Mm(e))}function Nn(e){return Cn(e)?e:Ga(e,!1,dl,sd,fl)}function hd(e){return Ga(e,!1,nd,ld,hl)}function Qa(e){return Ga(e,!0,td,ud,pl)}function Ga(e,t,n,o,r){if(!Ve(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const a=r.get(e);if(a)return a;const i=fd(e);if(i===0)return e;const c=new Proxy(e,i===2?o:n);return r.set(e,c),c}function Dn(e){return Cn(e)?Dn(e.__v_raw):!!(e&&e.__v_isReactive)}function Cn(e){return!!(e&&e.__v_isReadonly)}function rr(e){return!!(e&&e.__v_isShallow)}function _l(e){return Dn(e)||Cn(e)}function Oe(e){const t=e&&e.__v_raw;return t?Oe(t):e}function vl(e){return nr(e,"__v_skip",!0),e}const uo=e=>Ve(e)?Nn(e):e,Za=e=>Ve(e)?Qa(e):e;function gl(e){Yt&&ht&&(e=Oe(e),ll(e.dep||(e.dep=Ua())))}function bl(e,t){e=Oe(e),e.dep&&ma(e.dep)}function Ke(e){return!!(e&&e.__v_isRef===!0)}function Ie(e){return El(e,!1)}function yl(e){return El(e,!0)}function El(e,t){return Ke(e)?e:new pd(e,t)}class pd{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:Oe(t),this._value=n?t:uo(t)}get value(){return gl(this),this._value}set value(t){const n=this.__v_isShallow||rr(t)||Cn(t);t=n?t:Oe(t),lo(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:uo(t),bl(this))}}function V(e){return Ke(e)?e.value:e}const _d={get:(e,t,n)=>V(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const r=e[t];return Ke(r)&&!Ke(n)?(r.value=n,!0):Reflect.set(e,t,n,o)}};function wl(e){return Dn(e)?e:new Proxy(e,_d)}function Xa(e){const t=ce(e)?new Array(e.length):{};for(const n in e)t[n]=gd(e,n);return t}class vd{constructor(t,n,o){this._object=t,this._key=n,this._defaultValue=o,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}}function gd(e,t,n){const o=e[t];return Ke(o)?o:new vd(e,t,n)}var Ol;class bd{constructor(t,n,o,r){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this[Ol]=!1,this._dirty=!0,this.effect=new Wa(t,()=>{this._dirty||(this._dirty=!0,bl(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=o}get value(){const t=Oe(this);return gl(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}Ol="__v_isReadonly";function yd(e,t,n=!1){let o,r;const a=he(e);return a?(o=e,r=_t):(o=e.get,r=e.set),new bd(o,r,a||!r,n)}function Jt(e,t,n,o){let r;try{r=o?e(...o):e()}catch(a){Oo(a,t,n)}return r}function ut(e,t,n,o){if(he(e)){const a=Jt(e,t,n,o);return a&&ol(a)&&a.catch(i=>{Oo(i,t,n)}),a}const r=[];for(let a=0;a>>1;mo(Qe[o])Ot&&Qe.splice(t,1)}function Pd(e){ce(e)?Rn.push(...e):(!Ct||!Ct.includes(e,e.allowRecurse?ln+1:ln))&&Rn.push(e),Sl()}function Mi(e,t=Ot){for(;tmo(n)-mo(o)),ln=0;lne.id==null?1/0:e.id,Sd=(e,t)=>{const n=mo(e)-mo(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Al(e){da=!1,ar=!0,Qe.sort(Sd);const t=_t;try{for(Ot=0;Otf.trim())),m&&(r=n.map(or))}let c,s=o[c=Nr(t)]||o[c=Nr(It(t))];!s&&a&&(s=o[c=Nr(_n(t))]),s&&ut(s,e,6,r);const l=o[c+"Once"];if(l){if(!e.emitted)e.emitted={};else if(e.emitted[c])return;e.emitted[c]=!0,ut(l,e,6,r)}}function Tl(e,t,n=!1){const o=t.emitsCache,r=o.get(e);if(r!==void 0)return r;const a=e.emits;let i={},c=!1;if(!he(e)){const s=l=>{const u=Tl(l,t,!0);u&&(c=!0,Ye(i,u))};!n&&t.mixins.length&&t.mixins.forEach(s),e.extends&&s(e.extends),e.mixins&&e.mixins.forEach(s)}return!a&&!c?(Ve(e)&&o.set(e,null),null):(ce(a)?a.forEach(s=>i[s]=null):Ye(i,a),Ve(e)&&o.set(e,i),i)}function Lr(e,t){return!e||!wo(t)?!1:(t=t.slice(2).replace(/Once$/,""),ye(e,t[0].toLowerCase()+t.slice(1))||ye(e,_n(t))||ye(e,t))}let Ge=null,Dr=null;function cr(e){const t=Ge;return Ge=e,Dr=e&&e.type.__scopeId||null,t}function Td(e){Dr=e}function Id(){Dr=null}function We(e,t=Ge,n){if(!t||e._n)return e;const o=(...r)=>{o._d&&Wi(-1);const a=cr(t),i=e(...r);return cr(a),o._d&&Wi(1),i};return o._n=!0,o._c=!0,o._d=!0,o}function Fr(e){const{type:t,vnode:n,proxy:o,withProxy:r,props:a,propsOptions:[i],slots:c,attrs:s,emit:l,render:u,renderCache:m,data:d,setupState:f,ctx:v,inheritAttrs:g}=e;let b,p;const y=cr(e);try{if(n.shapeFlag&4){const A=r||o;b=ft(u.call(A,A,m,a,f,d,v)),p=s}else{const A=t;b=ft(A.length>1?A(a,{attrs:s,slots:c,emit:l}):A(a,null)),p=t.props?s:Ld(s)}}catch(A){oo.length=0,Oo(A,e,1),b=ie(it)}let P=b;if(p&&g!==!1){const A=Object.keys(p),{shapeFlag:D}=P;A.length&&D&7&&(i&&A.some(Na)&&(p=Dd(p,i)),P=Gt(P,p))}return n.dirs&&(P=Gt(P),P.dirs=P.dirs?P.dirs.concat(n.dirs):n.dirs),n.transition&&(P.transition=n.transition),b=P,cr(y),b}const Ld=e=>{let t;for(const n in e)(n==="class"||n==="style"||wo(n))&&((t||(t={}))[n]=e[n]);return t},Dd=(e,t)=>{const n={};for(const o in e)(!Na(o)||!(o.slice(9)in t))&&(n[o]=e[o]);return n};function Rd(e,t,n){const{props:o,children:r,component:a}=e,{props:i,children:c,patchFlag:s}=t,l=a.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&s>=0){if(s&1024)return!0;if(s&16)return o?$i(o,i,l):!!i;if(s&8){const u=t.dynamicProps;for(let m=0;me.__isSuspense;function Il(e,t){t&&t.pendingBranch?ce(e)?t.effects.push(...e):t.effects.push(e):Pd(e)}function hn(e,t){if(ze){let n=ze.provides;const o=ze.parent&&ze.parent.provides;o===n&&(n=ze.provides=Object.create(o)),n[e]=t}}function Ue(e,t,n=!1){const o=ze||Ge;if(o){const r=o.parent==null?o.vnode.appContext&&o.vnode.appContext.provides:o.parent.provides;if(r&&e in r)return r[e];if(arguments.length>1)return n&&he(t)?t.call(o.proxy):t}}const ji={};function Xe(e,t,n){return Ll(e,t,n)}function Ll(e,t,{immediate:n,deep:o,flush:r,onTrack:a,onTrigger:i}=Me){const c=ze;let s,l=!1,u=!1;if(Ke(e)?(s=()=>e.value,l=rr(e)):Dn(e)?(s=()=>e,o=!0):ce(e)?(u=!0,l=e.some(p=>Dn(p)||rr(p)),s=()=>e.map(p=>{if(Ke(p))return p.value;if(Dn(p))return dn(p);if(he(p))return Jt(p,c,2)})):he(e)?t?s=()=>Jt(e,c,2):s=()=>{if(!(c&&c.isUnmounted))return m&&m(),ut(e,c,3,[d])}:s=_t,t&&o){const p=s;s=()=>dn(p())}let m,d=p=>{m=b.onStop=()=>{Jt(p,c,4)}};if($n)return d=_t,t?n&&ut(t,c,3,[s(),u?[]:void 0,d]):s(),_t;let f=u?[]:ji;const v=()=>{if(!!b.active)if(t){const p=b.run();(o||l||(u?p.some((y,P)=>lo(y,f[P])):lo(p,f)))&&(m&&m(),ut(t,c,3,[p,f===ji?void 0:f,d]),f=p)}else b.run()};v.allowRecurse=!!t;let g;r==="sync"?g=v:r==="post"?g=()=>nt(v,c&&c.suspense):(v.pre=!0,c&&(v.id=c.uid),g=()=>Ir(v));const b=new Wa(s,g);return t?n?v():f=b.run():r==="post"?nt(b.run.bind(b),c&&c.suspense):b.run(),()=>{b.stop(),c&&c.scope&&Fa(c.scope.effects,b)}}function Cd(e,t,n){const o=this.proxy,r=De(e)?e.includes(".")?Dl(o,e):()=>o[e]:e.bind(o,o);let a;he(t)?a=t:(a=t.handler,n=t);const i=ze;Mn(this);const c=Ll(r,a.bind(o),n);return i?Mn(i):pn(),c}function Dl(e,t){const n=t.split(".");return()=>{let o=e;for(let r=0;r{dn(n,t)});else if(al(e))for(const n in e)dn(e[n],t);return e}function Md(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return tt(()=>{e.isMounted=!0}),xr(()=>{e.isUnmounting=!0}),e}const st=[Function,Array],$d={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:st,onEnter:st,onAfterEnter:st,onEnterCancelled:st,onBeforeLeave:st,onLeave:st,onAfterLeave:st,onLeaveCancelled:st,onBeforeAppear:st,onAppear:st,onAfterAppear:st,onAppearCancelled:st},setup(e,{slots:t}){const n=ai(),o=Md();let r;return()=>{const a=t.default&&kl(t.default(),!0);if(!a||!a.length)return;let i=a[0];if(a.length>1){for(const g of a)if(g.type!==it){i=g;break}}const c=Oe(e),{mode:s}=c;if(o.isLeaving)return Br(i);const l=Hi(i);if(!l)return Br(i);const u=fa(l,c,o,n);ha(l,u);const m=n.subTree,d=m&&Hi(m);let f=!1;const{getTransitionKey:v}=l.type;if(v){const g=v();r===void 0?r=g:g!==r&&(r=g,f=!0)}if(d&&d.type!==it&&(!un(l,d)||f)){const g=fa(d,c,o,n);if(ha(d,g),s==="out-in")return o.isLeaving=!0,g.afterLeave=()=>{o.isLeaving=!1,n.update()},Br(i);s==="in-out"&&l.type!==it&&(g.delayLeave=(b,p,y)=>{const P=xl(o,d);P[String(d.key)]=d,b._leaveCb=()=>{p(),b._leaveCb=void 0,delete u.delayedLeave},u.delayedLeave=y})}return i}}},Rl=$d;function xl(e,t){const{leavingVNodes:n}=e;let o=n.get(t.type);return o||(o=Object.create(null),n.set(t.type,o)),o}function fa(e,t,n,o){const{appear:r,mode:a,persisted:i=!1,onBeforeEnter:c,onEnter:s,onAfterEnter:l,onEnterCancelled:u,onBeforeLeave:m,onLeave:d,onAfterLeave:f,onLeaveCancelled:v,onBeforeAppear:g,onAppear:b,onAfterAppear:p,onAppearCancelled:y}=t,P=String(e.key),A=xl(n,e),D=(E,z)=>{E&&ut(E,o,9,z)},q=(E,z)=>{const Y=z[1];D(E,z),ce(E)?E.every(j=>j.length<=1)&&Y():E.length<=1&&Y()},R={mode:a,persisted:i,beforeEnter(E){let z=c;if(!n.isMounted)if(r)z=g||c;else return;E._leaveCb&&E._leaveCb(!0);const Y=A[P];Y&&un(e,Y)&&Y.el._leaveCb&&Y.el._leaveCb(),D(z,[E])},enter(E){let z=s,Y=l,j=u;if(!n.isMounted)if(r)z=b||s,Y=p||l,j=y||u;else return;let S=!1;const T=E._enterCb=x=>{S||(S=!0,x?D(j,[E]):D(Y,[E]),R.delayedLeave&&R.delayedLeave(),E._enterCb=void 0)};z?q(z,[E,T]):T()},leave(E,z){const Y=String(e.key);if(E._enterCb&&E._enterCb(!0),n.isUnmounting)return z();D(m,[E]);let j=!1;const S=E._leaveCb=T=>{j||(j=!0,z(),T?D(v,[E]):D(f,[E]),E._leaveCb=void 0,A[Y]===e&&delete A[Y])};A[Y]=e,d?q(d,[E,S]):S()},clone(E){return fa(E,t,n,o)}};return R}function Br(e){if(So(e))return e=Gt(e),e.children=null,e}function Hi(e){return So(e)?e.children?e.children[0]:void 0:e}function ha(e,t){e.shapeFlag&6&&e.component?ha(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function kl(e,t=!1,n){let o=[],r=0;for(let a=0;a1)for(let a=0;a!!e.type.__asyncLoader;function L(e){he(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:o,delay:r=200,timeout:a,suspensible:i=!0,onError:c}=e;let s=null,l,u=0;const m=()=>(u++,s=null,d()),d=()=>{let f;return s||(f=s=t().catch(v=>{if(v=v instanceof Error?v:new Error(String(v)),c)return new Promise((g,b)=>{c(v,()=>g(m()),()=>b(v),u+1)});throw v}).then(v=>f!==s&&s?s:(v&&(v.__esModule||v[Symbol.toStringTag]==="Module")&&(v=v.default),l=v,v)))};return Ne({name:"AsyncComponentWrapper",__asyncLoader:d,get __asyncResolved(){return l},setup(){const f=ze;if(l)return()=>zr(l,f);const v=y=>{s=null,Oo(y,f,13,!o)};if(i&&f.suspense||$n)return d().then(y=>()=>zr(y,f)).catch(y=>(v(y),()=>o?ie(o,{error:y}):null));const g=Ie(!1),b=Ie(),p=Ie(!!r);return r&&setTimeout(()=>{p.value=!1},r),a!=null&&setTimeout(()=>{if(!g.value&&!b.value){const y=new Error(`Async component timed out after ${a}ms.`);v(y),b.value=y}},a),d().then(()=>{g.value=!0,f.parent&&So(f.parent.vnode)&&Ir(f.parent.update)}).catch(y=>{v(y),b.value=y}),()=>{if(g.value&&l)return zr(l,f);if(b.value&&o)return ie(o,{error:b.value});if(n&&!p.value)return ie(n)}}})}function zr(e,{vnode:{ref:t,props:n,children:o,shapeFlag:r},parent:a}){const i=ie(e,n,o);return i.ref=t,i}const So=e=>e.type.__isKeepAlive;function jd(e,t){Cl(e,"a",t)}function Hd(e,t){Cl(e,"da",t)}function Cl(e,t,n=ze){const o=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Rr(t,o,n),n){let r=n.parent;for(;r&&r.parent;)So(r.parent.vnode)&&qd(o,t,n,r),r=r.parent}}function qd(e,t,n,o){const r=Rr(t,e,o,!0);kr(()=>{Fa(o[t],r)},n)}function Rr(e,t,n=ze,o=!1){if(n){const r=n[e]||(n[e]=[]),a=t.__weh||(t.__weh=(...i)=>{if(n.isUnmounted)return;qn(),Mn(n);const c=ut(t,n,e,i);return pn(),Vn(),c});return o?r.unshift(a):r.push(a),a}}const Vt=e=>(t,n=ze)=>(!$n||e==="sp")&&Rr(e,t,n),ti=Vt("bm"),tt=Vt("m"),Vd=Vt("bu"),Nd=Vt("u"),xr=Vt("bum"),kr=Vt("um"),Fd=Vt("sp"),Bd=Vt("rtg"),zd=Vt("rtc");function Ud(e,t=ze){Rr("ec",e,t)}function fo(e,t){const n=Ge;if(n===null)return e;const o=Mr(n)||n.proxy,r=e.dirs||(e.dirs=[]);for(let a=0;at(i,c,void 0,a&&a[c]));else{const i=Object.keys(e);r=new Array(i.length);for(let c=0,s=i.length;cmr(t)?!(t.type===it||t.type===Se&&!jl(t.children)):!0)?e:null}const pa=e=>e?Jl(e)?Mr(e)||e.proxy:pa(e.parent):null,sr=Ye(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>pa(e.parent),$root:e=>pa(e.root),$emit:e=>e.emit,$options:e=>ql(e),$forceUpdate:e=>e.f||(e.f=()=>Ir(e.update)),$nextTick:e=>e.n||(e.n=Po.bind(e.proxy)),$watch:e=>Cd.bind(e)}),Kd={get({_:e},t){const{ctx:n,setupState:o,data:r,props:a,accessCache:i,type:c,appContext:s}=e;let l;if(t[0]!=="$"){const f=i[t];if(f!==void 0)switch(f){case 1:return o[t];case 2:return r[t];case 4:return n[t];case 3:return a[t]}else{if(o!==Me&&ye(o,t))return i[t]=1,o[t];if(r!==Me&&ye(r,t))return i[t]=2,r[t];if((l=e.propsOptions[0])&&ye(l,t))return i[t]=3,a[t];if(n!==Me&&ye(n,t))return i[t]=4,n[t];_a&&(i[t]=0)}}const u=sr[t];let m,d;if(u)return t==="$attrs"&&ct(e,"get",t),u(e);if((m=c.__cssModules)&&(m=m[t]))return m;if(n!==Me&&ye(n,t))return i[t]=4,n[t];if(d=s.config.globalProperties,ye(d,t))return d[t]},set({_:e},t,n){const{data:o,setupState:r,ctx:a}=e;return r!==Me&&ye(r,t)?(r[t]=n,!0):o!==Me&&ye(o,t)?(o[t]=n,!0):ye(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(a[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:o,appContext:r,propsOptions:a}},i){let c;return!!n[i]||e!==Me&&ye(e,i)||t!==Me&&ye(t,i)||(c=a[0])&&ye(c,i)||ye(o,i)||ye(sr,i)||ye(r.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ye(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};let _a=!0;function Yd(e){const t=ql(e),n=e.proxy,o=e.ctx;_a=!1,t.beforeCreate&&Vi(t.beforeCreate,e,"bc");const{data:r,computed:a,methods:i,watch:c,provide:s,inject:l,created:u,beforeMount:m,mounted:d,beforeUpdate:f,updated:v,activated:g,deactivated:b,beforeDestroy:p,beforeUnmount:y,destroyed:P,unmounted:A,render:D,renderTracked:q,renderTriggered:R,errorCaptured:E,serverPrefetch:z,expose:Y,inheritAttrs:j,components:S,directives:T,filters:x}=t;if(l&&Jd(l,o,null,e.appContext.config.unwrapInjectedRef),i)for(const K in i){const te=i[K];he(te)&&(o[K]=te.bind(n))}if(r){const K=r.call(n,n);Ve(K)&&(e.data=Nn(K))}if(_a=!0,a)for(const K in a){const te=a[K],me=he(te)?te.bind(n,n):he(te.get)?te.get.bind(n,n):_t,de=!he(te)&&he(te.set)?te.set.bind(n):_t,ve=Z({get:me,set:de});Object.defineProperty(o,K,{enumerable:!0,configurable:!0,get:()=>ve.value,set:Ae=>ve.value=Ae})}if(c)for(const K in c)Hl(c[K],o,n,K);if(s){const K=he(s)?s.call(n):s;Reflect.ownKeys(K).forEach(te=>{hn(te,K[te])})}u&&Vi(u,e,"c");function $(K,te){ce(te)?te.forEach(me=>K(me.bind(n))):te&&K(te.bind(n))}if($(ti,m),$(tt,d),$(Vd,f),$(Nd,v),$(jd,g),$(Hd,b),$(Ud,E),$(zd,q),$(Bd,R),$(xr,y),$(kr,A),$(Fd,z),ce(Y))if(Y.length){const K=e.exposed||(e.exposed={});Y.forEach(te=>{Object.defineProperty(K,te,{get:()=>n[te],set:me=>n[te]=me})})}else e.exposed||(e.exposed={});D&&e.render===_t&&(e.render=D),j!=null&&(e.inheritAttrs=j),S&&(e.components=S),T&&(e.directives=T)}function Jd(e,t,n=_t,o=!1){ce(e)&&(e=va(e));for(const r in e){const a=e[r];let i;Ve(a)?"default"in a?i=Ue(a.from||r,a.default,!0):i=Ue(a.from||r):i=Ue(a),Ke(i)&&o?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>i.value,set:c=>i.value=c}):t[r]=i}}function Vi(e,t,n){ut(ce(e)?e.map(o=>o.bind(t.proxy)):e.bind(t.proxy),t,n)}function Hl(e,t,n,o){const r=o.includes(".")?Dl(n,o):()=>n[o];if(De(e)){const a=t[e];he(a)&&Xe(r,a)}else if(he(e))Xe(r,e.bind(n));else if(Ve(e))if(ce(e))e.forEach(a=>Hl(a,t,n,o));else{const a=he(e.handler)?e.handler.bind(n):t[e.handler];he(a)&&Xe(r,a,e)}}function ql(e){const t=e.type,{mixins:n,extends:o}=t,{mixins:r,optionsCache:a,config:{optionMergeStrategies:i}}=e.appContext,c=a.get(t);let s;return c?s=c:!r.length&&!n&&!o?s=t:(s={},r.length&&r.forEach(l=>lr(s,l,i,!0)),lr(s,t,i)),Ve(t)&&a.set(t,s),s}function lr(e,t,n,o=!1){const{mixins:r,extends:a}=t;a&&lr(e,a,n,!0),r&&r.forEach(i=>lr(e,i,n,!0));for(const i in t)if(!(o&&i==="expose")){const c=Qd[i]||n&&n[i];e[i]=c?c(e[i],t[i]):t[i]}return e}const Qd={data:Ni,props:an,emits:an,methods:an,computed:an,beforeCreate:Ze,created:Ze,beforeMount:Ze,mounted:Ze,beforeUpdate:Ze,updated:Ze,beforeDestroy:Ze,beforeUnmount:Ze,destroyed:Ze,unmounted:Ze,activated:Ze,deactivated:Ze,errorCaptured:Ze,serverPrefetch:Ze,components:an,directives:an,watch:Zd,provide:Ni,inject:Gd};function Ni(e,t){return t?e?function(){return Ye(he(e)?e.call(this,this):e,he(t)?t.call(this,this):t)}:t:e}function Gd(e,t){return an(va(e),va(t))}function va(e){if(ce(e)){const t={};for(let n=0;n0)&&!(i&16)){if(i&8){const u=e.vnode.dynamicProps;for(let m=0;m{s=!0;const[d,f]=Nl(m,t,!0);Ye(i,d),f&&c.push(...f)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!a&&!s)return Ve(e)&&o.set(e,In),In;if(ce(a))for(let u=0;u-1,f[1]=g<0||v-1||ye(f,"default"))&&c.push(m)}}}const l=[i,c];return Ve(e)&&o.set(e,l),l}function Fi(e){return e[0]!=="$"}function Bi(e){const t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:e===null?"null":""}function zi(e,t){return Bi(e)===Bi(t)}function Ui(e,t){return ce(t)?t.findIndex(n=>zi(n,e)):he(t)&&zi(t,e)?0:-1}const Fl=e=>e[0]==="_"||e==="$stable",oi=e=>ce(e)?e.map(ft):[ft(e)],tf=(e,t,n)=>{if(t._n)return t;const o=We((...r)=>oi(t(...r)),n);return o._c=!1,o},Bl=(e,t,n)=>{const o=e._ctx;for(const r in e){if(Fl(r))continue;const a=e[r];if(he(a))t[r]=tf(r,a,o);else if(a!=null){const i=oi(a);t[r]=()=>i}}},zl=(e,t)=>{const n=oi(t);e.slots.default=()=>n},nf=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=Oe(t),nr(t,"_",n)):Bl(t,e.slots={})}else e.slots={},t&&zl(e,t);nr(e.slots,Cr,1)},of=(e,t,n)=>{const{vnode:o,slots:r}=e;let a=!0,i=Me;if(o.shapeFlag&32){const c=t._;c?n&&c===1?a=!1:(Ye(r,t),!n&&c===1&&delete r._):(a=!t.$stable,Bl(t,r)),i=t}else t&&(zl(e,t),i={default:1});if(a)for(const c in r)!Fl(c)&&!(c in i)&&delete r[c]};function Ul(){return{app:null,config:{isNativeTag:xm,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let rf=0;function af(e,t){return function(o,r=null){he(o)||(o=Object.assign({},o)),r!=null&&!Ve(r)&&(r=null);const a=Ul(),i=new Set;let c=!1;const s=a.app={_uid:rf++,_component:o,_props:r,_container:null,_context:a,_instance:null,version:Sf,get config(){return a.config},set config(l){},use(l,...u){return i.has(l)||(l&&he(l.install)?(i.add(l),l.install(s,...u)):he(l)&&(i.add(l),l(s,...u))),s},mixin(l){return a.mixins.includes(l)||a.mixins.push(l),s},component(l,u){return u?(a.components[l]=u,s):a.components[l]},directive(l,u){return u?(a.directives[l]=u,s):a.directives[l]},mount(l,u,m){if(!c){const d=ie(o,r);return d.appContext=a,u&&t?t(d,l):e(d,l,m),c=!0,s._container=l,l.__vue_app__=s,Mr(d.component)||d.component.proxy}},unmount(){c&&(e(null,s._container),delete s._container.__vue_app__)},provide(l,u){return a.provides[l]=u,s}};return s}}function ur(e,t,n,o,r=!1){if(ce(e)){e.forEach((d,f)=>ur(d,t&&(ce(t)?t[f]:t),n,o,r));return}if(xn(o)&&!r)return;const a=o.shapeFlag&4?Mr(o.component)||o.component.proxy:o.el,i=r?null:a,{i:c,r:s}=e,l=t&&t.r,u=c.refs===Me?c.refs={}:c.refs,m=c.setupState;if(l!=null&&l!==s&&(De(l)?(u[l]=null,ye(m,l)&&(m[l]=null)):Ke(l)&&(l.value=null)),he(s))Jt(s,c,12,[i,u]);else{const d=De(s),f=Ke(s);if(d||f){const v=()=>{if(e.f){const g=d?u[s]:s.value;r?ce(g)&&Fa(g,a):ce(g)?g.includes(a)||g.push(a):d?(u[s]=[a],ye(m,s)&&(m[s]=u[s])):(s.value=[a],e.k&&(u[e.k]=s.value))}else d?(u[s]=i,ye(m,s)&&(m[s]=i)):f&&(s.value=i,e.k&&(u[e.k]=i))};i?(v.id=-1,nt(v,n)):v()}}}let Ft=!1;const Mo=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",$o=e=>e.nodeType===8;function cf(e){const{mt:t,p:n,o:{patchProp:o,createText:r,nextSibling:a,parentNode:i,remove:c,insert:s,createComment:l}}=e,u=(p,y)=>{if(!y.hasChildNodes()){n(null,p,y),ir(),y._vnode=p;return}Ft=!1,m(y.firstChild,p,null,null,null),ir(),y._vnode=p,Ft&&console.error("Hydration completed but contains mismatches.")},m=(p,y,P,A,D,q=!1)=>{const R=$o(p)&&p.data==="[",E=()=>g(p,y,P,A,D,R),{type:z,ref:Y,shapeFlag:j,patchFlag:S}=y,T=p.nodeType;y.el=p,S===-2&&(q=!1,y.dynamicChildren=null);let x=null;switch(z){case ho:T!==3?y.children===""?(s(y.el=r(""),i(p),p),x=p):x=E():(p.data!==y.children&&(Ft=!0,p.data=y.children),x=a(p));break;case it:T!==8||R?x=E():x=a(p);break;case no:if(T!==1&&T!==3)x=E();else{x=p;const M=!y.children.length;for(let $=0;${q=q||!!y.dynamicChildren;const{type:R,props:E,patchFlag:z,shapeFlag:Y,dirs:j}=y,S=R==="input"&&j||R==="option";if(S||z!==-1){if(j&&yt(y,null,P,"created"),E)if(S||!q||z&48)for(const x in E)(S&&x.endsWith("value")||wo(x)&&!to(x))&&o(p,x,null,E[x],!1,void 0,P);else E.onClick&&o(p,"onClick",null,E.onClick,!1,void 0,P);let T;if((T=E&&E.onVnodeBeforeMount)&<(T,P,y),j&&yt(y,null,P,"beforeMount"),((T=E&&E.onVnodeMounted)||j)&&Il(()=>{T&<(T,P,y),j&&yt(y,null,P,"mounted")},A),Y&16&&!(E&&(E.innerHTML||E.textContent))){let x=f(p.firstChild,y,p,P,A,D,q);for(;x;){Ft=!0;const M=x;x=x.nextSibling,c(M)}}else Y&8&&p.textContent!==y.children&&(Ft=!0,p.textContent=y.children)}return p.nextSibling},f=(p,y,P,A,D,q,R)=>{R=R||!!y.dynamicChildren;const E=y.children,z=E.length;for(let Y=0;Y{const{slotScopeIds:R}=y;R&&(D=D?D.concat(R):R);const E=i(p),z=f(a(p),y,E,P,A,D,q);return z&&$o(z)&&z.data==="]"?a(y.anchor=z):(Ft=!0,s(y.anchor=l("]"),E,z),z)},g=(p,y,P,A,D,q)=>{if(Ft=!0,y.el=null,q){const z=b(p);for(;;){const Y=a(p);if(Y&&Y!==z)c(Y);else break}}const R=a(p),E=i(p);return c(p),n(null,y,E,R,P,A,Mo(E),D),R},b=p=>{let y=0;for(;p;)if(p=a(p),p&&$o(p)&&(p.data==="["&&y++,p.data==="]")){if(y===0)return a(p);y--}return p};return[u,m]}const nt=Il;function sf(e){return lf(e,cf)}function lf(e,t){const n=Hm();n.__VUE__=!0;const{insert:o,remove:r,patchProp:a,createElement:i,createText:c,createComment:s,setText:l,setElementText:u,parentNode:m,nextSibling:d,setScopeId:f=_t,cloneNode:v,insertStaticContent:g}=e,b=(_,w,I,C=null,H=null,F=null,J=!1,W=null,G=!!w.dynamicChildren)=>{if(_===w)return;_&&!un(_,w)&&(C=X(_),xe(_,H,F,!0),_=null),w.patchFlag===-2&&(G=!1,w.dynamicChildren=null);const{type:U,ref:re,shapeFlag:oe}=w;switch(U){case ho:p(_,w,I,C);break;case it:y(_,w,I,C);break;case no:_==null&&P(w,I,C,J);break;case Se:T(_,w,I,C,H,F,J,W,G);break;default:oe&1?q(_,w,I,C,H,F,J,W,G):oe&6?x(_,w,I,C,H,F,J,W,G):(oe&64||oe&128)&&U.process(_,w,I,C,H,F,J,W,G,be)}re!=null&&H&&ur(re,_&&_.ref,F,w||_,!w)},p=(_,w,I,C)=>{if(_==null)o(w.el=c(w.children),I,C);else{const H=w.el=_.el;w.children!==_.children&&l(H,w.children)}},y=(_,w,I,C)=>{_==null?o(w.el=s(w.children||""),I,C):w.el=_.el},P=(_,w,I,C)=>{[_.el,_.anchor]=g(_.children,w,I,C,_.el,_.anchor)},A=({el:_,anchor:w},I,C)=>{let H;for(;_&&_!==w;)H=d(_),o(_,I,C),_=H;o(w,I,C)},D=({el:_,anchor:w})=>{let I;for(;_&&_!==w;)I=d(_),r(_),_=I;r(w)},q=(_,w,I,C,H,F,J,W,G)=>{J=J||w.type==="svg",_==null?R(w,I,C,H,F,J,W,G):Y(_,w,H,F,J,W,G)},R=(_,w,I,C,H,F,J,W)=>{let G,U;const{type:re,props:oe,shapeFlag:ne,transition:se,patchFlag:_e,dirs:ke}=_;if(_.el&&v!==void 0&&_e===-1)G=_.el=v(_.el);else{if(G=_.el=i(_.type,F,oe&&oe.is,oe),ne&8?u(G,_.children):ne&16&&z(_.children,G,null,C,H,F&&re!=="foreignObject",J,W),ke&&yt(_,null,C,"created"),oe){for(const He in oe)He!=="value"&&!to(He)&&a(G,He,null,oe[He],F,_.children,C,H,B);"value"in oe&&a(G,"value",null,oe.value),(U=oe.onVnodeBeforeMount)&<(U,C,_)}E(G,_,_.scopeId,J,C)}ke&&yt(_,null,C,"beforeMount");const Ce=(!H||H&&!H.pendingBranch)&&se&&!se.persisted;Ce&&se.beforeEnter(G),o(G,w,I),((U=oe&&oe.onVnodeMounted)||Ce||ke)&&nt(()=>{U&<(U,C,_),Ce&&se.enter(G),ke&&yt(_,null,C,"mounted")},H)},E=(_,w,I,C,H)=>{if(I&&f(_,I),C)for(let F=0;F{for(let U=G;U<_.length;U++){const re=_[U]=W?Ut(_[U]):ft(_[U]);b(null,re,w,I,C,H,F,J,W)}},Y=(_,w,I,C,H,F,J)=>{const W=w.el=_.el;let{patchFlag:G,dynamicChildren:U,dirs:re}=w;G|=_.patchFlag&16;const oe=_.props||Me,ne=w.props||Me;let se;I&&en(I,!1),(se=ne.onVnodeBeforeUpdate)&<(se,I,w,_),re&&yt(w,_,I,"beforeUpdate"),I&&en(I,!0);const _e=H&&w.type!=="foreignObject";if(U?j(_.dynamicChildren,U,W,I,C,_e,F):J||me(_,w,W,null,I,C,_e,F,!1),G>0){if(G&16)S(W,w,oe,ne,I,C,H);else if(G&2&&oe.class!==ne.class&&a(W,"class",null,ne.class,H),G&4&&a(W,"style",oe.style,ne.style,H),G&8){const ke=w.dynamicProps;for(let Ce=0;Ce{se&<(se,I,w,_),re&&yt(w,_,I,"updated")},C)},j=(_,w,I,C,H,F,J)=>{for(let W=0;W{if(I!==C){for(const W in C){if(to(W))continue;const G=C[W],U=I[W];G!==U&&W!=="value"&&a(_,W,U,G,J,w.children,H,F,B)}if(I!==Me)for(const W in I)!to(W)&&!(W in C)&&a(_,W,I[W],null,J,w.children,H,F,B);"value"in C&&a(_,"value",I.value,C.value)}},T=(_,w,I,C,H,F,J,W,G)=>{const U=w.el=_?_.el:c(""),re=w.anchor=_?_.anchor:c("");let{patchFlag:oe,dynamicChildren:ne,slotScopeIds:se}=w;se&&(W=W?W.concat(se):se),_==null?(o(U,I,C),o(re,I,C),z(w.children,I,re,H,F,J,W,G)):oe>0&&oe&64&&ne&&_.dynamicChildren?(j(_.dynamicChildren,ne,I,H,F,J,W),(w.key!=null||H&&w===H.subTree)&&Wl(_,w,!0)):me(_,w,I,re,H,F,J,W,G)},x=(_,w,I,C,H,F,J,W,G)=>{w.slotScopeIds=W,_==null?w.shapeFlag&512?H.ctx.activate(w,I,C,J,G):M(w,I,C,H,F,J,G):$(_,w,G)},M=(_,w,I,C,H,F,J)=>{const W=_.component=gf(_,C,H);if(So(_)&&(W.ctx.renderer=be),bf(W),W.asyncDep){if(H&&H.registerDep(W,K),!_.el){const G=W.subTree=ie(it);y(null,G,w,I)}return}K(W,_,w,I,H,F,J)},$=(_,w,I)=>{const C=w.component=_.component;if(Rd(_,w,I))if(C.asyncDep&&!C.asyncResolved){te(C,w,I);return}else C.next=w,Od(C.update),C.update();else w.el=_.el,C.vnode=w},K=(_,w,I,C,H,F,J)=>{const W=()=>{if(_.isMounted){let{next:re,bu:oe,u:ne,parent:se,vnode:_e}=_,ke=re,Ce;en(_,!1),re?(re.el=_e.el,te(_,re,J)):re=_e,oe&&Yo(oe),(Ce=re.props&&re.props.onVnodeBeforeUpdate)&<(Ce,se,re,_e),en(_,!0);const He=Fr(_),dt=_.subTree;_.subTree=He,b(dt,He,m(dt.el),X(dt),_,H,F),re.el=He.el,ke===null&&xd(_,He.el),ne&&nt(ne,H),(Ce=re.props&&re.props.onVnodeUpdated)&&nt(()=>lt(Ce,se,re,_e),H)}else{let re;const{el:oe,props:ne}=w,{bm:se,m:_e,parent:ke}=_,Ce=xn(w);if(en(_,!1),se&&Yo(se),!Ce&&(re=ne&&ne.onVnodeBeforeMount)&<(re,ke,w),en(_,!0),oe&&ue){const He=()=>{_.subTree=Fr(_),ue(oe,_.subTree,_,H,null)};Ce?w.type.__asyncLoader().then(()=>!_.isUnmounted&&He()):He()}else{const He=_.subTree=Fr(_);b(null,He,I,C,_,H,F),w.el=He.el}if(_e&&nt(_e,H),!Ce&&(re=ne&&ne.onVnodeMounted)){const He=w;nt(()=>lt(re,ke,He),H)}(w.shapeFlag&256||ke&&xn(ke.vnode)&&ke.vnode.shapeFlag&256)&&_.a&&nt(_.a,H),_.isMounted=!0,w=I=C=null}},G=_.effect=new Wa(W,()=>Ir(U),_.scope),U=_.update=()=>G.run();U.id=_.uid,en(_,!0),U()},te=(_,w,I)=>{w.component=_;const C=_.vnode.props;_.vnode=w,_.next=null,ef(_,w.props,C,I),of(_,w.children,I),qn(),Mi(),Vn()},me=(_,w,I,C,H,F,J,W,G=!1)=>{const U=_&&_.children,re=_?_.shapeFlag:0,oe=w.children,{patchFlag:ne,shapeFlag:se}=w;if(ne>0){if(ne&128){ve(U,oe,I,C,H,F,J,W,G);return}else if(ne&256){de(U,oe,I,C,H,F,J,W,G);return}}se&8?(re&16&&B(U,H,F),oe!==U&&u(I,oe)):re&16?se&16?ve(U,oe,I,C,H,F,J,W,G):B(U,H,F,!0):(re&8&&u(I,""),se&16&&z(oe,I,C,H,F,J,W,G))},de=(_,w,I,C,H,F,J,W,G)=>{_=_||In,w=w||In;const U=_.length,re=w.length,oe=Math.min(U,re);let ne;for(ne=0;nere?B(_,H,F,!0,!1,oe):z(w,I,C,H,F,J,W,G,oe)},ve=(_,w,I,C,H,F,J,W,G)=>{let U=0;const re=w.length;let oe=_.length-1,ne=re-1;for(;U<=oe&&U<=ne;){const se=_[U],_e=w[U]=G?Ut(w[U]):ft(w[U]);if(un(se,_e))b(se,_e,I,null,H,F,J,W,G);else break;U++}for(;U<=oe&&U<=ne;){const se=_[oe],_e=w[ne]=G?Ut(w[ne]):ft(w[ne]);if(un(se,_e))b(se,_e,I,null,H,F,J,W,G);else break;oe--,ne--}if(U>oe){if(U<=ne){const se=ne+1,_e=sene)for(;U<=oe;)xe(_[U],H,F,!0),U++;else{const se=U,_e=U,ke=new Map;for(U=_e;U<=ne;U++){const rt=w[U]=G?Ut(w[U]):ft(w[U]);rt.key!=null&&ke.set(rt.key,U)}let Ce,He=0;const dt=ne-_e+1;let gn=!1,Oi=0;const zn=new Array(dt);for(U=0;U=dt){xe(rt,H,F,!0);continue}let bt;if(rt.key!=null)bt=ke.get(rt.key);else for(Ce=_e;Ce<=ne;Ce++)if(zn[Ce-_e]===0&&un(rt,w[Ce])){bt=Ce;break}bt===void 0?xe(rt,H,F,!0):(zn[bt-_e]=U+1,bt>=Oi?Oi=bt:gn=!0,b(rt,w[bt],I,null,H,F,J,W,G),He++)}const Pi=gn?uf(zn):In;for(Ce=Pi.length-1,U=dt-1;U>=0;U--){const rt=_e+U,bt=w[rt],Si=rt+1{const{el:F,type:J,transition:W,children:G,shapeFlag:U}=_;if(U&6){Ae(_.component.subTree,w,I,C);return}if(U&128){_.suspense.move(w,I,C);return}if(U&64){J.move(_,w,I,be);return}if(J===Se){o(F,w,I);for(let oe=0;oeW.enter(F),H);else{const{leave:oe,delayLeave:ne,afterLeave:se}=W,_e=()=>o(F,w,I),ke=()=>{oe(F,()=>{_e(),se&&se()})};ne?ne(F,_e,ke):ke()}else o(F,w,I)},xe=(_,w,I,C=!1,H=!1)=>{const{type:F,props:J,ref:W,children:G,dynamicChildren:U,shapeFlag:re,patchFlag:oe,dirs:ne}=_;if(W!=null&&ur(W,null,I,_,!0),re&256){w.ctx.deactivate(_);return}const se=re&1&&ne,_e=!xn(_);let ke;if(_e&&(ke=J&&J.onVnodeBeforeUnmount)&<(ke,w,_),re&6)ee(_.component,I,C);else{if(re&128){_.suspense.unmount(I,C);return}se&&yt(_,null,w,"beforeUnmount"),re&64?_.type.remove(_,w,I,H,be,C):U&&(F!==Se||oe>0&&oe&64)?B(U,w,I,!1,!0):(F===Se&&oe&384||!H&&re&16)&&B(G,w,I),C&&Fe(_)}(_e&&(ke=J&&J.onVnodeUnmounted)||se)&&nt(()=>{ke&<(ke,w,_),se&&yt(_,null,w,"unmounted")},I)},Fe=_=>{const{type:w,el:I,anchor:C,transition:H}=_;if(w===Se){k(I,C);return}if(w===no){D(_);return}const F=()=>{r(I),H&&!H.persisted&&H.afterLeave&&H.afterLeave()};if(_.shapeFlag&1&&H&&!H.persisted){const{leave:J,delayLeave:W}=H,G=()=>J(I,F);W?W(_.el,F,G):G()}else F()},k=(_,w)=>{let I;for(;_!==w;)I=d(_),r(_),_=I;r(w)},ee=(_,w,I)=>{const{bum:C,scope:H,update:F,subTree:J,um:W}=_;C&&Yo(C),H.stop(),F&&(F.active=!1,xe(J,_,w,I)),W&&nt(W,w),nt(()=>{_.isUnmounted=!0},w),w&&w.pendingBranch&&!w.isUnmounted&&_.asyncDep&&!_.asyncResolved&&_.suspenseId===w.pendingId&&(w.deps--,w.deps===0&&w.resolve())},B=(_,w,I,C=!1,H=!1,F=0)=>{for(let J=F;J<_.length;J++)xe(_[J],w,I,C,H)},X=_=>_.shapeFlag&6?X(_.component.subTree):_.shapeFlag&128?_.suspense.next():d(_.anchor||_.el),pe=(_,w,I)=>{_==null?w._vnode&&xe(w._vnode,null,null,!0):b(w._vnode||null,_,w,null,null,null,I),Mi(),ir(),w._vnode=_},be={p:b,um:xe,m:Ae,r:Fe,mt:M,mc:z,pc:me,pbc:j,n:X,o:e};let fe,ue;return t&&([fe,ue]=t(be)),{render:pe,hydrate:fe,createApp:af(pe,fe)}}function en({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Wl(e,t,n=!1){const o=e.children,r=t.children;if(ce(o)&&ce(r))for(let a=0;a>1,e[n[c]]0&&(t[o]=n[a-1]),n[a]=o)}}for(a=n.length,i=n[a-1];a-- >0;)n[a]=i,i=t[i];return n}const mf=e=>e.__isTeleport,Se=Symbol(void 0),ho=Symbol(void 0),it=Symbol(void 0),no=Symbol(void 0),oo=[];let pt=null;function N(e=!1){oo.push(pt=e?null:[])}function df(){oo.pop(),pt=oo[oo.length-1]||null}let po=1;function Wi(e){po+=e}function Kl(e){return e.dynamicChildren=po>0?pt||In:null,df(),po>0&&pt&&pt.push(e),e}function Q(e,t,n,o,r,a){return Kl(le(e,t,n,o,r,a,!0))}function je(e,t,n,o,r){return Kl(ie(e,t,n,o,r,!0))}function mr(e){return e?e.__v_isVNode===!0:!1}function un(e,t){return e.type===t.type&&e.key===t.key}const Cr="__vInternal",Yl=({key:e})=>e!=null?e:null,Jo=({ref:e,ref_key:t,ref_for:n})=>e!=null?De(e)||Ke(e)||he(e)?{i:Ge,r:e,k:t,f:!!n}:e:null;function le(e,t=null,n=null,o=0,r=null,a=e===Se?0:1,i=!1,c=!1){const s={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Yl(t),ref:t&&Jo(t),scopeId:Dr,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:a,patchFlag:o,dynamicProps:r,dynamicChildren:null,appContext:null};return c?(ri(s,n),a&128&&e.normalize(s)):n&&(s.shapeFlag|=De(n)?8:16),po>0&&!i&&pt&&(s.patchFlag>0||a&6)&&s.patchFlag!==32&&pt.push(s),s}const ie=ff;function ff(e,t=null,n=null,o=0,r=null,a=!1){if((!e||e===Ml)&&(e=it),mr(e)){const c=Gt(e,t,!0);return n&&ri(c,n),po>0&&!a&&pt&&(c.shapeFlag&6?pt[pt.indexOf(e)]=c:pt.push(c)),c.patchFlag|=-2,c}if(Pf(e)&&(e=e.__vccOpts),t){t=hf(t);let{class:c,style:s}=t;c&&!De(c)&&(t.class=Be(c)),Ve(s)&&(_l(s)&&!ce(s)&&(s=Ye({},s)),t.style=Eo(s))}const i=De(e)?1:kd(e)?128:mf(e)?64:Ve(e)?4:he(e)?2:0;return le(e,t,n,o,r,i,a,!0)}function hf(e){return e?_l(e)||Cr in e?Ye({},e):e:null}function Gt(e,t,n=!1){const{props:o,ref:r,patchFlag:a,children:i}=e,c=t?ba(o||{},t):o;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&Yl(c),ref:t&&t.ref?n&&r?ce(r)?r.concat(Jo(t)):[r,Jo(t)]:Jo(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Se?a===-1?16:a|16:a,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Gt(e.ssContent),ssFallback:e.ssFallback&&Gt(e.ssFallback),el:e.el,anchor:e.anchor}}function Xt(e=" ",t=0){return ie(ho,null,e,t)}function pf(e,t){const n=ie(no,null,e);return n.staticCount=t,n}function qe(e="",t=!1){return t?(N(),je(it,null,e)):ie(it,null,e)}function ft(e){return e==null||typeof e=="boolean"?ie(it):ce(e)?ie(Se,null,e.slice()):typeof e=="object"?Ut(e):ie(ho,null,String(e))}function Ut(e){return e.el===null||e.memo?e:Gt(e)}function ri(e,t){let n=0;const{shapeFlag:o}=e;if(t==null)t=null;else if(ce(t))n=16;else if(typeof t=="object")if(o&65){const r=t.default;r&&(r._c&&(r._d=!1),ri(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!(Cr in t)?t._ctx=Ge:r===3&&Ge&&(Ge.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else he(t)?(t={default:t,_ctx:Ge},n=32):(t=String(t),o&64?(n=16,t=[Xt(t)]):n=8);e.children=t,e.shapeFlag|=n}function ba(...e){const t={};for(let n=0;nze||Ge,Mn=e=>{ze=e,e.scope.on()},pn=()=>{ze&&ze.scope.off(),ze=null};function Jl(e){return e.vnode.shapeFlag&4}let $n=!1;function bf(e,t=!1){$n=t;const{props:n,children:o}=e.vnode,r=Jl(e);Xd(e,n,r,t),nf(e,o);const a=r?yf(e,t):void 0;return $n=!1,a}function yf(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=vl(new Proxy(e.ctx,Kd));const{setup:o}=n;if(o){const r=e.setupContext=o.length>1?wf(e):null;Mn(e),qn();const a=Jt(o,e,0,[e.props,r]);if(Vn(),pn(),ol(a)){if(a.then(pn,pn),t)return a.then(i=>{Ki(e,i,t)}).catch(i=>{Oo(i,e,0)});e.asyncDep=a}else Ki(e,a,t)}else Ql(e,t)}function Ki(e,t,n){he(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Ve(t)&&(e.setupState=wl(t)),Ql(e,n)}let Yi;function Ql(e,t,n){const o=e.type;if(!e.render){if(!t&&Yi&&!o.render){const r=o.template;if(r){const{isCustomElement:a,compilerOptions:i}=e.appContext.config,{delimiters:c,compilerOptions:s}=o,l=Ye(Ye({isCustomElement:a,delimiters:c},i),s);o.render=Yi(r,l)}}e.render=o.render||_t}Mn(e),qn(),Yd(e),Vn(),pn()}function Ef(e){return new Proxy(e.attrs,{get(t,n){return ct(e,"get","$attrs"),t[n]}})}function wf(e){const t=o=>{e.exposed=o||{}};let n;return{get attrs(){return n||(n=Ef(e))},slots:e.slots,emit:e.emit,expose:t}}function Mr(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(wl(vl(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in sr)return sr[n](e)}}))}function Of(e,t=!0){return he(e)?e.displayName||e.name:e.name||t&&e.__name}function Pf(e){return he(e)&&"__vccOpts"in e}const Z=(e,t)=>yd(e,t,$n);function Te(e,t,n){const o=arguments.length;return o===2?Ve(t)&&!ce(t)?mr(t)?ie(e,null,[t]):ie(e,t):ie(e,null,t):(o>3?n=Array.prototype.slice.call(arguments,2):o===3&&mr(n)&&(n=[n]),ie(e,t,n))}const Sf="3.2.38",Af="http://www.w3.org/2000/svg",mn=typeof document<"u"?document:null,Ji=mn&&mn.createElement("template"),Tf={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,o)=>{const r=t?mn.createElementNS(Af,e):mn.createElement(e,n?{is:n}:void 0);return e==="select"&&o&&o.multiple!=null&&r.setAttribute("multiple",o.multiple),r},createText:e=>mn.createTextNode(e),createComment:e=>mn.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>mn.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},cloneNode(e){const t=e.cloneNode(!0);return"_value"in e&&(t._value=e._value),t},insertStaticContent(e,t,n,o,r,a){const i=n?n.previousSibling:t.lastChild;if(r&&(r===a||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===a||!(r=r.nextSibling)););else{Ji.innerHTML=o?`${e}`:e;const c=Ji.content;if(o){const s=c.firstChild;for(;s.firstChild;)c.appendChild(s.firstChild);c.removeChild(s)}t.insertBefore(c,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function If(e,t,n){const o=e._vtc;o&&(t=(t?[t,...o]:[...o]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function Lf(e,t,n){const o=e.style,r=De(n);if(n&&!r){for(const a in n)ya(o,a,n[a]);if(t&&!De(t))for(const a in t)n[a]==null&&ya(o,a,"")}else{const a=o.display;r?t!==n&&(o.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(o.display=a)}}const Qi=/\s*!important$/;function ya(e,t,n){if(ce(n))n.forEach(o=>ya(e,t,o));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const o=Df(e,t);Qi.test(n)?e.setProperty(_n(o),n.replace(Qi,""),"important"):e[o]=n}}const Gi=["Webkit","Moz","ms"],Ur={};function Df(e,t){const n=Ur[t];if(n)return n;let o=It(t);if(o!=="filter"&&o in e)return Ur[t]=o;o=Ar(o);for(let r=0;r{let e=Date.now,t=!1;if(typeof window<"u"){Date.now()>document.createEvent("Event").timeStamp&&(e=performance.now.bind(performance));const n=navigator.userAgent.match(/firefox\/(\d+)/i);t=!!(n&&Number(n[1])<=53)}return[e,t]})();let Ea=0;const Cf=Promise.resolve(),Mf=()=>{Ea=0},$f=()=>Ea||(Cf.then(Mf),Ea=Gl());function On(e,t,n,o){e.addEventListener(t,n,o)}function jf(e,t,n,o){e.removeEventListener(t,n,o)}function Hf(e,t,n,o,r=null){const a=e._vei||(e._vei={}),i=a[t];if(o&&i)i.value=o;else{const[c,s]=qf(t);if(o){const l=a[t]=Vf(o,r);On(e,c,l,s)}else i&&(jf(e,c,i,s),a[t]=void 0)}}const Xi=/(?:Once|Passive|Capture)$/;function qf(e){let t;if(Xi.test(e)){t={};let o;for(;o=e.match(Xi);)e=e.slice(0,e.length-o[0].length),t[o[0].toLowerCase()]=!0}return[e[2]===":"?e.slice(3):_n(e.slice(2)),t]}function Vf(e,t){const n=o=>{const r=o.timeStamp||Gl();(kf||r>=n.attached-1)&&ut(Nf(o,n.value),t,5,[o])};return n.value=e,n.attached=$f(),n}function Nf(e,t){if(ce(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(o=>r=>!r._stopped&&o&&o(r))}else return t}const ec=/^on[a-z]/,Ff=(e,t,n,o,r=!1,a,i,c,s)=>{t==="class"?If(e,o,r):t==="style"?Lf(e,n,o):wo(t)?Na(t)||Hf(e,t,n,o,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Bf(e,t,o,r))?xf(e,t,o,a,i,c,s):(t==="true-value"?e._trueValue=o:t==="false-value"&&(e._falseValue=o),Rf(e,t,o,r))};function Bf(e,t,n,o){return o?!!(t==="innerHTML"||t==="textContent"||t in e&&ec.test(t)&&he(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||ec.test(t)&&De(n)?!1:t in e}const Bt="transition",Un="animation",Ao=(e,{slots:t})=>Te(Rl,zf(e),t);Ao.displayName="Transition";const Zl={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};Ao.props=Ye({},Rl.props,Zl);const tn=(e,t=[])=>{ce(e)?e.forEach(n=>n(...t)):e&&e(...t)},tc=e=>e?ce(e)?e.some(t=>t.length>1):e.length>1:!1;function zf(e){const t={};for(const S in e)S in Zl||(t[S]=e[S]);if(e.css===!1)return t;const{name:n="v",type:o,duration:r,enterFromClass:a=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:c=`${n}-enter-to`,appearFromClass:s=a,appearActiveClass:l=i,appearToClass:u=c,leaveFromClass:m=`${n}-leave-from`,leaveActiveClass:d=`${n}-leave-active`,leaveToClass:f=`${n}-leave-to`}=e,v=Uf(r),g=v&&v[0],b=v&&v[1],{onBeforeEnter:p,onEnter:y,onEnterCancelled:P,onLeave:A,onLeaveCancelled:D,onBeforeAppear:q=p,onAppear:R=y,onAppearCancelled:E=P}=t,z=(S,T,x)=>{nn(S,T?u:c),nn(S,T?l:i),x&&x()},Y=(S,T)=>{S._isLeaving=!1,nn(S,m),nn(S,f),nn(S,d),T&&T()},j=S=>(T,x)=>{const M=S?R:y,$=()=>z(T,S,x);tn(M,[T,$]),nc(()=>{nn(T,S?s:a),zt(T,S?u:c),tc(M)||oc(T,o,g,$)})};return Ye(t,{onBeforeEnter(S){tn(p,[S]),zt(S,a),zt(S,i)},onBeforeAppear(S){tn(q,[S]),zt(S,s),zt(S,l)},onEnter:j(!1),onAppear:j(!0),onLeave(S,T){S._isLeaving=!0;const x=()=>Y(S,T);zt(S,m),Yf(),zt(S,d),nc(()=>{!S._isLeaving||(nn(S,m),zt(S,f),tc(A)||oc(S,o,b,x))}),tn(A,[S,x])},onEnterCancelled(S){z(S,!1),tn(P,[S])},onAppearCancelled(S){z(S,!0),tn(E,[S])},onLeaveCancelled(S){Y(S),tn(D,[S])}})}function Uf(e){if(e==null)return null;if(Ve(e))return[Wr(e.enter),Wr(e.leave)];{const t=Wr(e);return[t,t]}}function Wr(e){return or(e)}function zt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function nn(e,t){t.split(/\s+/).forEach(o=>o&&e.classList.remove(o));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function nc(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Wf=0;function oc(e,t,n,o){const r=e._endId=++Wf,a=()=>{r===e._endId&&o()};if(n)return setTimeout(a,n);const{type:i,timeout:c,propCount:s}=Kf(e,t);if(!i)return o();const l=i+"end";let u=0;const m=()=>{e.removeEventListener(l,d),a()},d=f=>{f.target===e&&++u>=s&&m()};setTimeout(()=>{u(n[v]||"").split(", "),r=o(Bt+"Delay"),a=o(Bt+"Duration"),i=rc(r,a),c=o(Un+"Delay"),s=o(Un+"Duration"),l=rc(c,s);let u=null,m=0,d=0;t===Bt?i>0&&(u=Bt,m=i,d=a.length):t===Un?l>0&&(u=Un,m=l,d=s.length):(m=Math.max(i,l),u=m>0?i>l?Bt:Un:null,d=u?u===Bt?a.length:s.length:0);const f=u===Bt&&/\b(transform|all)(,|$)/.test(n[Bt+"Property"]);return{type:u,timeout:m,propCount:d,hasTransform:f}}function rc(e,t){for(;e.lengthac(n)+ac(e[o])))}function ac(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function Yf(){return document.body.offsetHeight}const ic=e=>{const t=e.props["onUpdate:modelValue"]||!1;return ce(t)?n=>Yo(t,n):t};function Jf(e){e.target.composing=!0}function cc(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Qf={created(e,{modifiers:{lazy:t,trim:n,number:o}},r){e._assign=ic(r);const a=o||r.props&&r.props.type==="number";On(e,t?"change":"input",i=>{if(i.target.composing)return;let c=e.value;n&&(c=c.trim()),a&&(c=or(c)),e._assign(c)}),n&&On(e,"change",()=>{e.value=e.value.trim()}),t||(On(e,"compositionstart",Jf),On(e,"compositionend",cc),On(e,"change",cc))},mounted(e,{value:t}){e.value=t==null?"":t},beforeUpdate(e,{value:t,modifiers:{lazy:n,trim:o,number:r}},a){if(e._assign=ic(a),e.composing||document.activeElement===e&&e.type!=="range"&&(n||o&&e.value.trim()===t||(r||e.type==="number")&&or(e.value)===t))return;const i=t==null?"":t;e.value!==i&&(e.value=i)}},Gf={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},Zf=(e,t)=>n=>{if(!("key"in n))return;const o=_n(n.key);if(t.some(r=>r===o||Gf[r]===o))return e(n)},dr={beforeMount(e,{value:t},{transition:n}){e._vod=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):Wn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:o}){!t!=!n&&(o?t?(o.beforeEnter(e),Wn(e,!0),o.enter(e)):o.leave(e,()=>{Wn(e,!1)}):Wn(e,t))},beforeUnmount(e,{value:t}){Wn(e,t)}};function Wn(e,t){e.style.display=t?e._vod:"none"}const Xf=Ye({patchProp:Ff},Tf);let Kr,sc=!1;function eh(){return Kr=sc?Kr:sf(Xf),sc=!0,Kr}const th=(...e)=>{const t=eh().createApp(...e),{mount:n}=t;return t.mount=o=>{const r=nh(o);if(r)return n(r,!0,r instanceof SVGElement)},t};function nh(e){return De(e)?document.querySelector(e):e}const oh=JSON.parse('{"base":"/","lang":"en-US","title":"arthas","description":"arthas user document","head":[["link",{"rel":"icon","href":"/images/favicon.ico"}],["meta",{"name":"viewport","content":"width=device-width, initial-scale=1.0"}],["meta",{"property":"og:title","content":"Arthas"}],["meta",{"property":"og:image:alt","content":"Alibaba Java Diagnostic Tool Arthas/Alibaba Java\u8BCA\u65AD\u5229\u5668Arthas - alibaba/arthas: Alibaba Java Diagnostic Tool Arthas/Alibaba Java\u8BCA\u65AD\u5229\u5668Arthas"}],["meta",{"property":"og:image","content":"/images/arthas_mate_image.png"}],["meta",{"property":"og:description","content":"Alibaba Java Diagnostic Tool Arthas/Alibaba Java\u8BCA\u65AD\u5229\u5668Arthas - alibaba/arthas: Alibaba Java Diagnostic Tool Arthas/Alibaba Java\u8BCA\u65AD\u5229\u5668Arthas"}],["meta",{"property":"og:image:width","content":"1200"}],["meta",{"property":"og:image:height","content":"600"}],["meta",{"property":"twitter:image:src","content":"/images/arthas_mate_image.png"}],["meta",{"property":"twitter:image:alt","content":"Alibaba Java Diagnostic Tool Arthas/Alibaba Java\u8BCA\u65AD\u5229\u5668Arthas - alibaba/arthas: Alibaba Java Diagnostic Tool Arthas/Alibaba Java\u8BCA\u65AD\u5229\u5668Arthas"}],["meta",{"itemprop":"name","content":"Arthas"}],["meta",{"itemprop":"image","content":"/images/arthas_mate_image.png"}],["meta",{"itemprop":"description","content":"Alibaba Java Diagnostic Tool Arthas/Alibaba Java\u8BCA\u65AD\u5229\u5668Arthas - alibaba/arthas: Alibaba Java Diagnostic Tool Arthas/Alibaba Java\u8BCA\u65AD\u5229\u5668Arthas"}],["script",{},"\\n var _hmt = _hmt || [];\\n (function() {\\n var hm = document.createElement(\\"script\\");\\n hm.src = \\"https://hm.baidu.com/hm.js?d5c5e25b100f0eb51a4c35c8a86ea9b4\\";\\n var s = document.getElementsByTagName(\\"script\\")[0]; \\n s.parentNode.insertBefore(hm, s);\\n })();\\n "],["meta",{"name":"aes-config","content":"pid=xux-opensource&user_type=101&uid=&username=&dim10=arthas"}],["script",{"src":"//g.alicdn.com/alilog/mlog/aplus_v2.js","id":"beacon-aplus","exparams":"clog=o&aplus&sidx=aplusSidx&ckx=aplusCkx"}],["script",{"src":"//g.alicdn.com/aes/??tracker/1.0.34/index.js,tracker-plugin-pv/2.4.5/index.js,tracker-plugin-event/1.2.5/index.js,tracker-plugin-jserror/1.0.13/index.js,tracker-plugin-api/1.1.14/index.js,tracker-plugin-perf/1.1.8/index.js,tracker-plugin-eventTiming/1.0.4/index.js"}]],"locales":{"/":{"lang":"zh-CN","title":"arthas","description":"arthas \u4F7F\u7528\u6587\u6863"},"/en/":{"lang":"en-US","title":"arthas","description":"arthas user document"}}}');var rh=([e,t,n])=>e==="meta"&&t.name?`${e}.${t.name}`:["title","base"].includes(e)?e:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,t,n]),ah=e=>{const t=new Set,n=[];return e.forEach(o=>{const r=rh(o);t.has(r)||(t.add(r),n.push(o))}),n},To=e=>/^(https?:)?\/\//.test(e),ih=e=>/^mailto:/.test(e),ch=e=>/^tel:/.test(e),ii=e=>Object.prototype.toString.call(e)==="[object Object]",Xl=e=>e.replace(/\/$/,""),eu=e=>e.replace(/^\//,""),tu=(e,t)=>{const n=Object.keys(e).sort((o,r)=>{const a=r.split("/").length-o.split("/").length;return a!==0?a:r.length-o.length});for(const o of n)if(t.startsWith(o))return o;return"/"},lc=(e,t="/")=>e.replace(/^(https?:)?\/\/[^/]*/,"").replace(new RegExp(`^${t}`),"/");const nu={"v-8daa1a0e":L(()=>h(()=>import("./index.html.086821c2.js"),[])),"v-2d0a870d":L(()=>h(()=>import("./index.html.18118d67.js"),[])),"v-7445f070":L(()=>h(()=>import("./index.html.760efd19.js"),["assets/index.html.760efd19.js","assets/arthas.b23d3e5a.js"])),"v-0d09f68d":L(()=>h(()=>import("./advanced-use.html.2466ac6e.js"),[])),"v-46e53834":L(()=>h(()=>import("./advice-class.html.79697a1e.js"),[])),"v-37178538":L(()=>h(()=>import("./agent.html.2480ffd9.js"),[])),"v-71d23f41":L(()=>h(()=>import("./ai.html.4fc4211a.js"),[])),"v-5c517900":L(()=>h(()=>import("./arthas-properties.html.7dc17e44.js"),[])),"v-02eb6d0d":L(()=>h(()=>import("./arthas3.html.98a1b21b.js"),[])),"v-4f82df66":L(()=>h(()=>import("./async.html.60215e2c.js"),[])),"v-d0358c7e":L(()=>h(()=>import("./auth.html.15a8fda2.js"),[])),"v-3157067a":L(()=>h(()=>import("./base64.html.9f351db1.js"),[])),"v-cc8f4ae6":L(()=>h(()=>import("./batch-support.html.f1130b14.js"),[])),"v-6542b733":L(()=>h(()=>import("./cat.html.5c2eddad.js"),[])),"v-d6087b6c":L(()=>h(()=>import("./classloader-metaspace.html.249e56bc.js"),[])),"v-49b1709e":L(()=>h(()=>import("./classloader.html.1dbda3bd.js"),[])),"v-ad1b2b42":L(()=>h(()=>import("./cls.html.14369b3c.js"),[])),"v-5ed4d0e1":L(()=>h(()=>import("./commands.html.3d045ea7.js"),[])),"v-3992adde":L(()=>h(()=>import("./contact-us.html.bca72555.js"),["assets/contact-us.html.bca72555.js","assets/qqgroup3_qr.a24fdd88.js"])),"v-0d1e3f35":L(()=>h(()=>import("./dashboard.html.113af276.js"),["assets/dashboard.html.113af276.js","assets/dashboard.eb1e1fee.js"])),"v-02361049":L(()=>h(()=>import("./docker.html.da50033d.js"),[])),"v-2116d2e1":L(()=>h(()=>import("./download.html.6df5a02f.js"),[])),"v-1fe4a616":L(()=>h(()=>import("./dump.html.894aad59.js"),[])),"v-2c48f364":L(()=>h(()=>import("./echo.html.8bd53ad3.js"),[])),"v-6a3a70c0":L(()=>h(()=>import("./external-command.html.f331f51e.js"),[])),"v-d070981a":L(()=>h(()=>import("./faq.html.0b4e272a.js"),[])),"v-78c35af6":L(()=>h(()=>import("./getstatic.html.0079aa66.js"),[])),"v-63f4cd5a":L(()=>h(()=>import("./grep.html.a6f74b81.js"),[])),"v-809381ca":L(()=>h(()=>import("./groovy.html.74effc34.js"),[])),"v-07868089":L(()=>h(()=>import("./heapdump.html.3c58b047.js"),[])),"v-e3b34070":L(()=>h(()=>import("./help.html.0f234388.js"),[])),"v-26f43d96":L(()=>h(()=>import("./history.html.a9fdd95c.js"),[])),"v-225de034":L(()=>h(()=>import("./http-api.html.99c4fcf0.js"),["assets/http-api.html.99c4fcf0.js","assets/arthas-web-ui.89f4fc6d.js"])),"v-7c670020":L(()=>h(()=>import("./idea-plugin.html.34a25f10.js"),[])),"v-0cb398f4":L(()=>h(()=>import("./install-detail.html.40e05e2a.js"),[])),"v-211d675c":L(()=>h(()=>import("./jad.html.2e62e37f.js"),[])),"v-41806853":L(()=>h(()=>import("./jfr.html.fc123fb3.js"),["assets/jfr.html.fc123fb3.js","assets/arthas-output-recording.5e4ef7bc.js"])),"v-f1483d70":L(()=>h(()=>import("./jvm.html.9b922226.js"),[])),"v-4039cdec":L(()=>h(()=>import("./keymap.html.33e7213e.js"),[])),"v-54781216":L(()=>h(()=>import("./line.html.70ec176e.js"),[])),"v-5ae8aed9":L(()=>h(()=>import("./logger.html.c09808a8.js"),[])),"v-6a31cc55":L(()=>h(()=>import("./manual-install.html.81853c98.js"),[])),"v-8ebd6c68":L(()=>h(()=>import("./mbean.html.ee4f07f1.js"),[])),"v-3b401ada":L(()=>h(()=>import("./mc.html.9ed50f47.js"),[])),"v-67bc6553":L(()=>h(()=>import("./mcp-server.html.b2d1ada5.js"),[])),"v-4d9433f0":L(()=>h(()=>import("./memory.html.8e88a19c.js"),[])),"v-6e88d7a2":L(()=>h(()=>import("./monitor.html.b4c17a07.js"),[])),"v-dcfb9060":L(()=>h(()=>import("./ognl-express.html.1fb465fc.js"),[])),"v-627e52da":L(()=>h(()=>import("./ognl.html.c39364dd.js"),[])),"v-27b6152a":L(()=>h(()=>import("./options.html.dae019ce.js"),[])),"v-2f05b636":L(()=>h(()=>import("./perfcounter.html.96a88381.js"),[])),"v-13eae420":L(()=>h(()=>import("./profiler.html.8e2f4114.js"),["assets/profiler.html.8e2f4114.js","assets/arthas-output-svg.30f64f53.js"])),"v-1c2d8c2c":L(()=>h(()=>import("./pwd.html.a1551912.js"),[])),"v-5afc3a07":L(()=>h(()=>import("./quick-start.html.7059ebe7.js"),[])),"v-aa7c750c":L(()=>h(()=>import("./quit.html.44df6ca4.js"),[])),"v-0446ad7b":L(()=>h(()=>import("./redefine.html.05bba39f.js"),[])),"v-648880ae":L(()=>h(()=>import("./release-notes.html.c5c1003b.js"),[])),"v-71f77d4c":L(()=>h(()=>import("./reset.html.5e039e96.js"),[])),"v-54cde250":L(()=>h(()=>import("./retransform.html.cee06ec8.js"),[])),"v-8e632816":L(()=>h(()=>import("./save-log.html.fea95237.js"),[])),"v-1fc55619":L(()=>h(()=>import("./sc.html.982b84c0.js"),[])),"v-3891b473":L(()=>h(()=>import("./session.html.35f7a4aa.js"),[])),"v-30d5cc4f":L(()=>h(()=>import("./sm.html.552b6b44.js"),[])),"v-07cf9d55":L(()=>h(()=>import("./spring-boot-starter.html.adad135d.js"),[])),"v-b75a107e":L(()=>h(()=>import("./stack.html.39dc52db.js"),[])),"v-a9c412f2":L(()=>h(()=>import("./start-arthas.html.497d3293.js"),[])),"v-bc0910b2":L(()=>h(()=>import("./stop.html.9224e553.js"),[])),"v-0333612e":L(()=>h(()=>import("./sysenv.html.e76b6bf3.js"),[])),"v-7012b8ce":L(()=>h(()=>import("./sysprop.html.0dfbbffb.js"),[])),"v-0536edb5":L(()=>h(()=>import("./tee.html.26f6c8a9.js"),[])),"v-10845ac2":L(()=>h(()=>import("./thread.html.f8f09dc5.js"),[])),"v-65d67724":L(()=>h(()=>import("./trace.html.27ac97ec.js"),[])),"v-71adf3e9":L(()=>h(()=>import("./tt.html.a410b6a0.js"),[])),"v-d2ddc9fe":L(()=>h(()=>import("./tunnel.html.3a98510a.js"),["assets/tunnel.html.3a98510a.js","assets/tunnel-server-agents.03d5eafa.js"])),"v-5b5d3371":L(()=>h(()=>import("./version.html.e13ddf0e.js"),[])),"v-40db67fd":L(()=>h(()=>import("./vmoption.html.7a568db9.js"),[])),"v-10890efa":L(()=>h(()=>import("./vmtool.html.27325bff.js"),[])),"v-24fc49da":L(()=>h(()=>import("./watch.html.2383ed88.js"),[])),"v-a5f6e7aa":L(()=>h(()=>import("./web-console.html.e58ea91b.js"),["assets/web-console.html.e58ea91b.js","assets/web-console-local.156ba0ce.js"])),"v-07555a84":L(()=>h(()=>import("./index.html.34145a94.js"),["assets/index.html.34145a94.js","assets/arthas.b23d3e5a.js"])),"v-463d120e":L(()=>h(()=>import("./advanced-use.html.38aef1b4.js"),[])),"v-a736375c":L(()=>h(()=>import("./advice-class.html.7352d445.js"),[])),"v-f6b5c310":L(()=>h(()=>import("./agent.html.d870df79.js"),[])),"v-7a0f16ad":L(()=>h(()=>import("./ai.html.76467e93.js"),[])),"v-74fb2694":L(()=>h(()=>import("./arthas-properties.html.c45f5949.js"),[])),"v-786f7161":L(()=>h(()=>import("./async.html.4eaabb46.js"),[])),"v-f76c33a6":L(()=>h(()=>import("./auth.html.031f3521.js"),[])),"v-d17b7034":L(()=>h(()=>import("./base64.html.a74ba9fa.js"),[])),"v-765e30be":L(()=>h(()=>import("./batch-support.html.8e77cbb4.js"),[])),"v-64a0cd47":L(()=>h(()=>import("./cat.html.a8a712c6.js"),[])),"v-6e8ffb5e":L(()=>h(()=>import("./classloader-metaspace.html.1d325e53.js"),[])),"v-fc1b9a9c":L(()=>h(()=>import("./classloader.html.0346e215.js"),[])),"v-ae5eff1a":L(()=>h(()=>import("./cls.html.77bb73a5.js"),[])),"v-12153166":L(()=>h(()=>import("./commands.html.0766e205.js"),[])),"v-4be7594a":L(()=>h(()=>import("./contact-us.html.c13483a2.js"),["assets/contact-us.html.c13483a2.js","assets/qqgroup3_qr.a24fdd88.js"])),"v-79107649":L(()=>h(()=>import("./dashboard.html.981a5405.js"),["assets/dashboard.html.981a5405.js","assets/dashboard.eb1e1fee.js"])),"v-682151b5":L(()=>h(()=>import("./docker.html.3597bdbf.js"),[])),"v-8d912d66":L(()=>h(()=>import("./download.html.5f1c78c9.js"),[])),"v-471b4d3e":L(()=>h(()=>import("./dump.html.30dc9666.js"),[])),"v-18ad9fd0":L(()=>h(()=>import("./echo.html.1ca1bcbf.js"),[])),"v-ef7849a8":L(()=>h(()=>import("./external-command.html.cc4ab827.js"),[])),"v-d1b46bf2":L(()=>h(()=>import("./faq.html.8aecb0b8.js"),[])),"v-2f908999":L(()=>h(()=>import("./getstatic.html.d3e5edb1.js"),[])),"v-8b2b7482":L(()=>h(()=>import("./grep.html.c007dc7c.js"),[])),"v-25a18087":L(()=>h(()=>import("./groovy.html.47cc1adc.js"),[])),"v-c0b1d216":L(()=>h(()=>import("./heapdump.html.291f6f55.js"),[])),"v-7a8b0c34":L(()=>h(()=>import("./help.html.9a08c3c3.js"),[])),"v-4402cd49":L(()=>h(()=>import("./history.html.0a1c3393.js"),[])),"v-8b0312c0":L(()=>h(()=>import("./http-api.html.d561b855.js"),["assets/http-api.html.d561b855.js","assets/arthas-web-ui.89f4fc6d.js"])),"v-96b07b98":L(()=>h(()=>import("./idea-plugin.html.7d6cbcc9.js"),[])),"v-319f48f2":L(()=>h(()=>import("./install-detail.html.041805f1.js"),[])),"v-207b7d70":L(()=>h(()=>import("./jad.html.1626c1c4.js"),[])),"v-40de7e67":L(()=>h(()=>import("./jfr.html.2139c5d1.js"),["assets/jfr.html.2139c5d1.js","assets/arthas-output-recording.5e4ef7bc.js"])),"v-f28c1148":L(()=>h(()=>import("./jvm.html.43ae7a7d.js"),[])),"v-b3b5e150":L(()=>h(()=>import("./keymap.html.bf1351b4.js"),[])),"v-7baeb93e":L(()=>h(()=>import("./line.html.01eb3559.js"),[])),"v-7e581f76":L(()=>h(()=>import("./logger.html.b88626af.js"),[])),"v-bbaa3c7e":L(()=>h(()=>import("./manual-install.html.315a4f72.js"),[])),"v-58d22ae0":L(()=>h(()=>import("./mbean.html.d1e0ff54.js"),[])),"v-2ac66c02":L(()=>h(()=>import("./mc.html.f0819ad2.js"),[])),"v-7a1110bf":L(()=>h(()=>import("./mcp-server.html.c2f288cd.js"),[])),"v-3f212774":L(()=>h(()=>import("./memory.html.e96b1c33.js"),[])),"v-20388043":L(()=>h(()=>import("./monitor.html.be46b9bd.js"),[])),"v-6159b83c":L(()=>h(()=>import("./ognl-express.html.3082adb7.js"),[])),"v-89b4fa02":L(()=>h(()=>import("./ognl.html.d226d5a4.js"),[])),"v-43a1e17f":L(()=>h(()=>import("./options.html.12136572.js"),[])),"v-6746784a":L(()=>h(()=>import("./perfcounter.html.e11ca3a1.js"),[])),"v-a7e90ae8":L(()=>h(()=>import("./profiler.html.3f6cfb27.js"),["assets/profiler.html.3f6cfb27.js","assets/arthas-output-svg.30f64f53.js"])),"v-1b8ba240":L(()=>h(()=>import("./pwd.html.60a0a503.js"),[])),"v-d98607ca":L(()=>h(()=>import("./quick-start.html.90bb144c.js"),[])),"v-d1b31c34":L(()=>h(()=>import("./quit.html.de692497.js"),[])),"v-c7317832":L(()=>h(()=>import("./redefine.html.c7e214b6.js"),[])),"v-e0bde47c":L(()=>h(()=>import("./release-notes.html.4d2c5e1d.js"),[])),"v-6735226e":L(()=>h(()=>import("./reset.html.9c6228ed.js"),[])),"v-e5e2b738":L(()=>h(()=>import("./retransform.html.822f2ec7.js"),[])),"v-50ef0261":L(()=>h(()=>import("./save-log.html.aaad8817.js"),[])),"v-28022d85":L(()=>h(()=>import("./sc.html.049f2400.js"),[])),"v-dfe2bef2":L(()=>h(()=>import("./session.html.fa0a110f.js"),[])),"v-3912a3bb":L(()=>h(()=>import("./sm.html.fd569c95.js"),[])),"v-71870b69":L(()=>h(()=>import("./spring-boot-starter.html.cb1cd476.js"),[])),"v-4483d8d5":L(()=>h(()=>import("./stack.html.bdb92f2d.js"),[])),"v-7af576f3":L(()=>h(()=>import("./start-arthas.html.1a3db2ff.js"),[])),"v-e33fb7da":L(()=>h(()=>import("./stop.html.c30e7079.js"),[])),"v-645190d5":L(()=>h(()=>import("./sysenv.html.33a80b4e.js"),[])),"v-1f738fad":L(()=>h(()=>import("./sysprop.html.ae3ef70a.js"),[])),"v-049503c9":L(()=>h(()=>import("./tee.html.80593816.js"),[])),"v-5da9140b":L(()=>h(()=>import("./thread.html.bceb3488.js"),[])),"v-06075838":L(()=>h(()=>import("./trace.html.63fe4169.js"),[])),"v-79eacb55":L(()=>h(()=>import("./tt.html.2b487719.js"),[])),"v-07074726":L(()=>h(()=>import("./tunnel.html.7e8c485e.js"),["assets/tunnel.html.7e8c485e.js","assets/tunnel-server-agents.03d5eafa.js"])),"v-9a4bc0f6":L(()=>h(()=>import("./version.html.3edc2ceb.js"),[])),"v-4e08032e":L(()=>h(()=>import("./vmoption.html.b0134475.js"),[])),"v-76745066":L(()=>h(()=>import("./vmtool.html.9e179166.js"),[])),"v-75a5aa24":L(()=>h(()=>import("./watch.html.9d383a57.js"),[])),"v-35756382":L(()=>h(()=>import("./web-console.html.0614d78d.js"),["assets/web-console.html.0614d78d.js","assets/web-console-local.156ba0ce.js"])),"v-3706649a":L(()=>h(()=>import("./404.html.58d317de.js"),[]))};var Dt=(e={})=>e;function ci(e,t,n){var o,r,a;t===void 0&&(t=50),n===void 0&&(n={});var i=(o=n.isImmediate)!=null&&o,c=(r=n.callback)!=null&&r,s=n.maxWait,l=Date.now(),u=[];function m(){if(s!==void 0){var f=Date.now()-l;if(f+t>=s)return s-f}return t}var d=function(){var f=[].slice.call(arguments),v=this;return new Promise(function(g,b){var p=i&&a===void 0;if(a!==void 0&&clearTimeout(a),a=setTimeout(function(){if(a=void 0,l=Date.now(),!i){var P=e.apply(v,f);c&&c(P),u.forEach(function(A){return(0,A.resolve)(P)}),u=[]}},m()),p){var y=e.apply(v,f);return c&&c(y),g(y)}u.push({resolve:g,reject:b})})};return d.cancel=function(f){a!==void 0&&clearTimeout(a),u.forEach(function(v){return(0,v.reject)(f)}),u=[]},d}const uc=()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,sh=()=>window.scrollTo({top:0,behavior:"smooth"});const lh=Ne({name:"BackToTop",setup(){const e=Ie(0),t=Z(()=>e.value>300),n=ci(()=>{e.value=uc()},100);tt(()=>{e.value=uc(),window.addEventListener("scroll",()=>n())});const o=Te("div",{class:"back-to-top",onClick:sh});return()=>Te(Ao,{name:"back-to-top"},()=>t.value?o:null)}}),uh=Dt({rootComponents:[lh]});const mh=Te("svg",{class:"external-link-icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[Te("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),Te("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),dh=Ne({name:"ExternalLinkIcon",props:{locales:{type:Object,required:!1,default:()=>({})}},setup(e){const t=Bn(),n=Z(()=>{var o;return(o=e.locales[t.value])!=null?o:{openInNewWindow:"open in new window"}});return()=>Te("span",[mh,Te("span",{class:"external-link-icon-sr-only"},n.value.openInNewWindow)])}}),fh={"/":{openInNewWindow:"\u5728\u65B0\u7A97\u53E3\u6253\u5F00"},"/en/":{openInNewWindow:"open in new window"}},hh=Dt({enhance({app:e}){e.component("ExternalLinkIcon",Te(dh,{locales:fh}))}});/*! medium-zoom 1.0.6 | MIT License | https://github.com/francoischalifour/medium-zoom */var cn=Object.assign||function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},o=window.Promise||function(S){function T(){}S(T,T)},r=function(S){var T=S.target;if(T===z){v();return}P.indexOf(T)!==-1&&g({target:T})},a=function(){if(!(D||!E.original)){var S=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(q-S)>R.scrollOffset&&setTimeout(v,150)}},i=function(S){var T=S.key||S.keyCode;(T==="Escape"||T==="Esc"||T===27)&&v()},c=function(){var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},T=S;if(S.background&&(z.style.background=S.background),S.container&&S.container instanceof Object&&(T.container=cn({},R.container,S.container)),S.template){var k=Qo(S.template)?S.template:document.querySelector(S.template);T.template=k}return R=cn({},R,T),P.forEach(function(M){M.dispatchEvent(bn("medium-zoom:update",{detail:{zoom:Y}}))}),Y},s=function(){var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return e(cn({},R,S))},l=function(){for(var S=arguments.length,T=Array(S),k=0;k0?T.reduce(function($,K){return[].concat($,dc(K))},[]):P;return M.forEach(function($){$.classList.remove("medium-zoom-image"),$.dispatchEvent(bn("medium-zoom:detach",{detail:{zoom:Y}}))}),P=P.filter(function($){return M.indexOf($)===-1}),Y},m=function(S,T){var k=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return P.forEach(function(M){M.addEventListener("medium-zoom:"+S,T,k)}),A.push({type:"medium-zoom:"+S,listener:T,options:k}),Y},d=function(S,T){var k=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return P.forEach(function(M){M.removeEventListener("medium-zoom:"+S,T,k)}),A=A.filter(function(M){return!(M.type==="medium-zoom:"+S&&M.listener.toString()===T.toString())}),Y},f=function(){var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},T=S.target,k=function(){var $={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},K=void 0,te=void 0;if(R.container)if(R.container instanceof Object)$=cn({},$,R.container),K=$.width-$.left-$.right-R.margin*2,te=$.height-$.top-$.bottom-R.margin*2;else{var me=Qo(R.container)?R.container:document.querySelector(R.container),de=me.getBoundingClientRect(),ve=de.width,Ae=de.height,ke=de.left,Fe=de.top;$=cn({},$,{width:ve,height:Ae,left:ke,top:Fe})}K=K||$.width-R.margin*2,te=te||$.height-R.margin*2;var x=E.zoomedHd||E.original,ee=mc(x)?K:x.naturalWidth||K,B=mc(x)?te:x.naturalHeight||te,X=x.getBoundingClientRect(),pe=X.top,be=X.left,fe=X.width,ue=X.height,_=Math.min(ee,K)/fe,w=Math.min(B,te)/ue,I=Math.min(_,w),C=(-be+(K-fe)/2+R.margin+$.left)/I,H=(-pe+(te-ue)/2+R.margin+$.top)/I,F="scale("+I+") translate3d("+C+"px, "+H+"px, 0)";E.zoomed.style.transform=F,E.zoomedHd&&(E.zoomedHd.style.transform=F)};return new o(function(M){if(T&&P.indexOf(T)===-1){M(Y);return}var $=function ve(){D=!1,E.zoomed.removeEventListener("transitionend",ve),E.original.dispatchEvent(bn("medium-zoom:opened",{detail:{zoom:Y}})),M(Y)};if(E.zoomed){M(Y);return}if(T)E.original=T;else if(P.length>0){var K=P;E.original=K[0]}else{M(Y);return}if(E.original.dispatchEvent(bn("medium-zoom:open",{detail:{zoom:Y}})),q=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,D=!0,E.zoomed=vh(E.original),document.body.appendChild(z),R.template){var te=Qo(R.template)?R.template:document.querySelector(R.template);E.template=document.createElement("div"),E.template.appendChild(te.content.cloneNode(!0)),document.body.appendChild(E.template)}if(document.body.appendChild(E.zoomed),window.requestAnimationFrame(function(){document.body.classList.add("medium-zoom--opened")}),E.original.classList.add("medium-zoom-image--hidden"),E.zoomed.classList.add("medium-zoom-image--opened"),E.zoomed.addEventListener("click",v),E.zoomed.addEventListener("transitionend",$),E.original.getAttribute("data-zoom-src")){E.zoomedHd=E.zoomed.cloneNode(),E.zoomedHd.removeAttribute("srcset"),E.zoomedHd.removeAttribute("sizes"),E.zoomedHd.src=E.zoomed.getAttribute("data-zoom-src"),E.zoomedHd.onerror=function(){clearInterval(me),console.warn("Unable to reach the zoom image target "+E.zoomedHd.src),E.zoomedHd=null,k()};var me=setInterval(function(){E.zoomedHd.complete&&(clearInterval(me),E.zoomedHd.classList.add("medium-zoom-image--opened"),E.zoomedHd.addEventListener("click",v),document.body.appendChild(E.zoomedHd),k())},10)}else if(E.original.hasAttribute("srcset")){E.zoomedHd=E.zoomed.cloneNode(),E.zoomedHd.removeAttribute("sizes"),E.zoomedHd.removeAttribute("loading");var de=E.zoomedHd.addEventListener("load",function(){E.zoomedHd.removeEventListener("load",de),E.zoomedHd.classList.add("medium-zoom-image--opened"),E.zoomedHd.addEventListener("click",v),document.body.appendChild(E.zoomedHd),k()})}else k()})},v=function(){return new o(function(S){if(D||!E.original){S(Y);return}var T=function k(){E.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(E.zoomed),E.zoomedHd&&document.body.removeChild(E.zoomedHd),document.body.removeChild(z),E.zoomed.classList.remove("medium-zoom-image--opened"),E.template&&document.body.removeChild(E.template),D=!1,E.zoomed.removeEventListener("transitionend",k),E.original.dispatchEvent(bn("medium-zoom:closed",{detail:{zoom:Y}})),E.original=null,E.zoomed=null,E.zoomedHd=null,E.template=null,S(Y)};D=!0,document.body.classList.remove("medium-zoom--opened"),E.zoomed.style.transform="",E.zoomedHd&&(E.zoomedHd.style.transform=""),E.template&&(E.template.style.transition="opacity 150ms",E.template.style.opacity=0),E.original.dispatchEvent(bn("medium-zoom:close",{detail:{zoom:Y}})),E.zoomed.addEventListener("transitionend",T)})},g=function(){var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},T=S.target;return E.original?v():f({target:T})},b=function(){return R},p=function(){return P},y=function(){return E.original},P=[],A=[],D=!1,q=0,R=n,E={original:null,zoomed:null,zoomedHd:null,template:null};Object.prototype.toString.call(t)==="[object Object]"?R=t:(t||typeof t=="string")&&l(t),R=cn({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},R);var z=_h(R.background);document.addEventListener("click",r),document.addEventListener("keyup",i),document.addEventListener("scroll",a),window.addEventListener("resize",v);var Y={open:f,close:v,toggle:g,update:c,clone:s,attach:l,detach:u,on:m,off:d,getOptions:b,getImages:p,getZoomedImage:y};return Y};function bh(e,t){t===void 0&&(t={});var n=t.insertAt;if(!(!e||typeof document>"u")){var o=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css",n==="top"&&o.firstChild?o.insertBefore(r,o.firstChild):o.appendChild(r),r.styleSheet?r.styleSheet.cssText=e:r.appendChild(document.createTextNode(e))}}var yh=".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}";bh(yh);const Eh=gh,wh=Symbol("mediumZoom");const Oh=".theme-default-content > img, .theme-default-content :not(a) > img",Ph={},Sh=300,Ah=Dt({enhance({app:e,router:t}){const n=Eh(Ph);n.refresh=(o=Oh)=>{n.detach(),n.attach(o)},e.provide(wh,n),t.afterEach(()=>{setTimeout(()=>n.refresh(),Sh)})}});/*! +See: https://github.com/francoischalifour/medium-zoom`)}},_h=function(t){var n=document.createElement("div");return n.classList.add("medium-zoom-overlay"),n.style.background=t,n},vh=function(t){var n=t.getBoundingClientRect(),o=n.top,r=n.left,a=n.width,i=n.height,c=t.cloneNode(),s=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,l=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;return c.removeAttribute("id"),c.style.position="absolute",c.style.top=o+s+"px",c.style.left=r+l+"px",c.style.width=a+"px",c.style.height=i+"px",c.style.transform="",c},bn=function(t,n){var o=cn({bubbles:!1,cancelable:!1,detail:void 0},n);if(typeof window.CustomEvent=="function")return new CustomEvent(t,o);var r=document.createEvent("CustomEvent");return r.initCustomEvent(t,o.bubbles,o.cancelable,o.detail),r},gh=function e(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=window.Promise||function(S){function T(){}S(T,T)},r=function(S){var T=S.target;if(T===z){v();return}P.indexOf(T)!==-1&&g({target:T})},a=function(){if(!(D||!E.original)){var S=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(q-S)>R.scrollOffset&&setTimeout(v,150)}},i=function(S){var T=S.key||S.keyCode;(T==="Escape"||T==="Esc"||T===27)&&v()},c=function(){var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},T=S;if(S.background&&(z.style.background=S.background),S.container&&S.container instanceof Object&&(T.container=cn({},R.container,S.container)),S.template){var x=Qo(S.template)?S.template:document.querySelector(S.template);T.template=x}return R=cn({},R,T),P.forEach(function(M){M.dispatchEvent(bn("medium-zoom:update",{detail:{zoom:Y}}))}),Y},s=function(){var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return e(cn({},R,S))},l=function(){for(var S=arguments.length,T=Array(S),x=0;x0?T.reduce(function($,K){return[].concat($,dc(K))},[]):P;return M.forEach(function($){$.classList.remove("medium-zoom-image"),$.dispatchEvent(bn("medium-zoom:detach",{detail:{zoom:Y}}))}),P=P.filter(function($){return M.indexOf($)===-1}),Y},m=function(S,T){var x=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return P.forEach(function(M){M.addEventListener("medium-zoom:"+S,T,x)}),A.push({type:"medium-zoom:"+S,listener:T,options:x}),Y},d=function(S,T){var x=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return P.forEach(function(M){M.removeEventListener("medium-zoom:"+S,T,x)}),A=A.filter(function(M){return!(M.type==="medium-zoom:"+S&&M.listener.toString()===T.toString())}),Y},f=function(){var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},T=S.target,x=function(){var $={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},K=void 0,te=void 0;if(R.container)if(R.container instanceof Object)$=cn({},$,R.container),K=$.width-$.left-$.right-R.margin*2,te=$.height-$.top-$.bottom-R.margin*2;else{var me=Qo(R.container)?R.container:document.querySelector(R.container),de=me.getBoundingClientRect(),ve=de.width,Ae=de.height,xe=de.left,Fe=de.top;$=cn({},$,{width:ve,height:Ae,left:xe,top:Fe})}K=K||$.width-R.margin*2,te=te||$.height-R.margin*2;var k=E.zoomedHd||E.original,ee=mc(k)?K:k.naturalWidth||K,B=mc(k)?te:k.naturalHeight||te,X=k.getBoundingClientRect(),pe=X.top,be=X.left,fe=X.width,ue=X.height,_=Math.min(ee,K)/fe,w=Math.min(B,te)/ue,I=Math.min(_,w),C=(-be+(K-fe)/2+R.margin+$.left)/I,H=(-pe+(te-ue)/2+R.margin+$.top)/I,F="scale("+I+") translate3d("+C+"px, "+H+"px, 0)";E.zoomed.style.transform=F,E.zoomedHd&&(E.zoomedHd.style.transform=F)};return new o(function(M){if(T&&P.indexOf(T)===-1){M(Y);return}var $=function ve(){D=!1,E.zoomed.removeEventListener("transitionend",ve),E.original.dispatchEvent(bn("medium-zoom:opened",{detail:{zoom:Y}})),M(Y)};if(E.zoomed){M(Y);return}if(T)E.original=T;else if(P.length>0){var K=P;E.original=K[0]}else{M(Y);return}if(E.original.dispatchEvent(bn("medium-zoom:open",{detail:{zoom:Y}})),q=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,D=!0,E.zoomed=vh(E.original),document.body.appendChild(z),R.template){var te=Qo(R.template)?R.template:document.querySelector(R.template);E.template=document.createElement("div"),E.template.appendChild(te.content.cloneNode(!0)),document.body.appendChild(E.template)}if(document.body.appendChild(E.zoomed),window.requestAnimationFrame(function(){document.body.classList.add("medium-zoom--opened")}),E.original.classList.add("medium-zoom-image--hidden"),E.zoomed.classList.add("medium-zoom-image--opened"),E.zoomed.addEventListener("click",v),E.zoomed.addEventListener("transitionend",$),E.original.getAttribute("data-zoom-src")){E.zoomedHd=E.zoomed.cloneNode(),E.zoomedHd.removeAttribute("srcset"),E.zoomedHd.removeAttribute("sizes"),E.zoomedHd.src=E.zoomed.getAttribute("data-zoom-src"),E.zoomedHd.onerror=function(){clearInterval(me),console.warn("Unable to reach the zoom image target "+E.zoomedHd.src),E.zoomedHd=null,x()};var me=setInterval(function(){E.zoomedHd.complete&&(clearInterval(me),E.zoomedHd.classList.add("medium-zoom-image--opened"),E.zoomedHd.addEventListener("click",v),document.body.appendChild(E.zoomedHd),x())},10)}else if(E.original.hasAttribute("srcset")){E.zoomedHd=E.zoomed.cloneNode(),E.zoomedHd.removeAttribute("sizes"),E.zoomedHd.removeAttribute("loading");var de=E.zoomedHd.addEventListener("load",function(){E.zoomedHd.removeEventListener("load",de),E.zoomedHd.classList.add("medium-zoom-image--opened"),E.zoomedHd.addEventListener("click",v),document.body.appendChild(E.zoomedHd),x()})}else x()})},v=function(){return new o(function(S){if(D||!E.original){S(Y);return}var T=function x(){E.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(E.zoomed),E.zoomedHd&&document.body.removeChild(E.zoomedHd),document.body.removeChild(z),E.zoomed.classList.remove("medium-zoom-image--opened"),E.template&&document.body.removeChild(E.template),D=!1,E.zoomed.removeEventListener("transitionend",x),E.original.dispatchEvent(bn("medium-zoom:closed",{detail:{zoom:Y}})),E.original=null,E.zoomed=null,E.zoomedHd=null,E.template=null,S(Y)};D=!0,document.body.classList.remove("medium-zoom--opened"),E.zoomed.style.transform="",E.zoomedHd&&(E.zoomedHd.style.transform=""),E.template&&(E.template.style.transition="opacity 150ms",E.template.style.opacity=0),E.original.dispatchEvent(bn("medium-zoom:close",{detail:{zoom:Y}})),E.zoomed.addEventListener("transitionend",T)})},g=function(){var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},T=S.target;return E.original?v():f({target:T})},b=function(){return R},p=function(){return P},y=function(){return E.original},P=[],A=[],D=!1,q=0,R=n,E={original:null,zoomed:null,zoomedHd:null,template:null};Object.prototype.toString.call(t)==="[object Object]"?R=t:(t||typeof t=="string")&&l(t),R=cn({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},R);var z=_h(R.background);document.addEventListener("click",r),document.addEventListener("keyup",i),document.addEventListener("scroll",a),window.addEventListener("resize",v);var Y={open:f,close:v,toggle:g,update:c,clone:s,attach:l,detach:u,on:m,off:d,getOptions:b,getImages:p,getZoomedImage:y};return Y};function bh(e,t){t===void 0&&(t={});var n=t.insertAt;if(!(!e||typeof document>"u")){var o=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css",n==="top"&&o.firstChild?o.insertBefore(r,o.firstChild):o.appendChild(r),r.styleSheet?r.styleSheet.cssText=e:r.appendChild(document.createTextNode(e))}}var yh=".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}";bh(yh);const Eh=gh,wh=Symbol("mediumZoom");const Oh=".theme-default-content > img, .theme-default-content :not(a) > img",Ph={},Sh=300,Ah=Dt({enhance({app:e,router:t}){const n=Eh(Ph);n.refresh=(o=Oh)=>{n.detach(),n.attach(o)},e.provide(wh,n),t.afterEach(()=>{setTimeout(()=>n.refresh(),Sh)})}});/*! * vue-router v4.1.5 * (c) 2022 Eduardo San Martin Morote * @license MIT - */const Pn=typeof window<"u";function Th(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const Le=Object.assign;function Yr(e,t){const n={};for(const o in t){const r=t[o];n[o]=gt(r)?r.map(e):e(r)}return n}const ro=()=>{},gt=Array.isArray,Ih=/\/$/,Lh=e=>e.replace(Ih,"");function Jr(e,t,n="/"){let o,r={},a="",i="";const c=t.indexOf("#");let s=t.indexOf("?");return c=0&&(s=-1),s>-1&&(o=t.slice(0,s),a=t.slice(s+1,c>-1?c:t.length),r=e(a)),c>-1&&(o=o||t.slice(0,c),i=t.slice(c,t.length)),o=xh(o!=null?o:t,n),{fullPath:o+(a&&"?")+a+i,path:o,query:r,hash:i}}function Dh(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function fc(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Rh(e,t,n){const o=t.matched.length-1,r=n.matched.length-1;return o>-1&&o===r&&jn(t.matched[o],n.matched[r])&&ou(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function jn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function ou(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!kh(e[n],t[n]))return!1;return!0}function kh(e,t){return gt(e)?hc(e,t):gt(t)?hc(t,e):e===t}function hc(e,t){return gt(t)?e.length===t.length&&e.every((n,o)=>n===t[o]):e.length===1&&e[0]===t}function xh(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),o=e.split("/");let r=n.length-1,a,i;for(a=0;a1&&r--;else break;return n.slice(0,r).join("/")+"/"+o.slice(a-(a===o.length?1:0)).join("/")}var _o;(function(e){e.pop="pop",e.push="push"})(_o||(_o={}));var ao;(function(e){e.back="back",e.forward="forward",e.unknown=""})(ao||(ao={}));function Ch(e){if(!e)if(Pn){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Lh(e)}const Mh=/^[^#]+#/;function $h(e,t){return e.replace(Mh,"#")+t}function jh(e,t){const n=document.documentElement.getBoundingClientRect(),o=e.getBoundingClientRect();return{behavior:t.behavior,left:o.left-n.left-(t.left||0),top:o.top-n.top-(t.top||0)}}const $r=()=>({left:window.pageXOffset,top:window.pageYOffset});function Hh(e){let t;if("el"in e){const n=e.el,o=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?o?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=jh(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function pc(e,t){return(history.state?history.state.position-t:-1)+e}const wa=new Map;function qh(e,t){wa.set(e,t)}function Vh(e){const t=wa.get(e);return wa.delete(e),t}let Nh=()=>location.protocol+"//"+location.host;function ru(e,t){const{pathname:n,search:o,hash:r}=t,a=e.indexOf("#");if(a>-1){let c=r.includes(e.slice(a))?e.slice(a).length:1,s=r.slice(c);return s[0]!=="/"&&(s="/"+s),fc(s,"")}return fc(n,e)+o+r}function Fh(e,t,n,o){let r=[],a=[],i=null;const c=({state:d})=>{const f=ru(e,location),v=n.value,g=t.value;let b=0;if(d){if(n.value=f,t.value=d,i&&i===v){i=null;return}b=g?d.position-g.position:0}else o(f);r.forEach(p=>{p(n.value,v,{delta:b,type:_o.pop,direction:b?b>0?ao.forward:ao.back:ao.unknown})})};function s(){i=n.value}function l(d){r.push(d);const f=()=>{const v=r.indexOf(d);v>-1&&r.splice(v,1)};return a.push(f),f}function u(){const{history:d}=window;!d.state||d.replaceState(Le({},d.state,{scroll:$r()}),"")}function m(){for(const d of a)d();a=[],window.removeEventListener("popstate",c),window.removeEventListener("beforeunload",u)}return window.addEventListener("popstate",c),window.addEventListener("beforeunload",u),{pauseListeners:s,listen:l,destroy:m}}function _c(e,t,n,o=!1,r=!1){return{back:e,current:t,forward:n,replaced:o,position:window.history.length,scroll:r?$r():null}}function Bh(e){const{history:t,location:n}=window,o={value:ru(e,n)},r={value:t.state};r.value||a(o.value,{back:null,current:o.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function a(s,l,u){const m=e.indexOf("#"),d=m>-1?(n.host&&document.querySelector("base")?e:e.slice(m))+s:Nh()+e+s;try{t[u?"replaceState":"pushState"](l,"",d),r.value=l}catch(f){console.error(f),n[u?"replace":"assign"](d)}}function i(s,l){const u=Le({},t.state,_c(r.value.back,s,r.value.forward,!0),l,{position:r.value.position});a(s,u,!0),o.value=s}function c(s,l){const u=Le({},r.value,t.state,{forward:s,scroll:$r()});a(u.current,u,!0);const m=Le({},_c(o.value,s,null),{position:u.position+1},l);a(s,m,!1),o.value=s}return{location:o,state:r,push:c,replace:i}}function zh(e){e=Ch(e);const t=Bh(e),n=Fh(e,t.state,t.location,t.replace);function o(a,i=!0){i||n.pauseListeners(),history.go(a)}const r=Le({location:"",base:e,go:o,createHref:$h.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}function Uh(e){return typeof e=="string"||e&&typeof e=="object"}function au(e){return typeof e=="string"||typeof e=="symbol"}const xt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},iu=Symbol("");var vc;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(vc||(vc={}));function Hn(e,t){return Le(new Error,{type:e,[iu]:!0},t)}function kt(e,t){return e instanceof Error&&iu in e&&(t==null||!!(e.type&t))}const gc="[^/]+?",Wh={sensitive:!1,strict:!1,start:!0,end:!0},Kh=/[.+*?^${}()[\]/\\]/g;function Yh(e,t){const n=Le({},Wh,t),o=[];let r=n.start?"^":"";const a=[];for(const l of e){const u=l.length?[]:[90];n.strict&&!l.length&&(r+="/");for(let m=0;mt.length?t.length===1&&t[0]===40+40?1:-1:0}function Qh(e,t){let n=0;const o=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const Gh={type:0,value:""},Zh=/[a-zA-Z0-9_]/;function Xh(e){if(!e)return[[]];if(e==="/")return[[Gh]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(f){throw new Error(`ERR (${n})/"${l}": ${f}`)}let n=0,o=n;const r=[];let a;function i(){a&&r.push(a),a=[]}let c=0,s,l="",u="";function m(){!l||(n===0?a.push({type:0,value:l}):n===1||n===2||n===3?(a.length>1&&(s==="*"||s==="+")&&t(`A repeatable param (${l}) must be alone in its segment. eg: '/:ids+.`),a.push({type:1,value:l,regexp:u,repeatable:s==="*"||s==="+",optional:s==="*"||s==="?"})):t("Invalid state to consume buffer"),l="")}function d(){l+=s}for(;c{i(y)}:ro}function i(u){if(au(u)){const m=o.get(u);m&&(o.delete(u),n.splice(n.indexOf(m),1),m.children.forEach(i),m.alias.forEach(i))}else{const m=n.indexOf(u);m>-1&&(n.splice(m,1),u.record.name&&o.delete(u.record.name),u.children.forEach(i),u.alias.forEach(i))}}function c(){return n}function s(u){let m=0;for(;m=0&&(u.record.path!==n[m].record.path||!cu(u,n[m]));)m++;n.splice(m,0,u),u.record.name&&!Ec(u)&&o.set(u.record.name,u)}function l(u,m){let d,f={},v,g;if("name"in u&&u.name){if(d=o.get(u.name),!d)throw Hn(1,{location:u});g=d.record.name,f=Le(yc(m.params,d.keys.filter(y=>!y.optional).map(y=>y.name)),u.params&&yc(u.params,d.keys.map(y=>y.name))),v=d.stringify(f)}else if("path"in u)v=u.path,d=n.find(y=>y.re.test(v)),d&&(f=d.parse(v),g=d.record.name);else{if(d=m.name?o.get(m.name):n.find(y=>y.re.test(m.path)),!d)throw Hn(1,{location:u,currentLocation:m});g=d.record.name,f=Le({},m.params,u.params),v=d.stringify(f)}const b=[];let p=d;for(;p;)b.unshift(p.record),p=p.parent;return{name:g,path:v,params:f,matched:b,meta:rp(b)}}return e.forEach(u=>a(u)),{addRoute:a,resolve:l,removeRoute:i,getRoutes:c,getRecordMatcher:r}}function yc(e,t){const n={};for(const o of t)o in e&&(n[o]=e[o]);return n}function np(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:op(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function op(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const o in e.components)t[o]=typeof n=="boolean"?n:n[o];return t}function Ec(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function rp(e){return e.reduce((t,n)=>Le(t,n.meta),{})}function wc(e,t){const n={};for(const o in e)n[o]=o in t?t[o]:e[o];return n}function cu(e,t){return t.children.some(n=>n===e||cu(e,n))}const su=/#/g,ap=/&/g,ip=/\//g,cp=/=/g,sp=/\?/g,lu=/\+/g,lp=/%5B/g,up=/%5D/g,uu=/%5E/g,mp=/%60/g,mu=/%7B/g,dp=/%7C/g,du=/%7D/g,fp=/%20/g;function si(e){return encodeURI(""+e).replace(dp,"|").replace(lp,"[").replace(up,"]")}function hp(e){return si(e).replace(mu,"{").replace(du,"}").replace(uu,"^")}function Oa(e){return si(e).replace(lu,"%2B").replace(fp,"+").replace(su,"%23").replace(ap,"%26").replace(mp,"`").replace(mu,"{").replace(du,"}").replace(uu,"^")}function pp(e){return Oa(e).replace(cp,"%3D")}function _p(e){return si(e).replace(su,"%23").replace(sp,"%3F")}function vp(e){return e==null?"":_p(e).replace(ip,"%2F")}function fr(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function gp(e){const t={};if(e===""||e==="?")return t;const o=(e[0]==="?"?e.slice(1):e).split("&");for(let r=0;ra&&Oa(a)):[o&&Oa(o)]).forEach(a=>{a!==void 0&&(t+=(t.length?"&":"")+n,a!=null&&(t+="="+a))})}return t}function bp(e){const t={};for(const n in e){const o=e[n];o!==void 0&&(t[n]=gt(o)?o.map(r=>r==null?null:""+r):o==null?o:""+o)}return t}const yp=Symbol(""),Pc=Symbol(""),jr=Symbol(""),li=Symbol(""),Pa=Symbol("");function Kn(){let e=[];function t(o){return e.push(o),()=>{const r=e.indexOf(o);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e,reset:n}}function Wt(e,t,n,o,r){const a=o&&(o.enterCallbacks[r]=o.enterCallbacks[r]||[]);return()=>new Promise((i,c)=>{const s=m=>{m===!1?c(Hn(4,{from:n,to:t})):m instanceof Error?c(m):Uh(m)?c(Hn(2,{from:t,to:m})):(a&&o.enterCallbacks[r]===a&&typeof m=="function"&&a.push(m),i())},l=e.call(o&&o.instances[r],t,n,s);let u=Promise.resolve(l);e.length<3&&(u=u.then(s)),u.catch(m=>c(m))})}function Qr(e,t,n,o){const r=[];for(const a of e)for(const i in a.components){let c=a.components[i];if(!(t!=="beforeRouteEnter"&&!a.instances[i]))if(Ep(c)){const l=(c.__vccOpts||c)[t];l&&r.push(Wt(l,n,o,a,i))}else{let s=c();r.push(()=>s.then(l=>{if(!l)return Promise.reject(new Error(`Couldn't resolve component "${i}" at "${a.path}"`));const u=Th(l)?l.default:l;a.components[i]=u;const d=(u.__vccOpts||u)[t];return d&&Wt(d,n,o,a,i)()}))}}return r}function Ep(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Sc(e){const t=Ue(jr),n=Ue(li),o=Z(()=>t.resolve(V(e.to))),r=Z(()=>{const{matched:s}=o.value,{length:l}=s,u=s[l-1],m=n.matched;if(!u||!m.length)return-1;const d=m.findIndex(jn.bind(null,u));if(d>-1)return d;const f=Ac(s[l-2]);return l>1&&Ac(u)===f&&m[m.length-1].path!==f?m.findIndex(jn.bind(null,s[l-2])):d}),a=Z(()=>r.value>-1&&Sp(n.params,o.value.params)),i=Z(()=>r.value>-1&&r.value===n.matched.length-1&&ou(n.params,o.value.params));function c(s={}){return Pp(s)?t[V(e.replace)?"replace":"push"](V(e.to)).catch(ro):Promise.resolve()}return{route:o,href:Z(()=>o.value.href),isActive:a,isExactActive:i,navigate:c}}const wp=Ne({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Sc,setup(e,{slots:t}){const n=Nn(Sc(e)),{options:o}=Ue(jr),r=Z(()=>({[Tc(e.activeClass,o.linkActiveClass,"router-link-active")]:n.isActive,[Tc(e.exactActiveClass,o.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const a=t.default&&t.default(n);return e.custom?a:Te("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},a)}}}),Op=wp;function Pp(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Sp(e,t){for(const n in t){const o=t[n],r=e[n];if(typeof o=="string"){if(o!==r)return!1}else if(!gt(r)||r.length!==o.length||o.some((a,i)=>a!==r[i]))return!1}return!0}function Ac(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Tc=(e,t,n)=>e!=null?e:t!=null?t:n,Ap=Ne({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const o=Ue(Pa),r=Z(()=>e.route||o.value),a=Ue(Pc,0),i=Z(()=>{let l=V(a);const{matched:u}=r.value;let m;for(;(m=u[l])&&!m.components;)l++;return l}),c=Z(()=>r.value.matched[i.value]);hn(Pc,Z(()=>i.value+1)),hn(yp,c),hn(Pa,r);const s=Ie();return Xe(()=>[s.value,c.value,e.name],([l,u,m],[d,f,v])=>{u&&(u.instances[m]=l,f&&f!==u&&l&&l===d&&(u.leaveGuards.size||(u.leaveGuards=f.leaveGuards),u.updateGuards.size||(u.updateGuards=f.updateGuards))),l&&u&&(!f||!jn(u,f)||!d)&&(u.enterCallbacks[m]||[]).forEach(g=>g(l))},{flush:"post"}),()=>{const l=r.value,u=e.name,m=c.value,d=m&&m.components[u];if(!d)return Ic(n.default,{Component:d,route:l});const f=m.props[u],v=f?f===!0?l.params:typeof f=="function"?f(l):f:null,b=Te(d,Le({},v,t,{onVnodeUnmounted:p=>{p.component.isUnmounted&&(m.instances[u]=null)},ref:s}));return Ic(n.default,{Component:b,route:l})||b}}});function Ic(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const fu=Ap;function Tp(e){const t=tp(e.routes,e),n=e.parseQuery||gp,o=e.stringifyQuery||Oc,r=e.history,a=Kn(),i=Kn(),c=Kn(),s=yl(xt);let l=xt;Pn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=Yr.bind(null,x=>""+x),m=Yr.bind(null,vp),d=Yr.bind(null,fr);function f(x,ee){let B,X;return au(x)?(B=t.getRecordMatcher(x),X=ee):X=x,t.addRoute(X,B)}function v(x){const ee=t.getRecordMatcher(x);ee&&t.removeRoute(ee)}function g(){return t.getRoutes().map(x=>x.record)}function b(x){return!!t.getRecordMatcher(x)}function p(x,ee){if(ee=Le({},ee||s.value),typeof x=="string"){const ue=Jr(n,x,ee.path),_=t.resolve({path:ue.path},ee),w=r.createHref(ue.fullPath);return Le(ue,_,{params:d(_.params),hash:fr(ue.hash),redirectedFrom:void 0,href:w})}let B;if("path"in x)B=Le({},x,{path:Jr(n,x.path,ee.path).path});else{const ue=Le({},x.params);for(const _ in ue)ue[_]==null&&delete ue[_];B=Le({},x,{params:m(x.params)}),ee.params=m(ee.params)}const X=t.resolve(B,ee),pe=x.hash||"";X.params=u(d(X.params));const be=Dh(o,Le({},x,{hash:hp(pe),path:X.path})),fe=r.createHref(be);return Le({fullPath:be,hash:pe,query:o===Oc?bp(x.query):x.query||{}},X,{redirectedFrom:void 0,href:fe})}function y(x){return typeof x=="string"?Jr(n,x,s.value.path):Le({},x)}function P(x,ee){if(l!==x)return Hn(8,{from:ee,to:x})}function A(x){return R(x)}function D(x){return A(Le(y(x),{replace:!0}))}function q(x){const ee=x.matched[x.matched.length-1];if(ee&&ee.redirect){const{redirect:B}=ee;let X=typeof B=="function"?B(x):B;return typeof X=="string"&&(X=X.includes("?")||X.includes("#")?X=y(X):{path:X},X.params={}),Le({query:x.query,hash:x.hash,params:"path"in X?{}:x.params},X)}}function R(x,ee){const B=l=p(x),X=s.value,pe=x.state,be=x.force,fe=x.replace===!0,ue=q(B);if(ue)return R(Le(y(ue),{state:typeof ue=="object"?Le({},pe,ue.state):pe,force:be,replace:fe}),ee||B);const _=B;_.redirectedFrom=ee;let w;return!be&&Rh(o,X,B)&&(w=Hn(16,{to:_,from:X}),de(X,X,!0,!1)),(w?Promise.resolve(w):z(_,X)).catch(I=>kt(I)?kt(I,2)?I:me(I):K(I,_,X)).then(I=>{if(I){if(kt(I,2))return R(Le({replace:fe},y(I.to),{state:typeof I.to=="object"?Le({},pe,I.to.state):pe,force:be}),ee||_)}else I=j(_,X,!0,fe,pe);return Y(_,X,I),I})}function E(x,ee){const B=P(x,ee);return B?Promise.reject(B):Promise.resolve()}function z(x,ee){let B;const[X,pe,be]=Ip(x,ee);B=Qr(X.reverse(),"beforeRouteLeave",x,ee);for(const ue of X)ue.leaveGuards.forEach(_=>{B.push(Wt(_,x,ee))});const fe=E.bind(null,x,ee);return B.push(fe),yn(B).then(()=>{B=[];for(const ue of a.list())B.push(Wt(ue,x,ee));return B.push(fe),yn(B)}).then(()=>{B=Qr(pe,"beforeRouteUpdate",x,ee);for(const ue of pe)ue.updateGuards.forEach(_=>{B.push(Wt(_,x,ee))});return B.push(fe),yn(B)}).then(()=>{B=[];for(const ue of x.matched)if(ue.beforeEnter&&!ee.matched.includes(ue))if(gt(ue.beforeEnter))for(const _ of ue.beforeEnter)B.push(Wt(_,x,ee));else B.push(Wt(ue.beforeEnter,x,ee));return B.push(fe),yn(B)}).then(()=>(x.matched.forEach(ue=>ue.enterCallbacks={}),B=Qr(be,"beforeRouteEnter",x,ee),B.push(fe),yn(B))).then(()=>{B=[];for(const ue of i.list())B.push(Wt(ue,x,ee));return B.push(fe),yn(B)}).catch(ue=>kt(ue,8)?ue:Promise.reject(ue))}function Y(x,ee,B){for(const X of c.list())X(x,ee,B)}function j(x,ee,B,X,pe){const be=P(x,ee);if(be)return be;const fe=ee===xt,ue=Pn?history.state:{};B&&(X||fe?r.replace(x.fullPath,Le({scroll:fe&&ue&&ue.scroll},pe)):r.push(x.fullPath,pe)),s.value=x,de(x,ee,B,fe),me()}let S;function T(){S||(S=r.listen((x,ee,B)=>{if(!Fe.listening)return;const X=p(x),pe=q(X);if(pe){R(Le(pe,{replace:!0}),X).catch(ro);return}l=X;const be=s.value;Pn&&qh(pc(be.fullPath,B.delta),$r()),z(X,be).catch(fe=>kt(fe,12)?fe:kt(fe,2)?(R(fe.to,X).then(ue=>{kt(ue,20)&&!B.delta&&B.type===_o.pop&&r.go(-1,!1)}).catch(ro),Promise.reject()):(B.delta&&r.go(-B.delta,!1),K(fe,X,be))).then(fe=>{fe=fe||j(X,be,!1),fe&&(B.delta&&!kt(fe,8)?r.go(-B.delta,!1):B.type===_o.pop&&kt(fe,20)&&r.go(-1,!1)),Y(X,be,fe)}).catch(ro)}))}let k=Kn(),M=Kn(),$;function K(x,ee,B){me(x);const X=M.list();return X.length?X.forEach(pe=>pe(x,ee,B)):console.error(x),Promise.reject(x)}function te(){return $&&s.value!==xt?Promise.resolve():new Promise((x,ee)=>{k.add([x,ee])})}function me(x){return $||($=!x,T(),k.list().forEach(([ee,B])=>x?B(x):ee()),k.reset()),x}function de(x,ee,B,X){const{scrollBehavior:pe}=e;if(!Pn||!pe)return Promise.resolve();const be=!B&&Vh(pc(x.fullPath,0))||(X||!B)&&history.state&&history.state.scroll||null;return Po().then(()=>pe(x,ee,be)).then(fe=>fe&&Hh(fe)).catch(fe=>K(fe,x,ee))}const ve=x=>r.go(x);let Ae;const ke=new Set,Fe={currentRoute:s,listening:!0,addRoute:f,removeRoute:v,hasRoute:b,getRoutes:g,resolve:p,options:e,push:A,replace:D,go:ve,back:()=>ve(-1),forward:()=>ve(1),beforeEach:a.add,beforeResolve:i.add,afterEach:c.add,onError:M.add,isReady:te,install(x){const ee=this;x.component("RouterLink",Op),x.component("RouterView",fu),x.config.globalProperties.$router=ee,Object.defineProperty(x.config.globalProperties,"$route",{enumerable:!0,get:()=>V(s)}),Pn&&!Ae&&s.value===xt&&(Ae=!0,A(r.location).catch(pe=>{}));const B={};for(const pe in xt)B[pe]=Z(()=>s.value[pe]);x.provide(jr,ee),x.provide(li,Nn(B)),x.provide(Pa,s);const X=x.unmount;ke.add(x),x.unmount=function(){ke.delete(x),ke.size<1&&(l=xt,S&&S(),S=null,s.value=xt,Ae=!1,$=!1),X()}}};return Fe}function yn(e){return e.reduce((t,n)=>t.then(()=>n()),Promise.resolve())}function Ip(e,t){const n=[],o=[],r=[],a=Math.max(t.matched.length,e.matched.length);for(let i=0;ijn(l,c))?o.push(c):n.push(c));const s=e.matched[i];s&&(t.matched.find(l=>jn(l,s))||r.push(s))}return[n,o,r]}function vn(){return Ue(jr)}function Rt(){return Ue(li)}/** + */const Pn=typeof window<"u";function Th(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const Le=Object.assign;function Yr(e,t){const n={};for(const o in t){const r=t[o];n[o]=gt(r)?r.map(e):e(r)}return n}const ro=()=>{},gt=Array.isArray,Ih=/\/$/,Lh=e=>e.replace(Ih,"");function Jr(e,t,n="/"){let o,r={},a="",i="";const c=t.indexOf("#");let s=t.indexOf("?");return c=0&&(s=-1),s>-1&&(o=t.slice(0,s),a=t.slice(s+1,c>-1?c:t.length),r=e(a)),c>-1&&(o=o||t.slice(0,c),i=t.slice(c,t.length)),o=kh(o!=null?o:t,n),{fullPath:o+(a&&"?")+a+i,path:o,query:r,hash:i}}function Dh(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function fc(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Rh(e,t,n){const o=t.matched.length-1,r=n.matched.length-1;return o>-1&&o===r&&jn(t.matched[o],n.matched[r])&&ou(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function jn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function ou(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!xh(e[n],t[n]))return!1;return!0}function xh(e,t){return gt(e)?hc(e,t):gt(t)?hc(t,e):e===t}function hc(e,t){return gt(t)?e.length===t.length&&e.every((n,o)=>n===t[o]):e.length===1&&e[0]===t}function kh(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),o=e.split("/");let r=n.length-1,a,i;for(a=0;a1&&r--;else break;return n.slice(0,r).join("/")+"/"+o.slice(a-(a===o.length?1:0)).join("/")}var _o;(function(e){e.pop="pop",e.push="push"})(_o||(_o={}));var ao;(function(e){e.back="back",e.forward="forward",e.unknown=""})(ao||(ao={}));function Ch(e){if(!e)if(Pn){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Lh(e)}const Mh=/^[^#]+#/;function $h(e,t){return e.replace(Mh,"#")+t}function jh(e,t){const n=document.documentElement.getBoundingClientRect(),o=e.getBoundingClientRect();return{behavior:t.behavior,left:o.left-n.left-(t.left||0),top:o.top-n.top-(t.top||0)}}const $r=()=>({left:window.pageXOffset,top:window.pageYOffset});function Hh(e){let t;if("el"in e){const n=e.el,o=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?o?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=jh(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function pc(e,t){return(history.state?history.state.position-t:-1)+e}const wa=new Map;function qh(e,t){wa.set(e,t)}function Vh(e){const t=wa.get(e);return wa.delete(e),t}let Nh=()=>location.protocol+"//"+location.host;function ru(e,t){const{pathname:n,search:o,hash:r}=t,a=e.indexOf("#");if(a>-1){let c=r.includes(e.slice(a))?e.slice(a).length:1,s=r.slice(c);return s[0]!=="/"&&(s="/"+s),fc(s,"")}return fc(n,e)+o+r}function Fh(e,t,n,o){let r=[],a=[],i=null;const c=({state:d})=>{const f=ru(e,location),v=n.value,g=t.value;let b=0;if(d){if(n.value=f,t.value=d,i&&i===v){i=null;return}b=g?d.position-g.position:0}else o(f);r.forEach(p=>{p(n.value,v,{delta:b,type:_o.pop,direction:b?b>0?ao.forward:ao.back:ao.unknown})})};function s(){i=n.value}function l(d){r.push(d);const f=()=>{const v=r.indexOf(d);v>-1&&r.splice(v,1)};return a.push(f),f}function u(){const{history:d}=window;!d.state||d.replaceState(Le({},d.state,{scroll:$r()}),"")}function m(){for(const d of a)d();a=[],window.removeEventListener("popstate",c),window.removeEventListener("beforeunload",u)}return window.addEventListener("popstate",c),window.addEventListener("beforeunload",u),{pauseListeners:s,listen:l,destroy:m}}function _c(e,t,n,o=!1,r=!1){return{back:e,current:t,forward:n,replaced:o,position:window.history.length,scroll:r?$r():null}}function Bh(e){const{history:t,location:n}=window,o={value:ru(e,n)},r={value:t.state};r.value||a(o.value,{back:null,current:o.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function a(s,l,u){const m=e.indexOf("#"),d=m>-1?(n.host&&document.querySelector("base")?e:e.slice(m))+s:Nh()+e+s;try{t[u?"replaceState":"pushState"](l,"",d),r.value=l}catch(f){console.error(f),n[u?"replace":"assign"](d)}}function i(s,l){const u=Le({},t.state,_c(r.value.back,s,r.value.forward,!0),l,{position:r.value.position});a(s,u,!0),o.value=s}function c(s,l){const u=Le({},r.value,t.state,{forward:s,scroll:$r()});a(u.current,u,!0);const m=Le({},_c(o.value,s,null),{position:u.position+1},l);a(s,m,!1),o.value=s}return{location:o,state:r,push:c,replace:i}}function zh(e){e=Ch(e);const t=Bh(e),n=Fh(e,t.state,t.location,t.replace);function o(a,i=!0){i||n.pauseListeners(),history.go(a)}const r=Le({location:"",base:e,go:o,createHref:$h.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}function Uh(e){return typeof e=="string"||e&&typeof e=="object"}function au(e){return typeof e=="string"||typeof e=="symbol"}const kt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},iu=Symbol("");var vc;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(vc||(vc={}));function Hn(e,t){return Le(new Error,{type:e,[iu]:!0},t)}function xt(e,t){return e instanceof Error&&iu in e&&(t==null||!!(e.type&t))}const gc="[^/]+?",Wh={sensitive:!1,strict:!1,start:!0,end:!0},Kh=/[.+*?^${}()[\]/\\]/g;function Yh(e,t){const n=Le({},Wh,t),o=[];let r=n.start?"^":"";const a=[];for(const l of e){const u=l.length?[]:[90];n.strict&&!l.length&&(r+="/");for(let m=0;mt.length?t.length===1&&t[0]===40+40?1:-1:0}function Qh(e,t){let n=0;const o=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const Gh={type:0,value:""},Zh=/[a-zA-Z0-9_]/;function Xh(e){if(!e)return[[]];if(e==="/")return[[Gh]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(f){throw new Error(`ERR (${n})/"${l}": ${f}`)}let n=0,o=n;const r=[];let a;function i(){a&&r.push(a),a=[]}let c=0,s,l="",u="";function m(){!l||(n===0?a.push({type:0,value:l}):n===1||n===2||n===3?(a.length>1&&(s==="*"||s==="+")&&t(`A repeatable param (${l}) must be alone in its segment. eg: '/:ids+.`),a.push({type:1,value:l,regexp:u,repeatable:s==="*"||s==="+",optional:s==="*"||s==="?"})):t("Invalid state to consume buffer"),l="")}function d(){l+=s}for(;c{i(y)}:ro}function i(u){if(au(u)){const m=o.get(u);m&&(o.delete(u),n.splice(n.indexOf(m),1),m.children.forEach(i),m.alias.forEach(i))}else{const m=n.indexOf(u);m>-1&&(n.splice(m,1),u.record.name&&o.delete(u.record.name),u.children.forEach(i),u.alias.forEach(i))}}function c(){return n}function s(u){let m=0;for(;m=0&&(u.record.path!==n[m].record.path||!cu(u,n[m]));)m++;n.splice(m,0,u),u.record.name&&!Ec(u)&&o.set(u.record.name,u)}function l(u,m){let d,f={},v,g;if("name"in u&&u.name){if(d=o.get(u.name),!d)throw Hn(1,{location:u});g=d.record.name,f=Le(yc(m.params,d.keys.filter(y=>!y.optional).map(y=>y.name)),u.params&&yc(u.params,d.keys.map(y=>y.name))),v=d.stringify(f)}else if("path"in u)v=u.path,d=n.find(y=>y.re.test(v)),d&&(f=d.parse(v),g=d.record.name);else{if(d=m.name?o.get(m.name):n.find(y=>y.re.test(m.path)),!d)throw Hn(1,{location:u,currentLocation:m});g=d.record.name,f=Le({},m.params,u.params),v=d.stringify(f)}const b=[];let p=d;for(;p;)b.unshift(p.record),p=p.parent;return{name:g,path:v,params:f,matched:b,meta:rp(b)}}return e.forEach(u=>a(u)),{addRoute:a,resolve:l,removeRoute:i,getRoutes:c,getRecordMatcher:r}}function yc(e,t){const n={};for(const o of t)o in e&&(n[o]=e[o]);return n}function np(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:op(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function op(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const o in e.components)t[o]=typeof n=="boolean"?n:n[o];return t}function Ec(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function rp(e){return e.reduce((t,n)=>Le(t,n.meta),{})}function wc(e,t){const n={};for(const o in e)n[o]=o in t?t[o]:e[o];return n}function cu(e,t){return t.children.some(n=>n===e||cu(e,n))}const su=/#/g,ap=/&/g,ip=/\//g,cp=/=/g,sp=/\?/g,lu=/\+/g,lp=/%5B/g,up=/%5D/g,uu=/%5E/g,mp=/%60/g,mu=/%7B/g,dp=/%7C/g,du=/%7D/g,fp=/%20/g;function si(e){return encodeURI(""+e).replace(dp,"|").replace(lp,"[").replace(up,"]")}function hp(e){return si(e).replace(mu,"{").replace(du,"}").replace(uu,"^")}function Oa(e){return si(e).replace(lu,"%2B").replace(fp,"+").replace(su,"%23").replace(ap,"%26").replace(mp,"`").replace(mu,"{").replace(du,"}").replace(uu,"^")}function pp(e){return Oa(e).replace(cp,"%3D")}function _p(e){return si(e).replace(su,"%23").replace(sp,"%3F")}function vp(e){return e==null?"":_p(e).replace(ip,"%2F")}function fr(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function gp(e){const t={};if(e===""||e==="?")return t;const o=(e[0]==="?"?e.slice(1):e).split("&");for(let r=0;ra&&Oa(a)):[o&&Oa(o)]).forEach(a=>{a!==void 0&&(t+=(t.length?"&":"")+n,a!=null&&(t+="="+a))})}return t}function bp(e){const t={};for(const n in e){const o=e[n];o!==void 0&&(t[n]=gt(o)?o.map(r=>r==null?null:""+r):o==null?o:""+o)}return t}const yp=Symbol(""),Pc=Symbol(""),jr=Symbol(""),li=Symbol(""),Pa=Symbol("");function Kn(){let e=[];function t(o){return e.push(o),()=>{const r=e.indexOf(o);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e,reset:n}}function Wt(e,t,n,o,r){const a=o&&(o.enterCallbacks[r]=o.enterCallbacks[r]||[]);return()=>new Promise((i,c)=>{const s=m=>{m===!1?c(Hn(4,{from:n,to:t})):m instanceof Error?c(m):Uh(m)?c(Hn(2,{from:t,to:m})):(a&&o.enterCallbacks[r]===a&&typeof m=="function"&&a.push(m),i())},l=e.call(o&&o.instances[r],t,n,s);let u=Promise.resolve(l);e.length<3&&(u=u.then(s)),u.catch(m=>c(m))})}function Qr(e,t,n,o){const r=[];for(const a of e)for(const i in a.components){let c=a.components[i];if(!(t!=="beforeRouteEnter"&&!a.instances[i]))if(Ep(c)){const l=(c.__vccOpts||c)[t];l&&r.push(Wt(l,n,o,a,i))}else{let s=c();r.push(()=>s.then(l=>{if(!l)return Promise.reject(new Error(`Couldn't resolve component "${i}" at "${a.path}"`));const u=Th(l)?l.default:l;a.components[i]=u;const d=(u.__vccOpts||u)[t];return d&&Wt(d,n,o,a,i)()}))}}return r}function Ep(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Sc(e){const t=Ue(jr),n=Ue(li),o=Z(()=>t.resolve(V(e.to))),r=Z(()=>{const{matched:s}=o.value,{length:l}=s,u=s[l-1],m=n.matched;if(!u||!m.length)return-1;const d=m.findIndex(jn.bind(null,u));if(d>-1)return d;const f=Ac(s[l-2]);return l>1&&Ac(u)===f&&m[m.length-1].path!==f?m.findIndex(jn.bind(null,s[l-2])):d}),a=Z(()=>r.value>-1&&Sp(n.params,o.value.params)),i=Z(()=>r.value>-1&&r.value===n.matched.length-1&&ou(n.params,o.value.params));function c(s={}){return Pp(s)?t[V(e.replace)?"replace":"push"](V(e.to)).catch(ro):Promise.resolve()}return{route:o,href:Z(()=>o.value.href),isActive:a,isExactActive:i,navigate:c}}const wp=Ne({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Sc,setup(e,{slots:t}){const n=Nn(Sc(e)),{options:o}=Ue(jr),r=Z(()=>({[Tc(e.activeClass,o.linkActiveClass,"router-link-active")]:n.isActive,[Tc(e.exactActiveClass,o.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const a=t.default&&t.default(n);return e.custom?a:Te("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},a)}}}),Op=wp;function Pp(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Sp(e,t){for(const n in t){const o=t[n],r=e[n];if(typeof o=="string"){if(o!==r)return!1}else if(!gt(r)||r.length!==o.length||o.some((a,i)=>a!==r[i]))return!1}return!0}function Ac(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Tc=(e,t,n)=>e!=null?e:t!=null?t:n,Ap=Ne({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const o=Ue(Pa),r=Z(()=>e.route||o.value),a=Ue(Pc,0),i=Z(()=>{let l=V(a);const{matched:u}=r.value;let m;for(;(m=u[l])&&!m.components;)l++;return l}),c=Z(()=>r.value.matched[i.value]);hn(Pc,Z(()=>i.value+1)),hn(yp,c),hn(Pa,r);const s=Ie();return Xe(()=>[s.value,c.value,e.name],([l,u,m],[d,f,v])=>{u&&(u.instances[m]=l,f&&f!==u&&l&&l===d&&(u.leaveGuards.size||(u.leaveGuards=f.leaveGuards),u.updateGuards.size||(u.updateGuards=f.updateGuards))),l&&u&&(!f||!jn(u,f)||!d)&&(u.enterCallbacks[m]||[]).forEach(g=>g(l))},{flush:"post"}),()=>{const l=r.value,u=e.name,m=c.value,d=m&&m.components[u];if(!d)return Ic(n.default,{Component:d,route:l});const f=m.props[u],v=f?f===!0?l.params:typeof f=="function"?f(l):f:null,b=Te(d,Le({},v,t,{onVnodeUnmounted:p=>{p.component.isUnmounted&&(m.instances[u]=null)},ref:s}));return Ic(n.default,{Component:b,route:l})||b}}});function Ic(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const fu=Ap;function Tp(e){const t=tp(e.routes,e),n=e.parseQuery||gp,o=e.stringifyQuery||Oc,r=e.history,a=Kn(),i=Kn(),c=Kn(),s=yl(kt);let l=kt;Pn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=Yr.bind(null,k=>""+k),m=Yr.bind(null,vp),d=Yr.bind(null,fr);function f(k,ee){let B,X;return au(k)?(B=t.getRecordMatcher(k),X=ee):X=k,t.addRoute(X,B)}function v(k){const ee=t.getRecordMatcher(k);ee&&t.removeRoute(ee)}function g(){return t.getRoutes().map(k=>k.record)}function b(k){return!!t.getRecordMatcher(k)}function p(k,ee){if(ee=Le({},ee||s.value),typeof k=="string"){const ue=Jr(n,k,ee.path),_=t.resolve({path:ue.path},ee),w=r.createHref(ue.fullPath);return Le(ue,_,{params:d(_.params),hash:fr(ue.hash),redirectedFrom:void 0,href:w})}let B;if("path"in k)B=Le({},k,{path:Jr(n,k.path,ee.path).path});else{const ue=Le({},k.params);for(const _ in ue)ue[_]==null&&delete ue[_];B=Le({},k,{params:m(k.params)}),ee.params=m(ee.params)}const X=t.resolve(B,ee),pe=k.hash||"";X.params=u(d(X.params));const be=Dh(o,Le({},k,{hash:hp(pe),path:X.path})),fe=r.createHref(be);return Le({fullPath:be,hash:pe,query:o===Oc?bp(k.query):k.query||{}},X,{redirectedFrom:void 0,href:fe})}function y(k){return typeof k=="string"?Jr(n,k,s.value.path):Le({},k)}function P(k,ee){if(l!==k)return Hn(8,{from:ee,to:k})}function A(k){return R(k)}function D(k){return A(Le(y(k),{replace:!0}))}function q(k){const ee=k.matched[k.matched.length-1];if(ee&&ee.redirect){const{redirect:B}=ee;let X=typeof B=="function"?B(k):B;return typeof X=="string"&&(X=X.includes("?")||X.includes("#")?X=y(X):{path:X},X.params={}),Le({query:k.query,hash:k.hash,params:"path"in X?{}:k.params},X)}}function R(k,ee){const B=l=p(k),X=s.value,pe=k.state,be=k.force,fe=k.replace===!0,ue=q(B);if(ue)return R(Le(y(ue),{state:typeof ue=="object"?Le({},pe,ue.state):pe,force:be,replace:fe}),ee||B);const _=B;_.redirectedFrom=ee;let w;return!be&&Rh(o,X,B)&&(w=Hn(16,{to:_,from:X}),de(X,X,!0,!1)),(w?Promise.resolve(w):z(_,X)).catch(I=>xt(I)?xt(I,2)?I:me(I):K(I,_,X)).then(I=>{if(I){if(xt(I,2))return R(Le({replace:fe},y(I.to),{state:typeof I.to=="object"?Le({},pe,I.to.state):pe,force:be}),ee||_)}else I=j(_,X,!0,fe,pe);return Y(_,X,I),I})}function E(k,ee){const B=P(k,ee);return B?Promise.reject(B):Promise.resolve()}function z(k,ee){let B;const[X,pe,be]=Ip(k,ee);B=Qr(X.reverse(),"beforeRouteLeave",k,ee);for(const ue of X)ue.leaveGuards.forEach(_=>{B.push(Wt(_,k,ee))});const fe=E.bind(null,k,ee);return B.push(fe),yn(B).then(()=>{B=[];for(const ue of a.list())B.push(Wt(ue,k,ee));return B.push(fe),yn(B)}).then(()=>{B=Qr(pe,"beforeRouteUpdate",k,ee);for(const ue of pe)ue.updateGuards.forEach(_=>{B.push(Wt(_,k,ee))});return B.push(fe),yn(B)}).then(()=>{B=[];for(const ue of k.matched)if(ue.beforeEnter&&!ee.matched.includes(ue))if(gt(ue.beforeEnter))for(const _ of ue.beforeEnter)B.push(Wt(_,k,ee));else B.push(Wt(ue.beforeEnter,k,ee));return B.push(fe),yn(B)}).then(()=>(k.matched.forEach(ue=>ue.enterCallbacks={}),B=Qr(be,"beforeRouteEnter",k,ee),B.push(fe),yn(B))).then(()=>{B=[];for(const ue of i.list())B.push(Wt(ue,k,ee));return B.push(fe),yn(B)}).catch(ue=>xt(ue,8)?ue:Promise.reject(ue))}function Y(k,ee,B){for(const X of c.list())X(k,ee,B)}function j(k,ee,B,X,pe){const be=P(k,ee);if(be)return be;const fe=ee===kt,ue=Pn?history.state:{};B&&(X||fe?r.replace(k.fullPath,Le({scroll:fe&&ue&&ue.scroll},pe)):r.push(k.fullPath,pe)),s.value=k,de(k,ee,B,fe),me()}let S;function T(){S||(S=r.listen((k,ee,B)=>{if(!Fe.listening)return;const X=p(k),pe=q(X);if(pe){R(Le(pe,{replace:!0}),X).catch(ro);return}l=X;const be=s.value;Pn&&qh(pc(be.fullPath,B.delta),$r()),z(X,be).catch(fe=>xt(fe,12)?fe:xt(fe,2)?(R(fe.to,X).then(ue=>{xt(ue,20)&&!B.delta&&B.type===_o.pop&&r.go(-1,!1)}).catch(ro),Promise.reject()):(B.delta&&r.go(-B.delta,!1),K(fe,X,be))).then(fe=>{fe=fe||j(X,be,!1),fe&&(B.delta&&!xt(fe,8)?r.go(-B.delta,!1):B.type===_o.pop&&xt(fe,20)&&r.go(-1,!1)),Y(X,be,fe)}).catch(ro)}))}let x=Kn(),M=Kn(),$;function K(k,ee,B){me(k);const X=M.list();return X.length?X.forEach(pe=>pe(k,ee,B)):console.error(k),Promise.reject(k)}function te(){return $&&s.value!==kt?Promise.resolve():new Promise((k,ee)=>{x.add([k,ee])})}function me(k){return $||($=!k,T(),x.list().forEach(([ee,B])=>k?B(k):ee()),x.reset()),k}function de(k,ee,B,X){const{scrollBehavior:pe}=e;if(!Pn||!pe)return Promise.resolve();const be=!B&&Vh(pc(k.fullPath,0))||(X||!B)&&history.state&&history.state.scroll||null;return Po().then(()=>pe(k,ee,be)).then(fe=>fe&&Hh(fe)).catch(fe=>K(fe,k,ee))}const ve=k=>r.go(k);let Ae;const xe=new Set,Fe={currentRoute:s,listening:!0,addRoute:f,removeRoute:v,hasRoute:b,getRoutes:g,resolve:p,options:e,push:A,replace:D,go:ve,back:()=>ve(-1),forward:()=>ve(1),beforeEach:a.add,beforeResolve:i.add,afterEach:c.add,onError:M.add,isReady:te,install(k){const ee=this;k.component("RouterLink",Op),k.component("RouterView",fu),k.config.globalProperties.$router=ee,Object.defineProperty(k.config.globalProperties,"$route",{enumerable:!0,get:()=>V(s)}),Pn&&!Ae&&s.value===kt&&(Ae=!0,A(r.location).catch(pe=>{}));const B={};for(const pe in kt)B[pe]=Z(()=>s.value[pe]);k.provide(jr,ee),k.provide(li,Nn(B)),k.provide(Pa,s);const X=k.unmount;xe.add(k),k.unmount=function(){xe.delete(k),xe.size<1&&(l=kt,S&&S(),S=null,s.value=kt,Ae=!1,$=!1),X()}}};return Fe}function yn(e){return e.reduce((t,n)=>t.then(()=>n()),Promise.resolve())}function Ip(e,t){const n=[],o=[],r=[],a=Math.max(t.matched.length,e.matched.length);for(let i=0;ijn(l,c))?o.push(c):n.push(c));const s=e.matched[i];s&&(t.matched.find(l=>jn(l,s))||r.push(s))}return[n,o,r]}function vn(){return Ue(jr)}function Rt(){return Ue(li)}/** * NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress * @license MIT - */const Ee={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
'},status:null,set:e=>{const t=Ee.isStarted();e=Gr(e,Ee.settings.minimum,1),Ee.status=e===1?null:e;const n=Ee.render(!t),o=n.querySelector(Ee.settings.barSelector),r=Ee.settings.speed,a=Ee.settings.easing;return n.offsetWidth,Lp(i=>{Ho(o,{transform:"translate3d("+Lc(e)+"%,0,0)",transition:"all "+r+"ms "+a}),e===1?(Ho(n,{transition:"none",opacity:"1"}),n.offsetWidth,setTimeout(function(){Ho(n,{transition:"all "+r+"ms linear",opacity:"0"}),setTimeout(function(){Ee.remove(),i()},r)},r)):setTimeout(()=>i(),r)}),Ee},isStarted:()=>typeof Ee.status=="number",start:()=>{Ee.status||Ee.set(0);const e=()=>{setTimeout(()=>{!Ee.status||(Ee.trickle(),e())},Ee.settings.trickleSpeed)};return Ee.settings.trickle&&e(),Ee},done:e=>!e&&!Ee.status?Ee:Ee.inc(.3+.5*Math.random()).set(1),inc:e=>{let t=Ee.status;return t?(typeof e!="number"&&(e=(1-t)*Gr(Math.random()*t,.1,.95)),t=Gr(t+e,0,.994),Ee.set(t)):Ee.start()},trickle:()=>Ee.inc(Math.random()*Ee.settings.trickleRate),render:e=>{if(Ee.isRendered())return document.getElementById("nprogress");Dc(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=Ee.settings.template;const n=t.querySelector(Ee.settings.barSelector),o=e?"-100":Lc(Ee.status||0),r=document.querySelector(Ee.settings.parent);return Ho(n,{transition:"all 0 linear",transform:"translate3d("+o+"%,0,0)"}),r!==document.body&&Dc(r,"nprogress-custom-parent"),r==null||r.appendChild(t),t},remove:()=>{Rc(document.documentElement,"nprogress-busy"),Rc(document.querySelector(Ee.settings.parent),"nprogress-custom-parent");const e=document.getElementById("nprogress");e&&Dp(e)},isRendered:()=>!!document.getElementById("nprogress")},Gr=(e,t,n)=>en?n:e,Lc=e=>(-1+e)*100,Lp=function(){const e=[];function t(){const n=e.shift();n&&n(t)}return function(n){e.push(n),e.length===1&&t()}}(),Ho=function(){const e=["Webkit","O","Moz","ms"],t={};function n(i){return i.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(c,s){return s.toUpperCase()})}function o(i){const c=document.body.style;if(i in c)return i;let s=e.length;const l=i.charAt(0).toUpperCase()+i.slice(1);let u;for(;s--;)if(u=e[s]+l,u in c)return u;return i}function r(i){return i=n(i),t[i]||(t[i]=o(i))}function a(i,c,s){c=r(c),i.style[c]=s}return function(i,c){for(const s in c){const l=c[s];l!==void 0&&Object.prototype.hasOwnProperty.call(c,s)&&a(i,s,l)}}}(),hu=(e,t)=>(typeof e=="string"?e:ui(e)).indexOf(" "+t+" ")>=0,Dc=(e,t)=>{const n=ui(e),o=n+t;hu(n,t)||(e.className=o.substring(1))},Rc=(e,t)=>{const n=ui(e);if(!hu(e,t))return;const o=n.replace(" "+t+" "," ");e.className=o.substring(1,o.length-1)},ui=e=>(" "+(e.className||"")+" ").replace(/\s+/gi," "),Dp=e=>{e&&e.parentNode&&e.parentNode.removeChild(e)};const Rp=()=>{tt(()=>{const e=vn(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(n=>{t.has(n.path)||Ee.start()}),e.afterEach(n=>{t.add(n.path),Ee.done()})})},kp=Dt({setup(){Rp()}}),xp=JSON.parse(`{"logo":"/images/arthas_light.png","logoDark":"/images/arthas_dark.png","repo":"alibaba/arthas","docsDir":"site/docs","docsBranch":"master","locales":{"/":{"selectLanguageName":"\u7B80\u4F53\u4E2D\u6587","selectLanguageText":"Languages","editLinkText":"\u5728 GitHub \u4E0A\u7F16\u8F91\u6B64\u9875","lastUpdated":"\u4E0A\u6B21\u66F4\u65B0","contributorsText":"\u8D21\u732E\u8005","backToHome":"\u56DE\u5230\u9996\u9875","rightMenuText":"\u76EE\u5F55","warning":"\u6CE8\u610F","tip":"\u63D0\u793A","danger":"\u8B66\u544A","notFound":["\u8FD9\u91CC\u4EC0\u4E48\u90FD\u6CA1\u6709","\u6211\u4EEC\u600E\u4E48\u5230\u8FD9\u6765\u4E86\uFF1F","\u8FD9\u662F\u4E00\u4E2A 404 \u9875\u9762","\u770B\u8D77\u6765\u6211\u4EEC\u8FDB\u5165\u4E86\u9519\u8BEF\u7684\u94FE\u63A5"],"openInNewWindow":"\u5728\u65B0\u7A97\u53E3\u6253\u5F00","toggleColorMode":"\u5207\u6362\u989C\u8272\u6A21\u5F0F","toggleSidebar":"\u5207\u6362\u4FA7\u8FB9\u680F","navbar":[{"text":"\u9996\u9875","link":"/"},{"text":"\u5728\u7EBF\u6559\u7A0B","link":"/doc/arthas-tutorials.html?language=cn&id=arthas-basics","target":"_blank"},{"text":"\u6587\u6863","link":"/doc/"},{"text":"\u547D\u4EE4\u5217\u8868","link":"/doc/commands.md"},{"text":"\u4E0B\u8F7D","link":"/doc/download.md"},{"text":"\u7248\u672C","children":[{"text":"v3.x","link":"https://arthas.aliyun.com/3.x/"}]}],"sidebar":{"/doc/":[{"text":"\u6587\u6863","children":["/doc/README.md","/doc/quick-start.md","/doc/install-detail.md","/doc/download.md","/doc/advice-class.html",{"text":"\u547D\u4EE4\u5217\u8868","link":"/doc/commands.md","collapsible":true,"children":["/doc/auth.md","/doc/base64.md","/doc/cat.md","/doc/classloader.md","/doc/classloader-metaspace.md","/doc/cls.md","/doc/dashboard.md","/doc/dump.md","/doc/echo.md","/doc/getstatic.md","/doc/grep.md","/doc/heapdump.md","/doc/help.md","/doc/history.md","/doc/jad.md","/doc/jfr.md","/doc/jvm.md","/doc/keymap.md","/doc/line.md","/doc/logger.md","/doc/mbean.md","/doc/mc.md","/doc/memory.md","/doc/monitor.md","/doc/ognl.md","/doc/options.md","/doc/perfcounter.md","/doc/profiler.md","/doc/pwd.md","/doc/quit.md","/doc/redefine.md","/doc/reset.md","/doc/retransform.md","/doc/sc.md","/doc/session.md","/doc/sm.md","/doc/stack.md","/doc/stop.md","/doc/sysenv.md","/doc/sysprop.md","/doc/tee.md","/doc/thread.md","/doc/trace.md","/doc/tt.md","/doc/version.md","/doc/vmoption.md","/doc/vmtool.md","/doc/watch.md"]},{"text":"AI \u76F8\u5173","link":"/doc/ai.md","collapsible":true,"children":["/doc/mcp-server.md"]},{"text":"\u5176\u4ED6\u7279\u6027","link":"/doc/advanced-use.md","collapsible":true,"children":["/doc/async.md","/doc/save-log.md","/doc/docker.md","/doc/web-console.md","/doc/tunnel.md","/doc/idea-plugin.md","/doc/arthas-properties.html","/doc/agent.html","/doc/spring-boot-starter.md","/doc/external-command.md","/doc/http-api.md","/doc/batch-support.md"]},"/doc/faq.md",{"text":"\u7528\u6237\u6848\u4F8B","link":"https://github.com/alibaba/arthas/issues?q=label%3Auser-case"},{"text":"Star me at github","link":"https://github.com/alibaba/arthas"},{"text":"\u7F16\u8BD1\u8C03\u8BD5/\u53C2\u4E0E\u8D21\u732E","link":"https://github.com/alibaba/arthas/blob/master/CONTRIBUTING.md"},{"text":"Release Notes","link":"https://github.com/alibaba/arthas/releases"},{"text":"QQ \u7FA4/\u9489\u9489\u7FA4","link":"/doc/contact-us.md"}]}]},"sidebarDepth":0},"/en/":{"selectLanguageName":"English","selectLanguageText":"Languages","editLinkText":"Edit this page on GitHub","navbar":[{"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":"COMMANDS","link":"/en/doc/commands.md"},{"text":"DOWNLOAD","link":"/en/doc/download.md"},{"text":"VERSIONS","children":[{"text":"v3.x","link":"https://arthas.aliyun.com/3.x/en/"}]}],"sidebar":{"/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/advice-class.html",{"text":"All Commands","link":"/en/doc/commands.md","collapsible":true,"children":["/en/doc/auth.md","/en/doc/base64.md","/en/doc/cat.md","/en/doc/classloader.md","/en/doc/classloader-metaspace.md","/en/doc/cls.md","/en/doc/dashboard.md","/en/doc/dump.md","/en/doc/echo.md","/en/doc/getstatic.md","/en/doc/grep.md","/en/doc/heapdump.md","/en/doc/help.md","/en/doc/history.md","/en/doc/jad.md","/en/doc/jfr.md","/en/doc/jvm.md","/en/doc/keymap.md","/en/doc/line.md","/en/doc/logger.md","/en/doc/mbean.md","/en/doc/mc.md","/en/doc/memory.md","/en/doc/monitor.md","/en/doc/ognl.md","/en/doc/options.md","/en/doc/perfcounter.md","/en/doc/profiler.md","/en/doc/pwd.md","/en/doc/quit.md","/en/doc/redefine.md","/en/doc/reset.md","/en/doc/retransform.md","/en/doc/sc.md","/en/doc/session.md","/en/doc/sm.md","/en/doc/stack.md","/en/doc/stop.md","/en/doc/sysenv.md","/en/doc/sysprop.md","/en/doc/tee.md","/en/doc/thread.md","/en/doc/trace.md","/en/doc/tt.md","/en/doc/version.md","/en/doc/vmoption.md","/en/doc/vmtool.md","/en/doc/watch.md"]},{"text":"AI Integration","link":"/en/doc/ai.md","collapsible":true,"children":["/en/doc/mcp-server.md"]},{"text":"Other features","link":"/en/doc/advanced-use.md","collapsible":true,"children":["/en/doc/async.md","/en/doc/save-log.md","/en/doc/docker.md","/en/doc/web-console.md","/en/doc/tunnel.md","/en/doc/idea-plugin.md","/en/doc/arthas-properties.html","/en/doc/agent.html","/en/doc/spring-boot-starter.md","/en/doc/external-command.md","/en/doc/http-api.md","/en/doc/batch-support.md"]},"/en/doc/faq.md",{"text":"User cases","link":"https://github.com/alibaba/arthas/issues?q=label%3Auser-case"},{"text":"Star 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"}]}]},"sidebarDepth":0}},"colorMode":"auto","colorModeSwitch":true,"navbar":[],"selectLanguageText":"Languages","selectLanguageAriaLabel":"Select language","sidebar":"auto","sidebarDepth":2,"editLink":true,"editLinkText":"Edit this page","lastUpdated":true,"lastUpdatedText":"Last Updated","contributors":true,"contributorsText":"Contributors","notFound":["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],"backToHome":"Take me home","openInNewWindow":"open in new window","toggleColorMode":"toggle color mode","toggleSidebar":"toggle sidebar"}`),pu=Ie(xp),Cp=()=>pu;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updateThemeData=e=>{pu.value=e});const _u=Symbol(""),Hr=()=>{const e=Ue(_u);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},Mp=(e,t)=>{var n;return{...e,...(n=e.locales)==null?void 0:n[t]}},$p=Dt({enhance({app:e}){const t=Cp(),n=e._context.provides[gi],o=Z(()=>Mp(t.value,n.value));e.provide(_u,o),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return o.value}}})}}),jp=Ne({__name:"Badge",props:{type:{type:String,required:!1,default:"tip"},text:{type:String,required:!1,default:""},vertical:{type:String,required:!1,default:void 0}},setup(e){return(t,n)=>(N(),Q("span",{class:Be(["badge",e.type]),style:Eo({verticalAlign:e.vertical})},[$e(t.$slots,"default",{},()=>[Xt(Re(e.text),1)])],6))}}),we=(e,t)=>{const n=e.__vccOpts||e;for(const[o,r]of t)n[o]=r;return n},Hp=we(jp,[["__file","Badge.vue"]]),qp=Ne({name:"CodeGroup",setup(e,{slots:t}){const n=Ie(-1),o=Ie([]),r=(c=n.value)=>{c{c>0?n.value=c-1:n.value=o.value.length-1,o.value[n.value].focus()},i=(c,s)=>{c.key===" "||c.key==="Enter"?(c.preventDefault(),n.value=s):c.key==="ArrowRight"?(c.preventDefault(),r(s)):c.key==="ArrowLeft"&&(c.preventDefault(),a(s))};return()=>{var s;const c=(((s=t.default)==null?void 0:s.call(t))||[]).filter(l=>l.type.name==="CodeGroupItem").map(l=>(l.props===null&&(l.props={}),l));return c.length===0?null:(n.value<0||n.value>c.length-1?(n.value=c.findIndex(l=>l.props.active===""||l.props.active===!0),n.value===-1&&(n.value=0)):c.forEach((l,u)=>{l.props.active=u===n.value}),Te("div",{class:"code-group"},[Te("div",{class:"code-group__nav"},Te("ul",{class:"code-group__ul"},c.map((l,u)=>{const m=u===n.value;return Te("li",{class:"code-group__li"},Te("button",{ref:d=>{d&&(o.value[u]=d)},class:{"code-group__nav-tab":!0,"code-group__nav-tab-active":m},ariaPressed:m,ariaExpanded:m,onClick:()=>n.value=u,onKeydown:d=>i(d,u)},l.props.title))}))),c]))}}}),Vp=["aria-selected"],Np=Ne({name:"CodeGroupItem"}),Fp=Ne({...Np,props:{title:{type:String,required:!0},active:{type:Boolean,required:!1,default:!1}},setup(e){return(t,n)=>(N(),Q("div",{class:Be(["code-group-item",{"code-group-item__active":e.active}]),"aria-selected":e.active},[$e(t.$slots,"default")],10,Vp))}}),Bp=we(Fp,[["__file","CodeGroupItem.vue"]]);var kc;const Io=typeof window<"u",zp=e=>typeof e=="function",Up=e=>typeof e=="string",Zr=()=>{};Io&&((kc=window==null?void 0:window.navigator)==null?void 0:kc.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function vu(e){return typeof e=="function"?e():V(e)}function Wp(e,t){function n(...o){e(()=>t.apply(this,o),{fn:t,thisArg:this,args:o})}return n}const gu=e=>e();function Kp(e=gu){const t=Ie(!0);function n(){t.value=!1}function o(){t.value=!0}return{isActive:t,pause:n,resume:o,eventFilter:(...a)=>{t.value&&e(...a)}}}function Yp(e){return e}function bu(e){return Nm()?(Fm(e),!0):!1}function Jp(e,t=!0){ai()?ti(e):t?e():Po(e)}function Qp(e,t=!0){ai()?tt(e):t?e():Po(e)}var xc=Object.getOwnPropertySymbols,Gp=Object.prototype.hasOwnProperty,Zp=Object.prototype.propertyIsEnumerable,Xp=(e,t)=>{var n={};for(var o in e)Gp.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(e!=null&&xc)for(var o of xc(e))t.indexOf(o)<0&&Zp.call(e,o)&&(n[o]=e[o]);return n};function e_(e,t,n={}){const o=n,{eventFilter:r=gu}=o,a=Xp(o,["eventFilter"]);return Xe(e,Wp(r,t),a)}var t_=Object.defineProperty,n_=Object.defineProperties,o_=Object.getOwnPropertyDescriptors,hr=Object.getOwnPropertySymbols,yu=Object.prototype.hasOwnProperty,Eu=Object.prototype.propertyIsEnumerable,Cc=(e,t,n)=>t in e?t_(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,r_=(e,t)=>{for(var n in t||(t={}))yu.call(t,n)&&Cc(e,n,t[n]);if(hr)for(var n of hr(t))Eu.call(t,n)&&Cc(e,n,t[n]);return e},a_=(e,t)=>n_(e,o_(t)),i_=(e,t)=>{var n={};for(var o in e)yu.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(e!=null&&hr)for(var o of hr(e))t.indexOf(o)<0&&Eu.call(e,o)&&(n[o]=e[o]);return n};function c_(e,t,n={}){const o=n,{eventFilter:r}=o,a=i_(o,["eventFilter"]),{eventFilter:i,pause:c,resume:s,isActive:l}=Kp(r);return{stop:e_(e,t,a_(r_({},a),{eventFilter:i})),pause:c,resume:s,isActive:l}}function s_(e){var t;const n=vu(e);return(t=n==null?void 0:n.$el)!=null?t:n}const pr=Io?window:void 0;Io&&window.document;Io&&window.navigator;Io&&window.location;function l_(...e){let t,n,o,r;if(Up(e[0])?([n,o,r]=e,t=pr):[t,n,o,r]=e,!t)return Zr;let a=Zr;const i=Xe(()=>s_(t),s=>{a(),s&&(s.addEventListener(n,o,r),a=()=>{s.removeEventListener(n,o,r),a=Zr})},{immediate:!0,flush:"post"}),c=()=>{i(),a()};return bu(c),c}function u_(e,t=!1){const n=Ie(),o=()=>n.value=Boolean(e());return o(),Qp(o,t),n}function m_(e,t={}){const{window:n=pr}=t,o=u_(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let r;const a=Ie(!1),i=()=>{!o.value||(r||(r=n.matchMedia(e)),a.value=r.matches)};return Jp(()=>{i(),r&&("addEventListener"in r?r.addEventListener("change",i):r.addListener(i),bu(()=>{"removeEventListener"in r?r.removeEventListener("change",i):r.removeListener(i)}))}),a}const Sa=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Aa="__vueuse_ssr_handlers__";Sa[Aa]=Sa[Aa]||{};const d_=Sa[Aa];function f_(e,t){return d_[e]||t}function h_(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"||Array.isArray(e)?"object":Number.isNaN(e)?"any":"number"}var p_=Object.defineProperty,Mc=Object.getOwnPropertySymbols,__=Object.prototype.hasOwnProperty,v_=Object.prototype.propertyIsEnumerable,$c=(e,t,n)=>t in e?p_(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,jc=(e,t)=>{for(var n in t||(t={}))__.call(t,n)&&$c(e,n,t[n]);if(Mc)for(var n of Mc(t))v_.call(t,n)&&$c(e,n,t[n]);return e};const g_={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}};function b_(e,t,n,o={}){var r;const{flush:a="pre",deep:i=!0,listenToStorageChanges:c=!0,writeDefaults:s=!0,mergeDefaults:l=!1,shallow:u,window:m=pr,eventFilter:d,onError:f=R=>{console.error(R)}}=o,v=(u?yl:Ie)(t);if(!n)try{n=f_("getDefaultStorage",()=>{var R;return(R=pr)==null?void 0:R.localStorage})()}catch(R){f(R)}if(!n)return v;const g=vu(t),b=h_(g),p=(r=o.serializer)!=null?r:g_[b],{pause:y,resume:P}=c_(v,()=>A(v.value),{flush:a,deep:i,eventFilter:d});return m&&c&&l_(m,"storage",q),q(),v;function A(R){try{R==null?n.removeItem(e):n.setItem(e,p.write(R))}catch(E){f(E)}}function D(R){if(!(R&&R.key!==e)){y();try{const E=R?R.newValue:n.getItem(e);if(E==null)return s&&g!==null&&n.setItem(e,p.write(g)),g;if(!R&&l){const z=p.read(E);return zp(l)?l(z,g):b==="object"&&!Array.isArray(z)?jc(jc({},g),z):z}else return typeof E!="string"?E:p.read(E)}catch(E){f(E)}finally{P()}}}function q(R){R&&R.key!==e||(v.value=D(R))}}function y_(e){return m_("(prefers-color-scheme: dark)",e)}var Hc;(function(e){e.UP="UP",e.RIGHT="RIGHT",e.DOWN="DOWN",e.LEFT="LEFT",e.NONE="NONE"})(Hc||(Hc={}));var E_=Object.defineProperty,qc=Object.getOwnPropertySymbols,w_=Object.prototype.hasOwnProperty,O_=Object.prototype.propertyIsEnumerable,Vc=(e,t,n)=>t in e?E_(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,P_=(e,t)=>{for(var n in t||(t={}))w_.call(t,n)&&Vc(e,n,t[n]);if(qc)for(var n of qc(t))O_.call(t,n)&&Vc(e,n,t[n]);return e};const S_={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};P_({linear:Yp},S_);const ot=()=>Hr(),wu=Symbol(""),mi=()=>{const e=Ue(wu);if(!e)throw new Error("useDarkMode() is called without provider.");return e},A_=()=>{const e=ot(),t=y_(),n=b_("vuepress-color-scheme",e.value.colorMode),o=Z({get(){return e.value.colorModeSwitch?n.value==="auto"?t.value:n.value==="dark":e.value.colorMode==="dark"},set(r){r===t.value?n.value="auto":n.value=r?"dark":"light"}});hn(wu,o),T_(o)},T_=e=>{const t=(n=e.value)=>{const o=window==null?void 0:window.document.querySelector("html");o==null||o.classList.toggle("dark",n)};tt(()=>{Xe(e,t,{immediate:!0})}),xr(()=>t())},Ou=(...e)=>{const n=vn().resolve(...e),o=n.matched[n.matched.length-1];if(!(o!=null&&o.redirect))return n;const{redirect:r}=o,a=he(r)?r(n):r,i=De(a)?{path:a}:a;return Ou({hash:n.hash,query:n.query,params:n.params,...i})},di=e=>{const t=Ou(encodeURI(e));return{text:t.meta.title||e,link:t.name==="404"?e:t.fullPath}};let Xr=null,Yn=null;const I_={wait:()=>Xr,pending:()=>{Xr=new Promise(e=>Yn=e)},resolve:()=>{Yn==null||Yn(),Xr=null,Yn=null}},Pu=()=>I_,Su=Symbol("sidebarItems"),fi=()=>{const e=Ue(Su);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},L_=()=>{const e=ot(),t=Tt(),n=Z(()=>D_(t.value,e.value));hn(Su,n)},D_=(e,t)=>{var r,a,i,c;const n=(a=(r=e.sidebar)!=null?r:t.sidebar)!=null?a:"auto",o=(c=(i=e.sidebarDepth)!=null?i:t.sidebarDepth)!=null?c:2;return e.home||n===!1?[]:n==="auto"?k_(o):ce(n)?Au(n,o):ii(n)?x_(n,o):[]},R_=(e,t)=>({text:e.title,link:e.link,children:hi(e.children,t)}),hi=(e,t)=>t>0?e.map(n=>R_(n,t-1)):[],k_=e=>{const t=mt();return[{text:t.value.title,children:hi(t.value.headers,e)}]},Au=(e,t)=>{const n=Rt(),o=mt(),r=a=>{var c;let i;if(De(a)?i=di(a):i=a,i.children)return{...i,children:i.children.map(s=>r(s))};if(i.link===n.path){const s=((c=o.value.headers[0])==null?void 0:c.level)===1?o.value.headers[0].children:o.value.headers;return{...i,children:hi(s,t)}}return i};return e.map(a=>r(a))},x_=(e,t)=>{var a;const n=Rt(),o=tu(e,n.path),r=(a=e[o])!=null?a:[];return Au(r,t)};const C_=["src"],M_={__name:"UserBoard",props:{img:{type:Object,required:!0}},setup(e){return(t,n)=>(N(),Q("img",{class:"users-logo",src:e.img.logo},null,8,C_))}},$_=we(M_,[["__scopeId","data-v-024b28a0"],["__file","UserBoard.vue"]]);const j_={key:0,class:"user-boards"},H_=["innerHTML"],q_={class:"user-logos"},V_={__name:"HomeUserBoards",setup(e){const t=Tt(),n=Oe(t.value.users)||[];return(o,r)=>V(n)?(N(),Q("div",j_,[le("h1",null,Re(V(t).users_title),1),le("p",{innerHTML:V(t).users_details},null,8,H_),le("div",q_,[(N(!0),Q(Se,null,vt(V(n),a=>(N(),je($_,{key:a.logo,img:a},null,8,["img"]))),128))])])):qe("v-if",!0)}},N_=we(V_,[["__scopeId","data-v-5032c352"],["__file","HomeUserBoards.vue"]]);const F_={key:0,class:"features"},B_={key:0,class:"icon"},z_={__name:"HomeFeatures",setup(e){const t=Tt(),n=Z(()=>ce(t.value.features)?t.value.features:[]);return(o,r)=>V(n).length?(N(),Q("div",F_,[(N(!0),Q(Se,null,vt(V(n),a=>(N(),Q("div",{key:a.title,class:"feature"},[a.icon?(N(),Q("div",B_,Re(a.icon),1)):qe("v-if",!0),le("h2",null,Re(a.title),1),le("p",null,Re(a.details),1)]))),128))])):qe("v-if",!0)}},U_=we(z_,[["__scopeId","data-v-514d14c6"],["__file","HomeFeatures.vue"]]),W_={name:"Star"},K_={version:"1.1",id:"Layer_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 512 512",style:{"enable-background":"new 0 0 512 512",height:"1rem",fill:"var(--c-text)"},"xml:space":"preserve"},Y_=le("g",null,[le("path",{d:`M175.1,168.9L13.7,186.8c-5.8,0.7-11,4.6-12.9,10.5c-1.9,5.9,0,12.1,4.3,16c48,43.8,120.1,109.4,120.1,109.4 + */const Ee={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
'},status:null,set:e=>{const t=Ee.isStarted();e=Gr(e,Ee.settings.minimum,1),Ee.status=e===1?null:e;const n=Ee.render(!t),o=n.querySelector(Ee.settings.barSelector),r=Ee.settings.speed,a=Ee.settings.easing;return n.offsetWidth,Lp(i=>{Ho(o,{transform:"translate3d("+Lc(e)+"%,0,0)",transition:"all "+r+"ms "+a}),e===1?(Ho(n,{transition:"none",opacity:"1"}),n.offsetWidth,setTimeout(function(){Ho(n,{transition:"all "+r+"ms linear",opacity:"0"}),setTimeout(function(){Ee.remove(),i()},r)},r)):setTimeout(()=>i(),r)}),Ee},isStarted:()=>typeof Ee.status=="number",start:()=>{Ee.status||Ee.set(0);const e=()=>{setTimeout(()=>{!Ee.status||(Ee.trickle(),e())},Ee.settings.trickleSpeed)};return Ee.settings.trickle&&e(),Ee},done:e=>!e&&!Ee.status?Ee:Ee.inc(.3+.5*Math.random()).set(1),inc:e=>{let t=Ee.status;return t?(typeof e!="number"&&(e=(1-t)*Gr(Math.random()*t,.1,.95)),t=Gr(t+e,0,.994),Ee.set(t)):Ee.start()},trickle:()=>Ee.inc(Math.random()*Ee.settings.trickleRate),render:e=>{if(Ee.isRendered())return document.getElementById("nprogress");Dc(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=Ee.settings.template;const n=t.querySelector(Ee.settings.barSelector),o=e?"-100":Lc(Ee.status||0),r=document.querySelector(Ee.settings.parent);return Ho(n,{transition:"all 0 linear",transform:"translate3d("+o+"%,0,0)"}),r!==document.body&&Dc(r,"nprogress-custom-parent"),r==null||r.appendChild(t),t},remove:()=>{Rc(document.documentElement,"nprogress-busy"),Rc(document.querySelector(Ee.settings.parent),"nprogress-custom-parent");const e=document.getElementById("nprogress");e&&Dp(e)},isRendered:()=>!!document.getElementById("nprogress")},Gr=(e,t,n)=>en?n:e,Lc=e=>(-1+e)*100,Lp=function(){const e=[];function t(){const n=e.shift();n&&n(t)}return function(n){e.push(n),e.length===1&&t()}}(),Ho=function(){const e=["Webkit","O","Moz","ms"],t={};function n(i){return i.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(c,s){return s.toUpperCase()})}function o(i){const c=document.body.style;if(i in c)return i;let s=e.length;const l=i.charAt(0).toUpperCase()+i.slice(1);let u;for(;s--;)if(u=e[s]+l,u in c)return u;return i}function r(i){return i=n(i),t[i]||(t[i]=o(i))}function a(i,c,s){c=r(c),i.style[c]=s}return function(i,c){for(const s in c){const l=c[s];l!==void 0&&Object.prototype.hasOwnProperty.call(c,s)&&a(i,s,l)}}}(),hu=(e,t)=>(typeof e=="string"?e:ui(e)).indexOf(" "+t+" ")>=0,Dc=(e,t)=>{const n=ui(e),o=n+t;hu(n,t)||(e.className=o.substring(1))},Rc=(e,t)=>{const n=ui(e);if(!hu(e,t))return;const o=n.replace(" "+t+" "," ");e.className=o.substring(1,o.length-1)},ui=e=>(" "+(e.className||"")+" ").replace(/\s+/gi," "),Dp=e=>{e&&e.parentNode&&e.parentNode.removeChild(e)};const Rp=()=>{tt(()=>{const e=vn(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(n=>{t.has(n.path)||Ee.start()}),e.afterEach(n=>{t.add(n.path),Ee.done()})})},xp=Dt({setup(){Rp()}}),kp=JSON.parse(`{"logo":"/images/arthas_light.png","logoDark":"/images/arthas_dark.png","repo":"alibaba/arthas","docsDir":"site/docs","docsBranch":"master","locales":{"/":{"selectLanguageName":"\u7B80\u4F53\u4E2D\u6587","selectLanguageText":"Languages","editLinkText":"\u5728 GitHub \u4E0A\u7F16\u8F91\u6B64\u9875","lastUpdated":"\u4E0A\u6B21\u66F4\u65B0","contributorsText":"\u8D21\u732E\u8005","backToHome":"\u56DE\u5230\u9996\u9875","rightMenuText":"\u76EE\u5F55","warning":"\u6CE8\u610F","tip":"\u63D0\u793A","danger":"\u8B66\u544A","notFound":["\u8FD9\u91CC\u4EC0\u4E48\u90FD\u6CA1\u6709","\u6211\u4EEC\u600E\u4E48\u5230\u8FD9\u6765\u4E86\uFF1F","\u8FD9\u662F\u4E00\u4E2A 404 \u9875\u9762","\u770B\u8D77\u6765\u6211\u4EEC\u8FDB\u5165\u4E86\u9519\u8BEF\u7684\u94FE\u63A5"],"openInNewWindow":"\u5728\u65B0\u7A97\u53E3\u6253\u5F00","toggleColorMode":"\u5207\u6362\u989C\u8272\u6A21\u5F0F","toggleSidebar":"\u5207\u6362\u4FA7\u8FB9\u680F","navbar":[{"text":"\u9996\u9875","link":"/"},{"text":"\u6587\u6863","link":"/doc/"},{"text":"\u547D\u4EE4\u5217\u8868","link":"/doc/commands.md"},{"text":"\u4E0B\u8F7D","link":"/doc/download.md"},{"text":"\u7248\u672C","children":[{"text":"v3.x","link":"https://arthas.aliyun.com/3.x/"}]}],"sidebar":{"/doc/":[{"text":"\u6587\u6863","children":["/doc/README.md","/doc/quick-start.md","/doc/install-detail.md","/doc/download.md","/doc/advice-class.html",{"text":"\u547D\u4EE4\u5217\u8868","link":"/doc/commands.md","collapsible":true,"children":["/doc/auth.md","/doc/base64.md","/doc/cat.md","/doc/classloader.md","/doc/classloader-metaspace.md","/doc/cls.md","/doc/dashboard.md","/doc/dump.md","/doc/echo.md","/doc/getstatic.md","/doc/grep.md","/doc/heapdump.md","/doc/help.md","/doc/history.md","/doc/jad.md","/doc/jfr.md","/doc/jvm.md","/doc/keymap.md","/doc/line.md","/doc/logger.md","/doc/mbean.md","/doc/mc.md","/doc/memory.md","/doc/monitor.md","/doc/ognl.md","/doc/ognl-express.md","/doc/options.md","/doc/perfcounter.md","/doc/profiler.md","/doc/pwd.md","/doc/quit.md","/doc/redefine.md","/doc/reset.md","/doc/retransform.md","/doc/sc.md","/doc/session.md","/doc/sm.md","/doc/stack.md","/doc/stop.md","/doc/sysenv.md","/doc/sysprop.md","/doc/tee.md","/doc/thread.md","/doc/trace.md","/doc/tt.md","/doc/version.md","/doc/vmoption.md","/doc/vmtool.md","/doc/watch.md"]},{"text":"AI \u76F8\u5173","link":"/doc/ai.md","collapsible":true,"children":["/doc/mcp-server.md"]},{"text":"\u5176\u4ED6\u7279\u6027","link":"/doc/advanced-use.md","collapsible":true,"children":["/doc/async.md","/doc/save-log.md","/doc/docker.md","/doc/web-console.md","/doc/tunnel.md","/doc/idea-plugin.md","/doc/arthas-properties.html","/doc/agent.html","/doc/spring-boot-starter.md","/doc/external-command.md","/doc/http-api.md","/doc/batch-support.md"]},"/doc/faq.md",{"text":"\u7528\u6237\u6848\u4F8B","link":"https://github.com/alibaba/arthas/issues?q=label%3Auser-case"},{"text":"Star me at github","link":"https://github.com/alibaba/arthas"},{"text":"\u7F16\u8BD1\u8C03\u8BD5/\u53C2\u4E0E\u8D21\u732E","link":"https://github.com/alibaba/arthas/blob/master/CONTRIBUTING.md"},{"text":"Release Notes","link":"https://github.com/alibaba/arthas/releases"},{"text":"QQ \u7FA4/\u9489\u9489\u7FA4","link":"/doc/contact-us.md"}]}]},"sidebarDepth":0},"/en/":{"selectLanguageName":"English","selectLanguageText":"Languages","editLinkText":"Edit this page on GitHub","navbar":[{"text":"HOME","link":"/en/"},{"text":"DOCS","link":"/en/doc"},{"text":"COMMANDS","link":"/en/doc/commands.md"},{"text":"DOWNLOAD","link":"/en/doc/download.md"},{"text":"VERSIONS","children":[{"text":"v3.x","link":"https://arthas.aliyun.com/3.x/en/"}]}],"sidebar":{"/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/advice-class.html",{"text":"All Commands","link":"/en/doc/commands.md","collapsible":true,"children":["/en/doc/auth.md","/en/doc/base64.md","/en/doc/cat.md","/en/doc/classloader.md","/en/doc/classloader-metaspace.md","/en/doc/cls.md","/en/doc/dashboard.md","/en/doc/dump.md","/en/doc/echo.md","/en/doc/getstatic.md","/en/doc/grep.md","/en/doc/heapdump.md","/en/doc/help.md","/en/doc/history.md","/en/doc/jad.md","/en/doc/jfr.md","/en/doc/jvm.md","/en/doc/keymap.md","/en/doc/line.md","/en/doc/logger.md","/en/doc/mbean.md","/en/doc/mc.md","/en/doc/memory.md","/en/doc/monitor.md","/en/doc/ognl.md","/en/doc/ognl-express.md","/en/doc/options.md","/en/doc/perfcounter.md","/en/doc/profiler.md","/en/doc/pwd.md","/en/doc/quit.md","/en/doc/redefine.md","/en/doc/reset.md","/en/doc/retransform.md","/en/doc/sc.md","/en/doc/session.md","/en/doc/sm.md","/en/doc/stack.md","/en/doc/stop.md","/en/doc/sysenv.md","/en/doc/sysprop.md","/en/doc/tee.md","/en/doc/thread.md","/en/doc/trace.md","/en/doc/tt.md","/en/doc/version.md","/en/doc/vmoption.md","/en/doc/vmtool.md","/en/doc/watch.md"]},{"text":"AI Integration","link":"/en/doc/ai.md","collapsible":true,"children":["/en/doc/mcp-server.md"]},{"text":"Other features","link":"/en/doc/advanced-use.md","collapsible":true,"children":["/en/doc/async.md","/en/doc/save-log.md","/en/doc/docker.md","/en/doc/web-console.md","/en/doc/tunnel.md","/en/doc/idea-plugin.md","/en/doc/arthas-properties.html","/en/doc/agent.html","/en/doc/spring-boot-starter.md","/en/doc/external-command.md","/en/doc/http-api.md","/en/doc/batch-support.md"]},"/en/doc/faq.md",{"text":"User cases","link":"https://github.com/alibaba/arthas/issues?q=label%3Auser-case"},{"text":"Star 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"}]}]},"sidebarDepth":0}},"colorMode":"auto","colorModeSwitch":true,"navbar":[],"selectLanguageText":"Languages","selectLanguageAriaLabel":"Select language","sidebar":"auto","sidebarDepth":2,"editLink":true,"editLinkText":"Edit this page","lastUpdated":true,"lastUpdatedText":"Last Updated","contributors":true,"contributorsText":"Contributors","notFound":["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],"backToHome":"Take me home","openInNewWindow":"open in new window","toggleColorMode":"toggle color mode","toggleSidebar":"toggle sidebar"}`),pu=Ie(kp),Cp=()=>pu;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updateThemeData=e=>{pu.value=e});const _u=Symbol(""),Hr=()=>{const e=Ue(_u);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},Mp=(e,t)=>{var n;return{...e,...(n=e.locales)==null?void 0:n[t]}},$p=Dt({enhance({app:e}){const t=Cp(),n=e._context.provides[gi],o=Z(()=>Mp(t.value,n.value));e.provide(_u,o),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return o.value}}})}}),jp=Ne({__name:"Badge",props:{type:{type:String,required:!1,default:"tip"},text:{type:String,required:!1,default:""},vertical:{type:String,required:!1,default:void 0}},setup(e){return(t,n)=>(N(),Q("span",{class:Be(["badge",e.type]),style:Eo({verticalAlign:e.vertical})},[$e(t.$slots,"default",{},()=>[Xt(Re(e.text),1)])],6))}}),we=(e,t)=>{const n=e.__vccOpts||e;for(const[o,r]of t)n[o]=r;return n},Hp=we(jp,[["__file","Badge.vue"]]),qp=Ne({name:"CodeGroup",setup(e,{slots:t}){const n=Ie(-1),o=Ie([]),r=(c=n.value)=>{c{c>0?n.value=c-1:n.value=o.value.length-1,o.value[n.value].focus()},i=(c,s)=>{c.key===" "||c.key==="Enter"?(c.preventDefault(),n.value=s):c.key==="ArrowRight"?(c.preventDefault(),r(s)):c.key==="ArrowLeft"&&(c.preventDefault(),a(s))};return()=>{var s;const c=(((s=t.default)==null?void 0:s.call(t))||[]).filter(l=>l.type.name==="CodeGroupItem").map(l=>(l.props===null&&(l.props={}),l));return c.length===0?null:(n.value<0||n.value>c.length-1?(n.value=c.findIndex(l=>l.props.active===""||l.props.active===!0),n.value===-1&&(n.value=0)):c.forEach((l,u)=>{l.props.active=u===n.value}),Te("div",{class:"code-group"},[Te("div",{class:"code-group__nav"},Te("ul",{class:"code-group__ul"},c.map((l,u)=>{const m=u===n.value;return Te("li",{class:"code-group__li"},Te("button",{ref:d=>{d&&(o.value[u]=d)},class:{"code-group__nav-tab":!0,"code-group__nav-tab-active":m},ariaPressed:m,ariaExpanded:m,onClick:()=>n.value=u,onKeydown:d=>i(d,u)},l.props.title))}))),c]))}}}),Vp=["aria-selected"],Np=Ne({name:"CodeGroupItem"}),Fp=Ne({...Np,props:{title:{type:String,required:!0},active:{type:Boolean,required:!1,default:!1}},setup(e){return(t,n)=>(N(),Q("div",{class:Be(["code-group-item",{"code-group-item__active":e.active}]),"aria-selected":e.active},[$e(t.$slots,"default")],10,Vp))}}),Bp=we(Fp,[["__file","CodeGroupItem.vue"]]);var xc;const Io=typeof window<"u",zp=e=>typeof e=="function",Up=e=>typeof e=="string",Zr=()=>{};Io&&((xc=window==null?void 0:window.navigator)==null?void 0:xc.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function vu(e){return typeof e=="function"?e():V(e)}function Wp(e,t){function n(...o){e(()=>t.apply(this,o),{fn:t,thisArg:this,args:o})}return n}const gu=e=>e();function Kp(e=gu){const t=Ie(!0);function n(){t.value=!1}function o(){t.value=!0}return{isActive:t,pause:n,resume:o,eventFilter:(...a)=>{t.value&&e(...a)}}}function Yp(e){return e}function bu(e){return Nm()?(Fm(e),!0):!1}function Jp(e,t=!0){ai()?ti(e):t?e():Po(e)}function Qp(e,t=!0){ai()?tt(e):t?e():Po(e)}var kc=Object.getOwnPropertySymbols,Gp=Object.prototype.hasOwnProperty,Zp=Object.prototype.propertyIsEnumerable,Xp=(e,t)=>{var n={};for(var o in e)Gp.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(e!=null&&kc)for(var o of kc(e))t.indexOf(o)<0&&Zp.call(e,o)&&(n[o]=e[o]);return n};function e_(e,t,n={}){const o=n,{eventFilter:r=gu}=o,a=Xp(o,["eventFilter"]);return Xe(e,Wp(r,t),a)}var t_=Object.defineProperty,n_=Object.defineProperties,o_=Object.getOwnPropertyDescriptors,hr=Object.getOwnPropertySymbols,yu=Object.prototype.hasOwnProperty,Eu=Object.prototype.propertyIsEnumerable,Cc=(e,t,n)=>t in e?t_(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,r_=(e,t)=>{for(var n in t||(t={}))yu.call(t,n)&&Cc(e,n,t[n]);if(hr)for(var n of hr(t))Eu.call(t,n)&&Cc(e,n,t[n]);return e},a_=(e,t)=>n_(e,o_(t)),i_=(e,t)=>{var n={};for(var o in e)yu.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(e!=null&&hr)for(var o of hr(e))t.indexOf(o)<0&&Eu.call(e,o)&&(n[o]=e[o]);return n};function c_(e,t,n={}){const o=n,{eventFilter:r}=o,a=i_(o,["eventFilter"]),{eventFilter:i,pause:c,resume:s,isActive:l}=Kp(r);return{stop:e_(e,t,a_(r_({},a),{eventFilter:i})),pause:c,resume:s,isActive:l}}function s_(e){var t;const n=vu(e);return(t=n==null?void 0:n.$el)!=null?t:n}const pr=Io?window:void 0;Io&&window.document;Io&&window.navigator;Io&&window.location;function l_(...e){let t,n,o,r;if(Up(e[0])?([n,o,r]=e,t=pr):[t,n,o,r]=e,!t)return Zr;let a=Zr;const i=Xe(()=>s_(t),s=>{a(),s&&(s.addEventListener(n,o,r),a=()=>{s.removeEventListener(n,o,r),a=Zr})},{immediate:!0,flush:"post"}),c=()=>{i(),a()};return bu(c),c}function u_(e,t=!1){const n=Ie(),o=()=>n.value=Boolean(e());return o(),Qp(o,t),n}function m_(e,t={}){const{window:n=pr}=t,o=u_(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let r;const a=Ie(!1),i=()=>{!o.value||(r||(r=n.matchMedia(e)),a.value=r.matches)};return Jp(()=>{i(),r&&("addEventListener"in r?r.addEventListener("change",i):r.addListener(i),bu(()=>{"removeEventListener"in r?r.removeEventListener("change",i):r.removeListener(i)}))}),a}const Sa=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Aa="__vueuse_ssr_handlers__";Sa[Aa]=Sa[Aa]||{};const d_=Sa[Aa];function f_(e,t){return d_[e]||t}function h_(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"||Array.isArray(e)?"object":Number.isNaN(e)?"any":"number"}var p_=Object.defineProperty,Mc=Object.getOwnPropertySymbols,__=Object.prototype.hasOwnProperty,v_=Object.prototype.propertyIsEnumerable,$c=(e,t,n)=>t in e?p_(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,jc=(e,t)=>{for(var n in t||(t={}))__.call(t,n)&&$c(e,n,t[n]);if(Mc)for(var n of Mc(t))v_.call(t,n)&&$c(e,n,t[n]);return e};const g_={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}};function b_(e,t,n,o={}){var r;const{flush:a="pre",deep:i=!0,listenToStorageChanges:c=!0,writeDefaults:s=!0,mergeDefaults:l=!1,shallow:u,window:m=pr,eventFilter:d,onError:f=R=>{console.error(R)}}=o,v=(u?yl:Ie)(t);if(!n)try{n=f_("getDefaultStorage",()=>{var R;return(R=pr)==null?void 0:R.localStorage})()}catch(R){f(R)}if(!n)return v;const g=vu(t),b=h_(g),p=(r=o.serializer)!=null?r:g_[b],{pause:y,resume:P}=c_(v,()=>A(v.value),{flush:a,deep:i,eventFilter:d});return m&&c&&l_(m,"storage",q),q(),v;function A(R){try{R==null?n.removeItem(e):n.setItem(e,p.write(R))}catch(E){f(E)}}function D(R){if(!(R&&R.key!==e)){y();try{const E=R?R.newValue:n.getItem(e);if(E==null)return s&&g!==null&&n.setItem(e,p.write(g)),g;if(!R&&l){const z=p.read(E);return zp(l)?l(z,g):b==="object"&&!Array.isArray(z)?jc(jc({},g),z):z}else return typeof E!="string"?E:p.read(E)}catch(E){f(E)}finally{P()}}}function q(R){R&&R.key!==e||(v.value=D(R))}}function y_(e){return m_("(prefers-color-scheme: dark)",e)}var Hc;(function(e){e.UP="UP",e.RIGHT="RIGHT",e.DOWN="DOWN",e.LEFT="LEFT",e.NONE="NONE"})(Hc||(Hc={}));var E_=Object.defineProperty,qc=Object.getOwnPropertySymbols,w_=Object.prototype.hasOwnProperty,O_=Object.prototype.propertyIsEnumerable,Vc=(e,t,n)=>t in e?E_(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,P_=(e,t)=>{for(var n in t||(t={}))w_.call(t,n)&&Vc(e,n,t[n]);if(qc)for(var n of qc(t))O_.call(t,n)&&Vc(e,n,t[n]);return e};const S_={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};P_({linear:Yp},S_);const ot=()=>Hr(),wu=Symbol(""),mi=()=>{const e=Ue(wu);if(!e)throw new Error("useDarkMode() is called without provider.");return e},A_=()=>{const e=ot(),t=y_(),n=b_("vuepress-color-scheme",e.value.colorMode),o=Z({get(){return e.value.colorModeSwitch?n.value==="auto"?t.value:n.value==="dark":e.value.colorMode==="dark"},set(r){r===t.value?n.value="auto":n.value=r?"dark":"light"}});hn(wu,o),T_(o)},T_=e=>{const t=(n=e.value)=>{const o=window==null?void 0:window.document.querySelector("html");o==null||o.classList.toggle("dark",n)};tt(()=>{Xe(e,t,{immediate:!0})}),kr(()=>t())},Ou=(...e)=>{const n=vn().resolve(...e),o=n.matched[n.matched.length-1];if(!(o!=null&&o.redirect))return n;const{redirect:r}=o,a=he(r)?r(n):r,i=De(a)?{path:a}:a;return Ou({hash:n.hash,query:n.query,params:n.params,...i})},di=e=>{const t=Ou(encodeURI(e));return{text:t.meta.title||e,link:t.name==="404"?e:t.fullPath}};let Xr=null,Yn=null;const I_={wait:()=>Xr,pending:()=>{Xr=new Promise(e=>Yn=e)},resolve:()=>{Yn==null||Yn(),Xr=null,Yn=null}},Pu=()=>I_,Su=Symbol("sidebarItems"),fi=()=>{const e=Ue(Su);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},L_=()=>{const e=ot(),t=Tt(),n=Z(()=>D_(t.value,e.value));hn(Su,n)},D_=(e,t)=>{var r,a,i,c;const n=(a=(r=e.sidebar)!=null?r:t.sidebar)!=null?a:"auto",o=(c=(i=e.sidebarDepth)!=null?i:t.sidebarDepth)!=null?c:2;return e.home||n===!1?[]:n==="auto"?x_(o):ce(n)?Au(n,o):ii(n)?k_(n,o):[]},R_=(e,t)=>({text:e.title,link:e.link,children:hi(e.children,t)}),hi=(e,t)=>t>0?e.map(n=>R_(n,t-1)):[],x_=e=>{const t=mt();return[{text:t.value.title,children:hi(t.value.headers,e)}]},Au=(e,t)=>{const n=Rt(),o=mt(),r=a=>{var c;let i;if(De(a)?i=di(a):i=a,i.children)return{...i,children:i.children.map(s=>r(s))};if(i.link===n.path){const s=((c=o.value.headers[0])==null?void 0:c.level)===1?o.value.headers[0].children:o.value.headers;return{...i,children:hi(s,t)}}return i};return e.map(a=>r(a))},k_=(e,t)=>{var a;const n=Rt(),o=tu(e,n.path),r=(a=e[o])!=null?a:[];return Au(r,t)};const C_=["src"],M_={__name:"UserBoard",props:{img:{type:Object,required:!0}},setup(e){return(t,n)=>(N(),Q("img",{class:"users-logo",src:e.img.logo},null,8,C_))}},$_=we(M_,[["__scopeId","data-v-024b28a0"],["__file","UserBoard.vue"]]);const j_={key:0,class:"user-boards"},H_=["innerHTML"],q_={class:"user-logos"},V_={__name:"HomeUserBoards",setup(e){const t=Tt(),n=Oe(t.value.users)||[];return(o,r)=>V(n)?(N(),Q("div",j_,[le("h1",null,Re(V(t).users_title),1),le("p",{innerHTML:V(t).users_details},null,8,H_),le("div",q_,[(N(!0),Q(Se,null,vt(V(n),a=>(N(),je($_,{key:a.logo,img:a},null,8,["img"]))),128))])])):qe("v-if",!0)}},N_=we(V_,[["__scopeId","data-v-5032c352"],["__file","HomeUserBoards.vue"]]);const F_={key:0,class:"features"},B_={key:0,class:"icon"},z_={__name:"HomeFeatures",setup(e){const t=Tt(),n=Z(()=>ce(t.value.features)?t.value.features:[]);return(o,r)=>V(n).length?(N(),Q("div",F_,[(N(!0),Q(Se,null,vt(V(n),a=>(N(),Q("div",{key:a.title,class:"feature"},[a.icon?(N(),Q("div",B_,Re(a.icon),1)):qe("v-if",!0),le("h2",null,Re(a.title),1),le("p",null,Re(a.details),1)]))),128))])):qe("v-if",!0)}},U_=we(z_,[["__scopeId","data-v-514d14c6"],["__file","HomeFeatures.vue"]]),W_={name:"Star"},K_={version:"1.1",id:"Layer_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 512 512",style:{"enable-background":"new 0 0 512 512",height:"1rem",fill:"var(--c-text)"},"xml:space":"preserve"},Y_=le("g",null,[le("path",{d:`M175.1,168.9L13.7,186.8c-5.8,0.7-11,4.6-12.9,10.5c-1.9,5.9,0,12.1,4.3,16c48,43.8,120.1,109.4,120.1,109.4 c-0.1,0-19.8,95.4-32.9,159.1c-1.1,5.8,1,11.9,6,15.5c5,3.7,11.4,3.7,16.5,0.9C171.3,466,256,417.7,256,417.7l141.1,80.5 c5.1,2.8,11.6,2.8,16.6-0.9c5-3.7,7.1-9.7,6-15.5l-32.8-159.1L507,213.4c4.3-4,6.2-10.2,4.3-16.1c-1.9-5.9-7.1-9.8-12.9-10.4 c-64.6-7.2-161.5-18-161.5-18L269.9,20.8c-2.5-5.3-7.8-9-14-9c-6.2,0-11.5,3.7-13.9,9L175.1,168.9z`})],-1),J_=[Y_];function Q_(e,t,n,o,r,a){return N(),Q("svg",K_,J_)}const G_=we(W_,[["render",Q_],["__file","Star.vue"]]),Z_={name:"Fork"},X_={version:"1.1",id:"Layer_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"131 -131 512 512",style:{"enable-background":"new 131 -131 512 512",height:"1rem",fill:"var(--c-text)"},"xml:space":"preserve"},ev=le("g",{id:"XMLID_2_"},[le("path",{id:"XMLID_8_",d:`M312.8,317c0-8.5-3.4-16.2-9.4-23s-13.7-9.4-23-9.4c-9.3,0-16.2,3.4-23,9.4c-6,6-9.4,13.7-9.4,23 @@ -22,17 +22,17 @@ See: https://github.com/francoischalifour/medium-zoom`)}},_h=function(t){var n=d c17.9,0,33.3,6,45.2,18.8s18.8,27.3,18.8,45.2c0,11.9-2.6,22.2-8.5,32.4c-5.9,10.2-13.7,17.9-23,23V154c11.9-6,29-11.9,51.2-18.8 c11.9-3.4,22.2-6.8,29-10.2c6.8-3.4,15.4-6,23.9-10.2s15.4-8.5,19.6-12.8s9.4-10.2,13.7-17.1s7.7-14.5,9.4-23 c1.7-8.5,2.6-18.8,2.6-30.7c-9.4-6-17.9-13.7-23-23s-8.5-20.5-8.5-32.4c0-17.9,6-33.3,18.8-45.2c12.8-12.8,27.3-18.8,45.2-18.8 - s33.3,6,45.2,18.8C551.7-57.6,557.7-42.3,557.7-24.3z`})],-1),tv=[ev];function nv(e,t,n,o,r,a){return N(),Q("svg",X_,tv)}const ov=we(Z_,[["render",nv],["__file","Fork.vue"]]);const rv=["href"],av=Xt(" \xA0 "),iv={__name:"Badge",props:{comp:{type:Object,required:!0},data:{type:Number,required:!0}},setup(e){const t=e,o=`https://github.com/${Hr().value.repo}`,r=o,a=`${o}/fork`;let i=o;switch(t.comp.name){case"Star":i=r;break;case"Fork":i=a;break}return(c,s)=>{const l=Lt("CountTo");return N(),Q("a",{class:"my-badge",href:V(i),target:"_blank"},[(N(),je(Wd(e.comp))),av,ie(l,{startVal:0,endVal:e.data,duration:500},null,8,["endVal"])],8,rv)}}},Nc=we(iv,[["__scopeId","data-v-b201bc64"],["__file","Badge.vue"]]);const cv={class:"badges"},sv={__name:"HomeBadges",setup(e){const t=Ie(29582),n=Ie(6494);return ti(async()=>{const r=await fetch("https://arthas.aliyun.com/api/starCount").then(i=>i.json()),a=await fetch("https://arthas.aliyun.com/api/forkCount").then(i=>i.json());t.value=r||t.value,n.value=a||n.value}),(r,a)=>(N(),Q("div",cv,[ie(Nc,{comp:G_,data:t.value},null,8,["data"]),ie(Nc,{comp:ov,data:n.value},null,8,["data"])]))}},lv=we(sv,[["__scopeId","data-v-d7ced36e"],["__file","HomeBadges.vue"]]),uv={name:"MdiGithub"},mv={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 24 24",style:{height:"1.25rem",width:"1.25rem","vertical-align":"bottom"}},dv=le("path",{fill:"currentColor",d:"M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5c.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34c-.46-1.16-1.11-1.47-1.11-1.47c-.91-.62.07-.6.07-.6c1 .07 1.53 1.03 1.53 1.03c.87 1.52 2.34 1.07 2.91.83c.09-.65.35-1.09.63-1.34c-2.22-.25-4.55-1.11-4.55-4.92c0-1.11.38-2 1.03-2.71c-.1-.25-.45-1.29.1-2.64c0 0 .84-.27 2.75 1.02c.79-.22 1.65-.33 2.5-.33c.85 0 1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02c.55 1.35.2 2.39.1 2.64c.65.71 1.03 1.6 1.03 2.71c0 3.82-2.34 4.66-4.57 4.91c.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"},null,-1),fv=[dv];function hv(e,t,n,o,r,a){return N(),Q("svg",mv,fv)}const pv=we(uv,[["render",hv],["__file","GitHub.vue"]]),_v=["href","rel","target","aria-label"],vv={key:1},gv=Ne({inheritAttrs:!1}),bv=Object.assign(gv,{__name:"AutoLink",props:{item:{type:Object,required:!0}},setup(e){const t=e,n=Rt(),o=bi(),{item:r}=Xa(t),a=Z(()=>To(r.value.link)),i=Z(()=>ih(r.value.link)||ch(r.value.link)),c=Z(()=>{if(!i.value){if(r.value.target)return r.value.target;if(a.value)return"_blank"}}),s=Z(()=>c.value==="_blank"),l=Z(()=>!a.value&&!i.value&&!s.value),u=Z(()=>{if(!i.value){if(r.value.rel)return r.value.rel;if(s.value)return"noopener noreferrer"}}),m=Z(()=>r.value.ariaLabel||r.value.text),d=Z(()=>{const g=Object.keys(o.value.locales);return g.length?!g.some(b=>b===r.value.link):r.value.link!=="/"}),f=Z(()=>d.value?n.path.startsWith(r.value.link):!1),v=Z(()=>l.value?r.value.activeMatch?new RegExp(r.value.activeMatch).test(n.path):f.value:!1);return(g,b)=>{const p=Lt("RouterLink"),y=Lt("AutoLinkExternalIcon");return V(l)?(N(),je(p,ba({key:0,class:{"router-link-active":V(v)},to:V(r).link,"aria-label":V(m)},g.$attrs),{default:We(()=>[$e(g.$slots,"before"),Xt(" "+Re(V(r).text)+" ",1),$e(g.$slots,"after")]),_:3},16,["class","to","aria-label"])):(N(),Q("a",ba({key:1,class:"external-link",href:V(r).link,rel:V(u),target:V(c),"aria-label":V(m)},g.$attrs),[$e(g.$slots,"before"),V(r).text==="GitHub"?(N(),je(pv,{key:0})):(N(),Q("span",vv,Re(V(r).text),1)),V(s)&&V(r).text!=="GitHub"?(N(),je(y,{key:2})):qe("v-if",!0),$e(g.$slots,"after")],16,_v))}}}),St=we(bv,[["__file","AutoLink.vue"]]),Tu=e=>!To(e)||/github\.com/.test(e)?"GitHub":/bitbucket\.org/.test(e)?"Bitbucket":/gitlab\.com/.test(e)?"GitLab":/gitee\.com/.test(e)?"Gitee":null,yv={GitHub:":repo/edit/:branch/:path",GitLab:":repo/-/edit/:branch/:path",Gitee:":repo/edit/:branch/:path",Bitbucket:":repo/src/:branch/:path?mode=edit&spa=0&at=:branch&fileviewer=file-view-default"},Ev=({docsRepo:e,editLinkPattern:t})=>{if(t)return t;const n=Tu(e);return n!==null?yv[n]:null},wv=({docsRepo:e,docsBranch:t,docsDir:n,filePathRelative:o,editLinkPattern:r})=>{if(!o)return null;const a=Ev({docsRepo:e,editLinkPattern:r});return a?a.replace(/:repo/,To(e)?e:`https://github.com/${e}`).replace(/:branch/,t).replace(/:path/,eu(`${Xl(n)}/${o}`)):null},Ov={class:"hero"},Pv={key:0,id:"main-title"},Sv={key:1,class:"description"},Av={key:2,class:"actions"},Tv={__name:"HomeHero",setup(e){const t=Tt(),n=yi(),o=mi(),r=Z(()=>o.value&&t.value.heroImageDark!==void 0?t.value.heroImageDark:t.value.heroImage),a=Z(()=>t.value.heroText===null?null:t.value.heroText||n.value.title||"Hello"),i=Z(()=>t.value.heroAlt||a.value||"hero"),c=Z(()=>t.value.tagline===null?null:t.value.tagline||n.value.description||"Welcome to your VuePress site"),s=Z(()=>ce(t.value.actions)?t.value.actions.map(({text:u,link:m,type:d="primary"})=>({text:u,link:m,type:d})):[]),l=()=>{if(!r.value)return null;const u=Te("img",{src:wi(r.value),style:"width: 60%;",alt:i.value});return t.value.heroImageDark===void 0?u:Te(Ei,()=>u)};return(u,m)=>(N(),Q("header",Ov,[ie(l),le("div",null,[V(a)?(N(),Q("h1",Pv,Re(V(a)),1)):qe("v-if",!0),V(c)?(N(),Q("p",Sv,Re(V(c)),1)):qe("v-if",!0),ie(lv),V(s).length?(N(),Q("p",Av,[(N(!0),Q(Se,null,vt(V(s),d=>(N(),je(St,{key:d.text,class:Be(["action-button",[d.type]]),item:d},null,8,["class","item"]))),128))])):qe("v-if",!0)])]))}},Iv=we(Tv,[["__file","HomeHero.vue"]]),Lv={},Dv={class:"theme-default-content"};function Rv(e,t){const n=Lt("Content");return N(),Q("div",Dv,[ie(n)])}const kv=we(Lv,[["render",Rv],["__file","HomeContent.vue"]]),xv=["innerHTML"],Cv=["textContent"],Mv=Ne({__name:"HomeFooter",setup(e){const t=Tt(),n=Z(()=>t.value.footer),o=Z(()=>t.value.footerHtml);return(r,a)=>V(n)?(N(),Q(Se,{key:0},[qe(" eslint-disable-next-line vue/no-v-html "),V(o)?(N(),Q("div",{key:0,class:"footer",innerHTML:V(n)},null,8,xv)):(N(),Q("div",{key:1,class:"footer",textContent:Re(V(n))},null,8,Cv))],64)):qe("v-if",!0)}}),$v=we(Mv,[["__file","HomeFooter.vue"]]),jv={class:"home"},Hv={__name:"Home",setup(e){return(t,n)=>(N(),Q("main",jv,[ie(Iv),ie(U_),ie(kv),ie(N_),ie($v)]))}},qv=we(Hv,[["__file","Home.vue"]]);const Vv={__name:"NavbarBrand",setup(e){const t=mt(),n=mi(),o=Bn(),r=yi(),a=Hr(),i=Ie(t.value.version),c=Z(()=>a.value.home||o.value),s=Z(()=>r.value.title),l=Z(()=>n.value&&a.value.logoDark!==void 0?a.value.logoDark:a.value.logo),u=()=>Te("span",{class:"navbar-version"},`v${i.value}`),m=()=>{if(!l.value)return null;const d=Te("img",{class:"logo",src:wi(l.value),alt:s.value});return a.value.logoDark===void 0?d:Te(Ei,()=>d)};return(d,f)=>{const v=Lt("RouterLink");return N(),je(v,{to:V(c)},{default:We(()=>[ie(m),V(s)?(N(),Q("span",{key:0,class:Be(["site-name",{"can-hide":V(l)}])},Re(V(s)),3)):qe("v-if",!0),ie(u)]),_:1},8,["to"])}}},Nv=we(Vv,[["__scopeId","data-v-a8869d06"],["__file","NavbarBrand.vue"]]),Fv={},Bv={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",width:"1em",height:"1em",style:{height:"1.25rem",width:"1.25rem","vertical-align":"bottom"},viewBox:"0 0 24 24"},zv=le("path",{fill:"currentColor",d:"M13.35 22q-.6 0-.862-.387q-.263-.388-.063-.963l3.65-9.675q.15-.4.563-.688Q17.05 10 17.5 10q.425 0 .85.287q.425.288.575.688l3.65 9.675q.2.575-.062.963q-.263.387-.888.387q-.275 0-.5-.175q-.225-.175-.325-.425l-.85-2.45H15.1l-.875 2.45q-.1.25-.35.425q-.25.175-.525.175Zm2.35-4.8h3.6l-1.75-4.95h-.1ZM7.15 8.55q.4.725.85 1.337q.45.613 1.05 1.263q1.1-1.2 1.825-2.462Q11.6 7.425 12.1 6H2q-.425 0-.712-.287Q1 5.425 1 5t.288-.713Q1.575 4 2 4h6V3q0-.425.288-.713Q8.575 2 9 2t.713.287Q10 2.575 10 3v1h6q.425 0 .712.287Q17 4.575 17 5t-.288.713Q16.425 6 16 6h-1.9q-.525 1.775-1.425 3.45q-.9 1.675-2.225 3.15l2.4 2.45l-.75 2.05L9 14l-4.3 4.3q-.275.275-.7.275q-.425 0-.7-.275q-.275-.275-.275-.7q0-.425.275-.7l4.35-4.35q-.675-.775-1.25-1.563q-.575-.787-1.025-1.662Q5.1 8.8 5.35 8.4t.875-.4q.25 0 .525.162q.275.163.4.388Z"},null,-1),Uv=[zv];function Wv(e,t){return N(),Q("svg",Bv,Uv)}const Fc=we(Fv,[["render",Wv],["__file","Translate.vue"]]),Kv=Ne({__name:"DropdownTransition",setup(e){const t=o=>{o.style.height=o.scrollHeight+"px"},n=o=>{o.style.height=""};return(o,r)=>(N(),je(Ao,{name:"dropdown",onEnter:t,onAfterEnter:n,onBeforeLeave:t},{default:We(()=>[$e(o.$slots,"default")]),_:3}))}}),Iu=we(Kv,[["__file","DropdownTransition.vue"]]),Yv=["aria-label"],Jv={key:1,class:"title"},Qv=le("span",{class:"arrow down"},null,-1),Gv=["aria-label"],Zv={key:1,class:"title"},Xv={class:"navbar-dropdown"},eg={class:"navbar-dropdown-subtitle"},tg={key:1},ng={class:"navbar-dropdown-subitem-wrapper"},og={__name:"NavbarDropdown",props:{item:{type:Object,required:!0}},setup(e){const t=e,{item:n}=Xa(t),o=Z(()=>n.value.ariaLabel||n.value.text),r=Ie(!1),a=Rt();Xe(()=>a.path,()=>{r.value=!1});const i=s=>{s.detail===0?r.value=!r.value:r.value=!1},c=(s,l)=>l[l.length-1]===s;return(s,l)=>(N(),Q("div",{class:Be(["navbar-dropdown-wrapper",{open:r.value}])},[le("button",{class:"navbar-dropdown-title",type:"button","aria-label":V(o),onClick:i},[V(n).text==="Languages"?(N(),je(Fc,{key:0})):(N(),Q("span",Jv,Re(V(n).text),1)),Qv],8,Yv),le("button",{class:"navbar-dropdown-title-mobile",type:"button","aria-label":V(o),onClick:l[0]||(l[0]=u=>r.value=!r.value)},[V(n).text==="Languages"?(N(),je(Fc,{key:0})):(N(),Q("span",Zv,Re(V(n).text),1)),le("span",{class:Be(["arrow",r.value?"down":"right"])},null,2)],8,Gv),ie(Iu,null,{default:We(()=>[fo(le("ul",Xv,[(N(!0),Q(Se,null,vt(V(n).children,u=>(N(),Q("li",{key:u.text,class:"navbar-dropdown-item"},[u.children?(N(),Q(Se,{key:0},[le("h4",eg,[u.link?(N(),je(St,{key:0,item:u,onFocusout:m=>c(u,V(n).children)&&u.children.length===0&&(r.value=!1)},null,8,["item","onFocusout"])):(N(),Q("span",tg,Re(u.text),1))]),le("ul",ng,[(N(!0),Q(Se,null,vt(u.children,m=>(N(),Q("li",{key:m.link,class:"navbar-dropdown-subitem"},[ie(St,{item:m,onFocusout:d=>c(m,u.children)&&c(u,V(n).children)&&(r.value=!1)},null,8,["item","onFocusout"])]))),128))])],64)):(N(),je(St,{key:1,item:u,onFocusout:m=>c(u,V(n).children)&&(r.value=!1)},null,8,["item","onFocusout"]))]))),128))],512),[[dr,r.value]])]),_:1})],2))}},rg=we(og,[["__file","NavbarDropdown.vue"]]),ag={key:0,class:"navbar-items"},ig=Ne({__name:"NavbarItems",setup(e){const t=()=>{const l=vn(),u=Bn(),m=yi(),d=ot();return Z(()=>{var y,P,A;const f=Object.keys(m.value.locales);if(f.length<2)return[];const v=l.currentRoute.value.path,g=l.currentRoute.value.fullPath,b=l.currentRoute.value.hash;return[{text:(y=d.value.selectLanguageText)!=null?y:"unknown language",ariaLabel:(A=(P=d.value.selectLanguageAriaLabel)!=null?P:d.value.selectLanguageText)!=null?A:"unknown language",children:f.map(D=>{var j,S,T,k,M,$;const q=(S=(j=m.value.locales)==null?void 0:j[D])!=null?S:{},R=(k=(T=d.value.locales)==null?void 0:T[D])!=null?k:{},E=`${q.lang}`,z=(M=R.selectLanguageName)!=null?M:E;let Y;if(E===m.value.lang)Y=g;else{const K=v.replace(u.value,D);l.getRoutes().some(te=>te.path===K)?Y=`${K}${b}`:Y=($=R.home)!=null?$:D}return{text:z,link:Y}})}]})},n=()=>{const l=ot(),u=Z(()=>l.value.repo),m=Z(()=>u.value?Tu(u.value):null),d=Z(()=>u.value&&!To(u.value)?`https://github.com/${u.value}`:u.value),f=Z(()=>d.value?l.value.repoLabel?l.value.repoLabel:m.value===null?"Source":m.value:null);return Z(()=>!d.value||!f.value?[]:[{text:f.value,link:d.value}])},o=l=>De(l)?di(l):l.children?{...l,children:l.children.map(o)}:l,a=(()=>{const l=ot();return Z(()=>(l.value.navbar||[]).map(o))})(),i=t(),c=n(),s=Z(()=>[...a.value,...i.value,...c.value]);return(l,u)=>V(s).length?(N(),Q("nav",ag,[(N(!0),Q(Se,null,vt(V(s),m=>(N(),Q("div",{key:m.text,class:"navbar-item"},[m.children?(N(),je(rg,{key:0,item:m},null,8,["item"])):(N(),je(St,{key:1,item:m},null,8,["item"]))]))),128))])):qe("v-if",!0)}}),Lu=we(ig,[["__file","NavbarItems.vue"]]),cg=["title"],sg={class:"icon",focusable:"false",viewBox:"0 0 32 32"},lg=pf('',9),ug=[lg],mg={class:"icon",focusable:"false",viewBox:"0 0 32 32"},dg=le("path",{d:"M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z",fill:"currentColor"},null,-1),fg=[dg],hg=Ne({__name:"ToggleColorModeButton",setup(e){const t=ot(),n=mi(),o=()=>{n.value=!n.value};return(r,a)=>(N(),Q("button",{class:"toggle-color-mode-button",title:V(t).toggleColorMode,onClick:o},[fo((N(),Q("svg",sg,ug,512)),[[dr,!V(n)]]),fo((N(),Q("svg",mg,fg,512)),[[dr,V(n)]])],8,cg))}}),pg=we(hg,[["__file","ToggleColorModeButton.vue"]]),_g=["title"],vg=le("div",{class:"icon","aria-hidden":"true"},[le("span"),le("span"),le("span")],-1),gg=[vg],bg=Ne({__name:"ToggleSidebarButton",emits:["toggle"],setup(e){const t=ot();return(n,o)=>(N(),Q("div",{class:"toggle-sidebar-button",title:V(t).toggleSidebar,"aria-expanded":"false",role:"button",tabindex:"0",onClick:o[0]||(o[0]=r=>n.$emit("toggle"))},gg,8,_g))}}),yg=we(bg,[["__file","ToggleSidebarButton.vue"]]),Eg=Ne({__name:"Navbar",emits:["toggle-sidebar"],setup(e){const t=ot(),n=Ie(null),o=Ie(null),r=Ie(0),a=Z(()=>r.value?{maxWidth:r.value+"px"}:{});tt(()=>{const s=i(n.value,"paddingLeft")+i(n.value,"paddingRight"),l=()=>{var u;window.innerWidth<=719?r.value=0:r.value=n.value.offsetWidth-s-(((u=o.value)==null?void 0:u.offsetWidth)||0)};l(),window.addEventListener("resize",l,!1),window.addEventListener("orientationchange",l,!1)});function i(c,s){var m,d,f;const l=(f=(d=(m=c==null?void 0:c.ownerDocument)==null?void 0:m.defaultView)==null?void 0:d.getComputedStyle(c,null))==null?void 0:f[s],u=Number.parseInt(l,10);return Number.isNaN(u)?0:u}return(c,s)=>{const l=Lt("NavbarSearch");return N(),Q("header",{ref_key:"navbar",ref:n,class:"navbar"},[ie(yg,{onToggle:s[0]||(s[0]=u=>c.$emit("toggle-sidebar"))}),le("span",{ref_key:"navbarBrand",ref:o},[ie(Nv)],512),le("div",{class:"navbar-items-wrapper",style:Eo(V(a))},[$e(c.$slots,"before"),ie(Lu,{class:"can-hide"}),$e(c.$slots,"after"),V(t).colorModeSwitch?(N(),je(pg,{key:0})):qe("v-if",!0),ie(l)],4)],512)}}}),wg=we(Eg,[["__file","Navbar.vue"]]);const Og={class:"right-menu-wrapper"},Pg={class:"right-menu-margin"},Sg={class:"right-menu-title"},Ag={class:"right-menu-content"},Tg=["href","title"],Ig=["href"],Lg=["href","title"],Dg=["href"],Rg={__name:"RightMenu",setup(e){var s;const t=mt(),n=Hr(),o=Ie(""),r=Ie([]);let a=Ie("");o.value=(s=n.value.rightMenuText)!=null?s:"Table of Contents";function i(){r.value=t.value.headers}function c(){a.value=decodeURIComponent(window.location.hash.slice(1))}return tt(()=>{i(),c()}),Xe(Rt(),()=>{r.value=t.value.headers,c()}),(l,u)=>(N(),Q("div",Og,[le("div",Pg,[le("div",Sg,Re(o.value),1),le("div",Ag,[(N(!0),Q(Se,null,vt(r.value,(m,d)=>(N(),Q(Se,{key:d},[le("div",{class:Be(["right-menu-item","level"+m.level,{active:m.slug===V(a)}])},[m.title.replace(/[^\x00-\xff]/g,"01").length>=36?(N(),Q("a",{key:0,href:"#"+m.slug,title:m.title},Re(m.title),9,Tg)):(N(),Q("a",{key:1,href:"#"+m.slug},Re(m.title),9,Ig))],2),(N(!0),Q(Se,null,vt(m.children,(f,v)=>(N(),Q("div",{class:Be(["right-menu-item","level"+f.level,{active:f.slug===V(a)}]),key:v},[f.title.replace(/[^\x00-\xff]/g,"01").length>=35?(N(),Q("a",{key:0,href:"#"+f.slug,title:f.title},Re(f.title),9,Lg)):(N(),Q("a",{key:1,href:"#"+f.slug},Re(f.title),9,Dg))],2))),128))],64))),128))])])]))}},kg=we(Rg,[["__scopeId","data-v-64666cd5"],["__file","RightMenu.vue"]]),xg={class:"page-meta"},Cg={key:0,class:"meta-item edit-link"},Mg={key:1,class:"meta-item last-updated"},$g={class:"meta-item-label"},jg={class:"meta-item-info"},Hg={key:2,class:"meta-item contributors"},qg={class:"meta-item-label"},Vg={class:"meta-item-info"},Ng=["title"],Fg=Xt(", "),Bg=Ne({__name:"PageMeta",setup(e){const t=()=>{const s=ot(),l=mt(),u=Tt();return Z(()=>{var y,P,A;if(!((P=(y=u.value.editLink)!=null?y:s.value.editLink)!=null?P:!0))return null;const{repo:d,docsRepo:f=d,docsBranch:v="main",docsDir:g="",editLinkText:b}=s.value;if(!f)return null;const p=wv({docsRepo:f,docsBranch:v,docsDir:g,filePathRelative:l.value.filePathRelative,editLinkPattern:(A=u.value.editLinkPattern)!=null?A:s.value.editLinkPattern});return p?{text:b!=null?b:"Edit this page",link:p}:null})},n=()=>{const s=ot(),l=mt(),u=Tt();return Z(()=>{var f,v,g,b;return!((v=(f=u.value.lastUpdated)!=null?f:s.value.lastUpdated)!=null?v:!0)||!((g=l.value.git)!=null&&g.updatedTime)?null:new Date((b=l.value.git)==null?void 0:b.updatedTime).toLocaleString()})},o=()=>{const s=ot(),l=mt(),u=Tt();return Z(()=>{var d,f,v,g;return((f=(d=u.value.contributors)!=null?d:s.value.contributors)!=null?f:!0)&&(g=(v=l.value.git)==null?void 0:v.contributors)!=null?g:null})},r=ot(),a=t(),i=n(),c=o();return(s,l)=>{const u=Lt("ClientOnly");return N(),Q("footer",xg,[V(a)?(N(),Q("div",Cg,[ie(St,{class:"meta-item-label",item:V(a)},null,8,["item"])])):qe("v-if",!0),V(i)?(N(),Q("div",Mg,[le("span",$g,Re(V(r).lastUpdatedText)+": ",1),ie(u,null,{default:We(()=>[le("span",jg,Re(V(i)),1)]),_:1})])):qe("v-if",!0),V(c)&&V(c).length?(N(),Q("div",Hg,[le("span",qg,Re(V(r).contributorsText)+": ",1),le("span",Vg,[(N(!0),Q(Se,null,vt(V(c),(m,d)=>(N(),Q(Se,{key:d},[le("span",{class:"contributor",title:`email: ${m.email}`},Re(m.name),9,Ng),d!==V(c).length-1?(N(),Q(Se,{key:0},[Fg],64)):qe("v-if",!0)],64))),128))])])):qe("v-if",!0)])}}}),zg=we(Bg,[["__file","PageMeta.vue"]]),Ug={key:0,class:"page-nav"},Wg={class:"inner"},Kg={key:0,class:"prev"},Yg={key:1,class:"next"},Jg=Ne({__name:"PageNav",setup(e){const t=s=>s===!1?null:De(s)?di(s):ii(s)?s:!1,n=(s,l,u)=>{const m=s.findIndex(d=>d.link===l);if(m!==-1){const d=s[m+u];return d!=null&&d.link?d:null}for(const d of s)if(d.children){const f=n(d.children,l,u);if(f)return f}return null},o=Tt(),r=fi(),a=Rt(),i=Z(()=>{const s=t(o.value.prev);return s!==!1?s:n(r.value,a.path,-1)}),c=Z(()=>{const s=t(o.value.next);return s!==!1?s:n(r.value,a.path,1)});return(s,l)=>V(i)||V(c)?(N(),Q("nav",Ug,[le("p",Wg,[V(i)?(N(),Q("span",Kg,[ie(St,{item:V(i)},null,8,["item"])])):qe("v-if",!0),V(c)?(N(),Q("span",Yg,[ie(St,{item:V(c)},null,8,["item"])])):qe("v-if",!0)])])):qe("v-if",!0)}}),Qg=we(Jg,[["__file","PageNav.vue"]]);const Gg={class:"page"},Zg={__name:"Page",setup(e){function t(){return mt().value.headers.length>0}return(n,o)=>{const r=Lt("Content");return N(),Q("main",Gg,[$e(n.$slots,"top",{},void 0,!0),le("div",{class:Be([t()&&"right-menu-padding","theme-default-content"])},[$e(n.$slots,"content-top",{},void 0,!0),t()?(N(),je(kg,{key:0})):qe("v-if",!0),ie(r),$e(n.$slots,"content-bottom",{},void 0,!0)],2),ie(zg,{class:Be(t()&&"right-menu-padding")},null,8,["class"]),ie(Qg,{class:Be(t()&&"right-menu-padding")},null,8,["class"]),$e(n.$slots,"bottom",{},void 0,!0)])}}},Xg=we(Zg,[["__scopeId","data-v-fdd717e0"],["__file","Page.vue"]]);const e0=["aria-expanded","aria-label"],t0={key:1,class:"sidebar-tree-toggle-placeholder"},n0=["onKeydown"],o0={class:"sidebar-item-children"},r0={__name:"SidebarItem",props:{item:{type:Object,required:!0},depth:{type:Number,required:!1,default:0},forceOpen:{type:Boolean,required:!1,default:!1}},setup(e){const t=e,{item:n,depth:o,forceOpen:r}=Xa(t),a=Rt(),i=vn();function c(q){return decodeURI(q).replace(/#.*$/,"").replace(/(index)?\.(md|html)$/,"")}function s(q,R){return R.hash===q?!0:c(R.path)===c(q)}function l(q,R){return q.link&&s(q.link,R)?!0:q.children?q.children.some(E=>l(E,R)):!1}const u=Z(()=>{var q;return Boolean((q=n.value.children)==null?void 0:q.length)}),m=Z(()=>Boolean(n.value.link)&&o.value>0),d=Z(()=>l(n.value,a)),f=Z(()=>Boolean(n.value.collapsible)&&u.value),v=Z(()=>f.value?r.value||d.value:!0),g=Ie(v.value),b=Z(()=>({"sidebar-item":!0,"sidebar-heading":o.value===0,active:d.value,collapsible:f.value})),p=Z(()=>({"sidebar-tree-row":!0,"sidebar-tree-heading-row":o.value===0,active:d.value,collapsible:f.value})),y=Z(()=>{const q=a.path.startsWith("/en/");return g.value?`${q?"Collapse":"\u6536\u8D77"} ${n.value.text}`:`${q?"Expand":"\u5C55\u5F00"} ${n.value.text}`});function P(){f.value&&(g.value=!g.value)}function A(q){!f.value||(q.preventDefault(),P())}const D=i.afterEach(()=>{Po(()=>{g.value=v.value})});return Xe(v,q=>{g.value=q}),kr(()=>{D()}),(q,R)=>{const E=Lt("SidebarItem",!0);return N(),Q("li",null,[V(m)?(N(),Q("div",{key:0,class:Be(V(p))},[V(f)?(N(),Q("button",{key:0,type:"button",class:"sidebar-tree-toggle","aria-expanded":g.value,"aria-label":V(y),onClick:P},[le("span",{class:Be(["sidebar-tree-chevron",{open:g.value}]),"aria-hidden":"true"},null,2)],8,e0)):(N(),Q("span",t0)),ie(St,{class:Be(V(b)),item:V(n)},null,8,["class","item"])],2)):V(n).link?(N(),je(St,{key:1,class:Be(V(b)),item:V(n)},null,8,["class","item"])):(N(),Q("p",{key:2,tabindex:"0",class:Be(V(b)),onClick:A,onKeydown:Zf(A,["enter"])},[Xt(Re(V(n).text)+" ",1),V(f)?(N(),Q("span",{key:0,class:Be(["sidebar-tree-chevron",{open:g.value}]),"aria-hidden":"true"},null,2)):qe("v-if",!0)],42,n0)),V(u)?(N(),je(Iu,{key:3},{default:We(()=>[fo(le("ul",o0,[(N(!0),Q(Se,null,vt(V(n).children,z=>(N(),je(E,{key:`${V(o)}${z.text}${z.link}`,item:z,depth:V(o)+1,"force-open":V(r)},null,8,["item","depth","force-open"]))),128))],512),[[dr,g.value]])]),_:1})):qe("v-if",!0)])}}},a0=we(r0,[["__scopeId","data-v-558ea87d"],["__file","SidebarItem.vue"]]);const i0=e=>(Td("data-v-ff139ca7"),e=e(),Id(),e),c0={key:0,class:"sidebar-search-wrapper"},s0={class:"sidebar-search",role:"search"},l0=i0(()=>le("span",{class:"sidebar-search-icon","aria-hidden":"true"},null,-1)),u0=["placeholder","aria-label"],m0=["aria-label"],d0={key:1,class:"sidebar-items"},f0={key:2,class:"sidebar-search-empty"},h0={__name:"SidebarItems",setup(e){const t=Rt(),n=fi(),o=Ie(""),r=Z(()=>t.path.startsWith("/en/")),a=Z(()=>u(o.value.trim())),i=Z(()=>a.value.length>0),c=Z(()=>r.value?"Search":"\u641C\u7D22"),s=Z(()=>r.value?"Clear search":"\u6E05\u9664\u641C\u7D22"),l=Z(()=>r.value?"No matches":"\u6CA1\u6709\u5339\u914D\u7ED3\u679C");function u(g){return String(g!=null?g:"").toLocaleLowerCase()}function m(g,b){return[g.text,g.link].some(p=>u(p).includes(b))}function d(g,b){var y;const p=((y=g.children)!=null?y:[]).map(P=>d(P,b)).filter(Boolean);return!m(g,b)&&p.length===0?null:{...g,children:p}}const f=Z(()=>i.value?n.value.map(g=>d(g,a.value)).filter(Boolean):n.value);function v(){o.value=""}return tt(()=>{Xe(()=>t.hash,g=>{const b=document.querySelector(".sidebar");if(!b)return;const p=document.querySelector(`.sidebar a.sidebar-item[href="${t.path}${g}"]`);if(!p)return;const{top:y,height:P}=b.getBoundingClientRect(),{top:A,height:D}=p.getBoundingClientRect();Ay+P&&p.scrollIntoView(!1)})}),(g,b)=>(N(),Q(Se,null,[V(n).length?(N(),Q("div",c0,[le("div",s0,[l0,fo(le("input",{"onUpdate:modelValue":b[0]||(b[0]=p=>o.value=p),class:"sidebar-search-input",type:"search",placeholder:V(c),"aria-label":V(c)},null,8,u0),[[Qf,o.value]]),o.value?(N(),Q("button",{key:0,type:"button",class:"sidebar-search-clear","aria-label":V(s),onClick:v}," \xD7 ",8,m0)):qe("v-if",!0)])])):qe("v-if",!0),V(f).length?(N(),Q("ul",d0,[(N(!0),Q(Se,null,vt(V(f),p=>(N(),je(a0,{key:`${p.text}${p.link}`,item:p,"force-open":V(i)},null,8,["item","force-open"]))),128))])):(N(),Q("p",f0,Re(V(l)),1))],64))}},p0=we(h0,[["__scopeId","data-v-ff139ca7"],["__file","SidebarItems.vue"]]),_0={class:"sidebar"},v0=Ne({__name:"Sidebar",setup(e){return(t,n)=>(N(),Q("aside",_0,[ie(Lu),$e(t.$slots,"top"),ie(p0),$e(t.$slots,"bottom")]))}}),g0=we(v0,[["__file","Sidebar.vue"]]),b0=Ne({__name:"Layout",setup(e){const t=mt(),n=Tt(),o=ot(),r=Z(()=>n.value.navbar!==!1&&o.value.navbar!==!1),a=fi(),i=Ie(!1),c=b=>{i.value=typeof b=="boolean"?b:!i.value},s={x:0,y:0},l=b=>{s.x=b.changedTouches[0].clientX,s.y=b.changedTouches[0].clientY},u=b=>{const p=b.changedTouches[0].clientX-s.x,y=b.changedTouches[0].clientY-s.y;Math.abs(p)>Math.abs(y)&&Math.abs(p)>40&&(p>0&&s.x<=80?c(!0):c(!1))},m=Z(()=>[{"no-navbar":!r.value,"no-sidebar":!a.value.length,"sidebar-open":i.value},n.value.pageClass]);let d;tt(()=>{d=vn().afterEach(()=>{c(!1)})}),xr(()=>{d()});const f=Pu(),v=f.resolve,g=f.pending;return(b,p)=>(N(),Q("div",{class:Be(["theme-container",V(m)]),onTouchstart:l,onTouchend:u},[$e(b.$slots,"navbar",{},()=>[V(r)?(N(),je(wg,{key:0,onToggleSidebar:c},{before:We(()=>[$e(b.$slots,"navbar-before")]),after:We(()=>[$e(b.$slots,"navbar-after")]),_:3})):qe("v-if",!0)]),le("div",{class:"sidebar-mask",onClick:p[0]||(p[0]=y=>c(!1))}),$e(b.$slots,"sidebar",{},()=>[ie(g0,null,{top:We(()=>[$e(b.$slots,"sidebar-top")]),bottom:We(()=>[$e(b.$slots,"sidebar-bottom")]),_:3})]),$e(b.$slots,"page",{},()=>[V(n).home?(N(),je(qv,{key:0})):(N(),je(Ao,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:V(v),onBeforeLeave:V(g)},{default:We(()=>[(N(),je(Xg,{key:V(t).path},{top:We(()=>[$e(b.$slots,"page-top")]),"content-top":We(()=>[$e(b.$slots,"page-content-top")]),"content-bottom":We(()=>[$e(b.$slots,"page-content-bottom")]),bottom:We(()=>[$e(b.$slots,"page-bottom")]),_:3}))]),_:3},8,["onBeforeEnter","onBeforeLeave"]))])],34))}}),y0=we(b0,[["__file","Layout.vue"]]),E0={class:"theme-container"},w0={class:"page"},O0={class:"theme-default-content"},P0=le("h1",null,"404",-1),S0=Ne({__name:"NotFound",setup(e){var c,s,l;const t=Bn(),n=ot(),o=(c=n.value.notFound)!=null?c:["Not Found"],r=()=>o[Math.floor(Math.random()*o.length)],a=(s=n.value.home)!=null?s:t.value,i=(l=n.value.backToHome)!=null?l:"Back to home";return(u,m)=>{const d=Lt("RouterLink");return N(),Q("div",E0,[le("main",w0,[le("div",O0,[P0,le("blockquote",null,Re(r()),1),ie(d,{to:V(a)},{default:We(()=>[Xt(Re(V(i)),1)]),_:1},8,["to"])])])])}}}),A0=we(S0,[["__file","NotFound.vue"]]);const T0=Dt({enhance({app:e,router:t}){e.component("Badge",Hp),e.component("CodeGroup",qp),e.component("CodeGroupItem",Bp),e.component("AutoLinkExternalIcon",()=>{const o=e.component("ExternalLinkIcon");return o?Te(o):null}),e.component("NavbarSearch",()=>{const o=e.component("Docsearch")||e.component("SearchBox");return o?Te(o):null});const n=t.options.scrollBehavior;t.options.scrollBehavior=async(...o)=>(await Pu().wait(),n(...o))},setup(){A_(),L_()},layouts:{Layout:y0,NotFound:A0}});const I0={},L0=e=>{const t=Bn();return Z(()=>e[t.value])};class D0{constructor(){this.messageElements={};const t="message-container",n=document.getElementById(t);n?this.containerElement=n:(this.containerElement=document.createElement("div"),this.containerElement.id=t,document.body.appendChild(this.containerElement))}pop(t,n=2e3){const o=document.createElement("div"),r=Date.now();return o.className="message move-in",o.innerHTML=t,this.containerElement.appendChild(o),this.messageElements[r]=o,n>0&&setTimeout(()=>{this.close(r)},n),r}close(t){if(t){const n=this.messageElements[t];n.className=n.className.replace("move-in",""),n.className+="move-out",n.addEventListener("animationend",()=>{n.remove(),delete this.messageElements[t]})}else Object.keys(this.messageElements).forEach(n=>this.close(Number(n)))}destory(){document.body.removeChild(this.containerElement)}}var ea,Mt=function(){var e=1e3,t=6e4,n=36e5,o="millisecond",r="second",a="minute",i="hour",c="day",s="week",l="month",u="quarter",m="year",d="date",f="Invalid Date",v=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,g=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,b={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},p=function(j,S,T){var k=String(j);return!k||k.length>=S?j:""+Array(S+1-k.length).join(T)+j},y={s:p,z:function(j){var S=-j.utcOffset(),T=Math.abs(S),k=Math.floor(T/60),M=T%60;return(S<=0?"+":"-")+p(k,2,"0")+":"+p(M,2,"0")},m:function j(S,T){if(S.date()1)return j(K[0])}else{var te=S.name;A[te]=S,M=te}return!k&&M&&(P=M),M||!k&&P},R=function(j,S){if(D(j))return j.clone();var T=typeof S=="object"?S:{};return T.date=j,T.args=arguments,new z(T)},E=y;E.l=q,E.i=D,E.w=function(j,S){return R(j,{locale:S.$L,utc:S.$u,x:S.$x,$offset:S.$offset})};var z=function(){function j(T){this.$L=q(T.locale,null,!0),this.parse(T)}var S=j.prototype;return S.parse=function(T){this.$d=function(k){var M=k.date,$=k.utc;if(M===null)return new Date(NaN);if(E.u(M))return new Date;if(M instanceof Date)return new Date(M);if(typeof M=="string"&&!/Z$/i.test(M)){var K=M.match(v);if(K){var te=K[2]-1||0,me=(K[7]||"0").substring(0,3);return $?new Date(Date.UTC(K[1],te,K[3]||1,K[4]||0,K[5]||0,K[6]||0,me)):new Date(K[1],te,K[3]||1,K[4]||0,K[5]||0,K[6]||0,me)}}return new Date(M)}(T),this.$x=T.x||{},this.init()},S.init=function(){var T=this.$d;this.$y=T.getFullYear(),this.$M=T.getMonth(),this.$D=T.getDate(),this.$W=T.getDay(),this.$H=T.getHours(),this.$m=T.getMinutes(),this.$s=T.getSeconds(),this.$ms=T.getMilliseconds()},S.$utils=function(){return E},S.isValid=function(){return this.$d.toString()!==f},S.isSame=function(T,k){var M=R(T);return this.startOf(k)<=M&&M<=this.endOf(k)},S.isAfter=function(T,k){return R(T)=0?1:v.date()),b=f.year||v.year(),p=f.month>=0?f.month:f.year||f.day?0:v.month(),y=f.hour||0,P=f.minute||0,A=f.second||0,D=f.millisecond||0;return d?new Date(Date.UTC(b,p,g,y,P,A,D)):new Date(b,p,g,y,P,A,D)}return m},a=o.parse;o.parse=function(l){l.date=r.bind(this)(l),a.bind(this)(l)};var i=o.set,c=o.add,s=function(l,u,m,d){if(d===void 0&&(d=1),u instanceof Object){var f=Object.keys(u),v=this;return f.forEach(function(g){v=l.bind(v)(u[g]*d,g)}),v}return l.bind(this)(u*d,m)};o.set=function(l,u){return u=u===void 0?l:u,s.bind(this)(function(m,d){return i.bind(this)(d,m)},u,l)},o.add=function(l,u){return s.bind(this)(c,l,u)},o.subtract=function(l,u){return s.bind(this)(c,l,u,-1)}},Ru=function(){var e={year:0,month:1,day:2,hour:3,minute:4,second:5},t={};return function(n,o,r){var a,i=function(u,m,d){d===void 0&&(d={});var f=new Date(u),v=function(g,b){b===void 0&&(b={});var p=b.timeZoneName||"short",y=g+"|"+p,P=t[y];return P||(P=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:g,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:p}),t[y]=P),P}(m,d);return v.formatToParts(f)},c=function(u,m){for(var d=i(u,m),f=[],v=0;v=0&&(f[y]=parseInt(p,10))}var P=f[3],A=P===24?0:P,D=f[0]+"-"+f[1]+"-"+f[2]+" "+A+":"+f[4]+":"+f[5]+":000",q=+u;return(r.utc(D).valueOf()-(q-=q%1e3))/6e4},s=o.prototype;s.tz=function(u,m){u===void 0&&(u=a);var d=this.utcOffset(),f=this.toDate(),v=f.toLocaleString("en-US",{timeZone:u}),g=Math.round((f-new Date(v))/1e3/60),b=r(v).$set("millisecond",this.$ms).utcOffset(15*-Math.round(f.getTimezoneOffset()/15)-g,!0);if(m){var p=b.utcOffset();b=b.add(d-p,"minute")}return b.$x.$timezone=u,b},s.offsetName=function(u){var m=this.$x.$timezone||r.tz.guess(),d=i(this.valueOf(),m,{timeZoneName:u}).find(function(f){return f.type.toLowerCase()==="timezonename"});return d&&d.value};var l=s.startOf;s.startOf=function(u,m){if(!this.$x||!this.$x.$timezone)return l.call(this,u,m);var d=r(this.format("YYYY-MM-DD HH:mm:ss:SSS"));return l.call(d,u,m).tz(this.$x.$timezone,!0)},r.tz=function(u,m,d){var f=d&&m,v=d||m||a,g=c(+r(),v);if(typeof u!="string")return r(u).tz(v);var b=function(A,D,q){var R=A-60*D*1e3,E=c(R,q);if(D===E)return[R,D];var z=c(R-=60*(E-D)*1e3,q);return E===z?[R,E]:[A-60*Math.min(E,z)*1e3,Math.max(E,z)]}(r.utc(u,f).valueOf(),g,v),p=b[0],y=b[1],P=r(p).utcOffset(y);return P.$x.$timezone=v,P},r.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},r.tz.setDefault=function(u){a=u}}}(),ku=function(){var e="minute",t=/[+-]\d\d(?::?\d\d)?/g,n=/([+-]|\d\d)/g;return function(o,r,a){var i=r.prototype;a.utc=function(f){return new r({date:f,utc:!0,args:arguments})},i.utc=function(f){var v=a(this.toDate(),{locale:this.$L,utc:!0});return f?v.add(this.utcOffset(),e):v},i.local=function(){return a(this.toDate(),{locale:this.$L,utc:!1})};var c=i.parse;i.parse=function(f){f.utc&&(this.$u=!0),this.$utils().u(f.$offset)||(this.$offset=f.$offset),c.call(this,f)};var s=i.init;i.init=function(){if(this.$u){var f=this.$d;this.$y=f.getUTCFullYear(),this.$M=f.getUTCMonth(),this.$D=f.getUTCDate(),this.$W=f.getUTCDay(),this.$H=f.getUTCHours(),this.$m=f.getUTCMinutes(),this.$s=f.getUTCSeconds(),this.$ms=f.getUTCMilliseconds()}else s.call(this)};var l=i.utcOffset;i.utcOffset=function(f,v){var g=this.$utils().u;if(g(f))return this.$u?0:g(this.$offset)?l.call(this):this.$offset;if(typeof f=="string"&&(f=function(P){P===void 0&&(P="");var A=P.match(t);if(!A)return null;var D=(""+A[0]).match(n)||["-",0,0],q=D[0],R=60*+D[1]+ +D[2];return R===0?0:q==="+"?R:-R}(f),f===null))return this;var b=Math.abs(f)<=16?60*f:f,p=this;if(v)return p.$offset=b,p.$u=f===0,p;if(f!==0){var y=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(p=this.local().add(b+y,e)).$offset=b,p.$x.$localOffset=y}else p=this.utc();return p};var u=i.format;i.format=function(f){var v=f||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return u.call(this,v)},i.valueOf=function(){var f=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*f},i.isUTC=function(){return!!this.$u},i.toISOString=function(){return this.toDate().toISOString()},i.toString=function(){return this.toDate().toUTCString()};var m=i.toDate;i.toDate=function(f){return f==="s"&&this.$offset?a(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():m.call(this)};var d=i.diff;i.diff=function(f,v,g){if(f&&this.$u===f.$u)return d.call(this,f,v,g);var b=this.local(),p=a(f).local();return d.call(b,p,v,g)}}}();Mt.extend(R0),Mt.extend(Du),Mt.extend(ku),Mt.extend(Ru);const k0={name:"zh-cn",weekdays:"\u661F\u671F\u65E5_\u661F\u671F\u4E00_\u661F\u671F\u4E8C_\u661F\u671F\u4E09_\u661F\u671F\u56DB_\u661F\u671F\u4E94_\u661F\u671F\u516D".split("_"),weekdaysShort:"\u5468\u65E5_\u5468\u4E00_\u5468\u4E8C_\u5468\u4E09_\u5468\u56DB_\u5468\u4E94_\u5468\u516D".split("_"),weekdaysMin:"\u65E5_\u4E00_\u4E8C_\u4E09_\u56DB_\u4E94_\u516D".split("_"),months:"\u4E00\u6708_\u4E8C\u6708_\u4E09\u6708_\u56DB\u6708_\u4E94\u6708_\u516D\u6708_\u4E03\u6708_\u516B\u6708_\u4E5D\u6708_\u5341\u6708_\u5341\u4E00\u6708_\u5341\u4E8C\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),ordinal:(e,t)=>t==="W"?`${e}\u5468`:`${e}\u65E5`,weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5E74M\u6708D\u65E5",LLL:"YYYY\u5E74M\u6708D\u65E5Ah\u70B9mm\u5206",LLLL:"YYYY\u5E74M\u6708D\u65E5ddddAh\u70B9mm\u5206",l:"YYYY/M/D",ll:"YYYY\u5E74M\u6708D\u65E5",lll:"YYYY\u5E74M\u6708D\u65E5 HH:mm",llll:"YYYY\u5E74M\u6708D\u65E5dddd HH:mm"},relativeTime:{future:"%s\u5185",past:"%s\u524D",s:"\u51E0\u79D2",m:"1 \u5206\u949F",mm:"%d \u5206\u949F",h:"1 \u5C0F\u65F6",hh:"%d \u5C0F\u65F6",d:"1 \u5929",dd:"%d \u5929",M:"1 \u4E2A\u6708",MM:"%d \u4E2A\u6708",y:"1 \u5E74",yy:"%d \u5E74"},meridiem:(e,t)=>{const n=100*e+t;return n<600?"\u51CC\u6668":n<900?"\u65E9\u4E0A":n<1100?"\u4E0A\u5348":n<1300?"\u4E2D\u5348":n<1800?"\u4E0B\u5348":"\u665A\u4E0A"}},x0={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")};Mt.locale("zh",k0),Mt.locale("en",x0),Mt.extend(Du),Mt.extend(ku),Mt.extend(Ru);const qo={showInMobile:!1,pure:!0},Bc=()=>!!navigator&&/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/iu.test(navigator.userAgent),C0=()=>{const e=Rt(),t=L0({"/en/":{copy:"Copied successfully",hint:"Copy code"},"/":{copy:"\u590D\u5236\u6210\u529F",hint:"\u590D\u5236\u4EE3\u7801"}}),n=r=>{if(!r.hasAttribute("copy-code-registered")){const a=document.createElement("button");a.className="copy-code-pure-button",a.innerHTML='',a.addEventListener("click",()=>{(i=>{const c=document.getSelection(),s=!!(c&&c.rangeCount>0)&&c.getRangeAt(0),l=document.createElement("textarea");l.value=i,l.setAttribute("readonly",""),l.style.position="absolute",l.style.top="-9999px",document.body.appendChild(l),l.select(),document.execCommand("copy"),document.body.removeChild(l),s&&c&&(c.removeAllRanges(),c.addRange(s))})(r.innerText)}),a.setAttribute("aria-label",t.value.hint),a.setAttribute("data-balloon-pos","left"),r.parentElement&&r.parentElement.insertBefore(a,r),r.setAttribute("copy-code-registered","")}},o=()=>{const r=qo.selector||'.theme-default-content div[class*="language-"] pre';setTimeout(()=>{typeof r=="string"?document.querySelectorAll(r).forEach(n):Array.isArray(r)&&r.forEach(a=>{document.querySelectorAll(a).forEach(n)})},qo.delay||500)};tt(()=>{new D0,Bc()&&!qo.showInMobile||o()}),Xe(()=>e.path,()=>{Bc()&&!qo.showInMobile||o()})};var M0=Dt({setup:()=>{C0()}});const $0=({headerLinkSelector:e,headerAnchorSelector:t,delay:n,offset:o=5})=>{const r=vn(),i=ci(()=>{var g,b,p,y;const c=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(c-0)d.some(A=>A.hash===P.hash));for(let P=0;P=((b=(g=A.parentElement)==null?void 0:g.offsetTop)!=null?b:0)-o,R=!D||c<((y=(p=D.parentElement)==null?void 0:p.offsetTop)!=null?y:0)-o;if(!(q&&R))continue;const z=decodeURIComponent(r.currentRoute.value.hash),Y=decodeURIComponent(A.hash);if(z===Y)return;if(m){for(let j=P+1;j{window.addEventListener("scroll",i)}),kr(()=>{window.removeEventListener("scroll",i)})},zc=async(e,t)=>{const{scrollBehavior:n}=e.options;e.options.scrollBehavior=void 0,await e.replace({query:e.currentRoute.value.query,hash:t,force:!0}).finally(()=>e.options.scrollBehavior=n)},j0="div.right-menu-item > a",H0=".header-anchor",q0=200,V0=5,N0=Dt({setup(){$0({headerLinkSelector:j0,headerAnchorSelector:H0,delay:q0,offset:V0})}});/*! @docsearch/js 3.2.1 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */function Uc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),n.push.apply(n,o)}return n}function Pe(e){for(var t=1;t=0||(u[s]=i[s]);return u}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function _r(e,t){return function(n){if(Array.isArray(n))return n}(e)||function(n,o){var r=n==null?null:typeof Symbol<"u"&&n[Symbol.iterator]||n["@@iterator"];if(r!=null){var a,i,c=[],s=!0,l=!1;try{for(r=r.call(n);!(s=(a=r.next()).done)&&(c.push(a.value),!o||c.length!==o);s=!0);}catch(u){l=!0,i=u}finally{try{s||r.return==null||r.return()}finally{if(l)throw i}}return c}}(e,t)||xu(e,t)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function vr(e){return function(t){if(Array.isArray(t))return Ia(t)}(e)||function(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}(e)||xu(e)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function xu(e,t){if(e){if(typeof e=="string")return Ia(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set"?Array.from(e):n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ia(e,t):void 0}}function Ia(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n3)for(n=[n],a=3;a0?co(f.type,f.props,f.key,null,f.__v):f)!=null){if(f.__=n,f.__b=n.__b+1,(d=p[u])===null||d&&f.key==d.key&&f.type===d.type)p[u]=void 0;else for(m=0;m3)for(n=[n],a=3;a=n.__.length&&n.__.push({}),n.__[e]}function Uu(e){return xn=1,Wu(Yu,e)}function Wu(e,t,n){var o=Lo(Fn++,2);return o.t=e,o.__c||(o.__=[n?n(t):Yu(void 0,t),function(r){var a=o.t(o.__[0],r);o.__[0]!==a&&(o.__=[a,o.__[1]],o.__c.setState({}))}],o.__c=et),o.__}function Ku(e,t){var n=Lo(Fn++,3);!ae.__s&&vi(n.__H,t)&&(n.__=e,n.__H=t,et.__H.__h.push(n))}function ns(e,t){var n=Lo(Fn++,4);!ae.__s&&vi(n.__H,t)&&(n.__=e,n.__H=t,et.__h.push(n))}function ta(e,t){var n=Lo(Fn++,7);return vi(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function Y0(){Da.forEach(function(e){if(e.__P)try{e.__H.__h.forEach(Go),e.__H.__h.forEach(Ra),e.__H.__h=[]}catch(t){e.__H.__h=[],ae.__e(t,e.__v)}}),Da=[]}ae.__b=function(e){et=null,Gc&&Gc(e)},ae.__r=function(e){Zc&&Zc(e),Fn=0;var t=(et=e.__c).__H;t&&(t.__h.forEach(Go),t.__h.forEach(Ra),t.__h=[])},ae.diffed=function(e){Xc&&Xc(e);var t=e.__c;t&&t.__H&&t.__H.__h.length&&(Da.push(t)!==1&&Qc===ae.requestAnimationFrame||((Qc=ae.requestAnimationFrame)||function(n){var o,r=function(){clearTimeout(a),os&&cancelAnimationFrame(o),setTimeout(n)},a=setTimeout(r,100);os&&(o=requestAnimationFrame(r))})(Y0)),et=void 0},ae.__c=function(e,t){t.some(function(n){try{n.__h.forEach(Go),n.__h=n.__h.filter(function(o){return!o.__||Ra(o)})}catch(o){t.some(function(r){r.__h&&(r.__h=[])}),t=[],ae.__e(o,n.__v)}}),es&&es(e,t)},ae.unmount=function(e){ts&&ts(e);var t=e.__c;if(t&&t.__H)try{t.__H.__.forEach(Go)}catch(n){ae.__e(n,t.__v)}};var os=typeof requestAnimationFrame=="function";function Go(e){var t=et;typeof e.__c=="function"&&e.__c(),et=t}function Ra(e){var t=et;e.__c=e.__(),et=t}function vi(e,t){return!e||e.length!==t.length||t.some(function(n,o){return n!==e[o]})}function Yu(e,t){return typeof t=="function"?t(e):t}function Ju(e,t){for(var n in t)e[n]=t[n];return e}function ka(e,t){for(var n in e)if(n!=="__source"&&!(n in t))return!0;for(var o in t)if(o!=="__source"&&e[o]!==t[o])return!0;return!1}function xa(e){this.props=e}(xa.prototype=new At).isPureReactComponent=!0,xa.prototype.shouldComponentUpdate=function(e,t){return ka(this.props,e)||ka(this.state,t)};var rs=ae.__b;ae.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),rs&&rs(e)};var J0=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.forward_ref")||3911,as=function(e,t){return e==null?null:Ht(Ht(e).map(t))},Q0={map:as,forEach:as,count:function(e){return e?Ht(e).length:0},only:function(e){var t=Ht(e);if(t.length!==1)throw"Children.only";return t[0]},toArray:Ht},G0=ae.__e;function Zo(){this.__u=0,this.t=null,this.__b=null}function Qu(e){var t=e.__.__c;return t&&t.__e&&t.__e(e)}function Xn(){this.u=null,this.o=null}ae.__e=function(e,t,n){if(e.then){for(var o,r=t;r=r.__;)if((o=r.__c)&&o.__c)return t.__e==null&&(t.__e=n.__e,t.__k=n.__k),o.__c(e,t)}G0(e,t,n)},(Zo.prototype=new At).__c=function(e,t){var n=t.__c,o=this;o.t==null&&(o.t=[]),o.t.push(n);var r=Qu(o.__v),a=!1,i=function(){a||(a=!0,n.componentWillUnmount=n.__c,r?r(c):c())};n.__c=n.componentWillUnmount,n.componentWillUnmount=function(){i(),n.__c&&n.__c()};var c=function(){if(!--o.__u){if(o.state.__e){var l=o.state.__e;o.__v.__k[0]=function m(d,f,v){return d&&(d.__v=null,d.__k=d.__k&&d.__k.map(function(g){return m(g,f,v)}),d.__c&&d.__c.__P===f&&(d.__e&&v.insertBefore(d.__e,d.__d),d.__c.__e=!0,d.__c.__P=v)),d}(l,l.__c.__P,l.__c.__O)}var u;for(o.setState({__e:o.__b=null});u=o.t.pop();)u.forceUpdate()}},s=t.__h===!0;o.__u++||s||o.setState({__e:o.__b=o.__v.__k[0]}),e.then(i,i)},Zo.prototype.componentWillUnmount=function(){this.t=[]},Zo.prototype.render=function(e,t){if(this.__b){if(this.__v.__k){var n=document.createElement("div"),o=this.__v.__k[0].__c;this.__v.__k[0]=function a(i,c,s){return i&&(i.__c&&i.__c.__H&&(i.__c.__H.__.forEach(function(l){typeof l.__c=="function"&&l.__c()}),i.__c.__H=null),(i=Ju({},i)).__c!=null&&(i.__c.__P===s&&(i.__c.__P=c),i.__c=null),i.__k=i.__k&&i.__k.map(function(l){return a(l,c,s)})),i}(this.__b,n,o.__O=o.__P)}this.__b=null}var r=t.__e&&Pt(Zt,null,e.fallback);return r&&(r.__h=null),[Pt(Zt,null,t.__e?null:e.children),r]};var is=function(e,t,n){if(++n[1]===n[0]&&e.o.delete(t),e.props.revealOrder&&(e.props.revealOrder[0]!=="t"||!e.o.size))for(n=e.u;n;){for(;n.length>3;)n.pop()();if(n[1]>>1,1),t.i.removeChild(o)}}),bo(Pt(Z0,{context:t.context},e.__v),t.l)):t.l&&t.componentWillUnmount()}function Gu(e,t){return Pt(X0,{__v:e,i:t})}(Xn.prototype=new At).__e=function(e){var t=this,n=Qu(t.__v),o=t.o.get(e);return o[0]++,function(r){var a=function(){t.props.revealOrder?(o.push(r),is(t,e,o)):r()};n?n(a):a()}},Xn.prototype.render=function(e){this.u=null,this.o=new Map;var t=Ht(e.children);e.revealOrder&&e.revealOrder[0]==="b"&&t.reverse();for(var n=t.length;n--;)this.o.set(t[n],this.u=[1,0,this.u]);return e.children},Xn.prototype.componentDidUpdate=Xn.prototype.componentDidMount=function(){var e=this;this.o.forEach(function(t,n){is(e,n,t)})};var Zu=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.element")||60103,e1=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,t1=function(e){return(typeof Symbol<"u"&&vo(Symbol())=="symbol"?/fil|che|rad/i:/fil|che|ra/i).test(e)};function Xu(e,t,n){return t.__k==null&&(t.textContent=""),bo(e,t),typeof n=="function"&&n(),e?e.__c:null}At.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(e){Object.defineProperty(At.prototype,e,{configurable:!0,get:function(){return this["UNSAFE_"+e]},set:function(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:t})}})});var cs=ae.event;function n1(){}function o1(){return this.cancelBubble}function r1(){return this.defaultPrevented}ae.event=function(e){return cs&&(e=cs(e)),e.persist=n1,e.isPropagationStopped=o1,e.isDefaultPrevented=r1,e.nativeEvent=e};var em,ss={configurable:!0,get:function(){return this.class}},ls=ae.vnode;ae.vnode=function(e){var t=e.type,n=e.props,o=n;if(typeof t=="string"){for(var r in o={},n){var a=n[r];r==="value"&&"defaultValue"in n&&a==null||(r==="defaultValue"&&"value"in n&&n.value==null?r="value":r==="download"&&a===!0?a="":/ondoubleclick/i.test(r)?r="ondblclick":/^onchange(textarea|input)/i.test(r+t)&&!t1(n.type)?r="oninput":/^on(Ani|Tra|Tou|BeforeInp)/.test(r)?r=r.toLowerCase():e1.test(r)?r=r.replace(/[A-Z0-9]/,"-$&").toLowerCase():a===null&&(a=void 0),o[r]=a)}t=="select"&&o.multiple&&Array.isArray(o.value)&&(o.value=Ht(n.children).forEach(function(i){i.props.selected=o.value.indexOf(i.props.value)!=-1})),t=="select"&&o.defaultValue!=null&&(o.value=Ht(n.children).forEach(function(i){i.props.selected=o.multiple?o.defaultValue.indexOf(i.props.value)!=-1:o.defaultValue==i.props.value})),e.props=o}t&&n.class!=n.className&&(ss.enumerable="className"in n,n.className!=null&&(o.class=n.className),Object.defineProperty(o,"className",ss)),e.$$typeof=Zu,ls&&ls(e)};var us=ae.__r;ae.__r=function(e){us&&us(e),em=e.__c};var a1={ReactCurrentDispatcher:{current:{readContext:function(e){return em.__n[e.__c].props.value}}}};(typeof performance>"u"?"undefined":vo(performance))=="object"&&typeof performance.now=="function"&&performance.now.bind(performance);function ms(e){return!!e&&e.$$typeof===Zu}var O={useState:Uu,useReducer:Wu,useEffect:Ku,useLayoutEffect:ns,useRef:function(e){return xn=5,ta(function(){return{current:e}},[])},useImperativeHandle:function(e,t,n){xn=6,ns(function(){typeof e=="function"?e(t()):e&&(e.current=t())},n==null?n:n.concat(e))},useMemo:ta,useCallback:function(e,t){return xn=8,ta(function(){return e},t)},useContext:function(e){var t=et.context[e.__c],n=Lo(Fn++,9);return n.__c=e,t?(n.__==null&&(n.__=!0,t.sub(et)),t.props.value):e.__},useDebugValue:function(e,t){ae.useDebugValue&&ae.useDebugValue(t?t(e):e)},version:"16.8.0",Children:Q0,render:Xu,hydrate:function(e,t,n){return zu(e,t),typeof n=="function"&&n(),e?e.__c:null},unmountComponentAtNode:function(e){return!!e.__k&&(bo(null,e),!0)},createPortal:Gu,createElement:Pt,createContext:function(e,t){var n={__c:t="__cC"+Mu++,__:e,Consumer:function(o,r){return o.children(r)},Provider:function(o){var r,a;return this.getChildContext||(r=[],(a={})[t]=this,this.getChildContext=function(){return a},this.shouldComponentUpdate=function(i){this.props.value!==i.value&&r.some(La)},this.sub=function(i){r.push(i);var c=i.componentWillUnmount;i.componentWillUnmount=function(){r.splice(r.indexOf(i),1),c&&c.call(i)}}),o.children}};return n.Provider.__=n.Consumer.contextType=n},createFactory:function(e){return Pt.bind(null,e)},cloneElement:function(e){return ms(e)?K0.apply(null,arguments):e},createRef:function(){return{current:null}},Fragment:Zt,isValidElement:ms,findDOMNode:function(e){return e&&(e.base||e.nodeType===1&&e)||null},Component:At,PureComponent:xa,memo:function(e,t){function n(r){var a=this.props.ref,i=a==r.ref;return!i&&a&&(a.call?a(null):a.current=null),t?!t(this.props,r)||!i:ka(this.props,r)}function o(r){return this.shouldComponentUpdate=n,Pt(e,r)}return o.displayName="Memo("+(e.displayName||e.name)+")",o.prototype.isReactComponent=!0,o.__f=!0,o},forwardRef:function(e){function t(n,o){var r=Ju({},n);return delete r.ref,e(r,(o=n.ref||o)&&(vo(o)!="object"||"current"in o)?o:null)}return t.$$typeof=J0,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName="ForwardRef("+(e.displayName||e.name)+")",t},unstable_batchedUpdates:function(e,t){return e(t)},StrictMode:Zt,Suspense:Zo,SuspenseList:Xn,lazy:function(e){var t,n,o;function r(a){if(t||(t=e()).then(function(i){n=i.default||i},function(i){o=i}),o)throw o;if(!n)throw t;return Pt(n,a)}return r.displayName="Lazy",r.__f=!0,r},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:a1};function i1(){return O.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},O.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}function tm(){return O.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},O.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}var c1=["translations"];function Ca(){return Ca=Object.assign||function(e){for(var t=1;t{const l=Lt("CountTo");return N(),Q("a",{class:"my-badge",href:V(i),target:"_blank"},[(N(),je(Wd(e.comp))),av,ie(l,{startVal:0,endVal:e.data,duration:500},null,8,["endVal"])],8,rv)}}},Nc=we(iv,[["__scopeId","data-v-b201bc64"],["__file","Badge.vue"]]);const cv={class:"badges"},sv={__name:"HomeBadges",setup(e){const t=Ie(29582),n=Ie(6494);return ti(async()=>{const r=await fetch("https://arthas.aliyun.com/api/starCount").then(i=>i.json()),a=await fetch("https://arthas.aliyun.com/api/forkCount").then(i=>i.json());t.value=r||t.value,n.value=a||n.value}),(r,a)=>(N(),Q("div",cv,[ie(Nc,{comp:G_,data:t.value},null,8,["data"]),ie(Nc,{comp:ov,data:n.value},null,8,["data"])]))}},lv=we(sv,[["__scopeId","data-v-d7ced36e"],["__file","HomeBadges.vue"]]),uv={name:"MdiGithub"},mv={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 24 24",style:{height:"1.25rem",width:"1.25rem","vertical-align":"bottom"}},dv=le("path",{fill:"currentColor",d:"M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5c.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34c-.46-1.16-1.11-1.47-1.11-1.47c-.91-.62.07-.6.07-.6c1 .07 1.53 1.03 1.53 1.03c.87 1.52 2.34 1.07 2.91.83c.09-.65.35-1.09.63-1.34c-2.22-.25-4.55-1.11-4.55-4.92c0-1.11.38-2 1.03-2.71c-.1-.25-.45-1.29.1-2.64c0 0 .84-.27 2.75 1.02c.79-.22 1.65-.33 2.5-.33c.85 0 1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02c.55 1.35.2 2.39.1 2.64c.65.71 1.03 1.6 1.03 2.71c0 3.82-2.34 4.66-4.57 4.91c.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"},null,-1),fv=[dv];function hv(e,t,n,o,r,a){return N(),Q("svg",mv,fv)}const pv=we(uv,[["render",hv],["__file","GitHub.vue"]]),_v=["href","rel","target","aria-label"],vv={key:1},gv=Ne({inheritAttrs:!1}),bv=Object.assign(gv,{__name:"AutoLink",props:{item:{type:Object,required:!0}},setup(e){const t=e,n=Rt(),o=bi(),{item:r}=Xa(t),a=Z(()=>To(r.value.link)),i=Z(()=>ih(r.value.link)||ch(r.value.link)),c=Z(()=>{if(!i.value){if(r.value.target)return r.value.target;if(a.value)return"_blank"}}),s=Z(()=>c.value==="_blank"),l=Z(()=>!a.value&&!i.value&&!s.value),u=Z(()=>{if(!i.value){if(r.value.rel)return r.value.rel;if(s.value)return"noopener noreferrer"}}),m=Z(()=>r.value.ariaLabel||r.value.text),d=Z(()=>{const g=Object.keys(o.value.locales);return g.length?!g.some(b=>b===r.value.link):r.value.link!=="/"}),f=Z(()=>d.value?n.path.startsWith(r.value.link):!1),v=Z(()=>l.value?r.value.activeMatch?new RegExp(r.value.activeMatch).test(n.path):f.value:!1);return(g,b)=>{const p=Lt("RouterLink"),y=Lt("AutoLinkExternalIcon");return V(l)?(N(),je(p,ba({key:0,class:{"router-link-active":V(v)},to:V(r).link,"aria-label":V(m)},g.$attrs),{default:We(()=>[$e(g.$slots,"before"),Xt(" "+Re(V(r).text)+" ",1),$e(g.$slots,"after")]),_:3},16,["class","to","aria-label"])):(N(),Q("a",ba({key:1,class:"external-link",href:V(r).link,rel:V(u),target:V(c),"aria-label":V(m)},g.$attrs),[$e(g.$slots,"before"),V(r).text==="GitHub"?(N(),je(pv,{key:0})):(N(),Q("span",vv,Re(V(r).text),1)),V(s)&&V(r).text!=="GitHub"?(N(),je(y,{key:2})):qe("v-if",!0),$e(g.$slots,"after")],16,_v))}}}),St=we(bv,[["__file","AutoLink.vue"]]),Tu=e=>!To(e)||/github\.com/.test(e)?"GitHub":/bitbucket\.org/.test(e)?"Bitbucket":/gitlab\.com/.test(e)?"GitLab":/gitee\.com/.test(e)?"Gitee":null,yv={GitHub:":repo/edit/:branch/:path",GitLab:":repo/-/edit/:branch/:path",Gitee:":repo/edit/:branch/:path",Bitbucket:":repo/src/:branch/:path?mode=edit&spa=0&at=:branch&fileviewer=file-view-default"},Ev=({docsRepo:e,editLinkPattern:t})=>{if(t)return t;const n=Tu(e);return n!==null?yv[n]:null},wv=({docsRepo:e,docsBranch:t,docsDir:n,filePathRelative:o,editLinkPattern:r})=>{if(!o)return null;const a=Ev({docsRepo:e,editLinkPattern:r});return a?a.replace(/:repo/,To(e)?e:`https://github.com/${e}`).replace(/:branch/,t).replace(/:path/,eu(`${Xl(n)}/${o}`)):null},Ov={class:"hero"},Pv={key:0,id:"main-title"},Sv={key:1,class:"description"},Av={key:2,class:"actions"},Tv={__name:"HomeHero",setup(e){const t=Tt(),n=yi(),o=mi(),r=Z(()=>o.value&&t.value.heroImageDark!==void 0?t.value.heroImageDark:t.value.heroImage),a=Z(()=>t.value.heroText===null?null:t.value.heroText||n.value.title||"Hello"),i=Z(()=>t.value.heroAlt||a.value||"hero"),c=Z(()=>t.value.tagline===null?null:t.value.tagline||n.value.description||"Welcome to your VuePress site"),s=Z(()=>ce(t.value.actions)?t.value.actions.map(({text:u,link:m,type:d="primary"})=>({text:u,link:m,type:d})):[]),l=()=>{if(!r.value)return null;const u=Te("img",{src:wi(r.value),style:"width: 60%;",alt:i.value});return t.value.heroImageDark===void 0?u:Te(Ei,()=>u)};return(u,m)=>(N(),Q("header",Ov,[ie(l),le("div",null,[V(a)?(N(),Q("h1",Pv,Re(V(a)),1)):qe("v-if",!0),V(c)?(N(),Q("p",Sv,Re(V(c)),1)):qe("v-if",!0),ie(lv),V(s).length?(N(),Q("p",Av,[(N(!0),Q(Se,null,vt(V(s),d=>(N(),je(St,{key:d.text,class:Be(["action-button",[d.type]]),item:d},null,8,["class","item"]))),128))])):qe("v-if",!0)])]))}},Iv=we(Tv,[["__file","HomeHero.vue"]]),Lv={},Dv={class:"theme-default-content"};function Rv(e,t){const n=Lt("Content");return N(),Q("div",Dv,[ie(n)])}const xv=we(Lv,[["render",Rv],["__file","HomeContent.vue"]]),kv=["innerHTML"],Cv=["textContent"],Mv=Ne({__name:"HomeFooter",setup(e){const t=Tt(),n=Z(()=>t.value.footer),o=Z(()=>t.value.footerHtml);return(r,a)=>V(n)?(N(),Q(Se,{key:0},[qe(" eslint-disable-next-line vue/no-v-html "),V(o)?(N(),Q("div",{key:0,class:"footer",innerHTML:V(n)},null,8,kv)):(N(),Q("div",{key:1,class:"footer",textContent:Re(V(n))},null,8,Cv))],64)):qe("v-if",!0)}}),$v=we(Mv,[["__file","HomeFooter.vue"]]),jv={class:"home"},Hv={__name:"Home",setup(e){return(t,n)=>(N(),Q("main",jv,[ie(Iv),ie(U_),ie(xv),ie(N_),ie($v)]))}},qv=we(Hv,[["__file","Home.vue"]]);const Vv={__name:"NavbarBrand",setup(e){const t=mt(),n=mi(),o=Bn(),r=yi(),a=Hr(),i=Ie(t.value.version),c=Z(()=>a.value.home||o.value),s=Z(()=>r.value.title),l=Z(()=>n.value&&a.value.logoDark!==void 0?a.value.logoDark:a.value.logo),u=()=>Te("span",{class:"navbar-version"},`v${i.value}`),m=()=>{if(!l.value)return null;const d=Te("img",{class:"logo",src:wi(l.value),alt:s.value});return a.value.logoDark===void 0?d:Te(Ei,()=>d)};return(d,f)=>{const v=Lt("RouterLink");return N(),je(v,{to:V(c)},{default:We(()=>[ie(m),V(s)?(N(),Q("span",{key:0,class:Be(["site-name",{"can-hide":V(l)}])},Re(V(s)),3)):qe("v-if",!0),ie(u)]),_:1},8,["to"])}}},Nv=we(Vv,[["__scopeId","data-v-a8869d06"],["__file","NavbarBrand.vue"]]),Fv={},Bv={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",width:"1em",height:"1em",style:{height:"1.25rem",width:"1.25rem","vertical-align":"bottom"},viewBox:"0 0 24 24"},zv=le("path",{fill:"currentColor",d:"M13.35 22q-.6 0-.862-.387q-.263-.388-.063-.963l3.65-9.675q.15-.4.563-.688Q17.05 10 17.5 10q.425 0 .85.287q.425.288.575.688l3.65 9.675q.2.575-.062.963q-.263.387-.888.387q-.275 0-.5-.175q-.225-.175-.325-.425l-.85-2.45H15.1l-.875 2.45q-.1.25-.35.425q-.25.175-.525.175Zm2.35-4.8h3.6l-1.75-4.95h-.1ZM7.15 8.55q.4.725.85 1.337q.45.613 1.05 1.263q1.1-1.2 1.825-2.462Q11.6 7.425 12.1 6H2q-.425 0-.712-.287Q1 5.425 1 5t.288-.713Q1.575 4 2 4h6V3q0-.425.288-.713Q8.575 2 9 2t.713.287Q10 2.575 10 3v1h6q.425 0 .712.287Q17 4.575 17 5t-.288.713Q16.425 6 16 6h-1.9q-.525 1.775-1.425 3.45q-.9 1.675-2.225 3.15l2.4 2.45l-.75 2.05L9 14l-4.3 4.3q-.275.275-.7.275q-.425 0-.7-.275q-.275-.275-.275-.7q0-.425.275-.7l4.35-4.35q-.675-.775-1.25-1.563q-.575-.787-1.025-1.662Q5.1 8.8 5.35 8.4t.875-.4q.25 0 .525.162q.275.163.4.388Z"},null,-1),Uv=[zv];function Wv(e,t){return N(),Q("svg",Bv,Uv)}const Fc=we(Fv,[["render",Wv],["__file","Translate.vue"]]),Kv=Ne({__name:"DropdownTransition",setup(e){const t=o=>{o.style.height=o.scrollHeight+"px"},n=o=>{o.style.height=""};return(o,r)=>(N(),je(Ao,{name:"dropdown",onEnter:t,onAfterEnter:n,onBeforeLeave:t},{default:We(()=>[$e(o.$slots,"default")]),_:3}))}}),Iu=we(Kv,[["__file","DropdownTransition.vue"]]),Yv=["aria-label"],Jv={key:1,class:"title"},Qv=le("span",{class:"arrow down"},null,-1),Gv=["aria-label"],Zv={key:1,class:"title"},Xv={class:"navbar-dropdown"},eg={class:"navbar-dropdown-subtitle"},tg={key:1},ng={class:"navbar-dropdown-subitem-wrapper"},og={__name:"NavbarDropdown",props:{item:{type:Object,required:!0}},setup(e){const t=e,{item:n}=Xa(t),o=Z(()=>n.value.ariaLabel||n.value.text),r=Ie(!1),a=Rt();Xe(()=>a.path,()=>{r.value=!1});const i=s=>{s.detail===0?r.value=!r.value:r.value=!1},c=(s,l)=>l[l.length-1]===s;return(s,l)=>(N(),Q("div",{class:Be(["navbar-dropdown-wrapper",{open:r.value}])},[le("button",{class:"navbar-dropdown-title",type:"button","aria-label":V(o),onClick:i},[V(n).text==="Languages"?(N(),je(Fc,{key:0})):(N(),Q("span",Jv,Re(V(n).text),1)),Qv],8,Yv),le("button",{class:"navbar-dropdown-title-mobile",type:"button","aria-label":V(o),onClick:l[0]||(l[0]=u=>r.value=!r.value)},[V(n).text==="Languages"?(N(),je(Fc,{key:0})):(N(),Q("span",Zv,Re(V(n).text),1)),le("span",{class:Be(["arrow",r.value?"down":"right"])},null,2)],8,Gv),ie(Iu,null,{default:We(()=>[fo(le("ul",Xv,[(N(!0),Q(Se,null,vt(V(n).children,u=>(N(),Q("li",{key:u.text,class:"navbar-dropdown-item"},[u.children?(N(),Q(Se,{key:0},[le("h4",eg,[u.link?(N(),je(St,{key:0,item:u,onFocusout:m=>c(u,V(n).children)&&u.children.length===0&&(r.value=!1)},null,8,["item","onFocusout"])):(N(),Q("span",tg,Re(u.text),1))]),le("ul",ng,[(N(!0),Q(Se,null,vt(u.children,m=>(N(),Q("li",{key:m.link,class:"navbar-dropdown-subitem"},[ie(St,{item:m,onFocusout:d=>c(m,u.children)&&c(u,V(n).children)&&(r.value=!1)},null,8,["item","onFocusout"])]))),128))])],64)):(N(),je(St,{key:1,item:u,onFocusout:m=>c(u,V(n).children)&&(r.value=!1)},null,8,["item","onFocusout"]))]))),128))],512),[[dr,r.value]])]),_:1})],2))}},rg=we(og,[["__file","NavbarDropdown.vue"]]),ag={key:0,class:"navbar-items"},ig=Ne({__name:"NavbarItems",setup(e){const t=()=>{const l=vn(),u=Bn(),m=yi(),d=ot();return Z(()=>{var y,P,A;const f=Object.keys(m.value.locales);if(f.length<2)return[];const v=l.currentRoute.value.path,g=l.currentRoute.value.fullPath,b=l.currentRoute.value.hash;return[{text:(y=d.value.selectLanguageText)!=null?y:"unknown language",ariaLabel:(A=(P=d.value.selectLanguageAriaLabel)!=null?P:d.value.selectLanguageText)!=null?A:"unknown language",children:f.map(D=>{var j,S,T,x,M,$;const q=(S=(j=m.value.locales)==null?void 0:j[D])!=null?S:{},R=(x=(T=d.value.locales)==null?void 0:T[D])!=null?x:{},E=`${q.lang}`,z=(M=R.selectLanguageName)!=null?M:E;let Y;if(E===m.value.lang)Y=g;else{const K=v.replace(u.value,D);l.getRoutes().some(te=>te.path===K)?Y=`${K}${b}`:Y=($=R.home)!=null?$:D}return{text:z,link:Y}})}]})},n=()=>{const l=ot(),u=Z(()=>l.value.repo),m=Z(()=>u.value?Tu(u.value):null),d=Z(()=>u.value&&!To(u.value)?`https://github.com/${u.value}`:u.value),f=Z(()=>d.value?l.value.repoLabel?l.value.repoLabel:m.value===null?"Source":m.value:null);return Z(()=>!d.value||!f.value?[]:[{text:f.value,link:d.value}])},o=l=>De(l)?di(l):l.children?{...l,children:l.children.map(o)}:l,a=(()=>{const l=ot();return Z(()=>(l.value.navbar||[]).map(o))})(),i=t(),c=n(),s=Z(()=>[...a.value,...i.value,...c.value]);return(l,u)=>V(s).length?(N(),Q("nav",ag,[(N(!0),Q(Se,null,vt(V(s),m=>(N(),Q("div",{key:m.text,class:"navbar-item"},[m.children?(N(),je(rg,{key:0,item:m},null,8,["item"])):(N(),je(St,{key:1,item:m},null,8,["item"]))]))),128))])):qe("v-if",!0)}}),Lu=we(ig,[["__file","NavbarItems.vue"]]),cg=["title"],sg={class:"icon",focusable:"false",viewBox:"0 0 32 32"},lg=pf('',9),ug=[lg],mg={class:"icon",focusable:"false",viewBox:"0 0 32 32"},dg=le("path",{d:"M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z",fill:"currentColor"},null,-1),fg=[dg],hg=Ne({__name:"ToggleColorModeButton",setup(e){const t=ot(),n=mi(),o=()=>{n.value=!n.value};return(r,a)=>(N(),Q("button",{class:"toggle-color-mode-button",title:V(t).toggleColorMode,onClick:o},[fo((N(),Q("svg",sg,ug,512)),[[dr,!V(n)]]),fo((N(),Q("svg",mg,fg,512)),[[dr,V(n)]])],8,cg))}}),pg=we(hg,[["__file","ToggleColorModeButton.vue"]]),_g=["title"],vg=le("div",{class:"icon","aria-hidden":"true"},[le("span"),le("span"),le("span")],-1),gg=[vg],bg=Ne({__name:"ToggleSidebarButton",emits:["toggle"],setup(e){const t=ot();return(n,o)=>(N(),Q("div",{class:"toggle-sidebar-button",title:V(t).toggleSidebar,"aria-expanded":"false",role:"button",tabindex:"0",onClick:o[0]||(o[0]=r=>n.$emit("toggle"))},gg,8,_g))}}),yg=we(bg,[["__file","ToggleSidebarButton.vue"]]),Eg=Ne({__name:"Navbar",emits:["toggle-sidebar"],setup(e){const t=ot(),n=Ie(null),o=Ie(null),r=Ie(0),a=Z(()=>r.value?{maxWidth:r.value+"px"}:{});tt(()=>{const s=i(n.value,"paddingLeft")+i(n.value,"paddingRight"),l=()=>{var u;window.innerWidth<=719?r.value=0:r.value=n.value.offsetWidth-s-(((u=o.value)==null?void 0:u.offsetWidth)||0)};l(),window.addEventListener("resize",l,!1),window.addEventListener("orientationchange",l,!1)});function i(c,s){var m,d,f;const l=(f=(d=(m=c==null?void 0:c.ownerDocument)==null?void 0:m.defaultView)==null?void 0:d.getComputedStyle(c,null))==null?void 0:f[s],u=Number.parseInt(l,10);return Number.isNaN(u)?0:u}return(c,s)=>{const l=Lt("NavbarSearch");return N(),Q("header",{ref_key:"navbar",ref:n,class:"navbar"},[ie(yg,{onToggle:s[0]||(s[0]=u=>c.$emit("toggle-sidebar"))}),le("span",{ref_key:"navbarBrand",ref:o},[ie(Nv)],512),le("div",{class:"navbar-items-wrapper",style:Eo(V(a))},[$e(c.$slots,"before"),ie(Lu,{class:"can-hide"}),$e(c.$slots,"after"),V(t).colorModeSwitch?(N(),je(pg,{key:0})):qe("v-if",!0),ie(l)],4)],512)}}}),wg=we(Eg,[["__file","Navbar.vue"]]);const Og={class:"right-menu-wrapper"},Pg={class:"right-menu-margin"},Sg={class:"right-menu-title"},Ag={class:"right-menu-content"},Tg=["href","title"],Ig=["href"],Lg=["href","title"],Dg=["href"],Rg={__name:"RightMenu",setup(e){var s;const t=mt(),n=Hr(),o=Ie(""),r=Ie([]);let a=Ie("");o.value=(s=n.value.rightMenuText)!=null?s:"Table of Contents";function i(){r.value=t.value.headers}function c(){a.value=decodeURIComponent(window.location.hash.slice(1))}return tt(()=>{i(),c()}),Xe(Rt(),()=>{r.value=t.value.headers,c()}),(l,u)=>(N(),Q("div",Og,[le("div",Pg,[le("div",Sg,Re(o.value),1),le("div",Ag,[(N(!0),Q(Se,null,vt(r.value,(m,d)=>(N(),Q(Se,{key:d},[le("div",{class:Be(["right-menu-item","level"+m.level,{active:m.slug===V(a)}])},[m.title.replace(/[^\x00-\xff]/g,"01").length>=36?(N(),Q("a",{key:0,href:"#"+m.slug,title:m.title},Re(m.title),9,Tg)):(N(),Q("a",{key:1,href:"#"+m.slug},Re(m.title),9,Ig))],2),(N(!0),Q(Se,null,vt(m.children,(f,v)=>(N(),Q("div",{class:Be(["right-menu-item","level"+f.level,{active:f.slug===V(a)}]),key:v},[f.title.replace(/[^\x00-\xff]/g,"01").length>=35?(N(),Q("a",{key:0,href:"#"+f.slug,title:f.title},Re(f.title),9,Lg)):(N(),Q("a",{key:1,href:"#"+f.slug},Re(f.title),9,Dg))],2))),128))],64))),128))])])]))}},xg=we(Rg,[["__scopeId","data-v-64666cd5"],["__file","RightMenu.vue"]]),kg={class:"page-meta"},Cg={key:0,class:"meta-item edit-link"},Mg={key:1,class:"meta-item last-updated"},$g={class:"meta-item-label"},jg={class:"meta-item-info"},Hg={key:2,class:"meta-item contributors"},qg={class:"meta-item-label"},Vg={class:"meta-item-info"},Ng=["title"],Fg=Xt(", "),Bg=Ne({__name:"PageMeta",setup(e){const t=()=>{const s=ot(),l=mt(),u=Tt();return Z(()=>{var y,P,A;if(!((P=(y=u.value.editLink)!=null?y:s.value.editLink)!=null?P:!0))return null;const{repo:d,docsRepo:f=d,docsBranch:v="main",docsDir:g="",editLinkText:b}=s.value;if(!f)return null;const p=wv({docsRepo:f,docsBranch:v,docsDir:g,filePathRelative:l.value.filePathRelative,editLinkPattern:(A=u.value.editLinkPattern)!=null?A:s.value.editLinkPattern});return p?{text:b!=null?b:"Edit this page",link:p}:null})},n=()=>{const s=ot(),l=mt(),u=Tt();return Z(()=>{var f,v,g,b;return!((v=(f=u.value.lastUpdated)!=null?f:s.value.lastUpdated)!=null?v:!0)||!((g=l.value.git)!=null&&g.updatedTime)?null:new Date((b=l.value.git)==null?void 0:b.updatedTime).toLocaleString()})},o=()=>{const s=ot(),l=mt(),u=Tt();return Z(()=>{var d,f,v,g;return((f=(d=u.value.contributors)!=null?d:s.value.contributors)!=null?f:!0)&&(g=(v=l.value.git)==null?void 0:v.contributors)!=null?g:null})},r=ot(),a=t(),i=n(),c=o();return(s,l)=>{const u=Lt("ClientOnly");return N(),Q("footer",kg,[V(a)?(N(),Q("div",Cg,[ie(St,{class:"meta-item-label",item:V(a)},null,8,["item"])])):qe("v-if",!0),V(i)?(N(),Q("div",Mg,[le("span",$g,Re(V(r).lastUpdatedText)+": ",1),ie(u,null,{default:We(()=>[le("span",jg,Re(V(i)),1)]),_:1})])):qe("v-if",!0),V(c)&&V(c).length?(N(),Q("div",Hg,[le("span",qg,Re(V(r).contributorsText)+": ",1),le("span",Vg,[(N(!0),Q(Se,null,vt(V(c),(m,d)=>(N(),Q(Se,{key:d},[le("span",{class:"contributor",title:`email: ${m.email}`},Re(m.name),9,Ng),d!==V(c).length-1?(N(),Q(Se,{key:0},[Fg],64)):qe("v-if",!0)],64))),128))])])):qe("v-if",!0)])}}}),zg=we(Bg,[["__file","PageMeta.vue"]]),Ug={key:0,class:"page-nav"},Wg={class:"inner"},Kg={key:0,class:"prev"},Yg={key:1,class:"next"},Jg=Ne({__name:"PageNav",setup(e){const t=s=>s===!1?null:De(s)?di(s):ii(s)?s:!1,n=(s,l,u)=>{const m=s.findIndex(d=>d.link===l);if(m!==-1){const d=s[m+u];return d!=null&&d.link?d:null}for(const d of s)if(d.children){const f=n(d.children,l,u);if(f)return f}return null},o=Tt(),r=fi(),a=Rt(),i=Z(()=>{const s=t(o.value.prev);return s!==!1?s:n(r.value,a.path,-1)}),c=Z(()=>{const s=t(o.value.next);return s!==!1?s:n(r.value,a.path,1)});return(s,l)=>V(i)||V(c)?(N(),Q("nav",Ug,[le("p",Wg,[V(i)?(N(),Q("span",Kg,[ie(St,{item:V(i)},null,8,["item"])])):qe("v-if",!0),V(c)?(N(),Q("span",Yg,[ie(St,{item:V(c)},null,8,["item"])])):qe("v-if",!0)])])):qe("v-if",!0)}}),Qg=we(Jg,[["__file","PageNav.vue"]]);const Gg={class:"page"},Zg={__name:"Page",setup(e){function t(){return mt().value.headers.length>0}return(n,o)=>{const r=Lt("Content");return N(),Q("main",Gg,[$e(n.$slots,"top",{},void 0,!0),le("div",{class:Be([t()&&"right-menu-padding","theme-default-content"])},[$e(n.$slots,"content-top",{},void 0,!0),t()?(N(),je(xg,{key:0})):qe("v-if",!0),ie(r),$e(n.$slots,"content-bottom",{},void 0,!0)],2),ie(zg,{class:Be(t()&&"right-menu-padding")},null,8,["class"]),ie(Qg,{class:Be(t()&&"right-menu-padding")},null,8,["class"]),$e(n.$slots,"bottom",{},void 0,!0)])}}},Xg=we(Zg,[["__scopeId","data-v-fdd717e0"],["__file","Page.vue"]]);const e0=["aria-expanded","aria-label"],t0={key:1,class:"sidebar-tree-toggle-placeholder"},n0=["onKeydown"],o0={class:"sidebar-item-children"},r0={__name:"SidebarItem",props:{item:{type:Object,required:!0},depth:{type:Number,required:!1,default:0},forceOpen:{type:Boolean,required:!1,default:!1}},setup(e){const t=e,{item:n,depth:o,forceOpen:r}=Xa(t),a=Rt(),i=vn();function c(q){return decodeURI(q).replace(/#.*$/,"").replace(/(index)?\.(md|html)$/,"")}function s(q,R){return R.hash===q?!0:c(R.path)===c(q)}function l(q,R){return q.link&&s(q.link,R)?!0:q.children?q.children.some(E=>l(E,R)):!1}const u=Z(()=>{var q;return Boolean((q=n.value.children)==null?void 0:q.length)}),m=Z(()=>Boolean(n.value.link)&&o.value>0),d=Z(()=>l(n.value,a)),f=Z(()=>Boolean(n.value.collapsible)&&u.value),v=Z(()=>f.value?r.value||d.value:!0),g=Ie(v.value),b=Z(()=>({"sidebar-item":!0,"sidebar-heading":o.value===0,active:d.value,collapsible:f.value})),p=Z(()=>({"sidebar-tree-row":!0,"sidebar-tree-heading-row":o.value===0,active:d.value,collapsible:f.value})),y=Z(()=>{const q=a.path.startsWith("/en/");return g.value?`${q?"Collapse":"\u6536\u8D77"} ${n.value.text}`:`${q?"Expand":"\u5C55\u5F00"} ${n.value.text}`});function P(){f.value&&(g.value=!g.value)}function A(q){!f.value||(q.preventDefault(),P())}const D=i.afterEach(()=>{Po(()=>{g.value=v.value})});return Xe(v,q=>{g.value=q}),xr(()=>{D()}),(q,R)=>{const E=Lt("SidebarItem",!0);return N(),Q("li",null,[V(m)?(N(),Q("div",{key:0,class:Be(V(p))},[V(f)?(N(),Q("button",{key:0,type:"button",class:"sidebar-tree-toggle","aria-expanded":g.value,"aria-label":V(y),onClick:P},[le("span",{class:Be(["sidebar-tree-chevron",{open:g.value}]),"aria-hidden":"true"},null,2)],8,e0)):(N(),Q("span",t0)),ie(St,{class:Be(V(b)),item:V(n)},null,8,["class","item"])],2)):V(n).link?(N(),je(St,{key:1,class:Be(V(b)),item:V(n)},null,8,["class","item"])):(N(),Q("p",{key:2,tabindex:"0",class:Be(V(b)),onClick:A,onKeydown:Zf(A,["enter"])},[Xt(Re(V(n).text)+" ",1),V(f)?(N(),Q("span",{key:0,class:Be(["sidebar-tree-chevron",{open:g.value}]),"aria-hidden":"true"},null,2)):qe("v-if",!0)],42,n0)),V(u)?(N(),je(Iu,{key:3},{default:We(()=>[fo(le("ul",o0,[(N(!0),Q(Se,null,vt(V(n).children,z=>(N(),je(E,{key:`${V(o)}${z.text}${z.link}`,item:z,depth:V(o)+1,"force-open":V(r)},null,8,["item","depth","force-open"]))),128))],512),[[dr,g.value]])]),_:1})):qe("v-if",!0)])}}},a0=we(r0,[["__scopeId","data-v-558ea87d"],["__file","SidebarItem.vue"]]);const i0=e=>(Td("data-v-ff139ca7"),e=e(),Id(),e),c0={key:0,class:"sidebar-search-wrapper"},s0={class:"sidebar-search",role:"search"},l0=i0(()=>le("span",{class:"sidebar-search-icon","aria-hidden":"true"},null,-1)),u0=["placeholder","aria-label"],m0=["aria-label"],d0={key:1,class:"sidebar-items"},f0={key:2,class:"sidebar-search-empty"},h0={__name:"SidebarItems",setup(e){const t=Rt(),n=fi(),o=Ie(""),r=Z(()=>t.path.startsWith("/en/")),a=Z(()=>u(o.value.trim())),i=Z(()=>a.value.length>0),c=Z(()=>r.value?"Search":"\u641C\u7D22"),s=Z(()=>r.value?"Clear search":"\u6E05\u9664\u641C\u7D22"),l=Z(()=>r.value?"No matches":"\u6CA1\u6709\u5339\u914D\u7ED3\u679C");function u(g){return String(g!=null?g:"").toLocaleLowerCase()}function m(g,b){return[g.text,g.link].some(p=>u(p).includes(b))}function d(g,b){var y;const p=((y=g.children)!=null?y:[]).map(P=>d(P,b)).filter(Boolean);return!m(g,b)&&p.length===0?null:{...g,children:p}}const f=Z(()=>i.value?n.value.map(g=>d(g,a.value)).filter(Boolean):n.value);function v(){o.value=""}return tt(()=>{Xe(()=>t.hash,g=>{const b=document.querySelector(".sidebar");if(!b)return;const p=document.querySelector(`.sidebar a.sidebar-item[href="${t.path}${g}"]`);if(!p)return;const{top:y,height:P}=b.getBoundingClientRect(),{top:A,height:D}=p.getBoundingClientRect();Ay+P&&p.scrollIntoView(!1)})}),(g,b)=>(N(),Q(Se,null,[V(n).length?(N(),Q("div",c0,[le("div",s0,[l0,fo(le("input",{"onUpdate:modelValue":b[0]||(b[0]=p=>o.value=p),class:"sidebar-search-input",type:"search",placeholder:V(c),"aria-label":V(c)},null,8,u0),[[Qf,o.value]]),o.value?(N(),Q("button",{key:0,type:"button",class:"sidebar-search-clear","aria-label":V(s),onClick:v}," \xD7 ",8,m0)):qe("v-if",!0)])])):qe("v-if",!0),V(f).length?(N(),Q("ul",d0,[(N(!0),Q(Se,null,vt(V(f),p=>(N(),je(a0,{key:`${p.text}${p.link}`,item:p,"force-open":V(i)},null,8,["item","force-open"]))),128))])):(N(),Q("p",f0,Re(V(l)),1))],64))}},p0=we(h0,[["__scopeId","data-v-ff139ca7"],["__file","SidebarItems.vue"]]),_0={class:"sidebar"},v0=Ne({__name:"Sidebar",setup(e){return(t,n)=>(N(),Q("aside",_0,[ie(Lu),$e(t.$slots,"top"),ie(p0),$e(t.$slots,"bottom")]))}}),g0=we(v0,[["__file","Sidebar.vue"]]),b0=Ne({__name:"Layout",setup(e){const t=mt(),n=Tt(),o=ot(),r=Z(()=>n.value.navbar!==!1&&o.value.navbar!==!1),a=fi(),i=Ie(!1),c=b=>{i.value=typeof b=="boolean"?b:!i.value},s={x:0,y:0},l=b=>{s.x=b.changedTouches[0].clientX,s.y=b.changedTouches[0].clientY},u=b=>{const p=b.changedTouches[0].clientX-s.x,y=b.changedTouches[0].clientY-s.y;Math.abs(p)>Math.abs(y)&&Math.abs(p)>40&&(p>0&&s.x<=80?c(!0):c(!1))},m=Z(()=>[{"no-navbar":!r.value,"no-sidebar":!a.value.length,"sidebar-open":i.value},n.value.pageClass]);let d;tt(()=>{d=vn().afterEach(()=>{c(!1)})}),kr(()=>{d()});const f=Pu(),v=f.resolve,g=f.pending;return(b,p)=>(N(),Q("div",{class:Be(["theme-container",V(m)]),onTouchstart:l,onTouchend:u},[$e(b.$slots,"navbar",{},()=>[V(r)?(N(),je(wg,{key:0,onToggleSidebar:c},{before:We(()=>[$e(b.$slots,"navbar-before")]),after:We(()=>[$e(b.$slots,"navbar-after")]),_:3})):qe("v-if",!0)]),le("div",{class:"sidebar-mask",onClick:p[0]||(p[0]=y=>c(!1))}),$e(b.$slots,"sidebar",{},()=>[ie(g0,null,{top:We(()=>[$e(b.$slots,"sidebar-top")]),bottom:We(()=>[$e(b.$slots,"sidebar-bottom")]),_:3})]),$e(b.$slots,"page",{},()=>[V(n).home?(N(),je(qv,{key:0})):(N(),je(Ao,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:V(v),onBeforeLeave:V(g)},{default:We(()=>[(N(),je(Xg,{key:V(t).path},{top:We(()=>[$e(b.$slots,"page-top")]),"content-top":We(()=>[$e(b.$slots,"page-content-top")]),"content-bottom":We(()=>[$e(b.$slots,"page-content-bottom")]),bottom:We(()=>[$e(b.$slots,"page-bottom")]),_:3}))]),_:3},8,["onBeforeEnter","onBeforeLeave"]))])],34))}}),y0=we(b0,[["__file","Layout.vue"]]),E0={class:"theme-container"},w0={class:"page"},O0={class:"theme-default-content"},P0=le("h1",null,"404",-1),S0=Ne({__name:"NotFound",setup(e){var c,s,l;const t=Bn(),n=ot(),o=(c=n.value.notFound)!=null?c:["Not Found"],r=()=>o[Math.floor(Math.random()*o.length)],a=(s=n.value.home)!=null?s:t.value,i=(l=n.value.backToHome)!=null?l:"Back to home";return(u,m)=>{const d=Lt("RouterLink");return N(),Q("div",E0,[le("main",w0,[le("div",O0,[P0,le("blockquote",null,Re(r()),1),ie(d,{to:V(a)},{default:We(()=>[Xt(Re(V(i)),1)]),_:1},8,["to"])])])])}}}),A0=we(S0,[["__file","NotFound.vue"]]);const T0=Dt({enhance({app:e,router:t}){e.component("Badge",Hp),e.component("CodeGroup",qp),e.component("CodeGroupItem",Bp),e.component("AutoLinkExternalIcon",()=>{const o=e.component("ExternalLinkIcon");return o?Te(o):null}),e.component("NavbarSearch",()=>{const o=e.component("Docsearch")||e.component("SearchBox");return o?Te(o):null});const n=t.options.scrollBehavior;t.options.scrollBehavior=async(...o)=>(await Pu().wait(),n(...o))},setup(){A_(),L_()},layouts:{Layout:y0,NotFound:A0}});const I0={},L0=e=>{const t=Bn();return Z(()=>e[t.value])};class D0{constructor(){this.messageElements={};const t="message-container",n=document.getElementById(t);n?this.containerElement=n:(this.containerElement=document.createElement("div"),this.containerElement.id=t,document.body.appendChild(this.containerElement))}pop(t,n=2e3){const o=document.createElement("div"),r=Date.now();return o.className="message move-in",o.innerHTML=t,this.containerElement.appendChild(o),this.messageElements[r]=o,n>0&&setTimeout(()=>{this.close(r)},n),r}close(t){if(t){const n=this.messageElements[t];n.className=n.className.replace("move-in",""),n.className+="move-out",n.addEventListener("animationend",()=>{n.remove(),delete this.messageElements[t]})}else Object.keys(this.messageElements).forEach(n=>this.close(Number(n)))}destory(){document.body.removeChild(this.containerElement)}}var ea,Mt=function(){var e=1e3,t=6e4,n=36e5,o="millisecond",r="second",a="minute",i="hour",c="day",s="week",l="month",u="quarter",m="year",d="date",f="Invalid Date",v=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,g=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,b={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},p=function(j,S,T){var x=String(j);return!x||x.length>=S?j:""+Array(S+1-x.length).join(T)+j},y={s:p,z:function(j){var S=-j.utcOffset(),T=Math.abs(S),x=Math.floor(T/60),M=T%60;return(S<=0?"+":"-")+p(x,2,"0")+":"+p(M,2,"0")},m:function j(S,T){if(S.date()1)return j(K[0])}else{var te=S.name;A[te]=S,M=te}return!x&&M&&(P=M),M||!x&&P},R=function(j,S){if(D(j))return j.clone();var T=typeof S=="object"?S:{};return T.date=j,T.args=arguments,new z(T)},E=y;E.l=q,E.i=D,E.w=function(j,S){return R(j,{locale:S.$L,utc:S.$u,x:S.$x,$offset:S.$offset})};var z=function(){function j(T){this.$L=q(T.locale,null,!0),this.parse(T)}var S=j.prototype;return S.parse=function(T){this.$d=function(x){var M=x.date,$=x.utc;if(M===null)return new Date(NaN);if(E.u(M))return new Date;if(M instanceof Date)return new Date(M);if(typeof M=="string"&&!/Z$/i.test(M)){var K=M.match(v);if(K){var te=K[2]-1||0,me=(K[7]||"0").substring(0,3);return $?new Date(Date.UTC(K[1],te,K[3]||1,K[4]||0,K[5]||0,K[6]||0,me)):new Date(K[1],te,K[3]||1,K[4]||0,K[5]||0,K[6]||0,me)}}return new Date(M)}(T),this.$x=T.x||{},this.init()},S.init=function(){var T=this.$d;this.$y=T.getFullYear(),this.$M=T.getMonth(),this.$D=T.getDate(),this.$W=T.getDay(),this.$H=T.getHours(),this.$m=T.getMinutes(),this.$s=T.getSeconds(),this.$ms=T.getMilliseconds()},S.$utils=function(){return E},S.isValid=function(){return this.$d.toString()!==f},S.isSame=function(T,x){var M=R(T);return this.startOf(x)<=M&&M<=this.endOf(x)},S.isAfter=function(T,x){return R(T)=0?1:v.date()),b=f.year||v.year(),p=f.month>=0?f.month:f.year||f.day?0:v.month(),y=f.hour||0,P=f.minute||0,A=f.second||0,D=f.millisecond||0;return d?new Date(Date.UTC(b,p,g,y,P,A,D)):new Date(b,p,g,y,P,A,D)}return m},a=o.parse;o.parse=function(l){l.date=r.bind(this)(l),a.bind(this)(l)};var i=o.set,c=o.add,s=function(l,u,m,d){if(d===void 0&&(d=1),u instanceof Object){var f=Object.keys(u),v=this;return f.forEach(function(g){v=l.bind(v)(u[g]*d,g)}),v}return l.bind(this)(u*d,m)};o.set=function(l,u){return u=u===void 0?l:u,s.bind(this)(function(m,d){return i.bind(this)(d,m)},u,l)},o.add=function(l,u){return s.bind(this)(c,l,u)},o.subtract=function(l,u){return s.bind(this)(c,l,u,-1)}},Ru=function(){var e={year:0,month:1,day:2,hour:3,minute:4,second:5},t={};return function(n,o,r){var a,i=function(u,m,d){d===void 0&&(d={});var f=new Date(u),v=function(g,b){b===void 0&&(b={});var p=b.timeZoneName||"short",y=g+"|"+p,P=t[y];return P||(P=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:g,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:p}),t[y]=P),P}(m,d);return v.formatToParts(f)},c=function(u,m){for(var d=i(u,m),f=[],v=0;v=0&&(f[y]=parseInt(p,10))}var P=f[3],A=P===24?0:P,D=f[0]+"-"+f[1]+"-"+f[2]+" "+A+":"+f[4]+":"+f[5]+":000",q=+u;return(r.utc(D).valueOf()-(q-=q%1e3))/6e4},s=o.prototype;s.tz=function(u,m){u===void 0&&(u=a);var d=this.utcOffset(),f=this.toDate(),v=f.toLocaleString("en-US",{timeZone:u}),g=Math.round((f-new Date(v))/1e3/60),b=r(v).$set("millisecond",this.$ms).utcOffset(15*-Math.round(f.getTimezoneOffset()/15)-g,!0);if(m){var p=b.utcOffset();b=b.add(d-p,"minute")}return b.$x.$timezone=u,b},s.offsetName=function(u){var m=this.$x.$timezone||r.tz.guess(),d=i(this.valueOf(),m,{timeZoneName:u}).find(function(f){return f.type.toLowerCase()==="timezonename"});return d&&d.value};var l=s.startOf;s.startOf=function(u,m){if(!this.$x||!this.$x.$timezone)return l.call(this,u,m);var d=r(this.format("YYYY-MM-DD HH:mm:ss:SSS"));return l.call(d,u,m).tz(this.$x.$timezone,!0)},r.tz=function(u,m,d){var f=d&&m,v=d||m||a,g=c(+r(),v);if(typeof u!="string")return r(u).tz(v);var b=function(A,D,q){var R=A-60*D*1e3,E=c(R,q);if(D===E)return[R,D];var z=c(R-=60*(E-D)*1e3,q);return E===z?[R,E]:[A-60*Math.min(E,z)*1e3,Math.max(E,z)]}(r.utc(u,f).valueOf(),g,v),p=b[0],y=b[1],P=r(p).utcOffset(y);return P.$x.$timezone=v,P},r.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},r.tz.setDefault=function(u){a=u}}}(),xu=function(){var e="minute",t=/[+-]\d\d(?::?\d\d)?/g,n=/([+-]|\d\d)/g;return function(o,r,a){var i=r.prototype;a.utc=function(f){return new r({date:f,utc:!0,args:arguments})},i.utc=function(f){var v=a(this.toDate(),{locale:this.$L,utc:!0});return f?v.add(this.utcOffset(),e):v},i.local=function(){return a(this.toDate(),{locale:this.$L,utc:!1})};var c=i.parse;i.parse=function(f){f.utc&&(this.$u=!0),this.$utils().u(f.$offset)||(this.$offset=f.$offset),c.call(this,f)};var s=i.init;i.init=function(){if(this.$u){var f=this.$d;this.$y=f.getUTCFullYear(),this.$M=f.getUTCMonth(),this.$D=f.getUTCDate(),this.$W=f.getUTCDay(),this.$H=f.getUTCHours(),this.$m=f.getUTCMinutes(),this.$s=f.getUTCSeconds(),this.$ms=f.getUTCMilliseconds()}else s.call(this)};var l=i.utcOffset;i.utcOffset=function(f,v){var g=this.$utils().u;if(g(f))return this.$u?0:g(this.$offset)?l.call(this):this.$offset;if(typeof f=="string"&&(f=function(P){P===void 0&&(P="");var A=P.match(t);if(!A)return null;var D=(""+A[0]).match(n)||["-",0,0],q=D[0],R=60*+D[1]+ +D[2];return R===0?0:q==="+"?R:-R}(f),f===null))return this;var b=Math.abs(f)<=16?60*f:f,p=this;if(v)return p.$offset=b,p.$u=f===0,p;if(f!==0){var y=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(p=this.local().add(b+y,e)).$offset=b,p.$x.$localOffset=y}else p=this.utc();return p};var u=i.format;i.format=function(f){var v=f||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return u.call(this,v)},i.valueOf=function(){var f=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*f},i.isUTC=function(){return!!this.$u},i.toISOString=function(){return this.toDate().toISOString()},i.toString=function(){return this.toDate().toUTCString()};var m=i.toDate;i.toDate=function(f){return f==="s"&&this.$offset?a(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():m.call(this)};var d=i.diff;i.diff=function(f,v,g){if(f&&this.$u===f.$u)return d.call(this,f,v,g);var b=this.local(),p=a(f).local();return d.call(b,p,v,g)}}}();Mt.extend(R0),Mt.extend(Du),Mt.extend(xu),Mt.extend(Ru);const x0={name:"zh-cn",weekdays:"\u661F\u671F\u65E5_\u661F\u671F\u4E00_\u661F\u671F\u4E8C_\u661F\u671F\u4E09_\u661F\u671F\u56DB_\u661F\u671F\u4E94_\u661F\u671F\u516D".split("_"),weekdaysShort:"\u5468\u65E5_\u5468\u4E00_\u5468\u4E8C_\u5468\u4E09_\u5468\u56DB_\u5468\u4E94_\u5468\u516D".split("_"),weekdaysMin:"\u65E5_\u4E00_\u4E8C_\u4E09_\u56DB_\u4E94_\u516D".split("_"),months:"\u4E00\u6708_\u4E8C\u6708_\u4E09\u6708_\u56DB\u6708_\u4E94\u6708_\u516D\u6708_\u4E03\u6708_\u516B\u6708_\u4E5D\u6708_\u5341\u6708_\u5341\u4E00\u6708_\u5341\u4E8C\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),ordinal:(e,t)=>t==="W"?`${e}\u5468`:`${e}\u65E5`,weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5E74M\u6708D\u65E5",LLL:"YYYY\u5E74M\u6708D\u65E5Ah\u70B9mm\u5206",LLLL:"YYYY\u5E74M\u6708D\u65E5ddddAh\u70B9mm\u5206",l:"YYYY/M/D",ll:"YYYY\u5E74M\u6708D\u65E5",lll:"YYYY\u5E74M\u6708D\u65E5 HH:mm",llll:"YYYY\u5E74M\u6708D\u65E5dddd HH:mm"},relativeTime:{future:"%s\u5185",past:"%s\u524D",s:"\u51E0\u79D2",m:"1 \u5206\u949F",mm:"%d \u5206\u949F",h:"1 \u5C0F\u65F6",hh:"%d \u5C0F\u65F6",d:"1 \u5929",dd:"%d \u5929",M:"1 \u4E2A\u6708",MM:"%d \u4E2A\u6708",y:"1 \u5E74",yy:"%d \u5E74"},meridiem:(e,t)=>{const n=100*e+t;return n<600?"\u51CC\u6668":n<900?"\u65E9\u4E0A":n<1100?"\u4E0A\u5348":n<1300?"\u4E2D\u5348":n<1800?"\u4E0B\u5348":"\u665A\u4E0A"}},k0={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")};Mt.locale("zh",x0),Mt.locale("en",k0),Mt.extend(Du),Mt.extend(xu),Mt.extend(Ru);const qo={showInMobile:!1,pure:!0},Bc=()=>!!navigator&&/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/iu.test(navigator.userAgent),C0=()=>{const e=Rt(),t=L0({"/en/":{copy:"Copied successfully",hint:"Copy code"},"/":{copy:"\u590D\u5236\u6210\u529F",hint:"\u590D\u5236\u4EE3\u7801"}}),n=r=>{if(!r.hasAttribute("copy-code-registered")){const a=document.createElement("button");a.className="copy-code-pure-button",a.innerHTML='',a.addEventListener("click",()=>{(i=>{const c=document.getSelection(),s=!!(c&&c.rangeCount>0)&&c.getRangeAt(0),l=document.createElement("textarea");l.value=i,l.setAttribute("readonly",""),l.style.position="absolute",l.style.top="-9999px",document.body.appendChild(l),l.select(),document.execCommand("copy"),document.body.removeChild(l),s&&c&&(c.removeAllRanges(),c.addRange(s))})(r.innerText)}),a.setAttribute("aria-label",t.value.hint),a.setAttribute("data-balloon-pos","left"),r.parentElement&&r.parentElement.insertBefore(a,r),r.setAttribute("copy-code-registered","")}},o=()=>{const r=qo.selector||'.theme-default-content div[class*="language-"] pre';setTimeout(()=>{typeof r=="string"?document.querySelectorAll(r).forEach(n):Array.isArray(r)&&r.forEach(a=>{document.querySelectorAll(a).forEach(n)})},qo.delay||500)};tt(()=>{new D0,Bc()&&!qo.showInMobile||o()}),Xe(()=>e.path,()=>{Bc()&&!qo.showInMobile||o()})};var M0=Dt({setup:()=>{C0()}});const $0=({headerLinkSelector:e,headerAnchorSelector:t,delay:n,offset:o=5})=>{const r=vn(),i=ci(()=>{var g,b,p,y;const c=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(c-0)d.some(A=>A.hash===P.hash));for(let P=0;P=((b=(g=A.parentElement)==null?void 0:g.offsetTop)!=null?b:0)-o,R=!D||c<((y=(p=D.parentElement)==null?void 0:p.offsetTop)!=null?y:0)-o;if(!(q&&R))continue;const z=decodeURIComponent(r.currentRoute.value.hash),Y=decodeURIComponent(A.hash);if(z===Y)return;if(m){for(let j=P+1;j{window.addEventListener("scroll",i)}),xr(()=>{window.removeEventListener("scroll",i)})},zc=async(e,t)=>{const{scrollBehavior:n}=e.options;e.options.scrollBehavior=void 0,await e.replace({query:e.currentRoute.value.query,hash:t,force:!0}).finally(()=>e.options.scrollBehavior=n)},j0="div.right-menu-item > a",H0=".header-anchor",q0=200,V0=5,N0=Dt({setup(){$0({headerLinkSelector:j0,headerAnchorSelector:H0,delay:q0,offset:V0})}});/*! @docsearch/js 3.2.1 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */function Uc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),n.push.apply(n,o)}return n}function Pe(e){for(var t=1;t=0||(u[s]=i[s]);return u}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function _r(e,t){return function(n){if(Array.isArray(n))return n}(e)||function(n,o){var r=n==null?null:typeof Symbol<"u"&&n[Symbol.iterator]||n["@@iterator"];if(r!=null){var a,i,c=[],s=!0,l=!1;try{for(r=r.call(n);!(s=(a=r.next()).done)&&(c.push(a.value),!o||c.length!==o);s=!0);}catch(u){l=!0,i=u}finally{try{s||r.return==null||r.return()}finally{if(l)throw i}}return c}}(e,t)||ku(e,t)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function vr(e){return function(t){if(Array.isArray(t))return Ia(t)}(e)||function(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}(e)||ku(e)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function ku(e,t){if(e){if(typeof e=="string")return Ia(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set"?Array.from(e):n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ia(e,t):void 0}}function Ia(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n3)for(n=[n],a=3;a0?co(f.type,f.props,f.key,null,f.__v):f)!=null){if(f.__=n,f.__b=n.__b+1,(d=p[u])===null||d&&f.key==d.key&&f.type===d.type)p[u]=void 0;else for(m=0;m3)for(n=[n],a=3;a=n.__.length&&n.__.push({}),n.__[e]}function Uu(e){return kn=1,Wu(Yu,e)}function Wu(e,t,n){var o=Lo(Fn++,2);return o.t=e,o.__c||(o.__=[n?n(t):Yu(void 0,t),function(r){var a=o.t(o.__[0],r);o.__[0]!==a&&(o.__=[a,o.__[1]],o.__c.setState({}))}],o.__c=et),o.__}function Ku(e,t){var n=Lo(Fn++,3);!ae.__s&&vi(n.__H,t)&&(n.__=e,n.__H=t,et.__H.__h.push(n))}function ns(e,t){var n=Lo(Fn++,4);!ae.__s&&vi(n.__H,t)&&(n.__=e,n.__H=t,et.__h.push(n))}function ta(e,t){var n=Lo(Fn++,7);return vi(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function Y0(){Da.forEach(function(e){if(e.__P)try{e.__H.__h.forEach(Go),e.__H.__h.forEach(Ra),e.__H.__h=[]}catch(t){e.__H.__h=[],ae.__e(t,e.__v)}}),Da=[]}ae.__b=function(e){et=null,Gc&&Gc(e)},ae.__r=function(e){Zc&&Zc(e),Fn=0;var t=(et=e.__c).__H;t&&(t.__h.forEach(Go),t.__h.forEach(Ra),t.__h=[])},ae.diffed=function(e){Xc&&Xc(e);var t=e.__c;t&&t.__H&&t.__H.__h.length&&(Da.push(t)!==1&&Qc===ae.requestAnimationFrame||((Qc=ae.requestAnimationFrame)||function(n){var o,r=function(){clearTimeout(a),os&&cancelAnimationFrame(o),setTimeout(n)},a=setTimeout(r,100);os&&(o=requestAnimationFrame(r))})(Y0)),et=void 0},ae.__c=function(e,t){t.some(function(n){try{n.__h.forEach(Go),n.__h=n.__h.filter(function(o){return!o.__||Ra(o)})}catch(o){t.some(function(r){r.__h&&(r.__h=[])}),t=[],ae.__e(o,n.__v)}}),es&&es(e,t)},ae.unmount=function(e){ts&&ts(e);var t=e.__c;if(t&&t.__H)try{t.__H.__.forEach(Go)}catch(n){ae.__e(n,t.__v)}};var os=typeof requestAnimationFrame=="function";function Go(e){var t=et;typeof e.__c=="function"&&e.__c(),et=t}function Ra(e){var t=et;e.__c=e.__(),et=t}function vi(e,t){return!e||e.length!==t.length||t.some(function(n,o){return n!==e[o]})}function Yu(e,t){return typeof t=="function"?t(e):t}function Ju(e,t){for(var n in t)e[n]=t[n];return e}function xa(e,t){for(var n in e)if(n!=="__source"&&!(n in t))return!0;for(var o in t)if(o!=="__source"&&e[o]!==t[o])return!0;return!1}function ka(e){this.props=e}(ka.prototype=new At).isPureReactComponent=!0,ka.prototype.shouldComponentUpdate=function(e,t){return xa(this.props,e)||xa(this.state,t)};var rs=ae.__b;ae.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),rs&&rs(e)};var J0=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.forward_ref")||3911,as=function(e,t){return e==null?null:Ht(Ht(e).map(t))},Q0={map:as,forEach:as,count:function(e){return e?Ht(e).length:0},only:function(e){var t=Ht(e);if(t.length!==1)throw"Children.only";return t[0]},toArray:Ht},G0=ae.__e;function Zo(){this.__u=0,this.t=null,this.__b=null}function Qu(e){var t=e.__.__c;return t&&t.__e&&t.__e(e)}function Xn(){this.u=null,this.o=null}ae.__e=function(e,t,n){if(e.then){for(var o,r=t;r=r.__;)if((o=r.__c)&&o.__c)return t.__e==null&&(t.__e=n.__e,t.__k=n.__k),o.__c(e,t)}G0(e,t,n)},(Zo.prototype=new At).__c=function(e,t){var n=t.__c,o=this;o.t==null&&(o.t=[]),o.t.push(n);var r=Qu(o.__v),a=!1,i=function(){a||(a=!0,n.componentWillUnmount=n.__c,r?r(c):c())};n.__c=n.componentWillUnmount,n.componentWillUnmount=function(){i(),n.__c&&n.__c()};var c=function(){if(!--o.__u){if(o.state.__e){var l=o.state.__e;o.__v.__k[0]=function m(d,f,v){return d&&(d.__v=null,d.__k=d.__k&&d.__k.map(function(g){return m(g,f,v)}),d.__c&&d.__c.__P===f&&(d.__e&&v.insertBefore(d.__e,d.__d),d.__c.__e=!0,d.__c.__P=v)),d}(l,l.__c.__P,l.__c.__O)}var u;for(o.setState({__e:o.__b=null});u=o.t.pop();)u.forceUpdate()}},s=t.__h===!0;o.__u++||s||o.setState({__e:o.__b=o.__v.__k[0]}),e.then(i,i)},Zo.prototype.componentWillUnmount=function(){this.t=[]},Zo.prototype.render=function(e,t){if(this.__b){if(this.__v.__k){var n=document.createElement("div"),o=this.__v.__k[0].__c;this.__v.__k[0]=function a(i,c,s){return i&&(i.__c&&i.__c.__H&&(i.__c.__H.__.forEach(function(l){typeof l.__c=="function"&&l.__c()}),i.__c.__H=null),(i=Ju({},i)).__c!=null&&(i.__c.__P===s&&(i.__c.__P=c),i.__c=null),i.__k=i.__k&&i.__k.map(function(l){return a(l,c,s)})),i}(this.__b,n,o.__O=o.__P)}this.__b=null}var r=t.__e&&Pt(Zt,null,e.fallback);return r&&(r.__h=null),[Pt(Zt,null,t.__e?null:e.children),r]};var is=function(e,t,n){if(++n[1]===n[0]&&e.o.delete(t),e.props.revealOrder&&(e.props.revealOrder[0]!=="t"||!e.o.size))for(n=e.u;n;){for(;n.length>3;)n.pop()();if(n[1]>>1,1),t.i.removeChild(o)}}),bo(Pt(Z0,{context:t.context},e.__v),t.l)):t.l&&t.componentWillUnmount()}function Gu(e,t){return Pt(X0,{__v:e,i:t})}(Xn.prototype=new At).__e=function(e){var t=this,n=Qu(t.__v),o=t.o.get(e);return o[0]++,function(r){var a=function(){t.props.revealOrder?(o.push(r),is(t,e,o)):r()};n?n(a):a()}},Xn.prototype.render=function(e){this.u=null,this.o=new Map;var t=Ht(e.children);e.revealOrder&&e.revealOrder[0]==="b"&&t.reverse();for(var n=t.length;n--;)this.o.set(t[n],this.u=[1,0,this.u]);return e.children},Xn.prototype.componentDidUpdate=Xn.prototype.componentDidMount=function(){var e=this;this.o.forEach(function(t,n){is(e,n,t)})};var Zu=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.element")||60103,e1=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,t1=function(e){return(typeof Symbol<"u"&&vo(Symbol())=="symbol"?/fil|che|rad/i:/fil|che|ra/i).test(e)};function Xu(e,t,n){return t.__k==null&&(t.textContent=""),bo(e,t),typeof n=="function"&&n(),e?e.__c:null}At.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(e){Object.defineProperty(At.prototype,e,{configurable:!0,get:function(){return this["UNSAFE_"+e]},set:function(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:t})}})});var cs=ae.event;function n1(){}function o1(){return this.cancelBubble}function r1(){return this.defaultPrevented}ae.event=function(e){return cs&&(e=cs(e)),e.persist=n1,e.isPropagationStopped=o1,e.isDefaultPrevented=r1,e.nativeEvent=e};var em,ss={configurable:!0,get:function(){return this.class}},ls=ae.vnode;ae.vnode=function(e){var t=e.type,n=e.props,o=n;if(typeof t=="string"){for(var r in o={},n){var a=n[r];r==="value"&&"defaultValue"in n&&a==null||(r==="defaultValue"&&"value"in n&&n.value==null?r="value":r==="download"&&a===!0?a="":/ondoubleclick/i.test(r)?r="ondblclick":/^onchange(textarea|input)/i.test(r+t)&&!t1(n.type)?r="oninput":/^on(Ani|Tra|Tou|BeforeInp)/.test(r)?r=r.toLowerCase():e1.test(r)?r=r.replace(/[A-Z0-9]/,"-$&").toLowerCase():a===null&&(a=void 0),o[r]=a)}t=="select"&&o.multiple&&Array.isArray(o.value)&&(o.value=Ht(n.children).forEach(function(i){i.props.selected=o.value.indexOf(i.props.value)!=-1})),t=="select"&&o.defaultValue!=null&&(o.value=Ht(n.children).forEach(function(i){i.props.selected=o.multiple?o.defaultValue.indexOf(i.props.value)!=-1:o.defaultValue==i.props.value})),e.props=o}t&&n.class!=n.className&&(ss.enumerable="className"in n,n.className!=null&&(o.class=n.className),Object.defineProperty(o,"className",ss)),e.$$typeof=Zu,ls&&ls(e)};var us=ae.__r;ae.__r=function(e){us&&us(e),em=e.__c};var a1={ReactCurrentDispatcher:{current:{readContext:function(e){return em.__n[e.__c].props.value}}}};(typeof performance>"u"?"undefined":vo(performance))=="object"&&typeof performance.now=="function"&&performance.now.bind(performance);function ms(e){return!!e&&e.$$typeof===Zu}var O={useState:Uu,useReducer:Wu,useEffect:Ku,useLayoutEffect:ns,useRef:function(e){return kn=5,ta(function(){return{current:e}},[])},useImperativeHandle:function(e,t,n){kn=6,ns(function(){typeof e=="function"?e(t()):e&&(e.current=t())},n==null?n:n.concat(e))},useMemo:ta,useCallback:function(e,t){return kn=8,ta(function(){return e},t)},useContext:function(e){var t=et.context[e.__c],n=Lo(Fn++,9);return n.__c=e,t?(n.__==null&&(n.__=!0,t.sub(et)),t.props.value):e.__},useDebugValue:function(e,t){ae.useDebugValue&&ae.useDebugValue(t?t(e):e)},version:"16.8.0",Children:Q0,render:Xu,hydrate:function(e,t,n){return zu(e,t),typeof n=="function"&&n(),e?e.__c:null},unmountComponentAtNode:function(e){return!!e.__k&&(bo(null,e),!0)},createPortal:Gu,createElement:Pt,createContext:function(e,t){var n={__c:t="__cC"+Mu++,__:e,Consumer:function(o,r){return o.children(r)},Provider:function(o){var r,a;return this.getChildContext||(r=[],(a={})[t]=this,this.getChildContext=function(){return a},this.shouldComponentUpdate=function(i){this.props.value!==i.value&&r.some(La)},this.sub=function(i){r.push(i);var c=i.componentWillUnmount;i.componentWillUnmount=function(){r.splice(r.indexOf(i),1),c&&c.call(i)}}),o.children}};return n.Provider.__=n.Consumer.contextType=n},createFactory:function(e){return Pt.bind(null,e)},cloneElement:function(e){return ms(e)?K0.apply(null,arguments):e},createRef:function(){return{current:null}},Fragment:Zt,isValidElement:ms,findDOMNode:function(e){return e&&(e.base||e.nodeType===1&&e)||null},Component:At,PureComponent:ka,memo:function(e,t){function n(r){var a=this.props.ref,i=a==r.ref;return!i&&a&&(a.call?a(null):a.current=null),t?!t(this.props,r)||!i:xa(this.props,r)}function o(r){return this.shouldComponentUpdate=n,Pt(e,r)}return o.displayName="Memo("+(e.displayName||e.name)+")",o.prototype.isReactComponent=!0,o.__f=!0,o},forwardRef:function(e){function t(n,o){var r=Ju({},n);return delete r.ref,e(r,(o=n.ref||o)&&(vo(o)!="object"||"current"in o)?o:null)}return t.$$typeof=J0,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName="ForwardRef("+(e.displayName||e.name)+")",t},unstable_batchedUpdates:function(e,t){return e(t)},StrictMode:Zt,Suspense:Zo,SuspenseList:Xn,lazy:function(e){var t,n,o;function r(a){if(t||(t=e()).then(function(i){n=i.default||i},function(i){o=i}),o)throw o;if(!n)throw t;return Pt(n,a)}return r.displayName="Lazy",r.__f=!0,r},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:a1};function i1(){return O.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},O.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}function tm(){return O.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},O.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}var c1=["translations"];function Ca(){return Ca=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,o=new Array(t);n=0||(u[s]=i[s]);return u}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var u1=O.forwardRef(function(e,t){var n=e.translations,o=n===void 0?{}:n,r=l1(e,c1),a=o.buttonText,i=a===void 0?"Search":a,c=o.buttonAriaLabel,s=c===void 0?"Search":c,l=s1(Uu(null),2),u=l[0],m=l[1];return Ku(function(){typeof navigator<"u"&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?m("\u2318"):m("Ctrl"))},[]),O.createElement("button",Ca({type:"button",className:"DocSearch DocSearch-Button","aria-label":s},r,{ref:t}),O.createElement("span",{className:"DocSearch-Button-Container"},O.createElement(tm,null),O.createElement("span",{className:"DocSearch-Button-Placeholder"},i)),O.createElement("span",{className:"DocSearch-Button-Keys"},u!==null&&O.createElement(O.Fragment,null,O.createElement("kbd",{className:"DocSearch-Button-Key"},u==="Ctrl"?O.createElement(i1,null):u),O.createElement("kbd",{className:"DocSearch-Button-Key"},"K"))))});function yo(e){return e.reduce(function(t,n){return t.concat(n)},[])}var m1=0;function Ma(e){return e.collections.length===0?0:e.collections.reduce(function(t,n){return t+n.items.length},0)}var nm=function(){},d1=[{segment:"autocomplete-core",version:"1.7.1"}];function Xo(e,t){var n=t;return{then:function(o,r){return Xo(e.then(No(o,n,e),No(r,n,e)),n)},catch:function(o){return Xo(e.catch(No(o,n,e)),n)},finally:function(o){return o&&n.onCancelList.push(o),Xo(e.finally(No(o&&function(){return n.onCancelList=[],o()},n,e)),n)},cancel:function(){n.isCanceled=!0;var o=n.onCancelList;n.onCancelList=[],o.forEach(function(r){r()})},isCanceled:function(){return n.isCanceled===!0}}}function fs(e){return Xo(e,{isCanceled:!1,onCancelList:[]})}function No(e,t,n){return e?function(o){return t.isCanceled?o:e(o)}:n}function hs(e,t,n,o){if(!n)return null;if(e<0&&(t===null||o!==null&&t===0))return n+e;var r=(t===null?-1:t)+e;return r<=-1||r>=n?o===null?null:0:r}function ps(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),n.push.apply(n,o)}return n}function f1(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function h1(e,t){var n=[];return Promise.resolve(e(t)).then(function(o){return Promise.all(o.filter(function(r){return Boolean(r)}).map(function(r){if(r.sourceId,n.includes(r.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(r.sourceId)," is not unique."));n.push(r.sourceId);var a=function(i){for(var c=1;ce.length)&&(t=e.length);for(var n=0,o=new Array(t);ne.length)&&(t=e.length);for(var n=0,o=new Array(t);n=0||(u[s]=i[s]);return u}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var Ps,ra,Wo,Qn=null,Ss=(Ps=-1,ra=-1,Wo=void 0,function(e){var t=++Ps;return Promise.resolve(e).then(function(n){return Wo&&t=0||(u[s]=i[s]);return u}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var x1=["props","refresh","store"],C1=["inputElement","formElement","panelElement"],M1=["inputElement"],$1=["inputElement","maxLength"],j1=["item","source"];function Ts(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),n.push.apply(n,o)}return n}function Je(e){for(var t=1;t=0||(u[s]=i[s]);return u}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function q1(e){var t=e.props,n=e.refresh,o=e.store,r=Gn(e,x1);return{getEnvironmentProps:function(a){var i=a.inputElement,c=a.formElement,s=a.panelElement;function l(u){!o.getState().isOpen&&o.pendingRequests.isEmpty()||u.target===i||[c,s].some(function(m){return d=m,f=u.target,d===f||d.contains(f);var d,f})===!1&&(o.dispatch("blur",null),t.debug||o.pendingRequests.cancelAll())}return Je({onTouchStart:l,onMouseDown:l,onTouchMove:function(u){o.getState().isOpen!==!1&&i===t.environment.document.activeElement&&u.target!==i&&i.blur()}},Gn(a,C1))},getRootProps:function(a){return Je({role:"combobox","aria-expanded":o.getState().isOpen,"aria-haspopup":"listbox","aria-owns":o.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},a)},getFormProps:function(a){return a.inputElement,Je({action:"",noValidate:!0,role:"search",onSubmit:function(i){var c;i.preventDefault(),t.onSubmit(Je({event:i,refresh:n,state:o.getState()},r)),o.dispatch("submit",null),(c=a.inputElement)===null||c===void 0||c.blur()},onReset:function(i){var c;i.preventDefault(),t.onReset(Je({event:i,refresh:n,state:o.getState()},r)),o.dispatch("reset",null),(c=a.inputElement)===null||c===void 0||c.focus()}},Gn(a,M1))},getLabelProps:function(a){return Je({htmlFor:"".concat(t.id,"-input"),id:"".concat(t.id,"-label")},a)},getInputProps:function(a){var i;function c(g){(t.openOnFocus||Boolean(o.getState().query))&&Sn(Je({event:g,props:t,query:o.getState().completion||o.getState().query,refresh:n,store:o},r)),o.dispatch("focus",null)}var s=a||{},l=(s.inputElement,s.maxLength),u=l===void 0?512:l,m=Gn(s,$1),d=An(o.getState()),f=function(g){return Boolean(g&&g.match(p1))}(((i=t.environment.navigator)===null||i===void 0?void 0:i.userAgent)||""),v=d!=null&&d.itemUrl&&!f?"go":"search";return Je({"aria-autocomplete":"both","aria-activedescendant":o.getState().isOpen&&o.getState().activeItemId!==null?"".concat(t.id,"-item-").concat(o.getState().activeItemId):void 0,"aria-controls":o.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:o.getState().completion||o.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:v,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:u,type:"search",onChange:function(g){Sn(Je({event:g,props:t,query:g.currentTarget.value.slice(0,u),refresh:n,store:o},r))},onKeyDown:function(g){(function(b){var p=b.event,y=b.props,P=b.refresh,A=b.store,D=k1(b,D1);if(p.key==="ArrowUp"||p.key==="ArrowDown"){var q=function(){var T=y.environment.document.getElementById("".concat(y.id,"-item-").concat(A.getState().activeItemId));T&&(T.scrollIntoViewIfNeeded?T.scrollIntoViewIfNeeded(!1):T.scrollIntoView(!1))},R=function(){var T=An(A.getState());if(A.getState().activeItemId!==null&&T){var k=T.item,M=T.itemInputValue,$=T.itemUrl,K=T.source;K.onActive(on({event:p,item:k,itemInputValue:M,itemUrl:$,refresh:P,source:K,state:A.getState()},D))}};p.preventDefault(),A.getState().isOpen===!1&&(y.openOnFocus||Boolean(A.getState().query))?Sn(on({event:p,props:y,query:A.getState().query,refresh:P,store:A},D)).then(function(){A.dispatch(p.key,{nextActiveItemId:y.defaultActiveItemId}),R(),setTimeout(q,0)}):(A.dispatch(p.key,{}),R(),q())}else if(p.key==="Escape")p.preventDefault(),A.dispatch(p.key,null),A.pendingRequests.cancelAll();else if(p.key==="Tab")A.dispatch("blur",null),A.pendingRequests.cancelAll();else if(p.key==="Enter"){if(A.getState().activeItemId===null||A.getState().collections.every(function(T){return T.items.length===0}))return void(y.debug||A.pendingRequests.cancelAll());p.preventDefault();var E=An(A.getState()),z=E.item,Y=E.itemInputValue,j=E.itemUrl,S=E.source;if(p.metaKey||p.ctrlKey)j!==void 0&&(S.onSelect(on({event:p,item:z,itemInputValue:Y,itemUrl:j,refresh:P,source:S,state:A.getState()},D)),y.navigator.navigateNewTab({itemUrl:j,item:z,state:A.getState()}));else if(p.shiftKey)j!==void 0&&(S.onSelect(on({event:p,item:z,itemInputValue:Y,itemUrl:j,refresh:P,source:S,state:A.getState()},D)),y.navigator.navigateNewWindow({itemUrl:j,item:z,state:A.getState()}));else if(!p.altKey){if(j!==void 0)return S.onSelect(on({event:p,item:z,itemInputValue:Y,itemUrl:j,refresh:P,source:S,state:A.getState()},D)),void y.navigator.navigate({itemUrl:j,item:z,state:A.getState()});Sn(on({event:p,nextState:{isOpen:!1},props:y,query:Y,refresh:P,store:A},D)).then(function(){S.onSelect(on({event:p,item:z,itemInputValue:Y,itemUrl:j,refresh:P,source:S,state:A.getState()},D))})}}})(Je({event:g,props:t,refresh:n,store:o},r))},onFocus:c,onBlur:nm,onClick:function(g){a.inputElement!==t.environment.document.activeElement||o.getState().isOpen||c(g)}},m)},getPanelProps:function(a){return Je({onMouseDown:function(i){i.preventDefault()},onMouseLeave:function(){o.dispatch("mouseleave",null)}},a)},getListProps:function(a){return Je({role:"listbox","aria-labelledby":"".concat(t.id,"-label"),id:"".concat(t.id,"-list")},a)},getItemProps:function(a){var i=a.item,c=a.source,s=Gn(a,j1);return Je({id:"".concat(t.id,"-item-").concat(i.__autocomplete_id),role:"option","aria-selected":o.getState().activeItemId===i.__autocomplete_id,onMouseMove:function(l){if(i.__autocomplete_id!==o.getState().activeItemId){o.dispatch("mousemove",i.__autocomplete_id);var u=An(o.getState());if(o.getState().activeItemId!==null&&u){var m=u.item,d=u.itemInputValue,f=u.itemUrl,v=u.source;v.onActive(Je({event:l,item:m,itemInputValue:d,itemUrl:f,refresh:n,source:v,state:o.getState()},r))}}},onMouseDown:function(l){l.preventDefault()},onClick:function(l){var u=c.getItemInputValue({item:i,state:o.getState()}),m=c.getItemUrl({item:i,state:o.getState()});(m?Promise.resolve():Sn(Je({event:l,nextState:{isOpen:!1},props:t,query:u,refresh:n,store:o},r))).then(function(){c.onSelect(Je({event:l,item:i,itemInputValue:u,itemUrl:m,refresh:n,source:c,state:o.getState()},r))})}},s)}}}function Is(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),n.push.apply(n,o)}return n}function V1(e){for(var t=1;t0},reshape:function(d){return d.sources}},c),{},{id:(l=c.id)!==null&&l!==void 0?l:"autocomplete-".concat(m1++),plugins:m,initialState:En({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},c.initialState),onStateChange:function(d){var f;(f=c.onStateChange)===null||f===void 0||f.call(c,d),m.forEach(function(v){var g;return(g=v.onStateChange)===null||g===void 0?void 0:g.call(v,d)})},onSubmit:function(d){var f;(f=c.onSubmit)===null||f===void 0||f.call(c,d),m.forEach(function(v){var g;return(g=v.onSubmit)===null||g===void 0?void 0:g.call(v,d)})},onReset:function(d){var f;(f=c.onReset)===null||f===void 0||f.call(c,d),m.forEach(function(v){var g;return(g=v.onReset)===null||g===void 0?void 0:g.call(v,d)})},getSources:function(d){return Promise.all([].concat(y1(m.map(function(f){return f.getSources})),[c.getSources]).filter(Boolean).map(function(f){return h1(f,d)})).then(function(f){return yo(f)}).then(function(f){return f.map(function(v){return En(En({},v),{},{onSelect:function(g){v.onSelect(g),s.forEach(function(b){var p;return(p=b.onSelect)===null||p===void 0?void 0:p.call(b,g)})},onActive:function(g){v.onActive(g),s.forEach(function(b){var p;return(p=b.onActive)===null||p===void 0?void 0:p.call(b,g)})}})})})},navigator:En({navigate:function(d){var f=d.itemUrl;u.location.assign(f)},navigateNewTab:function(d){var f=d.itemUrl,v=u.open(f,"_blank","noopener");v==null||v.focus()},navigateNewWindow:function(d){var f=d.itemUrl;u.open(f,"_blank","noopener")}},c.navigator)})}(e,t),o=g1(B1,n,function(c){var s=c.prevState,l=c.state;n.onStateChange(rn({prevState:s,state:l,refresh:i},r))}),r=function(c){var s=c.store;return{setActiveItemId:function(l){s.dispatch("setActiveItemId",l)},setQuery:function(l){s.dispatch("setQuery",l)},setCollections:function(l){var u=0,m=l.map(function(d){return Bo(Bo({},d),{},{items:yo(d.items).map(function(f){return Bo(Bo({},f),{},{__autocomplete_id:u++})})})});s.dispatch("setCollections",m)},setIsOpen:function(l){s.dispatch("setIsOpen",l)},setStatus:function(l){s.dispatch("setStatus",l)},setContext:function(l){s.dispatch("setContext",l)}}}({store:o}),a=q1(rn({props:n,refresh:i,store:o},r));function i(){return Sn(rn({event:new Event("input"),nextState:{isOpen:o.getState().isOpen},props:n,query:o.getState().query,refresh:i,store:o},r))}return n.plugins.forEach(function(c){var s;return(s=c.subscribe)===null||s===void 0?void 0:s.call(c,rn(rn({},r),{},{refresh:i,onSelect:function(l){t.push({onSelect:l})},onActive:function(l){t.push({onActive:l})}}))}),function(c){var s,l,u=c.metadata,m=c.environment;if(!((s=m.navigator)===null||s===void 0||(l=s.userAgent)===null||l===void 0)&&l.includes("Algolia Crawler")){var d=m.document.createElement("meta"),f=m.document.querySelector("head");d.name="algolia:metadata",setTimeout(function(){d.content=JSON.stringify(u),f.appendChild(d)},0)}}({metadata:N1({plugins:n.plugins,options:e}),environment:n.environment}),rn(rn({refresh:i},a),r)}function W1(e){var t=e.translations,n=(t===void 0?{}:t).searchByText,o=n===void 0?"Search by":n;return O.createElement("a",{href:"https://www.algolia.com/ref/docsearch/?utm_source=".concat(window.location.hostname,"&utm_medium=referral&utm_content=powered_by&utm_campaign=docsearch"),target:"_blank",rel:"noopener noreferrer"},O.createElement("span",{className:"DocSearch-Label"},o),O.createElement("svg",{width:"77",height:"19","aria-label":"Algolia",role:"img"},O.createElement("path",{d:"M2.5067 0h14.0245c1.384.001 2.5058 1.1205 2.5068 2.5017V16.5c-.0014 1.3808-1.1232 2.4995-2.5068 2.5H2.5067C1.1232 18.9995.0014 17.8808 0 16.5V2.4958A2.495 2.495 0 01.735.7294 2.505 2.505 0 012.5068 0zM37.95 15.0695c-3.7068.0168-3.7068-2.986-3.7068-3.4634L34.2372.3576 36.498 0v11.1794c0 .2715 0 1.9889 1.452 1.994v1.8961zm-9.1666-1.8388c.694 0 1.2086-.0397 1.5678-.1088v-2.2934a5.3639 5.3639 0 00-1.3303-.1679 4.8283 4.8283 0 00-.758.0582 2.2845 2.2845 0 00-.688.2024c-.2029.0979-.371.2362-.4919.4142-.1268.1788-.185.2826-.185.5533 0 .5297.185.8359.5205 1.0375.3355.2016.7928.3053 1.365.3053v-.0008zm-.1969-8.1817c.7463 0 1.3768.092 1.8856.2767.5088.1838.9195.4428 1.2204.7717.3068.334.5147.7777.6423 1.251.1327.4723.196.991.196 1.5603v5.798c-.5235.1036-1.05.192-1.5787.2649-.7048.1037-1.4976.156-2.3774.156-.5832 0-1.1215-.0582-1.6016-.167a3.385 3.385 0 01-1.2432-.5364 2.6034 2.6034 0 01-.8037-.9565c-.191-.3922-.29-.9447-.29-1.5208 0-.5533.11-.905.3246-1.2863a2.7351 2.7351 0 01.8849-.9329c.376-.242.8029-.415 1.2948-.5187a7.4517 7.4517 0 011.5381-.156 7.1162 7.1162 0 011.6667.2024V8.886c0-.259-.0296-.5061-.093-.7372a1.5847 1.5847 0 00-.3245-.6158 1.5079 1.5079 0 00-.6119-.4158 2.6788 2.6788 0 00-.966-.173c-.5206 0-.9948.0634-1.4283.1384a6.5481 6.5481 0 00-1.065.259l-.2712-1.849c.2831-.0986.7048-.1964 1.2491-.2943a9.2979 9.2979 0 011.752-.1501v.0008zm44.6597 8.1193c.6947 0 1.2086-.0405 1.567-.1097v-2.2942a5.3743 5.3743 0 00-1.3303-.1679c-.2485 0-.503.0177-.7573.0582a2.2853 2.2853 0 00-.688.2024 1.2333 1.2333 0 00-.4918.4142c-.1268.1788-.1843.2826-.1843.5533 0 .5297.1843.8359.5198 1.0375.3414.2066.7927.3053 1.365.3053v.0009zm-.191-8.1767c.7463 0 1.3768.0912 1.8856.2759.5087.1847.9195.4436 1.2204.7717.3.329.5147.7786.6414 1.251a5.7248 5.7248 0 01.197 1.562v5.7972c-.3466.0742-.874.1602-1.5788.2648-.7049.1038-1.4976.1552-2.3774.1552-.5832 0-1.1215-.0573-1.6016-.167a3.385 3.385 0 01-1.2432-.5356 2.6034 2.6034 0 01-.8038-.9565c-.191-.3922-.2898-.9447-.2898-1.5216 0-.5533.1098-.905.3245-1.2854a2.7373 2.7373 0 01.8849-.9338c.376-.2412.8029-.4141 1.2947-.5178a7.4545 7.4545 0 012.325-.1097c.2781.0287.5672.081.879.156v-.3686a2.7781 2.7781 0 00-.092-.738 1.5788 1.5788 0 00-.3246-.6166 1.5079 1.5079 0 00-.612-.415 2.6797 2.6797 0 00-.966-.1729c-.5205 0-.9947.0633-1.4282.1384a6.5608 6.5608 0 00-1.065.259l-.2712-1.8498c.283-.0979.7048-.1957 1.2491-.2935a9.8597 9.8597 0 011.752-.1494zm-6.79-1.072c-.7576.001-1.373-.6103-1.3759-1.3664 0-.755.6128-1.3664 1.376-1.3664.764 0 1.3775.6115 1.3775 1.3664s-.6195 1.3664-1.3776 1.3664zm1.1393 11.1507h-2.2726V5.3409l2.2734-.3568v10.0845l-.0008.0017zm-3.984 0c-3.707.0168-3.707-2.986-3.707-3.4642L59.7069.3576 61.9685 0v11.1794c0 .2715 0 1.9889 1.452 1.994V15.0703zm-7.3512-4.979c0-.975-.2138-1.7873-.6305-2.3516-.4167-.571-.9998-.852-1.747-.852-.7454 0-1.3302.281-1.7452.852-.4166.5702-.6195 1.3765-.6195 2.3516 0 .9851.208 1.6473.6254 2.2183.4158.576.9998.8587 1.7461.8587.7454 0 1.3303-.2885 1.747-.8595.4158-.5761.6237-1.2315.6237-2.2184v.0009zm2.3132-.006c0 .7609-.1099 1.3361-.3356 1.9654a4.654 4.654 0 01-.9533 1.6076A4.214 4.214 0 0155.613 14.69c-.579.2412-1.4697.3795-1.9143.3795-.4462-.005-1.3303-.1324-1.9033-.3795a4.307 4.307 0 01-1.474-1.0316c-.4115-.4445-.7293-.9801-.9609-1.6076a5.3423 5.3423 0 01-.3465-1.9653c0-.7608.104-1.493.3356-2.1155a4.683 4.683 0 01.9719-1.5958 4.3383 4.3383 0 011.479-1.0257c.5739-.242 1.2043-.3567 1.8864-.3567.6829 0 1.3125.1197 1.8906.3567a4.1245 4.1245 0 011.4816 1.0257 4.7587 4.7587 0 01.9592 1.5958c.2426.6225.3643 1.3547.3643 2.1155zm-17.0198 0c0 .9448.208 1.9932.6238 2.431.4166.4386.955.6579 1.6142.6579.3584 0 .6998-.0523 1.0176-.1502.3186-.0978.5721-.2134.775-.3517V7.0784a8.8706 8.8706 0 00-1.4926-.1906c-.8206-.0236-1.4452.312-1.8847.8468-.4335.5365-.6533 1.476-.6533 2.3516v-.0008zm6.2863 4.4485c0 1.5385-.3938 2.662-1.1866 3.3773-.791.7136-2.0005 1.0712-3.6308 1.0712-.5958 0-1.834-.1156-2.8228-.334l.3643-1.7865c.8282.173 1.9202.2193 2.4932.2193.9077 0 1.555-.1847 1.943-.5533.388-.3686.578-.916.578-1.643v-.3687a6.8289 6.8289 0 01-.8848.3349c-.3634.1096-.786.167-1.261.167-.6246 0-1.1917-.0979-1.7055-.2944a3.5554 3.5554 0 01-1.3244-.8645c-.3642-.3796-.6541-.8579-.8561-1.4289-.2028-.571-.3068-1.59-.3068-2.339 0-.7034.1099-1.5856.3245-2.1735.2198-.5871.5316-1.0949.9542-1.515.4167-.42.9255-.743 1.5213-.98a5.5923 5.5923 0 012.052-.3855c.7353 0 1.4114.092 2.0707.2024.6592.1088 1.2204.2236 1.6776.35v8.945-.0008zM11.5026 4.2418v-.6511c-.0005-.4553-.3704-.8241-.8266-.8241H8.749c-.4561 0-.826.3688-.8265.824v.669c0 .0742.0693.1264.1445.1096a6.0346 6.0346 0 011.6768-.2362 6.125 6.125 0 011.6202.2185.1116.1116 0 00.1386-.1097zm-5.2806.852l-.3296-.3282a.8266.8266 0 00-1.168 0l-.393.3922a.8199.8199 0 000 1.164l.3237.323c.0524.0515.1268.0397.1733-.0117.191-.259.3989-.507.6305-.7372.2374-.2362.48-.4437.7462-.6335.0575-.0354.0634-.1155.017-.1687zm3.5159 2.069v2.818c0 .081.0879.1392.1622.0987l2.5102-1.2964c.0574-.0287.0752-.0987.0464-.1552a3.1237 3.1237 0 00-2.603-1.574c-.0575 0-.115.0456-.115.1097l-.0008-.0009zm.0008 6.789c-2.0933.0005-3.7915-1.6912-3.7947-3.7804C5.9468 8.0821 7.6452 6.39 9.7387 6.391c2.0932-.0005 3.7911 1.6914 3.794 3.7804a3.7783 3.7783 0 01-1.1124 2.675 3.7936 3.7936 0 01-2.6824 1.1054h.0008zM9.738 4.8002c-1.9218 0-3.6975 1.0232-4.6584 2.6841a5.359 5.359 0 000 5.3683c.9609 1.661 2.7366 2.6841 4.6584 2.6841a5.3891 5.3891 0 003.8073-1.5725 5.3675 5.3675 0 001.578-3.7987 5.3574 5.3574 0 00-1.5771-3.797A5.379 5.379 0 009.7387 4.801l-.0008-.0008z",fill:"currentColor",fillRule:"evenodd"})))}function Ko(e){return O.createElement("svg",{width:"15",height:"15","aria-label":e.ariaLabel,role:"img"},O.createElement("g",{fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"1.2"},e.children))}function K1(e){var t=e.translations,n=t===void 0?{}:t,o=n.selectText,r=o===void 0?"to select":o,a=n.selectKeyAriaLabel,i=a===void 0?"Enter key":a,c=n.navigateText,s=c===void 0?"to navigate":c,l=n.navigateUpKeyAriaLabel,u=l===void 0?"Arrow up":l,m=n.navigateDownKeyAriaLabel,d=m===void 0?"Arrow down":m,f=n.closeText,v=f===void 0?"to close":f,g=n.closeKeyAriaLabel,b=g===void 0?"Escape key":g,p=n.searchByText,y=p===void 0?"Search by":p;return O.createElement(O.Fragment,null,O.createElement("div",{className:"DocSearch-Logo"},O.createElement(W1,{translations:{searchByText:y}})),O.createElement("ul",{className:"DocSearch-Commands"},O.createElement("li",null,O.createElement("kbd",{className:"DocSearch-Commands-Key"},O.createElement(Ko,{ariaLabel:i},O.createElement("path",{d:"M12 3.53088v3c0 1-1 2-2 2H4M7 11.53088l-3-3 3-3"}))),O.createElement("span",{className:"DocSearch-Label"},r)),O.createElement("li",null,O.createElement("kbd",{className:"DocSearch-Commands-Key"},O.createElement(Ko,{ariaLabel:d},O.createElement("path",{d:"M7.5 3.5v8M10.5 8.5l-3 3-3-3"}))),O.createElement("kbd",{className:"DocSearch-Commands-Key"},O.createElement(Ko,{ariaLabel:u},O.createElement("path",{d:"M7.5 11.5v-8M10.5 6.5l-3-3-3 3"}))),O.createElement("span",{className:"DocSearch-Label"},s)),O.createElement("li",null,O.createElement("kbd",{className:"DocSearch-Commands-Key"},O.createElement(Ko,{ariaLabel:b},O.createElement("path",{d:"M13.6167 8.936c-.1065.3583-.6883.962-1.4875.962-.7993 0-1.653-.9165-1.653-2.1258v-.5678c0-1.2548.7896-2.1016 1.653-2.1016.8634 0 1.3601.4778 1.4875 1.0724M9 6c-.1352-.4735-.7506-.9219-1.46-.8972-.7092.0246-1.344.57-1.344 1.2166s.4198.8812 1.3445.9805C8.465 7.3992 8.968 7.9337 9 8.5c.032.5663-.454 1.398-1.4595 1.398C6.6593 9.898 6 9 5.963 8.4851m-1.4748.5368c-.2635.5941-.8099.876-1.5443.876s-1.7073-.6248-1.7073-2.204v-.4603c0-1.0416.721-2.131 1.7073-2.131.9864 0 1.6425 1.031 1.5443 2.2492h-2.956"}))),O.createElement("span",{className:"DocSearch-Label"},v))))}function Y1(e){var t=e.hit,n=e.children;return O.createElement("a",{href:t.url},n)}function J1(){return O.createElement("svg",{viewBox:"0 0 38 38",stroke:"currentColor",strokeOpacity:".5"},O.createElement("g",{fill:"none",fillRule:"evenodd"},O.createElement("g",{transform:"translate(1 1)",strokeWidth:"2"},O.createElement("circle",{strokeOpacity:".3",cx:"18",cy:"18",r:"18"}),O.createElement("path",{d:"M36 18c0-9.94-8.06-18-18-18"},O.createElement("animateTransform",{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"1s",repeatCount:"indefinite"})))))}function Q1(){return O.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},O.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},O.createElement("path",{d:"M3.18 6.6a8.23 8.23 0 1112.93 9.94h0a8.23 8.23 0 01-11.63 0"}),O.createElement("path",{d:"M6.44 7.25H2.55V3.36M10.45 6v5.6M10.45 11.6L13 13"})))}function $a(){return O.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},O.createElement("path",{d:"M10 10l5.09-5.09L10 10l5.09 5.09L10 10zm0 0L4.91 4.91 10 10l-5.09 5.09L10 10z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}function G1(){return O.createElement("svg",{className:"DocSearch-Hit-Select-Icon",width:"20",height:"20",viewBox:"0 0 20 20"},O.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},O.createElement("path",{d:"M18 3v4c0 2-2 4-4 4H2"}),O.createElement("path",{d:"M8 17l-6-6 6-6"})))}var Z1=function(){return O.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},O.createElement("path",{d:"M17 6v12c0 .52-.2 1-1 1H4c-.7 0-1-.33-1-1V2c0-.55.42-1 1-1h8l5 5zM14 8h-3.13c-.51 0-.87-.34-.87-.87V4",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))};function X1(e){switch(e.type){case"lvl1":return O.createElement(Z1,null);case"content":return O.createElement(tb,null);default:return O.createElement(eb,null)}}function eb(){return O.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},O.createElement("path",{d:"M13 13h4-4V8H7v5h6v4-4H7V8H3h4V3v5h6V3v5h4-4v5zm-6 0v4-4H3h4z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}function tb(){return O.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},O.createElement("path",{d:"M17 5H3h14zm0 5H3h14zm0 5H3h14z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))}function ks(){return O.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},O.createElement("path",{d:"M10 14.2L5 17l1-5.6-4-4 5.5-.7 2.5-5 2.5 5 5.6.8-4 4 .9 5.5z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))}function nb(){return O.createElement("svg",{width:"40",height:"40",viewBox:"0 0 20 20",fill:"none",fillRule:"evenodd",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"},O.createElement("path",{d:"M19 4.8a16 16 0 00-2-1.2m-3.3-1.2A16 16 0 001.1 4.7M16.7 8a12 12 0 00-2.8-1.4M10 6a12 12 0 00-6.7 2M12.3 14.7a4 4 0 00-4.5 0M14.5 11.4A8 8 0 0010 10M3 16L18 2M10 18h0"}))}function ob(){return O.createElement("svg",{width:"40",height:"40",viewBox:"0 0 20 20",fill:"none",fillRule:"evenodd",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"},O.createElement("path",{d:"M15.5 4.8c2 3 1.7 7-1 9.7h0l4.3 4.3-4.3-4.3a7.8 7.8 0 01-9.8 1m-2.2-2.2A7.8 7.8 0 0113.2 2.4M2 18L18 2"}))}function rb(e){var t=e.translations,n=t===void 0?{}:t,o=n.titleText,r=o===void 0?"Unable to fetch results":o,a=n.helpText,i=a===void 0?"You might want to check your network connection.":a;return O.createElement("div",{className:"DocSearch-ErrorScreen"},O.createElement("div",{className:"DocSearch-Screen-Icon"},O.createElement(nb,null)),O.createElement("p",{className:"DocSearch-Title"},r),O.createElement("p",{className:"DocSearch-Help"},i))}var ab=["translations"];function ib(e){return function(t){if(Array.isArray(t))return aa(t)}(e)||function(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}(e)||function(t,n){if(!!t){if(typeof t=="string")return aa(t,n);var o=Object.prototype.toString.call(t).slice(8,-1);if(o==="Object"&&t.constructor&&(o=t.constructor.name),o==="Map"||o==="Set")return Array.from(t);if(o==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o))return aa(t,n)}}(e)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function aa(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n=0||(u[s]=i[s]);return u}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function sb(e){var t=e.translations,n=t===void 0?{}:t,o=cb(e,ab),r=n.noResultsText,a=r===void 0?"No results for":r,i=n.suggestedQueryText,c=i===void 0?"Try searching for":i,s=n.reportMissingResultsText,l=s===void 0?"Believe this query should return results?":s,u=n.reportMissingResultsLinkText,m=u===void 0?"Let us know.":u,d=o.state.context.searchSuggestions;return O.createElement("div",{className:"DocSearch-NoResults"},O.createElement("div",{className:"DocSearch-Screen-Icon"},O.createElement(ob,null)),O.createElement("p",{className:"DocSearch-Title"},a,' "',O.createElement("strong",null,o.state.query),'"'),d&&d.length>0&&O.createElement("div",{className:"DocSearch-NoResults-Prefill-List"},O.createElement("p",{className:"DocSearch-Help"},c,":"),O.createElement("ul",null,d.slice(0,3).reduce(function(f,v){return[].concat(ib(f),[O.createElement("li",{key:v},O.createElement("button",{className:"DocSearch-Prefill",key:v,type:"button",onClick:function(){o.setQuery(v.toLowerCase()+" "),o.refresh(),o.inputRef.current.focus()}},v))])},[]))),o.getMissingResultsUrl&&O.createElement("p",{className:"DocSearch-Help"},"".concat(l," "),O.createElement("a",{href:o.getMissingResultsUrl({query:o.state.query}),target:"_blank",rel:"noopener noreferrer"},m)))}var lb=["hit","attribute","tagName"];function xs(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),n.push.apply(n,o)}return n}function Cs(e){for(var t=1;t=0||(u[s]=i[s]);return u}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function Ms(e,t){return t.split(".").reduce(function(n,o){return n!=null&&n[o]?n[o]:null},e)}function wn(e){var t=e.hit,n=e.attribute,o=e.tagName;return Pt(o===void 0?"span":o,Cs(Cs({},mb(e,lb)),{},{dangerouslySetInnerHTML:{__html:Ms(t,"_snippetResult.".concat(n,".value"))||Ms(t,n)}}))}function $s(e,t){return function(n){if(Array.isArray(n))return n}(e)||function(n,o){var r=n==null?null:typeof Symbol<"u"&&n[Symbol.iterator]||n["@@iterator"];if(r!=null){var a,i,c=[],s=!0,l=!1;try{for(r=r.call(n);!(s=(a=r.next()).done)&&(c.push(a.value),!o||c.length!==o);s=!0);}catch(u){l=!0,i=u}finally{try{s||r.return==null||r.return()}finally{if(l)throw i}}return c}}(e,t)||function(n,o){if(!!n){if(typeof n=="string")return js(n,o);var r=Object.prototype.toString.call(n).slice(8,-1);if(r==="Object"&&n.constructor&&(r=n.constructor.name),r==="Map"||r==="Set")return Array.from(n);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return js(n,o)}}(e,t)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function js(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n|<\/mark>)/g,hb=RegExp(am.source);function im(e){var t,n,o,r,a,i=e;if(!i.__docsearch_parent&&!e._highlightResult)return e.hierarchy.lvl0;var c=((i.__docsearch_parent?(t=i.__docsearch_parent)===null||t===void 0||(n=t._highlightResult)===null||n===void 0||(o=n.hierarchy)===null||o===void 0?void 0:o.lvl0:(r=e._highlightResult)===null||r===void 0||(a=r.hierarchy)===null||a===void 0?void 0:a.lvl0)||{}).value;return c&&hb.test(c)?c.replace(am,""):c}function Ha(){return Ha=Object.assign||function(e){for(var t=1;t=0||(u[s]=i[s]);return u}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function gb(e){var t=e.translations,n=t===void 0?{}:t,o=vb(e,_b),r=n.recentSearchesTitle,a=r===void 0?"Recent":r,i=n.noRecentSearchesText,c=i===void 0?"No recent searches":i,s=n.saveRecentSearchButtonTitle,l=s===void 0?"Save this search":s,u=n.removeRecentSearchButtonTitle,m=u===void 0?"Remove this search from history":u,d=n.favoriteSearchesTitle,f=d===void 0?"Favorite":d,v=n.removeFavoriteSearchButtonTitle,g=v===void 0?"Remove this search from favorites":v;return o.state.status==="idle"&&o.hasCollections===!1?o.disableUserPersonalization?null:O.createElement("div",{className:"DocSearch-StartScreen"},O.createElement("p",{className:"DocSearch-Help"},c)):o.hasCollections===!1?null:O.createElement("div",{className:"DocSearch-Dropdown-Container"},O.createElement(ja,Er({},o,{title:a,collection:o.state.collections[0],renderIcon:function(){return O.createElement("div",{className:"DocSearch-Hit-icon"},O.createElement(Q1,null))},renderAction:function(b){var p=b.item,y=b.runFavoriteTransition,P=b.runDeleteTransition;return O.createElement(O.Fragment,null,O.createElement("div",{className:"DocSearch-Hit-action"},O.createElement("button",{className:"DocSearch-Hit-action-button",title:l,type:"submit",onClick:function(A){A.preventDefault(),A.stopPropagation(),y(function(){o.favoriteSearches.add(p),o.recentSearches.remove(p),o.refresh()})}},O.createElement(ks,null))),O.createElement("div",{className:"DocSearch-Hit-action"},O.createElement("button",{className:"DocSearch-Hit-action-button",title:m,type:"submit",onClick:function(A){A.preventDefault(),A.stopPropagation(),P(function(){o.recentSearches.remove(p),o.refresh()})}},O.createElement($a,null))))}})),O.createElement(ja,Er({},o,{title:f,collection:o.state.collections[1],renderIcon:function(){return O.createElement("div",{className:"DocSearch-Hit-icon"},O.createElement(ks,null))},renderAction:function(b){var p=b.item,y=b.runDeleteTransition;return O.createElement("div",{className:"DocSearch-Hit-action"},O.createElement("button",{className:"DocSearch-Hit-action-button",title:g,type:"submit",onClick:function(P){P.preventDefault(),P.stopPropagation(),y(function(){o.favoriteSearches.remove(p),o.refresh()})}},O.createElement($a,null)))}})))}var bb=["translations"];function wr(){return wr=Object.assign||function(e){for(var t=1;t=0||(u[s]=i[s]);return u}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var Eb=O.memo(function(e){var t=e.translations,n=t===void 0?{}:t,o=yb(e,bb);if(o.state.status==="error")return O.createElement(rb,{translations:n==null?void 0:n.errorScreen});var r=o.state.collections.some(function(a){return a.items.length>0});return o.state.query?r===!1?O.createElement(sb,wr({},o,{translations:n==null?void 0:n.noResultsScreen})):O.createElement(pb,o):O.createElement(gb,wr({},o,{hasCollections:r,translations:n==null?void 0:n.startScreen}))},function(e,t){return t.state.status==="loading"||t.state.status==="stalled"}),wb=["translations"];function Or(){return Or=Object.assign||function(e){for(var t=1;t=0||(u[s]=i[s]);return u}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function Pb(e){var t=e.translations,n=t===void 0?{}:t,o=Ob(e,wb),r=n.resetButtonTitle,a=r===void 0?"Clear the query":r,i=n.resetButtonAriaLabel,c=i===void 0?"Clear the query":i,s=n.cancelButtonText,l=s===void 0?"Cancel":s,u=n.cancelButtonAriaLabel,m=u===void 0?"Cancel":u,d=o.getFormProps({inputElement:o.inputRef.current}).onReset;return O.useEffect(function(){o.autoFocus&&o.inputRef.current&&o.inputRef.current.focus()},[o.autoFocus,o.inputRef]),O.useEffect(function(){o.isFromSelection&&o.inputRef.current&&o.inputRef.current.select()},[o.isFromSelection,o.inputRef]),O.createElement(O.Fragment,null,O.createElement("form",{className:"DocSearch-Form",onSubmit:function(f){f.preventDefault()},onReset:d},O.createElement("label",Or({className:"DocSearch-MagnifierLabel"},o.getLabelProps()),O.createElement(tm,null)),O.createElement("div",{className:"DocSearch-LoadingIndicator"},O.createElement(J1,null)),O.createElement("input",Or({className:"DocSearch-Input",ref:o.inputRef},o.getInputProps({inputElement:o.inputRef.current,autoFocus:o.autoFocus,maxLength:64}))),O.createElement("button",{type:"reset",title:a,className:"DocSearch-Reset","aria-label":c,hidden:!o.state.query},O.createElement($a,null))),O.createElement("button",{className:"DocSearch-Cancel",type:"reset","aria-label":m,onClick:o.onClose},l))}var Sb=["_highlightResult","_snippetResult"];function Ab(e,t){if(e==null)return{};var n,o,r=function(i,c){if(i==null)return{};var s,l,u={},m=Object.keys(i);for(l=0;l=0||(u[s]=i[s]);return u}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function Tb(e){return function(){var t="__TEST_KEY__";try{return localStorage.setItem(t,""),localStorage.removeItem(t),!0}catch{return!1}}()===!1?{setItem:function(){},getItem:function(){return[]}}:{setItem:function(t){return window.localStorage.setItem(e,JSON.stringify(t))},getItem:function(){var t=window.localStorage.getItem(e);return t?JSON.parse(t):[]}}}function Vs(e){var t=e.key,n=e.limit,o=n===void 0?5:n,r=Tb(t),a=r.getItem().slice(0,o);return{add:function(i){var c=i,s=(c._highlightResult,c._snippetResult,Ab(c,Sb)),l=a.findIndex(function(u){return u.objectID===s.objectID});l>-1&&a.splice(l,1),a.unshift(s),a=a.slice(0,o),r.setItem(a)},remove:function(i){a=a.filter(function(c){return c.objectID!==i.objectID}),r.setItem(a)},getAll:function(){return a}}}var Ib=["facetName","facetQuery"];function Lb(e){var t,n="algoliasearch-client-js-".concat(e.key),o=function(){return t===void 0&&(t=e.localStorage||window.localStorage),t},r=function(){return JSON.parse(o().getItem(n)||"{}")};return{get:function(a,i){var c=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then(function(){var s=JSON.stringify(a),l=r()[s];return Promise.all([l||i(),l!==void 0])}).then(function(s){var l=_r(s,2),u=l[0],m=l[1];return Promise.all([u,m||c.miss(u)])}).then(function(s){return _r(s,1)[0]})},set:function(a,i){return Promise.resolve().then(function(){var c=r();return c[JSON.stringify(a)]=i,o().setItem(n,JSON.stringify(c)),i})},delete:function(a){return Promise.resolve().then(function(){var i=r();delete i[JSON.stringify(a)],o().setItem(n,JSON.stringify(i))})},clear:function(){return Promise.resolve().then(function(){o().removeItem(n)})}}}function eo(e){var t=vr(e.caches),n=t.shift();return n===void 0?{get:function(o,r){var a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}};return r().then(function(i){return Promise.all([i,a.miss(i)])}).then(function(i){return _r(i,1)[0]})},set:function(o,r){return Promise.resolve(r)},delete:function(o){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(o,r){var a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}};return n.get(o,r,a).catch(function(){return eo({caches:t}).get(o,r,a)})},set:function(o,r){return n.set(o,r).catch(function(){return eo({caches:t}).set(o,r)})},delete:function(o){return n.delete(o).catch(function(){return eo({caches:t}).delete(o)})},clear:function(){return n.clear().catch(function(){return eo({caches:t}).clear()})}}}function ia(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{serializable:!0},t={};return{get:function(n,o){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}},a=JSON.stringify(n);if(a in t)return Promise.resolve(e.serializable?JSON.parse(t[a]):t[a]);var i=o(),c=r&&r.miss||function(){return Promise.resolve()};return i.then(function(s){return c(s)}).then(function(){return i})},set:function(n,o){return t[JSON.stringify(n)]=e.serializable?JSON.stringify(o):o,Promise.resolve(o)},delete:function(n){return delete t[JSON.stringify(n)],Promise.resolve()},clear:function(){return t={},Promise.resolve()}}}function Db(e){for(var t=e.length-1;t>0;t--){var n=Math.floor(Math.random()*(t+1)),o=e[t];e[t]=e[n],e[n]=o}return e}function cm(e,t){return t&&Object.keys(t).forEach(function(n){e[n]=t[n](e)}),e}function qr(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o0?o:void 0,timeout:n.timeout||t,headers:n.headers||{},queryParameters:n.queryParameters||{},cacheable:n.cacheable}}var Tn={Read:1,Write:2,Any:3},sm=1,Rb=2,lm=3;function um(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:sm;return Pe(Pe({},e),{},{status:t,lastUpdate:Date.now()})}function mm(e){return typeof e=="string"?{protocol:"https",url:e,accept:Tn.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||Tn.Any}}var Fs="GET",Vr="POST";function kb(e,t){return Promise.all(t.map(function(n){return e.get(n,function(){return Promise.resolve(um(n))})})).then(function(n){var o=n.filter(function(i){return function(c){return c.status===sm||Date.now()-c.lastUpdate>12e4}(i)}),r=n.filter(function(i){return function(c){return c.status===lm&&Date.now()-c.lastUpdate<=12e4}(i)}),a=[].concat(vr(o),vr(r));return{getTimeout:function(i,c){return(r.length===0&&i===0?1:r.length+3+i)*c},statelessHosts:a.length>0?a.map(function(i){return mm(i)}):t}})}function Bs(e,t,n,o){var r=[],a=function(d,f){if(!(d.method===Fs||d.data===void 0&&f.data===void 0)){var v=Array.isArray(d.data)?d.data:Pe(Pe({},d.data),f.data);return JSON.stringify(v)}}(n,o),i=function(d,f){var v=Pe(Pe({},d.headers),f.headers),g={};return Object.keys(v).forEach(function(b){var p=v[b];g[b.toLowerCase()]=p}),g}(e,o),c=n.method,s=n.method!==Fs?{}:Pe(Pe({},n.data),o.data),l=Pe(Pe(Pe({"x-algolia-agent":e.userAgent.value},e.queryParameters),s),o.queryParameters),u=0,m=function d(f,v){var g=f.pop();if(g===void 0)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:zs(r)};var b={data:a,headers:i,method:c,url:Cb(g,n.path,l),connectTimeout:v(u,e.timeouts.connect),responseTimeout:v(u,o.timeout)},p=function(P){var A={request:b,response:P,host:g,triesLeft:f.length};return r.push(A),A},y={onSucess:function(P){return function(A){try{return JSON.parse(A.content)}catch(D){throw function(q,R){return{name:"DeserializationError",message:q,response:R}}(D.message,A)}}(P)},onRetry:function(P){var A=p(P);return P.isTimedOut&&u++,Promise.all([e.logger.info("Retryable failure",fm(A)),e.hostsCache.set(g,um(g,P.isTimedOut?lm:Rb))]).then(function(){return d(f,v)})},onFail:function(P){throw p(P),function(A,D){var q=A.content,R=A.status,E=q;try{E=JSON.parse(q).message}catch{}return function(z,Y,j){return{name:"ApiError",message:z,status:Y,transporterStackTrace:j}}(E,R,D)}(P,zs(r))}};return e.requester.send(b).then(function(P){return function(A,D){return function(q){var R=q.status;return q.isTimedOut||function(E){var z=E.isTimedOut,Y=E.status;return!z&&~~Y==0}(q)||~~(R/100)!=2&&~~(R/100)!=4}(A)?D.onRetry(A):~~(A.status/100)==2?D.onSucess(A):D.onFail(A)}(P,y)})};return kb(e.hostsCache,t).then(function(d){return m(vr(d.statelessHosts).reverse(),d.getTimeout)})}function xb(e){var t={value:"Algolia for JavaScript (".concat(e,")"),add:function(n){var o="; ".concat(n.segment).concat(n.version!==void 0?" (".concat(n.version,")"):"");return t.value.indexOf(o)===-1&&(t.value="".concat(t.value).concat(o)),t}};return t}function Cb(e,t,n){var o=dm(n),r="".concat(e.protocol,"://").concat(e.url,"/").concat(t.charAt(0)==="/"?t.substr(1):t);return o.length&&(r+="?".concat(o)),r}function dm(e){return Object.keys(e).map(function(t){return qr("%s=%s",t,(n=e[t],Object.prototype.toString.call(n)==="[object Object]"||Object.prototype.toString.call(n)==="[object Array]"?JSON.stringify(e[t]):e[t]));var n}).join("&")}function zs(e){return e.map(function(t){return fm(t)})}function fm(e){var t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return Pe(Pe({},e),{},{request:Pe(Pe({},e.request),{},{headers:Pe(Pe({},e.request.headers),t)})})}var Mb=function(e){var t=e.appId,n=function(a,i,c){var s={"x-algolia-api-key":c,"x-algolia-application-id":i};return{headers:function(){return a===er.WithinHeaders?s:{}},queryParameters:function(){return a===er.WithinQueryParameters?s:{}}}}(e.authMode!==void 0?e.authMode:er.WithinHeaders,t,e.apiKey),o=function(a){var i=a.hostsCache,c=a.logger,s=a.requester,l=a.requestsCache,u=a.responsesCache,m=a.timeouts,d=a.userAgent,f=a.hosts,v=a.queryParameters,g={hostsCache:i,logger:c,requester:s,requestsCache:l,responsesCache:u,timeouts:m,userAgent:d,headers:a.headers,queryParameters:v,hosts:f.map(function(b){return mm(b)}),read:function(b,p){var y=Ns(p,g.timeouts.read),P=function(){return Bs(g,g.hosts.filter(function(D){return(D.accept&Tn.Read)!=0}),b,y)};if((y.cacheable!==void 0?y.cacheable:b.cacheable)!==!0)return P();var A={request:b,mappedRequestOptions:y,transporter:{queryParameters:g.queryParameters,headers:g.headers}};return g.responsesCache.get(A,function(){return g.requestsCache.get(A,function(){return g.requestsCache.set(A,P()).then(function(D){return Promise.all([g.requestsCache.delete(A),D])},function(D){return Promise.all([g.requestsCache.delete(A),Promise.reject(D)])}).then(function(D){var q=_r(D,2);return q[0],q[1]})})},{miss:function(D){return g.responsesCache.set(A,D)}})},write:function(b,p){return Bs(g,g.hosts.filter(function(y){return(y.accept&Tn.Write)!=0}),b,Ns(p,g.timeouts.write))}};return g}(Pe(Pe({hosts:[{url:"".concat(t,"-dsn.algolia.net"),accept:Tn.Read},{url:"".concat(t,".algolia.net"),accept:Tn.Write}].concat(Db([{url:"".concat(t,"-1.algolianet.com")},{url:"".concat(t,"-2.algolianet.com")},{url:"".concat(t,"-3.algolianet.com")}]))},e),{},{headers:Pe(Pe(Pe({},n.headers()),{"content-type":"application/x-www-form-urlencoded"}),e.headers),queryParameters:Pe(Pe({},n.queryParameters()),e.queryParameters)})),r={transporter:o,appId:t,addAlgoliaAgent:function(a,i){o.userAgent.add({segment:a,version:i})},clearCache:function(){return Promise.all([o.requestsCache.clear(),o.responsesCache.clear()]).then(function(){})}};return cm(r,e.methods)},hm=function(e){return function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o={transporter:e.transporter,appId:e.appId,indexName:t};return cm(o,n.methods)}},Us=function(e){return function(t,n){var o=t.map(function(r){return Pe(Pe({},r),{},{params:dm(r.params||{})})});return e.transporter.read({method:Vr,path:"1/indexes/*/queries",data:{requests:o},cacheable:!0},n)}},Ws=function(e){return function(t,n){return Promise.all(t.map(function(o){var r=o.params,a=r.facetName,i=r.facetQuery,c=B0(r,Ib);return hm(e)(o.indexName,{methods:{searchForFacetValues:pm}}).searchForFacetValues(a,i,Pe(Pe({},n),c))}))}},$b=function(e){return function(t,n,o){return e.transporter.read({method:Vr,path:qr("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:n},cacheable:!0},o)}},jb=function(e){return function(t,n){return e.transporter.read({method:Vr,path:qr("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},n)}},pm=function(e){return function(t,n,o){return e.transporter.read({method:Vr,path:qr("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:n},cacheable:!0},o)}},Hb=1,qb=2,Vb=3;function _m(e,t,n){var o,r={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:function(a){return new Promise(function(i){var c=new XMLHttpRequest;c.open(a.method,a.url,!0),Object.keys(a.headers).forEach(function(m){return c.setRequestHeader(m,a.headers[m])});var s,l=function(m,d){return setTimeout(function(){c.abort(),i({status:0,content:d,isTimedOut:!0})},1e3*m)},u=l(a.connectTimeout,"Connection timeout");c.onreadystatechange=function(){c.readyState>c.OPENED&&s===void 0&&(clearTimeout(u),s=l(a.responseTimeout,"Socket timeout"))},c.onerror=function(){c.status===0&&(clearTimeout(u),clearTimeout(s),i({content:c.responseText||"Network request failed",status:c.status,isTimedOut:!1}))},c.onload=function(){clearTimeout(u),clearTimeout(s),i({content:c.responseText,status:c.status,isTimedOut:!1})},c.send(a.data)})}},logger:(o=Vb,{debug:function(a,i){return Hb>=o&&console.debug(a,i),Promise.resolve()},info:function(a,i){return qb>=o&&console.info(a,i),Promise.resolve()},error:function(a,i){return console.error(a,i),Promise.resolve()}}),responsesCache:ia(),requestsCache:ia({serializable:!1}),hostsCache:eo({caches:[Lb({key:"".concat("4.8.5","-").concat(e)}),ia()]}),userAgent:xb("4.8.5").add({segment:"Browser",version:"lite"}),authMode:er.WithinQueryParameters};return Mb(Pe(Pe(Pe({},r),n),{},{methods:{search:Us,searchForFacetValues:Ws,multipleQueries:Us,multipleSearchForFacetValues:Ws,initIndex:function(a){return function(i){return hm(a)(i,{methods:{search:jb,searchForFacetValues:pm,findAnswers:$b}})}}}}))}_m.version="4.8.5";var Nb=["footer","searchBox"];function so(){return so=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,o=new Array(t);n=0||(u[s]=i[s]);return u}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function Ub(e){var t=e.appId,n=e.apiKey,o=e.indexName,r=e.placeholder,a=r===void 0?"Search docs":r,i=e.searchParameters,c=e.onClose,s=c===void 0?fb:c,l=e.transformItems,u=l===void 0?qs:l,m=e.hitComponent,d=m===void 0?Y1:m,f=e.resultsFooterComponent,v=f===void 0?function(){return null}:f,g=e.navigator,b=e.initialScrollY,p=b===void 0?0:b,y=e.transformSearchClient,P=y===void 0?qs:y,A=e.disableUserPersonalization,D=A!==void 0&&A,q=e.initialQuery,R=q===void 0?"":q,E=e.translations,z=E===void 0?{}:E,Y=e.getMissingResultsUrl,j=z.footer,S=z.searchBox,T=zb(z,Nb),k=Bb(O.useState({query:"",collections:[],completion:null,context:{},isOpen:!1,activeItemId:null,status:"idle"}),2),M=k[0],$=k[1],K=O.useRef(null),te=O.useRef(null),me=O.useRef(null),de=O.useRef(null),ve=O.useRef(null),Ae=O.useRef(10),ke=O.useRef(typeof window<"u"?window.getSelection().toString().slice(0,64):"").current,Fe=O.useRef(R||ke).current,x=function(_,w,I){return O.useMemo(function(){var C=_m(_,w);return C.addAlgoliaAgent("docsearch","3.2.1"),/docsearch.js \(.*\)/.test(C.transporter.userAgent.value)===!1&&C.addAlgoliaAgent("docsearch-react","3.2.1"),I(C)},[_,w,I])}(t,n,P),ee=O.useRef(Vs({key:"__DOCSEARCH_FAVORITE_SEARCHES__".concat(o),limit:10})).current,B=O.useRef(Vs({key:"__DOCSEARCH_RECENT_SEARCHES__".concat(o),limit:ee.getAll().length===0?7:4})).current,X=O.useCallback(function(_){if(!D){var w=_.type==="content"?_.__docsearch_parent:_;w&&ee.getAll().findIndex(function(I){return I.objectID===w.objectID})===-1&&B.add(w)}},[ee,B,D]),pe=O.useMemo(function(){return U1({id:"docsearch",defaultActiveItemId:0,placeholder:a,openOnFocus:!0,initialState:{query:Fe,context:{searchSuggestions:[]}},navigator:g,onStateChange:function(_){$(_.state)},getSources:function(_){var w=_.query,I=_.state,C=_.setContext,H=_.setStatus;return w?x.search([{query:w,indexName:o,params:ca({attributesToRetrieve:["hierarchy.lvl0","hierarchy.lvl1","hierarchy.lvl2","hierarchy.lvl3","hierarchy.lvl4","hierarchy.lvl5","hierarchy.lvl6","content","type","url"],attributesToSnippet:["hierarchy.lvl1:".concat(Ae.current),"hierarchy.lvl2:".concat(Ae.current),"hierarchy.lvl3:".concat(Ae.current),"hierarchy.lvl4:".concat(Ae.current),"hierarchy.lvl5:".concat(Ae.current),"hierarchy.lvl6:".concat(Ae.current),"content:".concat(Ae.current)],snippetEllipsisText:"\u2026",highlightPreTag:"",highlightPostTag:"",hitsPerPage:20},i)}]).catch(function(F){throw F.name==="RetryError"&&H("error"),F}).then(function(F){var J=F.results[0],W=J.hits,G=J.nbHits,U=Hs(W,function(re){return im(re)});return I.context.searchSuggestions.length0&&(ue(),ve.current&&ve.current.focus())},[Fe,ue]),O.useEffect(function(){function _(){if(te.current){var w=.01*window.innerHeight;te.current.style.setProperty("--docsearch-vh","".concat(w,"px"))}}return _(),window.addEventListener("resize",_),function(){window.removeEventListener("resize",_)}},[]),O.createElement("div",so({ref:K},fe({"aria-expanded":!0}),{className:["DocSearch","DocSearch-Container",M.status==="stalled"&&"DocSearch-Container--Stalled",M.status==="error"&&"DocSearch-Container--Errored"].filter(Boolean).join(" "),role:"button",tabIndex:0,onMouseDown:function(_){_.target===_.currentTarget&&s()}}),O.createElement("div",{className:"DocSearch-Modal",ref:te},O.createElement("header",{className:"DocSearch-SearchBar",ref:me},O.createElement(Pb,so({},pe,{state:M,autoFocus:Fe.length===0,inputRef:ve,isFromSelection:Boolean(Fe)&&Fe===ke,translations:S,onClose:s}))),O.createElement("div",{className:"DocSearch-Dropdown",ref:de},O.createElement(Eb,so({},pe,{indexName:o,state:M,hitComponent:d,resultsFooterComponent:v,disableUserPersonalization:D,recentSearches:B,favoriteSearches:ee,inputRef:ve,translations:T,getMissingResultsUrl:Y,onItemClick:function(_){X(_),s()}}))),O.createElement("footer",{className:"DocSearch-Footer"},O.createElement(K1,{translations:j}))))}function qa(){return qa=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,o=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:window;return typeof t=="string"?n.document.querySelector(t):t}(e.container,e.environment))}const Yb=e=>e.button===1||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey,Jb=()=>{const e=vn(),t=bi();return{hitComponent:({hit:n,children:o})=>({type:"a",ref:void 0,constructor:void 0,key:void 0,props:{href:n.url,onClick:r=>{Yb(r)||(r.preventDefault(),e.push(lc(n.url,t.value.base)))},children:o},__v:null}),navigator:{navigate:({itemUrl:n})=>{e.push(lc(n,t.value.base))}},transformSearchClient:n=>{const o=ci(n.search,500);return{...n,search:async(...r)=>o(...r)}}}};const Qb=Ne({name:"Docsearch",props:{containerId:{type:String,required:!1,default:"docsearch-container"},options:{type:Object,required:!0}},setup(e){const t=Bn(),n=wm(),o=Jb(),r=Z(()=>{var c;return{...e.options,...(c=e.options.locales)==null?void 0:c[t.value]}}),a=[],i=()=>{var s,l;const c=(l=(s=r.value.searchParameters)==null?void 0:s.facetFilters)!=null?l:[];a.splice(0,a.length,`lang:${n.value}`,...ce(c)?c:[c]),Kb({...o,...r.value,container:`#${e.containerId}`,searchParameters:{...r.value.searchParameters,facetFilters:a}})};return tt(()=>{i(),Xe([t,r],([c,s],[l,u])=>{c!==l&&JSON.stringify(s)!==JSON.stringify(u)&&i()}),Xe(n,(c,s)=>{if(c!==s){const l=a.findIndex(u=>u===`lang:${s}`);l>-1&&a.splice(l,1,`lang:${c}`)}})}),()=>Te("div",{id:e.containerId})}}),Gb={apiKey:"30c521836bfc8e97915576e11ac2cebc",indexName:"arthas",appId:"UX8WBNVHHR",locales:{"/":{placeholder:"\u641C\u7D22\u6587\u6863",translations:{button:{buttonText:"\u641C\u7D22\u6587\u6863",buttonAriaLabel:"\u641C\u7D22\u6587\u6863"},modal:{searchBox:{resetButtonTitle:"\u6E05\u9664\u67E5\u8BE2\u6761\u4EF6",resetButtonAriaLabel:"\u6E05\u9664\u67E5\u8BE2\u6761\u4EF6",cancelButtonText:"\u53D6\u6D88",cancelButtonAriaLabel:"\u53D6\u6D88"},startScreen:{recentSearchesTitle:"\u641C\u7D22\u5386\u53F2",noRecentSearchesText:"\u6CA1\u6709\u641C\u7D22\u5386\u53F2",saveRecentSearchButtonTitle:"\u4FDD\u5B58\u81F3\u641C\u7D22\u5386\u53F2",removeRecentSearchButtonTitle:"\u4ECE\u641C\u7D22\u5386\u53F2\u4E2D\u79FB\u9664",favoriteSearchesTitle:"\u6536\u85CF",removeFavoriteSearchButtonTitle:"\u4ECE\u6536\u85CF\u4E2D\u79FB\u9664"},errorScreen:{titleText:"\u65E0\u6CD5\u83B7\u53D6\u7ED3\u679C",helpText:"\u4F60\u53EF\u80FD\u9700\u8981\u68C0\u67E5\u4F60\u7684\u7F51\u7EDC\u8FDE\u63A5"},footer:{selectText:"\u9009\u62E9",navigateText:"\u5207\u6362",closeText:"\u5173\u95ED",searchByText:"\u641C\u7D22\u63D0\u4F9B\u8005"},noResultsScreen:{noResultsText:"\u65E0\u6CD5\u627E\u5230\u76F8\u5173\u7ED3\u679C",suggestedQueryText:"\u4F60\u53EF\u4EE5\u5C1D\u8BD5\u67E5\u8BE2",reportMissingResultsText:"\u4F60\u8BA4\u4E3A\u8BE5\u67E5\u8BE2\u5E94\u8BE5\u6709\u7ED3\u679C\uFF1F",reportMissingResultsLinkText:"\u70B9\u51FB\u53CD\u9988"}}}}}},Zb=Dt({enhance({app:e}){e.component("Docsearch",()=>Te(Qb,{options:Gb}))}}),Xb={"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:"\u9773\u9633",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:"\u5F90\u5FD7\u6BC5",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:"\u6C6A\u5409",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:"\u6C6A\u5409",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:"\u6C6A\u5409",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:"\u5F90\u5FD7\u6BC5",email:"xuzhiyi@youzan.com",commits:1},{name:"\u9759\u5B8F",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:"\u674E\u9F0E",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:"\u5F90\u5FD7\u6BC5",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:"\u6C6A\u5409",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:"\u6C6A\u5409",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:"\u5F90\u5FD7\u6BC5",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:"\u6C6A\u5409",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:"\u6C6A\u5409",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:"\u6C6A\u5409",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:"\u5F90\u5FD7\u6BC5",email:"xuzhiyi@youzan.com",commits:1},{name:"0xflotus",email:"26602940+0xflotus@users.noreply.github.com",commits:1},{name:"\u9759\u5B8F",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:"\u674E\u9F0E",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:"\u6C6A\u5409",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:"\u6C6A\u5409",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}]};let Gs=0;const Zs="webkit moz ms o".split(" ");let Et,wt;const ey=typeof window>"u";if(ey)Et=function(){},wt=function(){};else{Et=window.requestAnimationFrame,wt=window.cancelAnimationFrame;let e;for(let t=0;t{t(n+o)},o);return Gs=n+o,r},wt=function(t){window.clearTimeout(t)})}const ty={props:{startVal:{type:Number,required:!1,default:0},endVal:{type:Number,required:!1,default:2017},duration:{type:Number,required:!1,default:3e3},autoplay:{type:Boolean,required:!1,default:!0},decimals:{type:Number,required:!1,default:0,validator(e){return e>=0}},decimal:{type:String,required:!1,default:"."},separator:{type:String,required:!1,default:","},prefix:{type:String,required:!1,default:""},suffix:{type:String,required:!1,default:""},useEasing:{type:Boolean,required:!1,default:!0},easingFn:{type:Function,default(e,t,n,o){return n*(-Math.pow(2,-10*e/o)+1)*1024/1023+t}}},data(){return{localStartVal:this.startVal,displayValue:this.formatNumber(this.startVal),printVal:null,paused:!1,localDuration:this.duration,startTime:null,timestamp:null,remaining:null,rAF:null}},computed:{countDown(){return this.startVal>this.endVal}},watch:{startVal(){this.autoplay&&this.start()},endVal(){this.autoplay&&this.start()}},mounted(){this.autoplay&&this.start(),this.$emit("mountedCallback")},methods:{start(){this.localStartVal=this.startVal,this.startTime=null,this.localDuration=this.duration,this.paused=!1,this.rAF=Et(this.count)},pauseResume(){this.paused?(this.resume(),this.paused=!1):(this.pause(),this.paused=!0)},pause(){wt(this.rAF)},resume(){this.startTime=null,this.localDuration=+this.remaining,this.localStartVal=+this.printVal,Et(this.count)},reset(){this.startTime=null,wt(this.rAF),this.displayValue=this.formatNumber(this.startVal)},count(e){this.startTime||(this.startTime=e),this.timestamp=e;const t=e-this.startTime;this.remaining=this.localDuration-t,this.useEasing?this.countDown?this.printVal=this.localStartVal-this.easingFn(t,0,this.localStartVal-this.endVal,this.localDuration):this.printVal=this.easingFn(t,this.localStartVal,this.endVal-this.localStartVal,this.localDuration):this.countDown?this.printVal=this.localStartVal-(this.localStartVal-this.endVal)*(t/this.localDuration):this.printVal=this.localStartVal+(this.endVal-this.localStartVal)*(t/this.localDuration),this.countDown?this.printVal=this.printValthis.endVal?this.endVal:this.printVal,this.displayValue=this.formatNumber(this.printVal),t1?this.decimal+t[1]:"",r=/(\d+)(\d{3})/;if(this.separator&&!this.isNumber(this.separator))for(;r.test(n);)n=n.replace(r,"$1"+this.separator+"$2");return this.prefix+n+o+this.suffix}},destroyed(){wt(this.rAF)}};function ny(e,t,n,o,r,a){return N(),Q("span",null,Re(r.displayValue),1)}const oy=we(ty,[["render",ny],["__file","vue-countTo.vue"]]),ry=()=>{const e=mt();if(!e.value.git)return;const t=e.value.filePathRelative,n=e.value.git.contributors,o=Xb[t],r=(a,i)=>a.find(c=>c.name===i.name&&c.email===i.email);o&&o.forEach(a=>{r(n,a)?r(n,a).commits+=a.commits:n.push(a)}),n==null||n.sort((a,i)=>i.commits-a.commits)},ay=Dt({enhance({router:e,app:t}){t.component("CountTo",oy),e.afterEach((n,o)=>{n.path!==o.path&&ry()}),e.beforeEach((n,o,r)=>{typeof _hmt<"u"&&n.path&&n.fullPath!==o.fullPath&&_hmt.push(["_trackPageview",n.fullPath]),r()})}}),tr=[uh,hh,Ah,kp,$p,T0,I0,M0,N0,Zb,ay];var vm=Ie(Am),gm=Qa({key:"",path:"",title:"",lang:"",frontmatter:{},excerpt:"",headers:[]}),$t=Ie(gm),mt=()=>$t;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updatePageData=e=>{vm.value[e.key]=()=>Promise.resolve(e),e.key===$t.value.key&&($t.value=e)});var bm=Symbol(""),Tt=()=>{const e=Ue(bm);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},ym=Symbol(""),iy=()=>{const e=Ue(ym);if(!e)throw new Error("usePageHead() is called without provider.");return e},cy=Symbol(""),Em=Symbol(""),wm=()=>{const e=Ue(Em);if(!e)throw new Error("usePageLang() is called without provider.");return e},gi=Symbol(""),Bn=()=>{const e=Ue(gi);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},Kt=Ie(oh),bi=()=>Kt;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updateSiteData=e=>{Kt.value=e});var Om=Symbol(""),yi=()=>{const e=Ue(Om);if(!e)throw new Error("useSiteLocaleData() is called without provider.");return e},sy=Symbol(""),sn=Nn({resolvePageData:async e=>{const t=vm.value[e],n=await(t==null?void 0:t());return n!=null?n:gm},resolvePageFrontmatter:e=>e.frontmatter,resolvePageHead:(e,t,n)=>{const o=De(t.description)?t.description:n.description,r=[...ce(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:o}]];return ah(r)},resolvePageHeadTitle:(e,t)=>`${e.title?`${e.title} | `:""}${t.title}`,resolvePageLang:e=>e.lang||"en",resolveRouteLocale:(e,t)=>tu(e,t),resolveSiteLocaleData:(e,t)=>({...e,...e.locales[t]})}),Ei=Ne({name:"ClientOnly",setup(e,t){const n=Ie(!1);return tt(()=>{n.value=!0}),()=>{var o,r;return n.value?(r=(o=t.slots).default)==null?void 0:r.call(o):null}}}),ly=Ne({name:"Content",props:{pageKey:{type:String,required:!1,default:""}},setup(e){const t=mt(),n=Z(()=>nu[e.pageKey||t.value.key]);return()=>n.value?Te(n.value):Te("div","404 Not Found")}}),uy="Layout",my="NotFound",dy=tr.reduce((e,t)=>({...e,...t.layouts}),{}),Xs=Ne({name:"Vuepress",setup(){const e=mt(),t=Z(()=>{let n;if(e.value.path){const o=e.value.frontmatter.layout;De(o)?n=o:n=uy}else n=my;return dy[n]});return()=>Te(t.value)}}),wi=e=>To(e)?e:`${bi().value.base}${eu(e)}`;const fy=[["v-8daa1a0e","/",{title:""},["/index.html","/README.md"]],["v-2d0a870d","/en/",{title:"Home"},["/en/index.html","/en/README.md"]],["v-7445f070","/doc/",{title:"\u7B80\u4ECB"},["/doc/index.html","/doc/README.md"]],["v-0d09f68d","/doc/advanced-use.html",{title:"\u5176\u4ED6\u7279\u6027"},["/doc/advanced-use","/doc/advanced-use.md"]],["v-46e53834","/doc/advice-class.html",{title:"\u8868\u8FBE\u5F0F\u6838\u5FC3\u53D8\u91CF"},["/doc/advice-class","/doc/advice-class.md"]],["v-37178538","/doc/agent.html",{title:"\u4EE5 Java Agent \u7684\u65B9\u5F0F\u542F\u52A8"},["/doc/agent","/doc/agent.md"]],["v-71d23f41","/doc/ai.html",{title:"AI \u76F8\u5173"},["/doc/ai","/doc/ai.md"]],["v-5c517900","/doc/arthas-properties.html",{title:"Arthas Properties"},["/doc/arthas-properties","/doc/arthas-properties.md"]],["v-02eb6d0d","/doc/arthas3.html",{title:""},["/doc/arthas3","/doc/arthas3.md"]],["v-4f82df66","/doc/async.html",{title:"Arthas \u540E\u53F0\u5F02\u6B65\u4EFB\u52A1"},["/doc/async","/doc/async.md"]],["v-d0358c7e","/doc/auth.html",{title:"auth"},["/doc/auth","/doc/auth.md"]],["v-3157067a","/doc/base64.html",{title:"base64"},["/doc/base64","/doc/base64.md"]],["v-cc8f4ae6","/doc/batch-support.html",{title:"\u6279\u5904\u7406\u529F\u80FD"},["/doc/batch-support","/doc/batch-support.md"]],["v-6542b733","/doc/cat.html",{title:"cat"},["/doc/cat","/doc/cat.md"]],["v-d6087b6c","/doc/classloader-metaspace.html",{title:"classloader-metaspace"},["/doc/classloader-metaspace","/doc/classloader-metaspace.md"]],["v-49b1709e","/doc/classloader.html",{title:"classloader"},["/doc/classloader","/doc/classloader.md"]],["v-ad1b2b42","/doc/cls.html",{title:"cls"},["/doc/cls","/doc/cls.md"]],["v-5ed4d0e1","/doc/commands.html",{title:"\u547D\u4EE4\u5217\u8868"},["/doc/commands","/doc/commands.md"]],["v-3992adde","/doc/contact-us.html",{title:"\u8054\u7CFB\u6211\u4EEC"},["/doc/contact-us","/doc/contact-us.md"]],["v-0d1e3f35","/doc/dashboard.html",{title:"dashboard"},["/doc/dashboard","/doc/dashboard.md"]],["v-02361049","/doc/docker.html",{title:"Docker"},["/doc/docker","/doc/docker.md"]],["v-2116d2e1","/doc/download.html",{title:"\u4E0B\u8F7D"},["/doc/download","/doc/download.md"]],["v-1fe4a616","/doc/dump.html",{title:"dump"},["/doc/dump","/doc/dump.md"]],["v-2c48f364","/doc/echo.html",{title:"echo"},["/doc/echo","/doc/echo.md"]],["v-6a3a70c0","/doc/external-command.html",{title:"\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4"},["/doc/external-command","/doc/external-command.md"]],["v-d070981a","/doc/faq.html",{title:"FAQ"},["/doc/faq","/doc/faq.md"]],["v-78c35af6","/doc/getstatic.html",{title:"getstatic"},["/doc/getstatic","/doc/getstatic.md"]],["v-63f4cd5a","/doc/grep.html",{title:"grep"},["/doc/grep","/doc/grep.md"]],["v-809381ca","/doc/groovy.html",{title:"groovy"},["/doc/groovy","/doc/groovy.md"]],["v-07868089","/doc/heapdump.html",{title:"heapdump"},["/doc/heapdump","/doc/heapdump.md"]],["v-e3b34070","/doc/help.html",{title:"help"},["/doc/help","/doc/help.md"]],["v-26f43d96","/doc/history.html",{title:"history"},["/doc/history","/doc/history.md"]],["v-225de034","/doc/http-api.html",{title:"Http API"},["/doc/http-api","/doc/http-api.md"]],["v-7c670020","/doc/idea-plugin.html",{title:"IDEA Plugin"},["/doc/idea-plugin","/doc/idea-plugin.md"]],["v-0cb398f4","/doc/install-detail.html",{title:"Arthas Install"},["/doc/install-detail","/doc/install-detail.md"]],["v-211d675c","/doc/jad.html",{title:"jad"},["/doc/jad","/doc/jad.md"]],["v-41806853","/doc/jfr.html",{title:"jfr"},["/doc/jfr","/doc/jfr.md"]],["v-f1483d70","/doc/jvm.html",{title:"jvm"},["/doc/jvm","/doc/jvm.md"]],["v-4039cdec","/doc/keymap.html",{title:"keymap"},["/doc/keymap","/doc/keymap.md"]],["v-54781216","/doc/line.html",{title:"line"},["/doc/line","/doc/line.md"]],["v-5ae8aed9","/doc/logger.html",{title:"logger"},["/doc/logger","/doc/logger.md"]],["v-6a31cc55","/doc/manual-install.html",{title:"\u624B\u52A8\u5B89\u88C5 Arthas"},["/doc/manual-install","/doc/manual-install.md"]],["v-8ebd6c68","/doc/mbean.html",{title:"mbean"},["/doc/mbean","/doc/mbean.md"]],["v-3b401ada","/doc/mc.html",{title:"mc"},["/doc/mc","/doc/mc.md"]],["v-67bc6553","/doc/mcp-server.html",{title:"Arthas MCP Server"},["/doc/mcp-server","/doc/mcp-server.md"]],["v-4d9433f0","/doc/memory.html",{title:"memory"},["/doc/memory","/doc/memory.md"]],["v-6e88d7a2","/doc/monitor.html",{title:"monitor"},["/doc/monitor","/doc/monitor.md"]],["v-627e52da","/doc/ognl.html",{title:"ognl"},["/doc/ognl","/doc/ognl.md"]],["v-27b6152a","/doc/options.html",{title:"options"},["/doc/options","/doc/options.md"]],["v-2f05b636","/doc/perfcounter.html",{title:"perfcounter"},["/doc/perfcounter","/doc/perfcounter.md"]],["v-13eae420","/doc/profiler.html",{title:"profiler"},["/doc/profiler","/doc/profiler.md"]],["v-1c2d8c2c","/doc/pwd.html",{title:"pwd"},["/doc/pwd","/doc/pwd.md"]],["v-5afc3a07","/doc/quick-start.html",{title:"\u5FEB\u901F\u5165\u95E8"},["/doc/quick-start","/doc/quick-start.md"]],["v-aa7c750c","/doc/quit.html",{title:"quit"},["/doc/quit","/doc/quit.md"]],["v-0446ad7b","/doc/redefine.html",{title:"redefine"},["/doc/redefine","/doc/redefine.md"]],["v-648880ae","/doc/release-notes.html",{title:"Release Notes"},["/doc/release-notes","/doc/release-notes.md"]],["v-71f77d4c","/doc/reset.html",{title:"reset"},["/doc/reset","/doc/reset.md"]],["v-54cde250","/doc/retransform.html",{title:"retransform"},["/doc/retransform","/doc/retransform.md"]],["v-8e632816","/doc/save-log.html",{title:"\u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7"},["/doc/save-log","/doc/save-log.md"]],["v-1fc55619","/doc/sc.html",{title:"sc"},["/doc/sc","/doc/sc.md"]],["v-3891b473","/doc/session.html",{title:"session"},["/doc/session","/doc/session.md"]],["v-30d5cc4f","/doc/sm.html",{title:"sm"},["/doc/sm","/doc/sm.md"]],["v-07cf9d55","/doc/spring-boot-starter.html",{title:"Arthas Spring Boot Starter"},["/doc/spring-boot-starter","/doc/spring-boot-starter.md"]],["v-b75a107e","/doc/stack.html",{title:"stack"},["/doc/stack","/doc/stack.md"]],["v-a9c412f2","/doc/start-arthas.html",{title:"\u542F\u52A8 Arthas"},["/doc/start-arthas","/doc/start-arthas.md"]],["v-bc0910b2","/doc/stop.html",{title:"stop"},["/doc/stop","/doc/stop.md"]],["v-0333612e","/doc/sysenv.html",{title:"sysenv"},["/doc/sysenv","/doc/sysenv.md"]],["v-7012b8ce","/doc/sysprop.html",{title:"sysprop"},["/doc/sysprop","/doc/sysprop.md"]],["v-0536edb5","/doc/tee.html",{title:"tee"},["/doc/tee","/doc/tee.md"]],["v-10845ac2","/doc/thread.html",{title:"thread"},["/doc/thread","/doc/thread.md"]],["v-65d67724","/doc/trace.html",{title:"trace"},["/doc/trace","/doc/trace.md"]],["v-71adf3e9","/doc/tt.html",{title:"tt"},["/doc/tt","/doc/tt.md"]],["v-d2ddc9fe","/doc/tunnel.html",{title:"Arthas Tunnel"},["/doc/tunnel","/doc/tunnel.md"]],["v-5b5d3371","/doc/version.html",{title:"version"},["/doc/version","/doc/version.md"]],["v-40db67fd","/doc/vmoption.html",{title:"vmoption"},["/doc/vmoption","/doc/vmoption.md"]],["v-10890efa","/doc/vmtool.html",{title:"vmtool"},["/doc/vmtool","/doc/vmtool.md"]],["v-24fc49da","/doc/watch.html",{title:"watch"},["/doc/watch","/doc/watch.md"]],["v-a5f6e7aa","/doc/web-console.html",{title:"Web Console"},["/doc/web-console","/doc/web-console.md"]],["v-07555a84","/en/doc/",{title:"Introduction"},["/en/doc/index.html","/en/doc/README.md"]],["v-463d120e","/en/doc/advanced-use.html",{title:"Other features"},["/en/doc/advanced-use","/en/doc/advanced-use.md"]],["v-a736375c","/en/doc/advice-class.html",{title:"Fundamental Fields in Expressions"},["/en/doc/advice-class","/en/doc/advice-class.md"]],["v-f6b5c310","/en/doc/agent.html",{title:"Start as a Java Agent"},["/en/doc/agent","/en/doc/agent.md"]],["v-7a0f16ad","/en/doc/ai.html",{title:"AI Integration"},["/en/doc/ai","/en/doc/ai.md"]],["v-74fb2694","/en/doc/arthas-properties.html",{title:"Arthas Properties"},["/en/doc/arthas-properties","/en/doc/arthas-properties.md"]],["v-786f7161","/en/doc/async.html",{title:"Arthas Async Jobs"},["/en/doc/async","/en/doc/async.md"]],["v-f76c33a6","/en/doc/auth.html",{title:"auth"},["/en/doc/auth","/en/doc/auth.md"]],["v-d17b7034","/en/doc/base64.html",{title:"base64"},["/en/doc/base64","/en/doc/base64.md"]],["v-765e30be","/en/doc/batch-support.html",{title:"Batch Processing"},["/en/doc/batch-support","/en/doc/batch-support.md"]],["v-64a0cd47","/en/doc/cat.html",{title:"cat"},["/en/doc/cat","/en/doc/cat.md"]],["v-6e8ffb5e","/en/doc/classloader-metaspace.html",{title:"classloader-metaspace"},["/en/doc/classloader-metaspace","/en/doc/classloader-metaspace.md"]],["v-fc1b9a9c","/en/doc/classloader.html",{title:"classloader"},["/en/doc/classloader","/en/doc/classloader.md"]],["v-ae5eff1a","/en/doc/cls.html",{title:"cls"},["/en/doc/cls","/en/doc/cls.md"]],["v-12153166","/en/doc/commands.html",{title:"All Commands"},["/en/doc/commands","/en/doc/commands.md"]],["v-4be7594a","/en/doc/contact-us.html",{title:"Contact Us"},["/en/doc/contact-us","/en/doc/contact-us.md"]],["v-79107649","/en/doc/dashboard.html",{title:"dashboard"},["/en/doc/dashboard","/en/doc/dashboard.md"]],["v-682151b5","/en/doc/docker.html",{title:"Docker"},["/en/doc/docker","/en/doc/docker.md"]],["v-8d912d66","/en/doc/download.html",{title:"Download"},["/en/doc/download","/en/doc/download.md"]],["v-471b4d3e","/en/doc/dump.html",{title:"dump"},["/en/doc/dump","/en/doc/dump.md"]],["v-18ad9fd0","/en/doc/echo.html",{title:"echo"},["/en/doc/echo","/en/doc/echo.md"]],["v-ef7849a8","/en/doc/external-command.html",{title:"Load External Commands"},["/en/doc/external-command","/en/doc/external-command.md"]],["v-d1b46bf2","/en/doc/faq.html",{title:"FAQ"},["/en/doc/faq","/en/doc/faq.md"]],["v-2f908999","/en/doc/getstatic.html",{title:"getstatic"},["/en/doc/getstatic","/en/doc/getstatic.md"]],["v-8b2b7482","/en/doc/grep.html",{title:"grep"},["/en/doc/grep","/en/doc/grep.md"]],["v-25a18087","/en/doc/groovy.html",{title:"groovy"},["/en/doc/groovy","/en/doc/groovy.md"]],["v-c0b1d216","/en/doc/heapdump.html",{title:"heapdump"},["/en/doc/heapdump","/en/doc/heapdump.md"]],["v-7a8b0c34","/en/doc/help.html",{title:"help"},["/en/doc/help","/en/doc/help.md"]],["v-4402cd49","/en/doc/history.html",{title:"history"},["/en/doc/history","/en/doc/history.md"]],["v-8b0312c0","/en/doc/http-api.html",{title:"Http API"},["/en/doc/http-api","/en/doc/http-api.md"]],["v-96b07b98","/en/doc/idea-plugin.html",{title:"IDEA Plugin"},["/en/doc/idea-plugin","/en/doc/idea-plugin.md"]],["v-319f48f2","/en/doc/install-detail.html",{title:"Install Arthas"},["/en/doc/install-detail","/en/doc/install-detail.md"]],["v-207b7d70","/en/doc/jad.html",{title:"jad"},["/en/doc/jad","/en/doc/jad.md"]],["v-40de7e67","/en/doc/jfr.html",{title:"jfr"},["/en/doc/jfr","/en/doc/jfr.md"]],["v-f28c1148","/en/doc/jvm.html",{title:"jvm"},["/en/doc/jvm","/en/doc/jvm.md"]],["v-b3b5e150","/en/doc/keymap.html",{title:"keymap"},["/en/doc/keymap","/en/doc/keymap.md"]],["v-7baeb93e","/en/doc/line.html",{title:"line"},["/en/doc/line","/en/doc/line.md"]],["v-7e581f76","/en/doc/logger.html",{title:"logger"},["/en/doc/logger","/en/doc/logger.md"]],["v-bbaa3c7e","/en/doc/manual-install.html",{title:"Manually Install Arthas"},["/en/doc/manual-install","/en/doc/manual-install.md"]],["v-58d22ae0","/en/doc/mbean.html",{title:"mbean"},["/en/doc/mbean","/en/doc/mbean.md"]],["v-2ac66c02","/en/doc/mc.html",{title:"mc"},["/en/doc/mc","/en/doc/mc.md"]],["v-7a1110bf","/en/doc/mcp-server.html",{title:"Arthas MCP Server"},["/en/doc/mcp-server","/en/doc/mcp-server.md"]],["v-3f212774","/en/doc/memory.html",{title:"memory"},["/en/doc/memory","/en/doc/memory.md"]],["v-20388043","/en/doc/monitor.html",{title:"monitor"},["/en/doc/monitor","/en/doc/monitor.md"]],["v-89b4fa02","/en/doc/ognl.html",{title:"ognl"},["/en/doc/ognl","/en/doc/ognl.md"]],["v-43a1e17f","/en/doc/options.html",{title:"options"},["/en/doc/options","/en/doc/options.md"]],["v-6746784a","/en/doc/perfcounter.html",{title:"perfcounter"},["/en/doc/perfcounter","/en/doc/perfcounter.md"]],["v-a7e90ae8","/en/doc/profiler.html",{title:"profiler"},["/en/doc/profiler","/en/doc/profiler.md"]],["v-1b8ba240","/en/doc/pwd.html",{title:"pwd"},["/en/doc/pwd","/en/doc/pwd.md"]],["v-d98607ca","/en/doc/quick-start.html",{title:"Quick Start"},["/en/doc/quick-start","/en/doc/quick-start.md"]],["v-d1b31c34","/en/doc/quit.html",{title:"quit"},["/en/doc/quit","/en/doc/quit.md"]],["v-c7317832","/en/doc/redefine.html",{title:"redefine"},["/en/doc/redefine","/en/doc/redefine.md"]],["v-e0bde47c","/en/doc/release-notes.html",{title:"Release Notes"},["/en/doc/release-notes","/en/doc/release-notes.md"]],["v-6735226e","/en/doc/reset.html",{title:"reset"},["/en/doc/reset","/en/doc/reset.md"]],["v-e5e2b738","/en/doc/retransform.html",{title:"retransform"},["/en/doc/retransform","/en/doc/retransform.md"]],["v-50ef0261","/en/doc/save-log.html",{title:"Log command outputs"},["/en/doc/save-log","/en/doc/save-log.md"]],["v-28022d85","/en/doc/sc.html",{title:"sc"},["/en/doc/sc","/en/doc/sc.md"]],["v-dfe2bef2","/en/doc/session.html",{title:"session"},["/en/doc/session","/en/doc/session.md"]],["v-3912a3bb","/en/doc/sm.html",{title:"sm"},["/en/doc/sm","/en/doc/sm.md"]],["v-71870b69","/en/doc/spring-boot-starter.html",{title:"Arthas Spring Boot Starter"},["/en/doc/spring-boot-starter","/en/doc/spring-boot-starter.md"]],["v-4483d8d5","/en/doc/stack.html",{title:"stack"},["/en/doc/stack","/en/doc/stack.md"]],["v-7af576f3","/en/doc/start-arthas.html",{title:"Start Arthas"},["/en/doc/start-arthas","/en/doc/start-arthas.md"]],["v-e33fb7da","/en/doc/stop.html",{title:"stop"},["/en/doc/stop","/en/doc/stop.md"]],["v-645190d5","/en/doc/sysenv.html",{title:"sysenv"},["/en/doc/sysenv","/en/doc/sysenv.md"]],["v-1f738fad","/en/doc/sysprop.html",{title:"sysprop"},["/en/doc/sysprop","/en/doc/sysprop.md"]],["v-049503c9","/en/doc/tee.html",{title:"tee"},["/en/doc/tee","/en/doc/tee.md"]],["v-5da9140b","/en/doc/thread.html",{title:"thread"},["/en/doc/thread","/en/doc/thread.md"]],["v-06075838","/en/doc/trace.html",{title:"trace"},["/en/doc/trace","/en/doc/trace.md"]],["v-79eacb55","/en/doc/tt.html",{title:"tt"},["/en/doc/tt","/en/doc/tt.md"]],["v-07074726","/en/doc/tunnel.html",{title:"Arthas Tunnel"},["/en/doc/tunnel","/en/doc/tunnel.md"]],["v-9a4bc0f6","/en/doc/version.html",{title:"version"},["/en/doc/version","/en/doc/version.md"]],["v-4e08032e","/en/doc/vmoption.html",{title:"vmoption"},["/en/doc/vmoption","/en/doc/vmoption.md"]],["v-76745066","/en/doc/vmtool.html",{title:"vmtool"},["/en/doc/vmtool","/en/doc/vmtool.md"]],["v-75a5aa24","/en/doc/watch.html",{title:"watch"},["/en/doc/watch","/en/doc/watch.md"]],["v-35756382","/en/doc/web-console.html",{title:"Web Console"},["/en/doc/web-console","/en/doc/web-console.md"]],["v-3706649a","/404.html",{title:""},["/404"]]];var hy=()=>fy.reduce((e,[t,n,o,r])=>(e.push({name:t,path:n,component:Xs,meta:o},...r.map(a=>({path:a,redirect:n}))),e),[{name:"404",path:"/:catchAll(.*)",component:Xs}]),py=zh,_y=()=>{const e=Tp({history:py(Xl(Kt.value.base)),routes:hy(),scrollBehavior:(t,n,o)=>o||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,n)=>{var o;(t.path!==n.path||n===xt)&&([$t.value]=await Promise.all([sn.resolvePageData(t.name),(o=nu[t.name])==null?void 0:o.__asyncLoader()]))}),e},vy=e=>{e.component("ClientOnly",Ei),e.component("Content",ly)},gy=(e,t)=>{const n=Z(()=>sn.resolveRouteLocale(Kt.value.locales,t.currentRoute.value.path)),o=Z(()=>sn.resolveSiteLocaleData(Kt.value,n.value)),r=Z(()=>sn.resolvePageFrontmatter($t.value)),a=Z(()=>sn.resolvePageHeadTitle($t.value,o.value)),i=Z(()=>sn.resolvePageHead(a.value,r.value,o.value)),c=Z(()=>sn.resolvePageLang($t.value));return e.provide(gi,n),e.provide(Om,o),e.provide(bm,r),e.provide(cy,a),e.provide(ym,i),e.provide(Em,c),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>r.value},$head:{get:()=>i.value},$headTitle:{get:()=>a.value},$lang:{get:()=>c.value},$page:{get:()=>$t.value},$routeLocale:{get:()=>n.value},$site:{get:()=>Kt.value},$siteLocale:{get:()=>o.value},$withBase:{get:()=>wi}}),{pageData:$t,pageFrontmatter:r,pageHead:i,pageHeadTitle:a,pageLang:c,routeLocale:n,siteData:Kt,siteLocaleData:o}},by=()=>{const e=Rt(),t=iy(),n=wm(),o=Ie([]),r=()=>{t.value.forEach(i=>{const c=yy(i);c&&o.value.push(c)})},a=()=>{document.documentElement.lang=n.value,o.value.forEach(i=>{i.parentNode===document.head&&document.head.removeChild(i)}),o.value.splice(0,o.value.length),t.value.forEach(i=>{const c=Ey(i);c!==null&&(document.head.appendChild(c),o.value.push(c))})};hn(sy,a),tt(()=>{r(),a(),Xe(()=>e.path,()=>a())})},yy=([e,t,n=""])=>{const o=Object.entries(t).map(([c,s])=>De(s)?`[${c}="${s}"]`:s===!0?`[${c}]`:"").join(""),r=`head > ${e}${o}`;return Array.from(document.querySelectorAll(r)).find(c=>c.innerText===n)||null},Ey=([e,t,n])=>{if(!De(e))return null;const o=document.createElement(e);return ii(t)&&Object.entries(t).forEach(([r,a])=>{De(a)?o.setAttribute(r,a):a===!0&&o.setAttribute(r,"")}),De(n)&&o.appendChild(document.createTextNode(n)),o},wy=th,Oy=async()=>{var n;const e=wy({name:"VuepressApp",setup(){var o;by();for(const r of tr)(o=r.setup)==null||o.call(r);return()=>[Te(fu),...tr.flatMap(({rootComponents:r=[]})=>r.map(a=>Te(a)))]}}),t=_y();vy(e),gy(e,t);for(const o of tr)await((n=o.enhance)==null?void 0:n.call(o,{app:e,router:t,siteData:Kt}));return e.use(t),{app:e,router:t}};Oy().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{we as _,le as a,ie as b,Q as c,Oy as createVueApp,pf as d,Xt as e,N as o,Lt as r,Re as t,We as w}; +See: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems`),{source:n,items:i}})}var T1=["event","nextState","props","query","refresh","store"];function Os(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),n.push.apply(n,o)}return n}function Jn(e){for(var t=1;t=0||(u[s]=i[s]);return u}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var Ps,ra,Wo,Qn=null,Ss=(Ps=-1,ra=-1,Wo=void 0,function(e){var t=++Ps;return Promise.resolve(e).then(function(n){return Wo&&t=0||(u[s]=i[s]);return u}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var k1=["props","refresh","store"],C1=["inputElement","formElement","panelElement"],M1=["inputElement"],$1=["inputElement","maxLength"],j1=["item","source"];function Ts(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),n.push.apply(n,o)}return n}function Je(e){for(var t=1;t=0||(u[s]=i[s]);return u}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function q1(e){var t=e.props,n=e.refresh,o=e.store,r=Gn(e,k1);return{getEnvironmentProps:function(a){var i=a.inputElement,c=a.formElement,s=a.panelElement;function l(u){!o.getState().isOpen&&o.pendingRequests.isEmpty()||u.target===i||[c,s].some(function(m){return d=m,f=u.target,d===f||d.contains(f);var d,f})===!1&&(o.dispatch("blur",null),t.debug||o.pendingRequests.cancelAll())}return Je({onTouchStart:l,onMouseDown:l,onTouchMove:function(u){o.getState().isOpen!==!1&&i===t.environment.document.activeElement&&u.target!==i&&i.blur()}},Gn(a,C1))},getRootProps:function(a){return Je({role:"combobox","aria-expanded":o.getState().isOpen,"aria-haspopup":"listbox","aria-owns":o.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},a)},getFormProps:function(a){return a.inputElement,Je({action:"",noValidate:!0,role:"search",onSubmit:function(i){var c;i.preventDefault(),t.onSubmit(Je({event:i,refresh:n,state:o.getState()},r)),o.dispatch("submit",null),(c=a.inputElement)===null||c===void 0||c.blur()},onReset:function(i){var c;i.preventDefault(),t.onReset(Je({event:i,refresh:n,state:o.getState()},r)),o.dispatch("reset",null),(c=a.inputElement)===null||c===void 0||c.focus()}},Gn(a,M1))},getLabelProps:function(a){return Je({htmlFor:"".concat(t.id,"-input"),id:"".concat(t.id,"-label")},a)},getInputProps:function(a){var i;function c(g){(t.openOnFocus||Boolean(o.getState().query))&&Sn(Je({event:g,props:t,query:o.getState().completion||o.getState().query,refresh:n,store:o},r)),o.dispatch("focus",null)}var s=a||{},l=(s.inputElement,s.maxLength),u=l===void 0?512:l,m=Gn(s,$1),d=An(o.getState()),f=function(g){return Boolean(g&&g.match(p1))}(((i=t.environment.navigator)===null||i===void 0?void 0:i.userAgent)||""),v=d!=null&&d.itemUrl&&!f?"go":"search";return Je({"aria-autocomplete":"both","aria-activedescendant":o.getState().isOpen&&o.getState().activeItemId!==null?"".concat(t.id,"-item-").concat(o.getState().activeItemId):void 0,"aria-controls":o.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:o.getState().completion||o.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:v,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:u,type:"search",onChange:function(g){Sn(Je({event:g,props:t,query:g.currentTarget.value.slice(0,u),refresh:n,store:o},r))},onKeyDown:function(g){(function(b){var p=b.event,y=b.props,P=b.refresh,A=b.store,D=x1(b,D1);if(p.key==="ArrowUp"||p.key==="ArrowDown"){var q=function(){var T=y.environment.document.getElementById("".concat(y.id,"-item-").concat(A.getState().activeItemId));T&&(T.scrollIntoViewIfNeeded?T.scrollIntoViewIfNeeded(!1):T.scrollIntoView(!1))},R=function(){var T=An(A.getState());if(A.getState().activeItemId!==null&&T){var x=T.item,M=T.itemInputValue,$=T.itemUrl,K=T.source;K.onActive(on({event:p,item:x,itemInputValue:M,itemUrl:$,refresh:P,source:K,state:A.getState()},D))}};p.preventDefault(),A.getState().isOpen===!1&&(y.openOnFocus||Boolean(A.getState().query))?Sn(on({event:p,props:y,query:A.getState().query,refresh:P,store:A},D)).then(function(){A.dispatch(p.key,{nextActiveItemId:y.defaultActiveItemId}),R(),setTimeout(q,0)}):(A.dispatch(p.key,{}),R(),q())}else if(p.key==="Escape")p.preventDefault(),A.dispatch(p.key,null),A.pendingRequests.cancelAll();else if(p.key==="Tab")A.dispatch("blur",null),A.pendingRequests.cancelAll();else if(p.key==="Enter"){if(A.getState().activeItemId===null||A.getState().collections.every(function(T){return T.items.length===0}))return void(y.debug||A.pendingRequests.cancelAll());p.preventDefault();var E=An(A.getState()),z=E.item,Y=E.itemInputValue,j=E.itemUrl,S=E.source;if(p.metaKey||p.ctrlKey)j!==void 0&&(S.onSelect(on({event:p,item:z,itemInputValue:Y,itemUrl:j,refresh:P,source:S,state:A.getState()},D)),y.navigator.navigateNewTab({itemUrl:j,item:z,state:A.getState()}));else if(p.shiftKey)j!==void 0&&(S.onSelect(on({event:p,item:z,itemInputValue:Y,itemUrl:j,refresh:P,source:S,state:A.getState()},D)),y.navigator.navigateNewWindow({itemUrl:j,item:z,state:A.getState()}));else if(!p.altKey){if(j!==void 0)return S.onSelect(on({event:p,item:z,itemInputValue:Y,itemUrl:j,refresh:P,source:S,state:A.getState()},D)),void y.navigator.navigate({itemUrl:j,item:z,state:A.getState()});Sn(on({event:p,nextState:{isOpen:!1},props:y,query:Y,refresh:P,store:A},D)).then(function(){S.onSelect(on({event:p,item:z,itemInputValue:Y,itemUrl:j,refresh:P,source:S,state:A.getState()},D))})}}})(Je({event:g,props:t,refresh:n,store:o},r))},onFocus:c,onBlur:nm,onClick:function(g){a.inputElement!==t.environment.document.activeElement||o.getState().isOpen||c(g)}},m)},getPanelProps:function(a){return Je({onMouseDown:function(i){i.preventDefault()},onMouseLeave:function(){o.dispatch("mouseleave",null)}},a)},getListProps:function(a){return Je({role:"listbox","aria-labelledby":"".concat(t.id,"-label"),id:"".concat(t.id,"-list")},a)},getItemProps:function(a){var i=a.item,c=a.source,s=Gn(a,j1);return Je({id:"".concat(t.id,"-item-").concat(i.__autocomplete_id),role:"option","aria-selected":o.getState().activeItemId===i.__autocomplete_id,onMouseMove:function(l){if(i.__autocomplete_id!==o.getState().activeItemId){o.dispatch("mousemove",i.__autocomplete_id);var u=An(o.getState());if(o.getState().activeItemId!==null&&u){var m=u.item,d=u.itemInputValue,f=u.itemUrl,v=u.source;v.onActive(Je({event:l,item:m,itemInputValue:d,itemUrl:f,refresh:n,source:v,state:o.getState()},r))}}},onMouseDown:function(l){l.preventDefault()},onClick:function(l){var u=c.getItemInputValue({item:i,state:o.getState()}),m=c.getItemUrl({item:i,state:o.getState()});(m?Promise.resolve():Sn(Je({event:l,nextState:{isOpen:!1},props:t,query:u,refresh:n,store:o},r))).then(function(){c.onSelect(Je({event:l,item:i,itemInputValue:u,itemUrl:m,refresh:n,source:c,state:o.getState()},r))})}},s)}}}function Is(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),n.push.apply(n,o)}return n}function V1(e){for(var t=1;t0},reshape:function(d){return d.sources}},c),{},{id:(l=c.id)!==null&&l!==void 0?l:"autocomplete-".concat(m1++),plugins:m,initialState:En({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},c.initialState),onStateChange:function(d){var f;(f=c.onStateChange)===null||f===void 0||f.call(c,d),m.forEach(function(v){var g;return(g=v.onStateChange)===null||g===void 0?void 0:g.call(v,d)})},onSubmit:function(d){var f;(f=c.onSubmit)===null||f===void 0||f.call(c,d),m.forEach(function(v){var g;return(g=v.onSubmit)===null||g===void 0?void 0:g.call(v,d)})},onReset:function(d){var f;(f=c.onReset)===null||f===void 0||f.call(c,d),m.forEach(function(v){var g;return(g=v.onReset)===null||g===void 0?void 0:g.call(v,d)})},getSources:function(d){return Promise.all([].concat(y1(m.map(function(f){return f.getSources})),[c.getSources]).filter(Boolean).map(function(f){return h1(f,d)})).then(function(f){return yo(f)}).then(function(f){return f.map(function(v){return En(En({},v),{},{onSelect:function(g){v.onSelect(g),s.forEach(function(b){var p;return(p=b.onSelect)===null||p===void 0?void 0:p.call(b,g)})},onActive:function(g){v.onActive(g),s.forEach(function(b){var p;return(p=b.onActive)===null||p===void 0?void 0:p.call(b,g)})}})})})},navigator:En({navigate:function(d){var f=d.itemUrl;u.location.assign(f)},navigateNewTab:function(d){var f=d.itemUrl,v=u.open(f,"_blank","noopener");v==null||v.focus()},navigateNewWindow:function(d){var f=d.itemUrl;u.open(f,"_blank","noopener")}},c.navigator)})}(e,t),o=g1(B1,n,function(c){var s=c.prevState,l=c.state;n.onStateChange(rn({prevState:s,state:l,refresh:i},r))}),r=function(c){var s=c.store;return{setActiveItemId:function(l){s.dispatch("setActiveItemId",l)},setQuery:function(l){s.dispatch("setQuery",l)},setCollections:function(l){var u=0,m=l.map(function(d){return Bo(Bo({},d),{},{items:yo(d.items).map(function(f){return Bo(Bo({},f),{},{__autocomplete_id:u++})})})});s.dispatch("setCollections",m)},setIsOpen:function(l){s.dispatch("setIsOpen",l)},setStatus:function(l){s.dispatch("setStatus",l)},setContext:function(l){s.dispatch("setContext",l)}}}({store:o}),a=q1(rn({props:n,refresh:i,store:o},r));function i(){return Sn(rn({event:new Event("input"),nextState:{isOpen:o.getState().isOpen},props:n,query:o.getState().query,refresh:i,store:o},r))}return n.plugins.forEach(function(c){var s;return(s=c.subscribe)===null||s===void 0?void 0:s.call(c,rn(rn({},r),{},{refresh:i,onSelect:function(l){t.push({onSelect:l})},onActive:function(l){t.push({onActive:l})}}))}),function(c){var s,l,u=c.metadata,m=c.environment;if(!((s=m.navigator)===null||s===void 0||(l=s.userAgent)===null||l===void 0)&&l.includes("Algolia Crawler")){var d=m.document.createElement("meta"),f=m.document.querySelector("head");d.name="algolia:metadata",setTimeout(function(){d.content=JSON.stringify(u),f.appendChild(d)},0)}}({metadata:N1({plugins:n.plugins,options:e}),environment:n.environment}),rn(rn({refresh:i},a),r)}function W1(e){var t=e.translations,n=(t===void 0?{}:t).searchByText,o=n===void 0?"Search by":n;return O.createElement("a",{href:"https://www.algolia.com/ref/docsearch/?utm_source=".concat(window.location.hostname,"&utm_medium=referral&utm_content=powered_by&utm_campaign=docsearch"),target:"_blank",rel:"noopener noreferrer"},O.createElement("span",{className:"DocSearch-Label"},o),O.createElement("svg",{width:"77",height:"19","aria-label":"Algolia",role:"img"},O.createElement("path",{d:"M2.5067 0h14.0245c1.384.001 2.5058 1.1205 2.5068 2.5017V16.5c-.0014 1.3808-1.1232 2.4995-2.5068 2.5H2.5067C1.1232 18.9995.0014 17.8808 0 16.5V2.4958A2.495 2.495 0 01.735.7294 2.505 2.505 0 012.5068 0zM37.95 15.0695c-3.7068.0168-3.7068-2.986-3.7068-3.4634L34.2372.3576 36.498 0v11.1794c0 .2715 0 1.9889 1.452 1.994v1.8961zm-9.1666-1.8388c.694 0 1.2086-.0397 1.5678-.1088v-2.2934a5.3639 5.3639 0 00-1.3303-.1679 4.8283 4.8283 0 00-.758.0582 2.2845 2.2845 0 00-.688.2024c-.2029.0979-.371.2362-.4919.4142-.1268.1788-.185.2826-.185.5533 0 .5297.185.8359.5205 1.0375.3355.2016.7928.3053 1.365.3053v-.0008zm-.1969-8.1817c.7463 0 1.3768.092 1.8856.2767.5088.1838.9195.4428 1.2204.7717.3068.334.5147.7777.6423 1.251.1327.4723.196.991.196 1.5603v5.798c-.5235.1036-1.05.192-1.5787.2649-.7048.1037-1.4976.156-2.3774.156-.5832 0-1.1215-.0582-1.6016-.167a3.385 3.385 0 01-1.2432-.5364 2.6034 2.6034 0 01-.8037-.9565c-.191-.3922-.29-.9447-.29-1.5208 0-.5533.11-.905.3246-1.2863a2.7351 2.7351 0 01.8849-.9329c.376-.242.8029-.415 1.2948-.5187a7.4517 7.4517 0 011.5381-.156 7.1162 7.1162 0 011.6667.2024V8.886c0-.259-.0296-.5061-.093-.7372a1.5847 1.5847 0 00-.3245-.6158 1.5079 1.5079 0 00-.6119-.4158 2.6788 2.6788 0 00-.966-.173c-.5206 0-.9948.0634-1.4283.1384a6.5481 6.5481 0 00-1.065.259l-.2712-1.849c.2831-.0986.7048-.1964 1.2491-.2943a9.2979 9.2979 0 011.752-.1501v.0008zm44.6597 8.1193c.6947 0 1.2086-.0405 1.567-.1097v-2.2942a5.3743 5.3743 0 00-1.3303-.1679c-.2485 0-.503.0177-.7573.0582a2.2853 2.2853 0 00-.688.2024 1.2333 1.2333 0 00-.4918.4142c-.1268.1788-.1843.2826-.1843.5533 0 .5297.1843.8359.5198 1.0375.3414.2066.7927.3053 1.365.3053v.0009zm-.191-8.1767c.7463 0 1.3768.0912 1.8856.2759.5087.1847.9195.4436 1.2204.7717.3.329.5147.7786.6414 1.251a5.7248 5.7248 0 01.197 1.562v5.7972c-.3466.0742-.874.1602-1.5788.2648-.7049.1038-1.4976.1552-2.3774.1552-.5832 0-1.1215-.0573-1.6016-.167a3.385 3.385 0 01-1.2432-.5356 2.6034 2.6034 0 01-.8038-.9565c-.191-.3922-.2898-.9447-.2898-1.5216 0-.5533.1098-.905.3245-1.2854a2.7373 2.7373 0 01.8849-.9338c.376-.2412.8029-.4141 1.2947-.5178a7.4545 7.4545 0 012.325-.1097c.2781.0287.5672.081.879.156v-.3686a2.7781 2.7781 0 00-.092-.738 1.5788 1.5788 0 00-.3246-.6166 1.5079 1.5079 0 00-.612-.415 2.6797 2.6797 0 00-.966-.1729c-.5205 0-.9947.0633-1.4282.1384a6.5608 6.5608 0 00-1.065.259l-.2712-1.8498c.283-.0979.7048-.1957 1.2491-.2935a9.8597 9.8597 0 011.752-.1494zm-6.79-1.072c-.7576.001-1.373-.6103-1.3759-1.3664 0-.755.6128-1.3664 1.376-1.3664.764 0 1.3775.6115 1.3775 1.3664s-.6195 1.3664-1.3776 1.3664zm1.1393 11.1507h-2.2726V5.3409l2.2734-.3568v10.0845l-.0008.0017zm-3.984 0c-3.707.0168-3.707-2.986-3.707-3.4642L59.7069.3576 61.9685 0v11.1794c0 .2715 0 1.9889 1.452 1.994V15.0703zm-7.3512-4.979c0-.975-.2138-1.7873-.6305-2.3516-.4167-.571-.9998-.852-1.747-.852-.7454 0-1.3302.281-1.7452.852-.4166.5702-.6195 1.3765-.6195 2.3516 0 .9851.208 1.6473.6254 2.2183.4158.576.9998.8587 1.7461.8587.7454 0 1.3303-.2885 1.747-.8595.4158-.5761.6237-1.2315.6237-2.2184v.0009zm2.3132-.006c0 .7609-.1099 1.3361-.3356 1.9654a4.654 4.654 0 01-.9533 1.6076A4.214 4.214 0 0155.613 14.69c-.579.2412-1.4697.3795-1.9143.3795-.4462-.005-1.3303-.1324-1.9033-.3795a4.307 4.307 0 01-1.474-1.0316c-.4115-.4445-.7293-.9801-.9609-1.6076a5.3423 5.3423 0 01-.3465-1.9653c0-.7608.104-1.493.3356-2.1155a4.683 4.683 0 01.9719-1.5958 4.3383 4.3383 0 011.479-1.0257c.5739-.242 1.2043-.3567 1.8864-.3567.6829 0 1.3125.1197 1.8906.3567a4.1245 4.1245 0 011.4816 1.0257 4.7587 4.7587 0 01.9592 1.5958c.2426.6225.3643 1.3547.3643 2.1155zm-17.0198 0c0 .9448.208 1.9932.6238 2.431.4166.4386.955.6579 1.6142.6579.3584 0 .6998-.0523 1.0176-.1502.3186-.0978.5721-.2134.775-.3517V7.0784a8.8706 8.8706 0 00-1.4926-.1906c-.8206-.0236-1.4452.312-1.8847.8468-.4335.5365-.6533 1.476-.6533 2.3516v-.0008zm6.2863 4.4485c0 1.5385-.3938 2.662-1.1866 3.3773-.791.7136-2.0005 1.0712-3.6308 1.0712-.5958 0-1.834-.1156-2.8228-.334l.3643-1.7865c.8282.173 1.9202.2193 2.4932.2193.9077 0 1.555-.1847 1.943-.5533.388-.3686.578-.916.578-1.643v-.3687a6.8289 6.8289 0 01-.8848.3349c-.3634.1096-.786.167-1.261.167-.6246 0-1.1917-.0979-1.7055-.2944a3.5554 3.5554 0 01-1.3244-.8645c-.3642-.3796-.6541-.8579-.8561-1.4289-.2028-.571-.3068-1.59-.3068-2.339 0-.7034.1099-1.5856.3245-2.1735.2198-.5871.5316-1.0949.9542-1.515.4167-.42.9255-.743 1.5213-.98a5.5923 5.5923 0 012.052-.3855c.7353 0 1.4114.092 2.0707.2024.6592.1088 1.2204.2236 1.6776.35v8.945-.0008zM11.5026 4.2418v-.6511c-.0005-.4553-.3704-.8241-.8266-.8241H8.749c-.4561 0-.826.3688-.8265.824v.669c0 .0742.0693.1264.1445.1096a6.0346 6.0346 0 011.6768-.2362 6.125 6.125 0 011.6202.2185.1116.1116 0 00.1386-.1097zm-5.2806.852l-.3296-.3282a.8266.8266 0 00-1.168 0l-.393.3922a.8199.8199 0 000 1.164l.3237.323c.0524.0515.1268.0397.1733-.0117.191-.259.3989-.507.6305-.7372.2374-.2362.48-.4437.7462-.6335.0575-.0354.0634-.1155.017-.1687zm3.5159 2.069v2.818c0 .081.0879.1392.1622.0987l2.5102-1.2964c.0574-.0287.0752-.0987.0464-.1552a3.1237 3.1237 0 00-2.603-1.574c-.0575 0-.115.0456-.115.1097l-.0008-.0009zm.0008 6.789c-2.0933.0005-3.7915-1.6912-3.7947-3.7804C5.9468 8.0821 7.6452 6.39 9.7387 6.391c2.0932-.0005 3.7911 1.6914 3.794 3.7804a3.7783 3.7783 0 01-1.1124 2.675 3.7936 3.7936 0 01-2.6824 1.1054h.0008zM9.738 4.8002c-1.9218 0-3.6975 1.0232-4.6584 2.6841a5.359 5.359 0 000 5.3683c.9609 1.661 2.7366 2.6841 4.6584 2.6841a5.3891 5.3891 0 003.8073-1.5725 5.3675 5.3675 0 001.578-3.7987 5.3574 5.3574 0 00-1.5771-3.797A5.379 5.379 0 009.7387 4.801l-.0008-.0008z",fill:"currentColor",fillRule:"evenodd"})))}function Ko(e){return O.createElement("svg",{width:"15",height:"15","aria-label":e.ariaLabel,role:"img"},O.createElement("g",{fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"1.2"},e.children))}function K1(e){var t=e.translations,n=t===void 0?{}:t,o=n.selectText,r=o===void 0?"to select":o,a=n.selectKeyAriaLabel,i=a===void 0?"Enter key":a,c=n.navigateText,s=c===void 0?"to navigate":c,l=n.navigateUpKeyAriaLabel,u=l===void 0?"Arrow up":l,m=n.navigateDownKeyAriaLabel,d=m===void 0?"Arrow down":m,f=n.closeText,v=f===void 0?"to close":f,g=n.closeKeyAriaLabel,b=g===void 0?"Escape key":g,p=n.searchByText,y=p===void 0?"Search by":p;return O.createElement(O.Fragment,null,O.createElement("div",{className:"DocSearch-Logo"},O.createElement(W1,{translations:{searchByText:y}})),O.createElement("ul",{className:"DocSearch-Commands"},O.createElement("li",null,O.createElement("kbd",{className:"DocSearch-Commands-Key"},O.createElement(Ko,{ariaLabel:i},O.createElement("path",{d:"M12 3.53088v3c0 1-1 2-2 2H4M7 11.53088l-3-3 3-3"}))),O.createElement("span",{className:"DocSearch-Label"},r)),O.createElement("li",null,O.createElement("kbd",{className:"DocSearch-Commands-Key"},O.createElement(Ko,{ariaLabel:d},O.createElement("path",{d:"M7.5 3.5v8M10.5 8.5l-3 3-3-3"}))),O.createElement("kbd",{className:"DocSearch-Commands-Key"},O.createElement(Ko,{ariaLabel:u},O.createElement("path",{d:"M7.5 11.5v-8M10.5 6.5l-3-3-3 3"}))),O.createElement("span",{className:"DocSearch-Label"},s)),O.createElement("li",null,O.createElement("kbd",{className:"DocSearch-Commands-Key"},O.createElement(Ko,{ariaLabel:b},O.createElement("path",{d:"M13.6167 8.936c-.1065.3583-.6883.962-1.4875.962-.7993 0-1.653-.9165-1.653-2.1258v-.5678c0-1.2548.7896-2.1016 1.653-2.1016.8634 0 1.3601.4778 1.4875 1.0724M9 6c-.1352-.4735-.7506-.9219-1.46-.8972-.7092.0246-1.344.57-1.344 1.2166s.4198.8812 1.3445.9805C8.465 7.3992 8.968 7.9337 9 8.5c.032.5663-.454 1.398-1.4595 1.398C6.6593 9.898 6 9 5.963 8.4851m-1.4748.5368c-.2635.5941-.8099.876-1.5443.876s-1.7073-.6248-1.7073-2.204v-.4603c0-1.0416.721-2.131 1.7073-2.131.9864 0 1.6425 1.031 1.5443 2.2492h-2.956"}))),O.createElement("span",{className:"DocSearch-Label"},v))))}function Y1(e){var t=e.hit,n=e.children;return O.createElement("a",{href:t.url},n)}function J1(){return O.createElement("svg",{viewBox:"0 0 38 38",stroke:"currentColor",strokeOpacity:".5"},O.createElement("g",{fill:"none",fillRule:"evenodd"},O.createElement("g",{transform:"translate(1 1)",strokeWidth:"2"},O.createElement("circle",{strokeOpacity:".3",cx:"18",cy:"18",r:"18"}),O.createElement("path",{d:"M36 18c0-9.94-8.06-18-18-18"},O.createElement("animateTransform",{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"1s",repeatCount:"indefinite"})))))}function Q1(){return O.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},O.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},O.createElement("path",{d:"M3.18 6.6a8.23 8.23 0 1112.93 9.94h0a8.23 8.23 0 01-11.63 0"}),O.createElement("path",{d:"M6.44 7.25H2.55V3.36M10.45 6v5.6M10.45 11.6L13 13"})))}function $a(){return O.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},O.createElement("path",{d:"M10 10l5.09-5.09L10 10l5.09 5.09L10 10zm0 0L4.91 4.91 10 10l-5.09 5.09L10 10z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}function G1(){return O.createElement("svg",{className:"DocSearch-Hit-Select-Icon",width:"20",height:"20",viewBox:"0 0 20 20"},O.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},O.createElement("path",{d:"M18 3v4c0 2-2 4-4 4H2"}),O.createElement("path",{d:"M8 17l-6-6 6-6"})))}var Z1=function(){return O.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},O.createElement("path",{d:"M17 6v12c0 .52-.2 1-1 1H4c-.7 0-1-.33-1-1V2c0-.55.42-1 1-1h8l5 5zM14 8h-3.13c-.51 0-.87-.34-.87-.87V4",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))};function X1(e){switch(e.type){case"lvl1":return O.createElement(Z1,null);case"content":return O.createElement(tb,null);default:return O.createElement(eb,null)}}function eb(){return O.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},O.createElement("path",{d:"M13 13h4-4V8H7v5h6v4-4H7V8H3h4V3v5h6V3v5h4-4v5zm-6 0v4-4H3h4z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}function tb(){return O.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},O.createElement("path",{d:"M17 5H3h14zm0 5H3h14zm0 5H3h14z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))}function xs(){return O.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},O.createElement("path",{d:"M10 14.2L5 17l1-5.6-4-4 5.5-.7 2.5-5 2.5 5 5.6.8-4 4 .9 5.5z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))}function nb(){return O.createElement("svg",{width:"40",height:"40",viewBox:"0 0 20 20",fill:"none",fillRule:"evenodd",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"},O.createElement("path",{d:"M19 4.8a16 16 0 00-2-1.2m-3.3-1.2A16 16 0 001.1 4.7M16.7 8a12 12 0 00-2.8-1.4M10 6a12 12 0 00-6.7 2M12.3 14.7a4 4 0 00-4.5 0M14.5 11.4A8 8 0 0010 10M3 16L18 2M10 18h0"}))}function ob(){return O.createElement("svg",{width:"40",height:"40",viewBox:"0 0 20 20",fill:"none",fillRule:"evenodd",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"},O.createElement("path",{d:"M15.5 4.8c2 3 1.7 7-1 9.7h0l4.3 4.3-4.3-4.3a7.8 7.8 0 01-9.8 1m-2.2-2.2A7.8 7.8 0 0113.2 2.4M2 18L18 2"}))}function rb(e){var t=e.translations,n=t===void 0?{}:t,o=n.titleText,r=o===void 0?"Unable to fetch results":o,a=n.helpText,i=a===void 0?"You might want to check your network connection.":a;return O.createElement("div",{className:"DocSearch-ErrorScreen"},O.createElement("div",{className:"DocSearch-Screen-Icon"},O.createElement(nb,null)),O.createElement("p",{className:"DocSearch-Title"},r),O.createElement("p",{className:"DocSearch-Help"},i))}var ab=["translations"];function ib(e){return function(t){if(Array.isArray(t))return aa(t)}(e)||function(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}(e)||function(t,n){if(!!t){if(typeof t=="string")return aa(t,n);var o=Object.prototype.toString.call(t).slice(8,-1);if(o==="Object"&&t.constructor&&(o=t.constructor.name),o==="Map"||o==="Set")return Array.from(t);if(o==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o))return aa(t,n)}}(e)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function aa(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n=0||(u[s]=i[s]);return u}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function sb(e){var t=e.translations,n=t===void 0?{}:t,o=cb(e,ab),r=n.noResultsText,a=r===void 0?"No results for":r,i=n.suggestedQueryText,c=i===void 0?"Try searching for":i,s=n.reportMissingResultsText,l=s===void 0?"Believe this query should return results?":s,u=n.reportMissingResultsLinkText,m=u===void 0?"Let us know.":u,d=o.state.context.searchSuggestions;return O.createElement("div",{className:"DocSearch-NoResults"},O.createElement("div",{className:"DocSearch-Screen-Icon"},O.createElement(ob,null)),O.createElement("p",{className:"DocSearch-Title"},a,' "',O.createElement("strong",null,o.state.query),'"'),d&&d.length>0&&O.createElement("div",{className:"DocSearch-NoResults-Prefill-List"},O.createElement("p",{className:"DocSearch-Help"},c,":"),O.createElement("ul",null,d.slice(0,3).reduce(function(f,v){return[].concat(ib(f),[O.createElement("li",{key:v},O.createElement("button",{className:"DocSearch-Prefill",key:v,type:"button",onClick:function(){o.setQuery(v.toLowerCase()+" "),o.refresh(),o.inputRef.current.focus()}},v))])},[]))),o.getMissingResultsUrl&&O.createElement("p",{className:"DocSearch-Help"},"".concat(l," "),O.createElement("a",{href:o.getMissingResultsUrl({query:o.state.query}),target:"_blank",rel:"noopener noreferrer"},m)))}var lb=["hit","attribute","tagName"];function ks(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),n.push.apply(n,o)}return n}function Cs(e){for(var t=1;t=0||(u[s]=i[s]);return u}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function Ms(e,t){return t.split(".").reduce(function(n,o){return n!=null&&n[o]?n[o]:null},e)}function wn(e){var t=e.hit,n=e.attribute,o=e.tagName;return Pt(o===void 0?"span":o,Cs(Cs({},mb(e,lb)),{},{dangerouslySetInnerHTML:{__html:Ms(t,"_snippetResult.".concat(n,".value"))||Ms(t,n)}}))}function $s(e,t){return function(n){if(Array.isArray(n))return n}(e)||function(n,o){var r=n==null?null:typeof Symbol<"u"&&n[Symbol.iterator]||n["@@iterator"];if(r!=null){var a,i,c=[],s=!0,l=!1;try{for(r=r.call(n);!(s=(a=r.next()).done)&&(c.push(a.value),!o||c.length!==o);s=!0);}catch(u){l=!0,i=u}finally{try{s||r.return==null||r.return()}finally{if(l)throw i}}return c}}(e,t)||function(n,o){if(!!n){if(typeof n=="string")return js(n,o);var r=Object.prototype.toString.call(n).slice(8,-1);if(r==="Object"&&n.constructor&&(r=n.constructor.name),r==="Map"||r==="Set")return Array.from(n);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return js(n,o)}}(e,t)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function js(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n|<\/mark>)/g,hb=RegExp(am.source);function im(e){var t,n,o,r,a,i=e;if(!i.__docsearch_parent&&!e._highlightResult)return e.hierarchy.lvl0;var c=((i.__docsearch_parent?(t=i.__docsearch_parent)===null||t===void 0||(n=t._highlightResult)===null||n===void 0||(o=n.hierarchy)===null||o===void 0?void 0:o.lvl0:(r=e._highlightResult)===null||r===void 0||(a=r.hierarchy)===null||a===void 0?void 0:a.lvl0)||{}).value;return c&&hb.test(c)?c.replace(am,""):c}function Ha(){return Ha=Object.assign||function(e){for(var t=1;t=0||(u[s]=i[s]);return u}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function gb(e){var t=e.translations,n=t===void 0?{}:t,o=vb(e,_b),r=n.recentSearchesTitle,a=r===void 0?"Recent":r,i=n.noRecentSearchesText,c=i===void 0?"No recent searches":i,s=n.saveRecentSearchButtonTitle,l=s===void 0?"Save this search":s,u=n.removeRecentSearchButtonTitle,m=u===void 0?"Remove this search from history":u,d=n.favoriteSearchesTitle,f=d===void 0?"Favorite":d,v=n.removeFavoriteSearchButtonTitle,g=v===void 0?"Remove this search from favorites":v;return o.state.status==="idle"&&o.hasCollections===!1?o.disableUserPersonalization?null:O.createElement("div",{className:"DocSearch-StartScreen"},O.createElement("p",{className:"DocSearch-Help"},c)):o.hasCollections===!1?null:O.createElement("div",{className:"DocSearch-Dropdown-Container"},O.createElement(ja,Er({},o,{title:a,collection:o.state.collections[0],renderIcon:function(){return O.createElement("div",{className:"DocSearch-Hit-icon"},O.createElement(Q1,null))},renderAction:function(b){var p=b.item,y=b.runFavoriteTransition,P=b.runDeleteTransition;return O.createElement(O.Fragment,null,O.createElement("div",{className:"DocSearch-Hit-action"},O.createElement("button",{className:"DocSearch-Hit-action-button",title:l,type:"submit",onClick:function(A){A.preventDefault(),A.stopPropagation(),y(function(){o.favoriteSearches.add(p),o.recentSearches.remove(p),o.refresh()})}},O.createElement(xs,null))),O.createElement("div",{className:"DocSearch-Hit-action"},O.createElement("button",{className:"DocSearch-Hit-action-button",title:m,type:"submit",onClick:function(A){A.preventDefault(),A.stopPropagation(),P(function(){o.recentSearches.remove(p),o.refresh()})}},O.createElement($a,null))))}})),O.createElement(ja,Er({},o,{title:f,collection:o.state.collections[1],renderIcon:function(){return O.createElement("div",{className:"DocSearch-Hit-icon"},O.createElement(xs,null))},renderAction:function(b){var p=b.item,y=b.runDeleteTransition;return O.createElement("div",{className:"DocSearch-Hit-action"},O.createElement("button",{className:"DocSearch-Hit-action-button",title:g,type:"submit",onClick:function(P){P.preventDefault(),P.stopPropagation(),y(function(){o.favoriteSearches.remove(p),o.refresh()})}},O.createElement($a,null)))}})))}var bb=["translations"];function wr(){return wr=Object.assign||function(e){for(var t=1;t=0||(u[s]=i[s]);return u}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var Eb=O.memo(function(e){var t=e.translations,n=t===void 0?{}:t,o=yb(e,bb);if(o.state.status==="error")return O.createElement(rb,{translations:n==null?void 0:n.errorScreen});var r=o.state.collections.some(function(a){return a.items.length>0});return o.state.query?r===!1?O.createElement(sb,wr({},o,{translations:n==null?void 0:n.noResultsScreen})):O.createElement(pb,o):O.createElement(gb,wr({},o,{hasCollections:r,translations:n==null?void 0:n.startScreen}))},function(e,t){return t.state.status==="loading"||t.state.status==="stalled"}),wb=["translations"];function Or(){return Or=Object.assign||function(e){for(var t=1;t=0||(u[s]=i[s]);return u}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function Pb(e){var t=e.translations,n=t===void 0?{}:t,o=Ob(e,wb),r=n.resetButtonTitle,a=r===void 0?"Clear the query":r,i=n.resetButtonAriaLabel,c=i===void 0?"Clear the query":i,s=n.cancelButtonText,l=s===void 0?"Cancel":s,u=n.cancelButtonAriaLabel,m=u===void 0?"Cancel":u,d=o.getFormProps({inputElement:o.inputRef.current}).onReset;return O.useEffect(function(){o.autoFocus&&o.inputRef.current&&o.inputRef.current.focus()},[o.autoFocus,o.inputRef]),O.useEffect(function(){o.isFromSelection&&o.inputRef.current&&o.inputRef.current.select()},[o.isFromSelection,o.inputRef]),O.createElement(O.Fragment,null,O.createElement("form",{className:"DocSearch-Form",onSubmit:function(f){f.preventDefault()},onReset:d},O.createElement("label",Or({className:"DocSearch-MagnifierLabel"},o.getLabelProps()),O.createElement(tm,null)),O.createElement("div",{className:"DocSearch-LoadingIndicator"},O.createElement(J1,null)),O.createElement("input",Or({className:"DocSearch-Input",ref:o.inputRef},o.getInputProps({inputElement:o.inputRef.current,autoFocus:o.autoFocus,maxLength:64}))),O.createElement("button",{type:"reset",title:a,className:"DocSearch-Reset","aria-label":c,hidden:!o.state.query},O.createElement($a,null))),O.createElement("button",{className:"DocSearch-Cancel",type:"reset","aria-label":m,onClick:o.onClose},l))}var Sb=["_highlightResult","_snippetResult"];function Ab(e,t){if(e==null)return{};var n,o,r=function(i,c){if(i==null)return{};var s,l,u={},m=Object.keys(i);for(l=0;l=0||(u[s]=i[s]);return u}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function Tb(e){return function(){var t="__TEST_KEY__";try{return localStorage.setItem(t,""),localStorage.removeItem(t),!0}catch{return!1}}()===!1?{setItem:function(){},getItem:function(){return[]}}:{setItem:function(t){return window.localStorage.setItem(e,JSON.stringify(t))},getItem:function(){var t=window.localStorage.getItem(e);return t?JSON.parse(t):[]}}}function Vs(e){var t=e.key,n=e.limit,o=n===void 0?5:n,r=Tb(t),a=r.getItem().slice(0,o);return{add:function(i){var c=i,s=(c._highlightResult,c._snippetResult,Ab(c,Sb)),l=a.findIndex(function(u){return u.objectID===s.objectID});l>-1&&a.splice(l,1),a.unshift(s),a=a.slice(0,o),r.setItem(a)},remove:function(i){a=a.filter(function(c){return c.objectID!==i.objectID}),r.setItem(a)},getAll:function(){return a}}}var Ib=["facetName","facetQuery"];function Lb(e){var t,n="algoliasearch-client-js-".concat(e.key),o=function(){return t===void 0&&(t=e.localStorage||window.localStorage),t},r=function(){return JSON.parse(o().getItem(n)||"{}")};return{get:function(a,i){var c=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then(function(){var s=JSON.stringify(a),l=r()[s];return Promise.all([l||i(),l!==void 0])}).then(function(s){var l=_r(s,2),u=l[0],m=l[1];return Promise.all([u,m||c.miss(u)])}).then(function(s){return _r(s,1)[0]})},set:function(a,i){return Promise.resolve().then(function(){var c=r();return c[JSON.stringify(a)]=i,o().setItem(n,JSON.stringify(c)),i})},delete:function(a){return Promise.resolve().then(function(){var i=r();delete i[JSON.stringify(a)],o().setItem(n,JSON.stringify(i))})},clear:function(){return Promise.resolve().then(function(){o().removeItem(n)})}}}function eo(e){var t=vr(e.caches),n=t.shift();return n===void 0?{get:function(o,r){var a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}};return r().then(function(i){return Promise.all([i,a.miss(i)])}).then(function(i){return _r(i,1)[0]})},set:function(o,r){return Promise.resolve(r)},delete:function(o){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(o,r){var a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}};return n.get(o,r,a).catch(function(){return eo({caches:t}).get(o,r,a)})},set:function(o,r){return n.set(o,r).catch(function(){return eo({caches:t}).set(o,r)})},delete:function(o){return n.delete(o).catch(function(){return eo({caches:t}).delete(o)})},clear:function(){return n.clear().catch(function(){return eo({caches:t}).clear()})}}}function ia(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{serializable:!0},t={};return{get:function(n,o){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}},a=JSON.stringify(n);if(a in t)return Promise.resolve(e.serializable?JSON.parse(t[a]):t[a]);var i=o(),c=r&&r.miss||function(){return Promise.resolve()};return i.then(function(s){return c(s)}).then(function(){return i})},set:function(n,o){return t[JSON.stringify(n)]=e.serializable?JSON.stringify(o):o,Promise.resolve(o)},delete:function(n){return delete t[JSON.stringify(n)],Promise.resolve()},clear:function(){return t={},Promise.resolve()}}}function Db(e){for(var t=e.length-1;t>0;t--){var n=Math.floor(Math.random()*(t+1)),o=e[t];e[t]=e[n],e[n]=o}return e}function cm(e,t){return t&&Object.keys(t).forEach(function(n){e[n]=t[n](e)}),e}function qr(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o0?o:void 0,timeout:n.timeout||t,headers:n.headers||{},queryParameters:n.queryParameters||{},cacheable:n.cacheable}}var Tn={Read:1,Write:2,Any:3},sm=1,Rb=2,lm=3;function um(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:sm;return Pe(Pe({},e),{},{status:t,lastUpdate:Date.now()})}function mm(e){return typeof e=="string"?{protocol:"https",url:e,accept:Tn.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||Tn.Any}}var Fs="GET",Vr="POST";function xb(e,t){return Promise.all(t.map(function(n){return e.get(n,function(){return Promise.resolve(um(n))})})).then(function(n){var o=n.filter(function(i){return function(c){return c.status===sm||Date.now()-c.lastUpdate>12e4}(i)}),r=n.filter(function(i){return function(c){return c.status===lm&&Date.now()-c.lastUpdate<=12e4}(i)}),a=[].concat(vr(o),vr(r));return{getTimeout:function(i,c){return(r.length===0&&i===0?1:r.length+3+i)*c},statelessHosts:a.length>0?a.map(function(i){return mm(i)}):t}})}function Bs(e,t,n,o){var r=[],a=function(d,f){if(!(d.method===Fs||d.data===void 0&&f.data===void 0)){var v=Array.isArray(d.data)?d.data:Pe(Pe({},d.data),f.data);return JSON.stringify(v)}}(n,o),i=function(d,f){var v=Pe(Pe({},d.headers),f.headers),g={};return Object.keys(v).forEach(function(b){var p=v[b];g[b.toLowerCase()]=p}),g}(e,o),c=n.method,s=n.method!==Fs?{}:Pe(Pe({},n.data),o.data),l=Pe(Pe(Pe({"x-algolia-agent":e.userAgent.value},e.queryParameters),s),o.queryParameters),u=0,m=function d(f,v){var g=f.pop();if(g===void 0)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:zs(r)};var b={data:a,headers:i,method:c,url:Cb(g,n.path,l),connectTimeout:v(u,e.timeouts.connect),responseTimeout:v(u,o.timeout)},p=function(P){var A={request:b,response:P,host:g,triesLeft:f.length};return r.push(A),A},y={onSucess:function(P){return function(A){try{return JSON.parse(A.content)}catch(D){throw function(q,R){return{name:"DeserializationError",message:q,response:R}}(D.message,A)}}(P)},onRetry:function(P){var A=p(P);return P.isTimedOut&&u++,Promise.all([e.logger.info("Retryable failure",fm(A)),e.hostsCache.set(g,um(g,P.isTimedOut?lm:Rb))]).then(function(){return d(f,v)})},onFail:function(P){throw p(P),function(A,D){var q=A.content,R=A.status,E=q;try{E=JSON.parse(q).message}catch{}return function(z,Y,j){return{name:"ApiError",message:z,status:Y,transporterStackTrace:j}}(E,R,D)}(P,zs(r))}};return e.requester.send(b).then(function(P){return function(A,D){return function(q){var R=q.status;return q.isTimedOut||function(E){var z=E.isTimedOut,Y=E.status;return!z&&~~Y==0}(q)||~~(R/100)!=2&&~~(R/100)!=4}(A)?D.onRetry(A):~~(A.status/100)==2?D.onSucess(A):D.onFail(A)}(P,y)})};return xb(e.hostsCache,t).then(function(d){return m(vr(d.statelessHosts).reverse(),d.getTimeout)})}function kb(e){var t={value:"Algolia for JavaScript (".concat(e,")"),add:function(n){var o="; ".concat(n.segment).concat(n.version!==void 0?" (".concat(n.version,")"):"");return t.value.indexOf(o)===-1&&(t.value="".concat(t.value).concat(o)),t}};return t}function Cb(e,t,n){var o=dm(n),r="".concat(e.protocol,"://").concat(e.url,"/").concat(t.charAt(0)==="/"?t.substr(1):t);return o.length&&(r+="?".concat(o)),r}function dm(e){return Object.keys(e).map(function(t){return qr("%s=%s",t,(n=e[t],Object.prototype.toString.call(n)==="[object Object]"||Object.prototype.toString.call(n)==="[object Array]"?JSON.stringify(e[t]):e[t]));var n}).join("&")}function zs(e){return e.map(function(t){return fm(t)})}function fm(e){var t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return Pe(Pe({},e),{},{request:Pe(Pe({},e.request),{},{headers:Pe(Pe({},e.request.headers),t)})})}var Mb=function(e){var t=e.appId,n=function(a,i,c){var s={"x-algolia-api-key":c,"x-algolia-application-id":i};return{headers:function(){return a===er.WithinHeaders?s:{}},queryParameters:function(){return a===er.WithinQueryParameters?s:{}}}}(e.authMode!==void 0?e.authMode:er.WithinHeaders,t,e.apiKey),o=function(a){var i=a.hostsCache,c=a.logger,s=a.requester,l=a.requestsCache,u=a.responsesCache,m=a.timeouts,d=a.userAgent,f=a.hosts,v=a.queryParameters,g={hostsCache:i,logger:c,requester:s,requestsCache:l,responsesCache:u,timeouts:m,userAgent:d,headers:a.headers,queryParameters:v,hosts:f.map(function(b){return mm(b)}),read:function(b,p){var y=Ns(p,g.timeouts.read),P=function(){return Bs(g,g.hosts.filter(function(D){return(D.accept&Tn.Read)!=0}),b,y)};if((y.cacheable!==void 0?y.cacheable:b.cacheable)!==!0)return P();var A={request:b,mappedRequestOptions:y,transporter:{queryParameters:g.queryParameters,headers:g.headers}};return g.responsesCache.get(A,function(){return g.requestsCache.get(A,function(){return g.requestsCache.set(A,P()).then(function(D){return Promise.all([g.requestsCache.delete(A),D])},function(D){return Promise.all([g.requestsCache.delete(A),Promise.reject(D)])}).then(function(D){var q=_r(D,2);return q[0],q[1]})})},{miss:function(D){return g.responsesCache.set(A,D)}})},write:function(b,p){return Bs(g,g.hosts.filter(function(y){return(y.accept&Tn.Write)!=0}),b,Ns(p,g.timeouts.write))}};return g}(Pe(Pe({hosts:[{url:"".concat(t,"-dsn.algolia.net"),accept:Tn.Read},{url:"".concat(t,".algolia.net"),accept:Tn.Write}].concat(Db([{url:"".concat(t,"-1.algolianet.com")},{url:"".concat(t,"-2.algolianet.com")},{url:"".concat(t,"-3.algolianet.com")}]))},e),{},{headers:Pe(Pe(Pe({},n.headers()),{"content-type":"application/x-www-form-urlencoded"}),e.headers),queryParameters:Pe(Pe({},n.queryParameters()),e.queryParameters)})),r={transporter:o,appId:t,addAlgoliaAgent:function(a,i){o.userAgent.add({segment:a,version:i})},clearCache:function(){return Promise.all([o.requestsCache.clear(),o.responsesCache.clear()]).then(function(){})}};return cm(r,e.methods)},hm=function(e){return function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o={transporter:e.transporter,appId:e.appId,indexName:t};return cm(o,n.methods)}},Us=function(e){return function(t,n){var o=t.map(function(r){return Pe(Pe({},r),{},{params:dm(r.params||{})})});return e.transporter.read({method:Vr,path:"1/indexes/*/queries",data:{requests:o},cacheable:!0},n)}},Ws=function(e){return function(t,n){return Promise.all(t.map(function(o){var r=o.params,a=r.facetName,i=r.facetQuery,c=B0(r,Ib);return hm(e)(o.indexName,{methods:{searchForFacetValues:pm}}).searchForFacetValues(a,i,Pe(Pe({},n),c))}))}},$b=function(e){return function(t,n,o){return e.transporter.read({method:Vr,path:qr("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:n},cacheable:!0},o)}},jb=function(e){return function(t,n){return e.transporter.read({method:Vr,path:qr("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},n)}},pm=function(e){return function(t,n,o){return e.transporter.read({method:Vr,path:qr("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:n},cacheable:!0},o)}},Hb=1,qb=2,Vb=3;function _m(e,t,n){var o,r={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:function(a){return new Promise(function(i){var c=new XMLHttpRequest;c.open(a.method,a.url,!0),Object.keys(a.headers).forEach(function(m){return c.setRequestHeader(m,a.headers[m])});var s,l=function(m,d){return setTimeout(function(){c.abort(),i({status:0,content:d,isTimedOut:!0})},1e3*m)},u=l(a.connectTimeout,"Connection timeout");c.onreadystatechange=function(){c.readyState>c.OPENED&&s===void 0&&(clearTimeout(u),s=l(a.responseTimeout,"Socket timeout"))},c.onerror=function(){c.status===0&&(clearTimeout(u),clearTimeout(s),i({content:c.responseText||"Network request failed",status:c.status,isTimedOut:!1}))},c.onload=function(){clearTimeout(u),clearTimeout(s),i({content:c.responseText,status:c.status,isTimedOut:!1})},c.send(a.data)})}},logger:(o=Vb,{debug:function(a,i){return Hb>=o&&console.debug(a,i),Promise.resolve()},info:function(a,i){return qb>=o&&console.info(a,i),Promise.resolve()},error:function(a,i){return console.error(a,i),Promise.resolve()}}),responsesCache:ia(),requestsCache:ia({serializable:!1}),hostsCache:eo({caches:[Lb({key:"".concat("4.8.5","-").concat(e)}),ia()]}),userAgent:kb("4.8.5").add({segment:"Browser",version:"lite"}),authMode:er.WithinQueryParameters};return Mb(Pe(Pe(Pe({},r),n),{},{methods:{search:Us,searchForFacetValues:Ws,multipleQueries:Us,multipleSearchForFacetValues:Ws,initIndex:function(a){return function(i){return hm(a)(i,{methods:{search:jb,searchForFacetValues:pm,findAnswers:$b}})}}}}))}_m.version="4.8.5";var Nb=["footer","searchBox"];function so(){return so=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,o=new Array(t);n=0||(u[s]=i[s]);return u}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function Ub(e){var t=e.appId,n=e.apiKey,o=e.indexName,r=e.placeholder,a=r===void 0?"Search docs":r,i=e.searchParameters,c=e.onClose,s=c===void 0?fb:c,l=e.transformItems,u=l===void 0?qs:l,m=e.hitComponent,d=m===void 0?Y1:m,f=e.resultsFooterComponent,v=f===void 0?function(){return null}:f,g=e.navigator,b=e.initialScrollY,p=b===void 0?0:b,y=e.transformSearchClient,P=y===void 0?qs:y,A=e.disableUserPersonalization,D=A!==void 0&&A,q=e.initialQuery,R=q===void 0?"":q,E=e.translations,z=E===void 0?{}:E,Y=e.getMissingResultsUrl,j=z.footer,S=z.searchBox,T=zb(z,Nb),x=Bb(O.useState({query:"",collections:[],completion:null,context:{},isOpen:!1,activeItemId:null,status:"idle"}),2),M=x[0],$=x[1],K=O.useRef(null),te=O.useRef(null),me=O.useRef(null),de=O.useRef(null),ve=O.useRef(null),Ae=O.useRef(10),xe=O.useRef(typeof window<"u"?window.getSelection().toString().slice(0,64):"").current,Fe=O.useRef(R||xe).current,k=function(_,w,I){return O.useMemo(function(){var C=_m(_,w);return C.addAlgoliaAgent("docsearch","3.2.1"),/docsearch.js \(.*\)/.test(C.transporter.userAgent.value)===!1&&C.addAlgoliaAgent("docsearch-react","3.2.1"),I(C)},[_,w,I])}(t,n,P),ee=O.useRef(Vs({key:"__DOCSEARCH_FAVORITE_SEARCHES__".concat(o),limit:10})).current,B=O.useRef(Vs({key:"__DOCSEARCH_RECENT_SEARCHES__".concat(o),limit:ee.getAll().length===0?7:4})).current,X=O.useCallback(function(_){if(!D){var w=_.type==="content"?_.__docsearch_parent:_;w&&ee.getAll().findIndex(function(I){return I.objectID===w.objectID})===-1&&B.add(w)}},[ee,B,D]),pe=O.useMemo(function(){return U1({id:"docsearch",defaultActiveItemId:0,placeholder:a,openOnFocus:!0,initialState:{query:Fe,context:{searchSuggestions:[]}},navigator:g,onStateChange:function(_){$(_.state)},getSources:function(_){var w=_.query,I=_.state,C=_.setContext,H=_.setStatus;return w?k.search([{query:w,indexName:o,params:ca({attributesToRetrieve:["hierarchy.lvl0","hierarchy.lvl1","hierarchy.lvl2","hierarchy.lvl3","hierarchy.lvl4","hierarchy.lvl5","hierarchy.lvl6","content","type","url"],attributesToSnippet:["hierarchy.lvl1:".concat(Ae.current),"hierarchy.lvl2:".concat(Ae.current),"hierarchy.lvl3:".concat(Ae.current),"hierarchy.lvl4:".concat(Ae.current),"hierarchy.lvl5:".concat(Ae.current),"hierarchy.lvl6:".concat(Ae.current),"content:".concat(Ae.current)],snippetEllipsisText:"\u2026",highlightPreTag:"",highlightPostTag:"",hitsPerPage:20},i)}]).catch(function(F){throw F.name==="RetryError"&&H("error"),F}).then(function(F){var J=F.results[0],W=J.hits,G=J.nbHits,U=Hs(W,function(re){return im(re)});return I.context.searchSuggestions.length0&&(ue(),ve.current&&ve.current.focus())},[Fe,ue]),O.useEffect(function(){function _(){if(te.current){var w=.01*window.innerHeight;te.current.style.setProperty("--docsearch-vh","".concat(w,"px"))}}return _(),window.addEventListener("resize",_),function(){window.removeEventListener("resize",_)}},[]),O.createElement("div",so({ref:K},fe({"aria-expanded":!0}),{className:["DocSearch","DocSearch-Container",M.status==="stalled"&&"DocSearch-Container--Stalled",M.status==="error"&&"DocSearch-Container--Errored"].filter(Boolean).join(" "),role:"button",tabIndex:0,onMouseDown:function(_){_.target===_.currentTarget&&s()}}),O.createElement("div",{className:"DocSearch-Modal",ref:te},O.createElement("header",{className:"DocSearch-SearchBar",ref:me},O.createElement(Pb,so({},pe,{state:M,autoFocus:Fe.length===0,inputRef:ve,isFromSelection:Boolean(Fe)&&Fe===xe,translations:S,onClose:s}))),O.createElement("div",{className:"DocSearch-Dropdown",ref:de},O.createElement(Eb,so({},pe,{indexName:o,state:M,hitComponent:d,resultsFooterComponent:v,disableUserPersonalization:D,recentSearches:B,favoriteSearches:ee,inputRef:ve,translations:T,getMissingResultsUrl:Y,onItemClick:function(_){X(_),s()}}))),O.createElement("footer",{className:"DocSearch-Footer"},O.createElement(K1,{translations:j}))))}function qa(){return qa=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,o=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:window;return typeof t=="string"?n.document.querySelector(t):t}(e.container,e.environment))}const Yb=e=>e.button===1||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey,Jb=()=>{const e=vn(),t=bi();return{hitComponent:({hit:n,children:o})=>({type:"a",ref:void 0,constructor:void 0,key:void 0,props:{href:n.url,onClick:r=>{Yb(r)||(r.preventDefault(),e.push(lc(n.url,t.value.base)))},children:o},__v:null}),navigator:{navigate:({itemUrl:n})=>{e.push(lc(n,t.value.base))}},transformSearchClient:n=>{const o=ci(n.search,500);return{...n,search:async(...r)=>o(...r)}}}};const Qb=Ne({name:"Docsearch",props:{containerId:{type:String,required:!1,default:"docsearch-container"},options:{type:Object,required:!0}},setup(e){const t=Bn(),n=wm(),o=Jb(),r=Z(()=>{var c;return{...e.options,...(c=e.options.locales)==null?void 0:c[t.value]}}),a=[],i=()=>{var s,l;const c=(l=(s=r.value.searchParameters)==null?void 0:s.facetFilters)!=null?l:[];a.splice(0,a.length,`lang:${n.value}`,...ce(c)?c:[c]),Kb({...o,...r.value,container:`#${e.containerId}`,searchParameters:{...r.value.searchParameters,facetFilters:a}})};return tt(()=>{i(),Xe([t,r],([c,s],[l,u])=>{c!==l&&JSON.stringify(s)!==JSON.stringify(u)&&i()}),Xe(n,(c,s)=>{if(c!==s){const l=a.findIndex(u=>u===`lang:${s}`);l>-1&&a.splice(l,1,`lang:${c}`)}})}),()=>Te("div",{id:e.containerId})}}),Gb={apiKey:"30c521836bfc8e97915576e11ac2cebc",indexName:"arthas",appId:"UX8WBNVHHR",locales:{"/":{placeholder:"\u641C\u7D22\u6587\u6863",translations:{button:{buttonText:"\u641C\u7D22\u6587\u6863",buttonAriaLabel:"\u641C\u7D22\u6587\u6863"},modal:{searchBox:{resetButtonTitle:"\u6E05\u9664\u67E5\u8BE2\u6761\u4EF6",resetButtonAriaLabel:"\u6E05\u9664\u67E5\u8BE2\u6761\u4EF6",cancelButtonText:"\u53D6\u6D88",cancelButtonAriaLabel:"\u53D6\u6D88"},startScreen:{recentSearchesTitle:"\u641C\u7D22\u5386\u53F2",noRecentSearchesText:"\u6CA1\u6709\u641C\u7D22\u5386\u53F2",saveRecentSearchButtonTitle:"\u4FDD\u5B58\u81F3\u641C\u7D22\u5386\u53F2",removeRecentSearchButtonTitle:"\u4ECE\u641C\u7D22\u5386\u53F2\u4E2D\u79FB\u9664",favoriteSearchesTitle:"\u6536\u85CF",removeFavoriteSearchButtonTitle:"\u4ECE\u6536\u85CF\u4E2D\u79FB\u9664"},errorScreen:{titleText:"\u65E0\u6CD5\u83B7\u53D6\u7ED3\u679C",helpText:"\u4F60\u53EF\u80FD\u9700\u8981\u68C0\u67E5\u4F60\u7684\u7F51\u7EDC\u8FDE\u63A5"},footer:{selectText:"\u9009\u62E9",navigateText:"\u5207\u6362",closeText:"\u5173\u95ED",searchByText:"\u641C\u7D22\u63D0\u4F9B\u8005"},noResultsScreen:{noResultsText:"\u65E0\u6CD5\u627E\u5230\u76F8\u5173\u7ED3\u679C",suggestedQueryText:"\u4F60\u53EF\u4EE5\u5C1D\u8BD5\u67E5\u8BE2",reportMissingResultsText:"\u4F60\u8BA4\u4E3A\u8BE5\u67E5\u8BE2\u5E94\u8BE5\u6709\u7ED3\u679C\uFF1F",reportMissingResultsLinkText:"\u70B9\u51FB\u53CD\u9988"}}}}}},Zb=Dt({enhance({app:e}){e.component("Docsearch",()=>Te(Qb,{options:Gb}))}}),Xb={"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:"\u9773\u9633",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:"\u5F90\u5FD7\u6BC5",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:"\u6C6A\u5409",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:"\u6C6A\u5409",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:"\u6C6A\u5409",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:"\u5F90\u5FD7\u6BC5",email:"xuzhiyi@youzan.com",commits:1},{name:"\u9759\u5B8F",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:"\u674E\u9F0E",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:"\u5F90\u5FD7\u6BC5",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:"\u6C6A\u5409",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:"\u6C6A\u5409",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:"\u5F90\u5FD7\u6BC5",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:"\u6C6A\u5409",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:"\u6C6A\u5409",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:"\u6C6A\u5409",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:"\u5F90\u5FD7\u6BC5",email:"xuzhiyi@youzan.com",commits:1},{name:"0xflotus",email:"26602940+0xflotus@users.noreply.github.com",commits:1},{name:"\u9759\u5B8F",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:"\u674E\u9F0E",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:"\u6C6A\u5409",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:"\u6C6A\u5409",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}]};let Gs=0;const Zs="webkit moz ms o".split(" ");let Et,wt;const ey=typeof window>"u";if(ey)Et=function(){},wt=function(){};else{Et=window.requestAnimationFrame,wt=window.cancelAnimationFrame;let e;for(let t=0;t{t(n+o)},o);return Gs=n+o,r},wt=function(t){window.clearTimeout(t)})}const ty={props:{startVal:{type:Number,required:!1,default:0},endVal:{type:Number,required:!1,default:2017},duration:{type:Number,required:!1,default:3e3},autoplay:{type:Boolean,required:!1,default:!0},decimals:{type:Number,required:!1,default:0,validator(e){return e>=0}},decimal:{type:String,required:!1,default:"."},separator:{type:String,required:!1,default:","},prefix:{type:String,required:!1,default:""},suffix:{type:String,required:!1,default:""},useEasing:{type:Boolean,required:!1,default:!0},easingFn:{type:Function,default(e,t,n,o){return n*(-Math.pow(2,-10*e/o)+1)*1024/1023+t}}},data(){return{localStartVal:this.startVal,displayValue:this.formatNumber(this.startVal),printVal:null,paused:!1,localDuration:this.duration,startTime:null,timestamp:null,remaining:null,rAF:null}},computed:{countDown(){return this.startVal>this.endVal}},watch:{startVal(){this.autoplay&&this.start()},endVal(){this.autoplay&&this.start()}},mounted(){this.autoplay&&this.start(),this.$emit("mountedCallback")},methods:{start(){this.localStartVal=this.startVal,this.startTime=null,this.localDuration=this.duration,this.paused=!1,this.rAF=Et(this.count)},pauseResume(){this.paused?(this.resume(),this.paused=!1):(this.pause(),this.paused=!0)},pause(){wt(this.rAF)},resume(){this.startTime=null,this.localDuration=+this.remaining,this.localStartVal=+this.printVal,Et(this.count)},reset(){this.startTime=null,wt(this.rAF),this.displayValue=this.formatNumber(this.startVal)},count(e){this.startTime||(this.startTime=e),this.timestamp=e;const t=e-this.startTime;this.remaining=this.localDuration-t,this.useEasing?this.countDown?this.printVal=this.localStartVal-this.easingFn(t,0,this.localStartVal-this.endVal,this.localDuration):this.printVal=this.easingFn(t,this.localStartVal,this.endVal-this.localStartVal,this.localDuration):this.countDown?this.printVal=this.localStartVal-(this.localStartVal-this.endVal)*(t/this.localDuration):this.printVal=this.localStartVal+(this.endVal-this.localStartVal)*(t/this.localDuration),this.countDown?this.printVal=this.printValthis.endVal?this.endVal:this.printVal,this.displayValue=this.formatNumber(this.printVal),t1?this.decimal+t[1]:"",r=/(\d+)(\d{3})/;if(this.separator&&!this.isNumber(this.separator))for(;r.test(n);)n=n.replace(r,"$1"+this.separator+"$2");return this.prefix+n+o+this.suffix}},destroyed(){wt(this.rAF)}};function ny(e,t,n,o,r,a){return N(),Q("span",null,Re(r.displayValue),1)}const oy=we(ty,[["render",ny],["__file","vue-countTo.vue"]]),ry=()=>{const e=mt();if(!e.value.git)return;const t=e.value.filePathRelative,n=e.value.git.contributors,o=Xb[t],r=(a,i)=>a.find(c=>c.name===i.name&&c.email===i.email);o&&o.forEach(a=>{r(n,a)?r(n,a).commits+=a.commits:n.push(a)}),n==null||n.sort((a,i)=>i.commits-a.commits)},ay=Dt({enhance({router:e,app:t}){t.component("CountTo",oy),e.afterEach((n,o)=>{n.path!==o.path&&ry()}),e.beforeEach((n,o,r)=>{typeof _hmt<"u"&&n.path&&n.fullPath!==o.fullPath&&_hmt.push(["_trackPageview",n.fullPath]),r()})}}),tr=[uh,hh,Ah,xp,$p,T0,I0,M0,N0,Zb,ay];var vm=Ie(Am),gm=Qa({key:"",path:"",title:"",lang:"",frontmatter:{},excerpt:"",headers:[]}),$t=Ie(gm),mt=()=>$t;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updatePageData=e=>{vm.value[e.key]=()=>Promise.resolve(e),e.key===$t.value.key&&($t.value=e)});var bm=Symbol(""),Tt=()=>{const e=Ue(bm);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},ym=Symbol(""),iy=()=>{const e=Ue(ym);if(!e)throw new Error("usePageHead() is called without provider.");return e},cy=Symbol(""),Em=Symbol(""),wm=()=>{const e=Ue(Em);if(!e)throw new Error("usePageLang() is called without provider.");return e},gi=Symbol(""),Bn=()=>{const e=Ue(gi);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},Kt=Ie(oh),bi=()=>Kt;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updateSiteData=e=>{Kt.value=e});var Om=Symbol(""),yi=()=>{const e=Ue(Om);if(!e)throw new Error("useSiteLocaleData() is called without provider.");return e},sy=Symbol(""),sn=Nn({resolvePageData:async e=>{const t=vm.value[e],n=await(t==null?void 0:t());return n!=null?n:gm},resolvePageFrontmatter:e=>e.frontmatter,resolvePageHead:(e,t,n)=>{const o=De(t.description)?t.description:n.description,r=[...ce(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:o}]];return ah(r)},resolvePageHeadTitle:(e,t)=>`${e.title?`${e.title} | `:""}${t.title}`,resolvePageLang:e=>e.lang||"en",resolveRouteLocale:(e,t)=>tu(e,t),resolveSiteLocaleData:(e,t)=>({...e,...e.locales[t]})}),Ei=Ne({name:"ClientOnly",setup(e,t){const n=Ie(!1);return tt(()=>{n.value=!0}),()=>{var o,r;return n.value?(r=(o=t.slots).default)==null?void 0:r.call(o):null}}}),ly=Ne({name:"Content",props:{pageKey:{type:String,required:!1,default:""}},setup(e){const t=mt(),n=Z(()=>nu[e.pageKey||t.value.key]);return()=>n.value?Te(n.value):Te("div","404 Not Found")}}),uy="Layout",my="NotFound",dy=tr.reduce((e,t)=>({...e,...t.layouts}),{}),Xs=Ne({name:"Vuepress",setup(){const e=mt(),t=Z(()=>{let n;if(e.value.path){const o=e.value.frontmatter.layout;De(o)?n=o:n=uy}else n=my;return dy[n]});return()=>Te(t.value)}}),wi=e=>To(e)?e:`${bi().value.base}${eu(e)}`;const fy=[["v-8daa1a0e","/",{title:""},["/index.html","/README.md"]],["v-2d0a870d","/en/",{title:"Home"},["/en/index.html","/en/README.md"]],["v-7445f070","/doc/",{title:"\u7B80\u4ECB"},["/doc/index.html","/doc/README.md"]],["v-0d09f68d","/doc/advanced-use.html",{title:"\u5176\u4ED6\u7279\u6027"},["/doc/advanced-use","/doc/advanced-use.md"]],["v-46e53834","/doc/advice-class.html",{title:"\u8868\u8FBE\u5F0F\u6838\u5FC3\u53D8\u91CF"},["/doc/advice-class","/doc/advice-class.md"]],["v-37178538","/doc/agent.html",{title:"\u4EE5 Java Agent \u7684\u65B9\u5F0F\u542F\u52A8"},["/doc/agent","/doc/agent.md"]],["v-71d23f41","/doc/ai.html",{title:"AI \u76F8\u5173"},["/doc/ai","/doc/ai.md"]],["v-5c517900","/doc/arthas-properties.html",{title:"Arthas Properties"},["/doc/arthas-properties","/doc/arthas-properties.md"]],["v-02eb6d0d","/doc/arthas3.html",{title:""},["/doc/arthas3","/doc/arthas3.md"]],["v-4f82df66","/doc/async.html",{title:"Arthas \u540E\u53F0\u5F02\u6B65\u4EFB\u52A1"},["/doc/async","/doc/async.md"]],["v-d0358c7e","/doc/auth.html",{title:"auth"},["/doc/auth","/doc/auth.md"]],["v-3157067a","/doc/base64.html",{title:"base64"},["/doc/base64","/doc/base64.md"]],["v-cc8f4ae6","/doc/batch-support.html",{title:"\u6279\u5904\u7406\u529F\u80FD"},["/doc/batch-support","/doc/batch-support.md"]],["v-6542b733","/doc/cat.html",{title:"cat"},["/doc/cat","/doc/cat.md"]],["v-d6087b6c","/doc/classloader-metaspace.html",{title:"classloader-metaspace"},["/doc/classloader-metaspace","/doc/classloader-metaspace.md"]],["v-49b1709e","/doc/classloader.html",{title:"classloader"},["/doc/classloader","/doc/classloader.md"]],["v-ad1b2b42","/doc/cls.html",{title:"cls"},["/doc/cls","/doc/cls.md"]],["v-5ed4d0e1","/doc/commands.html",{title:"\u547D\u4EE4\u5217\u8868"},["/doc/commands","/doc/commands.md"]],["v-3992adde","/doc/contact-us.html",{title:"\u8054\u7CFB\u6211\u4EEC"},["/doc/contact-us","/doc/contact-us.md"]],["v-0d1e3f35","/doc/dashboard.html",{title:"dashboard"},["/doc/dashboard","/doc/dashboard.md"]],["v-02361049","/doc/docker.html",{title:"Docker"},["/doc/docker","/doc/docker.md"]],["v-2116d2e1","/doc/download.html",{title:"\u4E0B\u8F7D"},["/doc/download","/doc/download.md"]],["v-1fe4a616","/doc/dump.html",{title:"dump"},["/doc/dump","/doc/dump.md"]],["v-2c48f364","/doc/echo.html",{title:"echo"},["/doc/echo","/doc/echo.md"]],["v-6a3a70c0","/doc/external-command.html",{title:"\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4"},["/doc/external-command","/doc/external-command.md"]],["v-d070981a","/doc/faq.html",{title:"FAQ"},["/doc/faq","/doc/faq.md"]],["v-78c35af6","/doc/getstatic.html",{title:"getstatic"},["/doc/getstatic","/doc/getstatic.md"]],["v-63f4cd5a","/doc/grep.html",{title:"grep"},["/doc/grep","/doc/grep.md"]],["v-809381ca","/doc/groovy.html",{title:"groovy"},["/doc/groovy","/doc/groovy.md"]],["v-07868089","/doc/heapdump.html",{title:"heapdump"},["/doc/heapdump","/doc/heapdump.md"]],["v-e3b34070","/doc/help.html",{title:"help"},["/doc/help","/doc/help.md"]],["v-26f43d96","/doc/history.html",{title:"history"},["/doc/history","/doc/history.md"]],["v-225de034","/doc/http-api.html",{title:"Http API"},["/doc/http-api","/doc/http-api.md"]],["v-7c670020","/doc/idea-plugin.html",{title:"IDEA Plugin"},["/doc/idea-plugin","/doc/idea-plugin.md"]],["v-0cb398f4","/doc/install-detail.html",{title:"Arthas Install"},["/doc/install-detail","/doc/install-detail.md"]],["v-211d675c","/doc/jad.html",{title:"jad"},["/doc/jad","/doc/jad.md"]],["v-41806853","/doc/jfr.html",{title:"jfr"},["/doc/jfr","/doc/jfr.md"]],["v-f1483d70","/doc/jvm.html",{title:"jvm"},["/doc/jvm","/doc/jvm.md"]],["v-4039cdec","/doc/keymap.html",{title:"keymap"},["/doc/keymap","/doc/keymap.md"]],["v-54781216","/doc/line.html",{title:"line"},["/doc/line","/doc/line.md"]],["v-5ae8aed9","/doc/logger.html",{title:"logger"},["/doc/logger","/doc/logger.md"]],["v-6a31cc55","/doc/manual-install.html",{title:"\u624B\u52A8\u5B89\u88C5 Arthas"},["/doc/manual-install","/doc/manual-install.md"]],["v-8ebd6c68","/doc/mbean.html",{title:"mbean"},["/doc/mbean","/doc/mbean.md"]],["v-3b401ada","/doc/mc.html",{title:"mc"},["/doc/mc","/doc/mc.md"]],["v-67bc6553","/doc/mcp-server.html",{title:"Arthas MCP Server"},["/doc/mcp-server","/doc/mcp-server.md"]],["v-4d9433f0","/doc/memory.html",{title:"memory"},["/doc/memory","/doc/memory.md"]],["v-6e88d7a2","/doc/monitor.html",{title:"monitor"},["/doc/monitor","/doc/monitor.md"]],["v-dcfb9060","/doc/ognl-express.html",{title:"OGNL \u590D\u6742\u8868\u8FBE\u5F0F\u4F7F\u7528\u6280\u5DE7"},["/doc/ognl-express","/doc/ognl-express.md"]],["v-627e52da","/doc/ognl.html",{title:"ognl"},["/doc/ognl","/doc/ognl.md"]],["v-27b6152a","/doc/options.html",{title:"options"},["/doc/options","/doc/options.md"]],["v-2f05b636","/doc/perfcounter.html",{title:"perfcounter"},["/doc/perfcounter","/doc/perfcounter.md"]],["v-13eae420","/doc/profiler.html",{title:"profiler"},["/doc/profiler","/doc/profiler.md"]],["v-1c2d8c2c","/doc/pwd.html",{title:"pwd"},["/doc/pwd","/doc/pwd.md"]],["v-5afc3a07","/doc/quick-start.html",{title:"\u5FEB\u901F\u5165\u95E8"},["/doc/quick-start","/doc/quick-start.md"]],["v-aa7c750c","/doc/quit.html",{title:"quit"},["/doc/quit","/doc/quit.md"]],["v-0446ad7b","/doc/redefine.html",{title:"redefine"},["/doc/redefine","/doc/redefine.md"]],["v-648880ae","/doc/release-notes.html",{title:"Release Notes"},["/doc/release-notes","/doc/release-notes.md"]],["v-71f77d4c","/doc/reset.html",{title:"reset"},["/doc/reset","/doc/reset.md"]],["v-54cde250","/doc/retransform.html",{title:"retransform"},["/doc/retransform","/doc/retransform.md"]],["v-8e632816","/doc/save-log.html",{title:"\u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7"},["/doc/save-log","/doc/save-log.md"]],["v-1fc55619","/doc/sc.html",{title:"sc"},["/doc/sc","/doc/sc.md"]],["v-3891b473","/doc/session.html",{title:"session"},["/doc/session","/doc/session.md"]],["v-30d5cc4f","/doc/sm.html",{title:"sm"},["/doc/sm","/doc/sm.md"]],["v-07cf9d55","/doc/spring-boot-starter.html",{title:"Arthas Spring Boot Starter"},["/doc/spring-boot-starter","/doc/spring-boot-starter.md"]],["v-b75a107e","/doc/stack.html",{title:"stack"},["/doc/stack","/doc/stack.md"]],["v-a9c412f2","/doc/start-arthas.html",{title:"\u542F\u52A8 Arthas"},["/doc/start-arthas","/doc/start-arthas.md"]],["v-bc0910b2","/doc/stop.html",{title:"stop"},["/doc/stop","/doc/stop.md"]],["v-0333612e","/doc/sysenv.html",{title:"sysenv"},["/doc/sysenv","/doc/sysenv.md"]],["v-7012b8ce","/doc/sysprop.html",{title:"sysprop"},["/doc/sysprop","/doc/sysprop.md"]],["v-0536edb5","/doc/tee.html",{title:"tee"},["/doc/tee","/doc/tee.md"]],["v-10845ac2","/doc/thread.html",{title:"thread"},["/doc/thread","/doc/thread.md"]],["v-65d67724","/doc/trace.html",{title:"trace"},["/doc/trace","/doc/trace.md"]],["v-71adf3e9","/doc/tt.html",{title:"tt"},["/doc/tt","/doc/tt.md"]],["v-d2ddc9fe","/doc/tunnel.html",{title:"Arthas Tunnel"},["/doc/tunnel","/doc/tunnel.md"]],["v-5b5d3371","/doc/version.html",{title:"version"},["/doc/version","/doc/version.md"]],["v-40db67fd","/doc/vmoption.html",{title:"vmoption"},["/doc/vmoption","/doc/vmoption.md"]],["v-10890efa","/doc/vmtool.html",{title:"vmtool"},["/doc/vmtool","/doc/vmtool.md"]],["v-24fc49da","/doc/watch.html",{title:"watch"},["/doc/watch","/doc/watch.md"]],["v-a5f6e7aa","/doc/web-console.html",{title:"Web Console"},["/doc/web-console","/doc/web-console.md"]],["v-07555a84","/en/doc/",{title:"Introduction"},["/en/doc/index.html","/en/doc/README.md"]],["v-463d120e","/en/doc/advanced-use.html",{title:"Other features"},["/en/doc/advanced-use","/en/doc/advanced-use.md"]],["v-a736375c","/en/doc/advice-class.html",{title:"Fundamental Fields in Expressions"},["/en/doc/advice-class","/en/doc/advice-class.md"]],["v-f6b5c310","/en/doc/agent.html",{title:"Start as a Java Agent"},["/en/doc/agent","/en/doc/agent.md"]],["v-7a0f16ad","/en/doc/ai.html",{title:"AI Integration"},["/en/doc/ai","/en/doc/ai.md"]],["v-74fb2694","/en/doc/arthas-properties.html",{title:"Arthas Properties"},["/en/doc/arthas-properties","/en/doc/arthas-properties.md"]],["v-786f7161","/en/doc/async.html",{title:"Arthas Async Jobs"},["/en/doc/async","/en/doc/async.md"]],["v-f76c33a6","/en/doc/auth.html",{title:"auth"},["/en/doc/auth","/en/doc/auth.md"]],["v-d17b7034","/en/doc/base64.html",{title:"base64"},["/en/doc/base64","/en/doc/base64.md"]],["v-765e30be","/en/doc/batch-support.html",{title:"Batch Processing"},["/en/doc/batch-support","/en/doc/batch-support.md"]],["v-64a0cd47","/en/doc/cat.html",{title:"cat"},["/en/doc/cat","/en/doc/cat.md"]],["v-6e8ffb5e","/en/doc/classloader-metaspace.html",{title:"classloader-metaspace"},["/en/doc/classloader-metaspace","/en/doc/classloader-metaspace.md"]],["v-fc1b9a9c","/en/doc/classloader.html",{title:"classloader"},["/en/doc/classloader","/en/doc/classloader.md"]],["v-ae5eff1a","/en/doc/cls.html",{title:"cls"},["/en/doc/cls","/en/doc/cls.md"]],["v-12153166","/en/doc/commands.html",{title:"All Commands"},["/en/doc/commands","/en/doc/commands.md"]],["v-4be7594a","/en/doc/contact-us.html",{title:"Contact Us"},["/en/doc/contact-us","/en/doc/contact-us.md"]],["v-79107649","/en/doc/dashboard.html",{title:"dashboard"},["/en/doc/dashboard","/en/doc/dashboard.md"]],["v-682151b5","/en/doc/docker.html",{title:"Docker"},["/en/doc/docker","/en/doc/docker.md"]],["v-8d912d66","/en/doc/download.html",{title:"Download"},["/en/doc/download","/en/doc/download.md"]],["v-471b4d3e","/en/doc/dump.html",{title:"dump"},["/en/doc/dump","/en/doc/dump.md"]],["v-18ad9fd0","/en/doc/echo.html",{title:"echo"},["/en/doc/echo","/en/doc/echo.md"]],["v-ef7849a8","/en/doc/external-command.html",{title:"Load External Commands"},["/en/doc/external-command","/en/doc/external-command.md"]],["v-d1b46bf2","/en/doc/faq.html",{title:"FAQ"},["/en/doc/faq","/en/doc/faq.md"]],["v-2f908999","/en/doc/getstatic.html",{title:"getstatic"},["/en/doc/getstatic","/en/doc/getstatic.md"]],["v-8b2b7482","/en/doc/grep.html",{title:"grep"},["/en/doc/grep","/en/doc/grep.md"]],["v-25a18087","/en/doc/groovy.html",{title:"groovy"},["/en/doc/groovy","/en/doc/groovy.md"]],["v-c0b1d216","/en/doc/heapdump.html",{title:"heapdump"},["/en/doc/heapdump","/en/doc/heapdump.md"]],["v-7a8b0c34","/en/doc/help.html",{title:"help"},["/en/doc/help","/en/doc/help.md"]],["v-4402cd49","/en/doc/history.html",{title:"history"},["/en/doc/history","/en/doc/history.md"]],["v-8b0312c0","/en/doc/http-api.html",{title:"Http API"},["/en/doc/http-api","/en/doc/http-api.md"]],["v-96b07b98","/en/doc/idea-plugin.html",{title:"IDEA Plugin"},["/en/doc/idea-plugin","/en/doc/idea-plugin.md"]],["v-319f48f2","/en/doc/install-detail.html",{title:"Install Arthas"},["/en/doc/install-detail","/en/doc/install-detail.md"]],["v-207b7d70","/en/doc/jad.html",{title:"jad"},["/en/doc/jad","/en/doc/jad.md"]],["v-40de7e67","/en/doc/jfr.html",{title:"jfr"},["/en/doc/jfr","/en/doc/jfr.md"]],["v-f28c1148","/en/doc/jvm.html",{title:"jvm"},["/en/doc/jvm","/en/doc/jvm.md"]],["v-b3b5e150","/en/doc/keymap.html",{title:"keymap"},["/en/doc/keymap","/en/doc/keymap.md"]],["v-7baeb93e","/en/doc/line.html",{title:"line"},["/en/doc/line","/en/doc/line.md"]],["v-7e581f76","/en/doc/logger.html",{title:"logger"},["/en/doc/logger","/en/doc/logger.md"]],["v-bbaa3c7e","/en/doc/manual-install.html",{title:"Manually Install Arthas"},["/en/doc/manual-install","/en/doc/manual-install.md"]],["v-58d22ae0","/en/doc/mbean.html",{title:"mbean"},["/en/doc/mbean","/en/doc/mbean.md"]],["v-2ac66c02","/en/doc/mc.html",{title:"mc"},["/en/doc/mc","/en/doc/mc.md"]],["v-7a1110bf","/en/doc/mcp-server.html",{title:"Arthas MCP Server"},["/en/doc/mcp-server","/en/doc/mcp-server.md"]],["v-3f212774","/en/doc/memory.html",{title:"memory"},["/en/doc/memory","/en/doc/memory.md"]],["v-20388043","/en/doc/monitor.html",{title:"monitor"},["/en/doc/monitor","/en/doc/monitor.md"]],["v-6159b83c","/en/doc/ognl-express.html",{title:"Tips for Complex OGNL Expressions"},["/en/doc/ognl-express","/en/doc/ognl-express.md"]],["v-89b4fa02","/en/doc/ognl.html",{title:"ognl"},["/en/doc/ognl","/en/doc/ognl.md"]],["v-43a1e17f","/en/doc/options.html",{title:"options"},["/en/doc/options","/en/doc/options.md"]],["v-6746784a","/en/doc/perfcounter.html",{title:"perfcounter"},["/en/doc/perfcounter","/en/doc/perfcounter.md"]],["v-a7e90ae8","/en/doc/profiler.html",{title:"profiler"},["/en/doc/profiler","/en/doc/profiler.md"]],["v-1b8ba240","/en/doc/pwd.html",{title:"pwd"},["/en/doc/pwd","/en/doc/pwd.md"]],["v-d98607ca","/en/doc/quick-start.html",{title:"Quick Start"},["/en/doc/quick-start","/en/doc/quick-start.md"]],["v-d1b31c34","/en/doc/quit.html",{title:"quit"},["/en/doc/quit","/en/doc/quit.md"]],["v-c7317832","/en/doc/redefine.html",{title:"redefine"},["/en/doc/redefine","/en/doc/redefine.md"]],["v-e0bde47c","/en/doc/release-notes.html",{title:"Release Notes"},["/en/doc/release-notes","/en/doc/release-notes.md"]],["v-6735226e","/en/doc/reset.html",{title:"reset"},["/en/doc/reset","/en/doc/reset.md"]],["v-e5e2b738","/en/doc/retransform.html",{title:"retransform"},["/en/doc/retransform","/en/doc/retransform.md"]],["v-50ef0261","/en/doc/save-log.html",{title:"Log command outputs"},["/en/doc/save-log","/en/doc/save-log.md"]],["v-28022d85","/en/doc/sc.html",{title:"sc"},["/en/doc/sc","/en/doc/sc.md"]],["v-dfe2bef2","/en/doc/session.html",{title:"session"},["/en/doc/session","/en/doc/session.md"]],["v-3912a3bb","/en/doc/sm.html",{title:"sm"},["/en/doc/sm","/en/doc/sm.md"]],["v-71870b69","/en/doc/spring-boot-starter.html",{title:"Arthas Spring Boot Starter"},["/en/doc/spring-boot-starter","/en/doc/spring-boot-starter.md"]],["v-4483d8d5","/en/doc/stack.html",{title:"stack"},["/en/doc/stack","/en/doc/stack.md"]],["v-7af576f3","/en/doc/start-arthas.html",{title:"Start Arthas"},["/en/doc/start-arthas","/en/doc/start-arthas.md"]],["v-e33fb7da","/en/doc/stop.html",{title:"stop"},["/en/doc/stop","/en/doc/stop.md"]],["v-645190d5","/en/doc/sysenv.html",{title:"sysenv"},["/en/doc/sysenv","/en/doc/sysenv.md"]],["v-1f738fad","/en/doc/sysprop.html",{title:"sysprop"},["/en/doc/sysprop","/en/doc/sysprop.md"]],["v-049503c9","/en/doc/tee.html",{title:"tee"},["/en/doc/tee","/en/doc/tee.md"]],["v-5da9140b","/en/doc/thread.html",{title:"thread"},["/en/doc/thread","/en/doc/thread.md"]],["v-06075838","/en/doc/trace.html",{title:"trace"},["/en/doc/trace","/en/doc/trace.md"]],["v-79eacb55","/en/doc/tt.html",{title:"tt"},["/en/doc/tt","/en/doc/tt.md"]],["v-07074726","/en/doc/tunnel.html",{title:"Arthas Tunnel"},["/en/doc/tunnel","/en/doc/tunnel.md"]],["v-9a4bc0f6","/en/doc/version.html",{title:"version"},["/en/doc/version","/en/doc/version.md"]],["v-4e08032e","/en/doc/vmoption.html",{title:"vmoption"},["/en/doc/vmoption","/en/doc/vmoption.md"]],["v-76745066","/en/doc/vmtool.html",{title:"vmtool"},["/en/doc/vmtool","/en/doc/vmtool.md"]],["v-75a5aa24","/en/doc/watch.html",{title:"watch"},["/en/doc/watch","/en/doc/watch.md"]],["v-35756382","/en/doc/web-console.html",{title:"Web Console"},["/en/doc/web-console","/en/doc/web-console.md"]],["v-3706649a","/404.html",{title:""},["/404"]]];var hy=()=>fy.reduce((e,[t,n,o,r])=>(e.push({name:t,path:n,component:Xs,meta:o},...r.map(a=>({path:a,redirect:n}))),e),[{name:"404",path:"/:catchAll(.*)",component:Xs}]),py=zh,_y=()=>{const e=Tp({history:py(Xl(Kt.value.base)),routes:hy(),scrollBehavior:(t,n,o)=>o||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,n)=>{var o;(t.path!==n.path||n===kt)&&([$t.value]=await Promise.all([sn.resolvePageData(t.name),(o=nu[t.name])==null?void 0:o.__asyncLoader()]))}),e},vy=e=>{e.component("ClientOnly",Ei),e.component("Content",ly)},gy=(e,t)=>{const n=Z(()=>sn.resolveRouteLocale(Kt.value.locales,t.currentRoute.value.path)),o=Z(()=>sn.resolveSiteLocaleData(Kt.value,n.value)),r=Z(()=>sn.resolvePageFrontmatter($t.value)),a=Z(()=>sn.resolvePageHeadTitle($t.value,o.value)),i=Z(()=>sn.resolvePageHead(a.value,r.value,o.value)),c=Z(()=>sn.resolvePageLang($t.value));return e.provide(gi,n),e.provide(Om,o),e.provide(bm,r),e.provide(cy,a),e.provide(ym,i),e.provide(Em,c),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>r.value},$head:{get:()=>i.value},$headTitle:{get:()=>a.value},$lang:{get:()=>c.value},$page:{get:()=>$t.value},$routeLocale:{get:()=>n.value},$site:{get:()=>Kt.value},$siteLocale:{get:()=>o.value},$withBase:{get:()=>wi}}),{pageData:$t,pageFrontmatter:r,pageHead:i,pageHeadTitle:a,pageLang:c,routeLocale:n,siteData:Kt,siteLocaleData:o}},by=()=>{const e=Rt(),t=iy(),n=wm(),o=Ie([]),r=()=>{t.value.forEach(i=>{const c=yy(i);c&&o.value.push(c)})},a=()=>{document.documentElement.lang=n.value,o.value.forEach(i=>{i.parentNode===document.head&&document.head.removeChild(i)}),o.value.splice(0,o.value.length),t.value.forEach(i=>{const c=Ey(i);c!==null&&(document.head.appendChild(c),o.value.push(c))})};hn(sy,a),tt(()=>{r(),a(),Xe(()=>e.path,()=>a())})},yy=([e,t,n=""])=>{const o=Object.entries(t).map(([c,s])=>De(s)?`[${c}="${s}"]`:s===!0?`[${c}]`:"").join(""),r=`head > ${e}${o}`;return Array.from(document.querySelectorAll(r)).find(c=>c.innerText===n)||null},Ey=([e,t,n])=>{if(!De(e))return null;const o=document.createElement(e);return ii(t)&&Object.entries(t).forEach(([r,a])=>{De(a)?o.setAttribute(r,a):a===!0&&o.setAttribute(r,"")}),De(n)&&o.appendChild(document.createTextNode(n)),o},wy=th,Oy=async()=>{var n;const e=wy({name:"VuepressApp",setup(){var o;by();for(const r of tr)(o=r.setup)==null||o.call(r);return()=>[Te(fu),...tr.flatMap(({rootComponents:r=[]})=>r.map(a=>Te(a)))]}}),t=_y();vy(e),gy(e,t);for(const o of tr)await((n=o.enhance)==null?void 0:n.call(o,{app:e,router:t,siteData:Kt}));return e.use(t),{app:e,router:t}};Oy().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{we as _,le as a,ie as b,Q as c,Oy as createVueApp,pf as d,Xt as e,N as o,Lt as r,Re as t,We as w}; diff --git a/assets/arthas-properties.html.898cc171.js b/assets/arthas-properties.html.1c61e69c.js similarity index 87% rename from assets/arthas-properties.html.898cc171.js rename to assets/arthas-properties.html.1c61e69c.js index a81d7e960..148f1492d 100644 --- a/assets/arthas-properties.html.898cc171.js +++ b/assets/arthas-properties.html.1c61e69c.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-5c517900","path":"/doc/arthas-properties.html","title":"Arthas Properties","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u652F\u6301\u7684\u914D\u7F6E\u9879","slug":"\u652F\u6301\u7684\u914D\u7F6E\u9879","link":"#\u652F\u6301\u7684\u914D\u7F6E\u9879","children":[{"level":3,"title":"\u7981\u6B62\u6307\u5B9A\u547D\u4EE4","slug":"\u7981\u6B62\u6307\u5B9A\u547D\u4EE4","link":"#\u7981\u6B62\u6307\u5B9A\u547D\u4EE4","children":[]},{"level":3,"title":"\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4","slug":"\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4","link":"#\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4","children":[]}]},{"level":2,"title":"\u914D\u7F6E\u7684\u4F18\u5148\u7EA7","slug":"\u914D\u7F6E\u7684\u4F18\u5148\u7EA7","link":"#\u914D\u7F6E\u7684\u4F18\u5148\u7EA7","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/arthas-properties.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-5c517900","path":"/doc/arthas-properties.html","title":"Arthas Properties","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u652F\u6301\u7684\u914D\u7F6E\u9879","slug":"\u652F\u6301\u7684\u914D\u7F6E\u9879","link":"#\u652F\u6301\u7684\u914D\u7F6E\u9879","children":[{"level":3,"title":"\u7981\u6B62\u6307\u5B9A\u547D\u4EE4","slug":"\u7981\u6B62\u6307\u5B9A\u547D\u4EE4","link":"#\u7981\u6B62\u6307\u5B9A\u547D\u4EE4","children":[]},{"level":3,"title":"\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4","slug":"\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4","link":"#\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4","children":[]}]},{"level":2,"title":"\u914D\u7F6E\u7684\u4F18\u5148\u7EA7","slug":"\u914D\u7F6E\u7684\u4F18\u5148\u7EA7","link":"#\u914D\u7F6E\u7684\u4F18\u5148\u7EA7","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/arthas-properties.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/arthas-properties.html.4827d4b8.js b/assets/arthas-properties.html.7dc17e44.js similarity index 99% rename from assets/arthas-properties.html.4827d4b8.js rename to assets/arthas-properties.html.7dc17e44.js index 555ab4de6..0d9331204 100644 --- a/assets/arthas-properties.html.4827d4b8.js +++ b/assets/arthas-properties.html.7dc17e44.js @@ -1,4 +1,4 @@ -import{_ as s,o,c as r,a as d,b as i,w as c,d as a,e,r as n}from"./app.524ecf5c.js";const l={},h=a(`

Arthas Properties

arthas.properties\u6587\u4EF6\u5728 arthas \u7684\u76EE\u5F55\u4E0B\u3002

  • \u5982\u679C\u662F\u81EA\u52A8\u4E0B\u8F7D\u7684 arthas\uFF0C\u5219\u76EE\u5F55\u5728~/.arthas/lib/3.x.x/arthas/\u4E0B\u9762
  • \u5982\u679C\u662F\u4E0B\u8F7D\u7684\u5B8C\u6574\u5305\uFF0C\u5728 arthas \u89E3\u538B\u76EE\u5F55\u4E0B

\u652F\u6301\u7684\u914D\u7F6E\u9879

\u6CE8\u610F

\u6CE8\u610F\u914D\u7F6E\u5FC5\u987B\u662F\u9A7C\u5CF0\u7684\uFF0C\u548C spring boot \u7684-\u98CE\u683C\u4E0D\u4E00\u6837\u3002spring boot \u5E94\u7528\u624D\u540C\u65F6\u652F\u6301\u9A7C\u5CF0 \u548C -\u98CE\u683C\u7684\u914D\u7F6E\u3002

#arthas.config.overrideAll=true
+import{_ as s,o,c as r,a as d,b as i,w as c,d as a,e,r as n}from"./app.e2427bec.js";const l={},h=a(`

Arthas Properties

arthas.properties\u6587\u4EF6\u5728 arthas \u7684\u76EE\u5F55\u4E0B\u3002

  • \u5982\u679C\u662F\u81EA\u52A8\u4E0B\u8F7D\u7684 arthas\uFF0C\u5219\u76EE\u5F55\u5728~/.arthas/lib/3.x.x/arthas/\u4E0B\u9762
  • \u5982\u679C\u662F\u4E0B\u8F7D\u7684\u5B8C\u6574\u5305\uFF0C\u5728 arthas \u89E3\u538B\u76EE\u5F55\u4E0B

\u652F\u6301\u7684\u914D\u7F6E\u9879

\u6CE8\u610F

\u6CE8\u610F\u914D\u7F6E\u5FC5\u987B\u662F\u9A7C\u5CF0\u7684\uFF0C\u548C spring boot \u7684-\u98CE\u683C\u4E0D\u4E00\u6837\u3002spring boot \u5E94\u7528\u624D\u540C\u65F6\u652F\u6301\u9A7C\u5CF0 \u548C -\u98CE\u683C\u7684\u914D\u7F6E\u3002

#arthas.config.overrideAll=true
 arthas.telnetPort=3658
 arthas.httpPort=8563
 arthas.ip=127.0.0.1
diff --git a/assets/arthas-properties.html.d7076c7d.js b/assets/arthas-properties.html.962908f3.js
similarity index 87%
rename from assets/arthas-properties.html.d7076c7d.js
rename to assets/arthas-properties.html.962908f3.js
index 70199a970..d2087a15a 100644
--- a/assets/arthas-properties.html.d7076c7d.js
+++ b/assets/arthas-properties.html.962908f3.js
@@ -1 +1 @@
-const e=JSON.parse('{"key":"v-74fb2694","path":"/en/doc/arthas-properties.html","title":"Arthas Properties","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Supported configuration items","slug":"supported-configuration-items","link":"#supported-configuration-items","children":[{"level":3,"title":"disable specify commands","slug":"disable-specify-commands","link":"#disable-specify-commands","children":[]},{"level":3,"title":"Load external commands","slug":"load-external-commands","link":"#load-external-commands","children":[]}]},{"level":2,"title":"Configured order","slug":"configured-order","link":"#configured-order","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/arthas-properties.md","version":"4.3.3"}');export{e as data};
+const e=JSON.parse('{"key":"v-74fb2694","path":"/en/doc/arthas-properties.html","title":"Arthas Properties","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Supported configuration items","slug":"supported-configuration-items","link":"#supported-configuration-items","children":[{"level":3,"title":"disable specify commands","slug":"disable-specify-commands","link":"#disable-specify-commands","children":[]},{"level":3,"title":"Load external commands","slug":"load-external-commands","link":"#load-external-commands","children":[]}]},{"level":2,"title":"Configured order","slug":"configured-order","link":"#configured-order","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/arthas-properties.md","version":"4.3.5"}');export{e as data};
diff --git a/assets/arthas-properties.html.79bcd7b4.js b/assets/arthas-properties.html.c45f5949.js
similarity index 98%
rename from assets/arthas-properties.html.79bcd7b4.js
rename to assets/arthas-properties.html.c45f5949.js
index d0b562701..5e2192d7e 100644
--- a/assets/arthas-properties.html.79bcd7b4.js
+++ b/assets/arthas-properties.html.c45f5949.js
@@ -1,4 +1,4 @@
-import{_ as o,o as r,c as s,a as i,b as n,w as d,d as a,e,r as c}from"./app.524ecf5c.js";const l={},m=a(`

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

Supported configuration items

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
+import{_ as o,o as r,c as s,a as i,b as n,w as d,d as a,e,r as c}from"./app.e2427bec.js";const l={},m=a(`

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

Supported configuration items

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
 arthas.telnetPort=3658
 arthas.httpPort=8563
 arthas.ip=127.0.0.1
diff --git a/assets/arthas3.html.316cb2e0.js b/assets/arthas3.html.11401e69.js
similarity index 81%
rename from assets/arthas3.html.316cb2e0.js
rename to assets/arthas3.html.11401e69.js
index fd0c0dcf3..21d439225 100644
--- a/assets/arthas3.html.316cb2e0.js
+++ b/assets/arthas3.html.11401e69.js
@@ -1 +1 @@
-const e=JSON.parse('{"key":"v-02eb6d0d","path":"/doc/arthas3.html","title":"","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"Arthas3.0 \u7684\u65B0\u7279\u6027","slug":"arthas3-0-\u7684\u65B0\u7279\u6027","link":"#arthas3-0-\u7684\u65B0\u7279\u6027","children":[]},{"level":3,"title":"\u53BB groovy \u4F9D\u8D56","slug":"\u53BB-groovy-\u4F9D\u8D56","link":"#\u53BB-groovy-\u4F9D\u8D56","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/arthas3.md","version":"4.3.3"}');export{e as data};
+const e=JSON.parse('{"key":"v-02eb6d0d","path":"/doc/arthas3.html","title":"","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"Arthas3.0 \u7684\u65B0\u7279\u6027","slug":"arthas3-0-\u7684\u65B0\u7279\u6027","link":"#arthas3-0-\u7684\u65B0\u7279\u6027","children":[]},{"level":3,"title":"\u53BB groovy \u4F9D\u8D56","slug":"\u53BB-groovy-\u4F9D\u8D56","link":"#\u53BB-groovy-\u4F9D\u8D56","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/arthas3.md","version":"4.3.5"}');export{e as data};
diff --git a/assets/arthas3.html.8d4e3261.js b/assets/arthas3.html.98a1b21b.js
similarity index 99%
rename from assets/arthas3.html.8d4e3261.js
rename to assets/arthas3.html.98a1b21b.js
index 3a281e134..21662eb76 100644
--- a/assets/arthas3.html.8d4e3261.js
+++ b/assets/arthas3.html.98a1b21b.js
@@ -1,4 +1,4 @@
-import{_ as r,o as i,c as t,a as e,b as d,d as a,e as s,r as l}from"./app.524ecf5c.js";const o={},c=a(`

Arthas3.0 \u7684\u65B0\u7279\u6027

\u5728\u7EBF\u8BCA\u65AD\u529F\u80FD

Arthas3.0 \u4E2D\u6700\u91CD\u8981\u7684\u7279\u6027\uFF0C\u4E0D\u9700\u8981\u767B\u5F55\u673A\u5668\u5C31\u53EF\u4EE5\u5BF9\u5E94\u7528\u8FDB\u884C\u8BCA\u65AD\uFF0C\u4F53\u9A8C\u548C\u672C\u5730\u8BCA\u65AD\u5B8C\u5168\u4E00\u81F4

\u4F7F\u7528\u6B65\u9AA4

TODO

\u52A8\u56FE\u6F14\u793A

TODO

\u7BA1\u9053\u652F\u6301

Arthas 3.0 \u5F00\u59CB\u652F\u6301\u7BA1\u9053, \u7387\u5148\u63D0\u4F9B\u4E86grep,wc,plaintext\u7684\u652F\u6301\u3002

\u53BB groovy \u4F9D\u8D56

groovy \u8868\u8FBE\u5F0F\u5728 arthas2.0 \u4E2D\u5927\u91CF\u4F7F\u7528\uFF0C\u4F8B\u5982 watch \u8868\u8FBE\u5F0F

watch com.alibaba.sample.petstore.web.store.module.screen.ItemList add "params + ' ' + returnObj" params.size()==2
+import{_ as r,o as i,c as t,a as e,b as d,d as a,e as s,r as l}from"./app.e2427bec.js";const o={},c=a(`

Arthas3.0 \u7684\u65B0\u7279\u6027

\u5728\u7EBF\u8BCA\u65AD\u529F\u80FD

Arthas3.0 \u4E2D\u6700\u91CD\u8981\u7684\u7279\u6027\uFF0C\u4E0D\u9700\u8981\u767B\u5F55\u673A\u5668\u5C31\u53EF\u4EE5\u5BF9\u5E94\u7528\u8FDB\u884C\u8BCA\u65AD\uFF0C\u4F53\u9A8C\u548C\u672C\u5730\u8BCA\u65AD\u5B8C\u5168\u4E00\u81F4

\u4F7F\u7528\u6B65\u9AA4

TODO

\u52A8\u56FE\u6F14\u793A

TODO

\u7BA1\u9053\u652F\u6301

Arthas 3.0 \u5F00\u59CB\u652F\u6301\u7BA1\u9053, \u7387\u5148\u63D0\u4F9B\u4E86grep,wc,plaintext\u7684\u652F\u6301\u3002

\u53BB groovy \u4F9D\u8D56

groovy \u8868\u8FBE\u5F0F\u5728 arthas2.0 \u4E2D\u5927\u91CF\u4F7F\u7528\uFF0C\u4F8B\u5982 watch \u8868\u8FBE\u5F0F

watch com.alibaba.sample.petstore.web.store.module.screen.ItemList add "params + ' ' + returnObj" params.size()==2
 

\u5176\u4E2D"params + ' ' + returnObj"\u4EE5\u53CAparams.size()==2\u80CC\u540E\u5176\u5B9E\u90FD\u4F7F\u7528\u4E86 groovy \u6765\u8FDB\u884C\u8868\u8FBE\u5F0F\u6C42\u503C\uFF0C\u5982\u679C\u53CD\u590D\u5927\u91CF\u7684\u8FD0\u884C\u8FD9\u4E9B\u8868\u8FBE\u5F0F\uFF0Cgroovy \u4F1A\u521B\u5EFA\u5927\u91CF\u7684 classloader\uFF0C\u6253\u6EE1 perm \u533A\u4ECE\u800C\u89E6\u53D1 FGC\u3002

\u4E3A\u4E86\u907F\u514D\u8FD9\u4E2A\u95EE\u9898\uFF0CArthas 3.0 \u4E2D\u4F7F\u7528\u4E86 ognl \u8FD9\u4E2A\u66F4\u52A0\u8F7B\u91CF\u7684\u8868\u8FBE\u5F0F\u6C42\u503C\u5E93\u6765\u4EE3\u66FF groovy\uFF0C\u5F7B\u5E95\u89E3\u51B3\u4E86 groovy \u5F15\u8D77\u7684 FGC \u98CE\u9669\u3002\u4F46\u7531\u4E8E\u8FD9\u4E2A\u66FF\u6362\uFF0C\u5BFC\u81F4\u539F\u6765\u4F7F\u7528 groovy \u811A\u672C\u7F16\u5199\u7684\u81EA\u5B9A\u4E49\u811A\u672C\u5931\u6548\u3002\u8FD9\u4E2A\u95EE\u9898\u7559\u5F85\u540E\u7EED\u89E3\u51B3\u3002

`,14),v=s("\u5728 3.0 \u4E2D\uFF0Cwatch \u547D\u4EE4\u7684\u8868\u8FBE\u5F0F\u90E8\u5206\u7684\u4E66\u5199\u6709\u4E86\u4E00\u4E9B\u6539\u53D8\uFF0C\u8BE6\u89C1"),u={href:"https://arthas.aliyun.com/doc/watch",target:"_blank",rel:"noopener noreferrer"},m=s("\u8FD9\u91CC"),h=a(`

\u63D0\u5347 rt \u7EDF\u8BA1\u7CBE\u5EA6

Arthas 2.0 \u4E2D\uFF0C\u7EDF\u8BA1 rt \u90FD\u662F\u4EE5ms\u4E3A\u5355\u4F4D\uFF0C\u5BF9\u4E8E\u67D0\u4E9B\u6BD4\u8F83\u5C0F\u7684\u65B9\u6CD5\u8C03\u7528\uFF0C\u8017\u65F6\u5728\u6BEB\u79D2\u4EE5\u4E0B\u7684\u90FD\u4F1A\u88AB\u8BA4\u4E3A\u662F 0ms\uFF0C\u9020\u6210 trace \u603B\u65F6\u95F4\u548C\u5404\u65B9\u6CD5\u7684\u65F6\u95F4\u76F8\u52A0\u4E0D\u4E00\u81F4\u7B49\u95EE\u9898\uFF08\u867D\u7136\u8FD9\u91CC\u9762\u786E\u5B9E\u4F1A\u6709\u8BEF\u5DEE\uFF0C\u4E3B\u8981 Arthas \u81EA\u8EAB\u7684\u5F00\u9500\uFF09\u3002Arthas 3.0 \u4E2D\u6240\u6709 rt \u7684\u5355\u4F4D\u7EDF\u4E00\u6539\u4E3A\u4F7F\u7528ns\u6765\u7EDF\u8BA1\uFF0C\u7CBE\u51C6\u6355\u83B7\u4F60\u7684\u65B9\u6CD5\u8017\u65F6\uFF0C\u8BA9 0ms \u8FD9\u6837\u65E0\u610F\u4E49\u7684\u7EDF\u8BA1\u6570\u636E\u4E0D\u518D\u51FA\u73B0\uFF01

$ tt -l
  INDEX     TIMESTAMP               COST(ms)    IS-RET    IS-EXP   OBJECT            CLASS                                METHOD
 ------------------------------------------------------------------------------------------------------------------------------------------------------------
diff --git a/assets/async.html.1e360242.js b/assets/async.html.4eaabb46.js
similarity index 86%
rename from assets/async.html.1e360242.js
rename to assets/async.html.4eaabb46.js
index 71b43aec2..5fcfb9613 100644
--- a/assets/async.html.1e360242.js
+++ b/assets/async.html.4eaabb46.js
@@ -1,4 +1,4 @@
-import{_ as o,o as s,c,a as e,b as a,e as t,d as i,r as d}from"./app.524ecf5c.js";const r={},l=e("h1",{id:"arthas-async-jobs",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#arthas-async-jobs","aria-hidden":"true"},"#"),t(" Arthas Async Jobs")],-1),u={href:"https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=case-async-jobs",target:"_blank",rel:"noopener noreferrer"},h=e("code",null,"Async Jobs",-1),p=t(" online tutorial"),b=t("Asynchronous jobs in arthas. The idea is borrowed from "),m={href:"http://man7.org/linux/man-pages/man1/jobs.1p.html",target:"_blank",rel:"noopener noreferrer"},g=t("linux jobs"),f=t("."),k=i(`

1. Use & to run the command in the background

For example, execute the trace command in the background:

trace Test t &
+import{_ as a,o,c as s,a as e,b as c,e as t,d as i,r as d}from"./app.e2427bec.js";const r={},l=e("h1",{id:"arthas-async-jobs",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#arthas-async-jobs","aria-hidden":"true"},"#"),t(" Arthas Async Jobs")],-1),u=t("Asynchronous jobs in arthas. The idea is borrowed from "),h={href:"http://man7.org/linux/man-pages/man1/jobs.1p.html",target:"_blank",rel:"noopener noreferrer"},p=t("linux jobs"),b=t("."),m=i(`

1. Use & to run the command in the background

For example, execute the trace command in the background:

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.

2. List background jobs

If you want to list all background jobs, you can execute the jobs command and the results are as follows:

$ jobs
 [10]*
        Stopped           watch com.taobao.container.Test test "params[0].{? #this.name == null }" -x 2
@@ -11,4 +11,4 @@ import{_ as o,o as s,c,a as e,b as a,e as t,d as i,r as d}from"./app.524ecf5c.js
 

If no redirect file is specified, the result will be output to the ~/logs/arthas-cache/ directory, for example:

$ trace Test t >> &
 job id : 2
 cache location : /Users/admin/logs/arthas-cache/28198/2
-

At this time, the command will be executed asynchronously in the background, and the result will be asynchronously saved in the file (~/logs/arthas-cache/\${PID}/\${JobId});

  • At this time, the execution of the task is not affected by the session disconnection; the default timeout period of the task is 1 day, and the default timeout period can be modified through the global options command;
  • The result of this command will be output asynchronously to the file; at this time, regardless of whether save-result is true or not, the result will not be written asynchronously to ~/logs/arthas-cache/result.log.

6. Stop job

If you want to stop background job, just kill <job-id>.

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)
`,27);function v(x,j){const n=d("ExternalLinkIcon");return s(),c("div",null,[l,e("p",null,[e("a",u,[h,p,a(n)])]),e("p",null,[b,e("a",m,[g,a(n)]),f]),k])}const _=o(r,[["render",v],["__file","async.html.vue"]]);export{_ as default}; +

At this time, the command will be executed asynchronously in the background, and the result will be asynchronously saved in the file (~/logs/arthas-cache/\${PID}/\${JobId});

  • At this time, the execution of the task is not affected by the session disconnection; the default timeout period of the task is 1 day, and the default timeout period can be modified through the global options command;
  • The result of this command will be output asynchronously to the file; at this time, regardless of whether save-result is true or not, the result will not be written asynchronously to ~/logs/arthas-cache/result.log.

6. Stop job

If you want to stop background job, just kill <job-id>.

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)
`,27);function g(f,k){const n=d("ExternalLinkIcon");return o(),s("div",null,[l,e("p",null,[u,e("a",h,[p,c(n)]),b]),m])}const x=a(r,[["render",g],["__file","async.html.vue"]]);export{x as default}; diff --git a/assets/async.html.51567fc5.js b/assets/async.html.58415566.js similarity index 87% rename from assets/async.html.51567fc5.js rename to assets/async.html.58415566.js index 73de55fe8..cb3bd8cb3 100644 --- a/assets/async.html.51567fc5.js +++ b/assets/async.html.58415566.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-786f7161","path":"/en/doc/async.html","title":"Arthas Async Jobs","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"1. Use & to run the command in the background","slug":"_1-use-to-run-the-command-in-the-background","link":"#_1-use-to-run-the-command-in-the-background","children":[]},{"level":2,"title":"2. List background jobs","slug":"_2-list-background-jobs","link":"#_2-list-background-jobs","children":[]},{"level":2,"title":"3. Suspend and cancel job","slug":"_3-suspend-and-cancel-job","link":"#_3-suspend-and-cancel-job","children":[]},{"level":2,"title":"4. fg/bg, switch the job from the foreground to the background, and vise verse","slug":"_4-fg-bg-switch-the-job-from-the-foreground-to-the-background-and-vise-verse","link":"#_4-fg-bg-switch-the-job-from-the-foreground-to-the-background-and-vise-verse","children":[]},{"level":2,"title":"5. Redirect the output","slug":"_5-redirect-the-output","link":"#_5-redirect-the-output","children":[]},{"level":2,"title":"6. Stop job","slug":"_6-stop-job","link":"#_6-stop-job","children":[]},{"level":2,"title":"7. Others","slug":"_7-others","link":"#_7-others","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/async.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-786f7161","path":"/en/doc/async.html","title":"Arthas Async Jobs","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"1. Use & to run the command in the background","slug":"_1-use-to-run-the-command-in-the-background","link":"#_1-use-to-run-the-command-in-the-background","children":[]},{"level":2,"title":"2. List background jobs","slug":"_2-list-background-jobs","link":"#_2-list-background-jobs","children":[]},{"level":2,"title":"3. Suspend and cancel job","slug":"_3-suspend-and-cancel-job","link":"#_3-suspend-and-cancel-job","children":[]},{"level":2,"title":"4. fg/bg, switch the job from the foreground to the background, and vise verse","slug":"_4-fg-bg-switch-the-job-from-the-foreground-to-the-background-and-vise-verse","link":"#_4-fg-bg-switch-the-job-from-the-foreground-to-the-background-and-vise-verse","children":[]},{"level":2,"title":"5. Redirect the output","slug":"_5-redirect-the-output","link":"#_5-redirect-the-output","children":[]},{"level":2,"title":"6. Stop job","slug":"_6-stop-job","link":"#_6-stop-job","children":[]},{"level":2,"title":"7. Others","slug":"_7-others","link":"#_7-others","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/async.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/async.html.b03735d9.js b/assets/async.html.60215e2c.js similarity index 84% rename from assets/async.html.b03735d9.js rename to assets/async.html.60215e2c.js index da8a16279..ca10d7cc5 100644 --- a/assets/async.html.b03735d9.js +++ b/assets/async.html.60215e2c.js @@ -1,4 +1,4 @@ -import{_ as t,o,c,a as e,b as n,e as a,d as i,r as l}from"./app.524ecf5c.js";const d={},r=e("h1",{id:"arthas-\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#arthas-\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1","aria-hidden":"true"},"#"),a(" Arthas \u540E\u53F0\u5F02\u6B65\u4EFB\u52A1")],-1),p={href:"https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=case-async-jobs",target:"_blank",rel:"noopener noreferrer"},u=e("code",null,"\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1",-1),h=a("\u5728\u7EBF\u6559\u7A0B"),b=a("arthas \u4E2D\u7684\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1\uFF0C\u4F7F\u7528\u4E86\u4EFF linux \u7CFB\u7EDF\u4EFB\u52A1\u76F8\u5173\u7684\u547D\u4EE4\u3002"),m={href:"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/",target:"_blank",rel:"noopener noreferrer"},g=a("linux \u4EFB\u52A1\u76F8\u5173\u4ECB\u7ECD"),v=a("\u3002"),_=i(`

1. \u4F7F\u7528&\u5728\u540E\u53F0\u6267\u884C\u4EFB\u52A1

\u6BD4\u5982\u5E0C\u671B\u6267\u884C\u540E\u53F0\u6267\u884C trace \u547D\u4EE4\uFF0C\u90A3\u4E48\u8C03\u7528\u4E0B\u9762\u547D\u4EE4

trace Test t &
+import{_ as n,o as t,c,a as e,b as o,e as a,d as i,r as l}from"./app.e2427bec.js";const d={},r=e("h1",{id:"arthas-\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#arthas-\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1","aria-hidden":"true"},"#"),a(" Arthas \u540E\u53F0\u5F02\u6B65\u4EFB\u52A1")],-1),p=a("arthas \u4E2D\u7684\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1\uFF0C\u4F7F\u7528\u4E86\u4EFF linux \u7CFB\u7EDF\u4EFB\u52A1\u76F8\u5173\u7684\u547D\u4EE4\u3002"),u={href:"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/",target:"_blank",rel:"noopener noreferrer"},h=a("linux \u4EFB\u52A1\u76F8\u5173\u4ECB\u7ECD"),b=a("\u3002"),m=i(`

1. \u4F7F\u7528&\u5728\u540E\u53F0\u6267\u884C\u4EFB\u52A1

\u6BD4\u5982\u5E0C\u671B\u6267\u884C\u540E\u53F0\u6267\u884C trace \u547D\u4EE4\uFF0C\u90A3\u4E48\u8C03\u7528\u4E0B\u9762\u547D\u4EE4

trace Test t &
 

\u8FD9\u65F6\u547D\u4EE4\u5728\u540E\u53F0\u6267\u884C\uFF0C\u53EF\u4EE5\u5728 console \u4E2D\u7EE7\u7EED\u6267\u884C\u5176\u4ED6\u547D\u4EE4\u3002

2. \u901A\u8FC7 jobs \u67E5\u770B\u4EFB\u52A1

\u5982\u679C\u5E0C\u671B\u67E5\u770B\u5F53\u524D\u6709\u54EA\u4E9B arthas \u4EFB\u52A1\u5728\u6267\u884C\uFF0C\u53EF\u4EE5\u6267\u884C jobs \u547D\u4EE4\uFF0C\u6267\u884C\u7ED3\u679C\u5982\u4E0B

$ jobs
 [10]*
        Stopped           watch com.taobao.container.Test test "params[0].{? #this.name == null }" -x 2
@@ -11,4 +11,4 @@ import{_ as t,o,c,a as e,b as n,e as a,d as i,r as l}from"./app.524ecf5c.js";con
 

\u5982\u679C\u6CA1\u6709\u6307\u5B9A\u91CD\u5B9A\u5411\u6587\u4EF6\uFF0C\u5219\u4F1A\u628A\u7ED3\u679C\u8F93\u51FA\u5230~/logs/arthas-cache/\u76EE\u5F55\u4E0B\uFF0C\u6BD4\u5982\uFF1A

$ trace Test t >>  &
 job id  : 2
 cache location  : /Users/admin/logs/arthas-cache/28198/2
-

\u6B64\u65F6\u547D\u4EE4\u4F1A\u5728\u540E\u53F0\u5F02\u6B65\u6267\u884C\uFF0C\u5E76\u5C06\u7ED3\u679C\u5F02\u6B65\u4FDD\u5B58\u5728\u6587\u4EF6\uFF08~/logs/arthas-cache/\${PID}/\${JobId}\uFF09\u4E2D\uFF1B

  • \u6B64\u65F6\u4EFB\u52A1\u7684\u6267\u884C\u4E0D\u53D7 session \u65AD\u5F00\u7684\u5F71\u54CD\uFF1B\u4EFB\u52A1\u9ED8\u8BA4\u8D85\u65F6\u65F6\u95F4\u662F 1 \u5929\uFF0C\u53EF\u4EE5\u901A\u8FC7\u5168\u5C40 options \u547D\u4EE4\u4FEE\u6539\u9ED8\u8BA4\u8D85\u65F6\u65F6\u95F4\uFF1B
  • \u6B64\u547D\u4EE4\u7684\u7ED3\u679C\u5C06\u5F02\u6B65\u8F93\u51FA\u5230 \b \u6587\u4EF6\u4E2D\uFF1B\u6B64\u65F6\u4E0D\u7BA1 save-result \u662F\u5426\u4E3A true\uFF0C\u90FD\u4E0D\u4F1A\u518D\u5F80~/logs/arthas-cache/result.log \u4E2D\u5F02\u6B65\u5199\u7ED3\u679C\u3002

6. \u505C\u6B62\u547D\u4EE4

\u5F02\u6B65\u6267\u884C\u7684\u547D\u4EE4\uFF0C\u5982\u679C\u5E0C\u671B\u505C\u6B62\uFF0C\u53EF\u6267\u884Ckill <job-id>

7. \u5176\u4ED6

  • \u6700\u591A\u540C\u65F6\u652F\u6301 8 \u4E2A\u547D\u4EE4\u4F7F\u7528\u91CD\u5B9A\u5411\u5C06\u7ED3\u679C\u5199\u65E5\u5FD7
  • \u8BF7\u52FF\u540C\u65F6\u5F00\u542F\u8FC7\u591A\u7684\u540E\u53F0\u5F02\u6B65\u547D\u4EE4\uFF0C\u4EE5\u514D\u5BF9\u76EE\u6807 JVM \u6027\u80FD\u9020\u6210\u5F71\u54CD
  • \u5982\u679C\u4E0D\u60F3\u505C\u6B62 arthas\uFF0C\u7EE7\u7EED\u6267\u884C\u540E\u53F0\u4EFB\u52A1\uFF0C\u53EF\u4EE5\u6267\u884C quit \u9000\u51FA arthas \u63A7\u5236\u53F0\uFF08stop \u4F1A\u505C\u6B62 arthas \u670D\u52A1\uFF09
`,27);function k(f,x){const s=l("ExternalLinkIcon");return o(),c("div",null,[r,e("p",null,[e("a",p,[u,h,n(s)])]),e("p",null,[b,e("a",m,[g,n(s)]),v]),_])}const E=t(d,[["render",k],["__file","async.html.vue"]]);export{E as default}; +

\u6B64\u65F6\u547D\u4EE4\u4F1A\u5728\u540E\u53F0\u5F02\u6B65\u6267\u884C\uFF0C\u5E76\u5C06\u7ED3\u679C\u5F02\u6B65\u4FDD\u5B58\u5728\u6587\u4EF6\uFF08~/logs/arthas-cache/\${PID}/\${JobId}\uFF09\u4E2D\uFF1B

  • \u6B64\u65F6\u4EFB\u52A1\u7684\u6267\u884C\u4E0D\u53D7 session \u65AD\u5F00\u7684\u5F71\u54CD\uFF1B\u4EFB\u52A1\u9ED8\u8BA4\u8D85\u65F6\u65F6\u95F4\u662F 1 \u5929\uFF0C\u53EF\u4EE5\u901A\u8FC7\u5168\u5C40 options \u547D\u4EE4\u4FEE\u6539\u9ED8\u8BA4\u8D85\u65F6\u65F6\u95F4\uFF1B
  • \u6B64\u547D\u4EE4\u7684\u7ED3\u679C\u5C06\u5F02\u6B65\u8F93\u51FA\u5230 \b \u6587\u4EF6\u4E2D\uFF1B\u6B64\u65F6\u4E0D\u7BA1 save-result \u662F\u5426\u4E3A true\uFF0C\u90FD\u4E0D\u4F1A\u518D\u5F80~/logs/arthas-cache/result.log \u4E2D\u5F02\u6B65\u5199\u7ED3\u679C\u3002

6. \u505C\u6B62\u547D\u4EE4

\u5F02\u6B65\u6267\u884C\u7684\u547D\u4EE4\uFF0C\u5982\u679C\u5E0C\u671B\u505C\u6B62\uFF0C\u53EF\u6267\u884Ckill <job-id>

7. \u5176\u4ED6

  • \u6700\u591A\u540C\u65F6\u652F\u6301 8 \u4E2A\u547D\u4EE4\u4F7F\u7528\u91CD\u5B9A\u5411\u5C06\u7ED3\u679C\u5199\u65E5\u5FD7
  • \u8BF7\u52FF\u540C\u65F6\u5F00\u542F\u8FC7\u591A\u7684\u540E\u53F0\u5F02\u6B65\u547D\u4EE4\uFF0C\u4EE5\u514D\u5BF9\u76EE\u6807 JVM \u6027\u80FD\u9020\u6210\u5F71\u54CD
  • \u5982\u679C\u4E0D\u60F3\u505C\u6B62 arthas\uFF0C\u7EE7\u7EED\u6267\u884C\u540E\u53F0\u4EFB\u52A1\uFF0C\u53EF\u4EE5\u6267\u884C quit \u9000\u51FA arthas \u63A7\u5236\u53F0\uFF08stop \u4F1A\u505C\u6B62 arthas \u670D\u52A1\uFF09
`,27);function g(v,_){const s=l("ExternalLinkIcon");return t(),c("div",null,[r,e("p",null,[p,e("a",u,[h,o(s)]),b]),m])}const f=n(d,[["render",g],["__file","async.html.vue"]]);export{f as default}; diff --git a/assets/async.html.332dfef1.js b/assets/async.html.89c66164.js similarity index 95% rename from assets/async.html.332dfef1.js rename to assets/async.html.89c66164.js index 385da2f43..2ad02f200 100644 --- a/assets/async.html.332dfef1.js +++ b/assets/async.html.89c66164.js @@ -1 +1 @@ -const l=JSON.parse('{"key":"v-4f82df66","path":"/doc/async.html","title":"Arthas \u540E\u53F0\u5F02\u6B65\u4EFB\u52A1","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"1. \u4F7F\u7528&\u5728\u540E\u53F0\u6267\u884C\u4EFB\u52A1","slug":"_1-\u4F7F\u7528-\u5728\u540E\u53F0\u6267\u884C\u4EFB\u52A1","link":"#_1-\u4F7F\u7528-\u5728\u540E\u53F0\u6267\u884C\u4EFB\u52A1","children":[]},{"level":2,"title":"2. \u901A\u8FC7 jobs \u67E5\u770B\u4EFB\u52A1","slug":"_2-\u901A\u8FC7-jobs-\u67E5\u770B\u4EFB\u52A1","link":"#_2-\u901A\u8FC7-jobs-\u67E5\u770B\u4EFB\u52A1","children":[]},{"level":2,"title":"3. \u4EFB\u52A1\u6682\u505C\u548C\u53D6\u6D88","slug":"_3-\u4EFB\u52A1\u6682\u505C\u548C\u53D6\u6D88","link":"#_3-\u4EFB\u52A1\u6682\u505C\u548C\u53D6\u6D88","children":[]},{"level":2,"title":"4. fg\u3001bg \u547D\u4EE4\uFF0C\u5C06\u547D\u4EE4\u8F6C\u5230\u524D\u53F0\u3001\u540E\u53F0\u7EE7\u7EED\u6267\u884C","slug":"_4-fg\u3001bg-\u547D\u4EE4-\u5C06\u547D\u4EE4\u8F6C\u5230\u524D\u53F0\u3001\u540E\u53F0\u7EE7\u7EED\u6267\u884C","link":"#_4-fg\u3001bg-\u547D\u4EE4-\u5C06\u547D\u4EE4\u8F6C\u5230\u524D\u53F0\u3001\u540E\u53F0\u7EE7\u7EED\u6267\u884C","children":[]},{"level":2,"title":"5. \u4EFB\u52A1\u8F93\u51FA\u91CD\u5B9A\u5411","slug":"_5-\u4EFB\u52A1\u8F93\u51FA\u91CD\u5B9A\u5411","link":"#_5-\u4EFB\u52A1\u8F93\u51FA\u91CD\u5B9A\u5411","children":[]},{"level":2,"title":"6. \u505C\u6B62\u547D\u4EE4","slug":"_6-\u505C\u6B62\u547D\u4EE4","link":"#_6-\u505C\u6B62\u547D\u4EE4","children":[]},{"level":2,"title":"7. \u5176\u4ED6","slug":"_7-\u5176\u4ED6","link":"#_7-\u5176\u4ED6","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/async.md","version":"4.3.3"}');export{l as data}; +const l=JSON.parse('{"key":"v-4f82df66","path":"/doc/async.html","title":"Arthas \u540E\u53F0\u5F02\u6B65\u4EFB\u52A1","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"1. \u4F7F\u7528&\u5728\u540E\u53F0\u6267\u884C\u4EFB\u52A1","slug":"_1-\u4F7F\u7528-\u5728\u540E\u53F0\u6267\u884C\u4EFB\u52A1","link":"#_1-\u4F7F\u7528-\u5728\u540E\u53F0\u6267\u884C\u4EFB\u52A1","children":[]},{"level":2,"title":"2. \u901A\u8FC7 jobs \u67E5\u770B\u4EFB\u52A1","slug":"_2-\u901A\u8FC7-jobs-\u67E5\u770B\u4EFB\u52A1","link":"#_2-\u901A\u8FC7-jobs-\u67E5\u770B\u4EFB\u52A1","children":[]},{"level":2,"title":"3. \u4EFB\u52A1\u6682\u505C\u548C\u53D6\u6D88","slug":"_3-\u4EFB\u52A1\u6682\u505C\u548C\u53D6\u6D88","link":"#_3-\u4EFB\u52A1\u6682\u505C\u548C\u53D6\u6D88","children":[]},{"level":2,"title":"4. fg\u3001bg \u547D\u4EE4\uFF0C\u5C06\u547D\u4EE4\u8F6C\u5230\u524D\u53F0\u3001\u540E\u53F0\u7EE7\u7EED\u6267\u884C","slug":"_4-fg\u3001bg-\u547D\u4EE4-\u5C06\u547D\u4EE4\u8F6C\u5230\u524D\u53F0\u3001\u540E\u53F0\u7EE7\u7EED\u6267\u884C","link":"#_4-fg\u3001bg-\u547D\u4EE4-\u5C06\u547D\u4EE4\u8F6C\u5230\u524D\u53F0\u3001\u540E\u53F0\u7EE7\u7EED\u6267\u884C","children":[]},{"level":2,"title":"5. \u4EFB\u52A1\u8F93\u51FA\u91CD\u5B9A\u5411","slug":"_5-\u4EFB\u52A1\u8F93\u51FA\u91CD\u5B9A\u5411","link":"#_5-\u4EFB\u52A1\u8F93\u51FA\u91CD\u5B9A\u5411","children":[]},{"level":2,"title":"6. \u505C\u6B62\u547D\u4EE4","slug":"_6-\u505C\u6B62\u547D\u4EE4","link":"#_6-\u505C\u6B62\u547D\u4EE4","children":[]},{"level":2,"title":"7. \u5176\u4ED6","slug":"_7-\u5176\u4ED6","link":"#_7-\u5176\u4ED6","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/async.md","version":"4.3.5"}');export{l as data}; diff --git a/assets/auth.html.a546b6c7.js b/assets/auth.html.031f3521.js similarity index 99% rename from assets/auth.html.a546b6c7.js rename to assets/auth.html.031f3521.js index aaa6115a9..10988f7c4 100644 --- a/assets/auth.html.a546b6c7.js +++ b/assets/auth.html.031f3521.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as o,a as e,b as r,d as a,e as n,r as c}from"./app.524ecf5c.js";const d={},l=a(`

auth

TIP

Authenticates the current session

Configure username and password

When attaching, you can specify a password on the command line. such as:

java -jar arthas-boot.jar --password ppp
+import{_ as s,o as i,c as o,a as e,b as r,d as a,e as n,r as c}from"./app.e2427bec.js";const d={},l=a(`

auth

TIP

Authenticates the current session

Configure username and password

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

    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

After connecting to arthas, directly executing the command will prompt for authentication:

[arthas@37430]$ help
diff --git a/assets/auth.html.e8af6dce.js b/assets/auth.html.10e5d242.js
similarity index 94%
rename from assets/auth.html.e8af6dce.js
rename to assets/auth.html.10e5d242.js
index 04093f0e3..e5ca45b5e 100644
--- a/assets/auth.html.e8af6dce.js
+++ b/assets/auth.html.10e5d242.js
@@ -1 +1 @@
-const e=JSON.parse('{"key":"v-d0358c7e","path":"/doc/auth.html","title":"auth","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u914D\u7F6E\u7528\u6237\u540D\u548C\u5BC6\u7801","slug":"\u914D\u7F6E\u7528\u6237\u540D\u548C\u5BC6\u7801","link":"#\u914D\u7F6E\u7528\u6237\u540D\u548C\u5BC6\u7801","children":[]},{"level":2,"title":"\u672C\u5730\u8FDE\u63A5\u4E0D\u9274\u6743","slug":"\u672C\u5730\u8FDE\u63A5\u4E0D\u9274\u6743","link":"#\u672C\u5730\u8FDE\u63A5\u4E0D\u9274\u6743","children":[]},{"level":2,"title":"\u5728 telnet console \u91CC\u9274\u6743","slug":"\u5728-telnet-console-\u91CC\u9274\u6743","link":"#\u5728-telnet-console-\u91CC\u9274\u6743","children":[]},{"level":2,"title":"Web console \u5BC6\u7801\u9A8C\u8BC1","slug":"web-console-\u5BC6\u7801\u9A8C\u8BC1","link":"#web-console-\u5BC6\u7801\u9A8C\u8BC1","children":[]},{"level":2,"title":"HTTP API \u9A8C\u8BC1","slug":"http-api-\u9A8C\u8BC1","link":"#http-api-\u9A8C\u8BC1","children":[{"level":3,"title":"Authorization Header \u65B9\u5F0F\uFF08\u63A8\u8350\uFF09","slug":"authorization-header-\u65B9\u5F0F-\u63A8\u8350","link":"#authorization-header-\u65B9\u5F0F-\u63A8\u8350","children":[]},{"level":3,"title":"URL \u53C2\u6570\u4F20\u9012\u65B9\u5F0F","slug":"url-\u53C2\u6570\u4F20\u9012\u65B9\u5F0F","link":"#url-\u53C2\u6570\u4F20\u9012\u65B9\u5F0F","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/auth.md","version":"4.3.3"}');export{e as data};
+const e=JSON.parse('{"key":"v-d0358c7e","path":"/doc/auth.html","title":"auth","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u914D\u7F6E\u7528\u6237\u540D\u548C\u5BC6\u7801","slug":"\u914D\u7F6E\u7528\u6237\u540D\u548C\u5BC6\u7801","link":"#\u914D\u7F6E\u7528\u6237\u540D\u548C\u5BC6\u7801","children":[]},{"level":2,"title":"\u672C\u5730\u8FDE\u63A5\u4E0D\u9274\u6743","slug":"\u672C\u5730\u8FDE\u63A5\u4E0D\u9274\u6743","link":"#\u672C\u5730\u8FDE\u63A5\u4E0D\u9274\u6743","children":[]},{"level":2,"title":"\u5728 telnet console \u91CC\u9274\u6743","slug":"\u5728-telnet-console-\u91CC\u9274\u6743","link":"#\u5728-telnet-console-\u91CC\u9274\u6743","children":[]},{"level":2,"title":"Web console \u5BC6\u7801\u9A8C\u8BC1","slug":"web-console-\u5BC6\u7801\u9A8C\u8BC1","link":"#web-console-\u5BC6\u7801\u9A8C\u8BC1","children":[]},{"level":2,"title":"HTTP API \u9A8C\u8BC1","slug":"http-api-\u9A8C\u8BC1","link":"#http-api-\u9A8C\u8BC1","children":[{"level":3,"title":"Authorization Header \u65B9\u5F0F\uFF08\u63A8\u8350\uFF09","slug":"authorization-header-\u65B9\u5F0F-\u63A8\u8350","link":"#authorization-header-\u65B9\u5F0F-\u63A8\u8350","children":[]},{"level":3,"title":"URL \u53C2\u6570\u4F20\u9012\u65B9\u5F0F","slug":"url-\u53C2\u6570\u4F20\u9012\u65B9\u5F0F","link":"#url-\u53C2\u6570\u4F20\u9012\u65B9\u5F0F","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/auth.md","version":"4.3.5"}');export{e as data};
diff --git a/assets/auth.html.4c6c9a22.js b/assets/auth.html.15a8fda2.js
similarity index 99%
rename from assets/auth.html.4c6c9a22.js
rename to assets/auth.html.15a8fda2.js
index 5516dee7e..db9df6bbe 100644
--- a/assets/auth.html.4c6c9a22.js
+++ b/assets/auth.html.15a8fda2.js
@@ -1,4 +1,4 @@
-import{_ as t,o as i,c as o,a as e,b as d,d as a,e as n,r}from"./app.524ecf5c.js";const c={},l=a(`

auth

\u63D0\u793A

\u9A8C\u8BC1\u5F53\u524D\u4F1A\u8BDD

\u914D\u7F6E\u7528\u6237\u540D\u548C\u5BC6\u7801

\u5728 attach \u65F6\uFF0C\u53EF\u4EE5\u5728\u547D\u4EE4\u884C\u6307\u5B9A\u5BC6\u7801\u3002\u6BD4\u5982\uFF1A

java -jar arthas-boot.jar --password ppp
+import{_ as t,o as i,c as o,a as e,b as d,d as a,e as n,r}from"./app.e2427bec.js";const c={},l=a(`

auth

\u63D0\u793A

\u9A8C\u8BC1\u5F53\u524D\u4F1A\u8BDD

\u914D\u7F6E\u7528\u6237\u540D\u548C\u5BC6\u7801

\u5728 attach \u65F6\uFF0C\u53EF\u4EE5\u5728\u547D\u4EE4\u884C\u6307\u5B9A\u5BC6\u7801\u3002\u6BD4\u5982\uFF1A

java -jar arthas-boot.jar --password ppp
 
  • \u53EF\u4EE5\u901A\u8FC7 --username \u9009\u9879\u6765\u6307\u5B9A\u7528\u6237\uFF0C\u9ED8\u8BA4\u503C\u662Farthas\u3002

  • \u4E5F\u53EF\u4EE5\u5728 arthas.properties \u91CC\u4E2D\u914D\u7F6E username/password\u3002\u547D\u4EE4\u884C\u7684\u4F18\u5148\u7EA7\u5927\u4E8E\u914D\u7F6E\u6587\u4EF6\u3002

  • \u5982\u679C\u53EA\u914D\u7F6Eusername\uFF0C\u6CA1\u6709\u914D\u7F6Epassword\uFF0C\u5219\u4F1A\u751F\u6210\u968F\u673A\u5BC6\u7801\uFF0C\u6253\u5370\u5728~/logs/arthas/arthas.log\u4E2D

    Using generated security password: 0vUBJpRIppkKuZ7dYzYqOKtranj4unGh
     

\u672C\u5730\u8FDE\u63A5\u4E0D\u9274\u6743

\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0C\u5728arthas.properties\u6587\u4EF6\u91CC\u6709\u914D\u7F6E\uFF1A

arthas.localConnectionNonAuth=true
 

\u5F53\u914D\u7F6E\u5BC6\u7801\u65F6\uFF0C\u4F7F\u7528\u672C\u5730\u8FDE\u63A5\uFF0C\u4E5F\u4E0D\u9700\u8981\u9274\u6743\u3002\u9ED8\u8BA4\u914D\u7F6E\u503C\u662F true\uFF0C\u65B9\u4FBF\u672C\u5730\u8FDE\u63A5\u4F7F\u7528\u3002\u53EA\u6709\u8FDC\u7A0B\u8FDE\u63A5\u65F6\uFF0C\u624D\u9700\u8981\u9274\u6743\u3002

\u5728 telnet console \u91CC\u9274\u6743

\u8FDE\u63A5\u5230 arthas \u540E\uFF0C\u76F4\u63A5\u6267\u884C\u547D\u4EE4\u4F1A\u63D0\u793A\u9700\u8981\u9274\u6743\uFF1A

[arthas@37430]$ help
diff --git a/assets/auth.html.dc89b429.js b/assets/auth.html.9f2ff1c7.js
similarity index 92%
rename from assets/auth.html.dc89b429.js
rename to assets/auth.html.9f2ff1c7.js
index 4b8481b88..d98a77457 100644
--- a/assets/auth.html.dc89b429.js
+++ b/assets/auth.html.9f2ff1c7.js
@@ -1 +1 @@
-const e=JSON.parse('{"key":"v-f76c33a6","path":"/en/doc/auth.html","title":"auth","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Configure username and password","slug":"configure-username-and-password","link":"#configure-username-and-password","children":[]},{"level":2,"title":"Local connection does not require authentication","slug":"local-connection-does-not-require-authentication","link":"#local-connection-does-not-require-authentication","children":[]},{"level":2,"title":"Authenticate in the telnet console","slug":"authenticate-in-the-telnet-console","link":"#authenticate-in-the-telnet-console","children":[]},{"level":2,"title":"Web console Authentication","slug":"web-console-authentication","link":"#web-console-authentication","children":[]},{"level":2,"title":"HTTP API Authentication","slug":"http-api-authentication","link":"#http-api-authentication","children":[{"level":3,"title":"HTTP Authorization Header(recommended)","slug":"http-authorization-header-recommended","link":"#http-authorization-header-recommended","children":[]},{"level":3,"title":"URL parameters","slug":"url-parameters","link":"#url-parameters","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/auth.md","version":"4.3.3"}');export{e as data};
+const e=JSON.parse('{"key":"v-f76c33a6","path":"/en/doc/auth.html","title":"auth","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Configure username and password","slug":"configure-username-and-password","link":"#configure-username-and-password","children":[]},{"level":2,"title":"Local connection does not require authentication","slug":"local-connection-does-not-require-authentication","link":"#local-connection-does-not-require-authentication","children":[]},{"level":2,"title":"Authenticate in the telnet console","slug":"authenticate-in-the-telnet-console","link":"#authenticate-in-the-telnet-console","children":[]},{"level":2,"title":"Web console Authentication","slug":"web-console-authentication","link":"#web-console-authentication","children":[]},{"level":2,"title":"HTTP API Authentication","slug":"http-api-authentication","link":"#http-api-authentication","children":[{"level":3,"title":"HTTP Authorization Header(recommended)","slug":"http-authorization-header-recommended","link":"#http-authorization-header-recommended","children":[]},{"level":3,"title":"URL parameters","slug":"url-parameters","link":"#url-parameters","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/auth.md","version":"4.3.5"}');export{e as data};
diff --git a/assets/base64.html.afb50617.js b/assets/base64.html.26159b8a.js
similarity index 93%
rename from assets/base64.html.afb50617.js
rename to assets/base64.html.26159b8a.js
index 7580126b9..9b34a215c 100644
--- a/assets/base64.html.afb50617.js
+++ b/assets/base64.html.26159b8a.js
@@ -1 +1 @@
-const e=JSON.parse('{"key":"v-3157067a","path":"/doc/base64.html","title":"base64","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u5BF9\u6587\u4EF6\u8FDB\u884C base64 \u7F16\u7801","slug":"\u5BF9\u6587\u4EF6\u8FDB\u884C-base64-\u7F16\u7801","link":"#\u5BF9\u6587\u4EF6\u8FDB\u884C-base64-\u7F16\u7801","children":[]},{"level":2,"title":"\u5BF9\u6587\u4EF6\u8FDB\u884C base64 \u7F16\u7801\u5E76\u628A\u7ED3\u679C\u4FDD\u5B58\u5230\u6587\u4EF6\u91CC","slug":"\u5BF9\u6587\u4EF6\u8FDB\u884C-base64-\u7F16\u7801\u5E76\u628A\u7ED3\u679C\u4FDD\u5B58\u5230\u6587\u4EF6\u91CC","link":"#\u5BF9\u6587\u4EF6\u8FDB\u884C-base64-\u7F16\u7801\u5E76\u628A\u7ED3\u679C\u4FDD\u5B58\u5230\u6587\u4EF6\u91CC","children":[]},{"level":2,"title":"\u7528 base64 \u89E3\u7801\u6587\u4EF6","slug":"\u7528-base64-\u89E3\u7801\u6587\u4EF6","link":"#\u7528-base64-\u89E3\u7801\u6587\u4EF6","children":[]},{"level":2,"title":"\u7528 base64 \u89E3\u7801\u6587\u4EF6\u5E76\u4FDD\u5B58\u7ED3\u679C\u5230\u6587\u4EF6\u91CC","slug":"\u7528-base64-\u89E3\u7801\u6587\u4EF6\u5E76\u4FDD\u5B58\u7ED3\u679C\u5230\u6587\u4EF6\u91CC","link":"#\u7528-base64-\u89E3\u7801\u6587\u4EF6\u5E76\u4FDD\u5B58\u7ED3\u679C\u5230\u6587\u4EF6\u91CC","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/base64.md","version":"4.3.3"}');export{e as data};
+const e=JSON.parse('{"key":"v-3157067a","path":"/doc/base64.html","title":"base64","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u5BF9\u6587\u4EF6\u8FDB\u884C base64 \u7F16\u7801","slug":"\u5BF9\u6587\u4EF6\u8FDB\u884C-base64-\u7F16\u7801","link":"#\u5BF9\u6587\u4EF6\u8FDB\u884C-base64-\u7F16\u7801","children":[]},{"level":2,"title":"\u5BF9\u6587\u4EF6\u8FDB\u884C base64 \u7F16\u7801\u5E76\u628A\u7ED3\u679C\u4FDD\u5B58\u5230\u6587\u4EF6\u91CC","slug":"\u5BF9\u6587\u4EF6\u8FDB\u884C-base64-\u7F16\u7801\u5E76\u628A\u7ED3\u679C\u4FDD\u5B58\u5230\u6587\u4EF6\u91CC","link":"#\u5BF9\u6587\u4EF6\u8FDB\u884C-base64-\u7F16\u7801\u5E76\u628A\u7ED3\u679C\u4FDD\u5B58\u5230\u6587\u4EF6\u91CC","children":[]},{"level":2,"title":"\u7528 base64 \u89E3\u7801\u6587\u4EF6","slug":"\u7528-base64-\u89E3\u7801\u6587\u4EF6","link":"#\u7528-base64-\u89E3\u7801\u6587\u4EF6","children":[]},{"level":2,"title":"\u7528 base64 \u89E3\u7801\u6587\u4EF6\u5E76\u4FDD\u5B58\u7ED3\u679C\u5230\u6587\u4EF6\u91CC","slug":"\u7528-base64-\u89E3\u7801\u6587\u4EF6\u5E76\u4FDD\u5B58\u7ED3\u679C\u5230\u6587\u4EF6\u91CC","link":"#\u7528-base64-\u89E3\u7801\u6587\u4EF6\u5E76\u4FDD\u5B58\u7ED3\u679C\u5230\u6587\u4EF6\u91CC","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/base64.md","version":"4.3.5"}');export{e as data};
diff --git a/assets/base64.html.750bcc95.js b/assets/base64.html.4b84930d.js
similarity index 86%
rename from assets/base64.html.750bcc95.js
rename to assets/base64.html.4b84930d.js
index 62793bbd0..e7bc1df7d 100644
--- a/assets/base64.html.750bcc95.js
+++ b/assets/base64.html.4b84930d.js
@@ -1 +1 @@
-const e=JSON.parse('{"key":"v-d17b7034","path":"/en/doc/base64.html","title":"base64","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Encode to base64","slug":"encode-to-base64","link":"#encode-to-base64","children":[]},{"level":2,"title":"Encode to base64 and save output to file","slug":"encode-to-base64-and-save-output-to-file","link":"#encode-to-base64-and-save-output-to-file","children":[]},{"level":2,"title":"Decode from base64","slug":"decode-from-base64","link":"#decode-from-base64","children":[]},{"level":2,"title":"Decode from base64 and save output to file","slug":"decode-from-base64-and-save-output-to-file","link":"#decode-from-base64-and-save-output-to-file","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/base64.md","version":"4.3.3"}');export{e as data};
+const e=JSON.parse('{"key":"v-d17b7034","path":"/en/doc/base64.html","title":"base64","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Encode to base64","slug":"encode-to-base64","link":"#encode-to-base64","children":[]},{"level":2,"title":"Encode to base64 and save output to file","slug":"encode-to-base64-and-save-output-to-file","link":"#encode-to-base64-and-save-output-to-file","children":[]},{"level":2,"title":"Decode from base64","slug":"decode-from-base64","link":"#decode-from-base64","children":[]},{"level":2,"title":"Decode from base64 and save output to file","slug":"decode-from-base64-and-save-output-to-file","link":"#decode-from-base64-and-save-output-to-file","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/base64.md","version":"4.3.5"}');export{e as data};
diff --git a/assets/base64.html.ba24ac32.js b/assets/base64.html.9f351db1.js
similarity index 98%
rename from assets/base64.html.ba24ac32.js
rename to assets/base64.html.9f351db1.js
index 79dcbfe6f..75a3e4c4c 100644
--- a/assets/base64.html.ba24ac32.js
+++ b/assets/base64.html.9f351db1.js
@@ -1,4 +1,4 @@
-import{_ as a,o as e,c as s,d as n}from"./app.524ecf5c.js";const t={},i=n(`

base64

\u63D0\u793A

base64 \u7F16\u7801\u8F6C\u6362\uFF0C\u548C linux \u91CC\u7684 base64 \u547D\u4EE4\u7C7B\u4F3C\u3002

\u5BF9\u6587\u4EF6\u8FDB\u884C base64 \u7F16\u7801

[arthas@70070]$ echo 'abc' > /tmp/test.txt
+import{_ as a,o as e,c as s,d as n}from"./app.e2427bec.js";const t={},i=n(`

base64

\u63D0\u793A

base64 \u7F16\u7801\u8F6C\u6362\uFF0C\u548C linux \u91CC\u7684 base64 \u547D\u4EE4\u7C7B\u4F3C\u3002

\u5BF9\u6587\u4EF6\u8FDB\u884C base64 \u7F16\u7801

[arthas@70070]$ echo 'abc' > /tmp/test.txt
 [arthas@70070]$ cat /tmp/test.txt
 abc
 
diff --git a/assets/base64.html.e2a165a5.js b/assets/base64.html.a74ba9fa.js
similarity index 97%
rename from assets/base64.html.e2a165a5.js
rename to assets/base64.html.a74ba9fa.js
index a0506966a..872d19412 100644
--- a/assets/base64.html.e2a165a5.js
+++ b/assets/base64.html.a74ba9fa.js
@@ -1,4 +1,4 @@
-import{_ as e,o as a,c as s,d as n}from"./app.524ecf5c.js";const t={},i=n(`

base64

TIP

Encode and decode using Base64 representation.

Encode to base64

[arthas@70070]$ echo 'abc' > /tmp/test.txt
+import{_ as e,o as a,c as s,d as n}from"./app.e2427bec.js";const t={},i=n(`

base64

TIP

Encode and decode using Base64 representation.

Encode to base64

[arthas@70070]$ echo 'abc' > /tmp/test.txt
 [arthas@70070]$ cat /tmp/test.txt
 abc
 
diff --git a/assets/batch-support.html.67f90179.js b/assets/batch-support.html.2f7463e9.js
similarity index 90%
rename from assets/batch-support.html.67f90179.js
rename to assets/batch-support.html.2f7463e9.js
index 67b68775a..ff33b959d 100644
--- a/assets/batch-support.html.67f90179.js
+++ b/assets/batch-support.html.2f7463e9.js
@@ -1 +1 @@
-const e=JSON.parse('{"key":"v-cc8f4ae6","path":"/doc/batch-support.html","title":"\u6279\u5904\u7406\u529F\u80FD","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u65B9\u6CD5","slug":"\u4F7F\u7528\u65B9\u6CD5","link":"#\u4F7F\u7528\u65B9\u6CD5","children":[{"level":3,"title":"\u7B2C\u4E00\u6B65\uFF1A\u521B\u5EFA\u4F60\u7684\u6279\u5904\u7406\u811A\u672C","slug":"\u7B2C\u4E00\u6B65-\u521B\u5EFA\u4F60\u7684\u6279\u5904\u7406\u811A\u672C","link":"#\u7B2C\u4E00\u6B65-\u521B\u5EFA\u4F60\u7684\u6279\u5904\u7406\u811A\u672C","children":[]},{"level":3,"title":"\u7B2C\u4E8C\u6B65\uFF1A\u8FD0\u884C\u4F60\u7684\u6279\u5904\u7406\u811A\u672C","slug":"\u7B2C\u4E8C\u6B65-\u8FD0\u884C\u4F60\u7684\u6279\u5904\u7406\u811A\u672C","link":"#\u7B2C\u4E8C\u6B65-\u8FD0\u884C\u4F60\u7684\u6279\u5904\u7406\u811A\u672C","children":[]},{"level":3,"title":"\u7B2C\u4E09\u6B65\uFF1A\u67E5\u770B\u8FD0\u884C\u7ED3\u679C","slug":"\u7B2C\u4E09\u6B65-\u67E5\u770B\u8FD0\u884C\u7ED3\u679C","link":"#\u7B2C\u4E09\u6B65-\u67E5\u770B\u8FD0\u884C\u7ED3\u679C","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/batch-support.md","version":"4.3.3"}');export{e as data};
+const e=JSON.parse('{"key":"v-cc8f4ae6","path":"/doc/batch-support.html","title":"\u6279\u5904\u7406\u529F\u80FD","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u65B9\u6CD5","slug":"\u4F7F\u7528\u65B9\u6CD5","link":"#\u4F7F\u7528\u65B9\u6CD5","children":[{"level":3,"title":"\u7B2C\u4E00\u6B65\uFF1A\u521B\u5EFA\u4F60\u7684\u6279\u5904\u7406\u811A\u672C","slug":"\u7B2C\u4E00\u6B65-\u521B\u5EFA\u4F60\u7684\u6279\u5904\u7406\u811A\u672C","link":"#\u7B2C\u4E00\u6B65-\u521B\u5EFA\u4F60\u7684\u6279\u5904\u7406\u811A\u672C","children":[]},{"level":3,"title":"\u7B2C\u4E8C\u6B65\uFF1A\u8FD0\u884C\u4F60\u7684\u6279\u5904\u7406\u811A\u672C","slug":"\u7B2C\u4E8C\u6B65-\u8FD0\u884C\u4F60\u7684\u6279\u5904\u7406\u811A\u672C","link":"#\u7B2C\u4E8C\u6B65-\u8FD0\u884C\u4F60\u7684\u6279\u5904\u7406\u811A\u672C","children":[]},{"level":3,"title":"\u7B2C\u4E09\u6B65\uFF1A\u67E5\u770B\u8FD0\u884C\u7ED3\u679C","slug":"\u7B2C\u4E09\u6B65-\u67E5\u770B\u8FD0\u884C\u7ED3\u679C","link":"#\u7B2C\u4E09\u6B65-\u67E5\u770B\u8FD0\u884C\u7ED3\u679C","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/batch-support.md","version":"4.3.5"}');export{e as data};
diff --git a/assets/batch-support.html.c65a5a76.js b/assets/batch-support.html.2fd7dfc3.js
similarity index 78%
rename from assets/batch-support.html.c65a5a76.js
rename to assets/batch-support.html.2fd7dfc3.js
index ba7016592..9b47cb2ba 100644
--- a/assets/batch-support.html.c65a5a76.js
+++ b/assets/batch-support.html.2fd7dfc3.js
@@ -1 +1 @@
-const e=JSON.parse('{"key":"v-765e30be","path":"/en/doc/batch-support.html","title":"Batch Processing","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"Step 1: Create the script","slug":"step-1-create-the-script","link":"#step-1-create-the-script","children":[]},{"level":3,"title":"Step 2: Run the script","slug":"step-2-run-the-script","link":"#step-2-run-the-script","children":[]},{"level":3,"title":"Step 3: Check the output","slug":"step-3-check-the-output","link":"#step-3-check-the-output","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/batch-support.md","version":"4.3.3"}');export{e as data};
+const e=JSON.parse('{"key":"v-765e30be","path":"/en/doc/batch-support.html","title":"Batch Processing","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"Step 1: Create the script","slug":"step-1-create-the-script","link":"#step-1-create-the-script","children":[]},{"level":3,"title":"Step 2: Run the script","slug":"step-2-run-the-script","link":"#step-2-run-the-script","children":[]},{"level":3,"title":"Step 3: Check the output","slug":"step-3-check-the-output","link":"#step-3-check-the-output","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/batch-support.md","version":"4.3.5"}');export{e as data};
diff --git a/assets/batch-support.html.d25cc58d.js b/assets/batch-support.html.8e77cbb4.js
similarity index 98%
rename from assets/batch-support.html.d25cc58d.js
rename to assets/batch-support.html.8e77cbb4.js
index 0e0cdf4d5..6541de319 100644
--- a/assets/batch-support.html.d25cc58d.js
+++ b/assets/batch-support.html.8e77cbb4.js
@@ -1,4 +1,4 @@
-import{_ as n,o as c,c as o,a as e,b as i,w as d,d as a,e as s,r}from"./app.524ecf5c.js";const l={},h=a(`

Batch Processing

With the help of Batch Processing, you can run multiple commands in batch and get the final result at the end. The process name can be specified using the \u201C\u2013select\u201D parameter.

Usage

Step 1: Create the script

Create a test.as script suffixed with as. Here as is suggested for the suffix of the filename, but in fact any suffix is acceptable.

\u279C  arthas git:(develop) cat /var/tmp/test.as
+import{_ as n,o as c,c as o,a as e,b as i,w as d,d as a,e as s,r}from"./app.e2427bec.js";const l={},h=a(`

Batch Processing

With the help of Batch Processing, you can run multiple commands in batch and get the final result at the end. The process name can be specified using the \u201C\u2013select\u201D parameter.

Usage

Step 1: Create the script

Create a test.as script suffixed with as. Here as is suggested for the suffix of the filename, but in fact any suffix is acceptable.

\u279C  arthas git:(develop) cat /var/tmp/test.as
 help
 dashboard -n 1
 session
diff --git a/assets/batch-support.html.6d0dd4ad.js b/assets/batch-support.html.f1130b14.js
similarity index 98%
rename from assets/batch-support.html.6d0dd4ad.js
rename to assets/batch-support.html.f1130b14.js
index 3fe3838c8..5e8cc0783 100644
--- a/assets/batch-support.html.6d0dd4ad.js
+++ b/assets/batch-support.html.f1130b14.js
@@ -1,4 +1,4 @@
-import{_ as t,o as d,c as i,a as e,b as o,w as c,d as a,e as s,r}from"./app.524ecf5c.js";const l={},p=a('

\u6279\u5904\u7406\u529F\u80FD

\u63D0\u793A

\u901A\u8FC7\u6279\u5904\u7406\u529F\u80FD\uFF0Carthas \u652F\u6301\u4E00\u6B21\u6027\u6279\u91CF\u8FD0\u884C\u591A\u4E2A\u547D\u4EE4\uFF0C\u5E76\u53D6\u5F97\u547D\u4EE4\u6267\u884C\u7684\u7ED3\u679C\u3002\u53EF\u7ED3\u5408 --select \u53C2\u6570\u53EF\u4EE5\u6307\u5B9A\u8FDB\u7A0B\u540D\u5B57\u4E00\u8D77\u4F7F\u7528\u3002

\u4F7F\u7528\u65B9\u6CD5

\u7B2C\u4E00\u6B65\uFF1A\u521B\u5EFA\u4F60\u7684\u6279\u5904\u7406\u811A\u672C

\u8FD9\u91CC\u6211\u4EEC\u65B0\u5EFA\u4E86\u4E00\u4E2Atest.as\u811A\u672C\uFF0C\u4E3A\u4E86\u89C4\u8303\uFF0C\u6211\u4EEC\u91C7\u7528\u4E86.as \u540E\u7F00\u540D\uFF0C\u4F46\u4E8B\u5B9E\u4E0A\u4EFB\u610F\u7684\u6587\u672C\u6587\u4EF6\u90FD ok\u3002

',5),h={class:"custom-container tip"},u=e("p",{class:"custom-container-title"},"\u63D0\u793A",-1),m=e("li",null,"\u76EE\u524D\u9700\u8981\u6BCF\u4E2A\u547D\u4EE4\u5360\u4E00\u884C",-1),v=e("li",null,[s("dashboard \u52A1\u5FC5\u6307\u5B9A\u6267\u884C\u6B21\u6570 ("),e("code",null,"-n"),s(")\uFF0C\u5426\u5219\u4F1A\u5BFC\u81F4\u6279\u5904\u7406\u811A\u672C\u65E0\u6CD5\u7EC8\u6B62")],-1),_=e("li",null,[s("watch/tt/trace/monitor/stack \u7B49\u547D\u4EE4\u52A1\u5FC5\u6307\u5B9A\u6267\u884C\u6B21\u6570 ("),e("code",null,"-n"),s(")\uFF0C\u5426\u5219\u4F1A\u5BFC\u81F4\u6279\u5904\u7406\u811A\u672C\u65E0\u6CD5\u7EC8\u6B62")],-1),b=s("\u53EF\u4EE5\u4F7F\u7528\u5F02\u6B65\u540E\u53F0\u4EFB\u52A1\uFF0C\u5982 "),g=e("code",null,"watch c.t.X test returnObj > &",-1),k=s("\uFF0C\u8BA9\u547D\u4EE4\u4E00\u76F4\u5728\u540E\u53F0\u8FD0\u884C\uFF0C\u901A\u8FC7\u65E5\u5FD7\u83B7\u53D6\u7ED3\u679C\uFF0C"),x=s("\u83B7\u53D6\u66F4\u591A\u5F02\u6B65\u4EFB\u52A1\u7684\u4FE1\u606F"),f=a(`
\u279C  arthas git:(develop) cat /var/tmp/test.as
+import{_ as t,o as d,c as i,a as e,b as o,w as c,d as a,e as s,r}from"./app.e2427bec.js";const l={},p=a('

\u6279\u5904\u7406\u529F\u80FD

\u63D0\u793A

\u901A\u8FC7\u6279\u5904\u7406\u529F\u80FD\uFF0Carthas \u652F\u6301\u4E00\u6B21\u6027\u6279\u91CF\u8FD0\u884C\u591A\u4E2A\u547D\u4EE4\uFF0C\u5E76\u53D6\u5F97\u547D\u4EE4\u6267\u884C\u7684\u7ED3\u679C\u3002\u53EF\u7ED3\u5408 --select \u53C2\u6570\u53EF\u4EE5\u6307\u5B9A\u8FDB\u7A0B\u540D\u5B57\u4E00\u8D77\u4F7F\u7528\u3002

\u4F7F\u7528\u65B9\u6CD5

\u7B2C\u4E00\u6B65\uFF1A\u521B\u5EFA\u4F60\u7684\u6279\u5904\u7406\u811A\u672C

\u8FD9\u91CC\u6211\u4EEC\u65B0\u5EFA\u4E86\u4E00\u4E2Atest.as\u811A\u672C\uFF0C\u4E3A\u4E86\u89C4\u8303\uFF0C\u6211\u4EEC\u91C7\u7528\u4E86.as \u540E\u7F00\u540D\uFF0C\u4F46\u4E8B\u5B9E\u4E0A\u4EFB\u610F\u7684\u6587\u672C\u6587\u4EF6\u90FD ok\u3002

',5),h={class:"custom-container tip"},u=e("p",{class:"custom-container-title"},"\u63D0\u793A",-1),m=e("li",null,"\u76EE\u524D\u9700\u8981\u6BCF\u4E2A\u547D\u4EE4\u5360\u4E00\u884C",-1),v=e("li",null,[s("dashboard \u52A1\u5FC5\u6307\u5B9A\u6267\u884C\u6B21\u6570 ("),e("code",null,"-n"),s(")\uFF0C\u5426\u5219\u4F1A\u5BFC\u81F4\u6279\u5904\u7406\u811A\u672C\u65E0\u6CD5\u7EC8\u6B62")],-1),_=e("li",null,[s("watch/tt/trace/monitor/stack \u7B49\u547D\u4EE4\u52A1\u5FC5\u6307\u5B9A\u6267\u884C\u6B21\u6570 ("),e("code",null,"-n"),s(")\uFF0C\u5426\u5219\u4F1A\u5BFC\u81F4\u6279\u5904\u7406\u811A\u672C\u65E0\u6CD5\u7EC8\u6B62")],-1),b=s("\u53EF\u4EE5\u4F7F\u7528\u5F02\u6B65\u540E\u53F0\u4EFB\u52A1\uFF0C\u5982 "),g=e("code",null,"watch c.t.X test returnObj > &",-1),k=s("\uFF0C\u8BA9\u547D\u4EE4\u4E00\u76F4\u5728\u540E\u53F0\u8FD0\u884C\uFF0C\u901A\u8FC7\u65E5\u5FD7\u83B7\u53D6\u7ED3\u679C\uFF0C"),x=s("\u83B7\u53D6\u66F4\u591A\u5F02\u6B65\u4EFB\u52A1\u7684\u4FE1\u606F"),f=a(`
\u279C  arthas git:(develop) cat /var/tmp/test.as
 help
 dashboard -n 1
 session
diff --git a/assets/cat.html.294a7128.js b/assets/cat.html.294a7128.js
deleted file mode 100644
index da8cbea07..000000000
--- a/assets/cat.html.294a7128.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import{_ as n,o as s,c,a as e,b as o,e as a,d as r,r as i}from"./app.524ecf5c.js";const d={},l=e("h1",{id:"cat",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#cat","aria-hidden":"true"},"#"),a(" cat")],-1),h={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-cat",target:"_blank",rel:"noopener noreferrer"},_=e("code",null,"cat",-1),u=a(" online tutorial"),p=r(`

TIP

Concatenate and print files

Usage

$ cat /tmp/a.txt
-
`,3);function m(f,v){const t=i("ExternalLinkIcon");return s(),c("div",null,[l,e("p",null,[e("a",h,[_,u,o(t)])]),p])}const x=n(d,[["render",m],["__file","cat.html.vue"]]);export{x as default}; diff --git a/assets/cat.html.2fba4fba.js b/assets/cat.html.2fba4fba.js deleted file mode 100644 index bed45b62a..000000000 --- a/assets/cat.html.2fba4fba.js +++ /dev/null @@ -1,2 +0,0 @@ -import{_ as n,o as c,c as s,a as e,b as o,e as a,d as r,r as i}from"./app.524ecf5c.js";const d={},l=e("h1",{id:"cat",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#cat","aria-hidden":"true"},"#"),a(" cat")],-1),h={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-cat",target:"_blank",rel:"noopener noreferrer"},_=e("code",null,"cat",-1),u=a("\u5728\u7EBF\u6559\u7A0B"),m=r(`

\u63D0\u793A

\u6253\u5370\u6587\u4EF6\u5185\u5BB9\uFF0C\u548C linux \u91CC\u7684 cat \u547D\u4EE4\u7C7B\u4F3C\u3002

\u4F7F\u7528\u53C2\u8003

$ cat /tmp/a.txt
-
`,3);function p(f,v){const t=i("ExternalLinkIcon");return c(),s("div",null,[l,e("p",null,[e("a",h,[_,u,o(t)])]),m])}const b=n(d,[["render",p],["__file","cat.html.vue"]]);export{b as default}; diff --git a/assets/cat.html.3a5d25c6.js b/assets/cat.html.317b776a.js similarity index 71% rename from assets/cat.html.3a5d25c6.js rename to assets/cat.html.317b776a.js index 54ab0d475..a2038fa50 100644 --- a/assets/cat.html.3a5d25c6.js +++ b/assets/cat.html.317b776a.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-6542b733","path":"/doc/cat.html","title":"cat","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/cat.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-6542b733","path":"/doc/cat.html","title":"cat","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/cat.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/cat.html.5c2eddad.js b/assets/cat.html.5c2eddad.js new file mode 100644 index 000000000..7f1e8c180 --- /dev/null +++ b/assets/cat.html.5c2eddad.js @@ -0,0 +1,2 @@ +import{_ as a,o as e,c as t,d as c}from"./app.e2427bec.js";const s={},n=c(`

cat

\u63D0\u793A

\u6253\u5370\u6587\u4EF6\u5185\u5BB9\uFF0C\u548C linux \u91CC\u7684 cat \u547D\u4EE4\u7C7B\u4F3C\u3002

\u4F7F\u7528\u53C2\u8003

$ cat /tmp/a.txt
+
`,4),i=[n];function d(r,o){return e(),t("div",null,i)}const h=a(s,[["render",d],["__file","cat.html.vue"]]);export{h as default}; diff --git a/assets/cat.html.18f65deb.js b/assets/cat.html.8d80e219.js similarity index 68% rename from assets/cat.html.18f65deb.js rename to assets/cat.html.8d80e219.js index f70997831..aaf740f97 100644 --- a/assets/cat.html.18f65deb.js +++ b/assets/cat.html.8d80e219.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-64a0cd47","path":"/en/doc/cat.html","title":"cat","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/cat.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-64a0cd47","path":"/en/doc/cat.html","title":"cat","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/cat.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/cat.html.a8a712c6.js b/assets/cat.html.a8a712c6.js new file mode 100644 index 000000000..67eeabd5c --- /dev/null +++ b/assets/cat.html.a8a712c6.js @@ -0,0 +1,2 @@ +import{_ as a,o as e,c as t,d as s}from"./app.e2427bec.js";const c={},n=s(`

cat

TIP

Concatenate and print files

Usage

$ cat /tmp/a.txt
+
`,4),i=[n];function d(r,o){return e(),t("div",null,i)}const h=a(c,[["render",d],["__file","cat.html.vue"]]);export{h as default}; diff --git a/assets/classloader-metaspace.html.7b8a7fb0.js b/assets/classloader-metaspace.html.1c3e8440.js similarity index 91% rename from assets/classloader-metaspace.html.7b8a7fb0.js rename to assets/classloader-metaspace.html.1c3e8440.js index f6e17ba40..4f23e69d0 100644 --- a/assets/classloader-metaspace.html.7b8a7fb0.js +++ b/assets/classloader-metaspace.html.1c3e8440.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-d6087b6c","path":"/doc/classloader-metaspace.html","title":"classloader-metaspace","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u8F93\u51FA\u5B57\u6BB5","slug":"\u8F93\u51FA\u5B57\u6BB5","link":"#\u8F93\u51FA\u5B57\u6BB5","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"\u67E5\u770B\u6240\u6709 ClassLoader metaspace \u7EDF\u8BA1","slug":"\u67E5\u770B\u6240\u6709-classloader-metaspace-\u7EDF\u8BA1","link":"#\u67E5\u770B\u6240\u6709-classloader-metaspace-\u7EDF\u8BA1","children":[]},{"level":3,"title":"\u6309 ClassLoader \u7C7B\u578B\u8FC7\u6EE4","slug":"\u6309-classloader-\u7C7B\u578B\u8FC7\u6EE4","link":"#\u6309-classloader-\u7C7B\u578B\u8FC7\u6EE4","children":[]},{"level":3,"title":"\u8F93\u51FA\u5B8C\u6574\u8BCA\u65AD\u5217","slug":"\u8F93\u51FA\u5B8C\u6574\u8BCA\u65AD\u5217","link":"#\u8F93\u51FA\u5B8C\u6574\u8BCA\u65AD\u5217","children":[]},{"level":3,"title":"\u9650\u5236\u8F93\u51FA\u884C\u6570","slug":"\u9650\u5236\u8F93\u51FA\u884C\u6570","link":"#\u9650\u5236\u8F93\u51FA\u884C\u6570","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/classloader-metaspace.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-d6087b6c","path":"/doc/classloader-metaspace.html","title":"classloader-metaspace","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u8F93\u51FA\u5B57\u6BB5","slug":"\u8F93\u51FA\u5B57\u6BB5","link":"#\u8F93\u51FA\u5B57\u6BB5","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"\u67E5\u770B\u6240\u6709 ClassLoader metaspace \u7EDF\u8BA1","slug":"\u67E5\u770B\u6240\u6709-classloader-metaspace-\u7EDF\u8BA1","link":"#\u67E5\u770B\u6240\u6709-classloader-metaspace-\u7EDF\u8BA1","children":[]},{"level":3,"title":"\u6309 ClassLoader \u7C7B\u578B\u8FC7\u6EE4","slug":"\u6309-classloader-\u7C7B\u578B\u8FC7\u6EE4","link":"#\u6309-classloader-\u7C7B\u578B\u8FC7\u6EE4","children":[]},{"level":3,"title":"\u8F93\u51FA\u5B8C\u6574\u8BCA\u65AD\u5217","slug":"\u8F93\u51FA\u5B8C\u6574\u8BCA\u65AD\u5217","link":"#\u8F93\u51FA\u5B8C\u6574\u8BCA\u65AD\u5217","children":[]},{"level":3,"title":"\u9650\u5236\u8F93\u51FA\u884C\u6570","slug":"\u9650\u5236\u8F93\u51FA\u884C\u6570","link":"#\u9650\u5236\u8F93\u51FA\u884C\u6570","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/classloader-metaspace.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/classloader-metaspace.html.53200b46.js b/assets/classloader-metaspace.html.1d325e53.js similarity index 99% rename from assets/classloader-metaspace.html.53200b46.js rename to assets/classloader-metaspace.html.1d325e53.js index 36484ab31..3a5dce9f6 100644 --- a/assets/classloader-metaspace.html.53200b46.js +++ b/assets/classloader-metaspace.html.1d325e53.js @@ -1,4 +1,4 @@ -import{_ as e,o as a,c as s,d as t}from"./app.524ecf5c.js";const l={},d=t(`

classloader-metaspace

TIP

Show metaspace / class metadata statistics by ClassLoader instance.

classloader-metaspace uses the JFR jdk.ClassLoaderStatistics event to collect metaspace statistics for each ClassLoaderData, then maps those rows back to Arthas ClassLoader hash, type and display name.

Note: this command reports metaspace / class metadata memory. It does not report the retained size of all Java heap objects reachable from a ClassLoader.

classloader-metaspace depends on JFR. If the current JDK does not support JFR, the command is not registered.

Options

NameSpecification
[c:]ClassLoader hashcode, same format as classloader -c
[classLoaderClass:]Filter by full ClassLoader class name
[duration:]JFR sampling duration, 2500ms by default; supports ms, s, m; a plain number means milliseconds
[period:]jdk.ClassLoaderStatistics period, 500ms by default; supports ms, s, m
[limit:]Show only the first N rows after sorting by chunkSize descending
[verbose:]Show full diagnostic columns, including classLoaderData, hiddenBlockSize and type; -v is also supported

Output

The default terminal table prioritizes core columns for daily troubleshooting. With --verbose, full diagnostic columns are shown. Long text columns, type and name, are shown on the right and may be truncated or hidden when the terminal is narrow.

FieldSpecification
hashArthas ClassLoader hash
classesJFR classCount, the number of loaded classes
chunkSizeTotal allocated metaspace chunk size for the ClassLoaderData
blockSizeTotal used metaspace block size
nameDisplay name. The command tries JFR name first, then falls back to toString()

--verbose also shows:

FieldSpecification
classLoaderDataHotSpot ClassLoaderData pointer
hiddenBlockSizeTotal metaspace block size used by hidden classes; on JDK 11 this is read from the JFR anonymousBlockSize field
typeClassLoader class name

Usage

Show all ClassLoader metaspace statistics

$ classloader-metaspace
+import{_ as e,o as a,c as s,d as t}from"./app.e2427bec.js";const l={},d=t(`

classloader-metaspace

TIP

Show metaspace / class metadata statistics by ClassLoader instance.

classloader-metaspace uses the JFR jdk.ClassLoaderStatistics event to collect metaspace statistics for each ClassLoaderData, then maps those rows back to Arthas ClassLoader hash, type and display name.

Note: this command reports metaspace / class metadata memory. It does not report the retained size of all Java heap objects reachable from a ClassLoader.

classloader-metaspace depends on JFR. If the current JDK does not support JFR, the command is not registered.

Options

NameSpecification
[c:]ClassLoader hashcode, same format as classloader -c
[classLoaderClass:]Filter by full ClassLoader class name
[duration:]JFR sampling duration, 2500ms by default; supports ms, s, m; a plain number means milliseconds
[period:]jdk.ClassLoaderStatistics period, 500ms by default; supports ms, s, m
[limit:]Show only the first N rows after sorting by chunkSize descending
[verbose:]Show full diagnostic columns, including classLoaderData, hiddenBlockSize and type; -v is also supported

Output

The default terminal table prioritizes core columns for daily troubleshooting. With --verbose, full diagnostic columns are shown. Long text columns, type and name, are shown on the right and may be truncated or hidden when the terminal is narrow.

FieldSpecification
hashArthas ClassLoader hash
classesJFR classCount, the number of loaded classes
chunkSizeTotal allocated metaspace chunk size for the ClassLoaderData
blockSizeTotal used metaspace block size
nameDisplay name. The command tries JFR name first, then falls back to toString()

--verbose also shows:

FieldSpecification
classLoaderDataHotSpot ClassLoaderData pointer
hiddenBlockSizeTotal metaspace block size used by hidden classes; on JDK 11 this is read from the JFR anonymousBlockSize field
typeClassLoader class name

Usage

Show all ClassLoader metaspace statistics

$ classloader-metaspace
  hash      classes  chunkSize  blockSize  name
  68b31f0a  2115     1048576    823296     com.taobao.arthas.agent.ArthasClassloader@68b31f0a
  null      1861     524288     410624     BootstrapClassLoader
diff --git a/assets/classloader-metaspace.html.2959f628.js b/assets/classloader-metaspace.html.249e56bc.js
similarity index 99%
rename from assets/classloader-metaspace.html.2959f628.js
rename to assets/classloader-metaspace.html.249e56bc.js
index 5e9015e6c..d1c3a3cd2 100644
--- a/assets/classloader-metaspace.html.2959f628.js
+++ b/assets/classloader-metaspace.html.249e56bc.js
@@ -1,4 +1,4 @@
-import{_ as e,o as a,c as s,d as t}from"./app.524ecf5c.js";const d={},l=t(`

classloader-metaspace

\u63D0\u793A

\u6309 ClassLoader \u5B9E\u4F8B\u7EDF\u8BA1 metaspace / class metadata \u76F8\u5173\u5185\u5B58\u3002

classloader-metaspace \u4F7F\u7528 JFR \u7684 jdk.ClassLoaderStatistics \u4E8B\u4EF6\u91C7\u96C6\u6BCF\u4E2A ClassLoaderData \u7684 metaspace \u7EDF\u8BA1\u4FE1\u606F\uFF0C\u5E76\u628A\u8FD9\u4E9B\u7EDF\u8BA1\u4FE1\u606F\u6620\u5C04\u56DE Arthas \u53EF\u8BC6\u522B\u7684 ClassLoader hash\u3001\u7C7B\u578B\u548C\u663E\u793A\u540D\u3002

\u6CE8\u610F\uFF1A\u8FD9\u4E2A\u547D\u4EE4\u7EDF\u8BA1\u7684\u662F metaspace / class metadata \u76F8\u5173\u5185\u5B58\uFF0C\u4E0D\u662F\u4ECE ClassLoader \u53EF\u8FBE\u7684\u6240\u6709 Java heap \u5BF9\u8C61\u7684 retained size\u3002

classloader-metaspace \u4F9D\u8D56 JFR\u3002JDK \u4E0D\u652F\u6301 JFR \u65F6\u4E0D\u4F1A\u6CE8\u518C\u8BE5\u547D\u4EE4\u3002

\u53C2\u6570\u8BF4\u660E

\u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
[c:]ClassLoader \u7684 hashcode\uFF0C\u683C\u5F0F\u548C classloader -c \u4E00\u81F4
[classLoaderClass:]\u6309 ClassLoader \u5B8C\u6574\u7C7B\u540D\u8FC7\u6EE4
[duration:]JFR \u91C7\u6837\u65F6\u957F\uFF0C\u9ED8\u8BA4 2500ms\uFF0C\u652F\u6301 ms\u3001s\u3001m\uFF0C\u88F8\u6570\u5B57\u6309\u6BEB\u79D2\u5904\u7406
[period:]jdk.ClassLoaderStatistics \u91C7\u6837\u5468\u671F\uFF0C\u9ED8\u8BA4 500ms\uFF0C\u652F\u6301 ms\u3001s\u3001m
[limit:]\u53EA\u8F93\u51FA\u6309 chunkSize \u964D\u5E8F\u6392\u5E8F\u540E\u7684\u524D N \u884C
[verbose:]\u8F93\u51FA\u5B8C\u6574\u8BCA\u65AD\u5217\uFF0C\u5305\u62EC classLoaderData\u3001hiddenBlockSize \u548C type\uFF1B\u4E5F\u53EF\u4F7F\u7528 -v

\u8F93\u51FA\u5B57\u6BB5

\u9ED8\u8BA4\u7EC8\u7AEF\u8868\u683C\u4F18\u5148\u5C55\u793A\u65E5\u5E38\u6392\u67E5\u9700\u8981\u7684\u6838\u5FC3\u5217\u3002\u4F7F\u7528 --verbose \u65F6\u4F1A\u8F93\u51FA\u5B8C\u6574\u8BCA\u65AD\u5217\uFF0Ctype \u548C name \u8FD9\u7C7B\u957F\u6587\u672C\u5217\u653E\u5728\u53F3\u4FA7\uFF1B\u5982\u679C\u7EC8\u7AEF\u5BBD\u5EA6\u4E0D\u8DB3\uFF0C\u957F\u6587\u672C\u5217\u53EF\u80FD\u88AB\u622A\u65AD\u6216\u9690\u85CF\u3002

\u5B57\u6BB5\u8BF4\u660E
hashArthas ClassLoader hash
classesJFR classCount\uFF0C\u5DF2\u52A0\u8F7D\u7C7B\u6570\u91CF
chunkSize\u8BE5 ClassLoaderData \u5DF2\u5206\u914D\u7684 metaspace chunk \u603B\u5927\u5C0F
blockSize\u5DF2\u4F7F\u7528\u7684 metaspace block \u603B\u5927\u5C0F
name\u663E\u793A\u540D\uFF0C\u4F18\u5148\u4F7F\u7528 JFR name\uFF0C\u5931\u8D25\u65F6\u56DE\u9000\u5230 toString()

--verbose \u989D\u5916\u8F93\u51FA\uFF1A

\u5B57\u6BB5\u8BF4\u660E
classLoaderDataHotSpot \u5185\u90E8 ClassLoaderData \u6307\u9488
hiddenBlockSizehidden class \u4F7F\u7528\u7684 metaspace block \u603B\u5927\u5C0F\uFF1B\u5728 JDK 11 \u4E0A\u517C\u5BB9\u8BFB\u53D6 JFR \u7684 anonymousBlockSize
typeClassLoader \u7C7B\u540D

\u4F7F\u7528\u53C2\u8003

\u67E5\u770B\u6240\u6709 ClassLoader metaspace \u7EDF\u8BA1

$ classloader-metaspace
+import{_ as e,o as a,c as s,d as t}from"./app.e2427bec.js";const d={},l=t(`

classloader-metaspace

\u63D0\u793A

\u6309 ClassLoader \u5B9E\u4F8B\u7EDF\u8BA1 metaspace / class metadata \u76F8\u5173\u5185\u5B58\u3002

classloader-metaspace \u4F7F\u7528 JFR \u7684 jdk.ClassLoaderStatistics \u4E8B\u4EF6\u91C7\u96C6\u6BCF\u4E2A ClassLoaderData \u7684 metaspace \u7EDF\u8BA1\u4FE1\u606F\uFF0C\u5E76\u628A\u8FD9\u4E9B\u7EDF\u8BA1\u4FE1\u606F\u6620\u5C04\u56DE Arthas \u53EF\u8BC6\u522B\u7684 ClassLoader hash\u3001\u7C7B\u578B\u548C\u663E\u793A\u540D\u3002

\u6CE8\u610F\uFF1A\u8FD9\u4E2A\u547D\u4EE4\u7EDF\u8BA1\u7684\u662F metaspace / class metadata \u76F8\u5173\u5185\u5B58\uFF0C\u4E0D\u662F\u4ECE ClassLoader \u53EF\u8FBE\u7684\u6240\u6709 Java heap \u5BF9\u8C61\u7684 retained size\u3002

classloader-metaspace \u4F9D\u8D56 JFR\u3002JDK \u4E0D\u652F\u6301 JFR \u65F6\u4E0D\u4F1A\u6CE8\u518C\u8BE5\u547D\u4EE4\u3002

\u53C2\u6570\u8BF4\u660E

\u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
[c:]ClassLoader \u7684 hashcode\uFF0C\u683C\u5F0F\u548C classloader -c \u4E00\u81F4
[classLoaderClass:]\u6309 ClassLoader \u5B8C\u6574\u7C7B\u540D\u8FC7\u6EE4
[duration:]JFR \u91C7\u6837\u65F6\u957F\uFF0C\u9ED8\u8BA4 2500ms\uFF0C\u652F\u6301 ms\u3001s\u3001m\uFF0C\u88F8\u6570\u5B57\u6309\u6BEB\u79D2\u5904\u7406
[period:]jdk.ClassLoaderStatistics \u91C7\u6837\u5468\u671F\uFF0C\u9ED8\u8BA4 500ms\uFF0C\u652F\u6301 ms\u3001s\u3001m
[limit:]\u53EA\u8F93\u51FA\u6309 chunkSize \u964D\u5E8F\u6392\u5E8F\u540E\u7684\u524D N \u884C
[verbose:]\u8F93\u51FA\u5B8C\u6574\u8BCA\u65AD\u5217\uFF0C\u5305\u62EC classLoaderData\u3001hiddenBlockSize \u548C type\uFF1B\u4E5F\u53EF\u4F7F\u7528 -v

\u8F93\u51FA\u5B57\u6BB5

\u9ED8\u8BA4\u7EC8\u7AEF\u8868\u683C\u4F18\u5148\u5C55\u793A\u65E5\u5E38\u6392\u67E5\u9700\u8981\u7684\u6838\u5FC3\u5217\u3002\u4F7F\u7528 --verbose \u65F6\u4F1A\u8F93\u51FA\u5B8C\u6574\u8BCA\u65AD\u5217\uFF0Ctype \u548C name \u8FD9\u7C7B\u957F\u6587\u672C\u5217\u653E\u5728\u53F3\u4FA7\uFF1B\u5982\u679C\u7EC8\u7AEF\u5BBD\u5EA6\u4E0D\u8DB3\uFF0C\u957F\u6587\u672C\u5217\u53EF\u80FD\u88AB\u622A\u65AD\u6216\u9690\u85CF\u3002

\u5B57\u6BB5\u8BF4\u660E
hashArthas ClassLoader hash
classesJFR classCount\uFF0C\u5DF2\u52A0\u8F7D\u7C7B\u6570\u91CF
chunkSize\u8BE5 ClassLoaderData \u5DF2\u5206\u914D\u7684 metaspace chunk \u603B\u5927\u5C0F
blockSize\u5DF2\u4F7F\u7528\u7684 metaspace block \u603B\u5927\u5C0F
name\u663E\u793A\u540D\uFF0C\u4F18\u5148\u4F7F\u7528 JFR name\uFF0C\u5931\u8D25\u65F6\u56DE\u9000\u5230 toString()

--verbose \u989D\u5916\u8F93\u51FA\uFF1A

\u5B57\u6BB5\u8BF4\u660E
classLoaderDataHotSpot \u5185\u90E8 ClassLoaderData \u6307\u9488
hiddenBlockSizehidden class \u4F7F\u7528\u7684 metaspace block \u603B\u5927\u5C0F\uFF1B\u5728 JDK 11 \u4E0A\u517C\u5BB9\u8BFB\u53D6 JFR \u7684 anonymousBlockSize
typeClassLoader \u7C7B\u540D

\u4F7F\u7528\u53C2\u8003

\u67E5\u770B\u6240\u6709 ClassLoader metaspace \u7EDF\u8BA1

$ classloader-metaspace
  hash      classes  chunkSize  blockSize  name
  68b31f0a  2115     1048576    823296     com.taobao.arthas.agent.ArthasClassloader@68b31f0a
  null      1861     524288     410624     BootstrapClassLoader
diff --git a/assets/classloader-metaspace.html.2c85daa1.js b/assets/classloader-metaspace.html.466bb431.js
similarity index 92%
rename from assets/classloader-metaspace.html.2c85daa1.js
rename to assets/classloader-metaspace.html.466bb431.js
index dc5c0061e..d5e279fe6 100644
--- a/assets/classloader-metaspace.html.2c85daa1.js
+++ b/assets/classloader-metaspace.html.466bb431.js
@@ -1 +1 @@
-const l=JSON.parse('{"key":"v-6e8ffb5e","path":"/en/doc/classloader-metaspace.html","title":"classloader-metaspace","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Options","slug":"options","link":"#options","children":[]},{"level":2,"title":"Output","slug":"output","link":"#output","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"Show all ClassLoader metaspace statistics","slug":"show-all-classloader-metaspace-statistics","link":"#show-all-classloader-metaspace-statistics","children":[]},{"level":3,"title":"Filter by ClassLoader type","slug":"filter-by-classloader-type","link":"#filter-by-classloader-type","children":[]},{"level":3,"title":"Show full diagnostic columns","slug":"show-full-diagnostic-columns","link":"#show-full-diagnostic-columns","children":[]},{"level":3,"title":"Limit output rows","slug":"limit-output-rows","link":"#limit-output-rows","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/classloader-metaspace.md","version":"4.3.3"}');export{l as data};
+const l=JSON.parse('{"key":"v-6e8ffb5e","path":"/en/doc/classloader-metaspace.html","title":"classloader-metaspace","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Options","slug":"options","link":"#options","children":[]},{"level":2,"title":"Output","slug":"output","link":"#output","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"Show all ClassLoader metaspace statistics","slug":"show-all-classloader-metaspace-statistics","link":"#show-all-classloader-metaspace-statistics","children":[]},{"level":3,"title":"Filter by ClassLoader type","slug":"filter-by-classloader-type","link":"#filter-by-classloader-type","children":[]},{"level":3,"title":"Show full diagnostic columns","slug":"show-full-diagnostic-columns","link":"#show-full-diagnostic-columns","children":[]},{"level":3,"title":"Limit output rows","slug":"limit-output-rows","link":"#limit-output-rows","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/classloader-metaspace.md","version":"4.3.5"}');export{l as data};
diff --git a/assets/classloader.html.fe574e27.js b/assets/classloader.html.0346e215.js
similarity index 78%
rename from assets/classloader.html.fe574e27.js
rename to assets/classloader.html.0346e215.js
index 13e942a46..a53431fb6 100644
--- a/assets/classloader.html.fe574e27.js
+++ b/assets/classloader.html.0346e215.js
@@ -1,4 +1,4 @@
-import{_ as n,o as l,c as t,a,b as i,e as s,d as r,r as d}from"./app.524ecf5c.js";const c={},o=a("h1",{id:"classloader",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#classloader","aria-hidden":"true"},"#"),s(" classloader")],-1),u={href:"https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=command-classloader",target:"_blank",rel:"noopener noreferrer"},p=a("code",null,"classloader",-1),h=s(" online tutorial"),m=r(`

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

NameSpecification
[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

--url-classes options

NameSpecification
--url-classesShow relationship between loaded classes and codeSource(URL/jar) in a specific ClassLoader
-d, --detailsDetails mode: list class names for each URL/jar (use -n/--limit to control output)
--jar <kw>Filter jar(URL) by keyword (contains match by default)
--class <kw>Filter classes by keyword/package (contains match by default)
-E, --regexTreat --jar/--class as regular expression (keyword match by default)
-n, --limit <N>In details mode, show at most N classes per URL/jar (100 by default)

Usage

View statistics categorized by class type

$ classloader
+import{_ as a,o as s,c as e,d as n}from"./app.e2427bec.js";const l={},t=n(`

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

NameSpecification
[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

--url-classes options

NameSpecification
--url-classesShow relationship between loaded classes and codeSource(URL/jar) in a specific ClassLoader
-d, --detailsDetails mode: list class names for each URL/jar (use -n/--limit to control output)
--jar <kw>Filter jar(URL) by keyword (contains match by default)
--class <kw>Filter classes by keyword/package (contains match by default)
-E, --regexTreat --jar/--class as regular expression (keyword match by default)
-n, --limit <N>In details mode, show at most N classes per URL/jar (100 by default)

Usage

View statistics categorized by class type

$ classloader
  name                                       numberOfInstances  loadedCountTotal
  com.taobao.arthas.agent.ArthasClassloader  1                  2115
  BootstrapClassLoader                       1                  1861
@@ -92,4 +92,4 @@ sun.misc.Launcher$AppClassLoader@3d4eac69, h
 Affect(row-cnt:2) cost in 3 ms.
 

Filter by jar name keyword and show details (list class names):

$ classloader -c 3d4eac69 --url-classes -d --jar math-game
 

Filter further by package/keyword (will also output matchedClassCount for statistics):

$ classloader -c 3d4eac69 --url-classes --jar spring-core --class org.springframework
-
`,34);function v(b,g){const e=d("ExternalLinkIcon");return l(),t("div",null,[o,a("p",null,[a("a",u,[p,h,i(e)])]),m])}const k=n(c,[["render",v],["__file","classloader.html.vue"]]);export{k as default}; +
`,35),i=[t];function r(d,c){return s(),e("div",null,i)}const u=a(l,[["render",r],["__file","classloader.html.vue"]]);export{u as default}; diff --git a/assets/classloader.html.885df726.js b/assets/classloader.html.1dbda3bd.js similarity index 75% rename from assets/classloader.html.885df726.js rename to assets/classloader.html.1dbda3bd.js index 34cae563f..50f5e5476 100644 --- a/assets/classloader.html.885df726.js +++ b/assets/classloader.html.1dbda3bd.js @@ -1,4 +1,4 @@ -import{_ as n,o as l,c as r,a,b as i,e as s,d as t,r as d}from"./app.524ecf5c.js";const c={},o=a("h1",{id:"classloader",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#classloader","aria-hidden":"true"},"#"),s(" classloader")],-1),u={href:"https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=command-classloader",target:"_blank",rel:"noopener noreferrer"},p=a("code",null,"classloader",-1),v=s("\u5728\u7EBF\u6559\u7A0B"),m=t(`

\u63D0\u793A

\u67E5\u770B classloader \u7684\u7EE7\u627F\u6811\uFF0Curls\uFF0C\u7C7B\u52A0\u8F7D\u4FE1\u606F

classloader \u547D\u4EE4\u5C06 JVM \u4E2D\u6240\u6709\u7684 classloader \u7684\u4FE1\u606F\u7EDF\u8BA1\u51FA\u6765\uFF0C\u5E76\u53EF\u4EE5\u5C55\u793A\u7EE7\u627F\u6811\uFF0Curls \u7B49\u3002

\u53EF\u4EE5\u8BA9\u6307\u5B9A\u7684 classloader \u53BB getResources\uFF0C\u6253\u5370\u51FA\u6240\u6709\u67E5\u627E\u5230\u7684 resources \u7684 url\u3002\u5BF9\u4E8EResourceNotFoundException\u6BD4\u8F83\u6709\u7528\u3002

\u53C2\u6570\u8BF4\u660E

\u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
[l]\u6309\u7C7B\u52A0\u8F7D\u5B9E\u4F8B\u8FDB\u884C\u7EDF\u8BA1
[t]\u6253\u5370\u6240\u6709 ClassLoader \u7684\u7EE7\u627F\u6811
[a]\u5217\u51FA\u6240\u6709 ClassLoader \u52A0\u8F7D\u7684\u7C7B\uFF0C\u8BF7\u8C28\u614E\u4F7F\u7528
[c:]ClassLoader \u7684 hashcode
[classLoaderClass:]\u6307\u5B9A\u6267\u884C\u8868\u8FBE\u5F0F\u7684 ClassLoader \u7684 class name
[c: r:]\u7528 ClassLoader \u53BB\u67E5\u627E resource
[c: load:]\u7528 ClassLoader \u53BB\u52A0\u8F7D\u6307\u5B9A\u7684\u7C7B

--url-classes \u53C2\u6570\u8BF4\u660E

\u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
--url-classes\u7EDF\u8BA1\u6307\u5B9A ClassLoader \u4E2D\uFF0C\u5DF2\u52A0\u8F7D\u7C7B\u4E0E codeSource(URL/jar) \u7684\u5173\u7CFB
-d, --details\u8BE6\u60C5\u6A21\u5F0F\uFF1A\u5217\u51FA\u6BCF\u4E2A URL/jar \u52A0\u8F7D\u7684\u7C7B\u540D\uFF08\u5EFA\u8BAE\u914D\u5408 -n/--limit \u63A7\u5236\u8F93\u51FA\u91CF\uFF09
--jar <kw>\u6309 jar \u5305\u540D/URL \u5173\u952E\u5B57\u8FC7\u6EE4\uFF08\u9ED8\u8BA4\u5305\u542B\u5339\u914D\uFF09
--class <kw>\u6309\u7C7B\u540D/\u5305\u540D\u5173\u952E\u5B57\u8FC7\u6EE4\uFF08\u9ED8\u8BA4\u5305\u542B\u5339\u914D\uFF09
-E, --regex--jar/--class \u4F7F\u7528\u6B63\u5219\u5339\u914D\uFF08\u9ED8\u8BA4\u5173\u952E\u5B57\u5305\u542B\u5339\u914D\uFF09
-n, --limit <N>\u8BE6\u60C5\u6A21\u5F0F\u4E0B\uFF0C\u6BCF\u4E2A URL/jar \u6700\u591A\u5C55\u793A N \u4E2A\u7C7B\uFF08100 \u9ED8\u8BA4\uFF09

\u4F7F\u7528\u53C2\u8003

\u6309\u7C7B\u52A0\u8F7D\u7C7B\u578B\u67E5\u770B\u7EDF\u8BA1\u4FE1\u606F

$ classloader
+import{_ as a,o as s,c as e,d as n}from"./app.e2427bec.js";const l={},r=n(`

classloader

\u63D0\u793A

\u67E5\u770B classloader \u7684\u7EE7\u627F\u6811\uFF0Curls\uFF0C\u7C7B\u52A0\u8F7D\u4FE1\u606F

classloader \u547D\u4EE4\u5C06 JVM \u4E2D\u6240\u6709\u7684 classloader \u7684\u4FE1\u606F\u7EDF\u8BA1\u51FA\u6765\uFF0C\u5E76\u53EF\u4EE5\u5C55\u793A\u7EE7\u627F\u6811\uFF0Curls \u7B49\u3002

\u53EF\u4EE5\u8BA9\u6307\u5B9A\u7684 classloader \u53BB getResources\uFF0C\u6253\u5370\u51FA\u6240\u6709\u67E5\u627E\u5230\u7684 resources \u7684 url\u3002\u5BF9\u4E8EResourceNotFoundException\u6BD4\u8F83\u6709\u7528\u3002

\u53C2\u6570\u8BF4\u660E

\u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
[l]\u6309\u7C7B\u52A0\u8F7D\u5B9E\u4F8B\u8FDB\u884C\u7EDF\u8BA1
[t]\u6253\u5370\u6240\u6709 ClassLoader \u7684\u7EE7\u627F\u6811
[a]\u5217\u51FA\u6240\u6709 ClassLoader \u52A0\u8F7D\u7684\u7C7B\uFF0C\u8BF7\u8C28\u614E\u4F7F\u7528
[c:]ClassLoader \u7684 hashcode
[classLoaderClass:]\u6307\u5B9A\u6267\u884C\u8868\u8FBE\u5F0F\u7684 ClassLoader \u7684 class name
[c: r:]\u7528 ClassLoader \u53BB\u67E5\u627E resource
[c: load:]\u7528 ClassLoader \u53BB\u52A0\u8F7D\u6307\u5B9A\u7684\u7C7B

--url-classes \u53C2\u6570\u8BF4\u660E

\u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
--url-classes\u7EDF\u8BA1\u6307\u5B9A ClassLoader \u4E2D\uFF0C\u5DF2\u52A0\u8F7D\u7C7B\u4E0E codeSource(URL/jar) \u7684\u5173\u7CFB
-d, --details\u8BE6\u60C5\u6A21\u5F0F\uFF1A\u5217\u51FA\u6BCF\u4E2A URL/jar \u52A0\u8F7D\u7684\u7C7B\u540D\uFF08\u5EFA\u8BAE\u914D\u5408 -n/--limit \u63A7\u5236\u8F93\u51FA\u91CF\uFF09
--jar <kw>\u6309 jar \u5305\u540D/URL \u5173\u952E\u5B57\u8FC7\u6EE4\uFF08\u9ED8\u8BA4\u5305\u542B\u5339\u914D\uFF09
--class <kw>\u6309\u7C7B\u540D/\u5305\u540D\u5173\u952E\u5B57\u8FC7\u6EE4\uFF08\u9ED8\u8BA4\u5305\u542B\u5339\u914D\uFF09
-E, --regex--jar/--class \u4F7F\u7528\u6B63\u5219\u5339\u914D\uFF08\u9ED8\u8BA4\u5173\u952E\u5B57\u5305\u542B\u5339\u914D\uFF09
-n, --limit <N>\u8BE6\u60C5\u6A21\u5F0F\u4E0B\uFF0C\u6BCF\u4E2A URL/jar \u6700\u591A\u5C55\u793A N \u4E2A\u7C7B\uFF08100 \u9ED8\u8BA4\uFF09

\u4F7F\u7528\u53C2\u8003

\u6309\u7C7B\u52A0\u8F7D\u7C7B\u578B\u67E5\u770B\u7EDF\u8BA1\u4FE1\u606F

$ classloader
  name                                       numberOfInstances  loadedCountTotal
  com.taobao.arthas.agent.ArthasClassloader  1                  2115
  BootstrapClassLoader                       1                  1861
@@ -92,4 +92,4 @@ sun.misc.Launcher$AppClassLoader@3d4eac69, h
 Affect(row-cnt:2) cost in 3 ms.
 

\u6309 jar \u5305\u540D\u5173\u952E\u5B57\u8FC7\u6EE4\u5E76\u67E5\u770B\u8BE6\u60C5\uFF08\u5217\u51FA\u7C7B\u540D\uFF09\uFF1A

$ classloader -c 3d4eac69 --url-classes -d --jar math-game
 

\u8FDB\u4E00\u6B65\u6309\u5305\u540D/\u5173\u952E\u5B57\u8FC7\u6EE4\uFF08\u540C\u65F6\u4F1A\u8F93\u51FA matchedClassCount \u4FBF\u4E8E\u7EDF\u8BA1\uFF09\uFF1A

$ classloader -c 3d4eac69 --url-classes --jar spring-core --class org.springframework
-
`,35);function b(h,g){const e=d("ExternalLinkIcon");return l(),r("div",null,[o,a("p",null,[a("a",u,[p,v,i(e)])]),m])}const f=n(c,[["render",b],["__file","classloader.html.vue"]]);export{f as default}; +
`,36),i=[r];function t(d,c){return s(),e("div",null,i)}const u=a(l,[["render",t],["__file","classloader.html.vue"]]);export{u as default}; diff --git a/assets/classloader.html.f7c01982.js b/assets/classloader.html.3876b1e0.js similarity index 95% rename from assets/classloader.html.f7c01982.js rename to assets/classloader.html.3876b1e0.js index d775f787e..0dc82ad67 100644 --- a/assets/classloader.html.f7c01982.js +++ b/assets/classloader.html.3876b1e0.js @@ -1 +1 @@ -const l=JSON.parse('{"key":"v-49b1709e","path":"/doc/classloader.html","title":"classloader","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[{"level":3,"title":"--url-classes \u53C2\u6570\u8BF4\u660E","slug":"url-classes-\u53C2\u6570\u8BF4\u660E","link":"#url-classes-\u53C2\u6570\u8BF4\u660E","children":[]}]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"\u6309\u7C7B\u52A0\u8F7D\u7C7B\u578B\u67E5\u770B\u7EDF\u8BA1\u4FE1\u606F","slug":"\u6309\u7C7B\u52A0\u8F7D\u7C7B\u578B\u67E5\u770B\u7EDF\u8BA1\u4FE1\u606F","link":"#\u6309\u7C7B\u52A0\u8F7D\u7C7B\u578B\u67E5\u770B\u7EDF\u8BA1\u4FE1\u606F","children":[]},{"level":3,"title":"\u6309\u7C7B\u52A0\u8F7D\u5B9E\u4F8B\u67E5\u770B\u7EDF\u8BA1\u4FE1\u606F","slug":"\u6309\u7C7B\u52A0\u8F7D\u5B9E\u4F8B\u67E5\u770B\u7EDF\u8BA1\u4FE1\u606F","link":"#\u6309\u7C7B\u52A0\u8F7D\u5B9E\u4F8B\u67E5\u770B\u7EDF\u8BA1\u4FE1\u606F","children":[]},{"level":3,"title":"\u67E5\u770B ClassLoader \u7684\u7EE7\u627F\u6811","slug":"\u67E5\u770B-classloader-\u7684\u7EE7\u627F\u6811","link":"#\u67E5\u770B-classloader-\u7684\u7EE7\u627F\u6811","children":[]},{"level":3,"title":"\u67E5\u770B URLClassLoader \u5B9E\u9645\u7684 urls","slug":"\u67E5\u770B-urlclassloader-\u5B9E\u9645\u7684-urls","link":"#\u67E5\u770B-urlclassloader-\u5B9E\u9645\u7684-urls","children":[]},{"level":3,"title":"\u4F7F\u7528 ClassLoader \u53BB\u67E5\u627E resource","slug":"\u4F7F\u7528-classloader-\u53BB\u67E5\u627E-resource","link":"#\u4F7F\u7528-classloader-\u53BB\u67E5\u627E-resource","children":[]},{"level":3,"title":"\u4F7F\u7528 ClassLoader \u53BB\u52A0\u8F7D\u7C7B","slug":"\u4F7F\u7528-classloader-\u53BB\u52A0\u8F7D\u7C7B","link":"#\u4F7F\u7528-classloader-\u53BB\u52A0\u8F7D\u7C7B","children":[]},{"level":3,"title":"\u7EDF\u8BA1 ClassLoader \u5B9E\u9645\u4F7F\u7528 URL \u548C\u672A\u4F7F\u7528\u7684 URL","slug":"\u7EDF\u8BA1-classloader-\u5B9E\u9645\u4F7F\u7528-url-\u548C\u672A\u4F7F\u7528\u7684-url","link":"#\u7EDF\u8BA1-classloader-\u5B9E\u9645\u4F7F\u7528-url-\u548C\u672A\u4F7F\u7528\u7684-url","children":[]},{"level":3,"title":"\u67E5\u770B\u6307\u5B9A ClassLoader \u7684\u7C7B\u4E0E jar(URL) \u7684\u5173\u7CFB\u5217\u8868","slug":"\u67E5\u770B\u6307\u5B9A-classloader-\u7684\u7C7B\u4E0E-jar-url-\u7684\u5173\u7CFB\u5217\u8868","link":"#\u67E5\u770B\u6307\u5B9A-classloader-\u7684\u7C7B\u4E0E-jar-url-\u7684\u5173\u7CFB\u5217\u8868","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/classloader.md","version":"4.3.3"}');export{l as data}; +const l=JSON.parse('{"key":"v-49b1709e","path":"/doc/classloader.html","title":"classloader","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[{"level":3,"title":"--url-classes \u53C2\u6570\u8BF4\u660E","slug":"url-classes-\u53C2\u6570\u8BF4\u660E","link":"#url-classes-\u53C2\u6570\u8BF4\u660E","children":[]}]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"\u6309\u7C7B\u52A0\u8F7D\u7C7B\u578B\u67E5\u770B\u7EDF\u8BA1\u4FE1\u606F","slug":"\u6309\u7C7B\u52A0\u8F7D\u7C7B\u578B\u67E5\u770B\u7EDF\u8BA1\u4FE1\u606F","link":"#\u6309\u7C7B\u52A0\u8F7D\u7C7B\u578B\u67E5\u770B\u7EDF\u8BA1\u4FE1\u606F","children":[]},{"level":3,"title":"\u6309\u7C7B\u52A0\u8F7D\u5B9E\u4F8B\u67E5\u770B\u7EDF\u8BA1\u4FE1\u606F","slug":"\u6309\u7C7B\u52A0\u8F7D\u5B9E\u4F8B\u67E5\u770B\u7EDF\u8BA1\u4FE1\u606F","link":"#\u6309\u7C7B\u52A0\u8F7D\u5B9E\u4F8B\u67E5\u770B\u7EDF\u8BA1\u4FE1\u606F","children":[]},{"level":3,"title":"\u67E5\u770B ClassLoader \u7684\u7EE7\u627F\u6811","slug":"\u67E5\u770B-classloader-\u7684\u7EE7\u627F\u6811","link":"#\u67E5\u770B-classloader-\u7684\u7EE7\u627F\u6811","children":[]},{"level":3,"title":"\u67E5\u770B URLClassLoader \u5B9E\u9645\u7684 urls","slug":"\u67E5\u770B-urlclassloader-\u5B9E\u9645\u7684-urls","link":"#\u67E5\u770B-urlclassloader-\u5B9E\u9645\u7684-urls","children":[]},{"level":3,"title":"\u4F7F\u7528 ClassLoader \u53BB\u67E5\u627E resource","slug":"\u4F7F\u7528-classloader-\u53BB\u67E5\u627E-resource","link":"#\u4F7F\u7528-classloader-\u53BB\u67E5\u627E-resource","children":[]},{"level":3,"title":"\u4F7F\u7528 ClassLoader \u53BB\u52A0\u8F7D\u7C7B","slug":"\u4F7F\u7528-classloader-\u53BB\u52A0\u8F7D\u7C7B","link":"#\u4F7F\u7528-classloader-\u53BB\u52A0\u8F7D\u7C7B","children":[]},{"level":3,"title":"\u7EDF\u8BA1 ClassLoader \u5B9E\u9645\u4F7F\u7528 URL \u548C\u672A\u4F7F\u7528\u7684 URL","slug":"\u7EDF\u8BA1-classloader-\u5B9E\u9645\u4F7F\u7528-url-\u548C\u672A\u4F7F\u7528\u7684-url","link":"#\u7EDF\u8BA1-classloader-\u5B9E\u9645\u4F7F\u7528-url-\u548C\u672A\u4F7F\u7528\u7684-url","children":[]},{"level":3,"title":"\u67E5\u770B\u6307\u5B9A ClassLoader \u7684\u7C7B\u4E0E jar(URL) \u7684\u5173\u7CFB\u5217\u8868","slug":"\u67E5\u770B\u6307\u5B9A-classloader-\u7684\u7C7B\u4E0E-jar-url-\u7684\u5173\u7CFB\u5217\u8868","link":"#\u67E5\u770B\u6307\u5B9A-classloader-\u7684\u7C7B\u4E0E-jar-url-\u7684\u5173\u7CFB\u5217\u8868","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/classloader.md","version":"4.3.5"}');export{l as data}; diff --git a/assets/classloader.html.af884720.js b/assets/classloader.html.3c2e72a7.js similarity index 93% rename from assets/classloader.html.af884720.js rename to assets/classloader.html.3c2e72a7.js index d8970d9fc..d1522e7e9 100644 --- a/assets/classloader.html.af884720.js +++ b/assets/classloader.html.3c2e72a7.js @@ -1 +1 @@ -const s=JSON.parse('{"key":"v-fc1b9a9c","path":"/en/doc/classloader.html","title":"classloader","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Options","slug":"options","link":"#options","children":[{"level":3,"title":"--url-classes options","slug":"url-classes-options","link":"#url-classes-options","children":[]}]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"View statistics categorized by class type","slug":"view-statistics-categorized-by-class-type","link":"#view-statistics-categorized-by-class-type","children":[]},{"level":3,"title":"View statistics categorized by loaded classes number","slug":"view-statistics-categorized-by-loaded-classes-number","link":"#view-statistics-categorized-by-loaded-classes-number","children":[]},{"level":3,"title":"View class-loaders hierarchy","slug":"view-class-loaders-hierarchy","link":"#view-class-loaders-hierarchy","children":[]},{"level":3,"title":"Show the URLs of the URLClassLoader","slug":"show-the-urls-of-the-urlclassloader","link":"#show-the-urls-of-the-urlclassloader","children":[]},{"level":3,"title":"Use the classloader to load resource","slug":"use-the-classloader-to-load-resource","link":"#use-the-classloader-to-load-resource","children":[]},{"level":3,"title":"Use the classloader to load class","slug":"use-the-classloader-to-load-class","link":"#use-the-classloader-to-load-class","children":[]},{"level":3,"title":"Statistics ClassLoader actually used URLs and unused URLs","slug":"statistics-classloader-actually-used-urls-and-unused-urls","link":"#statistics-classloader-actually-used-urls-and-unused-urls","children":[]},{"level":3,"title":"Show class-to-jar(URL) relationship for a specific ClassLoader","slug":"show-class-to-jar-url-relationship-for-a-specific-classloader","link":"#show-class-to-jar-url-relationship-for-a-specific-classloader","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/classloader.md","version":"4.3.3"}');export{s as data}; +const s=JSON.parse('{"key":"v-fc1b9a9c","path":"/en/doc/classloader.html","title":"classloader","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Options","slug":"options","link":"#options","children":[{"level":3,"title":"--url-classes options","slug":"url-classes-options","link":"#url-classes-options","children":[]}]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"View statistics categorized by class type","slug":"view-statistics-categorized-by-class-type","link":"#view-statistics-categorized-by-class-type","children":[]},{"level":3,"title":"View statistics categorized by loaded classes number","slug":"view-statistics-categorized-by-loaded-classes-number","link":"#view-statistics-categorized-by-loaded-classes-number","children":[]},{"level":3,"title":"View class-loaders hierarchy","slug":"view-class-loaders-hierarchy","link":"#view-class-loaders-hierarchy","children":[]},{"level":3,"title":"Show the URLs of the URLClassLoader","slug":"show-the-urls-of-the-urlclassloader","link":"#show-the-urls-of-the-urlclassloader","children":[]},{"level":3,"title":"Use the classloader to load resource","slug":"use-the-classloader-to-load-resource","link":"#use-the-classloader-to-load-resource","children":[]},{"level":3,"title":"Use the classloader to load class","slug":"use-the-classloader-to-load-class","link":"#use-the-classloader-to-load-class","children":[]},{"level":3,"title":"Statistics ClassLoader actually used URLs and unused URLs","slug":"statistics-classloader-actually-used-urls-and-unused-urls","link":"#statistics-classloader-actually-used-urls-and-unused-urls","children":[]},{"level":3,"title":"Show class-to-jar(URL) relationship for a specific ClassLoader","slug":"show-class-to-jar-url-relationship-for-a-specific-classloader","link":"#show-class-to-jar-url-relationship-for-a-specific-classloader","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/classloader.md","version":"4.3.5"}');export{s as data}; diff --git a/assets/cls.html.454065a9.js b/assets/cls.html.14369b3c.js similarity index 90% rename from assets/cls.html.454065a9.js rename to assets/cls.html.14369b3c.js index f68e10ee0..547e36d7c 100644 --- a/assets/cls.html.454065a9.js +++ b/assets/cls.html.14369b3c.js @@ -1 +1 @@ -import{_ as e,o as t,c,a as s,e as o}from"./app.524ecf5c.js";const n={},a=s("h1",{id:"cls",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#cls","aria-hidden":"true"},"#"),o(" cls")],-1),l=s("p",null,"\u6E05\u7A7A\u5F53\u524D\u5C4F\u5E55\u533A\u57DF\u3002",-1),r=s("div",{class:"custom-container tip"},[s("p",{class:"custom-container-title"},"\u63D0\u793A"),s("p",null,`\u975E\u7EC8\u7AEF\u6A21\u5F0F\u4E0B\u4F7F\u7528 cls \u6307\u4EE4\uFF0C\u4F1A\u63D0\u793A"Command 'cls' is only support tty session."\u3002`)],-1),i=[a,l,r];function _(d,h){return t(),c("div",null,i)}const m=e(n,[["render",_],["__file","cls.html.vue"]]);export{m as default}; +import{_ as e,o as t,c,a as s,e as o}from"./app.e2427bec.js";const n={},a=s("h1",{id:"cls",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#cls","aria-hidden":"true"},"#"),o(" cls")],-1),l=s("p",null,"\u6E05\u7A7A\u5F53\u524D\u5C4F\u5E55\u533A\u57DF\u3002",-1),r=s("div",{class:"custom-container tip"},[s("p",{class:"custom-container-title"},"\u63D0\u793A"),s("p",null,`\u975E\u7EC8\u7AEF\u6A21\u5F0F\u4E0B\u4F7F\u7528 cls \u6307\u4EE4\uFF0C\u4F1A\u63D0\u793A"Command 'cls' is only support tty session."\u3002`)],-1),i=[a,l,r];function _(d,h){return t(),c("div",null,i)}const m=e(n,[["render",_],["__file","cls.html.vue"]]);export{m as default}; diff --git a/assets/cls.html.c9aa0c61.js b/assets/cls.html.60c40d73.js similarity index 60% rename from assets/cls.html.c9aa0c61.js rename to assets/cls.html.60c40d73.js index 5e04186ab..7d20ce381 100644 --- a/assets/cls.html.c9aa0c61.js +++ b/assets/cls.html.60c40d73.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-ad1b2b42","path":"/doc/cls.html","title":"cls","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/cls.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-ad1b2b42","path":"/doc/cls.html","title":"cls","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/cls.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/cls.html.73fb0901.js b/assets/cls.html.77bb73a5.js similarity index 88% rename from assets/cls.html.73fb0901.js rename to assets/cls.html.77bb73a5.js index ef8ad1f52..e91d69e4e 100644 --- a/assets/cls.html.73fb0901.js +++ b/assets/cls.html.77bb73a5.js @@ -1 +1 @@ -import{_ as t,o as s,c,a as e,e as o}from"./app.524ecf5c.js";const n={},a=e("h1",{id:"cls",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#cls","aria-hidden":"true"},"#"),o(" cls")],-1),l=e("p",null,"clear current console.",-1),r=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"TIP"),e("p",null,`if not in tty mode,it will warn "Command 'cls' is only support tty session.".`)],-1),i=[a,l,r];function _(d,h){return s(),c("div",null,i)}const m=t(n,[["render",_],["__file","cls.html.vue"]]);export{m as default}; +import{_ as t,o as s,c,a as e,e as o}from"./app.e2427bec.js";const n={},a=e("h1",{id:"cls",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#cls","aria-hidden":"true"},"#"),o(" cls")],-1),l=e("p",null,"clear current console.",-1),r=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"TIP"),e("p",null,`if not in tty mode,it will warn "Command 'cls' is only support tty session.".`)],-1),i=[a,l,r];function _(d,h){return s(),c("div",null,i)}const m=t(n,[["render",_],["__file","cls.html.vue"]]);export{m as default}; diff --git a/assets/cls.html.fe97eb01.js b/assets/cls.html.8f3a5491.js similarity index 61% rename from assets/cls.html.fe97eb01.js rename to assets/cls.html.8f3a5491.js index 175394ff2..0abfc4f3d 100644 --- a/assets/cls.html.fe97eb01.js +++ b/assets/cls.html.8f3a5491.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-ae5eff1a","path":"/en/doc/cls.html","title":"cls","lang":"en-US","frontmatter":{},"excerpt":"","headers":[],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/cls.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-ae5eff1a","path":"/en/doc/cls.html","title":"cls","lang":"en-US","frontmatter":{},"excerpt":"","headers":[],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/cls.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/commands.html.26baabfd.js b/assets/commands.html.0766e205.js similarity index 99% rename from assets/commands.html.26baabfd.js rename to assets/commands.html.0766e205.js index f051fa577..871b80a79 100644 --- a/assets/commands.html.26baabfd.js +++ b/assets/commands.html.0766e205.js @@ -1 +1 @@ -import{_ as d,o as a,c,a as e,b as o,w as n,e as t,d as h,r as i}from"./app.524ecf5c.js";const r={},_=e("h1",{id:"all-commands",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#all-commands","aria-hidden":"true"},"#"),t(" All Commands")],-1),u=e("h2",{id:"jvm-related",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#jvm-related","aria-hidden":"true"},"#"),t(" jvm - related")],-1),m=t("dashboard"),f=t(" - dashboard for the system's real-time data"),p=t("getstatic"),g=t(" - examine class's static properties"),b=t("heapdump"),y=t(" - dump java heap in hprof binary format, like "),v=e("code",null,"jmap",-1),w=t("jvm"),x=t(" - show JVM information"),j=t("logger"),k=t(" - print the logger information, update the logger level"),A=t("mbean"),V=t(" - show Mbean information"),C=t("memory"),J=t(" - show JVM memory information"),M=t("ognl"),N=t(" - execute ognl expression"),L=t("perfcounter"),B=t(" - show JVM Perf Counter information"),E=t("sysenv"),I=t(" \u2014 view system environment variables"),R=t("sysprop"),S=t(" - view/modify system properties"),q=t("thread"),G=t(" - show java thread information"),P=t("vmoption"),T=t(" - view/modify the vm diagnostic options."),z=t("vmtool"),W=t(" - jvm tool, getInstances in jvm, forceGc"),D=e("h2",{id:"class-classloader-related",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#class-classloader-related","aria-hidden":"true"},"#"),t(" class/classloader - related")],-1),F=t("classloader"),H=t(" - check the inheritance structure, urls, class loading info for the specified class; using classloader to get the url of the resource e.g. "),K=e("code",null,"java/lang/String.class",-1),O=t("classloader-metaspace"),Q=t(" - show metaspace / class metadata memory by ClassLoader instance"),U=t("dump"),X=t(" - dump the loaded classes in byte code to the specified location"),Y=t("jad"),Z=t(" - decompile the specified loaded classes"),$=t("mc"),tt=t(" - Memory compiler, compiles "),et=e("code",null,".java",-1),ot=t(" files into "),st=e("code",null,".class",-1),nt=t(" files in memory"),lt=t("redefine"),it=t(" - load external "),dt=e("code",null,"*.class",-1),at=t(" files and re-define it into JVM"),ct=t("retransform"),ht=t(" - load external "),rt=e("code",null,"*.class",-1),_t=t(" files and retransform it into JVM"),ut=t("sc"),mt=t(" - check the info for the classes loaded by JVM"),ft=t("sm"),pt=t(" - check methods info for the loaded classes"),gt=e("h2",{id:"monitor-watch-trace-related",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#monitor-watch-trace-related","aria-hidden":"true"},"#"),t(" monitor/watch/trace - related")],-1),bt={class:"custom-container warning"},yt=e("p",{class:"custom-container-title"},"WARNING",-1),vt=e("strong",null,"Attention",-1),wt=t(": commands here are taking advantage of byte-code-injection, which means we are injecting some "),xt={href:"https://en.wikipedia.org/wiki/Aspect-oriented_programming",target:"_blank",rel:"noopener noreferrer"},jt=t("aspects"),kt=t(" into the current classes for monitoring and statistics purpose. Therefore, when using it for online troubleshooting in your production environment, you'd better "),At=e("strong",null,"explicitly specify",-1),Vt=t(" classes/methods/criteria, and remember to remove the injected code by "),Ct=e("code",null,"stop",-1),Jt=t(" or "),Mt=e("code",null,"reset",-1),Nt=t("."),Lt=t("monitor"),Bt=t(" - monitor method execution statistics"),Et=t("line"),It=t(" - watch arguments, local variables, and expression results at specified source lines"),Rt=t("stack"),St=t(" - display the stack trace for the specified class and method"),qt=t("trace"),Gt=t(" - trace the execution time of specified method invocation"),Pt=t("tt"),Tt=t(" - time tunnel, record the arguments and returned value for the methods and replay"),zt=t("watch"),Wt=t(" - display the input/output parameter, return object, and thrown exception of specified method invocation"),Dt=e("h2",{id:"profiler-flame-graph",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#profiler-flame-graph","aria-hidden":"true"},"#"),t(" profiler/flame graph")],-1),Ft=t("profiler"),Ht=t(" - use "),Kt={href:"https://github.com/jvm-profiling-tools/async-profiler",target:"_blank",rel:"noopener noreferrer"},Ot=t("async-profiler"),Qt=t(" to generate flame graph"),Ut=t("jfr"),Xt=t(" - dynamic opening and closing of jfr recordings"),Yt=e("h2",{id:"authentication",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#authentication","aria-hidden":"true"},"#"),t(" authentication")],-1),Zt=t("auth"),$t=t(" - authentication"),te=e("h2",{id:"options",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#options","aria-hidden":"true"},"#"),t(" options")],-1),ee=t("options"),oe=t(" - check/set Arthas global optionss"),se=e("h2",{id:"extension-commands",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#extension-commands","aria-hidden":"true"},"#"),t(" Extension commands")],-1),ne=t("Load external commands"),le=t(" - load custom Arthas commands from external jars at startup"),ie=e("h2",{id:"pipe",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#pipe","aria-hidden":"true"},"#"),t(" pipe")],-1),de=e("p",null,[t("Arthas provides "),e("code",null,"pipe"),t(" to process the result returned from commands further, e.g. "),e("code",null,"sm java.lang.String * | grep 'index'"),t(". Commands supported in "),e("code",null,"pipe"),t(":")],-1),ae=t("grep"),ce=t("- filter the result with the given keyword"),he=e("li",null,"plaintext - remove the ANSI color",-1),re=e("li",null,"wc - count lines",-1),_e=e("h2",{id:"async-jobs",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#async-jobs","aria-hidden":"true"},"#"),t(" async jobs")],-1),ue=t("async"),me=t(" can be handy when a problem is hardly to reproduce in the production environment, e.g. one "),fe=e("code",null,"watch",-1),pe=t(" condition may happen only once in one single day."),ge=h('
  • 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

Basic Arthas Commands

',2),be=t("base64"),ye=t(" - Encode and decode using Base64 representation."),ve=t("cat"),we=t(" - Concatenate and print files"),xe=t("cls"),je=t(" - clear the screen"),ke=t("echo"),Ae=t(" - write arguments to the standard output"),Ve=t("grep"),Ce=t(" - Pattern searcher"),Je=t("help"),Me=t(" - display Arthas help"),Ne=t("history"),Le=t(" - view command history"),Be=t("keymap"),Ee=t(" - keymap for Arthas keyboard shortcut"),Ie=t("pwd"),Re=t(" - Return working directory name"),Se=t("quit/exit"),qe=t(" - exit the current Arthas session, without effecting other sessions"),Ge=t("reset"),Pe=t(" - reset all the enhanced classes. All enhanced classes will also be reset when Arthas server is closed by "),Te=e("code",null,"stop",-1),ze=t("session"),We=t(" - display current session information"),De=t("stop"),Fe=t(" - terminate the Arthas server, all Arthas sessions will be destroyed"),He=t("tee"),Ke=t(" - Copies standard input to standard output, making a copy in zero or more files."),Oe=t("version"),Qe=t(" - print the version for the Arthas attached to the current Java process");function Ue(Xe,Ye){const s=i("RouterLink"),l=i("ExternalLinkIcon");return a(),c("div",null,[_,u,e("ul",null,[e("li",null,[o(s,{to:"/en/doc/dashboard.html"},{default:n(()=>[m]),_:1}),f]),e("li",null,[o(s,{to:"/en/doc/getstatic.html"},{default:n(()=>[p]),_:1}),g]),e("li",null,[o(s,{to:"/en/doc/heapdump.html"},{default:n(()=>[b]),_:1}),y,v]),e("li",null,[o(s,{to:"/en/doc/jvm.html"},{default:n(()=>[w]),_:1}),x]),e("li",null,[o(s,{to:"/en/doc/logger.html"},{default:n(()=>[j]),_:1}),k]),e("li",null,[o(s,{to:"/en/doc/mbean.html"},{default:n(()=>[A]),_:1}),V]),e("li",null,[o(s,{to:"/en/doc/memory.html"},{default:n(()=>[C]),_:1}),J]),e("li",null,[o(s,{to:"/en/doc/ognl.html"},{default:n(()=>[M]),_:1}),N]),e("li",null,[o(s,{to:"/en/doc/perfcounter.html"},{default:n(()=>[L]),_:1}),B]),e("li",null,[o(s,{to:"/en/doc/sysenv.html"},{default:n(()=>[E]),_:1}),I]),e("li",null,[o(s,{to:"/en/doc/sysprop.html"},{default:n(()=>[R]),_:1}),S]),e("li",null,[o(s,{to:"/en/doc/thread.html"},{default:n(()=>[q]),_:1}),G]),e("li",null,[o(s,{to:"/en/doc/vmoption.html"},{default:n(()=>[P]),_:1}),T]),e("li",null,[o(s,{to:"/en/doc/vmtool.html"},{default:n(()=>[z]),_:1}),W])]),D,e("ul",null,[e("li",null,[o(s,{to:"/en/doc/classloader.html"},{default:n(()=>[F]),_:1}),H,K]),e("li",null,[o(s,{to:"/en/doc/classloader-metaspace.html"},{default:n(()=>[O]),_:1}),Q]),e("li",null,[o(s,{to:"/en/doc/dump.html"},{default:n(()=>[U]),_:1}),X]),e("li",null,[o(s,{to:"/en/doc/jad.html"},{default:n(()=>[Y]),_:1}),Z]),e("li",null,[o(s,{to:"/en/doc/mc.html"},{default:n(()=>[$]),_:1}),tt,et,ot,st,nt]),e("li",null,[o(s,{to:"/en/doc/redefine.html"},{default:n(()=>[lt]),_:1}),it,dt,at]),e("li",null,[o(s,{to:"/en/doc/retransform.html"},{default:n(()=>[ct]),_:1}),ht,rt,_t]),e("li",null,[o(s,{to:"/en/doc/sc.html"},{default:n(()=>[ut]),_:1}),mt]),e("li",null,[o(s,{to:"/en/doc/sm.html"},{default:n(()=>[ft]),_:1}),pt])]),gt,e("div",bt,[yt,e("p",null,[vt,wt,e("a",xt,[jt,o(l)]),kt,At,Vt,Ct,Jt,Mt,Nt])]),e("ul",null,[e("li",null,[o(s,{to:"/en/doc/monitor.html"},{default:n(()=>[Lt]),_:1}),Bt]),e("li",null,[o(s,{to:"/en/doc/line.html"},{default:n(()=>[Et]),_:1}),It]),e("li",null,[o(s,{to:"/en/doc/stack.html"},{default:n(()=>[Rt]),_:1}),St]),e("li",null,[o(s,{to:"/en/doc/trace.html"},{default:n(()=>[qt]),_:1}),Gt]),e("li",null,[o(s,{to:"/en/doc/tt.html"},{default:n(()=>[Pt]),_:1}),Tt]),e("li",null,[o(s,{to:"/en/doc/watch.html"},{default:n(()=>[zt]),_:1}),Wt])]),Dt,e("ul",null,[e("li",null,[o(s,{to:"/en/doc/profiler.html"},{default:n(()=>[Ft]),_:1}),Ht,e("a",Kt,[Ot,o(l)]),Qt]),e("li",null,[o(s,{to:"/en/doc/jfr.html"},{default:n(()=>[Ut]),_:1}),Xt])]),Yt,e("ul",null,[e("li",null,[o(s,{to:"/en/doc/auth.html"},{default:n(()=>[Zt]),_:1}),$t])]),te,e("ul",null,[e("li",null,[o(s,{to:"/en/doc/options.html"},{default:n(()=>[ee]),_:1}),oe])]),se,e("ul",null,[e("li",null,[o(s,{to:"/en/doc/external-command.html"},{default:n(()=>[ne]),_:1}),le])]),ie,de,e("ul",null,[e("li",null,[o(s,{to:"/en/doc/grep.html"},{default:n(()=>[ae]),_:1}),ce]),he,re]),_e,e("p",null,[o(s,{to:"/en/doc/async.html"},{default:n(()=>[ue]),_:1}),me,fe,pe]),ge,e("ul",null,[e("li",null,[o(s,{to:"/en/doc/base64.html"},{default:n(()=>[be]),_:1}),ye]),e("li",null,[o(s,{to:"/en/doc/cat.html"},{default:n(()=>[ve]),_:1}),we]),e("li",null,[o(s,{to:"/en/doc/cls.html"},{default:n(()=>[xe]),_:1}),je]),e("li",null,[o(s,{to:"/en/doc/echo.html"},{default:n(()=>[ke]),_:1}),Ae]),e("li",null,[o(s,{to:"/en/doc/grep.html"},{default:n(()=>[Ve]),_:1}),Ce]),e("li",null,[o(s,{to:"/en/doc/help.html"},{default:n(()=>[Je]),_:1}),Me]),e("li",null,[o(s,{to:"/en/doc/history.html"},{default:n(()=>[Ne]),_:1}),Le]),e("li",null,[o(s,{to:"/en/doc/keymap.html"},{default:n(()=>[Be]),_:1}),Ee]),e("li",null,[o(s,{to:"/en/doc/pwd.html"},{default:n(()=>[Ie]),_:1}),Re]),e("li",null,[o(s,{to:"/en/doc/quit.html"},{default:n(()=>[Se]),_:1}),qe]),e("li",null,[o(s,{to:"/en/doc/reset.html"},{default:n(()=>[Ge]),_:1}),Pe,Te]),e("li",null,[o(s,{to:"/en/doc/session.html"},{default:n(()=>[ze]),_:1}),We]),e("li",null,[o(s,{to:"/en/doc/stop.html"},{default:n(()=>[De]),_:1}),Fe]),e("li",null,[o(s,{to:"/en/doc/tee.html"},{default:n(()=>[He]),_:1}),Ke]),e("li",null,[o(s,{to:"/en/doc/version.html"},{default:n(()=>[Oe]),_:1}),Qe])])])}const $e=d(r,[["render",Ue],["__file","commands.html.vue"]]);export{$e as default}; +import{_ as d,o as a,c,a as e,b as o,w as n,e as t,d as h,r as i}from"./app.e2427bec.js";const r={},_=e("h1",{id:"all-commands",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#all-commands","aria-hidden":"true"},"#"),t(" All Commands")],-1),u=e("h2",{id:"jvm-related",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#jvm-related","aria-hidden":"true"},"#"),t(" jvm - related")],-1),m=t("dashboard"),f=t(" - dashboard for the system's real-time data"),p=t("getstatic"),g=t(" - examine class's static properties"),b=t("heapdump"),y=t(" - dump java heap in hprof binary format, like "),v=e("code",null,"jmap",-1),w=t("jvm"),x=t(" - show JVM information"),j=t("logger"),k=t(" - print the logger information, update the logger level"),A=t("mbean"),V=t(" - show Mbean information"),C=t("memory"),J=t(" - show JVM memory information"),M=t("ognl"),N=t(" - execute ognl expression"),L=t("perfcounter"),B=t(" - show JVM Perf Counter information"),E=t("sysenv"),I=t(" \u2014 view system environment variables"),R=t("sysprop"),S=t(" - view/modify system properties"),q=t("thread"),G=t(" - show java thread information"),P=t("vmoption"),T=t(" - view/modify the vm diagnostic options."),z=t("vmtool"),W=t(" - jvm tool, getInstances in jvm, forceGc"),D=e("h2",{id:"class-classloader-related",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#class-classloader-related","aria-hidden":"true"},"#"),t(" class/classloader - related")],-1),F=t("classloader"),H=t(" - check the inheritance structure, urls, class loading info for the specified class; using classloader to get the url of the resource e.g. "),K=e("code",null,"java/lang/String.class",-1),O=t("classloader-metaspace"),Q=t(" - show metaspace / class metadata memory by ClassLoader instance"),U=t("dump"),X=t(" - dump the loaded classes in byte code to the specified location"),Y=t("jad"),Z=t(" - decompile the specified loaded classes"),$=t("mc"),tt=t(" - Memory compiler, compiles "),et=e("code",null,".java",-1),ot=t(" files into "),st=e("code",null,".class",-1),nt=t(" files in memory"),lt=t("redefine"),it=t(" - load external "),dt=e("code",null,"*.class",-1),at=t(" files and re-define it into JVM"),ct=t("retransform"),ht=t(" - load external "),rt=e("code",null,"*.class",-1),_t=t(" files and retransform it into JVM"),ut=t("sc"),mt=t(" - check the info for the classes loaded by JVM"),ft=t("sm"),pt=t(" - check methods info for the loaded classes"),gt=e("h2",{id:"monitor-watch-trace-related",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#monitor-watch-trace-related","aria-hidden":"true"},"#"),t(" monitor/watch/trace - related")],-1),bt={class:"custom-container warning"},yt=e("p",{class:"custom-container-title"},"WARNING",-1),vt=e("strong",null,"Attention",-1),wt=t(": commands here are taking advantage of byte-code-injection, which means we are injecting some "),xt={href:"https://en.wikipedia.org/wiki/Aspect-oriented_programming",target:"_blank",rel:"noopener noreferrer"},jt=t("aspects"),kt=t(" into the current classes for monitoring and statistics purpose. Therefore, when using it for online troubleshooting in your production environment, you'd better "),At=e("strong",null,"explicitly specify",-1),Vt=t(" classes/methods/criteria, and remember to remove the injected code by "),Ct=e("code",null,"stop",-1),Jt=t(" or "),Mt=e("code",null,"reset",-1),Nt=t("."),Lt=t("monitor"),Bt=t(" - monitor method execution statistics"),Et=t("line"),It=t(" - watch arguments, local variables, and expression results at specified source lines"),Rt=t("stack"),St=t(" - display the stack trace for the specified class and method"),qt=t("trace"),Gt=t(" - trace the execution time of specified method invocation"),Pt=t("tt"),Tt=t(" - time tunnel, record the arguments and returned value for the methods and replay"),zt=t("watch"),Wt=t(" - display the input/output parameter, return object, and thrown exception of specified method invocation"),Dt=e("h2",{id:"profiler-flame-graph",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#profiler-flame-graph","aria-hidden":"true"},"#"),t(" profiler/flame graph")],-1),Ft=t("profiler"),Ht=t(" - use "),Kt={href:"https://github.com/jvm-profiling-tools/async-profiler",target:"_blank",rel:"noopener noreferrer"},Ot=t("async-profiler"),Qt=t(" to generate flame graph"),Ut=t("jfr"),Xt=t(" - dynamic opening and closing of jfr recordings"),Yt=e("h2",{id:"authentication",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#authentication","aria-hidden":"true"},"#"),t(" authentication")],-1),Zt=t("auth"),$t=t(" - authentication"),te=e("h2",{id:"options",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#options","aria-hidden":"true"},"#"),t(" options")],-1),ee=t("options"),oe=t(" - check/set Arthas global optionss"),se=e("h2",{id:"extension-commands",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#extension-commands","aria-hidden":"true"},"#"),t(" Extension commands")],-1),ne=t("Load external commands"),le=t(" - load custom Arthas commands from external jars at startup"),ie=e("h2",{id:"pipe",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#pipe","aria-hidden":"true"},"#"),t(" pipe")],-1),de=e("p",null,[t("Arthas provides "),e("code",null,"pipe"),t(" to process the result returned from commands further, e.g. "),e("code",null,"sm java.lang.String * | grep 'index'"),t(". Commands supported in "),e("code",null,"pipe"),t(":")],-1),ae=t("grep"),ce=t("- filter the result with the given keyword"),he=e("li",null,"plaintext - remove the ANSI color",-1),re=e("li",null,"wc - count lines",-1),_e=e("h2",{id:"async-jobs",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#async-jobs","aria-hidden":"true"},"#"),t(" async jobs")],-1),ue=t("async"),me=t(" can be handy when a problem is hardly to reproduce in the production environment, e.g. one "),fe=e("code",null,"watch",-1),pe=t(" condition may happen only once in one single day."),ge=h('
  • 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

Basic Arthas Commands

',2),be=t("base64"),ye=t(" - Encode and decode using Base64 representation."),ve=t("cat"),we=t(" - Concatenate and print files"),xe=t("cls"),je=t(" - clear the screen"),ke=t("echo"),Ae=t(" - write arguments to the standard output"),Ve=t("grep"),Ce=t(" - Pattern searcher"),Je=t("help"),Me=t(" - display Arthas help"),Ne=t("history"),Le=t(" - view command history"),Be=t("keymap"),Ee=t(" - keymap for Arthas keyboard shortcut"),Ie=t("pwd"),Re=t(" - Return working directory name"),Se=t("quit/exit"),qe=t(" - exit the current Arthas session, without effecting other sessions"),Ge=t("reset"),Pe=t(" - reset all the enhanced classes. All enhanced classes will also be reset when Arthas server is closed by "),Te=e("code",null,"stop",-1),ze=t("session"),We=t(" - display current session information"),De=t("stop"),Fe=t(" - terminate the Arthas server, all Arthas sessions will be destroyed"),He=t("tee"),Ke=t(" - Copies standard input to standard output, making a copy in zero or more files."),Oe=t("version"),Qe=t(" - print the version for the Arthas attached to the current Java process");function Ue(Xe,Ye){const s=i("RouterLink"),l=i("ExternalLinkIcon");return a(),c("div",null,[_,u,e("ul",null,[e("li",null,[o(s,{to:"/en/doc/dashboard.html"},{default:n(()=>[m]),_:1}),f]),e("li",null,[o(s,{to:"/en/doc/getstatic.html"},{default:n(()=>[p]),_:1}),g]),e("li",null,[o(s,{to:"/en/doc/heapdump.html"},{default:n(()=>[b]),_:1}),y,v]),e("li",null,[o(s,{to:"/en/doc/jvm.html"},{default:n(()=>[w]),_:1}),x]),e("li",null,[o(s,{to:"/en/doc/logger.html"},{default:n(()=>[j]),_:1}),k]),e("li",null,[o(s,{to:"/en/doc/mbean.html"},{default:n(()=>[A]),_:1}),V]),e("li",null,[o(s,{to:"/en/doc/memory.html"},{default:n(()=>[C]),_:1}),J]),e("li",null,[o(s,{to:"/en/doc/ognl.html"},{default:n(()=>[M]),_:1}),N]),e("li",null,[o(s,{to:"/en/doc/perfcounter.html"},{default:n(()=>[L]),_:1}),B]),e("li",null,[o(s,{to:"/en/doc/sysenv.html"},{default:n(()=>[E]),_:1}),I]),e("li",null,[o(s,{to:"/en/doc/sysprop.html"},{default:n(()=>[R]),_:1}),S]),e("li",null,[o(s,{to:"/en/doc/thread.html"},{default:n(()=>[q]),_:1}),G]),e("li",null,[o(s,{to:"/en/doc/vmoption.html"},{default:n(()=>[P]),_:1}),T]),e("li",null,[o(s,{to:"/en/doc/vmtool.html"},{default:n(()=>[z]),_:1}),W])]),D,e("ul",null,[e("li",null,[o(s,{to:"/en/doc/classloader.html"},{default:n(()=>[F]),_:1}),H,K]),e("li",null,[o(s,{to:"/en/doc/classloader-metaspace.html"},{default:n(()=>[O]),_:1}),Q]),e("li",null,[o(s,{to:"/en/doc/dump.html"},{default:n(()=>[U]),_:1}),X]),e("li",null,[o(s,{to:"/en/doc/jad.html"},{default:n(()=>[Y]),_:1}),Z]),e("li",null,[o(s,{to:"/en/doc/mc.html"},{default:n(()=>[$]),_:1}),tt,et,ot,st,nt]),e("li",null,[o(s,{to:"/en/doc/redefine.html"},{default:n(()=>[lt]),_:1}),it,dt,at]),e("li",null,[o(s,{to:"/en/doc/retransform.html"},{default:n(()=>[ct]),_:1}),ht,rt,_t]),e("li",null,[o(s,{to:"/en/doc/sc.html"},{default:n(()=>[ut]),_:1}),mt]),e("li",null,[o(s,{to:"/en/doc/sm.html"},{default:n(()=>[ft]),_:1}),pt])]),gt,e("div",bt,[yt,e("p",null,[vt,wt,e("a",xt,[jt,o(l)]),kt,At,Vt,Ct,Jt,Mt,Nt])]),e("ul",null,[e("li",null,[o(s,{to:"/en/doc/monitor.html"},{default:n(()=>[Lt]),_:1}),Bt]),e("li",null,[o(s,{to:"/en/doc/line.html"},{default:n(()=>[Et]),_:1}),It]),e("li",null,[o(s,{to:"/en/doc/stack.html"},{default:n(()=>[Rt]),_:1}),St]),e("li",null,[o(s,{to:"/en/doc/trace.html"},{default:n(()=>[qt]),_:1}),Gt]),e("li",null,[o(s,{to:"/en/doc/tt.html"},{default:n(()=>[Pt]),_:1}),Tt]),e("li",null,[o(s,{to:"/en/doc/watch.html"},{default:n(()=>[zt]),_:1}),Wt])]),Dt,e("ul",null,[e("li",null,[o(s,{to:"/en/doc/profiler.html"},{default:n(()=>[Ft]),_:1}),Ht,e("a",Kt,[Ot,o(l)]),Qt]),e("li",null,[o(s,{to:"/en/doc/jfr.html"},{default:n(()=>[Ut]),_:1}),Xt])]),Yt,e("ul",null,[e("li",null,[o(s,{to:"/en/doc/auth.html"},{default:n(()=>[Zt]),_:1}),$t])]),te,e("ul",null,[e("li",null,[o(s,{to:"/en/doc/options.html"},{default:n(()=>[ee]),_:1}),oe])]),se,e("ul",null,[e("li",null,[o(s,{to:"/en/doc/external-command.html"},{default:n(()=>[ne]),_:1}),le])]),ie,de,e("ul",null,[e("li",null,[o(s,{to:"/en/doc/grep.html"},{default:n(()=>[ae]),_:1}),ce]),he,re]),_e,e("p",null,[o(s,{to:"/en/doc/async.html"},{default:n(()=>[ue]),_:1}),me,fe,pe]),ge,e("ul",null,[e("li",null,[o(s,{to:"/en/doc/base64.html"},{default:n(()=>[be]),_:1}),ye]),e("li",null,[o(s,{to:"/en/doc/cat.html"},{default:n(()=>[ve]),_:1}),we]),e("li",null,[o(s,{to:"/en/doc/cls.html"},{default:n(()=>[xe]),_:1}),je]),e("li",null,[o(s,{to:"/en/doc/echo.html"},{default:n(()=>[ke]),_:1}),Ae]),e("li",null,[o(s,{to:"/en/doc/grep.html"},{default:n(()=>[Ve]),_:1}),Ce]),e("li",null,[o(s,{to:"/en/doc/help.html"},{default:n(()=>[Je]),_:1}),Me]),e("li",null,[o(s,{to:"/en/doc/history.html"},{default:n(()=>[Ne]),_:1}),Le]),e("li",null,[o(s,{to:"/en/doc/keymap.html"},{default:n(()=>[Be]),_:1}),Ee]),e("li",null,[o(s,{to:"/en/doc/pwd.html"},{default:n(()=>[Ie]),_:1}),Re]),e("li",null,[o(s,{to:"/en/doc/quit.html"},{default:n(()=>[Se]),_:1}),qe]),e("li",null,[o(s,{to:"/en/doc/reset.html"},{default:n(()=>[Ge]),_:1}),Pe,Te]),e("li",null,[o(s,{to:"/en/doc/session.html"},{default:n(()=>[ze]),_:1}),We]),e("li",null,[o(s,{to:"/en/doc/stop.html"},{default:n(()=>[De]),_:1}),Fe]),e("li",null,[o(s,{to:"/en/doc/tee.html"},{default:n(()=>[He]),_:1}),Ke]),e("li",null,[o(s,{to:"/en/doc/version.html"},{default:n(()=>[Oe]),_:1}),Qe])])])}const $e=d(r,[["render",Ue],["__file","commands.html.vue"]]);export{$e as default}; diff --git a/assets/commands.html.3ba84332.js b/assets/commands.html.3d045ea7.js similarity index 99% rename from assets/commands.html.3ba84332.js rename to assets/commands.html.3d045ea7.js index f5cd45ba0..01475303a 100644 --- a/assets/commands.html.3ba84332.js +++ b/assets/commands.html.3d045ea7.js @@ -1 +1 @@ -import{_,o as c,c as i,a as o,b as e,w as l,e as t,d as h,r as d}from"./app.524ecf5c.js";const a={},r=o("h1",{id:"\u547D\u4EE4\u5217\u8868",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#\u547D\u4EE4\u5217\u8868","aria-hidden":"true"},"#"),t(" \u547D\u4EE4\u5217\u8868")],-1),u=o("h2",{id:"jvm-\u76F8\u5173",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#jvm-\u76F8\u5173","aria-hidden":"true"},"#"),t(" jvm \u76F8\u5173")],-1),m=t("dashboard"),f=t(" - \u5F53\u524D\u7CFB\u7EDF\u7684\u5B9E\u65F6\u6570\u636E\u9762\u677F"),p=t("getstatic"),b=t(" - \u67E5\u770B\u7C7B\u7684\u9759\u6001\u5C5E\u6027"),g=t("heapdump"),x=t(" - dump java heap, \u7C7B\u4F3C jmap \u547D\u4EE4\u7684 heap dump \u529F\u80FD"),v=t("jvm"),j=t(" - \u67E5\u770B\u5F53\u524D JVM \u7684\u4FE1\u606F"),y=t("logger"),V=t(" - \u67E5\u770B\u548C\u4FEE\u6539 logger"),k=t("mbean"),w=t(" - \u67E5\u770B Mbean \u7684\u4FE1\u606F"),A=t("memory"),J=t(" - \u67E5\u770B JVM \u7684\u5185\u5B58\u4FE1\u606F"),M=t("ognl"),L=t(" - \u6267\u884C ognl \u8868\u8FBE\u5F0F"),N=t("perfcounter"),C=t(" - \u67E5\u770B\u5F53\u524D JVM \u7684 Perf Counter \u4FE1\u606F"),R=t("sysenv"),B=t(" - \u67E5\u770B JVM \u7684\u73AF\u5883\u53D8\u91CF"),E=t("sysprop"),I=t(" - \u67E5\u770B\u548C\u4FEE\u6539 JVM \u7684\u7CFB\u7EDF\u5C5E\u6027"),S=t("thread"),q=t(" - \u67E5\u770B\u5F53\u524D JVM \u7684\u7EBF\u7A0B\u5806\u6808\u4FE1\u606F"),F=t("vmoption"),G=t(" - \u67E5\u770B\u548C\u4FEE\u6539 JVM \u91CC\u8BCA\u65AD\u76F8\u5173\u7684 option"),P=t("vmtool"),T=t(" - \u4ECE jvm \u91CC\u67E5\u8BE2\u5BF9\u8C61\uFF0C\u6267\u884C forceGc"),z=o("h2",{id:"class-classloader-\u76F8\u5173",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#class-classloader-\u76F8\u5173","aria-hidden":"true"},"#"),t(" class/classloader \u76F8\u5173")],-1),D=t("classloader"),H=t(" - \u67E5\u770B classloader \u7684\u7EE7\u627F\u6811\uFF0Curls\uFF0C\u7C7B\u52A0\u8F7D\u4FE1\u606F\uFF0C\u4F7F\u7528 classloader \u53BB getResource"),K=t("classloader-metaspace"),O=t(" - \u6309 ClassLoader \u5B9E\u4F8B\u7EDF\u8BA1 metaspace / class metadata \u5185\u5B58"),Q=t("dump"),U=t(" - dump \u5DF2\u52A0\u8F7D\u7C7B\u7684 byte code \u5230\u7279\u5B9A\u76EE\u5F55"),W=t("jad"),X=t(" - \u53CD\u7F16\u8BD1\u6307\u5B9A\u5DF2\u52A0\u8F7D\u7C7B\u7684\u6E90\u7801"),Y=t("mc"),Z=t(" - \u5185\u5B58\u7F16\u8BD1\u5668\uFF0C\u5185\u5B58\u7F16\u8BD1"),$=o("code",null,".java",-1),tt=t("\u6587\u4EF6\u4E3A"),ot=o("code",null,".class",-1),et=t("\u6587\u4EF6"),st=t("redefine"),lt=t(" - \u52A0\u8F7D\u5916\u90E8\u7684"),dt=o("code",null,".class",-1),nt=t("\u6587\u4EF6\uFF0Credefine \u5230 JVM \u91CC"),_t=t("retransform"),ct=t(" - \u52A0\u8F7D\u5916\u90E8\u7684"),it=o("code",null,".class",-1),ht=t("\u6587\u4EF6\uFF0Cretransform \u5230 JVM \u91CC"),at=t("sc"),rt=t(" - \u67E5\u770B JVM \u5DF2\u52A0\u8F7D\u7684\u7C7B\u4FE1\u606F"),ut=t("sm"),mt=t(" - \u67E5\u770B\u5DF2\u52A0\u8F7D\u7C7B\u7684\u65B9\u6CD5\u4FE1\u606F"),ft=o("h2",{id:"monitor-watch-trace-\u76F8\u5173",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#monitor-watch-trace-\u76F8\u5173","aria-hidden":"true"},"#"),t(" monitor/watch/trace \u76F8\u5173")],-1),pt=o("div",{class:"custom-container warning"},[o("p",{class:"custom-container-title"},"\u6CE8\u610F"),o("p",null,[t("\u8BF7\u6CE8\u610F\uFF0C\u8FD9\u4E9B\u547D\u4EE4\uFF0C\u90FD\u901A\u8FC7\u5B57\u8282\u7801\u589E\u5F3A\u6280\u672F\u6765\u5B9E\u73B0\u7684\uFF0C\u4F1A\u5728\u6307\u5B9A\u7C7B\u7684\u65B9\u6CD5\u4E2D\u63D2\u5165\u4E00\u4E9B\u5207\u9762\u6765\u5B9E\u73B0\u6570\u636E\u7EDF\u8BA1\u548C\u89C2\u6D4B\uFF0C\u56E0\u6B64\u5728\u7EBF\u4E0A\u3001\u9884\u53D1\u4F7F\u7528\u65F6\uFF0C\u8BF7\u5C3D\u91CF\u660E\u786E\u9700\u8981\u89C2\u6D4B\u7684\u7C7B\u3001\u65B9\u6CD5\u4EE5\u53CA\u6761\u4EF6\uFF0C\u8BCA\u65AD\u7ED3\u675F\u8981\u6267\u884C "),o("code",null,"stop"),t(" \u6216\u5C06\u589E\u5F3A\u8FC7\u7684\u7C7B\u6267\u884C "),o("code",null,"reset"),t(" \u547D\u4EE4\u3002")])],-1),bt=t("monitor"),gt=t(" - \u65B9\u6CD5\u6267\u884C\u76D1\u63A7"),xt=t("line"),vt=t(" - \u89C2\u5BDF\u6307\u5B9A\u6E90\u7801\u884C\u7684\u5165\u53C2\u3001\u5C40\u90E8\u53D8\u91CF\u548C\u8868\u8FBE\u5F0F\u7ED3\u679C"),jt=t("stack"),yt=t(" - \u8F93\u51FA\u5F53\u524D\u65B9\u6CD5\u88AB\u8C03\u7528\u7684\u8C03\u7528\u8DEF\u5F84"),Vt=t("trace"),kt=t(" - \u65B9\u6CD5\u5185\u90E8\u8C03\u7528\u8DEF\u5F84\uFF0C\u5E76\u8F93\u51FA\u65B9\u6CD5\u8DEF\u5F84\u4E0A\u7684\u6BCF\u4E2A\u8282\u70B9\u4E0A\u8017\u65F6"),wt=t("tt"),At=t(" - \u65B9\u6CD5\u6267\u884C\u6570\u636E\u7684\u65F6\u7A7A\u96A7\u9053\uFF0C\u8BB0\u5F55\u4E0B\u6307\u5B9A\u65B9\u6CD5\u6BCF\u6B21\u8C03\u7528\u7684\u5165\u53C2\u548C\u8FD4\u56DE\u4FE1\u606F\uFF0C\u5E76\u80FD\u5BF9\u8FD9\u4E9B\u4E0D\u540C\u7684\u65F6\u95F4\u4E0B\u8C03\u7528\u8FDB\u884C\u89C2\u6D4B"),Jt=t("watch"),Mt=t(" - \u65B9\u6CD5\u6267\u884C\u6570\u636E\u89C2\u6D4B"),Lt=o("h2",{id:"profiler-\u706B\u7130\u56FE",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#profiler-\u706B\u7130\u56FE","aria-hidden":"true"},"#"),t(" profiler/\u706B\u7130\u56FE")],-1),Nt=t("profiler"),Ct=t(" - \u4F7F\u7528"),Rt={href:"https://github.com/jvm-profiling-tools/async-profiler",target:"_blank",rel:"noopener noreferrer"},Bt=t("async-profiler"),Et=t("\u5BF9\u5E94\u7528\u91C7\u6837\uFF0C\u751F\u6210\u706B\u7130\u56FE"),It=t("jfr"),St=t(" - \u52A8\u6001\u5F00\u542F\u5173\u95ED JFR \u8BB0\u5F55"),qt=o("h2",{id:"\u9274\u6743",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#\u9274\u6743","aria-hidden":"true"},"#"),t(" \u9274\u6743")],-1),Ft=t("auth"),Gt=t(" - \u9274\u6743"),Pt=o("h2",{id:"options",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#options","aria-hidden":"true"},"#"),t(" options")],-1),Tt=t("options"),zt=t(" - \u67E5\u770B\u6216\u8BBE\u7F6E Arthas \u5168\u5C40\u5F00\u5173"),Dt=o("h2",{id:"\u6269\u5C55\u547D\u4EE4",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#\u6269\u5C55\u547D\u4EE4","aria-hidden":"true"},"#"),t(" \u6269\u5C55\u547D\u4EE4")],-1),Ht=t("\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4"),Kt=t(" - \u542F\u52A8\u65F6\u4ECE\u5916\u90E8 jar \u52A0\u8F7D\u81EA\u5B9A\u4E49 Arthas \u547D\u4EE4"),Ot=o("h2",{id:"\u7BA1\u9053",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#\u7BA1\u9053","aria-hidden":"true"},"#"),t(" \u7BA1\u9053")],-1),Qt=o("p",null,[t("Arthas \u652F\u6301\u4F7F\u7528\u7BA1\u9053\u5BF9\u4E0A\u8FF0\u547D\u4EE4\u7684\u7ED3\u679C\u8FDB\u884C\u8FDB\u4E00\u6B65\u7684\u5904\u7406\uFF0C\u5982"),o("code",null,"sm java.lang.String * | grep 'index'")],-1),Ut=t("grep"),Wt=t(" - \u641C\u7D22\u6EE1\u8DB3\u6761\u4EF6\u7684\u7ED3\u679C"),Xt=o("li",null,"plaintext - \u5C06\u547D\u4EE4\u7684\u7ED3\u679C\u53BB\u9664 ANSI \u989C\u8272",-1),Yt=o("li",null,"wc - \u6309\u884C\u7EDF\u8BA1\u8F93\u51FA\u7ED3\u679C",-1),Zt=o("h2",{id:"\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1","aria-hidden":"true"},"#"),t(" \u540E\u53F0\u5F02\u6B65\u4EFB\u52A1")],-1),$t=t("\u5F53\u7EBF\u4E0A\u51FA\u73B0\u5076\u53D1\u7684\u95EE\u9898\uFF0C\u6BD4\u5982\u9700\u8981 watch \u67D0\u4E2A\u6761\u4EF6\uFF0C\u800C\u8FD9\u4E2A\u6761\u4EF6\u4E00\u5929\u53EF\u80FD\u624D\u4F1A\u51FA\u73B0\u4E00\u6B21\u65F6\uFF0C\u5F02\u6B65\u540E\u53F0\u4EFB\u52A1\u5C31\u6D3E\u4E0A\u7528\u573A\u4E86\uFF0C\u8BE6\u60C5\u8BF7\u53C2\u8003"),to=t("\u8FD9\u91CC"),oo=h('
  • \u4F7F\u7528 > \u5C06\u7ED3\u679C\u91CD\u5199\u5411\u5230\u65E5\u5FD7\u6587\u4EF6\uFF0C\u4F7F\u7528 & \u6307\u5B9A\u547D\u4EE4\u662F\u540E\u53F0\u8FD0\u884C\uFF0Csession \u65AD\u5F00\u4E0D\u5F71\u54CD\u4EFB\u52A1\u6267\u884C\uFF08\u751F\u547D\u5468\u671F\u9ED8\u8BA4\u4E3A 1 \u5929\uFF09
  • jobs - \u5217\u51FA\u6240\u6709 job
  • kill - \u5F3A\u5236\u7EC8\u6B62\u4EFB\u52A1
  • fg - \u5C06\u6682\u505C\u7684\u4EFB\u52A1\u62C9\u5230\u524D\u53F0\u6267\u884C
  • bg - \u5C06\u6682\u505C\u7684\u4EFB\u52A1\u653E\u5230\u540E\u53F0\u6267\u884C

\u57FA\u7840\u547D\u4EE4

',2),eo=t("base64"),so=t(" - base64 \u7F16\u7801\u8F6C\u6362\uFF0C\u548C linux \u91CC\u7684 base64 \u547D\u4EE4\u7C7B\u4F3C"),lo=t("cat"),no=t(" - \u6253\u5370\u6587\u4EF6\u5185\u5BB9\uFF0C\u548C linux \u91CC\u7684 cat \u547D\u4EE4\u7C7B\u4F3C"),_o=t("cls"),co=t(" - \u6E05\u7A7A\u5F53\u524D\u5C4F\u5E55\u533A\u57DF"),io=t("echo"),ho=t(" - \u6253\u5370\u53C2\u6570\uFF0C\u548C linux \u91CC\u7684 echo \u547D\u4EE4\u7C7B\u4F3C"),ao=t("grep"),ro=t(" - \u5339\u914D\u67E5\u627E\uFF0C\u548C linux \u91CC\u7684 grep \u547D\u4EE4\u7C7B\u4F3C"),uo=t("help"),mo=t(" - \u67E5\u770B\u547D\u4EE4\u5E2E\u52A9\u4FE1\u606F"),fo=t("history"),po=t(" - \u6253\u5370\u547D\u4EE4\u5386\u53F2"),bo=t("keymap"),go=t(" - Arthas \u5FEB\u6377\u952E\u5217\u8868\u53CA\u81EA\u5B9A\u4E49\u5FEB\u6377\u952E"),xo=t("pwd"),vo=t(" - \u8FD4\u56DE\u5F53\u524D\u7684\u5DE5\u4F5C\u76EE\u5F55\uFF0C\u548C linux \u547D\u4EE4\u7C7B\u4F3C"),jo=t("quit"),yo=t(" - \u9000\u51FA\u5F53\u524D Arthas \u5BA2\u6237\u7AEF\uFF0C\u5176\u4ED6 Arthas \u5BA2\u6237\u7AEF\u4E0D\u53D7\u5F71\u54CD"),Vo=t("reset"),ko=t(" - \u91CD\u7F6E\u589E\u5F3A\u7C7B\uFF0C\u5C06\u88AB Arthas \u589E\u5F3A\u8FC7\u7684\u7C7B\u5168\u90E8\u8FD8\u539F\uFF0CArthas \u670D\u52A1\u7AEF\u5173\u95ED\u65F6\u4F1A\u91CD\u7F6E\u6240\u6709\u589E\u5F3A\u8FC7\u7684\u7C7B"),wo=t("session"),Ao=t(" - \u67E5\u770B\u5F53\u524D\u4F1A\u8BDD\u7684\u4FE1\u606F"),Jo=t("stop"),Mo=t(" - \u5173\u95ED Arthas \u670D\u52A1\u7AEF\uFF0C\u6240\u6709 Arthas \u5BA2\u6237\u7AEF\u5168\u90E8\u9000\u51FA"),Lo=t("tee"),No=t(" - \u590D\u5236\u6807\u51C6\u8F93\u5165\u5230\u6807\u51C6\u8F93\u51FA\u548C\u6307\u5B9A\u7684\u6587\u4EF6\uFF0C\u548C linux \u91CC\u7684 tee \u547D\u4EE4\u7C7B\u4F3C"),Co=t("version"),Ro=t(" - \u8F93\u51FA\u5F53\u524D\u76EE\u6807 Java \u8FDB\u7A0B\u6240\u52A0\u8F7D\u7684 Arthas \u7248\u672C\u53F7");function Bo(Eo,Io){const s=d("RouterLink"),n=d("ExternalLinkIcon");return c(),i("div",null,[r,u,o("ul",null,[o("li",null,[e(s,{to:"/doc/dashboard.html"},{default:l(()=>[m]),_:1}),f]),o("li",null,[e(s,{to:"/doc/getstatic.html"},{default:l(()=>[p]),_:1}),b]),o("li",null,[e(s,{to:"/doc/heapdump.html"},{default:l(()=>[g]),_:1}),x]),o("li",null,[e(s,{to:"/doc/jvm.html"},{default:l(()=>[v]),_:1}),j]),o("li",null,[e(s,{to:"/doc/logger.html"},{default:l(()=>[y]),_:1}),V]),o("li",null,[e(s,{to:"/doc/mbean.html"},{default:l(()=>[k]),_:1}),w]),o("li",null,[e(s,{to:"/doc/memory.html"},{default:l(()=>[A]),_:1}),J]),o("li",null,[e(s,{to:"/doc/ognl.html"},{default:l(()=>[M]),_:1}),L]),o("li",null,[e(s,{to:"/doc/perfcounter.html"},{default:l(()=>[N]),_:1}),C]),o("li",null,[e(s,{to:"/doc/sysenv.html"},{default:l(()=>[R]),_:1}),B]),o("li",null,[e(s,{to:"/doc/sysprop.html"},{default:l(()=>[E]),_:1}),I]),o("li",null,[e(s,{to:"/doc/thread.html"},{default:l(()=>[S]),_:1}),q]),o("li",null,[e(s,{to:"/doc/vmoption.html"},{default:l(()=>[F]),_:1}),G]),o("li",null,[e(s,{to:"/doc/vmtool.html"},{default:l(()=>[P]),_:1}),T])]),z,o("ul",null,[o("li",null,[e(s,{to:"/doc/classloader.html"},{default:l(()=>[D]),_:1}),H]),o("li",null,[e(s,{to:"/doc/classloader-metaspace.html"},{default:l(()=>[K]),_:1}),O]),o("li",null,[e(s,{to:"/doc/dump.html"},{default:l(()=>[Q]),_:1}),U]),o("li",null,[e(s,{to:"/doc/jad.html"},{default:l(()=>[W]),_:1}),X]),o("li",null,[e(s,{to:"/doc/mc.html"},{default:l(()=>[Y]),_:1}),Z,$,tt,ot,et]),o("li",null,[e(s,{to:"/doc/redefine.html"},{default:l(()=>[st]),_:1}),lt,dt,nt]),o("li",null,[e(s,{to:"/doc/retransform.html"},{default:l(()=>[_t]),_:1}),ct,it,ht]),o("li",null,[e(s,{to:"/doc/sc.html"},{default:l(()=>[at]),_:1}),rt]),o("li",null,[e(s,{to:"/doc/sm.html"},{default:l(()=>[ut]),_:1}),mt])]),ft,pt,o("ul",null,[o("li",null,[e(s,{to:"/doc/monitor.html"},{default:l(()=>[bt]),_:1}),gt]),o("li",null,[e(s,{to:"/doc/line.html"},{default:l(()=>[xt]),_:1}),vt]),o("li",null,[e(s,{to:"/doc/stack.html"},{default:l(()=>[jt]),_:1}),yt]),o("li",null,[e(s,{to:"/doc/trace.html"},{default:l(()=>[Vt]),_:1}),kt]),o("li",null,[e(s,{to:"/doc/tt.html"},{default:l(()=>[wt]),_:1}),At]),o("li",null,[e(s,{to:"/doc/watch.html"},{default:l(()=>[Jt]),_:1}),Mt])]),Lt,o("ul",null,[o("li",null,[e(s,{to:"/doc/profiler.html"},{default:l(()=>[Nt]),_:1}),Ct,o("a",Rt,[Bt,e(n)]),Et]),o("li",null,[e(s,{to:"/doc/jfr.html"},{default:l(()=>[It]),_:1}),St])]),qt,o("ul",null,[o("li",null,[e(s,{to:"/doc/auth.html"},{default:l(()=>[Ft]),_:1}),Gt])]),Pt,o("ul",null,[o("li",null,[e(s,{to:"/doc/options.html"},{default:l(()=>[Tt]),_:1}),zt])]),Dt,o("ul",null,[o("li",null,[e(s,{to:"/doc/external-command.html"},{default:l(()=>[Ht]),_:1}),Kt])]),Ot,Qt,o("ul",null,[o("li",null,[e(s,{to:"/doc/grep.html"},{default:l(()=>[Ut]),_:1}),Wt]),Xt,Yt]),Zt,o("p",null,[$t,e(s,{to:"/doc/async.html"},{default:l(()=>[to]),_:1})]),oo,o("ul",null,[o("li",null,[e(s,{to:"/doc/base64.html"},{default:l(()=>[eo]),_:1}),so]),o("li",null,[e(s,{to:"/doc/cat.html"},{default:l(()=>[lo]),_:1}),no]),o("li",null,[e(s,{to:"/doc/cls.html"},{default:l(()=>[_o]),_:1}),co]),o("li",null,[e(s,{to:"/doc/echo.html"},{default:l(()=>[io]),_:1}),ho]),o("li",null,[e(s,{to:"/doc/grep.html"},{default:l(()=>[ao]),_:1}),ro]),o("li",null,[e(s,{to:"/doc/help.html"},{default:l(()=>[uo]),_:1}),mo]),o("li",null,[e(s,{to:"/doc/history.html"},{default:l(()=>[fo]),_:1}),po]),o("li",null,[e(s,{to:"/doc/keymap.html"},{default:l(()=>[bo]),_:1}),go]),o("li",null,[e(s,{to:"/doc/pwd.html"},{default:l(()=>[xo]),_:1}),vo]),o("li",null,[e(s,{to:"/doc/quit.html"},{default:l(()=>[jo]),_:1}),yo]),o("li",null,[e(s,{to:"/doc/reset.html"},{default:l(()=>[Vo]),_:1}),ko]),o("li",null,[e(s,{to:"/doc/session.html"},{default:l(()=>[wo]),_:1}),Ao]),o("li",null,[e(s,{to:"/doc/stop.html"},{default:l(()=>[Jo]),_:1}),Mo]),o("li",null,[e(s,{to:"/doc/tee.html"},{default:l(()=>[Lo]),_:1}),No]),o("li",null,[e(s,{to:"/doc/version.html"},{default:l(()=>[Co]),_:1}),Ro])])])}const qo=_(a,[["render",Bo],["__file","commands.html.vue"]]);export{qo as default}; +import{_,o as c,c as i,a as o,b as e,w as l,e as t,d as h,r as d}from"./app.e2427bec.js";const a={},r=o("h1",{id:"\u547D\u4EE4\u5217\u8868",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#\u547D\u4EE4\u5217\u8868","aria-hidden":"true"},"#"),t(" \u547D\u4EE4\u5217\u8868")],-1),u=o("h2",{id:"jvm-\u76F8\u5173",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#jvm-\u76F8\u5173","aria-hidden":"true"},"#"),t(" jvm \u76F8\u5173")],-1),m=t("dashboard"),f=t(" - \u5F53\u524D\u7CFB\u7EDF\u7684\u5B9E\u65F6\u6570\u636E\u9762\u677F"),p=t("getstatic"),b=t(" - \u67E5\u770B\u7C7B\u7684\u9759\u6001\u5C5E\u6027"),g=t("heapdump"),x=t(" - dump java heap, \u7C7B\u4F3C jmap \u547D\u4EE4\u7684 heap dump \u529F\u80FD"),v=t("jvm"),j=t(" - \u67E5\u770B\u5F53\u524D JVM \u7684\u4FE1\u606F"),y=t("logger"),V=t(" - \u67E5\u770B\u548C\u4FEE\u6539 logger"),k=t("mbean"),w=t(" - \u67E5\u770B Mbean \u7684\u4FE1\u606F"),A=t("memory"),J=t(" - \u67E5\u770B JVM \u7684\u5185\u5B58\u4FE1\u606F"),M=t("ognl"),L=t(" - \u6267\u884C ognl \u8868\u8FBE\u5F0F"),N=t("perfcounter"),C=t(" - \u67E5\u770B\u5F53\u524D JVM \u7684 Perf Counter \u4FE1\u606F"),R=t("sysenv"),B=t(" - \u67E5\u770B JVM \u7684\u73AF\u5883\u53D8\u91CF"),E=t("sysprop"),I=t(" - \u67E5\u770B\u548C\u4FEE\u6539 JVM \u7684\u7CFB\u7EDF\u5C5E\u6027"),S=t("thread"),q=t(" - \u67E5\u770B\u5F53\u524D JVM \u7684\u7EBF\u7A0B\u5806\u6808\u4FE1\u606F"),F=t("vmoption"),G=t(" - \u67E5\u770B\u548C\u4FEE\u6539 JVM \u91CC\u8BCA\u65AD\u76F8\u5173\u7684 option"),P=t("vmtool"),T=t(" - \u4ECE jvm \u91CC\u67E5\u8BE2\u5BF9\u8C61\uFF0C\u6267\u884C forceGc"),z=o("h2",{id:"class-classloader-\u76F8\u5173",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#class-classloader-\u76F8\u5173","aria-hidden":"true"},"#"),t(" class/classloader \u76F8\u5173")],-1),D=t("classloader"),H=t(" - \u67E5\u770B classloader \u7684\u7EE7\u627F\u6811\uFF0Curls\uFF0C\u7C7B\u52A0\u8F7D\u4FE1\u606F\uFF0C\u4F7F\u7528 classloader \u53BB getResource"),K=t("classloader-metaspace"),O=t(" - \u6309 ClassLoader \u5B9E\u4F8B\u7EDF\u8BA1 metaspace / class metadata \u5185\u5B58"),Q=t("dump"),U=t(" - dump \u5DF2\u52A0\u8F7D\u7C7B\u7684 byte code \u5230\u7279\u5B9A\u76EE\u5F55"),W=t("jad"),X=t(" - \u53CD\u7F16\u8BD1\u6307\u5B9A\u5DF2\u52A0\u8F7D\u7C7B\u7684\u6E90\u7801"),Y=t("mc"),Z=t(" - \u5185\u5B58\u7F16\u8BD1\u5668\uFF0C\u5185\u5B58\u7F16\u8BD1"),$=o("code",null,".java",-1),tt=t("\u6587\u4EF6\u4E3A"),ot=o("code",null,".class",-1),et=t("\u6587\u4EF6"),st=t("redefine"),lt=t(" - \u52A0\u8F7D\u5916\u90E8\u7684"),dt=o("code",null,".class",-1),nt=t("\u6587\u4EF6\uFF0Credefine \u5230 JVM \u91CC"),_t=t("retransform"),ct=t(" - \u52A0\u8F7D\u5916\u90E8\u7684"),it=o("code",null,".class",-1),ht=t("\u6587\u4EF6\uFF0Cretransform \u5230 JVM \u91CC"),at=t("sc"),rt=t(" - \u67E5\u770B JVM \u5DF2\u52A0\u8F7D\u7684\u7C7B\u4FE1\u606F"),ut=t("sm"),mt=t(" - \u67E5\u770B\u5DF2\u52A0\u8F7D\u7C7B\u7684\u65B9\u6CD5\u4FE1\u606F"),ft=o("h2",{id:"monitor-watch-trace-\u76F8\u5173",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#monitor-watch-trace-\u76F8\u5173","aria-hidden":"true"},"#"),t(" monitor/watch/trace \u76F8\u5173")],-1),pt=o("div",{class:"custom-container warning"},[o("p",{class:"custom-container-title"},"\u6CE8\u610F"),o("p",null,[t("\u8BF7\u6CE8\u610F\uFF0C\u8FD9\u4E9B\u547D\u4EE4\uFF0C\u90FD\u901A\u8FC7\u5B57\u8282\u7801\u589E\u5F3A\u6280\u672F\u6765\u5B9E\u73B0\u7684\uFF0C\u4F1A\u5728\u6307\u5B9A\u7C7B\u7684\u65B9\u6CD5\u4E2D\u63D2\u5165\u4E00\u4E9B\u5207\u9762\u6765\u5B9E\u73B0\u6570\u636E\u7EDF\u8BA1\u548C\u89C2\u6D4B\uFF0C\u56E0\u6B64\u5728\u7EBF\u4E0A\u3001\u9884\u53D1\u4F7F\u7528\u65F6\uFF0C\u8BF7\u5C3D\u91CF\u660E\u786E\u9700\u8981\u89C2\u6D4B\u7684\u7C7B\u3001\u65B9\u6CD5\u4EE5\u53CA\u6761\u4EF6\uFF0C\u8BCA\u65AD\u7ED3\u675F\u8981\u6267\u884C "),o("code",null,"stop"),t(" \u6216\u5C06\u589E\u5F3A\u8FC7\u7684\u7C7B\u6267\u884C "),o("code",null,"reset"),t(" \u547D\u4EE4\u3002")])],-1),bt=t("monitor"),gt=t(" - \u65B9\u6CD5\u6267\u884C\u76D1\u63A7"),xt=t("line"),vt=t(" - \u89C2\u5BDF\u6307\u5B9A\u6E90\u7801\u884C\u7684\u5165\u53C2\u3001\u5C40\u90E8\u53D8\u91CF\u548C\u8868\u8FBE\u5F0F\u7ED3\u679C"),jt=t("stack"),yt=t(" - \u8F93\u51FA\u5F53\u524D\u65B9\u6CD5\u88AB\u8C03\u7528\u7684\u8C03\u7528\u8DEF\u5F84"),Vt=t("trace"),kt=t(" - \u65B9\u6CD5\u5185\u90E8\u8C03\u7528\u8DEF\u5F84\uFF0C\u5E76\u8F93\u51FA\u65B9\u6CD5\u8DEF\u5F84\u4E0A\u7684\u6BCF\u4E2A\u8282\u70B9\u4E0A\u8017\u65F6"),wt=t("tt"),At=t(" - \u65B9\u6CD5\u6267\u884C\u6570\u636E\u7684\u65F6\u7A7A\u96A7\u9053\uFF0C\u8BB0\u5F55\u4E0B\u6307\u5B9A\u65B9\u6CD5\u6BCF\u6B21\u8C03\u7528\u7684\u5165\u53C2\u548C\u8FD4\u56DE\u4FE1\u606F\uFF0C\u5E76\u80FD\u5BF9\u8FD9\u4E9B\u4E0D\u540C\u7684\u65F6\u95F4\u4E0B\u8C03\u7528\u8FDB\u884C\u89C2\u6D4B"),Jt=t("watch"),Mt=t(" - \u65B9\u6CD5\u6267\u884C\u6570\u636E\u89C2\u6D4B"),Lt=o("h2",{id:"profiler-\u706B\u7130\u56FE",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#profiler-\u706B\u7130\u56FE","aria-hidden":"true"},"#"),t(" profiler/\u706B\u7130\u56FE")],-1),Nt=t("profiler"),Ct=t(" - \u4F7F\u7528"),Rt={href:"https://github.com/jvm-profiling-tools/async-profiler",target:"_blank",rel:"noopener noreferrer"},Bt=t("async-profiler"),Et=t("\u5BF9\u5E94\u7528\u91C7\u6837\uFF0C\u751F\u6210\u706B\u7130\u56FE"),It=t("jfr"),St=t(" - \u52A8\u6001\u5F00\u542F\u5173\u95ED JFR \u8BB0\u5F55"),qt=o("h2",{id:"\u9274\u6743",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#\u9274\u6743","aria-hidden":"true"},"#"),t(" \u9274\u6743")],-1),Ft=t("auth"),Gt=t(" - \u9274\u6743"),Pt=o("h2",{id:"options",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#options","aria-hidden":"true"},"#"),t(" options")],-1),Tt=t("options"),zt=t(" - \u67E5\u770B\u6216\u8BBE\u7F6E Arthas \u5168\u5C40\u5F00\u5173"),Dt=o("h2",{id:"\u6269\u5C55\u547D\u4EE4",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#\u6269\u5C55\u547D\u4EE4","aria-hidden":"true"},"#"),t(" \u6269\u5C55\u547D\u4EE4")],-1),Ht=t("\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4"),Kt=t(" - \u542F\u52A8\u65F6\u4ECE\u5916\u90E8 jar \u52A0\u8F7D\u81EA\u5B9A\u4E49 Arthas \u547D\u4EE4"),Ot=o("h2",{id:"\u7BA1\u9053",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#\u7BA1\u9053","aria-hidden":"true"},"#"),t(" \u7BA1\u9053")],-1),Qt=o("p",null,[t("Arthas \u652F\u6301\u4F7F\u7528\u7BA1\u9053\u5BF9\u4E0A\u8FF0\u547D\u4EE4\u7684\u7ED3\u679C\u8FDB\u884C\u8FDB\u4E00\u6B65\u7684\u5904\u7406\uFF0C\u5982"),o("code",null,"sm java.lang.String * | grep 'index'")],-1),Ut=t("grep"),Wt=t(" - \u641C\u7D22\u6EE1\u8DB3\u6761\u4EF6\u7684\u7ED3\u679C"),Xt=o("li",null,"plaintext - \u5C06\u547D\u4EE4\u7684\u7ED3\u679C\u53BB\u9664 ANSI \u989C\u8272",-1),Yt=o("li",null,"wc - \u6309\u884C\u7EDF\u8BA1\u8F93\u51FA\u7ED3\u679C",-1),Zt=o("h2",{id:"\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1","aria-hidden":"true"},"#"),t(" \u540E\u53F0\u5F02\u6B65\u4EFB\u52A1")],-1),$t=t("\u5F53\u7EBF\u4E0A\u51FA\u73B0\u5076\u53D1\u7684\u95EE\u9898\uFF0C\u6BD4\u5982\u9700\u8981 watch \u67D0\u4E2A\u6761\u4EF6\uFF0C\u800C\u8FD9\u4E2A\u6761\u4EF6\u4E00\u5929\u53EF\u80FD\u624D\u4F1A\u51FA\u73B0\u4E00\u6B21\u65F6\uFF0C\u5F02\u6B65\u540E\u53F0\u4EFB\u52A1\u5C31\u6D3E\u4E0A\u7528\u573A\u4E86\uFF0C\u8BE6\u60C5\u8BF7\u53C2\u8003"),to=t("\u8FD9\u91CC"),oo=h('
  • \u4F7F\u7528 > \u5C06\u7ED3\u679C\u91CD\u5199\u5411\u5230\u65E5\u5FD7\u6587\u4EF6\uFF0C\u4F7F\u7528 & \u6307\u5B9A\u547D\u4EE4\u662F\u540E\u53F0\u8FD0\u884C\uFF0Csession \u65AD\u5F00\u4E0D\u5F71\u54CD\u4EFB\u52A1\u6267\u884C\uFF08\u751F\u547D\u5468\u671F\u9ED8\u8BA4\u4E3A 1 \u5929\uFF09
  • jobs - \u5217\u51FA\u6240\u6709 job
  • kill - \u5F3A\u5236\u7EC8\u6B62\u4EFB\u52A1
  • fg - \u5C06\u6682\u505C\u7684\u4EFB\u52A1\u62C9\u5230\u524D\u53F0\u6267\u884C
  • bg - \u5C06\u6682\u505C\u7684\u4EFB\u52A1\u653E\u5230\u540E\u53F0\u6267\u884C

\u57FA\u7840\u547D\u4EE4

',2),eo=t("base64"),so=t(" - base64 \u7F16\u7801\u8F6C\u6362\uFF0C\u548C linux \u91CC\u7684 base64 \u547D\u4EE4\u7C7B\u4F3C"),lo=t("cat"),no=t(" - \u6253\u5370\u6587\u4EF6\u5185\u5BB9\uFF0C\u548C linux \u91CC\u7684 cat \u547D\u4EE4\u7C7B\u4F3C"),_o=t("cls"),co=t(" - \u6E05\u7A7A\u5F53\u524D\u5C4F\u5E55\u533A\u57DF"),io=t("echo"),ho=t(" - \u6253\u5370\u53C2\u6570\uFF0C\u548C linux \u91CC\u7684 echo \u547D\u4EE4\u7C7B\u4F3C"),ao=t("grep"),ro=t(" - \u5339\u914D\u67E5\u627E\uFF0C\u548C linux \u91CC\u7684 grep \u547D\u4EE4\u7C7B\u4F3C"),uo=t("help"),mo=t(" - \u67E5\u770B\u547D\u4EE4\u5E2E\u52A9\u4FE1\u606F"),fo=t("history"),po=t(" - \u6253\u5370\u547D\u4EE4\u5386\u53F2"),bo=t("keymap"),go=t(" - Arthas \u5FEB\u6377\u952E\u5217\u8868\u53CA\u81EA\u5B9A\u4E49\u5FEB\u6377\u952E"),xo=t("pwd"),vo=t(" - \u8FD4\u56DE\u5F53\u524D\u7684\u5DE5\u4F5C\u76EE\u5F55\uFF0C\u548C linux \u547D\u4EE4\u7C7B\u4F3C"),jo=t("quit"),yo=t(" - \u9000\u51FA\u5F53\u524D Arthas \u5BA2\u6237\u7AEF\uFF0C\u5176\u4ED6 Arthas \u5BA2\u6237\u7AEF\u4E0D\u53D7\u5F71\u54CD"),Vo=t("reset"),ko=t(" - \u91CD\u7F6E\u589E\u5F3A\u7C7B\uFF0C\u5C06\u88AB Arthas \u589E\u5F3A\u8FC7\u7684\u7C7B\u5168\u90E8\u8FD8\u539F\uFF0CArthas \u670D\u52A1\u7AEF\u5173\u95ED\u65F6\u4F1A\u91CD\u7F6E\u6240\u6709\u589E\u5F3A\u8FC7\u7684\u7C7B"),wo=t("session"),Ao=t(" - \u67E5\u770B\u5F53\u524D\u4F1A\u8BDD\u7684\u4FE1\u606F"),Jo=t("stop"),Mo=t(" - \u5173\u95ED Arthas \u670D\u52A1\u7AEF\uFF0C\u6240\u6709 Arthas \u5BA2\u6237\u7AEF\u5168\u90E8\u9000\u51FA"),Lo=t("tee"),No=t(" - \u590D\u5236\u6807\u51C6\u8F93\u5165\u5230\u6807\u51C6\u8F93\u51FA\u548C\u6307\u5B9A\u7684\u6587\u4EF6\uFF0C\u548C linux \u91CC\u7684 tee \u547D\u4EE4\u7C7B\u4F3C"),Co=t("version"),Ro=t(" - \u8F93\u51FA\u5F53\u524D\u76EE\u6807 Java \u8FDB\u7A0B\u6240\u52A0\u8F7D\u7684 Arthas \u7248\u672C\u53F7");function Bo(Eo,Io){const s=d("RouterLink"),n=d("ExternalLinkIcon");return c(),i("div",null,[r,u,o("ul",null,[o("li",null,[e(s,{to:"/doc/dashboard.html"},{default:l(()=>[m]),_:1}),f]),o("li",null,[e(s,{to:"/doc/getstatic.html"},{default:l(()=>[p]),_:1}),b]),o("li",null,[e(s,{to:"/doc/heapdump.html"},{default:l(()=>[g]),_:1}),x]),o("li",null,[e(s,{to:"/doc/jvm.html"},{default:l(()=>[v]),_:1}),j]),o("li",null,[e(s,{to:"/doc/logger.html"},{default:l(()=>[y]),_:1}),V]),o("li",null,[e(s,{to:"/doc/mbean.html"},{default:l(()=>[k]),_:1}),w]),o("li",null,[e(s,{to:"/doc/memory.html"},{default:l(()=>[A]),_:1}),J]),o("li",null,[e(s,{to:"/doc/ognl.html"},{default:l(()=>[M]),_:1}),L]),o("li",null,[e(s,{to:"/doc/perfcounter.html"},{default:l(()=>[N]),_:1}),C]),o("li",null,[e(s,{to:"/doc/sysenv.html"},{default:l(()=>[R]),_:1}),B]),o("li",null,[e(s,{to:"/doc/sysprop.html"},{default:l(()=>[E]),_:1}),I]),o("li",null,[e(s,{to:"/doc/thread.html"},{default:l(()=>[S]),_:1}),q]),o("li",null,[e(s,{to:"/doc/vmoption.html"},{default:l(()=>[F]),_:1}),G]),o("li",null,[e(s,{to:"/doc/vmtool.html"},{default:l(()=>[P]),_:1}),T])]),z,o("ul",null,[o("li",null,[e(s,{to:"/doc/classloader.html"},{default:l(()=>[D]),_:1}),H]),o("li",null,[e(s,{to:"/doc/classloader-metaspace.html"},{default:l(()=>[K]),_:1}),O]),o("li",null,[e(s,{to:"/doc/dump.html"},{default:l(()=>[Q]),_:1}),U]),o("li",null,[e(s,{to:"/doc/jad.html"},{default:l(()=>[W]),_:1}),X]),o("li",null,[e(s,{to:"/doc/mc.html"},{default:l(()=>[Y]),_:1}),Z,$,tt,ot,et]),o("li",null,[e(s,{to:"/doc/redefine.html"},{default:l(()=>[st]),_:1}),lt,dt,nt]),o("li",null,[e(s,{to:"/doc/retransform.html"},{default:l(()=>[_t]),_:1}),ct,it,ht]),o("li",null,[e(s,{to:"/doc/sc.html"},{default:l(()=>[at]),_:1}),rt]),o("li",null,[e(s,{to:"/doc/sm.html"},{default:l(()=>[ut]),_:1}),mt])]),ft,pt,o("ul",null,[o("li",null,[e(s,{to:"/doc/monitor.html"},{default:l(()=>[bt]),_:1}),gt]),o("li",null,[e(s,{to:"/doc/line.html"},{default:l(()=>[xt]),_:1}),vt]),o("li",null,[e(s,{to:"/doc/stack.html"},{default:l(()=>[jt]),_:1}),yt]),o("li",null,[e(s,{to:"/doc/trace.html"},{default:l(()=>[Vt]),_:1}),kt]),o("li",null,[e(s,{to:"/doc/tt.html"},{default:l(()=>[wt]),_:1}),At]),o("li",null,[e(s,{to:"/doc/watch.html"},{default:l(()=>[Jt]),_:1}),Mt])]),Lt,o("ul",null,[o("li",null,[e(s,{to:"/doc/profiler.html"},{default:l(()=>[Nt]),_:1}),Ct,o("a",Rt,[Bt,e(n)]),Et]),o("li",null,[e(s,{to:"/doc/jfr.html"},{default:l(()=>[It]),_:1}),St])]),qt,o("ul",null,[o("li",null,[e(s,{to:"/doc/auth.html"},{default:l(()=>[Ft]),_:1}),Gt])]),Pt,o("ul",null,[o("li",null,[e(s,{to:"/doc/options.html"},{default:l(()=>[Tt]),_:1}),zt])]),Dt,o("ul",null,[o("li",null,[e(s,{to:"/doc/external-command.html"},{default:l(()=>[Ht]),_:1}),Kt])]),Ot,Qt,o("ul",null,[o("li",null,[e(s,{to:"/doc/grep.html"},{default:l(()=>[Ut]),_:1}),Wt]),Xt,Yt]),Zt,o("p",null,[$t,e(s,{to:"/doc/async.html"},{default:l(()=>[to]),_:1})]),oo,o("ul",null,[o("li",null,[e(s,{to:"/doc/base64.html"},{default:l(()=>[eo]),_:1}),so]),o("li",null,[e(s,{to:"/doc/cat.html"},{default:l(()=>[lo]),_:1}),no]),o("li",null,[e(s,{to:"/doc/cls.html"},{default:l(()=>[_o]),_:1}),co]),o("li",null,[e(s,{to:"/doc/echo.html"},{default:l(()=>[io]),_:1}),ho]),o("li",null,[e(s,{to:"/doc/grep.html"},{default:l(()=>[ao]),_:1}),ro]),o("li",null,[e(s,{to:"/doc/help.html"},{default:l(()=>[uo]),_:1}),mo]),o("li",null,[e(s,{to:"/doc/history.html"},{default:l(()=>[fo]),_:1}),po]),o("li",null,[e(s,{to:"/doc/keymap.html"},{default:l(()=>[bo]),_:1}),go]),o("li",null,[e(s,{to:"/doc/pwd.html"},{default:l(()=>[xo]),_:1}),vo]),o("li",null,[e(s,{to:"/doc/quit.html"},{default:l(()=>[jo]),_:1}),yo]),o("li",null,[e(s,{to:"/doc/reset.html"},{default:l(()=>[Vo]),_:1}),ko]),o("li",null,[e(s,{to:"/doc/session.html"},{default:l(()=>[wo]),_:1}),Ao]),o("li",null,[e(s,{to:"/doc/stop.html"},{default:l(()=>[Jo]),_:1}),Mo]),o("li",null,[e(s,{to:"/doc/tee.html"},{default:l(()=>[Lo]),_:1}),No]),o("li",null,[e(s,{to:"/doc/version.html"},{default:l(()=>[Co]),_:1}),Ro])])])}const qo=_(a,[["render",Bo],["__file","commands.html.vue"]]);export{qo as default}; diff --git a/assets/commands.html.610808a3.js b/assets/commands.html.4d2820b1.js similarity index 91% rename from assets/commands.html.610808a3.js rename to assets/commands.html.4d2820b1.js index f2ce8d4ac..ffe6a8564 100644 --- a/assets/commands.html.610808a3.js +++ b/assets/commands.html.4d2820b1.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-12153166","path":"/en/doc/commands.html","title":"All Commands","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"jvm - related","slug":"jvm-related","link":"#jvm-related","children":[]},{"level":2,"title":"class/classloader - related","slug":"class-classloader-related","link":"#class-classloader-related","children":[]},{"level":2,"title":"monitor/watch/trace - related","slug":"monitor-watch-trace-related","link":"#monitor-watch-trace-related","children":[]},{"level":2,"title":"profiler/flame graph","slug":"profiler-flame-graph","link":"#profiler-flame-graph","children":[]},{"level":2,"title":"authentication","slug":"authentication","link":"#authentication","children":[]},{"level":2,"title":"options","slug":"options","link":"#options","children":[]},{"level":2,"title":"Extension commands","slug":"extension-commands","link":"#extension-commands","children":[]},{"level":2,"title":"pipe","slug":"pipe","link":"#pipe","children":[]},{"level":2,"title":"async jobs","slug":"async-jobs","link":"#async-jobs","children":[]},{"level":2,"title":"Basic Arthas Commands","slug":"basic-arthas-commands","link":"#basic-arthas-commands","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/commands.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-12153166","path":"/en/doc/commands.html","title":"All Commands","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"jvm - related","slug":"jvm-related","link":"#jvm-related","children":[]},{"level":2,"title":"class/classloader - related","slug":"class-classloader-related","link":"#class-classloader-related","children":[]},{"level":2,"title":"monitor/watch/trace - related","slug":"monitor-watch-trace-related","link":"#monitor-watch-trace-related","children":[]},{"level":2,"title":"profiler/flame graph","slug":"profiler-flame-graph","link":"#profiler-flame-graph","children":[]},{"level":2,"title":"authentication","slug":"authentication","link":"#authentication","children":[]},{"level":2,"title":"options","slug":"options","link":"#options","children":[]},{"level":2,"title":"Extension commands","slug":"extension-commands","link":"#extension-commands","children":[]},{"level":2,"title":"pipe","slug":"pipe","link":"#pipe","children":[]},{"level":2,"title":"async jobs","slug":"async-jobs","link":"#async-jobs","children":[]},{"level":2,"title":"Basic Arthas Commands","slug":"basic-arthas-commands","link":"#basic-arthas-commands","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/commands.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/commands.html.85ad84a0.js b/assets/commands.html.f93b9fc8.js similarity index 92% rename from assets/commands.html.85ad84a0.js rename to assets/commands.html.f93b9fc8.js index b12d95ed9..74faa59f2 100644 --- a/assets/commands.html.85ad84a0.js +++ b/assets/commands.html.f93b9fc8.js @@ -1 +1 @@ -const l=JSON.parse('{"key":"v-5ed4d0e1","path":"/doc/commands.html","title":"\u547D\u4EE4\u5217\u8868","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"jvm \u76F8\u5173","slug":"jvm-\u76F8\u5173","link":"#jvm-\u76F8\u5173","children":[]},{"level":2,"title":"class/classloader \u76F8\u5173","slug":"class-classloader-\u76F8\u5173","link":"#class-classloader-\u76F8\u5173","children":[]},{"level":2,"title":"monitor/watch/trace \u76F8\u5173","slug":"monitor-watch-trace-\u76F8\u5173","link":"#monitor-watch-trace-\u76F8\u5173","children":[]},{"level":2,"title":"profiler/\u706B\u7130\u56FE","slug":"profiler-\u706B\u7130\u56FE","link":"#profiler-\u706B\u7130\u56FE","children":[]},{"level":2,"title":"\u9274\u6743","slug":"\u9274\u6743","link":"#\u9274\u6743","children":[]},{"level":2,"title":"options","slug":"options","link":"#options","children":[]},{"level":2,"title":"\u6269\u5C55\u547D\u4EE4","slug":"\u6269\u5C55\u547D\u4EE4","link":"#\u6269\u5C55\u547D\u4EE4","children":[]},{"level":2,"title":"\u7BA1\u9053","slug":"\u7BA1\u9053","link":"#\u7BA1\u9053","children":[]},{"level":2,"title":"\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1","slug":"\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1","link":"#\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1","children":[]},{"level":2,"title":"\u57FA\u7840\u547D\u4EE4","slug":"\u57FA\u7840\u547D\u4EE4","link":"#\u57FA\u7840\u547D\u4EE4","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/commands.md","version":"4.3.3"}');export{l as data}; +const l=JSON.parse('{"key":"v-5ed4d0e1","path":"/doc/commands.html","title":"\u547D\u4EE4\u5217\u8868","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"jvm \u76F8\u5173","slug":"jvm-\u76F8\u5173","link":"#jvm-\u76F8\u5173","children":[]},{"level":2,"title":"class/classloader \u76F8\u5173","slug":"class-classloader-\u76F8\u5173","link":"#class-classloader-\u76F8\u5173","children":[]},{"level":2,"title":"monitor/watch/trace \u76F8\u5173","slug":"monitor-watch-trace-\u76F8\u5173","link":"#monitor-watch-trace-\u76F8\u5173","children":[]},{"level":2,"title":"profiler/\u706B\u7130\u56FE","slug":"profiler-\u706B\u7130\u56FE","link":"#profiler-\u706B\u7130\u56FE","children":[]},{"level":2,"title":"\u9274\u6743","slug":"\u9274\u6743","link":"#\u9274\u6743","children":[]},{"level":2,"title":"options","slug":"options","link":"#options","children":[]},{"level":2,"title":"\u6269\u5C55\u547D\u4EE4","slug":"\u6269\u5C55\u547D\u4EE4","link":"#\u6269\u5C55\u547D\u4EE4","children":[]},{"level":2,"title":"\u7BA1\u9053","slug":"\u7BA1\u9053","link":"#\u7BA1\u9053","children":[]},{"level":2,"title":"\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1","slug":"\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1","link":"#\u540E\u53F0\u5F02\u6B65\u4EFB\u52A1","children":[]},{"level":2,"title":"\u57FA\u7840\u547D\u4EE4","slug":"\u57FA\u7840\u547D\u4EE4","link":"#\u57FA\u7840\u547D\u4EE4","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/commands.md","version":"4.3.5"}');export{l as data}; diff --git a/assets/contact-us.html.f45ccfc1.js b/assets/contact-us.html.bca72555.js similarity index 98% rename from assets/contact-us.html.f45ccfc1.js rename to assets/contact-us.html.bca72555.js index c64205b0d..f2e67b980 100644 --- a/assets/contact-us.html.f45ccfc1.js +++ b/assets/contact-us.html.bca72555.js @@ -1 +1 @@ -import{_ as r,a as i,b as o,c as n,d as h,e as c}from"./qqgroup3_qr.a24fdd88.js";import{_ as l,o as _,c as d,a,b as t,e,d as p,r as u}from"./app.524ecf5c.js";const m="/images/qrcode_gongzhonghao.jpg",g="/images/qqgroup2_qr.jpg",f={},b=a("h1",{id:"\u8054\u7CFB\u6211\u4EEC",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u8054\u7CFB\u6211\u4EEC","aria-hidden":"true"},"#"),e(" \u8054\u7CFB\u6211\u4EEC")],-1),x=a("h3",{id:"\u62DB\u8058",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u62DB\u8058","aria-hidden":"true"},"#"),e(" \u62DB\u8058")],-1),q={href:"https://mp.weixin.qq.com/s/XQv8GnqGT3pzceVwzeiy-A",target:"_blank",rel:"noopener noreferrer"},A=e("\u671F\u5F85\u4F60\u7684\u52A0\u5165"),Q=a("h3",{id:"issues",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#issues","aria-hidden":"true"},"#"),e(" Issues")],-1),k=e("\u4F7F\u7528\u7591\u95EE\uFF0C\u610F\u89C1\u53EF\u4EE5\u76F4\u63A5\u5728 Issues \u91CC\u63D0\u51FA\uFF1A "),V={href:"https://github.com/alibaba/arthas/issues",target:"_blank",rel:"noopener noreferrer"},v=e("https://github.com/alibaba/arthas/issues"),I=p('

\u5FAE\u4FE1\u516C\u4F17\u53F7

\u6B22\u8FCE\u5173\u6CE8\u516C\u4F17\u53F7\uFF0C\u83B7\u53D6 Arthas \u9879\u76EE\u7684\u4FE1\u606F\u3001\u6E90\u7801\u5206\u6790\u3001\u6848\u4F8B\u5B9E\u8DF5\u3002

\u9489\u9489\u7FA4

  • Arthas \u5F00\u6E90\u4EA4\u6D41\u9489\u9489\u7FA4\uFF1A 21965291 \uFF0C\u641C\u7D22\u7FA4\u53F7\u5373\u53EF\u52A0\u5165\u3002\uFF08\u5982\u679C\u6EE1\u4E86\u65E0\u6CD5\u52A0\u5165\uFF0C\u8BF7\u52A0 4 \u7FA4\uFF09

  • Arthas \u5F00\u6E90\u4EA4\u6D41\u9489\u9489\u7FA4 2\uFF1A 30707824 \uFF0C\u641C\u7D22\u7FA4\u53F7\u5373\u53EF\u52A0\u5165\u3002\uFF08\u5982\u679C\u6EE1\u4E86\u65E0\u6CD5\u52A0\u5165\uFF0C\u8BF7\u52A0 4 \u7FA4\uFF09

  • Arthas \u5F00\u6E90\u4EA4\u6D41\u9489\u9489\u7FA4 3\uFF1A 17605006847 \uFF0C\u641C\u7D22\u7FA4\u53F7\u5373\u53EF\u52A0\u5165\u3002\uFF08\u5982\u679C\u6EE1\u4E86\u65E0\u6CD5\u52A0\u5165\uFF0C\u8BF7\u52A0 4 \u7FA4\uFF09

  • Arthas \u5F00\u6E90\u4EA4\u6D41\u9489\u9489\u7FA4 4\uFF1A 41920010710 \uFF0C\u641C\u7D22\u7FA4\u53F7\u5373\u53EF\u52A0\u5165\u3002

QQ \u7FA4

Arthas \u5F00\u6E90\u4EA4\u6D41 QQ \u7FA4\uFF1A 916328269 \uFF08\u5982\u679C\u6EE1\u4E86\u65E0\u6CD5\u52A0\u5165\uFF0C\u8BF7\u52A0 3 \u7FA4\uFF09

Arthas \u5F00\u6E90\u4EA4\u6D41 QQ \u7FA4 2\uFF1A 854625984

Arthas \u5F00\u6E90\u4EA4\u6D41 QQ \u7FA4 3\uFF1A 672077388

',19);function N(z,B){const s=u("ExternalLinkIcon");return _(),d("div",null,[b,x,a("ul",null,[a("li",null,[a("a",q,[A,t(s)])])]),Q,a("p",null,[k,a("a",V,[v,t(s)])]),I])}const w=l(f,[["render",N],["__file","contact-us.html.vue"]]);export{w as default}; +import{_ as r,a as i,b as o,c as n,d as h,e as c}from"./qqgroup3_qr.a24fdd88.js";import{_ as l,o as _,c as d,a,b as t,e,d as p,r as u}from"./app.e2427bec.js";const m="/images/qrcode_gongzhonghao.jpg",g="/images/qqgroup2_qr.jpg",f={},b=a("h1",{id:"\u8054\u7CFB\u6211\u4EEC",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u8054\u7CFB\u6211\u4EEC","aria-hidden":"true"},"#"),e(" \u8054\u7CFB\u6211\u4EEC")],-1),x=a("h3",{id:"\u62DB\u8058",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u62DB\u8058","aria-hidden":"true"},"#"),e(" \u62DB\u8058")],-1),q={href:"https://mp.weixin.qq.com/s/XQv8GnqGT3pzceVwzeiy-A",target:"_blank",rel:"noopener noreferrer"},A=e("\u671F\u5F85\u4F60\u7684\u52A0\u5165"),Q=a("h3",{id:"issues",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#issues","aria-hidden":"true"},"#"),e(" Issues")],-1),k=e("\u4F7F\u7528\u7591\u95EE\uFF0C\u610F\u89C1\u53EF\u4EE5\u76F4\u63A5\u5728 Issues \u91CC\u63D0\u51FA\uFF1A "),V={href:"https://github.com/alibaba/arthas/issues",target:"_blank",rel:"noopener noreferrer"},v=e("https://github.com/alibaba/arthas/issues"),I=p('

\u5FAE\u4FE1\u516C\u4F17\u53F7

\u6B22\u8FCE\u5173\u6CE8\u516C\u4F17\u53F7\uFF0C\u83B7\u53D6 Arthas \u9879\u76EE\u7684\u4FE1\u606F\u3001\u6E90\u7801\u5206\u6790\u3001\u6848\u4F8B\u5B9E\u8DF5\u3002

\u9489\u9489\u7FA4

  • Arthas \u5F00\u6E90\u4EA4\u6D41\u9489\u9489\u7FA4\uFF1A 21965291 \uFF0C\u641C\u7D22\u7FA4\u53F7\u5373\u53EF\u52A0\u5165\u3002\uFF08\u5982\u679C\u6EE1\u4E86\u65E0\u6CD5\u52A0\u5165\uFF0C\u8BF7\u52A0 4 \u7FA4\uFF09

  • Arthas \u5F00\u6E90\u4EA4\u6D41\u9489\u9489\u7FA4 2\uFF1A 30707824 \uFF0C\u641C\u7D22\u7FA4\u53F7\u5373\u53EF\u52A0\u5165\u3002\uFF08\u5982\u679C\u6EE1\u4E86\u65E0\u6CD5\u52A0\u5165\uFF0C\u8BF7\u52A0 4 \u7FA4\uFF09

  • Arthas \u5F00\u6E90\u4EA4\u6D41\u9489\u9489\u7FA4 3\uFF1A 17605006847 \uFF0C\u641C\u7D22\u7FA4\u53F7\u5373\u53EF\u52A0\u5165\u3002\uFF08\u5982\u679C\u6EE1\u4E86\u65E0\u6CD5\u52A0\u5165\uFF0C\u8BF7\u52A0 4 \u7FA4\uFF09

  • Arthas \u5F00\u6E90\u4EA4\u6D41\u9489\u9489\u7FA4 4\uFF1A 41920010710 \uFF0C\u641C\u7D22\u7FA4\u53F7\u5373\u53EF\u52A0\u5165\u3002

QQ \u7FA4

Arthas \u5F00\u6E90\u4EA4\u6D41 QQ \u7FA4\uFF1A 916328269 \uFF08\u5982\u679C\u6EE1\u4E86\u65E0\u6CD5\u52A0\u5165\uFF0C\u8BF7\u52A0 3 \u7FA4\uFF09

Arthas \u5F00\u6E90\u4EA4\u6D41 QQ \u7FA4 2\uFF1A 854625984

Arthas \u5F00\u6E90\u4EA4\u6D41 QQ \u7FA4 3\uFF1A 672077388

',19);function N(z,B){const s=u("ExternalLinkIcon");return _(),d("div",null,[b,x,a("ul",null,[a("li",null,[a("a",q,[A,t(s)])])]),Q,a("p",null,[k,a("a",V,[v,t(s)])]),I])}const w=l(f,[["render",N],["__file","contact-us.html.vue"]]);export{w as default}; diff --git a/assets/contact-us.html.490c3a5d.js b/assets/contact-us.html.c13483a2.js similarity index 97% rename from assets/contact-us.html.490c3a5d.js rename to assets/contact-us.html.c13483a2.js index 847794fa4..8d5db7c9b 100644 --- a/assets/contact-us.html.490c3a5d.js +++ b/assets/contact-us.html.c13483a2.js @@ -1 +1 @@ -import{_ as a,a as i,b as t,c,d as u,e as p}from"./qqgroup3_qr.a24fdd88.js";import{_ as d,o as l,c as h,a as s,b as r,e as o,d as e,r as _}from"./app.524ecf5c.js";const g="/images/dingding_group_search.png",m={},b=s("h1",{id:"contact-us",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#contact-us","aria-hidden":"true"},"#"),o(" Contact Us")],-1),f=s("h3",{id:"issues",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#issues","aria-hidden":"true"},"#"),o(" Issues")],-1),k=o("Questions about how to use Arthas and opinions can be directly raised in issues\uFF1A "),x={href:"https://github.com/alibaba/arthas/issues",target:"_blank",rel:"noopener noreferrer"},A=o("https://github.com/alibaba/arthas/issues"),Q=e('

DingDing Group

  • Arthas open source discussion Group\uFF1A 21965291 \uFF0CYou can join by searching for group number\u3002

  • Arthas open source discussion Group 2\uFF1A 30707824 \uFF0CYou can join by searching for group number\u3002

  • Arthas open source discussion Group 3\uFF1A 17605006847 , You can join by searching for group number\u3002

  • Arthas open source discussion Group 4\uFF1A 41920010710 , You can join by searching for group number\u3002

Instructions for Installing DingTalk

',10),w=o("DingTalk can be downloaded from: "),y={href:"https://page.dingtalk.com/wow/dingtalk/act/en-download",target:"_blank",rel:"noopener noreferrer"},G=o("https://www.dingtalk.com/en"),j=e('

After installing you can search for group number and join it.

QQ Group

Arthas open source discussion QQ group\uFF1A916328269

Arthas open source discussion QQ group2\uFF1A854625984

Arthas open source discussion QQ group 3\uFF1A 672077388

',8);function I(q,D){const n=_("ExternalLinkIcon");return l(),h("div",null,[b,f,s("p",null,[k,s("a",x,[A,r(n)])]),Q,s("p",null,[w,s("a",y,[G,r(n)])]),j])}const Y=d(m,[["render",I],["__file","contact-us.html.vue"]]);export{Y as default}; +import{_ as a,a as i,b as t,c,d as u,e as p}from"./qqgroup3_qr.a24fdd88.js";import{_ as d,o as l,c as h,a as s,b as r,e as o,d as e,r as _}from"./app.e2427bec.js";const g="/images/dingding_group_search.png",m={},b=s("h1",{id:"contact-us",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#contact-us","aria-hidden":"true"},"#"),o(" Contact Us")],-1),f=s("h3",{id:"issues",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#issues","aria-hidden":"true"},"#"),o(" Issues")],-1),k=o("Questions about how to use Arthas and opinions can be directly raised in issues\uFF1A "),x={href:"https://github.com/alibaba/arthas/issues",target:"_blank",rel:"noopener noreferrer"},A=o("https://github.com/alibaba/arthas/issues"),Q=e('

DingDing Group

  • Arthas open source discussion Group\uFF1A 21965291 \uFF0CYou can join by searching for group number\u3002

  • Arthas open source discussion Group 2\uFF1A 30707824 \uFF0CYou can join by searching for group number\u3002

  • Arthas open source discussion Group 3\uFF1A 17605006847 , You can join by searching for group number\u3002

  • Arthas open source discussion Group 4\uFF1A 41920010710 , You can join by searching for group number\u3002

Instructions for Installing DingTalk

',10),w=o("DingTalk can be downloaded from: "),y={href:"https://page.dingtalk.com/wow/dingtalk/act/en-download",target:"_blank",rel:"noopener noreferrer"},G=o("https://www.dingtalk.com/en"),j=e('

After installing you can search for group number and join it.

QQ Group

Arthas open source discussion QQ group\uFF1A916328269

Arthas open source discussion QQ group2\uFF1A854625984

Arthas open source discussion QQ group 3\uFF1A 672077388

',8);function I(q,D){const n=_("ExternalLinkIcon");return l(),h("div",null,[b,f,s("p",null,[k,s("a",x,[A,r(n)])]),Q,s("p",null,[w,s("a",y,[G,r(n)])]),j])}const Y=d(m,[["render",I],["__file","contact-us.html.vue"]]);export{Y as default}; diff --git a/assets/contact-us.html.e7c63609.js b/assets/contact-us.html.f14b9ed1.js similarity index 80% rename from assets/contact-us.html.e7c63609.js rename to assets/contact-us.html.f14b9ed1.js index 4d23bc986..6eb764b21 100644 --- a/assets/contact-us.html.e7c63609.js +++ b/assets/contact-us.html.f14b9ed1.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-3992adde","path":"/doc/contact-us.html","title":"\u8054\u7CFB\u6211\u4EEC","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"\u62DB\u8058","slug":"\u62DB\u8058","link":"#\u62DB\u8058","children":[]},{"level":3,"title":"Issues","slug":"issues","link":"#issues","children":[]},{"level":3,"title":"\u5FAE\u4FE1\u516C\u4F17\u53F7","slug":"\u5FAE\u4FE1\u516C\u4F17\u53F7","link":"#\u5FAE\u4FE1\u516C\u4F17\u53F7","children":[]},{"level":3,"title":"\u9489\u9489\u7FA4","slug":"\u9489\u9489\u7FA4","link":"#\u9489\u9489\u7FA4","children":[]},{"level":3,"title":"QQ \u7FA4","slug":"qq-\u7FA4","link":"#qq-\u7FA4","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/contact-us.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-3992adde","path":"/doc/contact-us.html","title":"\u8054\u7CFB\u6211\u4EEC","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"\u62DB\u8058","slug":"\u62DB\u8058","link":"#\u62DB\u8058","children":[]},{"level":3,"title":"Issues","slug":"issues","link":"#issues","children":[]},{"level":3,"title":"\u5FAE\u4FE1\u516C\u4F17\u53F7","slug":"\u5FAE\u4FE1\u516C\u4F17\u53F7","link":"#\u5FAE\u4FE1\u516C\u4F17\u53F7","children":[]},{"level":3,"title":"\u9489\u9489\u7FA4","slug":"\u9489\u9489\u7FA4","link":"#\u9489\u9489\u7FA4","children":[]},{"level":3,"title":"QQ \u7FA4","slug":"qq-\u7FA4","link":"#qq-\u7FA4","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/contact-us.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/contact-us.html.3dfc329b.js b/assets/contact-us.html.f31aa912.js similarity index 83% rename from assets/contact-us.html.3dfc329b.js rename to assets/contact-us.html.f31aa912.js index 43bd58548..5fa325dc5 100644 --- a/assets/contact-us.html.3dfc329b.js +++ b/assets/contact-us.html.f31aa912.js @@ -1 +1 @@ -const n=JSON.parse('{"key":"v-4be7594a","path":"/en/doc/contact-us.html","title":"Contact Us","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"Issues","slug":"issues","link":"#issues","children":[]},{"level":3,"title":"DingDing Group","slug":"dingding-group","link":"#dingding-group","children":[]},{"level":3,"title":"Instructions for Installing DingTalk","slug":"instructions-for-installing-dingtalk","link":"#instructions-for-installing-dingtalk","children":[]},{"level":3,"title":"QQ Group","slug":"qq-group","link":"#qq-group","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/contact-us.md","version":"4.3.3"}');export{n as data}; +const n=JSON.parse('{"key":"v-4be7594a","path":"/en/doc/contact-us.html","title":"Contact Us","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"Issues","slug":"issues","link":"#issues","children":[]},{"level":3,"title":"DingDing Group","slug":"dingding-group","link":"#dingding-group","children":[]},{"level":3,"title":"Instructions for Installing DingTalk","slug":"instructions-for-installing-dingtalk","link":"#instructions-for-installing-dingtalk","children":[]},{"level":3,"title":"QQ Group","slug":"qq-group","link":"#qq-group","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/contact-us.md","version":"4.3.5"}');export{n as data}; diff --git a/assets/dashboard.html.b6965a28.js b/assets/dashboard.html.113af276.js similarity index 91% rename from assets/dashboard.html.b6965a28.js rename to assets/dashboard.html.113af276.js index b1223f478..24ab7d4f8 100644 --- a/assets/dashboard.html.b6965a28.js +++ b/assets/dashboard.html.113af276.js @@ -1,4 +1,4 @@ -import{_ as n}from"./dashboard.eb1e1fee.js";import{_ as d,o as l,c as s,a as e,b as t,e as a,d as r,r as c}from"./app.524ecf5c.js";const o={},h=e("h1",{id:"dashboard",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#dashboard","aria-hidden":"true"},"#"),a(" dashboard")],-1),m={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-dashboard",target:"_blank",rel:"noopener noreferrer"},u=e("code",null,"dashboard",-1),v=a("\u5728\u7EBF\u6559\u7A0B"),b=r(`

\u63D0\u793A

\u5F53\u524D\u7CFB\u7EDF\u7684\u5B9E\u65F6\u6570\u636E\u9762\u677F\uFF0C\u6309 ctrl+c \u9000\u51FA\u3002

\u5F53\u8FD0\u884C\u5728 Ali-tomcat \u65F6\uFF0C\u4F1A\u663E\u793A\u5F53\u524D tomcat \u7684\u5B9E\u65F6\u4FE1\u606F\uFF0C\u5982 HTTP \u8BF7\u6C42\u7684 qps, rt, \u9519\u8BEF\u6570, \u7EBF\u7A0B\u6C60\u4FE1\u606F\u7B49\u7B49\u3002

\u53C2\u6570\u8BF4\u660E

\u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
[i:]\u5237\u65B0\u5B9E\u65F6\u6570\u636E\u7684\u65F6\u95F4\u95F4\u9694 (ms)\uFF0C\u9ED8\u8BA4 5000ms
[n:]\u5237\u65B0\u5B9E\u65F6\u6570\u636E\u7684\u6B21\u6570

\u4F7F\u7528\u53C2\u8003

$ dashboard
+import{_ as e}from"./dashboard.eb1e1fee.js";import{_ as i,o as a,c as l,d}from"./app.e2427bec.js";const n={},s=d(`

dashboard

\u63D0\u793A

\u5F53\u524D\u7CFB\u7EDF\u7684\u5B9E\u65F6\u6570\u636E\u9762\u677F\uFF0C\u6309 ctrl+c \u9000\u51FA\u3002

\u5F53\u8FD0\u884C\u5728 Ali-tomcat \u65F6\uFF0C\u4F1A\u663E\u793A\u5F53\u524D tomcat \u7684\u5B9E\u65F6\u4FE1\u606F\uFF0C\u5982 HTTP \u8BF7\u6C42\u7684 qps, rt, \u9519\u8BEF\u6570, \u7EBF\u7A0B\u6C60\u4FE1\u606F\u7B49\u7B49\u3002

\u53C2\u6570\u8BF4\u660E

\u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
[i:]\u5237\u65B0\u5B9E\u65F6\u6570\u636E\u7684\u65F6\u95F4\u95F4\u9694 (ms)\uFF0C\u9ED8\u8BA4 5000ms
[n:]\u5237\u65B0\u5B9E\u65F6\u6570\u636E\u7684\u6B21\u6570

\u4F7F\u7528\u53C2\u8003

$ dashboard
 ID   NAME                           GROUP           PRIORITY   STATE     %CPU      DELTA_TIME TIME      INTERRUPTE DAEMON
 -1   C2 CompilerThread0             -               -1         -         1.55      0.077      0:8.684   false      true
 53   Timer-for-arthas-dashboard-07b system          5          RUNNABLE  0.08      0.004      0:0.004   false      true
@@ -30,4 +30,4 @@ java.home                                                      /Library/Java/Jav
 systemload.average                                             10.68
 processors                                                     8
 uptime                                                         272s
-

\u6570\u636E\u8BF4\u660E

  • ID: Java \u7EA7\u522B\u7684\u7EBF\u7A0B ID\uFF0C\u6CE8\u610F\u8FD9\u4E2A ID \u4E0D\u80FD\u8DDF jstack \u4E2D\u7684 nativeID \u4E00\u4E00\u5BF9\u5E94\u3002
  • NAME: \u7EBF\u7A0B\u540D
  • GROUP: \u7EBF\u7A0B\u7EC4\u540D
  • PRIORITY: \u7EBF\u7A0B\u4F18\u5148\u7EA7, 1~10 \u4E4B\u95F4\u7684\u6570\u5B57\uFF0C\u8D8A\u5927\u8868\u793A\u4F18\u5148\u7EA7\u8D8A\u9AD8
  • STATE: \u7EBF\u7A0B\u7684\u72B6\u6001
  • CPU%: \u7EBF\u7A0B\u7684 cpu \u4F7F\u7528\u7387\u3002\u6BD4\u5982\u91C7\u6837\u95F4\u9694 1000ms\uFF0C\u67D0\u4E2A\u7EBF\u7A0B\u7684\u589E\u91CF cpu \u65F6\u95F4\u4E3A 100ms\uFF0C\u5219 cpu \u4F7F\u7528\u7387=100/1000=10%
  • DELTA_TIME: \u4E0A\u6B21\u91C7\u6837\u4E4B\u540E\u7EBF\u7A0B\u8FD0\u884C\u589E\u91CF CPU \u65F6\u95F4\uFF0C\u6570\u636E\u683C\u5F0F\u4E3A\u79D2
  • TIME: \u7EBF\u7A0B\u8FD0\u884C\u603B CPU \u65F6\u95F4\uFF0C\u6570\u636E\u683C\u5F0F\u4E3A\u5206:\u79D2
  • INTERRUPTED: \u7EBF\u7A0B\u5F53\u524D\u7684\u4E2D\u65AD\u4F4D\u72B6\u6001
  • DAEMON: \u662F\u5426\u662F daemon \u7EBF\u7A0B

JVM \u5185\u90E8\u7EBF\u7A0B

Java 8 \u4E4B\u540E\u652F\u6301\u83B7\u53D6 JVM \u5185\u90E8\u7EBF\u7A0B CPU \u65F6\u95F4\uFF0C\u8FD9\u4E9B\u7EBF\u7A0B\u53EA\u6709\u540D\u79F0\u548C CPU \u65F6\u95F4\uFF0C\u6CA1\u6709 ID \u53CA\u72B6\u6001\u7B49\u4FE1\u606F\uFF08\u663E\u793A ID \u4E3A-1\uFF09\u3002 \u901A\u8FC7\u5185\u90E8\u7EBF\u7A0B\u53EF\u4EE5\u89C2\u6D4B\u5230 JVM \u6D3B\u52A8\uFF0C\u5982 GC\u3001JIT \u7F16\u8BD1\u7B49\u5360\u7528 CPU \u60C5\u51B5\uFF0C\u65B9\u4FBF\u4E86\u89E3 JVM \u6574\u4F53\u8FD0\u884C\u72B6\u51B5\u3002

  • \u5F53 JVM \u5806(heap)/\u5143\u6570\u636E(metaspace)\u7A7A\u95F4\u4E0D\u8DB3\u6216 OOM \u65F6\uFF0C\u53EF\u4EE5\u770B\u5230 GC \u7EBF\u7A0B\u7684 CPU \u5360\u7528\u7387\u660E\u663E\u9AD8\u4E8E\u5176\u4ED6\u7684\u7EBF\u7A0B\u3002
  • \u5F53\u6267\u884Ctrace/watch/tt/redefine\u7B49\u547D\u4EE4\u540E\uFF0C\u53EF\u4EE5\u770B\u5230 JIT \u7EBF\u7A0B\u6D3B\u52A8\u53D8\u5F97\u66F4\u9891\u7E41\u3002\u56E0\u4E3A JVM \u70ED\u66F4\u65B0 class \u5B57\u8282\u7801\u65F6\u6E05\u9664\u4E86\u6B64 class \u76F8\u5173\u7684 JIT \u7F16\u8BD1\u7ED3\u679C\uFF0C\u9700\u8981\u91CD\u65B0\u7F16\u8BD1\u3002

JVM \u5185\u90E8\u7EBF\u7A0B\u5305\u62EC\u4E0B\u9762\u51E0\u79CD\uFF1A

  • JIT \u7F16\u8BD1\u7EBF\u7A0B: \u5982 C1 CompilerThread0, C2 CompilerThread0
  • GC \u7EBF\u7A0B: \u5982GC Thread0, G1 Young RemSet Sampling
  • \u5176\u5B83\u5185\u90E8\u7EBF\u7A0B: \u5982VM Periodic Task Thread, VM Thread, Service Thread

\u622A\u56FE\u5C55\u793A

',15);function p(_,T){const i=c("ExternalLinkIcon");return l(),s("div",null,[h,e("p",null,[e("a",m,[u,v,t(i)])]),b])}const g=d(o,[["render",p],["__file","dashboard.html.vue"]]);export{g as default}; +

\u6570\u636E\u8BF4\u660E

  • ID: Java \u7EA7\u522B\u7684\u7EBF\u7A0B ID\uFF0C\u6CE8\u610F\u8FD9\u4E2A ID \u4E0D\u80FD\u8DDF jstack \u4E2D\u7684 nativeID \u4E00\u4E00\u5BF9\u5E94\u3002
  • NAME: \u7EBF\u7A0B\u540D
  • GROUP: \u7EBF\u7A0B\u7EC4\u540D
  • PRIORITY: \u7EBF\u7A0B\u4F18\u5148\u7EA7, 1~10 \u4E4B\u95F4\u7684\u6570\u5B57\uFF0C\u8D8A\u5927\u8868\u793A\u4F18\u5148\u7EA7\u8D8A\u9AD8
  • STATE: \u7EBF\u7A0B\u7684\u72B6\u6001
  • CPU%: \u7EBF\u7A0B\u7684 cpu \u4F7F\u7528\u7387\u3002\u6BD4\u5982\u91C7\u6837\u95F4\u9694 1000ms\uFF0C\u67D0\u4E2A\u7EBF\u7A0B\u7684\u589E\u91CF cpu \u65F6\u95F4\u4E3A 100ms\uFF0C\u5219 cpu \u4F7F\u7528\u7387=100/1000=10%
  • DELTA_TIME: \u4E0A\u6B21\u91C7\u6837\u4E4B\u540E\u7EBF\u7A0B\u8FD0\u884C\u589E\u91CF CPU \u65F6\u95F4\uFF0C\u6570\u636E\u683C\u5F0F\u4E3A\u79D2
  • TIME: \u7EBF\u7A0B\u8FD0\u884C\u603B CPU \u65F6\u95F4\uFF0C\u6570\u636E\u683C\u5F0F\u4E3A\u5206:\u79D2
  • INTERRUPTED: \u7EBF\u7A0B\u5F53\u524D\u7684\u4E2D\u65AD\u4F4D\u72B6\u6001
  • DAEMON: \u662F\u5426\u662F daemon \u7EBF\u7A0B

JVM \u5185\u90E8\u7EBF\u7A0B

Java 8 \u4E4B\u540E\u652F\u6301\u83B7\u53D6 JVM \u5185\u90E8\u7EBF\u7A0B CPU \u65F6\u95F4\uFF0C\u8FD9\u4E9B\u7EBF\u7A0B\u53EA\u6709\u540D\u79F0\u548C CPU \u65F6\u95F4\uFF0C\u6CA1\u6709 ID \u53CA\u72B6\u6001\u7B49\u4FE1\u606F\uFF08\u663E\u793A ID \u4E3A-1\uFF09\u3002 \u901A\u8FC7\u5185\u90E8\u7EBF\u7A0B\u53EF\u4EE5\u89C2\u6D4B\u5230 JVM \u6D3B\u52A8\uFF0C\u5982 GC\u3001JIT \u7F16\u8BD1\u7B49\u5360\u7528 CPU \u60C5\u51B5\uFF0C\u65B9\u4FBF\u4E86\u89E3 JVM \u6574\u4F53\u8FD0\u884C\u72B6\u51B5\u3002

  • \u5F53 JVM \u5806(heap)/\u5143\u6570\u636E(metaspace)\u7A7A\u95F4\u4E0D\u8DB3\u6216 OOM \u65F6\uFF0C\u53EF\u4EE5\u770B\u5230 GC \u7EBF\u7A0B\u7684 CPU \u5360\u7528\u7387\u660E\u663E\u9AD8\u4E8E\u5176\u4ED6\u7684\u7EBF\u7A0B\u3002
  • \u5F53\u6267\u884Ctrace/watch/tt/redefine\u7B49\u547D\u4EE4\u540E\uFF0C\u53EF\u4EE5\u770B\u5230 JIT \u7EBF\u7A0B\u6D3B\u52A8\u53D8\u5F97\u66F4\u9891\u7E41\u3002\u56E0\u4E3A JVM \u70ED\u66F4\u65B0 class \u5B57\u8282\u7801\u65F6\u6E05\u9664\u4E86\u6B64 class \u76F8\u5173\u7684 JIT \u7F16\u8BD1\u7ED3\u679C\uFF0C\u9700\u8981\u91CD\u65B0\u7F16\u8BD1\u3002

JVM \u5185\u90E8\u7EBF\u7A0B\u5305\u62EC\u4E0B\u9762\u51E0\u79CD\uFF1A

  • JIT \u7F16\u8BD1\u7EBF\u7A0B: \u5982 C1 CompilerThread0, C2 CompilerThread0
  • GC \u7EBF\u7A0B: \u5982GC Thread0, G1 Young RemSet Sampling
  • \u5176\u5B83\u5185\u90E8\u7EBF\u7A0B: \u5982VM Periodic Task Thread, VM Thread, Service Thread

\u622A\u56FE\u5C55\u793A

',16),t=[s];function r(c,o){return a(),l("div",null,t)}const h=i(n,[["render",r],["__file","dashboard.html.vue"]]);export{h as default}; diff --git a/assets/dashboard.html.14eaa588.js b/assets/dashboard.html.1a8e32e4.js similarity index 84% rename from assets/dashboard.html.14eaa588.js rename to assets/dashboard.html.1a8e32e4.js index 5f12e62f3..f913ef8a6 100644 --- a/assets/dashboard.html.14eaa588.js +++ b/assets/dashboard.html.1a8e32e4.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-79107649","path":"/en/doc/dashboard.html","title":"dashboard","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Options","slug":"options","link":"#options","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]},{"level":2,"title":"Notes on column headers","slug":"notes-on-column-headers","link":"#notes-on-column-headers","children":[{"level":3,"title":"JVM internal threads","slug":"jvm-internal-threads","link":"#jvm-internal-threads","children":[]}]},{"level":2,"title":"Screenshot","slug":"screenshot","link":"#screenshot","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/dashboard.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-79107649","path":"/en/doc/dashboard.html","title":"dashboard","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Options","slug":"options","link":"#options","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]},{"level":2,"title":"Notes on column headers","slug":"notes-on-column-headers","link":"#notes-on-column-headers","children":[{"level":3,"title":"JVM internal threads","slug":"jvm-internal-threads","link":"#jvm-internal-threads","children":[]}]},{"level":2,"title":"Screenshot","slug":"screenshot","link":"#screenshot","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/dashboard.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/dashboard.html.9ad443d2.js b/assets/dashboard.html.981a5405.js similarity index 77% rename from assets/dashboard.html.9ad443d2.js rename to assets/dashboard.html.981a5405.js index cb05c7693..61c846229 100644 --- a/assets/dashboard.html.9ad443d2.js +++ b/assets/dashboard.html.981a5405.js @@ -1,4 +1,4 @@ -import{_ as n}from"./dashboard.eb1e1fee.js";import{_ as s,o as r,c as d,a as e,b as i,e as a,d as l,r as o}from"./app.524ecf5c.js";const c={},h=e("h1",{id:"dashboard",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#dashboard","aria-hidden":"true"},"#"),a(" dashboard")],-1),u={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-dashboard",target:"_blank",rel:"noopener noreferrer"},m=e("code",null,"dashboard",-1),v=a(" online tutorial"),p=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"TIP"),e("p",null,[a("This is the real time statistics dashboard for the current system, press "),e("code",null,"Ctrl+C"),a(" to exit.")])],-1),b=a("When running in Apache Tomcat Alibaba edition, the dashboard will also present the real time statistics of the tomcat, including "),f={href:"https://en.wikipedia.org/wiki/Queries_per_second",target:"_blank",rel:"noopener noreferrer"},g=a("QPS"),_=a(", RT, error counts, and thread pool, etc."),T=l(`

Options

NameSpecification
[i:]The interval (in ms) between two executions, default is 5000 ms.
[n:]The number of times this command will be executed.

Usage

$ dashboard
+import{_ as i}from"./dashboard.eb1e1fee.js";import{_ as n,o as s,c as r,a as e,b as d,e as a,d as l,r as o}from"./app.e2427bec.js";const c={},h=e("h1",{id:"dashboard",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#dashboard","aria-hidden":"true"},"#"),a(" dashboard")],-1),m=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"TIP"),e("p",null,[a("This is the real time statistics dashboard for the current system, press "),e("code",null,"Ctrl+C"),a(" to exit.")])],-1),u=a("When running in Apache Tomcat Alibaba edition, the dashboard will also present the real time statistics of the tomcat, including "),v={href:"https://en.wikipedia.org/wiki/Queries_per_second",target:"_blank",rel:"noopener noreferrer"},p=a("QPS"),b=a(", RT, error counts, and thread pool, etc."),f=l(`

Options

NameSpecification
[i:]The interval (in ms) between two executions, default is 5000 ms.
[n:]The number of times this command will be executed.

Usage

$ dashboard
 ID   NAME                           GROUP           PRIORITY   STATE     %CPU      DELTA_TIME TIME      INTERRUPTE DAEMON
 -1   C2 CompilerThread0             -               -1         -         1.55      0.077      0:8.684   false      true
 53   Timer-for-arthas-dashboard-07b system          5          RUNNABLE  0.08      0.004      0:0.004   false      true
@@ -30,4 +30,4 @@ java.home                                                      /Library/Java/Jav
 systemload.average                                             10.68
 processors                                                     8
 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

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).

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.

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 asVM Periodic Task Thread, VM Thread, Service Thread

Screenshot

',14);function M(I,C){const t=o("ExternalLinkIcon");return r(),d("div",null,[h,e("p",null,[e("a",u,[m,v,i(t)])]),p,e("p",null,[b,e("a",f,[g,i(t)]),_]),T])}const E=s(c,[["render",M],["__file","dashboard.html.vue"]]);export{E as default}; +

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

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).

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.

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 asVM Periodic Task Thread, VM Thread, Service Thread

Screenshot

',14);function g(_,T){const t=o("ExternalLinkIcon");return s(),r("div",null,[h,m,e("p",null,[u,e("a",v,[p,d(t)]),b]),f])}const C=n(c,[["render",g],["__file","dashboard.html.vue"]]);export{C as default}; diff --git a/assets/dashboard.html.61a4e15d.js b/assets/dashboard.html.f3712bf4.js similarity index 82% rename from assets/dashboard.html.61a4e15d.js rename to assets/dashboard.html.f3712bf4.js index 4f2436c2c..fd56e2cab 100644 --- a/assets/dashboard.html.61a4e15d.js +++ b/assets/dashboard.html.f3712bf4.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-0d1e3f35","path":"/doc/dashboard.html","title":"dashboard","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]},{"level":2,"title":"\u6570\u636E\u8BF4\u660E","slug":"\u6570\u636E\u8BF4\u660E","link":"#\u6570\u636E\u8BF4\u660E","children":[{"level":3,"title":"JVM \u5185\u90E8\u7EBF\u7A0B","slug":"jvm-\u5185\u90E8\u7EBF\u7A0B","link":"#jvm-\u5185\u90E8\u7EBF\u7A0B","children":[]}]},{"level":2,"title":"\u622A\u56FE\u5C55\u793A","slug":"\u622A\u56FE\u5C55\u793A","link":"#\u622A\u56FE\u5C55\u793A","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/dashboard.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-0d1e3f35","path":"/doc/dashboard.html","title":"dashboard","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]},{"level":2,"title":"\u6570\u636E\u8BF4\u660E","slug":"\u6570\u636E\u8BF4\u660E","link":"#\u6570\u636E\u8BF4\u660E","children":[{"level":3,"title":"JVM \u5185\u90E8\u7EBF\u7A0B","slug":"jvm-\u5185\u90E8\u7EBF\u7A0B","link":"#jvm-\u5185\u90E8\u7EBF\u7A0B","children":[]}]},{"level":2,"title":"\u622A\u56FE\u5C55\u793A","slug":"\u622A\u56FE\u5C55\u793A","link":"#\u622A\u56FE\u5C55\u793A","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/dashboard.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/docker.html.27b15072.js b/assets/docker.html.27b15072.js deleted file mode 100644 index 27b942fff..000000000 --- a/assets/docker.html.27b15072.js +++ /dev/null @@ -1,50 +0,0 @@ -import{_ as n,o as e,c as t,a,b as i,d as o,e as p,r as l}from"./app.524ecf5c.js";const r={},c=o(`

Docker

Use JDK in Docker

Many times, the problem that arthas can't work with the application in docker is because the docker does not install JDK, but installs JRE. If only JRE is installed, many JAVA command line tools and class libraries will be missing, and Arthas will not work properly. Here are two common ways to use JDK in Docker.

Use public JDK image

  • https://hub.docker.com/_/openjdk/

such as:

FROM openjdk:8-jdk
-

or:

FROM openjdk:8-jdk-alpine
-

Install via package management software

such as:

# 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
-

or:

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
-

Quick start with Docker

  1. Delete the existing math-game docker container (not necessary)

    $ docker stop math-game || true && docker rm math-game || true
    -
  2. Start math-game

    $ docker run --name math-game -it hengyunabc/arthas:latest /bin/sh -c "java -jar /opt/arthas/math-game.jar"
    -
  3. Start arthas-boot for diagnosis

    $ 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
    -

Diagnose the Java process in Docker

docker exec -it  \${containerId} /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar"
-

Diagnose the Java process in the container in k8s

kubectl exec -it \${pod} --container \${containerId} -- /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar"
-

Install Arthas into the base Docker image

It's easy to install Arthas into your Docker image.

FROM openjdk:8-jdk-alpine
-
-# copy arthas
-COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas
-

If you want to specify a version, you can view all the tags:

`,24),d={href:"https://hub.docker.com/r/hengyunabc/arthas/tags",target:"_blank",rel:"noopener noreferrer"},u=p("https://hub.docker.com/r/hengyunabc/arthas/tags");function k(v,m){const s=l("ExternalLinkIcon");return e(),t("div",null,[c,a("p",null,[a("a",d,[u,i(s)])])])}const h=n(r,[["render",k],["__file","docker.html.vue"]]);export{h as default}; diff --git a/assets/docker.html.3597bdbf.js b/assets/docker.html.3597bdbf.js new file mode 100644 index 000000000..ed0305181 --- /dev/null +++ b/assets/docker.html.3597bdbf.js @@ -0,0 +1,107 @@ +import{_ as o,o as i,c,a as s,b as n,d as t,e as a,r}from"./app.e2427bec.js";const p={},l=t(`

Docker

Use JDK in Docker

Many times, the problem that arthas can't work with the application in docker is because the docker does not install JDK, but installs JRE. If only JRE is installed, many JAVA command line tools and class libraries will be missing, and Arthas will not work properly. Here are two common ways to use JDK in Docker.

Use public JDK image

  • https://hub.docker.com/_/openjdk/

such as:

FROM openjdk:8-jdk
+

or:

FROM openjdk:8-jdk-alpine
+

Install via package management software

such as:

# 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
+

or:

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
+

Quick start with Docker

  1. Delete the existing math-game docker container (not necessary)

    $ docker stop math-game || true && docker rm math-game || true
    +
  2. Start math-game

    $ docker run --name math-game -it hengyunabc/arthas:latest /bin/sh -c "java -jar /opt/arthas/math-game.jar"
    +
  3. Start arthas-boot for diagnosis

    $ 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
    +

Diagnose the Java process in Docker

docker exec -it  \${containerId} /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar"
+

Diagnose a Java process in Kubernetes

If the application container already includes a shell, a full JDK, and a download tool, start Arthas directly inside the application container.

kubectl exec -it \${pod} --container \${containerName} -- /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar"
+

Attach from an ephemeral debug container

`,22),d=a("Starting with "),u={href:"https://github.com/alibaba/arthas/commit/21cf2e9ba52b305290be7223b980ff504bb9cb5b",target:"_blank",rel:"noopener noreferrer"},h=a("4.3.4"),m=a(", Arthas can attach to a JVM in an application container from an ephemeral container created by "),k=s("code",null,"kubectl debug",-1),v=a(". This is useful when the application uses a distroless image or does not include a shell or JDK."),b=t(`

Make sure the following requirements are met.

  • The Pod runs on Linux.
  • The Kubernetes cluster supports ephemeral containers, and the container runtime supports kubectl debug --target. The target JVM's PID must be visible from the debug container.
  • The debug container provides a full JDK and uses Arthas 4.3.4 or later.
  • If the debug container and target JVM use different UIDs, the debug container must run as root and be able to access /proc/<pid>/root for the target process. The target HotSpot must also accept an attach client with UID 0. Some older JDKs accept only the same UID/GID; those versions require matching IDs in both containers.

WARNING

The --profile=sysadmin option below creates a privileged ephemeral container. Use it only when authorized and permitted by the cluster security policy. If the application Pod enforces a non-root user, ask the cluster administrator for a debug configuration with the required permissions.

Add an ephemeral container to the running Pod. \${containerName} is the name of the target application container.

kubectl debug -it \${pod} \\
+  --target=\${containerName} \\
+  --image=amazoncorretto:8-alpine-jdk \\
+  --profile=sysadmin \\
+  -- sh
+
`,5),g=a("The "),f=s("code",null,"--target",-1),_=a(" option places the ephemeral container in the target container's PID namespace. See "),y={href:"https://kubernetes.io/docs/tasks/debug/debug-application/debug-running-pod/",target:"_blank",rel:"noopener noreferrer"},A=a("Debug Running Pods"),I=a(" for configuration details that vary between Kubernetes versions."),x=t(`

Inside the debug container, download and extract the complete Arthas 4.3.4 distribution.

ARTHAS_VERSION=4.3.4
+ARTHAS_HOME=/tmp/arthas-\${ARTHAS_VERSION}
+
+wget -qO /tmp/arthas.zip \\
+  "https://repo1.maven.org/maven2/com/taobao/arthas/arthas-packaging/\${ARTHAS_VERSION}/arthas-packaging-\${ARTHAS_VERSION}-bin.zip"
+mkdir -p "\${ARTHAS_HOME}"
+unzip -q /tmp/arthas.zip -d "\${ARTHAS_HOME}"
+

Use ps to find the target JVM's PID. The following example uses PID 1.

ps -ef
+
+TARGET_PID=1
+java -jar "\${ARTHAS_HOME}/arthas-boot.jar" "\${TARGET_PID}"
+

Arthas automatically compares the mount namespaces of the debug container and the target JVM. When they differ, Arthas exposes the target JVM's attach socket and copies the complete Arthas Home into a temporary directory in the target container. No shared volume is required between the two containers.

After a successful cross-mount-namespace attach, the target JVM's arthas.log contains the following structured event.

event=arthas_attach status=success mode=cross-mount-namespace targetPid=... arthasHome=... network=... telnet=... http=...
+

Run stop to stop Arthas and remove the temporary Arthas Home copied into the target container. The quit and exit commands only disconnect the current session; they do not stop Arthas or remove that directory.

If ps in the debug container does not show the target JVM, the container runtime did not share the target process namespace as requested by --target, so this attach method cannot work. If the post-attach server health check fails, the terminal directs you to the target JVM's arthas.log. You can locate the log from the debug container.

find /proc/\${TARGET_PID}/root -name arthas.log 2>/dev/null
+

Attach from a sidecar container

`,11),D=a("You can also preinstall a full JDK and Arthas in a long-running sidecar, then attach from the sidecar to an application JVM in the same Pod. Set "),w={href:"https://kubernetes.io/docs/tasks/configure-pod-container/share-process-namespace/",target:"_blank",rel:"noopener noreferrer"},j=s("code",null,"shareProcessNamespace: true",-1),R=a(" when the Pod is created. Otherwise, the sidecar cannot see the application container's PID. This setting shares only the PID namespace. The containers still have separate mount namespaces, and Arthas 4.3.4 accesses the target filesystem through "),T=s("code",null,"/proc//root",-1),P=a(", so no shared volume is required. Containers in a Pod already share a network namespace, so "),J=s("code",null,"NET_ADMIN",-1),S=a(" is not required either."),q=t(`

Prefer running the sidecar and application JVM with the same Linux UID and GID. With a normally attachable JVM, the default /proc security policy, and a writable temporary directory, this path does not require any additional Linux capabilities.

spec:
+  shareProcessNamespace: true
+  containers:
+    - name: app
+      securityContext:
+        runAsUser: 1000
+        runAsGroup: 1000
+    - name: arthas-sidecar
+      image: your-registry/arthas-sidecar:4.3.4
+      securityContext:
+        runAsUser: 1000
+        runAsGroup: 1000
+        runAsNonRoot: true
+        allowPrivilegeEscalation: false
+        capabilities:
+          drop: ["ALL"]
+
`,2),E=a("If the sidecar and application JVM use different UIDs, the sidecar must run as UID "),N=s("code",null,"0",-1),V=a(", and the target HotSpot must accept a root client. The current "),M={href:"https://github.com/openjdk/jdk/blob/master/src/hotspot/os/posix/attachListener_posix.cpp#L253-L269",target:"_blank",rel:"noopener noreferrer"},O=a("OpenJDK attach listener"),U=a(" accepts either the same UID/GID or UID "),H=s("code",null,"0",-1),L=a(". The upstream "),K={href:"https://github.com/openjdk/jdk8u/blob/master/hotspot/src/os/linux/vm/attachListener_linux.cpp#L350-L358",target:"_blank",rel:"noopener noreferrer"},C=a("OpenJDK 8u implementation"),$=a(" still requires an exact UID/GID match, and vendor builds may have different policies. This check runs inside the target JVM and cannot be bypassed by adding Linux capabilities. Use the same-UID/GID configuration for targets with this behavior."),G=t(`

When the target HotSpot accepts a root client, explicitly retain the following four capabilities to support the initial attach, temporary directories with restrictive permissions, and cleanup by stop.

Setting or capabilityPurpose
shareProcessNamespace: trueMakes the application JVM's PID and /proc/<pid> visible to the sidecar
runAsUser: 0Passes the cross-UID check when the target HotSpot accepts root clients
SYS_PTRACEPasses ptrace access checks for /proc/<pid>, /proc/<pid>/root, and mount namespace information
KILLSends SIGQUIT across UIDs when the target JVM's attach listener has not started
DAC_OVERRIDEConnects to the target user's 0600 attach socket and writes to the target container's temporary directory
CHOWNGives the copied Arthas Home to the target user so that stop can remove it

The following securityContext fragment is for a cross-UID sidecar. It does not require privileged: true, SYS_ADMIN, hostPID, or hostPath.

spec:
+  shareProcessNamespace: true
+  containers:
+    - name: arthas-sidecar
+      image: your-registry/arthas-sidecar:4.3.4
+      securityContext:
+        runAsUser: 0
+        runAsGroup: 0
+        allowPrivilegeEscalation: false
+        seccompProfile:
+          type: RuntimeDefault
+        capabilities:
+          drop: ["ALL"]
+          add:
+            - SYS_PTRACE
+            - KILL
+            - DAC_OVERRIDE
+            - CHOWN
+

Container runtime default capability sets usually include KILL, DAC_OVERRIDE, and CHOWN, so adding only SYS_PTRACE is often sufficient when the defaults are retained. The example above drops ALL and adds each required capability explicitly, making the result independent of runtime defaults.

`,5),W={class:"custom-container warning"},F=s("p",{class:"custom-container-title"},"WARNING",-1),Y=a("The Kubernetes "),z={href:"https://kubernetes.io/docs/concepts/security/pod-security-standards/",target:"_blank",rel:"noopener noreferrer"},B=a("Baseline and Restricted Pod Security Standards"),Q=a(" both disallow adding "),X=s("code",null,"SYS_PTRACE",-1),Z=a("; Restricted also disallows UID "),aa=s("code",null,"0",-1),sa=a(". A cluster administrator must provide an exemption or a dedicated namespace for this trusted cross-UID workload. A shared PID namespace also exposes process arguments, environment variables, and "),ea=s("code",null,"/proc//root",-1),na=a(" for other containers in the Pod. Do not make this sidecar available to untrusted users."),ta=t(`

The Arthas attach process does not call the Kubernetes API, so the sidecar ServiceAccount needs no additional RBAC permissions. An operator who enters the sidecar with kubectl exec still needs the corresponding pods/exec permission.

The sidecar image must contain a full JDK and Arthas 4.3.4 or later. With a shared PID namespace, the application process is usually no longer PID 1; use ps to find its actual PID first.

kubectl exec -it \${pod} --container arthas-sidecar -- sh
+
+ps -ef
+TARGET_PID=<java-pid>
+java -jar /opt/arthas/arthas-boot.jar "\${TARGET_PID}"
+

If the same-UID/GID configuration still cannot attach, check whether the target JVM uses -XX:+DisableAttachMechanism, and whether seccomp, AppArmor, SELinux, or the /proc mount policy blocks process access. If the target JVM uses a custom java.io.tmpdir, that directory must also be writable by the attach client.

Install Arthas into the base Docker image

It's easy to install Arthas into your Docker image.

FROM openjdk:8-jdk-alpine
+
+# copy arthas
+COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas
+

If you want to specify a version, you can view all the tags:

`,8),oa={href:"https://hub.docker.com/r/hengyunabc/arthas/tags",target:"_blank",rel:"noopener noreferrer"},ia=a("https://hub.docker.com/r/hengyunabc/arthas/tags");function ca(ra,pa){const e=r("ExternalLinkIcon");return i(),c("div",null,[l,s("p",null,[d,s("a",u,[h,n(e)]),m,k,v]),b,s("p",null,[g,f,_,s("a",y,[A,n(e)]),I]),x,s("p",null,[D,s("a",w,[j,n(e)]),R,T,P,J,S]),q,s("p",null,[E,N,V,s("a",M,[O,n(e)]),U,H,L,s("a",K,[C,n(e)]),$]),G,s("div",W,[F,s("p",null,[Y,s("a",z,[B,n(e)]),Q,X,Z,aa,sa,ea,na])]),ta,s("p",null,[s("a",oa,[ia,n(e)])])])}const da=o(p,[["render",ca],["__file","docker.html.vue"]]);export{da as default}; diff --git a/assets/docker.html.17377288.js b/assets/docker.html.7291090b.js similarity index 61% rename from assets/docker.html.17377288.js rename to assets/docker.html.7291090b.js index 9292a8139..78a4e7470 100644 --- a/assets/docker.html.17377288.js +++ b/assets/docker.html.7291090b.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-02361049","path":"/doc/docker.html","title":"Docker","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u5728 Docker \u91CC\u4F7F\u7528 JDK","slug":"\u5728-docker-\u91CC\u4F7F\u7528-jdk","link":"#\u5728-docker-\u91CC\u4F7F\u7528-jdk","children":[{"level":3,"title":"\u4F7F\u7528\u516C\u5F00\u7684 JDK \u955C\u50CF","slug":"\u4F7F\u7528\u516C\u5F00\u7684-jdk-\u955C\u50CF","link":"#\u4F7F\u7528\u516C\u5F00\u7684-jdk-\u955C\u50CF","children":[]},{"level":3,"title":"\u901A\u8FC7\u5305\u7BA1\u7406\u8F6F\u4EF6\u6765\u5B89\u88C5","slug":"\u901A\u8FC7\u5305\u7BA1\u7406\u8F6F\u4EF6\u6765\u5B89\u88C5","link":"#\u901A\u8FC7\u5305\u7BA1\u7406\u8F6F\u4EF6\u6765\u5B89\u88C5","children":[]}]},{"level":2,"title":"\u901A\u8FC7 Docker \u5FEB\u901F\u5165\u95E8","slug":"\u901A\u8FC7-docker-\u5FEB\u901F\u5165\u95E8","link":"#\u901A\u8FC7-docker-\u5FEB\u901F\u5165\u95E8","children":[]},{"level":2,"title":"\u8BCA\u65AD Docker \u91CC\u7684 Java \u8FDB\u7A0B","slug":"\u8BCA\u65AD-docker-\u91CC\u7684-java-\u8FDB\u7A0B","link":"#\u8BCA\u65AD-docker-\u91CC\u7684-java-\u8FDB\u7A0B","children":[]},{"level":2,"title":"\u8BCA\u65AD k8s \u91CC\u5BB9\u5668\u91CC\u7684 Java \u8FDB\u7A0B","slug":"\u8BCA\u65AD-k8s-\u91CC\u5BB9\u5668\u91CC\u7684-java-\u8FDB\u7A0B","link":"#\u8BCA\u65AD-k8s-\u91CC\u5BB9\u5668\u91CC\u7684-java-\u8FDB\u7A0B","children":[]},{"level":2,"title":"\u628A Arthas \u5B89\u88C5\u5230\u57FA\u7840\u955C\u50CF\u91CC","slug":"\u628A-arthas-\u5B89\u88C5\u5230\u57FA\u7840\u955C\u50CF\u91CC","link":"#\u628A-arthas-\u5B89\u88C5\u5230\u57FA\u7840\u955C\u50CF\u91CC","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/docker.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-02361049","path":"/doc/docker.html","title":"Docker","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u5728 Docker \u91CC\u4F7F\u7528 JDK","slug":"\u5728-docker-\u91CC\u4F7F\u7528-jdk","link":"#\u5728-docker-\u91CC\u4F7F\u7528-jdk","children":[{"level":3,"title":"\u4F7F\u7528\u516C\u5F00\u7684 JDK \u955C\u50CF","slug":"\u4F7F\u7528\u516C\u5F00\u7684-jdk-\u955C\u50CF","link":"#\u4F7F\u7528\u516C\u5F00\u7684-jdk-\u955C\u50CF","children":[]},{"level":3,"title":"\u901A\u8FC7\u5305\u7BA1\u7406\u8F6F\u4EF6\u6765\u5B89\u88C5","slug":"\u901A\u8FC7\u5305\u7BA1\u7406\u8F6F\u4EF6\u6765\u5B89\u88C5","link":"#\u901A\u8FC7\u5305\u7BA1\u7406\u8F6F\u4EF6\u6765\u5B89\u88C5","children":[]}]},{"level":2,"title":"\u901A\u8FC7 Docker \u5FEB\u901F\u5165\u95E8","slug":"\u901A\u8FC7-docker-\u5FEB\u901F\u5165\u95E8","link":"#\u901A\u8FC7-docker-\u5FEB\u901F\u5165\u95E8","children":[]},{"level":2,"title":"\u8BCA\u65AD Docker \u91CC\u7684 Java \u8FDB\u7A0B","slug":"\u8BCA\u65AD-docker-\u91CC\u7684-java-\u8FDB\u7A0B","link":"#\u8BCA\u65AD-docker-\u91CC\u7684-java-\u8FDB\u7A0B","children":[]},{"level":2,"title":"\u8BCA\u65AD k8s \u91CC\u5BB9\u5668\u91CC\u7684 Java \u8FDB\u7A0B","slug":"\u8BCA\u65AD-k8s-\u91CC\u5BB9\u5668\u91CC\u7684-java-\u8FDB\u7A0B","link":"#\u8BCA\u65AD-k8s-\u91CC\u5BB9\u5668\u91CC\u7684-java-\u8FDB\u7A0B","children":[{"level":3,"title":"\u4ECE\u4E34\u65F6 debug \u5BB9\u5668 attach","slug":"\u4ECE\u4E34\u65F6-debug-\u5BB9\u5668-attach","link":"#\u4ECE\u4E34\u65F6-debug-\u5BB9\u5668-attach","children":[]},{"level":3,"title":"\u4ECE sidecar \u5BB9\u5668 attach","slug":"\u4ECE-sidecar-\u5BB9\u5668-attach","link":"#\u4ECE-sidecar-\u5BB9\u5668-attach","children":[]}]},{"level":2,"title":"\u628A Arthas \u5B89\u88C5\u5230\u57FA\u7840\u955C\u50CF\u91CC","slug":"\u628A-arthas-\u5B89\u88C5\u5230\u57FA\u7840\u955C\u50CF\u91CC","link":"#\u628A-arthas-\u5B89\u88C5\u5230\u57FA\u7840\u955C\u50CF\u91CC","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/docker.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/docker.html.a1aa4dd5.js b/assets/docker.html.a1aa4dd5.js deleted file mode 100644 index ac4cdf4f7..000000000 --- a/assets/docker.html.a1aa4dd5.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-682151b5","path":"/en/doc/docker.html","title":"Docker","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Use JDK in Docker","slug":"use-jdk-in-docker","link":"#use-jdk-in-docker","children":[{"level":3,"title":"Use public JDK image","slug":"use-public-jdk-image","link":"#use-public-jdk-image","children":[]},{"level":3,"title":"Install via package management software","slug":"install-via-package-management-software","link":"#install-via-package-management-software","children":[]}]},{"level":2,"title":"Quick start with Docker","slug":"quick-start-with-docker","link":"#quick-start-with-docker","children":[]},{"level":2,"title":"Diagnose the Java process in Docker","slug":"diagnose-the-java-process-in-docker","link":"#diagnose-the-java-process-in-docker","children":[]},{"level":2,"title":"Diagnose the Java process in the container in k8s","slug":"diagnose-the-java-process-in-the-container-in-k8s","link":"#diagnose-the-java-process-in-the-container-in-k8s","children":[]},{"level":2,"title":"Install Arthas into the base Docker image","slug":"install-arthas-into-the-base-docker-image","link":"#install-arthas-into-the-base-docker-image","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/docker.md","version":"4.3.3"}');export{e as data}; diff --git a/assets/docker.html.a457bc6d.js b/assets/docker.html.a457bc6d.js deleted file mode 100644 index 2575dc679..000000000 --- a/assets/docker.html.a457bc6d.js +++ /dev/null @@ -1,50 +0,0 @@ -import{_ as n,o as e,c as t,a,b as p,d as i,e as l,r as o}from"./app.524ecf5c.js";const r={},c=i(`

Docker

\u5728 Docker \u91CC\u4F7F\u7528 JDK

\u5F88\u591A\u65F6\u5019\uFF0C\u5E94\u7528\u5728 docker \u91CC\u51FA\u73B0 arthas \u65E0\u6CD5\u5DE5\u4F5C\u7684\u95EE\u9898\uFF0C\u662F\u56E0\u4E3A\u5E94\u7528\u6CA1\u6709\u5B89\u88C5 JDK \uFF0C\u800C\u662F\u5B89\u88C5\u4E86 JRE \u3002\u5982\u679C\u53EA\u5B89\u88C5\u4E86 JRE\uFF0C\u5219\u4F1A\u7F3A\u5C11\u5F88\u591A JAVA \u7684\u547D\u4EE4\u884C\u5DE5\u5177\u548C\u7C7B\u5E93\uFF0CArthas \u4E5F\u6CA1\u529E\u6CD5\u6B63\u5E38\u5DE5\u4F5C\u3002\u4E0B\u9762\u4ECB\u7ECD\u4E24\u79CD\u5E38\u89C1\u7684\u5728 Docker \u91CC\u4F7F\u7528 JDK \u7684\u65B9\u5F0F\u3002

\u4F7F\u7528\u516C\u5F00\u7684 JDK \u955C\u50CF

  • https://hub.docker.com/_/openjdk/

\u6BD4\u5982\uFF1A

FROM openjdk:8-jdk
-

\u6216\u8005\uFF1A

FROM openjdk:8-jdk-alpine
-

\u901A\u8FC7\u5305\u7BA1\u7406\u8F6F\u4EF6\u6765\u5B89\u88C5

\u6BD4\u5982\uFF1A

# 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
-

\u6216\u8005\uFF1A

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
-

\u901A\u8FC7 Docker \u5FEB\u901F\u5165\u95E8

  1. \u5220\u9664\u672C\u5730\u5DF2\u6709\u7684math-game docker container\uFF08\u975E\u5FC5\u8981\uFF09

    $ docker stop math-game || true && docker rm math-game || true
    -
  2. \u542F\u52A8math-game

    $ docker run --name math-game -it hengyunabc/arthas:latest /bin/sh -c "java -jar /opt/arthas/math-game.jar"
    -
  3. \u542F\u52A8arthas-boot\u6765\u8FDB\u884C\u8BCA\u65AD

    $ 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
    -

\u8BCA\u65AD Docker \u91CC\u7684 Java \u8FDB\u7A0B

docker exec -it  \${containerId} /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar"
-

\u8BCA\u65AD k8s \u91CC\u5BB9\u5668\u91CC\u7684 Java \u8FDB\u7A0B

kubectl exec -it \${pod} --container \${containerId} -- /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar"
-

\u628A Arthas \u5B89\u88C5\u5230\u57FA\u7840\u955C\u50CF\u91CC

\u53EF\u4EE5\u5F88\u7B80\u5355\u628A Arthas \u5B89\u88C5\u5230\u4F60\u7684 Docker \u955C\u50CF\u91CC\u3002

FROM openjdk:8-jdk-alpine
-
-# copy arthas
-COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas
-

\u5982\u679C\u60F3\u6307\u5B9A\u7248\u672C\uFF0C\u53EF\u4EE5\u67E5\u770B\u5177\u4F53\u7684 tags\uFF1A

`,24),d={href:"https://hub.docker.com/r/hengyunabc/arthas/tags",target:"_blank",rel:"noopener noreferrer"},u=l("https://hub.docker.com/r/hengyunabc/arthas/tags");function v(k,m){const s=o("ExternalLinkIcon");return e(),t("div",null,[c,a("p",null,[a("a",d,[u,p(s)])])])}const h=n(r,[["render",v],["__file","docker.html.vue"]]);export{h as default}; diff --git a/assets/docker.html.ab7f2873.js b/assets/docker.html.ab7f2873.js new file mode 100644 index 000000000..6f228ff0c --- /dev/null +++ b/assets/docker.html.ab7f2873.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-682151b5","path":"/en/doc/docker.html","title":"Docker","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Use JDK in Docker","slug":"use-jdk-in-docker","link":"#use-jdk-in-docker","children":[{"level":3,"title":"Use public JDK image","slug":"use-public-jdk-image","link":"#use-public-jdk-image","children":[]},{"level":3,"title":"Install via package management software","slug":"install-via-package-management-software","link":"#install-via-package-management-software","children":[]}]},{"level":2,"title":"Quick start with Docker","slug":"quick-start-with-docker","link":"#quick-start-with-docker","children":[]},{"level":2,"title":"Diagnose the Java process in Docker","slug":"diagnose-the-java-process-in-docker","link":"#diagnose-the-java-process-in-docker","children":[]},{"level":2,"title":"Diagnose a Java process in Kubernetes","slug":"diagnose-a-java-process-in-kubernetes","link":"#diagnose-a-java-process-in-kubernetes","children":[{"level":3,"title":"Attach from an ephemeral debug container","slug":"attach-from-an-ephemeral-debug-container","link":"#attach-from-an-ephemeral-debug-container","children":[]},{"level":3,"title":"Attach from a sidecar container","slug":"attach-from-a-sidecar-container","link":"#attach-from-a-sidecar-container","children":[]}]},{"level":2,"title":"Install Arthas into the base Docker image","slug":"install-arthas-into-the-base-docker-image","link":"#install-arthas-into-the-base-docker-image","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/docker.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/docker.html.da50033d.js b/assets/docker.html.da50033d.js new file mode 100644 index 000000000..33caeb990 --- /dev/null +++ b/assets/docker.html.da50033d.js @@ -0,0 +1,107 @@ +import{_ as o,o as c,c as p,a,b as e,d as t,e as s,r as i}from"./app.e2427bec.js";const l={},r=t(`

Docker

\u5728 Docker \u91CC\u4F7F\u7528 JDK

\u5F88\u591A\u65F6\u5019\uFF0C\u5E94\u7528\u5728 docker \u91CC\u51FA\u73B0 arthas \u65E0\u6CD5\u5DE5\u4F5C\u7684\u95EE\u9898\uFF0C\u662F\u56E0\u4E3A\u5E94\u7528\u6CA1\u6709\u5B89\u88C5 JDK \uFF0C\u800C\u662F\u5B89\u88C5\u4E86 JRE \u3002\u5982\u679C\u53EA\u5B89\u88C5\u4E86 JRE\uFF0C\u5219\u4F1A\u7F3A\u5C11\u5F88\u591A JAVA \u7684\u547D\u4EE4\u884C\u5DE5\u5177\u548C\u7C7B\u5E93\uFF0CArthas \u4E5F\u6CA1\u529E\u6CD5\u6B63\u5E38\u5DE5\u4F5C\u3002\u4E0B\u9762\u4ECB\u7ECD\u4E24\u79CD\u5E38\u89C1\u7684\u5728 Docker \u91CC\u4F7F\u7528 JDK \u7684\u65B9\u5F0F\u3002

\u4F7F\u7528\u516C\u5F00\u7684 JDK \u955C\u50CF

  • https://hub.docker.com/_/openjdk/

\u6BD4\u5982\uFF1A

FROM openjdk:8-jdk
+

\u6216\u8005\uFF1A

FROM openjdk:8-jdk-alpine
+

\u901A\u8FC7\u5305\u7BA1\u7406\u8F6F\u4EF6\u6765\u5B89\u88C5

\u6BD4\u5982\uFF1A

# 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
+

\u6216\u8005\uFF1A

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
+

\u901A\u8FC7 Docker \u5FEB\u901F\u5165\u95E8

  1. \u5220\u9664\u672C\u5730\u5DF2\u6709\u7684math-game docker container\uFF08\u975E\u5FC5\u8981\uFF09

    $ docker stop math-game || true && docker rm math-game || true
    +
  2. \u542F\u52A8math-game

    $ docker run --name math-game -it hengyunabc/arthas:latest /bin/sh -c "java -jar /opt/arthas/math-game.jar"
    +
  3. \u542F\u52A8arthas-boot\u6765\u8FDB\u884C\u8BCA\u65AD

    $ 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
    +

\u8BCA\u65AD Docker \u91CC\u7684 Java \u8FDB\u7A0B

docker exec -it  \${containerId} /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar"
+

\u8BCA\u65AD k8s \u91CC\u5BB9\u5668\u91CC\u7684 Java \u8FDB\u7A0B

\u5982\u679C\u5E94\u7528\u5BB9\u5668\u5DF2\u7ECF\u5305\u542B shell\u3001\u5B8C\u6574 JDK \u548C\u4E0B\u8F7D\u5DE5\u5177\uFF0C\u53EF\u4EE5\u76F4\u63A5\u8FDB\u5165\u5E94\u7528\u5BB9\u5668\u542F\u52A8 Arthas\u3002

kubectl exec -it \${pod} --container \${containerName} -- /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar"
+

\u4ECE\u4E34\u65F6 debug \u5BB9\u5668 attach

`,22),d=s("\u4ECE "),u={href:"https://github.com/alibaba/arthas/commit/21cf2e9ba52b305290be7223b980ff504bb9cb5b",target:"_blank",rel:"noopener noreferrer"},k=s("4.3.4"),v=s(" \u5F00\u59CB\uFF0CArthas \u53EF\u4EE5\u4ECE "),m=a("code",null,"kubectl debug",-1),b=s(" \u521B\u5EFA\u7684\u4E34\u65F6\u5BB9\u5668 attach \u5E94\u7528\u5BB9\u5668\u91CC\u7684 JVM\u3002\u5E94\u7528\u955C\u50CF\u4F7F\u7528 distroless\uFF0C\u6216\u8005\u6CA1\u6709 shell\u3001JDK \u65F6\uFF0C\u53EF\u4EE5\u7528\u8FD9\u4E2A\u65B9\u5F0F\u628A\u8BCA\u65AD\u5DE5\u5177\u4E34\u65F6\u52A0\u5165\u6B63\u5728\u8FD0\u884C\u7684 Pod\u3002"),h=t(`

\u4F7F\u7528\u524D\u9700\u8981\u6EE1\u8DB3\u4E0B\u9762\u7684\u6761\u4EF6\u3002

  • Pod \u8FD0\u884C\u5728 Linux \u4E0A\u3002
  • Kubernetes \u96C6\u7FA4\u652F\u6301\u4E34\u65F6\u5BB9\u5668\uFF0C\u5BB9\u5668\u8FD0\u884C\u65F6\u652F\u6301 kubectl debug --target\u3002\u8FDB\u5165\u4E34\u65F6\u5BB9\u5668\u540E\u5FC5\u987B\u80FD\u770B\u5230\u76EE\u6807 JVM \u7684 PID\u3002
  • \u4E34\u65F6\u5BB9\u5668\u63D0\u4F9B\u5B8C\u6574 JDK\uFF0C\u5E76\u4F7F\u7528 Arthas 4.3.4 \u6216\u66F4\u9AD8\u7248\u672C\u3002
  • \u4E34\u65F6\u5BB9\u5668\u4E0E\u76EE\u6807 JVM \u7684 UID \u4E0D\u540C\u65F6\uFF0C\u4E34\u65F6\u5BB9\u5668\u9700\u8981\u4EE5 root \u8EAB\u4EFD\u8FD0\u884C\uFF0C\u5E76\u80FD\u8BBF\u95EE\u76EE\u6807\u8FDB\u7A0B\u7684 /proc/<pid>/root\u3002\u76EE\u6807 HotSpot \u8FD8\u5FC5\u987B\u5141\u8BB8 UID 0 \u7684 attach \u5BA2\u6237\u7AEF\u3002\u90E8\u5206\u65E7 JDK \u53EA\u63A5\u53D7\u76F8\u540C UID/GID\uFF0C\u6B64\u65F6\u9700\u8981\u8BA9\u4E24\u4E2A\u5BB9\u5668\u4F7F\u7528\u76F8\u540C UID/GID\u3002

\u6CE8\u610F

\u4E0B\u9762\u7684 --profile=sysadmin \u4F1A\u521B\u5EFA privileged \u4E34\u65F6\u5BB9\u5668\u3002\u8BF7\u53EA\u5728\u83B7\u5F97\u6388\u6743\u4E14\u96C6\u7FA4\u5B89\u5168\u7B56\u7565\u5141\u8BB8\u65F6\u4F7F\u7528\u3002\u5E94\u7528 Pod \u5F3A\u5236\u4EE5\u975E root \u7528\u6237\u8FD0\u884C\u65F6\uFF0C\u9700\u8981\u7531\u96C6\u7FA4\u7BA1\u7406\u5458\u63D0\u4F9B\u5177\u5907\u76F8\u5E94\u6743\u9650\u7684\u8C03\u8BD5\u914D\u7F6E\u3002

\u5148\u628A\u4E34\u65F6\u5BB9\u5668\u52A0\u5165\u6B63\u5728\u8FD0\u884C\u7684 Pod\u3002\${containerName} \u662F\u76EE\u6807\u5E94\u7528\u5BB9\u5668\u7684\u540D\u79F0\u3002

kubectl debug -it \${pod} \\
+  --target=\${containerName} \\
+  --image=amazoncorretto:8-alpine-jdk \\
+  --profile=sysadmin \\
+  -- sh
+
`,5),g=a("code",null,"--target",-1),_=s(" \u8BA9\u4E34\u65F6\u5BB9\u5668\u8FDB\u5165\u76EE\u6807\u5BB9\u5668\u7684 PID namespace\u3002\u4E0D\u540C Kubernetes \u7248\u672C\u7684\u914D\u7F6E\u65B9\u5F0F\u53EF\u4EE5\u53C2\u8003 "),f={href:"https://kubernetes.io/zh-cn/docs/tasks/debug/debug-application/debug-running-pod/",target:"_blank",rel:"noopener noreferrer"},A=s("Kubernetes \u8C03\u8BD5\u8FD0\u884C\u4E2D\u7684 Pod"),y=s("\u3002"),D=t(`

\u8FDB\u5165\u4E34\u65F6\u5BB9\u5668\u540E\uFF0C\u4E0B\u8F7D\u5E76\u89E3\u538B\u5B8C\u6574\u7684 Arthas 4.3.4 \u53D1\u884C\u5305\u3002

ARTHAS_VERSION=4.3.4
+ARTHAS_HOME=/tmp/arthas-\${ARTHAS_VERSION}
+
+wget -qO /tmp/arthas.zip \\
+  "https://repo1.maven.org/maven2/com/taobao/arthas/arthas-packaging/\${ARTHAS_VERSION}/arthas-packaging-\${ARTHAS_VERSION}-bin.zip"
+mkdir -p "\${ARTHAS_HOME}"
+unzip -q /tmp/arthas.zip -d "\${ARTHAS_HOME}"
+

\u7528 ps \u67E5\u627E\u76EE\u6807 JVM \u7684 PID\u3002\u4E0B\u9762\u4EE5 PID 1 \u4E3A\u4F8B\u3002

ps -ef
+
+TARGET_PID=1
+java -jar "\${ARTHAS_HOME}/arthas-boot.jar" "\${TARGET_PID}"
+

Arthas \u4F1A\u81EA\u52A8\u6BD4\u8F83\u4E34\u65F6\u5BB9\u5668\u548C\u76EE\u6807 JVM \u7684 mount namespace\u3002\u68C0\u6D4B\u5230\u4E24\u8005\u4E0D\u540C\u65F6\uFF0CArthas \u4F1A\u66B4\u9732\u76EE\u6807 JVM \u7684 attach socket\uFF0C\u5E76\u628A\u5B8C\u6574\u7684 Arthas Home \u590D\u5236\u5230\u76EE\u6807\u5BB9\u5668\u7684\u4E34\u65F6\u76EE\u5F55\u3002\u6574\u4E2A\u8FC7\u7A0B\u4E0D\u9700\u8981\u4E24\u4E2A\u5BB9\u5668\u6302\u8F7D\u5171\u4EAB\u76EE\u5F55\u3002

\u8DE8 mount namespace attach \u6210\u529F\u540E\uFF0C\u76EE\u6807 JVM \u7684 arthas.log \u4F1A\u8BB0\u5F55\u4E0B\u9762\u7684\u7ED3\u6784\u5316\u65E5\u5FD7\u3002

event=arthas_attach status=success mode=cross-mount-namespace targetPid=... arthasHome=... network=... telnet=... http=...
+

\u6267\u884C stop \u4F1A\u505C\u6B62 Arthas\uFF0C\u5E76\u6E05\u7406\u590D\u5236\u5230\u76EE\u6807\u5BB9\u5668\u91CC\u7684\u4E34\u65F6 Arthas Home\u3002quit \u548C exit \u53EA\u65AD\u5F00\u5F53\u524D\u8FDE\u63A5\uFF0C\u4E0D\u4F1A\u505C\u6B62 Arthas \u6216\u6E05\u7406\u8BE5\u76EE\u5F55\u3002

\u5982\u679C\u4E34\u65F6\u5BB9\u5668\u4E2D\u7684 ps \u770B\u4E0D\u5230\u76EE\u6807 JVM\uFF0C\u8BF4\u660E\u5BB9\u5668\u8FD0\u884C\u65F6\u6CA1\u6709\u6309 --target \u5171\u4EAB\u76EE\u6807\u8FDB\u7A0B\uFF0C\u5F53\u524D\u65B9\u5F0F\u65E0\u6CD5 attach\u3002\u5982\u679C attach \u540E\u7684\u670D\u52A1\u542F\u52A8\u68C0\u67E5\u5931\u8D25\uFF0C\u7EC8\u7AEF\u4F1A\u63D0\u793A\u67E5\u770B\u76EE\u6807 JVM \u7684 arthas.log\uFF0C\u53EF\u4EE5\u4ECE\u4E34\u65F6\u5BB9\u5668\u4E2D\u67E5\u627E\u65E5\u5FD7\u3002

find /proc/\${TARGET_PID}/root -name arthas.log 2>/dev/null
+

\u4ECE sidecar \u5BB9\u5668 attach

`,11),x=s("\u4E5F\u53EF\u4EE5\u628A\u5B8C\u6574 JDK \u548C Arthas \u9884\u88C5\u5728\u5E38\u9A7B sidecar \u5BB9\u5668\u4E2D\uFF0C\u518D\u4ECE sidecar attach \u540C\u4E00\u4E2A Pod \u91CC\u7684\u5E94\u7528 JVM\u3002\u521B\u5EFA Pod \u65F6\u5FC5\u987B\u8BBE\u7F6E "),I={href:"https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/share-process-namespace/",target:"_blank",rel:"noopener noreferrer"},j=a("code",null,"shareProcessNamespace: true",-1),J=s("\uFF0C\u5426\u5219 sidecar \u770B\u4E0D\u5230\u5E94\u7528\u5BB9\u5668\u7684 PID\u3002\u8FD9\u4E2A\u5B57\u6BB5\u53EA\u5171\u4EAB PID namespace\u3002\u4E24\u4E2A\u5BB9\u5668\u4ECD\u4F7F\u7528\u72EC\u7ACB\u7684 mount namespace\uFF0CArthas 4.3.4 \u4F1A\u901A\u8FC7 "),P=a("code",null,"/proc//root",-1),R=s(" \u5904\u7406\u6587\u4EF6\u8BBF\u95EE\uFF0C\u4E0D\u9700\u8981\u5171\u4EAB volume\u3002Pod \u5185\u7684\u5BB9\u5668\u5DF2\u7ECF\u5171\u4EAB network namespace\uFF0C\u56E0\u6B64\u4E5F\u4E0D\u9700\u8981 "),E=a("code",null,"NET_ADMIN",-1),V=s("\u3002"),M=t(`

\u4F18\u5148\u8BA9 sidecar \u548C\u5E94\u7528 JVM \u4F7F\u7528\u76F8\u540C\u7684 Linux UID \u548C GID\u3002\u666E\u901A JVM\u3001\u9ED8\u8BA4 /proc \u5B89\u5168\u7B56\u7565\u548C\u53EF\u5199\u4E34\u65F6\u76EE\u5F55\u4E0B\uFF0C\u8FD9\u6761\u8DEF\u5F84\u4E0D\u9700\u8981\u589E\u52A0 Linux capability\u3002

spec:
+  shareProcessNamespace: true
+  containers:
+    - name: app
+      securityContext:
+        runAsUser: 1000
+        runAsGroup: 1000
+    - name: arthas-sidecar
+      image: your-registry/arthas-sidecar:4.3.4
+      securityContext:
+        runAsUser: 1000
+        runAsGroup: 1000
+        runAsNonRoot: true
+        allowPrivilegeEscalation: false
+        capabilities:
+          drop: ["ALL"]
+
`,2),N=s("\u5982\u679C sidecar \u548C\u5E94\u7528 JVM \u7684 UID \u4E0D\u540C\uFF0Csidecar \u5FC5\u987B\u4EE5 UID "),O=a("code",null,"0",-1),S=s(" \u8FD0\u884C\uFF0C\u5E76\u4E14\u76EE\u6807 HotSpot \u5FC5\u987B\u5141\u8BB8 root \u5BA2\u6237\u7AEF\u3002\u8F83\u65B0\u7684 "),H={href:"https://github.com/openjdk/jdk/blob/master/src/hotspot/os/posix/attachListener_posix.cpp#L253-L269",target:"_blank",rel:"noopener noreferrer"},q=s("OpenJDK attach listener"),U=s(" \u63A5\u53D7\u76F8\u540C UID/GID \u6216 UID "),T=a("code",null,"0",-1),L=s("\u3002\u4E0A\u6E38 "),K={href:"https://github.com/openjdk/jdk8u/blob/master/hotspot/src/os/linux/vm/attachListener_linux.cpp#L350-L358",target:"_blank",rel:"noopener noreferrer"},$=s("OpenJDK 8u \u7684\u5B9E\u73B0"),C=s(" \u4ECD\u8981\u6C42 UID/GID \u5B8C\u5168\u4E00\u81F4\uFF0C\u90E8\u5206\u5382\u5546\u6784\u5EFA\u4E5F\u53EF\u80FD\u6709\u4E0D\u540C\u7B56\u7565\u3002\u8FD9\u4E2A\u6821\u9A8C\u53D1\u751F\u5728\u76EE\u6807 JVM \u5185\u90E8\uFF0C\u589E\u52A0 Linux capability \u65E0\u6CD5\u7ED5\u8FC7\u3002\u76EE\u6807 JVM \u4F7F\u7528\u8FD9\u7C7B\u5B9E\u73B0\u65F6\uFF0C\u53EA\u80FD\u91C7\u7528\u76F8\u540C UID/GID \u7684\u914D\u7F6E\u3002"),G=t(`

\u76EE\u6807 HotSpot \u652F\u6301 root \u5BA2\u6237\u7AEF\u65F6\uFF0C\u4E3A\u4E86\u8986\u76D6\u9996\u6B21 attach\u3001\u4E0D\u540C\u6743\u9650\u7684\u4E34\u65F6\u76EE\u5F55\u548C stop \u6E05\u7406\uFF0C\u5EFA\u8BAE\u663E\u5F0F\u4FDD\u7559\u4E0B\u9762\u56DB\u9879 capability\u3002

\u914D\u7F6E\u6216 capability\u7528\u9014
shareProcessNamespace: true\u8BA9 sidecar \u80FD\u770B\u5230\u5E94\u7528 JVM \u7684 PID \u548C /proc/<pid>
runAsUser: 0\u5728\u76EE\u6807 HotSpot \u652F\u6301 root \u5BA2\u6237\u7AEF\u65F6\u901A\u8FC7\u8DE8 UID \u6821\u9A8C
SYS_PTRACE\u901A\u8FC7 ptrace access check \u8BFB\u53D6 /proc/<pid>\uFF0C\u5E76\u8BBF\u95EE /proc/<pid>/root \u548C mount namespace \u4FE1\u606F
KILLUID \u4E0D\u540C\u65F6\u5411\u5C1A\u672A\u542F\u52A8 attach listener \u7684 JVM \u53D1\u9001 SIGQUIT
DAC_OVERRIDE\u8FDE\u63A5\u76EE\u6807\u7528\u6237\u62E5\u6709\u7684 0600 attach socket\uFF0C\u5E76\u5199\u5165\u76EE\u6807\u5BB9\u5668\u7684\u4E34\u65F6\u76EE\u5F55
CHOWN\u628A\u590D\u5236\u5230\u76EE\u6807\u5BB9\u5668\u7684 Arthas Home \u4EA4\u7ED9\u76EE\u6807\u7528\u6237\uFF0C\u4F7F stop \u53EF\u4EE5\u6E05\u7406\u8BE5\u76EE\u5F55

\u4E0B\u9762\u662F\u8DE8 UID \u573A\u666F\u7684 securityContext \u7247\u6BB5\u3002\u5B83\u4E0D\u9700\u8981 privileged: true\u3001SYS_ADMIN\u3001hostPID \u6216 hostPath\u3002

spec:
+  shareProcessNamespace: true
+  containers:
+    - name: arthas-sidecar
+      image: your-registry/arthas-sidecar:4.3.4
+      securityContext:
+        runAsUser: 0
+        runAsGroup: 0
+        allowPrivilegeEscalation: false
+        seccompProfile:
+          type: RuntimeDefault
+        capabilities:
+          drop: ["ALL"]
+          add:
+            - SYS_PTRACE
+            - KILL
+            - DAC_OVERRIDE
+            - CHOWN
+

\u5BB9\u5668\u8FD0\u884C\u65F6\u7684\u9ED8\u8BA4 capability \u96C6\u5408\u901A\u5E38\u5DF2\u7ECF\u5305\u542B KILL\u3001DAC_OVERRIDE \u548C CHOWN\uFF0C\u6240\u4EE5\u4FDD\u7559\u9ED8\u8BA4\u96C6\u5408\u65F6\u5F80\u5F80\u53EA\u9700\u8981\u989D\u5916\u6DFB\u52A0 SYS_PTRACE\u3002\u4E0A\u9762\u7684\u5199\u6CD5\u5148 drop ALL \u518D\u9010\u9879\u6DFB\u52A0\uFF0C\u7ED3\u679C\u4E0D\u4F9D\u8D56\u8FD0\u884C\u65F6\u9ED8\u8BA4\u503C\u3002

`,5),w={class:"custom-container warning"},z=a("p",{class:"custom-container-title"},"\u6CE8\u610F",-1),F=s("Kubernetes \u7684 "),Y={href:"https://kubernetes.io/zh-cn/docs/concepts/security/pod-security-standards/",target:"_blank",rel:"noopener noreferrer"},B=s("Baseline \u548C Restricted Pod Security Standards"),W=s(" \u90FD\u4E0D\u5141\u8BB8\u589E\u52A0 "),X=a("code",null,"SYS_PTRACE",-1),Q=s("\uFF0CRestricted \u8FD8\u7981\u6B62 UID "),Z=a("code",null,"0",-1),aa=s("\u3002\u4F7F\u7528\u8DE8 UID \u914D\u7F6E\u65F6\uFF0C\u9700\u8981\u7531\u96C6\u7FA4\u7BA1\u7406\u5458\u4E3A\u8FD9\u4E2A\u53D7\u4FE1\u4EFB\u7684\u5DE5\u4F5C\u8D1F\u8F7D\u63D0\u4F9B\u4F8B\u5916\u6216\u4E13\u7528 namespace\u3002\u5171\u4EAB PID namespace \u4E5F\u4F1A\u8BA9 sidecar \u770B\u5230\u540C\u4E00 Pod \u5185\u5176\u4ED6\u8FDB\u7A0B\u7684\u53C2\u6570\u3001\u73AF\u5883\u53D8\u91CF\u548C "),sa=a("code",null,"/proc//root",-1),na=s("\uFF0C\u4E0D\u8981\u628A\u8FD9\u4E2A sidecar \u5F00\u653E\u7ED9\u4E0D\u53D7\u4FE1\u4EFB\u7684\u7528\u6237\u3002"),ea=t(`

Arthas attach \u672C\u8EAB\u4E0D\u8C03\u7528 Kubernetes API\uFF0C\u56E0\u6B64 sidecar \u7684 ServiceAccount \u4E0D\u9700\u8981\u989D\u5916 RBAC \u6743\u9650\u3002\u901A\u8FC7 kubectl exec \u8FDB\u5165 sidecar \u7684\u64CD\u4F5C\u4EBA\u5458\u4ECD\u9700\u5BF9\u5E94\u7684 pods/exec \u6743\u9650\u3002

sidecar \u955C\u50CF\u9700\u8981\u5305\u542B\u5B8C\u6574 JDK \u548C Arthas 4.3.4 \u6216\u66F4\u9AD8\u7248\u672C\u3002\u542F\u7528\u5171\u4EAB PID namespace \u540E\uFF0C\u5E94\u7528\u8FDB\u7A0B\u901A\u5E38\u4E0D\u518D\u662F PID 1\uFF0C\u8BF7\u5148\u7528 ps \u67E5\u627E\u5B9E\u9645 PID\u3002

kubectl exec -it \${pod} --container arthas-sidecar -- sh
+
+ps -ef
+TARGET_PID=<java-pid>
+java -jar /opt/arthas/arthas-boot.jar "\${TARGET_PID}"
+

\u5982\u679C\u76F8\u540C UID/GID \u7684\u914D\u7F6E\u4ECD\u7136\u65E0\u6CD5 attach\uFF0C\u68C0\u67E5\u76EE\u6807 JVM \u662F\u5426\u8BBE\u7F6E\u4E86 -XX:+DisableAttachMechanism\uFF0C\u4EE5\u53CA seccomp\u3001AppArmor\u3001SELinux \u6216 /proc \u6302\u8F7D\u7B56\u7565\u662F\u5426\u963B\u6B62\u4E86\u8FDB\u7A0B\u8BBF\u95EE\u3002\u76EE\u6807 JVM \u4F7F\u7528\u81EA\u5B9A\u4E49 java.io.tmpdir \u65F6\uFF0C\u8BE5\u76EE\u5F55\u4E5F\u5FC5\u987B\u5141\u8BB8 attach \u5BA2\u6237\u7AEF\u5199\u5165\u3002

\u628A Arthas \u5B89\u88C5\u5230\u57FA\u7840\u955C\u50CF\u91CC

\u53EF\u4EE5\u5F88\u7B80\u5355\u628A Arthas \u5B89\u88C5\u5230\u4F60\u7684 Docker \u955C\u50CF\u91CC\u3002

FROM openjdk:8-jdk-alpine
+
+# copy arthas
+COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas
+

\u5982\u679C\u60F3\u6307\u5B9A\u7248\u672C\uFF0C\u53EF\u4EE5\u67E5\u770B\u5177\u4F53\u7684 tags\uFF1A

`,8),ta={href:"https://hub.docker.com/r/hengyunabc/arthas/tags",target:"_blank",rel:"noopener noreferrer"},oa=s("https://hub.docker.com/r/hengyunabc/arthas/tags");function ca(pa,ia){const n=i("ExternalLinkIcon");return c(),p("div",null,[r,a("p",null,[d,a("a",u,[k,e(n)]),v,m,b]),h,a("p",null,[g,_,a("a",f,[A,e(n)]),y]),D,a("p",null,[x,a("a",I,[j,e(n)]),J,P,R,E,V]),M,a("p",null,[N,O,S,a("a",H,[q,e(n)]),U,T,L,a("a",K,[$,e(n)]),C]),G,a("div",w,[z,a("p",null,[F,a("a",Y,[B,e(n)]),W,X,Q,Z,aa,sa,na])]),ea,a("p",null,[a("a",ta,[oa,e(n)])])])}const ra=o(l,[["render",ca],["__file","docker.html.vue"]]);export{ra as default}; diff --git a/assets/download.html.9f397283.js b/assets/download.html.1a63d650.js similarity index 90% rename from assets/download.html.9f397283.js rename to assets/download.html.1a63d650.js index 0b647dbb9..ee2a51a1b 100644 --- a/assets/download.html.9f397283.js +++ b/assets/download.html.1a63d650.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-2116d2e1","path":"/doc/download.html","title":"\u4E0B\u8F7D","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4E0B\u8F7D\u5168\u91CF\u5305","slug":"\u4E0B\u8F7D\u5168\u91CF\u5305","link":"#\u4E0B\u8F7D\u5168\u91CF\u5305","children":[{"level":3,"title":"\u4ECE Maven \u4ED3\u5E93\u4E0B\u8F7D","slug":"\u4ECE-maven-\u4ED3\u5E93\u4E0B\u8F7D","link":"#\u4ECE-maven-\u4ED3\u5E93\u4E0B\u8F7D","children":[]},{"level":3,"title":"\u4ECE Github Releases \u9875\u4E0B\u8F7D","slug":"\u4ECE-github-releases-\u9875\u4E0B\u8F7D","link":"#\u4ECE-github-releases-\u9875\u4E0B\u8F7D","children":[]},{"level":3,"title":"\u7528 as.sh \u542F\u52A8","slug":"\u7528-as-sh-\u542F\u52A8","link":"#\u7528-as-sh-\u542F\u52A8","children":[]},{"level":3,"title":"\u7528 arthas-boot \u542F\u52A8","slug":"\u7528-arthas-boot-\u542F\u52A8","link":"#\u7528-arthas-boot-\u542F\u52A8","children":[]}]},{"level":2,"title":"\u4E0B\u8F7D\u79BB\u7EBF\u6587\u6863","slug":"\u4E0B\u8F7D\u79BB\u7EBF\u6587\u6863","link":"#\u4E0B\u8F7D\u79BB\u7EBF\u6587\u6863","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/download.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-2116d2e1","path":"/doc/download.html","title":"\u4E0B\u8F7D","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4E0B\u8F7D\u5168\u91CF\u5305","slug":"\u4E0B\u8F7D\u5168\u91CF\u5305","link":"#\u4E0B\u8F7D\u5168\u91CF\u5305","children":[{"level":3,"title":"\u4ECE Maven \u4ED3\u5E93\u4E0B\u8F7D","slug":"\u4ECE-maven-\u4ED3\u5E93\u4E0B\u8F7D","link":"#\u4ECE-maven-\u4ED3\u5E93\u4E0B\u8F7D","children":[]},{"level":3,"title":"\u4ECE Github Releases \u9875\u4E0B\u8F7D","slug":"\u4ECE-github-releases-\u9875\u4E0B\u8F7D","link":"#\u4ECE-github-releases-\u9875\u4E0B\u8F7D","children":[]},{"level":3,"title":"\u7528 as.sh \u542F\u52A8","slug":"\u7528-as-sh-\u542F\u52A8","link":"#\u7528-as-sh-\u542F\u52A8","children":[]},{"level":3,"title":"\u7528 arthas-boot \u542F\u52A8","slug":"\u7528-arthas-boot-\u542F\u52A8","link":"#\u7528-arthas-boot-\u542F\u52A8","children":[]}]},{"level":2,"title":"\u4E0B\u8F7D\u79BB\u7EBF\u6587\u6863","slug":"\u4E0B\u8F7D\u79BB\u7EBF\u6587\u6863","link":"#\u4E0B\u8F7D\u79BB\u7EBF\u6587\u6863","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/download.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/download.html.336d4739.js b/assets/download.html.5f1c78c9.js similarity index 98% rename from assets/download.html.336d4739.js rename to assets/download.html.5f1c78c9.js index eab3333f3..5d7a1af5c 100644 --- a/assets/download.html.336d4739.js +++ b/assets/download.html.5f1c78c9.js @@ -1,4 +1,4 @@ -import{_ as t,o as r,c as d,a,b as s,d as o,e,r as i}from"./app.524ecf5c.js";const l={},c=o('

Download

Download full package

Download from maven central

',3),h=e("Latest Version, Click To Download: "),u={href:"https://arthas.aliyun.com/download/latest_version",target:"_blank",rel:"noopener noreferrer"},p=a("img",{src:"https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square",alt:"",title:"Arthas"},null,-1),m=a("h3",{id:"download-from-github-releases",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#download-from-github-releases","aria-hidden":"true"},"#"),e(" Download from Github Releases")],-1),_={href:"https://github.com/alibaba/arthas/releases",target:"_blank",rel:"noopener noreferrer"},b=e("https://github.com/alibaba/arthas/releases"),v=o(`

Use as.sh

Download and unzip, find as.sh in the directory. Start it in bash:

./as.sh
+import{_ as t,o as r,c as d,a,b as s,d as o,e,r as i}from"./app.e2427bec.js";const l={},c=o('

Download

Download full package

Download from maven central

',3),h=e("Latest Version, Click To Download: "),u={href:"https://arthas.aliyun.com/download/latest_version",target:"_blank",rel:"noopener noreferrer"},p=a("img",{src:"https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square",alt:"",title:"Arthas"},null,-1),m=a("h3",{id:"download-from-github-releases",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#download-from-github-releases","aria-hidden":"true"},"#"),e(" Download from Github Releases")],-1),_={href:"https://github.com/alibaba/arthas/releases",target:"_blank",rel:"noopener noreferrer"},b=e("https://github.com/alibaba/arthas/releases"),v=o(`

Use as.sh

Download and unzip, find as.sh in the directory. Start it in bash:

./as.sh
 

Print usage:

./as.sh -h
 

Use arthas-boot.jar

Download and unzip, find arthas-boot.jar in the directory. Start with java command:

java -jar arthas-boot.jar
 

Print usage:

java -jar arthas-boot.jar -h
diff --git a/assets/download.html.96b3e09e.js b/assets/download.html.6df5a02f.js
similarity index 97%
rename from assets/download.html.96b3e09e.js
rename to assets/download.html.6df5a02f.js
index 7b4e12371..4c7980d5b 100644
--- a/assets/download.html.96b3e09e.js
+++ b/assets/download.html.6df5a02f.js
@@ -1,4 +1,4 @@
-import{_ as t,o,c as i,a,b as n,d as r,e,r as d}from"./app.524ecf5c.js";const h={},l=r('

\u4E0B\u8F7D

\u4E0B\u8F7D\u5168\u91CF\u5305

\u4ECE Maven \u4ED3\u5E93\u4E0B\u8F7D

',3),c=e("\u6700\u65B0\u7248\u672C\uFF0C\u70B9\u51FB\u4E0B\u8F7D\uFF1A"),u={href:"https://arthas.aliyun.com/download/latest_version?mirror=aliyun",target:"_blank",rel:"noopener noreferrer"},p=a("img",{src:"https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square",alt:"",title:"Arthas"},null,-1),_=a("h3",{id:"\u4ECE-github-releases-\u9875\u4E0B\u8F7D",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u4ECE-github-releases-\u9875\u4E0B\u8F7D","aria-hidden":"true"},"#"),e(" \u4ECE Github Releases \u9875\u4E0B\u8F7D")],-1),b={href:"https://github.com/alibaba/arthas/releases",target:"_blank",rel:"noopener noreferrer"},m=e("https://github.com/alibaba/arthas/releases"),v=r(`

\u7528 as.sh \u542F\u52A8

\u89E3\u538B\u540E\uFF0C\u5728\u6587\u4EF6\u5939\u91CC\u6709as.sh\uFF0C\u76F4\u63A5\u7528./as.sh\u7684\u65B9\u5F0F\u542F\u52A8\uFF1A

./as.sh
+import{_ as t,o,c as i,a,b as n,d as r,e,r as d}from"./app.e2427bec.js";const h={},l=r('

\u4E0B\u8F7D

\u4E0B\u8F7D\u5168\u91CF\u5305

\u4ECE Maven \u4ED3\u5E93\u4E0B\u8F7D

',3),c=e("\u6700\u65B0\u7248\u672C\uFF0C\u70B9\u51FB\u4E0B\u8F7D\uFF1A"),u={href:"https://arthas.aliyun.com/download/latest_version?mirror=aliyun",target:"_blank",rel:"noopener noreferrer"},p=a("img",{src:"https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square",alt:"",title:"Arthas"},null,-1),_=a("h3",{id:"\u4ECE-github-releases-\u9875\u4E0B\u8F7D",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u4ECE-github-releases-\u9875\u4E0B\u8F7D","aria-hidden":"true"},"#"),e(" \u4ECE Github Releases \u9875\u4E0B\u8F7D")],-1),b={href:"https://github.com/alibaba/arthas/releases",target:"_blank",rel:"noopener noreferrer"},m=e("https://github.com/alibaba/arthas/releases"),v=r(`

\u7528 as.sh \u542F\u52A8

\u89E3\u538B\u540E\uFF0C\u5728\u6587\u4EF6\u5939\u91CC\u6709as.sh\uFF0C\u76F4\u63A5\u7528./as.sh\u7684\u65B9\u5F0F\u542F\u52A8\uFF1A

./as.sh
 

\u6253\u5370\u5E2E\u52A9\u4FE1\u606F\uFF1A

./as.sh -h
 

\u7528 arthas-boot \u542F\u52A8

\u6216\u8005\u5728\u89E3\u538B\u540E\uFF0C\u5728\u6587\u4EF6\u5939\u91CC\u6709arthas-boot.jar\uFF0C\u76F4\u63A5\u7528java -jar\u7684\u65B9\u5F0F\u542F\u52A8\uFF1A

java -jar arthas-boot.jar
 

\u6253\u5370\u5E2E\u52A9\u4FE1\u606F\uFF1A

java -jar arthas-boot.jar -h
diff --git a/assets/download.html.1194e616.js b/assets/download.html.c5d48124.js
similarity index 88%
rename from assets/download.html.1194e616.js
rename to assets/download.html.c5d48124.js
index 696d2b549..59a0525d7 100644
--- a/assets/download.html.1194e616.js
+++ b/assets/download.html.c5d48124.js
@@ -1 +1 @@
-const e=JSON.parse('{"key":"v-8d912d66","path":"/en/doc/download.html","title":"Download","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Download full package","slug":"download-full-package","link":"#download-full-package","children":[{"level":3,"title":"Download from maven central","slug":"download-from-maven-central","link":"#download-from-maven-central","children":[]},{"level":3,"title":"Download from Github Releases","slug":"download-from-github-releases","link":"#download-from-github-releases","children":[]},{"level":3,"title":"Use as.sh","slug":"use-as-sh","link":"#use-as-sh","children":[]},{"level":3,"title":"Use arthas-boot.jar","slug":"use-arthas-boot-jar","link":"#use-arthas-boot-jar","children":[]}]},{"level":2,"title":"Download Offline Help Documentation","slug":"download-offline-help-documentation","link":"#download-offline-help-documentation","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/download.md","version":"4.3.3"}');export{e as data};
+const e=JSON.parse('{"key":"v-8d912d66","path":"/en/doc/download.html","title":"Download","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Download full package","slug":"download-full-package","link":"#download-full-package","children":[{"level":3,"title":"Download from maven central","slug":"download-from-maven-central","link":"#download-from-maven-central","children":[]},{"level":3,"title":"Download from Github Releases","slug":"download-from-github-releases","link":"#download-from-github-releases","children":[]},{"level":3,"title":"Use as.sh","slug":"use-as-sh","link":"#use-as-sh","children":[]},{"level":3,"title":"Use arthas-boot.jar","slug":"use-arthas-boot-jar","link":"#use-arthas-boot-jar","children":[]}]},{"level":2,"title":"Download Offline Help Documentation","slug":"download-offline-help-documentation","link":"#download-offline-help-documentation","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/download.md","version":"4.3.5"}');export{e as data};
diff --git a/assets/dump.html.c3f8bd1c.js b/assets/dump.html.0eae962a.js
similarity index 78%
rename from assets/dump.html.c3f8bd1c.js
rename to assets/dump.html.0eae962a.js
index 2d22075a8..b248c18b8 100644
--- a/assets/dump.html.c3f8bd1c.js
+++ b/assets/dump.html.0eae962a.js
@@ -1 +1 @@
-const e=JSON.parse('{"key":"v-1fe4a616","path":"/doc/dump.html","title":"dump","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/dump.md","version":"4.3.3"}');export{e as data};
+const e=JSON.parse('{"key":"v-1fe4a616","path":"/doc/dump.html","title":"dump","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/dump.md","version":"4.3.5"}');export{e as data};
diff --git a/assets/dump.html.d49fa0fb.js b/assets/dump.html.24ea4d2e.js
similarity index 65%
rename from assets/dump.html.d49fa0fb.js
rename to assets/dump.html.24ea4d2e.js
index de53283e8..d593d231a 100644
--- a/assets/dump.html.d49fa0fb.js
+++ b/assets/dump.html.24ea4d2e.js
@@ -1 +1 @@
-const e=JSON.parse('{"key":"v-471b4d3e","path":"/en/doc/dump.html","title":"dump","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Options","slug":"options","link":"#options","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/dump.md","version":"4.3.3"}');export{e as data};
+const e=JSON.parse('{"key":"v-471b4d3e","path":"/en/doc/dump.html","title":"dump","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Options","slug":"options","link":"#options","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/dump.md","version":"4.3.5"}');export{e as data};
diff --git a/assets/dump.html.f81dadc5.js b/assets/dump.html.30dc9666.js
similarity index 61%
rename from assets/dump.html.f81dadc5.js
rename to assets/dump.html.30dc9666.js
index c76d87b16..1fe52198b 100644
--- a/assets/dump.html.f81dadc5.js
+++ b/assets/dump.html.30dc9666.js
@@ -1,4 +1,4 @@
-import{_ as c,o,c as d,a as e,b as a,w as t,e as s,d as r,r as l}from"./app.524ecf5c.js";const u={},p=e("h1",{id:"dump",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#dump","aria-hidden":"true"},"#"),s(" dump")],-1),h={href:"https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=command-dump",target:"_blank",rel:"noopener noreferrer"},m=e("code",null,"dump",-1),v=s(" online tutorial"),b=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"TIP"),e("p",null,"Dump the bytecode for the particular classes to the specified directory.")],-1),g=s("The dump command is used to dump the bytecode of classes actually running in the JVM to a specified directory. It is suitable for bulk downloading the bytecode of classes in a specific package directory. If you need to decompile a single class or view class information in real-time, you can refer to "),_=s("jad"),f=s("."),k=e("h2",{id:"options",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#options","aria-hidden":"true"},"#"),s(" Options")],-1),L=e("thead",null,[e("tr",null,[e("th",{style:{"text-align":"right"}},"Name"),e("th",{style:{"text-align":"left"}},"Specification")])],-1),y=e("tr",null,[e("td",{style:{"text-align":"right"}},[e("em",null,"class-pattern")]),e("td",{style:{"text-align":"left"}},"class name pattern")],-1),x=e("td",{style:{"text-align":"right"}},[e("code",null,"[c:]")],-1),C={style:{"text-align":"left"}},A=s("hashcode of the "),S=s("class loader"),w=s(" that loaded the target class"),O=e("tr",null,[e("td",{style:{"text-align":"right"}},[e("code",null,"[classLoaderClass:]")]),e("td",{style:{"text-align":"left"}},"The class name of the ClassLoader that executes the expression.")],-1),E=e("tr",null,[e("td",{style:{"text-align":"right"}},[e("code",null,"[d:]")]),e("td",{style:{"text-align":"left"}},"set the destination directory for class files")],-1),$=e("tr",null,[e("td",{style:{"text-align":"right"}},[e("code",null,"[E]")]),e("td",{style:{"text-align":"left"}},"turn on regex match, the default behavior is wild card match")],-1),j=r(`

Usage

$ dump java.lang.String
+import{_ as l,o as i,c,a as e,b as n,w as t,e as s,d,r as o}from"./app.e2427bec.js";const r={},u=e("h1",{id:"dump",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#dump","aria-hidden":"true"},"#"),s(" dump")],-1),p=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"TIP"),e("p",null,"Dump the bytecode for the particular classes to the specified directory.")],-1),h=s("The dump command is used to dump the bytecode of classes actually running in the JVM to a specified directory. It is suitable for bulk downloading the bytecode of classes in a specific package directory. If you need to decompile a single class or view class information in real-time, you can refer to "),m=s("jad"),v=s("."),b=e("h2",{id:"options",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#options","aria-hidden":"true"},"#"),s(" Options")],-1),g=e("thead",null,[e("tr",null,[e("th",{style:{"text-align":"right"}},"Name"),e("th",{style:{"text-align":"left"}},"Specification")])],-1),f=e("tr",null,[e("td",{style:{"text-align":"right"}},[e("em",null,"class-pattern")]),e("td",{style:{"text-align":"left"}},"class name pattern")],-1),_=e("td",{style:{"text-align":"right"}},[e("code",null,"[c:]")],-1),k={style:{"text-align":"left"}},L=s("hashcode of the "),y=s("class loader"),C=s(" that loaded the target class"),x=e("tr",null,[e("td",{style:{"text-align":"right"}},[e("code",null,"[classLoaderClass:]")]),e("td",{style:{"text-align":"left"}},"The class name of the ClassLoader that executes the expression.")],-1),A=e("tr",null,[e("td",{style:{"text-align":"right"}},[e("code",null,"[d:]")]),e("td",{style:{"text-align":"left"}},"set the destination directory for class files")],-1),S=e("tr",null,[e("td",{style:{"text-align":"right"}},[e("code",null,"[E]")]),e("td",{style:{"text-align":"left"}},"turn on regex match, the default behavior is wild card match")],-1),w=d(`

Usage

$ 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.
@@ -17,4 +17,4 @@ Affect(row-cnt:1$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.
-
  • PS: Here the classLoaderClass in java 8 is sun.misc.Launcher$AppClassLoader, while in java 11 it's jdk.internal.loader.ClassLoaders$AppClassLoader. Currently killercoda using java 11.

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 <hashcode> is dynamic.

`,12);function H(I,N){const i=l("ExternalLinkIcon"),n=l("RouterLink");return o(),d("div",null,[p,e("p",null,[e("a",h,[m,v,a(i)])]),b,e("p",null,[g,a(n,{to:"/en/doc/jad.html"},{default:t(()=>[_]),_:1}),f]),k,e("table",null,[L,e("tbody",null,[y,e("tr",null,[x,e("td",C,[A,a(n,{to:"/en/doc/classloader.html"},{default:t(()=>[S]),_:1}),w])]),O,E,$])]),j])}const D=c(u,[["render",H],["__file","dump.html.vue"]]);export{D as default}; +
  • PS: Here the classLoaderClass in java 8 is sun.misc.Launcher$AppClassLoader, while in java 11 it's jdk.internal.loader.ClassLoaders$AppClassLoader. Currently killercoda using java 11.

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 <hashcode> is dynamic.

`,12);function O($,E){const a=o("RouterLink");return i(),c("div",null,[u,p,e("p",null,[h,n(a,{to:"/en/doc/jad.html"},{default:t(()=>[m]),_:1}),v]),b,e("table",null,[g,e("tbody",null,[f,e("tr",null,[_,e("td",k,[L,n(a,{to:"/en/doc/classloader.html"},{default:t(()=>[y]),_:1}),C])]),x,A,S])]),w])}const H=l(r,[["render",O],["__file","dump.html.vue"]]);export{H as default}; diff --git a/assets/dump.html.68dd64e1.js b/assets/dump.html.894aad59.js similarity index 87% rename from assets/dump.html.68dd64e1.js rename to assets/dump.html.894aad59.js index 82e4432fb..f436444b6 100644 --- a/assets/dump.html.68dd64e1.js +++ b/assets/dump.html.894aad59.js @@ -1,4 +1,4 @@ -import{_ as d,o as c,c as i,a,b as e,w as r,e as s,d as o,r as n}from"./app.524ecf5c.js";const p={},u=a("h1",{id:"dump",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#dump","aria-hidden":"true"},"#"),s(" dump")],-1),m={href:"https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=command-dump",target:"_blank",rel:"noopener noreferrer"},h=a("code",null,"dump",-1),v=s("\u5728\u7EBF\u6559\u7A0B"),b=a("div",{class:"custom-container tip"},[a("p",{class:"custom-container-title"},"\u63D0\u793A"),a("p",null,"dump \u5DF2\u52A0\u8F7D\u7C7B\u7684 bytecode \u5230\u7279\u5B9A\u76EE\u5F55")],-1),g=s("dump \u547D\u4EE4\u5C06 JVM \u4E2D\u5B9E\u9645\u8FD0\u884C\u7684 class \u7684 byte code dump \u5230\u6307\u5B9A\u76EE\u5F55\uFF0C\u9002\u7528\u573A\u666F\u6279\u91CF\u4E0B\u8F7D\u6307\u5B9A\u5305\u76EE\u5F55\u7684 class \u5B57\u8282\u7801\uFF1B\u5982\u9700\u53CD\u7F16\u8BD1\u5355\u4E00\u7C7B\u3001\u5B9E\u65F6\u67E5\u770B\u7C7B\u4FE1\u606F\uFF0C\u53EF\u53C2\u8003 "),L=s("jad"),k=s("\u3002"),C=o(`

\u53C2\u6570\u8BF4\u660E

\u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
class-pattern\u7C7B\u540D\u8868\u8FBE\u5F0F\u5339\u914D
[c:]\u7C7B\u6240\u5C5E ClassLoader \u7684 hashcode
[classLoaderClass:]\u6307\u5B9A\u6267\u884C\u8868\u8FBE\u5F0F\u7684 ClassLoader \u7684 class name
[d:]\u8BBE\u7F6E\u7C7B\u6587\u4EF6\u7684\u76EE\u6807\u76EE\u5F55
[E]\u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u4E3A\u901A\u914D\u7B26\u5339\u914D

\u4F7F\u7528\u53C2\u8003

$ dump java.lang.String
+import{_ as n,o as t,c as d,a,b as l,w as c,e as s,d as i,r}from"./app.e2427bec.js";const o={},p=a("h1",{id:"dump",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#dump","aria-hidden":"true"},"#"),s(" dump")],-1),u=a("div",{class:"custom-container tip"},[a("p",{class:"custom-container-title"},"\u63D0\u793A"),a("p",null,"dump \u5DF2\u52A0\u8F7D\u7C7B\u7684 bytecode \u5230\u7279\u5B9A\u76EE\u5F55")],-1),m=s("dump \u547D\u4EE4\u5C06 JVM \u4E2D\u5B9E\u9645\u8FD0\u884C\u7684 class \u7684 byte code dump \u5230\u6307\u5B9A\u76EE\u5F55\uFF0C\u9002\u7528\u573A\u666F\u6279\u91CF\u4E0B\u8F7D\u6307\u5B9A\u5305\u76EE\u5F55\u7684 class \u5B57\u8282\u7801\uFF1B\u5982\u9700\u53CD\u7F16\u8BD1\u5355\u4E00\u7C7B\u3001\u5B9E\u65F6\u67E5\u770B\u7C7B\u4FE1\u606F\uFF0C\u53EF\u53C2\u8003 "),h=s("jad"),v=s("\u3002"),b=i(`

\u53C2\u6570\u8BF4\u660E

\u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
class-pattern\u7C7B\u540D\u8868\u8FBE\u5F0F\u5339\u914D
[c:]\u7C7B\u6240\u5C5E ClassLoader \u7684 hashcode
[classLoaderClass:]\u6307\u5B9A\u6267\u884C\u8868\u8FBE\u5F0F\u7684 ClassLoader \u7684 class name
[d:]\u8BBE\u7F6E\u7C7B\u6587\u4EF6\u7684\u76EE\u6807\u76EE\u5F55
[E]\u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u4E3A\u901A\u914D\u7B26\u5339\u914D

\u4F7F\u7528\u53C2\u8003

$ 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.
@@ -17,4 +17,4 @@ Affect(row-cnt:1$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.
-
  • \u6CE8\uFF1A\u8FD9\u91CC classLoaderClass \u5728 java 8 \u662F sun.misc.Launcher$AppClassLoader\uFF0C\u800C java 11 \u7684 classloader \u662F jdk.internal.loader.ClassLoaders$AppClassLoader\uFF0Ckillercoda \u76EE\u524D\u73AF\u5883\u662F java11\u3002

--classLoaderClass \u7684\u503C\u662F ClassLoader \u7684\u7C7B\u540D\uFF0C\u53EA\u6709\u5339\u914D\u5230\u552F\u4E00\u7684 ClassLoader \u5B9E\u4F8B\u65F6\u624D\u80FD\u5DE5\u4F5C\uFF0C\u76EE\u7684\u662F\u65B9\u4FBF\u8F93\u5165\u901A\u7528\u547D\u4EE4\uFF0C\u800C-c <hashcode>\u662F\u52A8\u6001\u53D8\u5316\u7684\u3002

`,14);function _(f,x){const t=n("ExternalLinkIcon"),l=n("RouterLink");return c(),i("div",null,[u,a("p",null,[a("a",m,[h,v,e(t)])]),b,a("p",null,[g,e(l,{to:"/doc/jad.html"},{default:r(()=>[L]),_:1}),k]),C])}const y=d(p,[["render",_],["__file","dump.html.vue"]]);export{y as default}; +
  • \u6CE8\uFF1A\u8FD9\u91CC classLoaderClass \u5728 java 8 \u662F sun.misc.Launcher$AppClassLoader\uFF0C\u800C java 11 \u7684 classloader \u662F jdk.internal.loader.ClassLoaders$AppClassLoader\uFF0Ckillercoda \u76EE\u524D\u73AF\u5883\u662F java11\u3002

--classLoaderClass \u7684\u503C\u662F ClassLoader \u7684\u7C7B\u540D\uFF0C\u53EA\u6709\u5339\u914D\u5230\u552F\u4E00\u7684 ClassLoader \u5B9E\u4F8B\u65F6\u624D\u80FD\u5DE5\u4F5C\uFF0C\u76EE\u7684\u662F\u65B9\u4FBF\u8F93\u5165\u901A\u7528\u547D\u4EE4\uFF0C\u800C-c <hashcode>\u662F\u52A8\u6001\u53D8\u5316\u7684\u3002

`,14);function g(L,k){const e=r("RouterLink");return t(),d("div",null,[p,u,a("p",null,[m,l(e,{to:"/doc/jad.html"},{default:c(()=>[h]),_:1}),v]),b])}const f=n(o,[["render",g],["__file","dump.html.vue"]]);export{f as default}; diff --git a/assets/echo.html.1ca1bcbf.js b/assets/echo.html.1ca1bcbf.js new file mode 100644 index 000000000..f254235b8 --- /dev/null +++ b/assets/echo.html.1ca1bcbf.js @@ -0,0 +1,2 @@ +import{_ as e,o as a,c as s,d as n}from"./app.e2427bec.js";const t={},c=n(`

echo

TIP

write arguments to the standard output.

Usage

$ echo 'hello'
+
`,4),i=[c];function o(r,d){return a(),s("div",null,i)}const l=e(t,[["render",o],["__file","echo.html.vue"]]);export{l as default}; diff --git a/assets/echo.html.42bccc7b.js b/assets/echo.html.42bccc7b.js deleted file mode 100644 index cd522b825..000000000 --- a/assets/echo.html.42bccc7b.js +++ /dev/null @@ -1,2 +0,0 @@ -import{_ as s,o,c as t,a as e,b as c,e as a,d as r,r as i}from"./app.524ecf5c.js";const l={},d=e("h1",{id:"echo",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#echo","aria-hidden":"true"},"#"),a(" echo")],-1),h={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-echo",target:"_blank",rel:"noopener noreferrer"},_=e("code",null,"echo",-1),u=a("\u5728\u7EBF\u6559\u7A0B"),p=r(`

\u63D0\u793A

\u6253\u5370\u53C2\u6570\uFF0C\u548C linux \u91CC\u7684 echo \u547D\u4EE4\u7C7B\u4F3C\u3002

\u4F7F\u7528\u53C2\u8003

$ echo 'hello'
-
`,3);function m(f,v){const n=i("ExternalLinkIcon");return o(),t("div",null,[d,e("p",null,[e("a",h,[_,u,c(n)])]),p])}const x=s(l,[["render",m],["__file","echo.html.vue"]]);export{x as default}; diff --git a/assets/echo.html.e5a5e66b.js b/assets/echo.html.4b25719e.js similarity index 71% rename from assets/echo.html.e5a5e66b.js rename to assets/echo.html.4b25719e.js index 484964083..16682ce4c 100644 --- a/assets/echo.html.e5a5e66b.js +++ b/assets/echo.html.4b25719e.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-2c48f364","path":"/doc/echo.html","title":"echo","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/echo.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-2c48f364","path":"/doc/echo.html","title":"echo","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/echo.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/echo.html.6baec513.js b/assets/echo.html.6baec513.js deleted file mode 100644 index bbebd4bf3..000000000 --- a/assets/echo.html.6baec513.js +++ /dev/null @@ -1,2 +0,0 @@ -import{_ as s,o as t,c as o,a as e,b as c,e as a,d as r,r as i}from"./app.524ecf5c.js";const l={},d=e("h1",{id:"echo",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#echo","aria-hidden":"true"},"#"),a(" echo")],-1),h={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-echo",target:"_blank",rel:"noopener noreferrer"},u=e("code",null,"echo",-1),_=a(" online tutorial"),p=r(`

TIP

write arguments to the standard output.

Usage

$ echo 'hello'
-
`,3);function m(g,f){const n=i("ExternalLinkIcon");return t(),o("div",null,[d,e("p",null,[e("a",h,[u,_,c(n)])]),p])}const b=s(l,[["render",m],["__file","echo.html.vue"]]);export{b as default}; diff --git a/assets/echo.html.8bd53ad3.js b/assets/echo.html.8bd53ad3.js new file mode 100644 index 000000000..0476384e3 --- /dev/null +++ b/assets/echo.html.8bd53ad3.js @@ -0,0 +1,2 @@ +import{_ as e,o as a,c as s,d as c}from"./app.e2427bec.js";const n={},i=c(`

echo

\u63D0\u793A

\u6253\u5370\u53C2\u6570\uFF0C\u548C linux \u91CC\u7684 echo \u547D\u4EE4\u7C7B\u4F3C\u3002

\u4F7F\u7528\u53C2\u8003

$ echo 'hello'
+
`,4),t=[i];function o(r,d){return a(),s("div",null,t)}const h=e(n,[["render",o],["__file","echo.html.vue"]]);export{h as default}; diff --git a/assets/echo.html.54dceeee.js b/assets/echo.html.fdda77b4.js similarity index 68% rename from assets/echo.html.54dceeee.js rename to assets/echo.html.fdda77b4.js index b7cf03896..a4c5c497e 100644 --- a/assets/echo.html.54dceeee.js +++ b/assets/echo.html.fdda77b4.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-18ad9fd0","path":"/en/doc/echo.html","title":"echo","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/echo.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-18ad9fd0","path":"/en/doc/echo.html","title":"echo","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/echo.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/external-command.html.669250f4.js b/assets/external-command.html.3e8d782b.js similarity index 92% rename from assets/external-command.html.669250f4.js rename to assets/external-command.html.3e8d782b.js index 4e4f42d33..2c88c98fa 100644 --- a/assets/external-command.html.669250f4.js +++ b/assets/external-command.html.3e8d782b.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-ef7849a8","path":"/en/doc/external-command.html","title":"Load External Commands","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Loading methods","slug":"loading-methods","link":"#loading-methods","children":[{"level":3,"title":"Command line","slug":"command-line","link":"#command-line","children":[]},{"level":3,"title":"arthas.properties","slug":"arthas-properties","link":"#arthas-properties","children":[]},{"level":3,"title":"Default commands directory","slug":"default-commands-directory","link":"#default-commands-directory","children":[]}]},{"level":2,"title":"Directory scanning rules","slug":"directory-scanning-rules","link":"#directory-scanning-rules","children":[]},{"level":2,"title":"Writing an external command","slug":"writing-an-external-command","link":"#writing-an-external-command","children":[]},{"level":2,"title":"Maven dependencies","slug":"maven-dependencies","link":"#maven-dependencies","children":[]},{"level":2,"title":"Build and verify","slug":"build-and-verify","link":"#build-and-verify","children":[]},{"level":2,"title":"Loading behavior and conflicts","slug":"loading-behavior-and-conflicts","link":"#loading-behavior-and-conflicts","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/external-command.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-ef7849a8","path":"/en/doc/external-command.html","title":"Load External Commands","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Loading methods","slug":"loading-methods","link":"#loading-methods","children":[{"level":3,"title":"Command line","slug":"command-line","link":"#command-line","children":[]},{"level":3,"title":"arthas.properties","slug":"arthas-properties","link":"#arthas-properties","children":[]},{"level":3,"title":"Default commands directory","slug":"default-commands-directory","link":"#default-commands-directory","children":[]}]},{"level":2,"title":"Directory scanning rules","slug":"directory-scanning-rules","link":"#directory-scanning-rules","children":[]},{"level":2,"title":"Writing an external command","slug":"writing-an-external-command","link":"#writing-an-external-command","children":[]},{"level":2,"title":"Maven dependencies","slug":"maven-dependencies","link":"#maven-dependencies","children":[]},{"level":2,"title":"Build and verify","slug":"build-and-verify","link":"#build-and-verify","children":[]},{"level":2,"title":"Loading behavior and conflicts","slug":"loading-behavior-and-conflicts","link":"#loading-behavior-and-conflicts","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/external-command.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/external-command.html.4a91a1bc.js b/assets/external-command.html.9a47f025.js similarity index 93% rename from assets/external-command.html.4a91a1bc.js rename to assets/external-command.html.9a47f025.js index 6545a8156..d2f1d3f73 100644 --- a/assets/external-command.html.4a91a1bc.js +++ b/assets/external-command.html.9a47f025.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-6a3a70c0","path":"/doc/external-command.html","title":"\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u52A0\u8F7D\u65B9\u5F0F","slug":"\u52A0\u8F7D\u65B9\u5F0F","link":"#\u52A0\u8F7D\u65B9\u5F0F","children":[{"level":3,"title":"\u901A\u8FC7\u547D\u4EE4\u884C\u6307\u5B9A","slug":"\u901A\u8FC7\u547D\u4EE4\u884C\u6307\u5B9A","link":"#\u901A\u8FC7\u547D\u4EE4\u884C\u6307\u5B9A","children":[]},{"level":3,"title":"\u901A\u8FC7 arthas.properties \u6307\u5B9A","slug":"\u901A\u8FC7-arthas-properties-\u6307\u5B9A","link":"#\u901A\u8FC7-arthas-properties-\u6307\u5B9A","children":[]},{"level":3,"title":"\u9ED8\u8BA4 commands \u76EE\u5F55","slug":"\u9ED8\u8BA4-commands-\u76EE\u5F55","link":"#\u9ED8\u8BA4-commands-\u76EE\u5F55","children":[]}]},{"level":2,"title":"\u76EE\u5F55\u626B\u63CF\u89C4\u5219","slug":"\u76EE\u5F55\u626B\u63CF\u89C4\u5219","link":"#\u76EE\u5F55\u626B\u63CF\u89C4\u5219","children":[]},{"level":2,"title":"\u7F16\u5199\u5916\u90E8\u547D\u4EE4","slug":"\u7F16\u5199\u5916\u90E8\u547D\u4EE4","link":"#\u7F16\u5199\u5916\u90E8\u547D\u4EE4","children":[]},{"level":2,"title":"Maven \u4F9D\u8D56","slug":"maven-\u4F9D\u8D56","link":"#maven-\u4F9D\u8D56","children":[]},{"level":2,"title":"\u6784\u5EFA\u548C\u9A8C\u8BC1","slug":"\u6784\u5EFA\u548C\u9A8C\u8BC1","link":"#\u6784\u5EFA\u548C\u9A8C\u8BC1","children":[]},{"level":2,"title":"\u52A0\u8F7D\u884C\u4E3A\u548C\u51B2\u7A81\u5904\u7406","slug":"\u52A0\u8F7D\u884C\u4E3A\u548C\u51B2\u7A81\u5904\u7406","link":"#\u52A0\u8F7D\u884C\u4E3A\u548C\u51B2\u7A81\u5904\u7406","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/external-command.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-6a3a70c0","path":"/doc/external-command.html","title":"\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u52A0\u8F7D\u65B9\u5F0F","slug":"\u52A0\u8F7D\u65B9\u5F0F","link":"#\u52A0\u8F7D\u65B9\u5F0F","children":[{"level":3,"title":"\u901A\u8FC7\u547D\u4EE4\u884C\u6307\u5B9A","slug":"\u901A\u8FC7\u547D\u4EE4\u884C\u6307\u5B9A","link":"#\u901A\u8FC7\u547D\u4EE4\u884C\u6307\u5B9A","children":[]},{"level":3,"title":"\u901A\u8FC7 arthas.properties \u6307\u5B9A","slug":"\u901A\u8FC7-arthas-properties-\u6307\u5B9A","link":"#\u901A\u8FC7-arthas-properties-\u6307\u5B9A","children":[]},{"level":3,"title":"\u9ED8\u8BA4 commands \u76EE\u5F55","slug":"\u9ED8\u8BA4-commands-\u76EE\u5F55","link":"#\u9ED8\u8BA4-commands-\u76EE\u5F55","children":[]}]},{"level":2,"title":"\u76EE\u5F55\u626B\u63CF\u89C4\u5219","slug":"\u76EE\u5F55\u626B\u63CF\u89C4\u5219","link":"#\u76EE\u5F55\u626B\u63CF\u89C4\u5219","children":[]},{"level":2,"title":"\u7F16\u5199\u5916\u90E8\u547D\u4EE4","slug":"\u7F16\u5199\u5916\u90E8\u547D\u4EE4","link":"#\u7F16\u5199\u5916\u90E8\u547D\u4EE4","children":[]},{"level":2,"title":"Maven \u4F9D\u8D56","slug":"maven-\u4F9D\u8D56","link":"#maven-\u4F9D\u8D56","children":[]},{"level":2,"title":"\u6784\u5EFA\u548C\u9A8C\u8BC1","slug":"\u6784\u5EFA\u548C\u9A8C\u8BC1","link":"#\u6784\u5EFA\u548C\u9A8C\u8BC1","children":[]},{"level":2,"title":"\u52A0\u8F7D\u884C\u4E3A\u548C\u51B2\u7A81\u5904\u7406","slug":"\u52A0\u8F7D\u884C\u4E3A\u548C\u51B2\u7A81\u5904\u7406","link":"#\u52A0\u8F7D\u884C\u4E3A\u548C\u51B2\u7A81\u5904\u7406","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/external-command.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/external-command.html.07feb147.js b/assets/external-command.html.cc4ab827.js similarity index 99% rename from assets/external-command.html.07feb147.js rename to assets/external-command.html.cc4ab827.js index 260c5b7e3..e33886db5 100644 --- a/assets/external-command.html.07feb147.js +++ b/assets/external-command.html.cc4ab827.js @@ -1,4 +1,4 @@ -import{_ as t,o,c as p,a as n,b as c,d as s,e as a,r as l}from"./app.524ecf5c.js";const i={},r=s(`

Load External Commands

Arthas can load external command jars at startup. This is useful when you want to package team-specific diagnostic actions as Arthas commands. After an external command is loaded, you can use it like a built-in command and inspect it with help.

TIP

External commands are loaded only when the Arthas server starts. If Arthas has already attached to the target JVM, copying a jar into the command directory will not take effect until the Arthas server is restarted.

Loading methods

Command line

arthas-boot.jar supports the --command-locations option. Each entry can be a jar file path or a directory path, separated by commas:

java -jar arthas-boot.jar --command-locations '/opt/arthas/ext-command.jar,/opt/arthas/ext-commands' <pid>
+import{_ as t,o,c as p,a as n,b as c,d as s,e as a,r as l}from"./app.e2427bec.js";const i={},r=s(`

Load External Commands

Arthas can load external command jars at startup. This is useful when you want to package team-specific diagnostic actions as Arthas commands. After an external command is loaded, you can use it like a built-in command and inspect it with help.

TIP

External commands are loaded only when the Arthas server starts. If Arthas has already attached to the target JVM, copying a jar into the command directory will not take effect until the Arthas server is restarted.

Loading methods

Command line

arthas-boot.jar supports the --command-locations option. Each entry can be a jar file path or a directory path, separated by commas:

java -jar arthas-boot.jar --command-locations '/opt/arthas/ext-command.jar,/opt/arthas/ext-commands' <pid>
 

If you use as.sh from the full distribution, you can pass the same option:

./as.sh --command-locations '/opt/arthas/ext-command.jar,/opt/arthas/ext-commands' <pid>
 

arthas.properties

Configure arthas.commandLocations in arthas.properties:

arthas.commandLocations=/opt/arthas/ext-command.jar,/opt/arthas/ext-commands
 

If you start Arthas through arthas-spring-boot-starter, use arthas.command-locations in Spring Boot configuration files:

arthas.command-locations=/opt/arthas/ext-command.jar,/opt/arthas/ext-commands
diff --git a/assets/external-command.html.16e594f3.js b/assets/external-command.html.f331f51e.js
similarity index 99%
rename from assets/external-command.html.16e594f3.js
rename to assets/external-command.html.f331f51e.js
index fad89cfc0..83a29cc3e 100644
--- a/assets/external-command.html.16e594f3.js
+++ b/assets/external-command.html.f331f51e.js
@@ -1,4 +1,4 @@
-import{_ as t,o as p,c as o,a as n,b as c,d as s,e as a,r as l}from"./app.524ecf5c.js";const i={},r=s(`

\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4

Arthas \u652F\u6301\u5728\u542F\u52A8\u65F6\u52A0\u8F7D\u5916\u90E8 command jar\uFF0C\u7528\u4E8E\u628A\u56E2\u961F\u5185\u90E8\u5E38\u7528\u7684\u8BCA\u65AD\u52A8\u4F5C\u5C01\u88C5\u6210\u65B0\u7684 Arthas \u547D\u4EE4\u3002\u5916\u90E8\u547D\u4EE4\u52A0\u8F7D\u540E\u53EF\u4EE5\u50CF\u5185\u7F6E\u547D\u4EE4\u4E00\u6837\u901A\u8FC7 help \u67E5\u770B\u548C\u6267\u884C\u3002

\u63D0\u793A

\u5916\u90E8\u547D\u4EE4\u53EA\u5728 Arthas \u670D\u52A1\u7AEF\u542F\u52A8\u65F6\u52A0\u8F7D\u3002Arthas \u5DF2\u7ECF attach \u5230\u76EE\u6807 JVM \u540E\uFF0C\u518D\u628A jar \u653E\u5230\u76EE\u5F55\u91CC\u4E0D\u4F1A\u81EA\u52A8\u751F\u6548\uFF0C\u9700\u8981\u91CD\u65B0\u542F\u52A8 Arthas \u670D\u52A1\u7AEF\u3002

\u52A0\u8F7D\u65B9\u5F0F

\u901A\u8FC7\u547D\u4EE4\u884C\u6307\u5B9A

arthas-boot.jar \u652F\u6301 --command-locations \u53C2\u6570\uFF0C\u53C2\u6570\u503C\u53EF\u4EE5\u662F jar \u6587\u4EF6\u8DEF\u5F84\uFF0C\u4E5F\u53EF\u4EE5\u662F\u76EE\u5F55\u8DEF\u5F84\uFF0C\u591A\u4E2A\u8DEF\u5F84\u7528\u82F1\u6587\u9017\u53F7\u5206\u9694\uFF1A

java -jar arthas-boot.jar --command-locations '/opt/arthas/ext-command.jar,/opt/arthas/ext-commands' <pid>
+import{_ as t,o as p,c as o,a as n,b as c,d as s,e as a,r as l}from"./app.e2427bec.js";const i={},r=s(`

\u52A0\u8F7D\u5916\u90E8\u547D\u4EE4

Arthas \u652F\u6301\u5728\u542F\u52A8\u65F6\u52A0\u8F7D\u5916\u90E8 command jar\uFF0C\u7528\u4E8E\u628A\u56E2\u961F\u5185\u90E8\u5E38\u7528\u7684\u8BCA\u65AD\u52A8\u4F5C\u5C01\u88C5\u6210\u65B0\u7684 Arthas \u547D\u4EE4\u3002\u5916\u90E8\u547D\u4EE4\u52A0\u8F7D\u540E\u53EF\u4EE5\u50CF\u5185\u7F6E\u547D\u4EE4\u4E00\u6837\u901A\u8FC7 help \u67E5\u770B\u548C\u6267\u884C\u3002

\u63D0\u793A

\u5916\u90E8\u547D\u4EE4\u53EA\u5728 Arthas \u670D\u52A1\u7AEF\u542F\u52A8\u65F6\u52A0\u8F7D\u3002Arthas \u5DF2\u7ECF attach \u5230\u76EE\u6807 JVM \u540E\uFF0C\u518D\u628A jar \u653E\u5230\u76EE\u5F55\u91CC\u4E0D\u4F1A\u81EA\u52A8\u751F\u6548\uFF0C\u9700\u8981\u91CD\u65B0\u542F\u52A8 Arthas \u670D\u52A1\u7AEF\u3002

\u52A0\u8F7D\u65B9\u5F0F

\u901A\u8FC7\u547D\u4EE4\u884C\u6307\u5B9A

arthas-boot.jar \u652F\u6301 --command-locations \u53C2\u6570\uFF0C\u53C2\u6570\u503C\u53EF\u4EE5\u662F jar \u6587\u4EF6\u8DEF\u5F84\uFF0C\u4E5F\u53EF\u4EE5\u662F\u76EE\u5F55\u8DEF\u5F84\uFF0C\u591A\u4E2A\u8DEF\u5F84\u7528\u82F1\u6587\u9017\u53F7\u5206\u9694\uFF1A

java -jar arthas-boot.jar --command-locations '/opt/arthas/ext-command.jar,/opt/arthas/ext-commands' <pid>
 

\u5982\u679C\u4F7F\u7528\u5B8C\u6574\u5305\u91CC\u7684 as.sh\uFF0C\u4E5F\u53EF\u4EE5\u4F20\u5165\u76F8\u540C\u53C2\u6570\uFF1A

./as.sh --command-locations '/opt/arthas/ext-command.jar,/opt/arthas/ext-commands' <pid>
 

\u901A\u8FC7 arthas.properties \u6307\u5B9A

\u5728 arthas.properties \u4E2D\u914D\u7F6E\uFF1A

arthas.commandLocations=/opt/arthas/ext-command.jar,/opt/arthas/ext-commands
 

\u5982\u679C\u901A\u8FC7 arthas-spring-boot-starter \u542F\u52A8\uFF0CSpring Boot \u914D\u7F6E\u6587\u4EF6\u4E2D\u63A8\u8350\u4F7F\u7528 arthas.command-locations\uFF1A

arthas.command-locations=/opt/arthas/ext-command.jar,/opt/arthas/ext-commands
diff --git a/assets/faq.html.5b15bab7.js b/assets/faq.html.0b4e272a.js
similarity index 59%
rename from assets/faq.html.5b15bab7.js
rename to assets/faq.html.0b4e272a.js
index 1513c3da6..b22a19cfc 100644
--- a/assets/faq.html.5b15bab7.js
+++ b/assets/faq.html.0b4e272a.js
@@ -1,7 +1,7 @@
-import{_ as i,o as c,c as h,a,b as t,w as n,e,d as r,r as d}from"./app.524ecf5c.js";const l={},u=a("h1",{id:"faq",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#faq","aria-hidden":"true"},"#"),e(" FAQ")],-1),_={class:"custom-container tip"},p=a("p",{class:"custom-container-title"},"\u63D0\u793A",-1),b=e("\u4E0D\u5728\u672C\u5217\u8868\u91CC\u7684\u95EE\u9898\uFF0C\u8BF7\u5230 issue \u91CC\u641C\u7D22\u3002 "),m={href:"https://github.com/alibaba/arthas/issues",target:"_blank",rel:"noopener noreferrer"},g=e("https://github.com/alibaba/arthas/issues"),f=r('

\u65E5\u5FD7\u6587\u4EF6\u5728\u54EA\u91CC\uFF1F

\u65E5\u5FD7\u6587\u4EF6\u8DEF\u5F84\uFF1A ~/logs/arthas/arthas.log

telnet: connect to address 127.0.0.1: Connection refused

  1. \u68C0\u67E5\u65E5\u5FD7 ~/logs/arthas/arthas.log
  2. \u68C0\u67E5as.sh/arthas-boot.jar \u7684\u542F\u52A8\u53C2\u6570\uFF0C\u662F\u5426\u6307\u5B9A\u4E86\u7279\u5B9A\u7684port
  3. \u7528netstat \u68C0\u67E5LISTEN 3658 \u7AEF\u53E3\u7684\u8FDB\u7A0B\uFF0C\u786E\u8BA4\u5B83\u662Fjava\u8FDB\u7A0B\uFF0C\u5E76\u4E14\u662F\u60F3\u8981\u8BCA\u65AD\u7684\u8FDB\u7A0B
  4. \u5982\u679CLISTEN 3658 \u7AEF\u53E3\u7684\u8FDB\u7A0B\u4E0D\u662F java \u8FDB\u7A0B\uFF0C\u52193658\u7AEF\u53E3\u5DF2\u7ECF\u88AB\u5360\u7528\u3002\u9700\u8981\u5728as.sh/arthas-boot.jar \u7684\u542F\u52A8\u53C2\u6570\u6307\u5B9A\u5176\u5B83\u7AEF\u53E3\u3002
  5. \u786E\u8BA4\u8FDB\u7A0B\u548C\u7AEF\u53E3\u540E\uFF0C\u5C1D\u8BD5\u7528telnet 127.0.0.1 3658\u53BB\u8FDE\u63A5

\u672C\u8D28\u4E0Aarthas\u4F1A\u5728\u5E94\u7528java\u8FDB\u7A0B\u5185\u542F\u52A8\u4E00\u4E2Atcp server\uFF0C\u7136\u540E\u4F7F\u7528telnet\u53BB\u8FDE\u63A5\u5B83\u3002

  1. \u53EF\u80FD\u7AEF\u53E3\u4E0D\u5339\u914D
  2. \u53EF\u80FD\u8FDB\u7A0B\u672C\u8EAB\u5DF2\u7ECF\u6302\u8D77\uFF0C\u4E0D\u80FD\u63A5\u53D7\u65B0\u8FDE\u63A5

\u5982\u679CArthas \u65E5\u5FD7\u91CC\u6709 Arthas server already bind.

  1. \u8BF4\u660EArthas server\u66FE\u7ECF\u542F\u52A8\u8FC7\uFF0C\u68C0\u67E5\u76EE\u6807\u8FDB\u7A0B\u6253\u5F00\u7684\u6587\u4EF6\u63CF\u8FF0\u7B26\u3002\u5982\u679C\u662Flinux\u73AF\u5883\uFF0C\u53EF\u4EE5\u53BB /proc/$pid/fd \u4E0B\u9762\uFF0C\u4F7F\u7528ls -alh | grep arthas\uFF0C\u68C0\u67E5\u8FDB\u7A0B\u662F\u5426\u5DF2\u52A0\u8F7Darthas\u76F8\u5173\u7684 jar \u5305\u3002
  2. \u5982\u679C\u6CA1\u6709\uFF0C\u90A3\u4E48\u53EF\u80FD\u5DF2\u542F\u52A8arthas\u7684\u662F\u5176\u5B83\u8FDB\u7A0B\uFF0C\u4E5F\u53EF\u80FD\u5E94\u7528\u5DF2\u7ECF\u91CD\u542F\u8FC7\u4E86\u3002

Arthas attach \u4E4B\u540E\u5BF9\u539F\u8FDB\u7A0B\u6027\u80FD\u6709\u591A\u5927\u7684\u5F71\u54CD

',9),v={href:"https://github.com/alibaba/arthas/issues/44",target:"_blank",rel:"noopener noreferrer"},k=e("https://github.com/alibaba/arthas/issues/44"),x=a("h3",{id:"target-process-not-responding-or-hotspot-vm-not-loaded",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#target-process-not-responding-or-hotspot-vm-not-loaded","aria-hidden":"true"},"#"),e(" target process not responding or HotSpot VM not loaded")],-1),j=a("p",null,"com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded",-1),w=a("li",null,"\u68C0\u67E5\u5F53\u524D\u7528\u6237\u548C\u76EE\u6807 java \u8FDB\u7A0B\u662F\u5426\u4E00\u81F4\u3002\u5982\u679C\u4E0D\u4E00\u81F4\uFF0C\u5219\u5207\u6362\u5230\u540C\u4E00\u7528\u6237\u3002JVM \u53EA\u80FD attach \u540C\u6837\u7528\u6237\u4E0B\u7684 java \u8FDB\u7A0B\u3002",-1),A=a("li",null,[e("\u5C1D\u8BD5\u4F7F\u7528 "),a("code",null,"jstack -l $pid"),e("\uFF0C\u5982\u679C\u8FDB\u7A0B\u6CA1\u6709\u53CD\u5E94\uFF0C\u5219\u8BF4\u660E\u8FDB\u7A0B\u53EF\u80FD\u5047\u6B7B\uFF0C\u65E0\u6CD5\u54CD\u5E94 JVM attach \u4FE1\u53F7\u3002\u6240\u4EE5\u540C\u6837\u57FA\u4E8E attach \u673A\u5236\u7684 Arthas \u65E0\u6CD5\u5DE5\u4F5C\u3002\u5C1D\u8BD5\u4F7F\u7528"),a("code",null,"jmap"),e(" heapdump \u540E\u5206\u6790\u3002")],-1),C=e("\u5C1D\u8BD5\u6309"),y=e("quick-start"),V=e("\u91CC\u7684\u65B9\u5F0F attach math-game\u3002"),L=e("\u66F4\u591A\u60C5\u51B5\u53C2\u8003\uFF1A "),E={href:"https://github.com/alibaba/arthas/issues/347",target:"_blank",rel:"noopener noreferrer"},q=e("https://github.com/alibaba/arthas/issues/347"),S=r(`

trace/watch \u7B49\u547D\u4EE4\u80FD\u5426\u589E\u5F3A jdk \u91CC\u7684\u7C7B\uFF1F

\u9ED8\u8BA4\u60C5\u51B5\u4E0B\u4F1A\u8FC7\u6EE4\u6389java.\u5F00\u5934\u7684\u7C7B\u548C\u88ABBootStrap ClassLoader\u52A0\u8F7D\u7684\u7C7B\u3002\u53EF\u4EE5\u901A\u8FC7\u53C2\u6570\u5F00\u542F\u3002

options unsafe true
-
`,3),I=e("\u66F4\u591A\u53C2\u8003 "),M=e("options"),N=r(`

\u63D0\u793A

\u901A\u8FC7 java.lang.instrument.Instrumentation#appendToBootstrapClassLoaderSearch append \u5230Bootstrap ClassLoader\u7684 jar \u5305\u9700\u8981\u5F00\u542F unsafe\u3002

\u600E\u4E48\u4EE5json\u683C\u5F0F\u67E5\u770B\u7ED3\u679C

options json-format true
-
`,3),B=e("\u66F4\u591A\u53C2\u8003 "),O=e("options"),F=a("h3",{id:"arthas-\u80FD\u5426\u8DDF\u8E2A-native-\u51FD\u6570",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#arthas-\u80FD\u5426\u8DDF\u8E2A-native-\u51FD\u6570","aria-hidden":"true"},"#"),e(" Arthas \u80FD\u5426\u8DDF\u8E2A native \u51FD\u6570")],-1),T=a("p",null,"\u4E0D\u80FD\u3002",-1),J=a("h3",{id:"\u80FD\u4E0D\u80FD\u67E5\u770B\u5185\u5B58\u91CC\u67D0\u4E2A\u53D8\u91CF\u7684\u503C",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u80FD\u4E0D\u80FD\u67E5\u770B\u5185\u5B58\u91CC\u67D0\u4E2A\u53D8\u91CF\u7684\u503C","aria-hidden":"true"},"#"),e(" \u80FD\u4E0D\u80FD\u67E5\u770B\u5185\u5B58\u91CC\u67D0\u4E2A\u53D8\u91CF\u7684\u503C")],-1),U=e("\u53EF\u4EE5\u4F7F\u7528"),$=a("code",null,"vmtool",-1),H=e("\u547D\u4EE4\u3002"),G=e("\u53EF\u4EE5\u7528\u4E00\u4E9B\u6280\u5DE7\uFF0C\u7528"),Q=a("code",null,"tt",-1),R=e("\u547D\u4EE4\u62E6\u622A\u5230\u5BF9\u8C61\uFF0C\u6216\u8005\u4ECE\u9759\u6001\u51FD\u6570\u91CC\u53D6\u5230\u5BF9\u8C61\u3002"),z=a("h3",{id:"\u65B9\u6CD5\u540C\u540D\u8FC7\u6EE4",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u65B9\u6CD5\u540C\u540D\u8FC7\u6EE4","aria-hidden":"true"},"#"),e(" \u65B9\u6CD5\u540C\u540D\u8FC7\u6EE4")],-1),D=e("\u540C\u540D\u65B9\u6CD5\u8FC7\u6EE4\u53EF\u4EE5\u901A\u8FC7\u5339\u914D\u8868\u8FBE\u5F0F,\u53EF\u4EE5\u4F7F\u7528"),K=e("\u8868\u8FBE\u5F0F\u6838\u5FC3\u53D8\u91CF"),P=e("\u4E2D\u6240\u6709\u53D8\u91CF\u4F5C\u4E3A\u5DF2\u77E5\u6761\u4EF6,\u53EF\u4EE5\u901A\u8FC7\u5224\u65AD\u53C2\u6570\u4E2A\u6570"),W=a("code",null,"params.length ==1",-1),X=e(", \u53C2\u6570\u7C7B\u578B"),Y=a("code",null,"params[0] instanceof java.lang.Integer",-1),Z=e("\u3001\u8FD4\u56DE\u503C\u7C7B\u578B "),aa=a("code",null,"returnObj instanceof java.util.List",-1),ea=e(" \u7B49\u7B49\u4E00\u79CD\u6216\u8005\u591A\u79CD\u7EC4\u5408\u8FDB\u884C\u8FC7\u6EE4\u3002"),ta=e("\u53EF\u4EE5\u4F7F\u7528 "),sa=a("code",null,"-v",-1),oa=e(" \u67E5\u770B\u89C2\u5BDF\u5339\u914D\u8868\u8FBE\u5F0F\u7684\u6267\u884C\u7ED3\u679C "),na={href:"https://github.com/alibaba/arthas/issues/1348",target:"_blank",rel:"noopener noreferrer"},ra=e("https://github.com/alibaba/arthas/issues/1348"),da=e("\u4F8B\u5B50"),ia=e("math-game"),ca=r(`
watch demo.MathGame primeFactors '{params,returnObj,throwExp}' 'params.length >0 && returnObj instanceof java.util.List' -v
+import{_ as i,o as c,c as h,a,b as t,w as n,e,d as r,r as d}from"./app.e2427bec.js";const l={},_=a("h1",{id:"faq",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#faq","aria-hidden":"true"},"#"),e(" FAQ")],-1),u={class:"custom-container tip"},p=a("p",{class:"custom-container-title"},"\u63D0\u793A",-1),b=e("\u4E0D\u5728\u672C\u5217\u8868\u91CC\u7684\u95EE\u9898\uFF0C\u8BF7\u5230 issue \u91CC\u641C\u7D22\u3002 "),m={href:"https://github.com/alibaba/arthas/issues",target:"_blank",rel:"noopener noreferrer"},g=e("https://github.com/alibaba/arthas/issues"),f=r('

\u65E5\u5FD7\u6587\u4EF6\u5728\u54EA\u91CC\uFF1F

\u65E5\u5FD7\u6587\u4EF6\u8DEF\u5F84\uFF1A ~/logs/arthas/arthas.log

telnet: connect to address 127.0.0.1: Connection refused

  1. \u68C0\u67E5\u65E5\u5FD7 ~/logs/arthas/arthas.log
  2. \u68C0\u67E5as.sh/arthas-boot.jar \u7684\u542F\u52A8\u53C2\u6570\uFF0C\u662F\u5426\u6307\u5B9A\u4E86\u7279\u5B9A\u7684port
  3. \u7528netstat \u68C0\u67E5LISTEN 3658 \u7AEF\u53E3\u7684\u8FDB\u7A0B\uFF0C\u786E\u8BA4\u5B83\u662Fjava\u8FDB\u7A0B\uFF0C\u5E76\u4E14\u662F\u60F3\u8981\u8BCA\u65AD\u7684\u8FDB\u7A0B
  4. \u5982\u679CLISTEN 3658 \u7AEF\u53E3\u7684\u8FDB\u7A0B\u4E0D\u662F java \u8FDB\u7A0B\uFF0C\u52193658\u7AEF\u53E3\u5DF2\u7ECF\u88AB\u5360\u7528\u3002\u9700\u8981\u5728as.sh/arthas-boot.jar \u7684\u542F\u52A8\u53C2\u6570\u6307\u5B9A\u5176\u5B83\u7AEF\u53E3\u3002
  5. \u786E\u8BA4\u8FDB\u7A0B\u548C\u7AEF\u53E3\u540E\uFF0C\u5C1D\u8BD5\u7528telnet 127.0.0.1 3658\u53BB\u8FDE\u63A5

\u672C\u8D28\u4E0Aarthas\u4F1A\u5728\u5E94\u7528java\u8FDB\u7A0B\u5185\u542F\u52A8\u4E00\u4E2Atcp server\uFF0C\u7136\u540E\u4F7F\u7528telnet\u53BB\u8FDE\u63A5\u5B83\u3002

  1. \u53EF\u80FD\u7AEF\u53E3\u4E0D\u5339\u914D
  2. \u53EF\u80FD\u8FDB\u7A0B\u672C\u8EAB\u5DF2\u7ECF\u6302\u8D77\uFF0C\u4E0D\u80FD\u63A5\u53D7\u65B0\u8FDE\u63A5

\u5982\u679CArthas \u65E5\u5FD7\u91CC\u6709 Arthas server already bind.

  1. \u8BF4\u660EArthas server\u66FE\u7ECF\u542F\u52A8\u8FC7\uFF0C\u68C0\u67E5\u76EE\u6807\u8FDB\u7A0B\u6253\u5F00\u7684\u6587\u4EF6\u63CF\u8FF0\u7B26\u3002\u5982\u679C\u662Flinux\u73AF\u5883\uFF0C\u53EF\u4EE5\u53BB /proc/$pid/fd \u4E0B\u9762\uFF0C\u4F7F\u7528ls -alh | grep arthas\uFF0C\u68C0\u67E5\u8FDB\u7A0B\u662F\u5426\u5DF2\u52A0\u8F7Darthas\u76F8\u5173\u7684 jar \u5305\u3002
  2. \u5982\u679C\u6CA1\u6709\uFF0C\u90A3\u4E48\u53EF\u80FD\u5DF2\u542F\u52A8arthas\u7684\u662F\u5176\u5B83\u8FDB\u7A0B\uFF0C\u4E5F\u53EF\u80FD\u5E94\u7528\u5DF2\u7ECF\u91CD\u542F\u8FC7\u4E86\u3002

Arthas attach \u4E4B\u540E\u5BF9\u539F\u8FDB\u7A0B\u6027\u80FD\u6709\u591A\u5927\u7684\u5F71\u54CD

',9),v={href:"https://github.com/alibaba/arthas/issues/44",target:"_blank",rel:"noopener noreferrer"},k=e("https://github.com/alibaba/arthas/issues/44"),x=a("h3",{id:"target-process-not-responding-or-hotspot-vm-not-loaded",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#target-process-not-responding-or-hotspot-vm-not-loaded","aria-hidden":"true"},"#"),e(" target process not responding or HotSpot VM not loaded")],-1),j=a("p",null,"com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded",-1),w=a("li",null,"\u68C0\u67E5\u5F53\u524D\u7528\u6237\u548C\u76EE\u6807 java \u8FDB\u7A0B\u662F\u5426\u4E00\u81F4\u3002\u5982\u679C\u4E0D\u4E00\u81F4\uFF0C\u5219\u5207\u6362\u5230\u540C\u4E00\u7528\u6237\u3002JVM \u53EA\u80FD attach \u540C\u6837\u7528\u6237\u4E0B\u7684 java \u8FDB\u7A0B\u3002",-1),A=a("li",null,[e("\u5C1D\u8BD5\u4F7F\u7528 "),a("code",null,"jstack -l $pid"),e("\uFF0C\u5982\u679C\u8FDB\u7A0B\u6CA1\u6709\u53CD\u5E94\uFF0C\u5219\u8BF4\u660E\u8FDB\u7A0B\u53EF\u80FD\u5047\u6B7B\uFF0C\u65E0\u6CD5\u54CD\u5E94 JVM attach \u4FE1\u53F7\u3002\u6240\u4EE5\u540C\u6837\u57FA\u4E8E attach \u673A\u5236\u7684 Arthas \u65E0\u6CD5\u5DE5\u4F5C\u3002\u5C1D\u8BD5\u4F7F\u7528"),a("code",null,"jmap"),e(" heapdump \u540E\u5206\u6790\u3002")],-1),C=e("\u5C1D\u8BD5\u6309"),L=e("quick-start"),y=e("\u91CC\u7684\u65B9\u5F0F attach math-game\u3002"),V=e("\u66F4\u591A\u60C5\u51B5\u53C2\u8003\uFF1A "),E={href:"https://github.com/alibaba/arthas/issues/347",target:"_blank",rel:"noopener noreferrer"},q=e("https://github.com/alibaba/arthas/issues/347"),N=r(`

trace/watch \u7B49\u547D\u4EE4\u80FD\u5426\u589E\u5F3A jdk \u91CC\u7684\u7C7B\uFF1F

\u9ED8\u8BA4\u60C5\u51B5\u4E0B\u4F1A\u8FC7\u6EE4\u6389java.\u5F00\u5934\u7684\u7C7B\u548C\u88ABBootStrap ClassLoader\u52A0\u8F7D\u7684\u7C7B\u3002\u53EF\u4EE5\u901A\u8FC7\u53C2\u6570\u5F00\u542F\u3002

options unsafe true
+
`,3),S=e("\u66F4\u591A\u53C2\u8003 "),I=e("options"),M=r(`

\u63D0\u793A

\u901A\u8FC7 java.lang.instrument.Instrumentation#appendToBootstrapClassLoaderSearch append \u5230Bootstrap ClassLoader\u7684 jar \u5305\u9700\u8981\u5F00\u542F unsafe\u3002

\u600E\u4E48\u4EE5json\u683C\u5F0F\u67E5\u770B\u7ED3\u679C

options json-format true
+
`,3),O=e("\u66F4\u591A\u53C2\u8003 "),B=e("options"),F=a("h3",{id:"arthas-\u80FD\u5426\u8DDF\u8E2A-native-\u51FD\u6570",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#arthas-\u80FD\u5426\u8DDF\u8E2A-native-\u51FD\u6570","aria-hidden":"true"},"#"),e(" Arthas \u80FD\u5426\u8DDF\u8E2A native \u51FD\u6570")],-1),T=a("p",null,"\u4E0D\u80FD\u3002",-1),G=a("h3",{id:"\u80FD\u4E0D\u80FD\u67E5\u770B\u5185\u5B58\u91CC\u67D0\u4E2A\u53D8\u91CF\u7684\u503C",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u80FD\u4E0D\u80FD\u67E5\u770B\u5185\u5B58\u91CC\u67D0\u4E2A\u53D8\u91CF\u7684\u503C","aria-hidden":"true"},"#"),e(" \u80FD\u4E0D\u80FD\u67E5\u770B\u5185\u5B58\u91CC\u67D0\u4E2A\u53D8\u91CF\u7684\u503C")],-1),J=e("\u53EF\u4EE5\u4F7F\u7528"),U=a("code",null,"vmtool",-1),$=e("\u547D\u4EE4\u3002"),H=e("\u53EF\u4EE5\u7528\u4E00\u4E9B\u6280\u5DE7\uFF0C\u7528"),Q=a("code",null,"tt",-1),R=e("\u547D\u4EE4\u62E6\u622A\u5230\u5BF9\u8C61\uFF0C\u6216\u8005\u4ECE\u9759\u6001\u51FD\u6570\u91CC\u53D6\u5230\u5BF9\u8C61\u3002"),z=a("h3",{id:"\u65B9\u6CD5\u540C\u540D\u8FC7\u6EE4",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u65B9\u6CD5\u540C\u540D\u8FC7\u6EE4","aria-hidden":"true"},"#"),e(" \u65B9\u6CD5\u540C\u540D\u8FC7\u6EE4")],-1),D=e("\u540C\u540D\u65B9\u6CD5\u8FC7\u6EE4\u53EF\u4EE5\u901A\u8FC7\u5339\u914D\u8868\u8FBE\u5F0F,\u53EF\u4EE5\u4F7F\u7528"),K=e("\u8868\u8FBE\u5F0F\u6838\u5FC3\u53D8\u91CF"),P=e("\u4E2D\u6240\u6709\u53D8\u91CF\u4F5C\u4E3A\u5DF2\u77E5\u6761\u4EF6,\u53EF\u4EE5\u901A\u8FC7\u5224\u65AD\u53C2\u6570\u4E2A\u6570"),W=a("code",null,"params.length ==1",-1),X=e(", \u53C2\u6570\u7C7B\u578B"),Y=a("code",null,"params[0] instanceof java.lang.Integer",-1),Z=e("\u3001\u8FD4\u56DE\u503C\u7C7B\u578B "),aa=a("code",null,"returnObj instanceof java.util.List",-1),ea=e(" \u7B49\u7B49\u4E00\u79CD\u6216\u8005\u591A\u79CD\u7EC4\u5408\u8FDB\u884C\u8FC7\u6EE4\u3002"),ta=e("\u53EF\u4EE5\u4F7F\u7528 "),sa=a("code",null,"-v",-1),oa=e(" \u67E5\u770B\u89C2\u5BDF\u5339\u914D\u8868\u8FBE\u5F0F\u7684\u6267\u884C\u7ED3\u679C "),na={href:"https://github.com/alibaba/arthas/issues/1348",target:"_blank",rel:"noopener noreferrer"},ra=e("https://github.com/alibaba/arthas/issues/1348"),da=e("\u4F8B\u5B50"),ia=e("math-game"),ca=r(`
watch demo.MathGame primeFactors '{params,returnObj,throwExp}' 'params.length >0 && returnObj instanceof java.util.List' -v
 

\u600E\u4E48 watch\u3001trace \u6784\u9020\u51FD\u6570 \uFF1F

watch demo.MathGame <init> '{params,returnObj,throwExp}' -v
 

\u600E\u6837 watch\u3001trace \u5185\u90E8\u7C7B\uFF1F

\u5728 JVM \u89C4\u8303\u91CC\u5185\u90E8\u7C7B\u7684\u683C\u5F0F\u662FOuterClass$InnerClass\u3002

watch OuterClass$InnerClass
-

\u662F\u5426\u652F\u6301 watch\u3001trace lambda \u7C7B\uFF1F

\u5BF9\u4E8Elambda\u751F\u6210\u7684\u7C7B\uFF0C\u4F1A\u8DF3\u8FC7\u5904\u7406\uFF0C\u56E0\u4E3A JVM \u672C\u8EAB\u9650\u5236\u5BF9 lambda \u751F\u6210\u7684\u7C7B\u505A\u589E\u5F3A\u3002

`,8),ha={href:"https://github.com/alibaba/arthas/issues/1225",target:"_blank",rel:"noopener noreferrer"},la=e("https://github.com/alibaba/arthas/issues/1225"),ua=r(`

\u8F93\u5165\u4E2D\u6587/Unicode \u5B57\u7B26

\u4ECE Arthas 4.3.2 \u5F00\u59CB\uFF0CTerminal \u652F\u6301\u76F4\u63A5\u8F93\u5165\u548C\u7F16\u8F91\u4E2D\u6587\u53CA\u5176\u4ED6 Unicode \u5B57\u7B26\u3002

Arthas 4.3.1 \u53CA\u66F4\u65E9\u7248\u672C\u4E0D\u652F\u6301\u76F4\u63A5\u8F93\u5165\u4E2D\u6587/Unicode \u5B57\u7B26\uFF0C\u53EF\u4EE5\u5C06\u5B57\u7B26\u8F6C\u6362\u4E3A\\u\u8868\u793A\uFF1A

ognl '@java.lang.System@out.println("Hello \\u4e2d\\u6587")'
-

java.lang.ClassFormatError: null\u3001skywalking arthas \u517C\u5BB9\u4F7F\u7528

\u5F53\u51FA\u73B0\u8FD9\u4E2A\u9519\u8BEF\u65E5\u5FD7java.lang.ClassFormatError: null,\u901A\u5E38\u60C5\u51B5\u4E0B\u90FD\u662F\u88AB\u5176\u4ED6\u5B57\u8282\u7801\u5DE5\u5177\u4FEE\u6539\u8FC7\u4E0E arthas \u4FEE\u6539\u5B57\u8282\u7801\u4E0D\u517C\u5BB9\u3002

`,6),_a=e("\u6BD4\u5982: \u4F7F\u7528 skywalking V8.1.0 \u4EE5\u4E0B\u7248\u672C "),pa={href:"https://github.com/alibaba/arthas/issues/1141",target:"_blank",rel:"noopener noreferrer"},ba=e("\u65E0\u6CD5 trace\u3001watch \u88AB skywalking agent \u589E\u5F3A\u8FC7\u7684\u7C7B"),ma=e(", V8.1.0 \u4EE5\u4E0A\u7248\u672C\u53EF\u4EE5\u517C\u5BB9\u4F7F\u7528,\u66F4\u591A\u53C2\u8003 skywalking \u914D\u7F6E "),ga={href:"https://github.com/apache/skywalking/blob/master/docs/en/FAQ/Compatible-with-other-javaagent-bytecode-processing.md#",target:"_blank",rel:"noopener noreferrer"},fa=e("skywalking compatible with other javaagent bytecode processing"),va=e("\u3002"),ka=a("h4",{id:"class-redefinition-failed-attempted-to-change-the-schema-add-remove-fields",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#class-redefinition-failed-attempted-to-change-the-schema-add-remove-fields","aria-hidden":"true"},"#"),e(" class redefinition failed: attempted to change the schema (add/remove fields)")],-1),xa=e("\u53C2\u8003\uFF1A "),ja={href:"https://github.com/alibaba/arthas/issues/2165",target:"_blank",rel:"noopener noreferrer"},wa=e("https://github.com/alibaba/arthas/issues/2165"),Aa=a("h3",{id:"arthas-\u80FD\u4E0D\u80FD\u79BB\u7EBF\u4F7F\u7528",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#arthas-\u80FD\u4E0D\u80FD\u79BB\u7EBF\u4F7F\u7528","aria-hidden":"true"},"#"),e(" Arthas \u80FD\u4E0D\u80FD\u79BB\u7EBF\u4F7F\u7528")],-1),Ca=e("\u53EF\u4EE5\u3002\u4E0B\u8F7D\u5168\u91CF\u5305\u89E3\u538B\u5373\u53EF\uFF0C\u53C2\u8003: "),ya=e("\u4E0B\u8F7D"),Va=e("\u3002"),La=r('

Arthas \u600E\u4E48\u4F7F\u7528\u6307\u5B9A\u7248\u672C\uFF0C\u4E0D\u4F7F\u7528\u81EA\u52A8\u5347\u7EA7\u7248\u672C

  1. \u542F\u52A8 as.sh/arthas-boot.jar\u65F6\uFF0C\u53EF\u4EE5\u7528 --use-version \u53C2\u6570\u6307\u5B9A\u3002
  2. \u4E0B\u8F7D\u5168\u91CF\u5305\uFF0C\u89E3\u538B\u540E\uFF0Ccd\u5230arthas\u76EE\u5F55\u542F\u52A8\uFF0C\u8FD9\u79CD\u60C5\u51B5\u4F1A\u4F7F\u7528\u5F53\u524D\u76EE\u5F55\u4E0B\u7684\u7248\u672C\u3002

Attach docker/k8s \u91CC\u7684 pid \u4E3A 1 \u7684\u8FDB\u7A0B\u5931\u8D25

',3),Ea=e("\u53C2\u8003\uFF1A "),qa={href:"https://github.com/alibaba/arthas/issues/362#issuecomment-448185416",target:"_blank",rel:"noopener noreferrer"},Sa=e("https://github.com/alibaba/arthas/issues/362#issuecomment-448185416"),Ia=r('

\u4E3A\u4EC0\u4E48\u4E0B\u8F7D\u4E86\u65B0\u7248\u672C\u7684 Arthas\uFF0C\u8FDE\u63A5\u7684\u5374\u662F\u65E7\u7248\u672C\uFF1F

\u6BD4\u5982\u542F\u52A8\u7684 as.sh/arthas-boot.jar \u7248\u672C\u662F 3.5._ \u7684\uFF0C\u4F46\u662F\u8FDE\u63A5\u4E0A\u4E4B\u540E\uFF0C\u6253\u5370\u7684 arthas \u7248\u672C\u662F 3.4._ \u7684\u3002

\u53EF\u80FD\u662F\u4E4B\u524D\u4F7F\u7528\u65E7\u7248\u672C\u7684 arthas \u8BCA\u65AD\u8FC7\u76EE\u6807\u8FDB\u7A0B\u3002\u53EF\u4EE5\u5148\u6267\u884Cstop\u505C\u6B62\u6389\u65E7\u7248\u672C\u7684 arthas\uFF0C\u518D\u91CD\u65B0\u4F7F\u7528\u65B0\u7248\u672C attach\u3002

\u5728ognl\u8868\u8FBE\u5F0F\u4E2D\u83B7\u53D6\u5230 spring bean cglib \u5BF9\u8C61\uFF0C\u4F46\u662F field \u662F null

\u53C2\u8003\uFF1A

',5),Ma={href:"https://github.com/alibaba/arthas/issues/1802",target:"_blank",rel:"noopener noreferrer"},Na=e("https://github.com/alibaba/arthas/issues/1802"),Ba={href:"https://github.com/alibaba/arthas/issues/1424",target:"_blank",rel:"noopener noreferrer"},Oa=e("https://github.com/alibaba/arthas/issues/1424");function Fa(Ta,Ja){const s=d("ExternalLinkIcon"),o=d("RouterLink");return c(),h("div",null,[u,a("div",_,[p,a("p",null,[b,a("a",m,[g,t(s)])])]),f,a("p",null,[a("a",v,[k,t(s)])]),x,j,a("ol",null,[w,A,a("li",null,[C,t(o,{to:"/doc/quick-start.html"},{default:n(()=>[y]),_:1}),V]),a("li",null,[L,a("a",E,[q,t(s)])])]),S,a("p",null,[I,t(o,{to:"/doc/options.html"},{default:n(()=>[M]),_:1})]),N,a("p",null,[B,t(o,{to:"/doc/options.html"},{default:n(()=>[O]),_:1})]),F,T,J,a("ol",null,[a("li",null,[U,t(o,{to:"/doc/vmtool.html"},{default:n(()=>[$]),_:1}),H]),a("li",null,[G,t(o,{to:"/doc/tt.html"},{default:n(()=>[Q]),_:1}),R])]),z,a("p",null,[D,t(o,{to:"/doc/advice-class.html"},{default:n(()=>[K]),_:1}),P,W,X,Y,Z,aa,ea]),a("p",null,[ta,sa,oa,a("a",na,[ra,t(s)])]),a("p",null,[da,t(o,{to:"/doc/quick-start.html"},{default:n(()=>[ia]),_:1})]),ca,a("ul",null,[a("li",null,[a("a",ha,[la,t(s)])])]),ua,a("p",null,[_a,a("a",pa,[ba,t(s)]),ma,a("a",ga,[fa,t(s)]),va]),ka,a("p",null,[xa,a("a",ja,[wa,t(s)])]),Aa,a("p",null,[Ca,t(o,{to:"/doc/download.html"},{default:n(()=>[ya]),_:1}),Va]),La,a("p",null,[Ea,a("a",qa,[Sa,t(s)])]),Ia,a("ul",null,[a("li",null,[a("a",Ma,[Na,t(s)])]),a("li",null,[a("a",Ba,[Oa,t(s)])])])])}const $a=i(l,[["render",Fa],["__file","faq.html.vue"]]);export{$a as default}; +

\u662F\u5426\u652F\u6301 watch\u3001trace lambda \u7C7B\uFF1F

\u5BF9\u4E8Elambda\u751F\u6210\u7684\u7C7B\uFF0C\u4F1A\u8DF3\u8FC7\u5904\u7406\uFF0C\u56E0\u4E3A JVM \u672C\u8EAB\u9650\u5236\u5BF9 lambda \u751F\u6210\u7684\u7C7B\u505A\u589E\u5F3A\u3002

`,8),ha={href:"https://github.com/alibaba/arthas/issues/1225",target:"_blank",rel:"noopener noreferrer"},la=e("https://github.com/alibaba/arthas/issues/1225"),_a=r(`

\u8F93\u5165\u4E2D\u6587/Unicode \u5B57\u7B26

\u4ECE Arthas 4.3.2 \u5F00\u59CB\uFF0CTerminal \u652F\u6301\u76F4\u63A5\u8F93\u5165\u548C\u7F16\u8F91\u4E2D\u6587\u53CA\u5176\u4ED6 Unicode \u5B57\u7B26\u3002

Arthas 4.3.1 \u53CA\u66F4\u65E9\u7248\u672C\u4E0D\u652F\u6301\u76F4\u63A5\u8F93\u5165\u4E2D\u6587/Unicode \u5B57\u7B26\uFF0C\u53EF\u4EE5\u5C06\u5B57\u7B26\u8F6C\u6362\u4E3A\\u\u8868\u793A\uFF1A

ognl '@java.lang.System@out.println("Hello \\u4e2d\\u6587")'
+
`,4),ua=e("\u66F4\u590D\u6742\u7684 OGNL \u5199\u6CD5\u3001\u683C\u5F0F\u7EA6\u675F\u4E0E\u6392\u9519\u65B9\u6CD5\u53C2\u89C1 "),pa=e("OGNL \u590D\u6742\u8868\u8FBE\u5F0F\u4F7F\u7528\u6280\u5DE7"),ba=e("\u3002"),ma=a("h3",{id:"java-lang-classformaterror-null\u3001skywalking-arthas-\u517C\u5BB9\u4F7F\u7528",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#java-lang-classformaterror-null\u3001skywalking-arthas-\u517C\u5BB9\u4F7F\u7528","aria-hidden":"true"},"#"),e(" java.lang.ClassFormatError: null\u3001skywalking arthas \u517C\u5BB9\u4F7F\u7528")],-1),ga=a("p",null,[e("\u5F53\u51FA\u73B0\u8FD9\u4E2A\u9519\u8BEF\u65E5\u5FD7"),a("code",null,"java.lang.ClassFormatError: null"),e(",\u901A\u5E38\u60C5\u51B5\u4E0B\u90FD\u662F\u88AB\u5176\u4ED6\u5B57\u8282\u7801\u5DE5\u5177\u4FEE\u6539\u8FC7\u4E0E arthas \u4FEE\u6539\u5B57\u8282\u7801\u4E0D\u517C\u5BB9\u3002")],-1),fa=e("\u6BD4\u5982: \u4F7F\u7528 skywalking V8.1.0 \u4EE5\u4E0B\u7248\u672C "),va={href:"https://github.com/alibaba/arthas/issues/1141",target:"_blank",rel:"noopener noreferrer"},ka=e("\u65E0\u6CD5 trace\u3001watch \u88AB skywalking agent \u589E\u5F3A\u8FC7\u7684\u7C7B"),xa=e(", V8.1.0 \u4EE5\u4E0A\u7248\u672C\u53EF\u4EE5\u517C\u5BB9\u4F7F\u7528,\u66F4\u591A\u53C2\u8003 skywalking \u914D\u7F6E "),ja={href:"https://github.com/apache/skywalking/blob/master/docs/en/FAQ/Compatible-with-other-javaagent-bytecode-processing.md#",target:"_blank",rel:"noopener noreferrer"},wa=e("skywalking compatible with other javaagent bytecode processing"),Aa=e("\u3002"),Ca=a("h4",{id:"class-redefinition-failed-attempted-to-change-the-schema-add-remove-fields",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#class-redefinition-failed-attempted-to-change-the-schema-add-remove-fields","aria-hidden":"true"},"#"),e(" class redefinition failed: attempted to change the schema (add/remove fields)")],-1),La=e("\u53C2\u8003\uFF1A "),ya={href:"https://github.com/alibaba/arthas/issues/2165",target:"_blank",rel:"noopener noreferrer"},Va=e("https://github.com/alibaba/arthas/issues/2165"),Ea=a("h3",{id:"arthas-\u80FD\u4E0D\u80FD\u79BB\u7EBF\u4F7F\u7528",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#arthas-\u80FD\u4E0D\u80FD\u79BB\u7EBF\u4F7F\u7528","aria-hidden":"true"},"#"),e(" Arthas \u80FD\u4E0D\u80FD\u79BB\u7EBF\u4F7F\u7528")],-1),qa=e("\u53EF\u4EE5\u3002\u4E0B\u8F7D\u5168\u91CF\u5305\u89E3\u538B\u5373\u53EF\uFF0C\u53C2\u8003: "),Na=e("\u4E0B\u8F7D"),Sa=e("\u3002"),Ia=r('

Arthas \u600E\u4E48\u4F7F\u7528\u6307\u5B9A\u7248\u672C\uFF0C\u4E0D\u4F7F\u7528\u81EA\u52A8\u5347\u7EA7\u7248\u672C

  1. \u542F\u52A8 as.sh/arthas-boot.jar\u65F6\uFF0C\u53EF\u4EE5\u7528 --use-version \u53C2\u6570\u6307\u5B9A\u3002
  2. \u4E0B\u8F7D\u5168\u91CF\u5305\uFF0C\u89E3\u538B\u540E\uFF0Ccd\u5230arthas\u76EE\u5F55\u542F\u52A8\uFF0C\u8FD9\u79CD\u60C5\u51B5\u4F1A\u4F7F\u7528\u5F53\u524D\u76EE\u5F55\u4E0B\u7684\u7248\u672C\u3002

Attach docker/k8s \u91CC\u7684 pid \u4E3A 1 \u7684\u8FDB\u7A0B\u5931\u8D25

',3),Ma=e("\u53C2\u8003\uFF1A "),Oa={href:"https://github.com/alibaba/arthas/issues/362#issuecomment-448185416",target:"_blank",rel:"noopener noreferrer"},Ba=e("https://github.com/alibaba/arthas/issues/362#issuecomment-448185416"),Fa=r('

\u4E3A\u4EC0\u4E48\u4E0B\u8F7D\u4E86\u65B0\u7248\u672C\u7684 Arthas\uFF0C\u8FDE\u63A5\u7684\u5374\u662F\u65E7\u7248\u672C\uFF1F

\u6BD4\u5982\u542F\u52A8\u7684 as.sh/arthas-boot.jar \u7248\u672C\u662F 3.5._ \u7684\uFF0C\u4F46\u662F\u8FDE\u63A5\u4E0A\u4E4B\u540E\uFF0C\u6253\u5370\u7684 arthas \u7248\u672C\u662F 3.4._ \u7684\u3002

\u53EF\u80FD\u662F\u4E4B\u524D\u4F7F\u7528\u65E7\u7248\u672C\u7684 arthas \u8BCA\u65AD\u8FC7\u76EE\u6807\u8FDB\u7A0B\u3002\u53EF\u4EE5\u5148\u6267\u884Cstop\u505C\u6B62\u6389\u65E7\u7248\u672C\u7684 arthas\uFF0C\u518D\u91CD\u65B0\u4F7F\u7528\u65B0\u7248\u672C attach\u3002

\u5728ognl\u8868\u8FBE\u5F0F\u4E2D\u83B7\u53D6\u5230 spring bean cglib \u5BF9\u8C61\uFF0C\u4F46\u662F field \u662F null

\u53C2\u8003\uFF1A

',5),Ta={href:"https://github.com/alibaba/arthas/issues/1802",target:"_blank",rel:"noopener noreferrer"},Ga=e("https://github.com/alibaba/arthas/issues/1802"),Ja={href:"https://github.com/alibaba/arthas/issues/1424",target:"_blank",rel:"noopener noreferrer"},Ua=e("https://github.com/alibaba/arthas/issues/1424");function $a(Ha,Qa){const s=d("ExternalLinkIcon"),o=d("RouterLink");return c(),h("div",null,[_,a("div",u,[p,a("p",null,[b,a("a",m,[g,t(s)])])]),f,a("p",null,[a("a",v,[k,t(s)])]),x,j,a("ol",null,[w,A,a("li",null,[C,t(o,{to:"/doc/quick-start.html"},{default:n(()=>[L]),_:1}),y]),a("li",null,[V,a("a",E,[q,t(s)])])]),N,a("p",null,[S,t(o,{to:"/doc/options.html"},{default:n(()=>[I]),_:1})]),M,a("p",null,[O,t(o,{to:"/doc/options.html"},{default:n(()=>[B]),_:1})]),F,T,G,a("ol",null,[a("li",null,[J,t(o,{to:"/doc/vmtool.html"},{default:n(()=>[U]),_:1}),$]),a("li",null,[H,t(o,{to:"/doc/tt.html"},{default:n(()=>[Q]),_:1}),R])]),z,a("p",null,[D,t(o,{to:"/doc/advice-class.html"},{default:n(()=>[K]),_:1}),P,W,X,Y,Z,aa,ea]),a("p",null,[ta,sa,oa,a("a",na,[ra,t(s)])]),a("p",null,[da,t(o,{to:"/doc/quick-start.html"},{default:n(()=>[ia]),_:1})]),ca,a("ul",null,[a("li",null,[a("a",ha,[la,t(s)])])]),_a,a("p",null,[ua,t(o,{to:"/doc/ognl-express.html"},{default:n(()=>[pa]),_:1}),ba]),ma,ga,a("p",null,[fa,a("a",va,[ka,t(s)]),xa,a("a",ja,[wa,t(s)]),Aa]),Ca,a("p",null,[La,a("a",ya,[Va,t(s)])]),Ea,a("p",null,[qa,t(o,{to:"/doc/download.html"},{default:n(()=>[Na]),_:1}),Sa]),Ia,a("p",null,[Ma,a("a",Oa,[Ba,t(s)])]),Fa,a("ul",null,[a("li",null,[a("a",Ta,[Ga,t(s)])]),a("li",null,[a("a",Ja,[Ua,t(s)])])])])}const za=i(l,[["render",$a],["__file","faq.html.vue"]]);export{za as default}; diff --git a/assets/faq.html.92bd353a.js b/assets/faq.html.188c09a3.js similarity index 97% rename from assets/faq.html.92bd353a.js rename to assets/faq.html.188c09a3.js index a2d2fd97e..1532d6bfc 100644 --- a/assets/faq.html.92bd353a.js +++ b/assets/faq.html.188c09a3.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-d1b46bf2","path":"/en/doc/faq.html","title":"FAQ","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"Where is the log file?","slug":"where-is-the-log-file","link":"#where-is-the-log-file","children":[]},{"level":3,"title":"telnet: connect to address 127.0.0.1: Connection refused","slug":"telnet-connect-to-address-127-0-0-1-connection-refused","link":"#telnet-connect-to-address-127-0-0-1-connection-refused","children":[]},{"level":3,"title":"How much impact does Arthas attach have on the performance of the original process?","slug":"how-much-impact-does-arthas-attach-have-on-the-performance-of-the-original-process","link":"#how-much-impact-does-arthas-attach-have-on-the-performance-of-the-original-process","children":[]},{"level":3,"title":"target process not responding or HotSpot VM not loaded","slug":"target-process-not-responding-or-hotspot-vm-not-loaded","link":"#target-process-not-responding-or-hotspot-vm-not-loaded","children":[]},{"level":3,"title":"Can commands such as trace/watch enhance the classes in jdk?","slug":"can-commands-such-as-trace-watch-enhance-the-classes-in-jdk","link":"#can-commands-such-as-trace-watch-enhance-the-classes-in-jdk","children":[]},{"level":3,"title":"How to view the result in json format","slug":"how-to-view-the-result-in-json-format","link":"#how-to-view-the-result-in-json-format","children":[]},{"level":3,"title":"Can arthas trace native methods","slug":"can-arthas-trace-native-methods","link":"#can-arthas-trace-native-methods","children":[]},{"level":3,"title":"Can arthas view the value of a variable in memory?","slug":"can-arthas-view-the-value-of-a-variable-in-memory","link":"#can-arthas-view-the-value-of-a-variable-in-memory","children":[]},{"level":3,"title":"How to filter method with the same name?","slug":"how-to-filter-method-with-the-same-name","link":"#how-to-filter-method-with-the-same-name","children":[]},{"level":3,"title":"How to watch or trace constructor?","slug":"how-to-watch-or-trace-constructor","link":"#how-to-watch-or-trace-constructor","children":[]},{"level":3,"title":"How to watch or trace inner classes?","slug":"how-to-watch-or-trace-inner-classes","link":"#how-to-watch-or-trace-inner-classes","children":[]},{"level":3,"title":"Does it support watch and trace lambda classes?","slug":"does-it-support-watch-and-trace-lambda-classes","link":"#does-it-support-watch-and-trace-lambda-classes","children":[]},{"level":3,"title":"Enter Unicode characters","slug":"enter-unicode-characters","link":"#enter-unicode-characters","children":[]},{"level":3,"title":"java.lang.ClassFormatError: null, skywalking arthas compatible use","slug":"java-lang-classformaterror-null-skywalking-arthas-compatible-use","link":"#java-lang-classformaterror-null-skywalking-arthas-compatible-use","children":[]},{"level":3,"title":"Can I use arthas offline?","slug":"can-i-use-arthas-offline","link":"#can-i-use-arthas-offline","children":[]},{"level":3,"title":"How to use the specified version of Arthas without using the automatic upgrade version?","slug":"how-to-use-the-specified-version-of-arthas-without-using-the-automatic-upgrade-version","link":"#how-to-use-the-specified-version-of-arthas-without-using-the-automatic-upgrade-version","children":[]},{"level":3,"title":"Attach the process with pid 1 in docker/k8s failed","slug":"attach-the-process-with-pid-1-in-docker-k8s-failed","link":"#attach-the-process-with-pid-1-in-docker-k8s-failed","children":[]},{"level":3,"title":"Why is the new version of Arthas downloaded, but the old version is connected?","slug":"why-is-the-new-version-of-arthas-downloaded-but-the-old-version-is-connected","link":"#why-is-the-new-version-of-arthas-downloaded-but-the-old-version-is-connected","children":[]},{"level":3,"title":"The spring bean cglib object is obtained in the ognl expression, but the field is null","slug":"the-spring-bean-cglib-object-is-obtained-in-the-ognl-expression-but-the-field-is-null","link":"#the-spring-bean-cglib-object-is-obtained-in-the-ognl-expression-but-the-field-is-null","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/faq.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-d1b46bf2","path":"/en/doc/faq.html","title":"FAQ","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"Where is the log file?","slug":"where-is-the-log-file","link":"#where-is-the-log-file","children":[]},{"level":3,"title":"telnet: connect to address 127.0.0.1: Connection refused","slug":"telnet-connect-to-address-127-0-0-1-connection-refused","link":"#telnet-connect-to-address-127-0-0-1-connection-refused","children":[]},{"level":3,"title":"How much impact does Arthas attach have on the performance of the original process?","slug":"how-much-impact-does-arthas-attach-have-on-the-performance-of-the-original-process","link":"#how-much-impact-does-arthas-attach-have-on-the-performance-of-the-original-process","children":[]},{"level":3,"title":"target process not responding or HotSpot VM not loaded","slug":"target-process-not-responding-or-hotspot-vm-not-loaded","link":"#target-process-not-responding-or-hotspot-vm-not-loaded","children":[]},{"level":3,"title":"Can commands such as trace/watch enhance the classes in jdk?","slug":"can-commands-such-as-trace-watch-enhance-the-classes-in-jdk","link":"#can-commands-such-as-trace-watch-enhance-the-classes-in-jdk","children":[]},{"level":3,"title":"How to view the result in json format","slug":"how-to-view-the-result-in-json-format","link":"#how-to-view-the-result-in-json-format","children":[]},{"level":3,"title":"Can arthas trace native methods","slug":"can-arthas-trace-native-methods","link":"#can-arthas-trace-native-methods","children":[]},{"level":3,"title":"Can arthas view the value of a variable in memory?","slug":"can-arthas-view-the-value-of-a-variable-in-memory","link":"#can-arthas-view-the-value-of-a-variable-in-memory","children":[]},{"level":3,"title":"How to filter method with the same name?","slug":"how-to-filter-method-with-the-same-name","link":"#how-to-filter-method-with-the-same-name","children":[]},{"level":3,"title":"How to watch or trace constructor?","slug":"how-to-watch-or-trace-constructor","link":"#how-to-watch-or-trace-constructor","children":[]},{"level":3,"title":"How to watch or trace inner classes?","slug":"how-to-watch-or-trace-inner-classes","link":"#how-to-watch-or-trace-inner-classes","children":[]},{"level":3,"title":"Does it support watch and trace lambda classes?","slug":"does-it-support-watch-and-trace-lambda-classes","link":"#does-it-support-watch-and-trace-lambda-classes","children":[]},{"level":3,"title":"Enter Unicode characters","slug":"enter-unicode-characters","link":"#enter-unicode-characters","children":[]},{"level":3,"title":"java.lang.ClassFormatError: null, skywalking arthas compatible use","slug":"java-lang-classformaterror-null-skywalking-arthas-compatible-use","link":"#java-lang-classformaterror-null-skywalking-arthas-compatible-use","children":[]},{"level":3,"title":"Can I use arthas offline?","slug":"can-i-use-arthas-offline","link":"#can-i-use-arthas-offline","children":[]},{"level":3,"title":"How to use the specified version of Arthas without using the automatic upgrade version?","slug":"how-to-use-the-specified-version-of-arthas-without-using-the-automatic-upgrade-version","link":"#how-to-use-the-specified-version-of-arthas-without-using-the-automatic-upgrade-version","children":[]},{"level":3,"title":"Attach the process with pid 1 in docker/k8s failed","slug":"attach-the-process-with-pid-1-in-docker-k8s-failed","link":"#attach-the-process-with-pid-1-in-docker-k8s-failed","children":[]},{"level":3,"title":"Why is the new version of Arthas downloaded, but the old version is connected?","slug":"why-is-the-new-version-of-arthas-downloaded-but-the-old-version-is-connected","link":"#why-is-the-new-version-of-arthas-downloaded-but-the-old-version-is-connected","children":[]},{"level":3,"title":"The spring bean cglib object is obtained in the ognl expression, but the field is null","slug":"the-spring-bean-cglib-object-is-obtained-in-the-ognl-expression-but-the-field-is-null","link":"#the-spring-bean-cglib-object-is-obtained-in-the-ognl-expression-but-the-field-is-null","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/faq.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/faq.html.44fb2f53.js b/assets/faq.html.36186b06.js similarity index 97% rename from assets/faq.html.44fb2f53.js rename to assets/faq.html.36186b06.js index 47b627705..e2d0239bf 100644 --- a/assets/faq.html.44fb2f53.js +++ b/assets/faq.html.36186b06.js @@ -1 +1 @@ -const l=JSON.parse('{"key":"v-d070981a","path":"/doc/faq.html","title":"FAQ","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"\u65E5\u5FD7\u6587\u4EF6\u5728\u54EA\u91CC\uFF1F","slug":"\u65E5\u5FD7\u6587\u4EF6\u5728\u54EA\u91CC","link":"#\u65E5\u5FD7\u6587\u4EF6\u5728\u54EA\u91CC","children":[]},{"level":3,"title":"telnet: connect to address 127.0.0.1: Connection refused","slug":"telnet-connect-to-address-127-0-0-1-connection-refused","link":"#telnet-connect-to-address-127-0-0-1-connection-refused","children":[]},{"level":3,"title":"Arthas attach \u4E4B\u540E\u5BF9\u539F\u8FDB\u7A0B\u6027\u80FD\u6709\u591A\u5927\u7684\u5F71\u54CD","slug":"arthas-attach-\u4E4B\u540E\u5BF9\u539F\u8FDB\u7A0B\u6027\u80FD\u6709\u591A\u5927\u7684\u5F71\u54CD","link":"#arthas-attach-\u4E4B\u540E\u5BF9\u539F\u8FDB\u7A0B\u6027\u80FD\u6709\u591A\u5927\u7684\u5F71\u54CD","children":[]},{"level":3,"title":"target process not responding or HotSpot VM not loaded","slug":"target-process-not-responding-or-hotspot-vm-not-loaded","link":"#target-process-not-responding-or-hotspot-vm-not-loaded","children":[]},{"level":3,"title":"trace/watch \u7B49\u547D\u4EE4\u80FD\u5426\u589E\u5F3A jdk \u91CC\u7684\u7C7B\uFF1F","slug":"trace-watch-\u7B49\u547D\u4EE4\u80FD\u5426\u589E\u5F3A-jdk-\u91CC\u7684\u7C7B","link":"#trace-watch-\u7B49\u547D\u4EE4\u80FD\u5426\u589E\u5F3A-jdk-\u91CC\u7684\u7C7B","children":[]},{"level":3,"title":"\u600E\u4E48\u4EE5json\u683C\u5F0F\u67E5\u770B\u7ED3\u679C","slug":"\u600E\u4E48\u4EE5json\u683C\u5F0F\u67E5\u770B\u7ED3\u679C","link":"#\u600E\u4E48\u4EE5json\u683C\u5F0F\u67E5\u770B\u7ED3\u679C","children":[]},{"level":3,"title":"Arthas \u80FD\u5426\u8DDF\u8E2A native \u51FD\u6570","slug":"arthas-\u80FD\u5426\u8DDF\u8E2A-native-\u51FD\u6570","link":"#arthas-\u80FD\u5426\u8DDF\u8E2A-native-\u51FD\u6570","children":[]},{"level":3,"title":"\u80FD\u4E0D\u80FD\u67E5\u770B\u5185\u5B58\u91CC\u67D0\u4E2A\u53D8\u91CF\u7684\u503C","slug":"\u80FD\u4E0D\u80FD\u67E5\u770B\u5185\u5B58\u91CC\u67D0\u4E2A\u53D8\u91CF\u7684\u503C","link":"#\u80FD\u4E0D\u80FD\u67E5\u770B\u5185\u5B58\u91CC\u67D0\u4E2A\u53D8\u91CF\u7684\u503C","children":[]},{"level":3,"title":"\u65B9\u6CD5\u540C\u540D\u8FC7\u6EE4","slug":"\u65B9\u6CD5\u540C\u540D\u8FC7\u6EE4","link":"#\u65B9\u6CD5\u540C\u540D\u8FC7\u6EE4","children":[]},{"level":3,"title":"\u600E\u4E48 watch\u3001trace \u6784\u9020\u51FD\u6570 \uFF1F","slug":"\u600E\u4E48-watch\u3001trace-\u6784\u9020\u51FD\u6570","link":"#\u600E\u4E48-watch\u3001trace-\u6784\u9020\u51FD\u6570","children":[]},{"level":3,"title":"\u600E\u6837 watch\u3001trace \u5185\u90E8\u7C7B\uFF1F","slug":"\u600E\u6837-watch\u3001trace-\u5185\u90E8\u7C7B","link":"#\u600E\u6837-watch\u3001trace-\u5185\u90E8\u7C7B","children":[]},{"level":3,"title":"\u662F\u5426\u652F\u6301 watch\u3001trace lambda \u7C7B\uFF1F","slug":"\u662F\u5426\u652F\u6301-watch\u3001trace-lambda-\u7C7B","link":"#\u662F\u5426\u652F\u6301-watch\u3001trace-lambda-\u7C7B","children":[]},{"level":3,"title":"\u8F93\u5165\u4E2D\u6587/Unicode \u5B57\u7B26","slug":"\u8F93\u5165\u4E2D\u6587-unicode-\u5B57\u7B26","link":"#\u8F93\u5165\u4E2D\u6587-unicode-\u5B57\u7B26","children":[]},{"level":3,"title":"java.lang.ClassFormatError: null\u3001skywalking arthas \u517C\u5BB9\u4F7F\u7528","slug":"java-lang-classformaterror-null\u3001skywalking-arthas-\u517C\u5BB9\u4F7F\u7528","link":"#java-lang-classformaterror-null\u3001skywalking-arthas-\u517C\u5BB9\u4F7F\u7528","children":[]},{"level":3,"title":"Arthas \u80FD\u4E0D\u80FD\u79BB\u7EBF\u4F7F\u7528","slug":"arthas-\u80FD\u4E0D\u80FD\u79BB\u7EBF\u4F7F\u7528","link":"#arthas-\u80FD\u4E0D\u80FD\u79BB\u7EBF\u4F7F\u7528","children":[]},{"level":3,"title":"Arthas \u600E\u4E48\u4F7F\u7528\u6307\u5B9A\u7248\u672C\uFF0C\u4E0D\u4F7F\u7528\u81EA\u52A8\u5347\u7EA7\u7248\u672C","slug":"arthas-\u600E\u4E48\u4F7F\u7528\u6307\u5B9A\u7248\u672C-\u4E0D\u4F7F\u7528\u81EA\u52A8\u5347\u7EA7\u7248\u672C","link":"#arthas-\u600E\u4E48\u4F7F\u7528\u6307\u5B9A\u7248\u672C-\u4E0D\u4F7F\u7528\u81EA\u52A8\u5347\u7EA7\u7248\u672C","children":[]},{"level":3,"title":"Attach docker/k8s \u91CC\u7684 pid \u4E3A 1 \u7684\u8FDB\u7A0B\u5931\u8D25","slug":"attach-docker-k8s-\u91CC\u7684-pid-\u4E3A-1-\u7684\u8FDB\u7A0B\u5931\u8D25","link":"#attach-docker-k8s-\u91CC\u7684-pid-\u4E3A-1-\u7684\u8FDB\u7A0B\u5931\u8D25","children":[]},{"level":3,"title":"\u4E3A\u4EC0\u4E48\u4E0B\u8F7D\u4E86\u65B0\u7248\u672C\u7684 Arthas\uFF0C\u8FDE\u63A5\u7684\u5374\u662F\u65E7\u7248\u672C\uFF1F","slug":"\u4E3A\u4EC0\u4E48\u4E0B\u8F7D\u4E86\u65B0\u7248\u672C\u7684-arthas-\u8FDE\u63A5\u7684\u5374\u662F\u65E7\u7248\u672C","link":"#\u4E3A\u4EC0\u4E48\u4E0B\u8F7D\u4E86\u65B0\u7248\u672C\u7684-arthas-\u8FDE\u63A5\u7684\u5374\u662F\u65E7\u7248\u672C","children":[]},{"level":3,"title":"\u5728ognl\u8868\u8FBE\u5F0F\u4E2D\u83B7\u53D6\u5230 spring bean cglib \u5BF9\u8C61\uFF0C\u4F46\u662F field \u662F null","slug":"\u5728ognl\u8868\u8FBE\u5F0F\u4E2D\u83B7\u53D6\u5230-spring-bean-cglib-\u5BF9\u8C61-\u4F46\u662F-field-\u662F-null","link":"#\u5728ognl\u8868\u8FBE\u5F0F\u4E2D\u83B7\u53D6\u5230-spring-bean-cglib-\u5BF9\u8C61-\u4F46\u662F-field-\u662F-null","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/faq.md","version":"4.3.3"}');export{l as data}; +const l=JSON.parse('{"key":"v-d070981a","path":"/doc/faq.html","title":"FAQ","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"\u65E5\u5FD7\u6587\u4EF6\u5728\u54EA\u91CC\uFF1F","slug":"\u65E5\u5FD7\u6587\u4EF6\u5728\u54EA\u91CC","link":"#\u65E5\u5FD7\u6587\u4EF6\u5728\u54EA\u91CC","children":[]},{"level":3,"title":"telnet: connect to address 127.0.0.1: Connection refused","slug":"telnet-connect-to-address-127-0-0-1-connection-refused","link":"#telnet-connect-to-address-127-0-0-1-connection-refused","children":[]},{"level":3,"title":"Arthas attach \u4E4B\u540E\u5BF9\u539F\u8FDB\u7A0B\u6027\u80FD\u6709\u591A\u5927\u7684\u5F71\u54CD","slug":"arthas-attach-\u4E4B\u540E\u5BF9\u539F\u8FDB\u7A0B\u6027\u80FD\u6709\u591A\u5927\u7684\u5F71\u54CD","link":"#arthas-attach-\u4E4B\u540E\u5BF9\u539F\u8FDB\u7A0B\u6027\u80FD\u6709\u591A\u5927\u7684\u5F71\u54CD","children":[]},{"level":3,"title":"target process not responding or HotSpot VM not loaded","slug":"target-process-not-responding-or-hotspot-vm-not-loaded","link":"#target-process-not-responding-or-hotspot-vm-not-loaded","children":[]},{"level":3,"title":"trace/watch \u7B49\u547D\u4EE4\u80FD\u5426\u589E\u5F3A jdk \u91CC\u7684\u7C7B\uFF1F","slug":"trace-watch-\u7B49\u547D\u4EE4\u80FD\u5426\u589E\u5F3A-jdk-\u91CC\u7684\u7C7B","link":"#trace-watch-\u7B49\u547D\u4EE4\u80FD\u5426\u589E\u5F3A-jdk-\u91CC\u7684\u7C7B","children":[]},{"level":3,"title":"\u600E\u4E48\u4EE5json\u683C\u5F0F\u67E5\u770B\u7ED3\u679C","slug":"\u600E\u4E48\u4EE5json\u683C\u5F0F\u67E5\u770B\u7ED3\u679C","link":"#\u600E\u4E48\u4EE5json\u683C\u5F0F\u67E5\u770B\u7ED3\u679C","children":[]},{"level":3,"title":"Arthas \u80FD\u5426\u8DDF\u8E2A native \u51FD\u6570","slug":"arthas-\u80FD\u5426\u8DDF\u8E2A-native-\u51FD\u6570","link":"#arthas-\u80FD\u5426\u8DDF\u8E2A-native-\u51FD\u6570","children":[]},{"level":3,"title":"\u80FD\u4E0D\u80FD\u67E5\u770B\u5185\u5B58\u91CC\u67D0\u4E2A\u53D8\u91CF\u7684\u503C","slug":"\u80FD\u4E0D\u80FD\u67E5\u770B\u5185\u5B58\u91CC\u67D0\u4E2A\u53D8\u91CF\u7684\u503C","link":"#\u80FD\u4E0D\u80FD\u67E5\u770B\u5185\u5B58\u91CC\u67D0\u4E2A\u53D8\u91CF\u7684\u503C","children":[]},{"level":3,"title":"\u65B9\u6CD5\u540C\u540D\u8FC7\u6EE4","slug":"\u65B9\u6CD5\u540C\u540D\u8FC7\u6EE4","link":"#\u65B9\u6CD5\u540C\u540D\u8FC7\u6EE4","children":[]},{"level":3,"title":"\u600E\u4E48 watch\u3001trace \u6784\u9020\u51FD\u6570 \uFF1F","slug":"\u600E\u4E48-watch\u3001trace-\u6784\u9020\u51FD\u6570","link":"#\u600E\u4E48-watch\u3001trace-\u6784\u9020\u51FD\u6570","children":[]},{"level":3,"title":"\u600E\u6837 watch\u3001trace \u5185\u90E8\u7C7B\uFF1F","slug":"\u600E\u6837-watch\u3001trace-\u5185\u90E8\u7C7B","link":"#\u600E\u6837-watch\u3001trace-\u5185\u90E8\u7C7B","children":[]},{"level":3,"title":"\u662F\u5426\u652F\u6301 watch\u3001trace lambda \u7C7B\uFF1F","slug":"\u662F\u5426\u652F\u6301-watch\u3001trace-lambda-\u7C7B","link":"#\u662F\u5426\u652F\u6301-watch\u3001trace-lambda-\u7C7B","children":[]},{"level":3,"title":"\u8F93\u5165\u4E2D\u6587/Unicode \u5B57\u7B26","slug":"\u8F93\u5165\u4E2D\u6587-unicode-\u5B57\u7B26","link":"#\u8F93\u5165\u4E2D\u6587-unicode-\u5B57\u7B26","children":[]},{"level":3,"title":"java.lang.ClassFormatError: null\u3001skywalking arthas \u517C\u5BB9\u4F7F\u7528","slug":"java-lang-classformaterror-null\u3001skywalking-arthas-\u517C\u5BB9\u4F7F\u7528","link":"#java-lang-classformaterror-null\u3001skywalking-arthas-\u517C\u5BB9\u4F7F\u7528","children":[]},{"level":3,"title":"Arthas \u80FD\u4E0D\u80FD\u79BB\u7EBF\u4F7F\u7528","slug":"arthas-\u80FD\u4E0D\u80FD\u79BB\u7EBF\u4F7F\u7528","link":"#arthas-\u80FD\u4E0D\u80FD\u79BB\u7EBF\u4F7F\u7528","children":[]},{"level":3,"title":"Arthas \u600E\u4E48\u4F7F\u7528\u6307\u5B9A\u7248\u672C\uFF0C\u4E0D\u4F7F\u7528\u81EA\u52A8\u5347\u7EA7\u7248\u672C","slug":"arthas-\u600E\u4E48\u4F7F\u7528\u6307\u5B9A\u7248\u672C-\u4E0D\u4F7F\u7528\u81EA\u52A8\u5347\u7EA7\u7248\u672C","link":"#arthas-\u600E\u4E48\u4F7F\u7528\u6307\u5B9A\u7248\u672C-\u4E0D\u4F7F\u7528\u81EA\u52A8\u5347\u7EA7\u7248\u672C","children":[]},{"level":3,"title":"Attach docker/k8s \u91CC\u7684 pid \u4E3A 1 \u7684\u8FDB\u7A0B\u5931\u8D25","slug":"attach-docker-k8s-\u91CC\u7684-pid-\u4E3A-1-\u7684\u8FDB\u7A0B\u5931\u8D25","link":"#attach-docker-k8s-\u91CC\u7684-pid-\u4E3A-1-\u7684\u8FDB\u7A0B\u5931\u8D25","children":[]},{"level":3,"title":"\u4E3A\u4EC0\u4E48\u4E0B\u8F7D\u4E86\u65B0\u7248\u672C\u7684 Arthas\uFF0C\u8FDE\u63A5\u7684\u5374\u662F\u65E7\u7248\u672C\uFF1F","slug":"\u4E3A\u4EC0\u4E48\u4E0B\u8F7D\u4E86\u65B0\u7248\u672C\u7684-arthas-\u8FDE\u63A5\u7684\u5374\u662F\u65E7\u7248\u672C","link":"#\u4E3A\u4EC0\u4E48\u4E0B\u8F7D\u4E86\u65B0\u7248\u672C\u7684-arthas-\u8FDE\u63A5\u7684\u5374\u662F\u65E7\u7248\u672C","children":[]},{"level":3,"title":"\u5728ognl\u8868\u8FBE\u5F0F\u4E2D\u83B7\u53D6\u5230 spring bean cglib \u5BF9\u8C61\uFF0C\u4F46\u662F field \u662F null","slug":"\u5728ognl\u8868\u8FBE\u5F0F\u4E2D\u83B7\u53D6\u5230-spring-bean-cglib-\u5BF9\u8C61-\u4F46\u662F-field-\u662F-null","link":"#\u5728ognl\u8868\u8FBE\u5F0F\u4E2D\u83B7\u53D6\u5230-spring-bean-cglib-\u5BF9\u8C61-\u4F46\u662F-field-\u662F-null","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/faq.md","version":"4.3.5"}');export{l as data}; diff --git a/assets/faq.html.7de57ec6.js b/assets/faq.html.8aecb0b8.js similarity index 59% rename from assets/faq.html.7de57ec6.js rename to assets/faq.html.8aecb0b8.js index 3bd05ee38..1e04f0959 100644 --- a/assets/faq.html.7de57ec6.js +++ b/assets/faq.html.8aecb0b8.js @@ -1,7 +1,7 @@ -import{_ as h,o as c,c as d,a as e,b as a,w as n,e as t,d as r,r as i}from"./app.524ecf5c.js";const l={},u=e("h1",{id:"faq",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#faq","aria-hidden":"true"},"#"),t(" FAQ")],-1),p={class:"custom-container tip"},m=e("p",{class:"custom-container-title"},"TIP",-1),b=t("For questions that are not in this list, please search in issues. "),_={href:"https://github.com/alibaba/arthas/issues",target:"_blank",rel:"noopener noreferrer"},f=t("https://github.com/alibaba/arthas/issues"),g=r('

Where is the log file?

Log file path: ~/logs/arthas/arthas.log

telnet: connect to address 127.0.0.1: Connection refused

  1. Check the log ~/logs/arthas/arthas.log
  2. Check the startup parameters of as.sh/arthas-boot.jar, whether a specific port is specified
  3. Use netstat to check the process of LISTEN 3658 port, confirm it is a java process, and it is the process you want to diagnose
  4. If the process of LISTEN 3658 port is not a java process, then the 3658 port is already occupied. You need to specify other ports in the startup parameters of as.sh/arthas-boot.jar.
  5. After confirming the process and port, try to connect with telnet 127.0.0.1 3658

Essentially, arthas will start a tcp server within the application java process, and then use telnet to connect to it.

  1. The port may not match
  2. The process itself may have been suspended and cannot accept new connections

If there is Arthas server already bind. in the Arthas log

  1. It means that the Arthas server has been started before, check the file descriptors opened by the target process. If it is a linux environment, you can go to /proc/$pid/fd, use ls -alh | grep arthas to check whether the process has loaded the arthas related jar package.
  2. If not, it may be that other processes have started arthas, or the application has been restarted.

How much impact does Arthas attach have on the performance of the original process?

',9),v={href:"https://github.com/alibaba/arthas/issues/44",target:"_blank",rel:"noopener noreferrer"},w=t("https://github.com/alibaba/arthas/issues/44"),k=e("h3",{id:"target-process-not-responding-or-hotspot-vm-not-loaded",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#target-process-not-responding-or-hotspot-vm-not-loaded","aria-hidden":"true"},"#"),t(" target process not responding or HotSpot VM not loaded")],-1),y=e("p",null,"com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded",-1),x=e("li",null,"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.",-1),j=e("li",null,[t("Try to use "),e("code",null,"jstack -l $pid"),t(". 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 "),e("code",null,"jmap"),t(" heapdump to analyze.")],-1),I=t("Try to attach math-game in "),C=t("quick-start"),A=t("."),T=t("For more information: "),E={href:"https://github.com/alibaba/arthas/issues/347",target:"_blank",rel:"noopener noreferrer"},S=t("https://github.com/alibaba/arthas/issues/347"),V=r(`

Can commands such as trace/watch enhance the classes in jdk?

By default, classes beginning with java. or the classes loaded by the Bootstrap ClassLoader are filtered out, but they can be turned on:

options unsafe true
-
`,3),L=t("See more at "),q=t("options"),F=r(`

TIP

To support the jars appended by java.lang.instrument.Instrumentation#appendToBootstrapClassLoaderSearch need to enable unsafe.

How to view the result in json format

options json-format true
-
`,3),H=t("See more at "),M=t("options"),N=e("h3",{id:"can-arthas-trace-native-methods",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#can-arthas-trace-native-methods","aria-hidden":"true"},"#"),t(" Can arthas trace native methods")],-1),Y=e("p",null,"No.",-1),B=e("h3",{id:"can-arthas-view-the-value-of-a-variable-in-memory",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#can-arthas-view-the-value-of-a-variable-in-memory","aria-hidden":"true"},"#"),t(" Can arthas view the value of a variable in memory?")],-1),O=t("You can use "),z=e("code",null,"vmtool",-1),J=t(" command."),R=t("You can use some tricks to intercept the object with the "),U=e("code",null,"tt",-1),W=t(" command, or fetch it from a static method."),$=e("h3",{id:"how-to-filter-method-with-the-same-name",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-to-filter-method-with-the-same-name","aria-hidden":"true"},"#"),t(" How to filter method with the same name?")],-1),D=t("You can used all variables in "),G=t("fundamental fields in expressions"),P=t(" for the condition express to filter method with the same name, you can use the number of parameters "),Q=e("code",null,"params.length ==1",-1),K=t(",parameter type "),X=e("code",null,"params[0] instanceof java.lang.Integer",-1),Z=t(",return value type "),ee=e("code",null,"returnObj instanceof java.util.List",-1),te=t(" and so on in one or more combinations as condition express."),ae=t("You can use "),se=e("code",null,"-v",-1),oe=t(" to view the condition express result "),ne={href:"https://github.com/alibaba/arthas/issues/1348",target:"_blank",rel:"noopener noreferrer"},re=t("https://github.com/alibaba/arthas/issues/1348"),ie=t("example "),he=t("math-game"),ce=r(`
watch demo.MathGame primeFactors '{params,returnObj,throwExp}' 'params.length >0 && returnObj instanceof java.util.List' -v
+import{_ as h,o as c,c as d,a as e,b as a,w as n,e as t,d as r,r as i}from"./app.e2427bec.js";const l={},u=e("h1",{id:"faq",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#faq","aria-hidden":"true"},"#"),t(" FAQ")],-1),p={class:"custom-container tip"},m=e("p",{class:"custom-container-title"},"TIP",-1),b=t("For questions that are not in this list, please search in issues. "),_={href:"https://github.com/alibaba/arthas/issues",target:"_blank",rel:"noopener noreferrer"},f=t("https://github.com/alibaba/arthas/issues"),g=r('

Where is the log file?

Log file path: ~/logs/arthas/arthas.log

telnet: connect to address 127.0.0.1: Connection refused

  1. Check the log ~/logs/arthas/arthas.log
  2. Check the startup parameters of as.sh/arthas-boot.jar, whether a specific port is specified
  3. Use netstat to check the process of LISTEN 3658 port, confirm it is a java process, and it is the process you want to diagnose
  4. If the process of LISTEN 3658 port is not a java process, then the 3658 port is already occupied. You need to specify other ports in the startup parameters of as.sh/arthas-boot.jar.
  5. After confirming the process and port, try to connect with telnet 127.0.0.1 3658

Essentially, arthas will start a tcp server within the application java process, and then use telnet to connect to it.

  1. The port may not match
  2. The process itself may have been suspended and cannot accept new connections

If there is Arthas server already bind. in the Arthas log

  1. It means that the Arthas server has been started before, check the file descriptors opened by the target process. If it is a linux environment, you can go to /proc/$pid/fd, use ls -alh | grep arthas to check whether the process has loaded the arthas related jar package.
  2. If not, it may be that other processes have started arthas, or the application has been restarted.

How much impact does Arthas attach have on the performance of the original process?

',9),v={href:"https://github.com/alibaba/arthas/issues/44",target:"_blank",rel:"noopener noreferrer"},w=t("https://github.com/alibaba/arthas/issues/44"),k=e("h3",{id:"target-process-not-responding-or-hotspot-vm-not-loaded",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#target-process-not-responding-or-hotspot-vm-not-loaded","aria-hidden":"true"},"#"),t(" target process not responding or HotSpot VM not loaded")],-1),y=e("p",null,"com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded",-1),x=e("li",null,"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.",-1),j=e("li",null,[t("Try to use "),e("code",null,"jstack -l $pid"),t(". 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 "),e("code",null,"jmap"),t(" heapdump to analyze.")],-1),I=t("Try to attach math-game in "),C=t("quick-start"),A=t("."),T=t("For more information: "),S={href:"https://github.com/alibaba/arthas/issues/347",target:"_blank",rel:"noopener noreferrer"},E=t("https://github.com/alibaba/arthas/issues/347"),L=r(`

Can commands such as trace/watch enhance the classes in jdk?

By default, classes beginning with java. or the classes loaded by the Bootstrap ClassLoader are filtered out, but they can be turned on:

options unsafe true
+
`,3),V=t("See more at "),q=t("options"),F=r(`

TIP

To support the jars appended by java.lang.instrument.Instrumentation#appendToBootstrapClassLoaderSearch need to enable unsafe.

How to view the result in json format

options json-format true
+
`,3),H=t("See more at "),N=t("options"),M=e("h3",{id:"can-arthas-trace-native-methods",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#can-arthas-trace-native-methods","aria-hidden":"true"},"#"),t(" Can arthas trace native methods")],-1),O=e("p",null,"No.",-1),Y=e("h3",{id:"can-arthas-view-the-value-of-a-variable-in-memory",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#can-arthas-view-the-value-of-a-variable-in-memory","aria-hidden":"true"},"#"),t(" Can arthas view the value of a variable in memory?")],-1),B=t("You can use "),z=e("code",null,"vmtool",-1),J=t(" command."),R=t("You can use some tricks to intercept the object with the "),U=e("code",null,"tt",-1),W=t(" command, or fetch it from a static method."),$=e("h3",{id:"how-to-filter-method-with-the-same-name",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-to-filter-method-with-the-same-name","aria-hidden":"true"},"#"),t(" How to filter method with the same name?")],-1),D=t("You can used all variables in "),G=t("fundamental fields in expressions"),P=t(" for the condition express to filter method with the same name, you can use the number of parameters "),Q=e("code",null,"params.length ==1",-1),K=t(",parameter type "),X=e("code",null,"params[0] instanceof java.lang.Integer",-1),Z=t(",return value type "),ee=e("code",null,"returnObj instanceof java.util.List",-1),te=t(" and so on in one or more combinations as condition express."),ae=t("You can use "),se=e("code",null,"-v",-1),oe=t(" to view the condition express result "),ne={href:"https://github.com/alibaba/arthas/issues/1348",target:"_blank",rel:"noopener noreferrer"},re=t("https://github.com/alibaba/arthas/issues/1348"),ie=t("example "),he=t("math-game"),ce=r(`
watch demo.MathGame primeFactors '{params,returnObj,throwExp}' 'params.length >0 && returnObj instanceof java.util.List' -v
 

How to watch or trace constructor?

watch demo.MathGame <init> '{params,returnObj,throwExp}' -v
 

How to watch or trace inner classes?

In the JVM specification the name of inner classes is OuterClass$InnerClass.

watch OuterClass$InnerClass
 

Does it support watch and trace lambda classes?

For classes generated by lambda, will be skipped because the JVM itself does not allow enhancements to classes generated by lambda.

`,8),de={href:"https://github.com/alibaba/arthas/issues/1225",target:"_blank",rel:"noopener noreferrer"},le=t("https://github.com/alibaba/arthas/issues/1225"),ue=r(`

Enter Unicode characters

Starting with Arthas 4.3.2, the terminal supports directly entering and editing Chinese and other Unicode characters.

In Arthas 4.3.1 and earlier, convert Unicode characters to the \\u representation:

ognl '@java.lang.System@out.println("Hello \\u4e2d\\u6587")'
-

java.lang.ClassFormatError: null, skywalking arthas compatible use

When error log appear java.lang.ClassFormatError: null, it is usually modified by other bytecode tools that are not compatible with arthas modified bytecode.

`,6),pe=t("For example: use skywalking V8.1.0 below "),me={href:"https://github.com/alibaba/arthas/issues/1141",target:"_blank",rel:"noopener noreferrer"},be=t("cannot trace, watch classes enhanced by skywalking agent"),_e=t(", V8.1.0 or above is compatible, refer to skywalking configuration for more details. "),fe={href:"https://github.com/apache/skywalking/blob/master/docs/en/FAQ/Compatible-with-other-javaagent-bytecode-processing.md#",target:"_blank",rel:"noopener noreferrer"},ge=t("skywalking compatible with other javaagent bytecode processing"),ve=t("."),we=e("h4",{id:"class-redefinition-failed-attempted-to-change-the-schema-add-remove-fields",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#class-redefinition-failed-attempted-to-change-the-schema-add-remove-fields","aria-hidden":"true"},"#"),t(" class redefinition failed: attempted to change the schema (add/remove fields)")],-1),ke=t("Reference: "),ye={href:"https://github.com/alibaba/arthas/issues/2165",target:"_blank",rel:"noopener noreferrer"},xe=t("https://github.com/alibaba/arthas/issues/2165"),je=e("h3",{id:"can-i-use-arthas-offline",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#can-i-use-arthas-offline","aria-hidden":"true"},"#"),t(" Can I use arthas offline?")],-1),Ie=t("Yes. Just download the full size package and unzip it, refer to: "),Ce=t("Download"),Ae=t("."),Te=r('

How to use the specified version of Arthas without using the automatic upgrade version?

  1. When starting as.sh/arthas-boot.jar, you can specify it with the --use-version parameter.
  2. Download the full package, unzip it, and cd to the arthas directory to start. In this case, the version in the current directory will be used.

Attach the process with pid 1 in docker/k8s failed

',3),Ee=t("Reference: "),Se={href:"https://github.com/alibaba/arthas/issues/362#issuecomment-448185416",target:"_blank",rel:"noopener noreferrer"},Ve=t("https://github.com/alibaba/arthas/issues/362#issuecomment-448185416"),Le=r('

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..

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.

The spring bean cglib object is obtained in the ognl expression, but the field is null

Reference:

',5),qe={href:"https://github.com/alibaba/arthas/issues/1802",target:"_blank",rel:"noopener noreferrer"},Fe=t("https://github.com/alibaba/arthas/issues/1802"),He={href:"https://github.com/alibaba/arthas/issues/1424",target:"_blank",rel:"noopener noreferrer"},Me=t("https://github.com/alibaba/arthas/issues/1424");function Ne(Ye,Be){const s=i("ExternalLinkIcon"),o=i("RouterLink");return c(),d("div",null,[u,e("div",p,[m,e("p",null,[b,e("a",_,[f,a(s)])])]),g,e("p",null,[e("a",v,[w,a(s)])]),k,y,e("ol",null,[x,j,e("li",null,[I,a(o,{to:"/en/doc/quick-start.html"},{default:n(()=>[C]),_:1}),A]),e("li",null,[T,e("a",E,[S,a(s)])])]),V,e("p",null,[L,a(o,{to:"/en/doc/options.html"},{default:n(()=>[q]),_:1})]),F,e("p",null,[H,a(o,{to:"/en/doc/options.html"},{default:n(()=>[M]),_:1})]),N,Y,B,e("ol",null,[e("li",null,[O,a(o,{to:"/en/doc/vmtool.html"},{default:n(()=>[z]),_:1}),J]),e("li",null,[R,a(o,{to:"/en/doc/tt.html"},{default:n(()=>[U]),_:1}),W])]),$,e("p",null,[D,a(o,{to:"/en/doc/advice-class.html"},{default:n(()=>[G]),_:1}),P,Q,K,X,Z,ee,te]),e("p",null,[ae,se,oe,e("a",ne,[re,a(s)])]),e("p",null,[ie,a(o,{to:"/en/doc/quick-start.html"},{default:n(()=>[he]),_:1})]),ce,e("ul",null,[e("li",null,[e("a",de,[le,a(s)])])]),ue,e("p",null,[pe,e("a",me,[be,a(s)]),_e,e("a",fe,[ge,a(s)]),ve]),we,e("p",null,[ke,e("a",ye,[xe,a(s)])]),je,e("p",null,[Ie,a(o,{to:"/en/doc/download.html"},{default:n(()=>[Ce]),_:1}),Ae]),Te,e("p",null,[Ee,e("a",Se,[Ve,a(s)])]),Le,e("ul",null,[e("li",null,[e("a",qe,[Fe,a(s)])]),e("li",null,[e("a",He,[Me,a(s)])])])])}const ze=h(l,[["render",Ne],["__file","faq.html.vue"]]);export{ze as default}; +
`,4),pe=t("See "),me=t("Tips for complex OGNL expressions"),be=t(" for complex syntax, formatting constraints, and troubleshooting."),_e=e("h3",{id:"java-lang-classformaterror-null-skywalking-arthas-compatible-use",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#java-lang-classformaterror-null-skywalking-arthas-compatible-use","aria-hidden":"true"},"#"),t(" java.lang.ClassFormatError: null, skywalking arthas compatible use")],-1),fe=e("p",null,[t("When error log appear "),e("code",null,"java.lang.ClassFormatError: null"),t(", it is usually modified by other bytecode tools that are not compatible with arthas modified bytecode.")],-1),ge=t("For example: use skywalking V8.1.0 below "),ve={href:"https://github.com/alibaba/arthas/issues/1141",target:"_blank",rel:"noopener noreferrer"},we=t("cannot trace, watch classes enhanced by skywalking agent"),ke=t(", V8.1.0 or above is compatible, refer to skywalking configuration for more details. "),ye={href:"https://github.com/apache/skywalking/blob/master/docs/en/FAQ/Compatible-with-other-javaagent-bytecode-processing.md#",target:"_blank",rel:"noopener noreferrer"},xe=t("skywalking compatible with other javaagent bytecode processing"),je=t("."),Ie=e("h4",{id:"class-redefinition-failed-attempted-to-change-the-schema-add-remove-fields",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#class-redefinition-failed-attempted-to-change-the-schema-add-remove-fields","aria-hidden":"true"},"#"),t(" class redefinition failed: attempted to change the schema (add/remove fields)")],-1),Ce=t("Reference: "),Ae={href:"https://github.com/alibaba/arthas/issues/2165",target:"_blank",rel:"noopener noreferrer"},Te=t("https://github.com/alibaba/arthas/issues/2165"),Se=e("h3",{id:"can-i-use-arthas-offline",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#can-i-use-arthas-offline","aria-hidden":"true"},"#"),t(" Can I use arthas offline?")],-1),Ee=t("Yes. Just download the full size package and unzip it, refer to: "),Le=t("Download"),Ve=t("."),qe=r('

How to use the specified version of Arthas without using the automatic upgrade version?

  1. When starting as.sh/arthas-boot.jar, you can specify it with the --use-version parameter.
  2. Download the full package, unzip it, and cd to the arthas directory to start. In this case, the version in the current directory will be used.

Attach the process with pid 1 in docker/k8s failed

',3),Fe=t("Reference: "),He={href:"https://github.com/alibaba/arthas/issues/362#issuecomment-448185416",target:"_blank",rel:"noopener noreferrer"},Ne=t("https://github.com/alibaba/arthas/issues/362#issuecomment-448185416"),Me=r('

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..

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.

The spring bean cglib object is obtained in the ognl expression, but the field is null

Reference:

',5),Oe={href:"https://github.com/alibaba/arthas/issues/1802",target:"_blank",rel:"noopener noreferrer"},Ye=t("https://github.com/alibaba/arthas/issues/1802"),Be={href:"https://github.com/alibaba/arthas/issues/1424",target:"_blank",rel:"noopener noreferrer"},ze=t("https://github.com/alibaba/arthas/issues/1424");function Je(Re,Ue){const s=i("ExternalLinkIcon"),o=i("RouterLink");return c(),d("div",null,[u,e("div",p,[m,e("p",null,[b,e("a",_,[f,a(s)])])]),g,e("p",null,[e("a",v,[w,a(s)])]),k,y,e("ol",null,[x,j,e("li",null,[I,a(o,{to:"/en/doc/quick-start.html"},{default:n(()=>[C]),_:1}),A]),e("li",null,[T,e("a",S,[E,a(s)])])]),L,e("p",null,[V,a(o,{to:"/en/doc/options.html"},{default:n(()=>[q]),_:1})]),F,e("p",null,[H,a(o,{to:"/en/doc/options.html"},{default:n(()=>[N]),_:1})]),M,O,Y,e("ol",null,[e("li",null,[B,a(o,{to:"/en/doc/vmtool.html"},{default:n(()=>[z]),_:1}),J]),e("li",null,[R,a(o,{to:"/en/doc/tt.html"},{default:n(()=>[U]),_:1}),W])]),$,e("p",null,[D,a(o,{to:"/en/doc/advice-class.html"},{default:n(()=>[G]),_:1}),P,Q,K,X,Z,ee,te]),e("p",null,[ae,se,oe,e("a",ne,[re,a(s)])]),e("p",null,[ie,a(o,{to:"/en/doc/quick-start.html"},{default:n(()=>[he]),_:1})]),ce,e("ul",null,[e("li",null,[e("a",de,[le,a(s)])])]),ue,e("p",null,[pe,a(o,{to:"/en/doc/ognl-express.html"},{default:n(()=>[me]),_:1}),be]),_e,fe,e("p",null,[ge,e("a",ve,[we,a(s)]),ke,e("a",ye,[xe,a(s)]),je]),Ie,e("p",null,[Ce,e("a",Ae,[Te,a(s)])]),Se,e("p",null,[Ee,a(o,{to:"/en/doc/download.html"},{default:n(()=>[Le]),_:1}),Ve]),qe,e("p",null,[Fe,e("a",He,[Ne,a(s)])]),Me,e("ul",null,[e("li",null,[e("a",Oe,[Ye,a(s)])]),e("li",null,[e("a",Be,[ze,a(s)])])])])}const $e=h(l,[["render",Je],["__file","faq.html.vue"]]);export{$e as default}; diff --git a/assets/getstatic.html.bb912d8f.js b/assets/getstatic.html.0079aa66.js similarity index 74% rename from assets/getstatic.html.bb912d8f.js rename to assets/getstatic.html.0079aa66.js index 75876e00b..050286f43 100644 --- a/assets/getstatic.html.bb912d8f.js +++ b/assets/getstatic.html.0079aa66.js @@ -1,4 +1,4 @@ -import{_ as i,o as c,c as p,a as s,b as n,w as r,e as a,d as o,r as t}from"./app.524ecf5c.js";const d={},u=s("h1",{id:"getstatic",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#getstatic","aria-hidden":"true"},"#"),a(" getstatic")],-1),m={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-getstatic",target:"_blank",rel:"noopener noreferrer"},v=s("code",null,"getstatic",-1),b=a("\u5728\u7EBF\u6559\u7A0B"),k=s("h3",{id:"\u4F7F\u7528\u53C2\u8003",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#\u4F7F\u7528\u53C2\u8003","aria-hidden":"true"},"#"),a(" \u4F7F\u7528\u53C2\u8003")],-1),h=a("\u63A8\u8350\u76F4\u63A5\u4F7F\u7528"),g=a("ognl"),_=a("\u547D\u4EE4\uFF0C\u66F4\u52A0\u7075\u6D3B\u3002"),f=o(`

\u901A\u8FC7 getstatic \u547D\u4EE4\u53EF\u4EE5\u65B9\u4FBF\u7684\u67E5\u770B\u7C7B\u7684\u9759\u6001\u5C5E\u6027\u3002\u4F7F\u7528\u65B9\u6CD5\u4E3Agetstatic class_name field_name

$ getstatic demo.MathGame random
+import{_ as o,o as i,c,a as s,b as e,w as t,e as a,d as l,r as p}from"./app.e2427bec.js";const d={},r=s("h1",{id:"getstatic",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#getstatic","aria-hidden":"true"},"#"),a(" getstatic")],-1),u=s("h3",{id:"\u4F7F\u7528\u53C2\u8003",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#\u4F7F\u7528\u53C2\u8003","aria-hidden":"true"},"#"),a(" \u4F7F\u7528\u53C2\u8003")],-1),v=a("\u63A8\u8350\u76F4\u63A5\u4F7F\u7528"),m=a("ognl"),b=a("\u547D\u4EE4\uFF0C\u66F4\u52A0\u7075\u6D3B\u3002"),k=l(`

\u901A\u8FC7 getstatic \u547D\u4EE4\u53EF\u4EE5\u65B9\u4FBF\u7684\u67E5\u770B\u7C7B\u7684\u9759\u6001\u5C5E\u6027\u3002\u4F7F\u7528\u65B9\u6CD5\u4E3Agetstatic class_name field_name

$ getstatic demo.MathGame random
 field: random
 @Random[
     serialVersionUID=@Long[3905348978240129619],
@@ -18,7 +18,7 @@ field: random
     seedOffset=@Long[24],
 ]
 
  • \u6307\u5B9A classLoader

\u6CE8\u610F hashcode \u662F\u53D8\u5316\u7684\uFF0C\u9700\u8981\u5148\u67E5\u770B\u5F53\u524D\u7684 ClassLoader \u4FE1\u606F\uFF0C\u4F7F\u7528sc -d <ClassName>\u63D0\u53D6\u5BF9\u5E94 ClassLoader \u7684 hashcode\u3002

\u5982\u679C\u4F60\u4F7F\u7528-c\uFF0C\u4F60\u9700\u8981\u624B\u52A8\u8F93\u5165 hashcode\uFF1A-c <hashcode>

$ getstatic -c 3d4eac69 demo.MathGame random
-

\u5BF9\u4E8E\u53EA\u6709\u552F\u4E00\u5B9E\u4F8B\u7684 ClassLoader \u53EF\u4EE5\u901A\u8FC7--classLoaderClass\u6307\u5B9A class name\uFF0C\u4F7F\u7528\u8D77\u6765\u66F4\u52A0\u65B9\u4FBF\uFF1A

getstatic --classLoaderClass sun.misc.Launcher$AppClassLoader demo.MathGame random

  • \u6CE8: \u8FD9\u91CC classLoaderClass \u5728 java 8 \u662F sun.misc.Launcher$AppClassLoader\uFF0C\u800Cjava 11\u7684classloader\u662Fjdk.internal.loader.ClassLoaders$AppClassLoader\uFF0Ckillercoda \u76EE\u524D\u73AF\u5883\u662F java11\u3002

--classLoaderClass \u7684\u503C\u662F ClassLoader \u7684\u7C7B\u540D\uFF0C\u53EA\u6709\u5339\u914D\u5230\u552F\u4E00\u7684 ClassLoader \u5B9E\u4F8B\u65F6\u624D\u80FD\u5DE5\u4F5C\uFF0C\u76EE\u7684\u662F\u65B9\u4FBF\u8F93\u5165\u901A\u7528\u547D\u4EE4\uFF0C\u800C-c <hashcode>\u662F\u52A8\u6001\u53D8\u5316\u7684\u3002

\u5982\u679C\u8BE5\u9759\u6001\u5C5E\u6027\u662F\u4E00\u4E2A\u590D\u6742\u5BF9\u8C61\uFF0C\u8FD8\u53EF\u4EE5\u652F\u6301\u5728\u8BE5\u5C5E\u6027\u4E0A\u901A\u8FC7 ognl \u8868\u793A\u8FDB\u884C\u904D\u5386\uFF0C\u8FC7\u6EE4\uFF0C\u8BBF\u95EE\u5BF9\u8C61\u7684\u5185\u90E8\u5C5E\u6027\u7B49\u64CD\u4F5C\u3002

`,11),L=a("OGNL \u7279\u6B8A\u7528\u6CD5\u8BF7\u53C2\u8003\uFF1A"),x={href:"https://github.com/alibaba/arthas/issues/71",target:"_blank",rel:"noopener noreferrer"},C=a("https://github.com/alibaba/arthas/issues/71"),N=a("OGNL \u8868\u8FBE\u5F0F\u5B98\u65B9\u6307\u5357\uFF1A"),y={href:"https://commons.apache.org/dormant/commons-ognl/language-guide.html",target:"_blank",rel:"noopener noreferrer"},S=a("https://commons.apache.org/dormant/commons-ognl/language-guide.html"),B=o(`

\u4F8B\u5982\uFF0C\u5047\u8BBE n \u662F\u4E00\u4E2A Map\uFF0CMap \u7684 Key \u662F\u4E00\u4E2A Enum\uFF0C\u6211\u4EEC\u60F3\u8FC7\u6EE4\u51FA Map \u4E2D Key \u4E3A\u67D0\u4E2A Enum \u7684\u503C\uFF0C\u53EF\u4EE5\u5199\u5982\u4E0B\u547D\u4EE4

$ getstatic com.alibaba.arthas.Test n 'entrySet().iterator.{? #this.key.name()=="STOP"}'
+

\u5BF9\u4E8E\u53EA\u6709\u552F\u4E00\u5B9E\u4F8B\u7684 ClassLoader \u53EF\u4EE5\u901A\u8FC7--classLoaderClass\u6307\u5B9A class name\uFF0C\u4F7F\u7528\u8D77\u6765\u66F4\u52A0\u65B9\u4FBF\uFF1A

getstatic --classLoaderClass sun.misc.Launcher$AppClassLoader demo.MathGame random

  • \u6CE8: \u8FD9\u91CC classLoaderClass \u5728 java 8 \u662F sun.misc.Launcher$AppClassLoader\uFF0C\u800Cjava 11\u7684classloader\u662Fjdk.internal.loader.ClassLoaders$AppClassLoader\uFF0Ckillercoda \u76EE\u524D\u73AF\u5883\u662F java11\u3002

--classLoaderClass \u7684\u503C\u662F ClassLoader \u7684\u7C7B\u540D\uFF0C\u53EA\u6709\u5339\u914D\u5230\u552F\u4E00\u7684 ClassLoader \u5B9E\u4F8B\u65F6\u624D\u80FD\u5DE5\u4F5C\uFF0C\u76EE\u7684\u662F\u65B9\u4FBF\u8F93\u5165\u901A\u7528\u547D\u4EE4\uFF0C\u800C-c <hashcode>\u662F\u52A8\u6001\u53D8\u5316\u7684\u3002

\u5982\u679C\u8BE5\u9759\u6001\u5C5E\u6027\u662F\u4E00\u4E2A\u590D\u6742\u5BF9\u8C61\uFF0C\u8FD8\u53EF\u4EE5\u652F\u6301\u5728\u8BE5\u5C5E\u6027\u4E0A\u901A\u8FC7 ognl \u8868\u793A\u8FDB\u884C\u904D\u5386\uFF0C\u8FC7\u6EE4\uFF0C\u8BBF\u95EE\u5BF9\u8C61\u7684\u5185\u90E8\u5C5E\u6027\u7B49\u64CD\u4F5C\u3002

`,11),g=a("OGNL \u590D\u6742\u8868\u8FBE\u5F0F\u4F7F\u7528\u6280\u5DE7"),h=l(`

\u4F8B\u5982\uFF0C\u5047\u8BBE n \u662F\u4E00\u4E2A Map\uFF0CMap \u7684 Key \u662F\u4E00\u4E2A Enum\uFF0C\u6211\u4EEC\u60F3\u8FC7\u6EE4\u51FA Map \u4E2D Key \u4E3A\u67D0\u4E2A Enum \u7684\u503C\uFF0C\u53EF\u4EE5\u5199\u5982\u4E0B\u547D\u4EE4

$ getstatic com.alibaba.arthas.Test n 'entrySet().iterator.{? #this.key.name()=="STOP"}'
 field: n
 @ArrayList[
     @Node[STOP=bbb],
@@ -31,4 +31,4 @@ field: m
 @ArrayList[
     @Node[a=aaa],
 ]
-
`,2);function A(E,G){const e=t("ExternalLinkIcon"),l=t("RouterLink");return c(),p("div",null,[u,s("p",null,[s("a",m,[v,b,n(e)])]),k,s("ul",null,[s("li",null,[h,n(l,{to:"/doc/ognl.html"},{default:r(()=>[g]),_:1}),_])]),f,s("ul",null,[s("li",null,[L,s("a",x,[C,n(e)])]),s("li",null,[N,s("a",y,[S,n(e)])])]),B])}const $=i(d,[["render",A],["__file","getstatic.html.vue"]]);export{$ as default}; +
`,2);function f(_,L){const n=p("RouterLink");return i(),c("div",null,[r,u,s("ul",null,[s("li",null,[v,e(n,{to:"/doc/ognl.html"},{default:t(()=>[m]),_:1}),b])]),k,s("ul",null,[s("li",null,[e(n,{to:"/doc/ognl-express.html"},{default:t(()=>[g]),_:1})])]),h])}const C=o(d,[["render",f],["__file","getstatic.html.vue"]]);export{C as default}; diff --git a/assets/getstatic.html.07f2529e.js b/assets/getstatic.html.06e13f21.js similarity index 76% rename from assets/getstatic.html.07f2529e.js rename to assets/getstatic.html.06e13f21.js index f90429fdf..c3a26e059 100644 --- a/assets/getstatic.html.07f2529e.js +++ b/assets/getstatic.html.06e13f21.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-2f908999","path":"/en/doc/getstatic.html","title":"getstatic","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/getstatic.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-2f908999","path":"/en/doc/getstatic.html","title":"getstatic","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/getstatic.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/getstatic.html.a9eaa5e6.js b/assets/getstatic.html.99701f59.js similarity index 72% rename from assets/getstatic.html.a9eaa5e6.js rename to assets/getstatic.html.99701f59.js index 94f3e44fc..6b35f6e5b 100644 --- a/assets/getstatic.html.a9eaa5e6.js +++ b/assets/getstatic.html.99701f59.js @@ -1 +1 @@ -const t=JSON.parse('{"key":"v-78c35af6","path":"/doc/getstatic.html","title":"getstatic","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/getstatic.md","version":"4.3.3"}');export{t as data}; +const t=JSON.parse('{"key":"v-78c35af6","path":"/doc/getstatic.html","title":"getstatic","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/getstatic.md","version":"4.3.5"}');export{t as data}; diff --git a/assets/getstatic.html.36841961.js b/assets/getstatic.html.d3e5edb1.js similarity index 75% rename from assets/getstatic.html.36841961.js rename to assets/getstatic.html.d3e5edb1.js index 8241400ce..af5b06e41 100644 --- a/assets/getstatic.html.36841961.js +++ b/assets/getstatic.html.d3e5edb1.js @@ -1,4 +1,4 @@ -import{_ as o,o as i,c as l,a as s,b as e,e as a,d as t,r as c}from"./app.524ecf5c.js";const p={},r=s("h1",{id:"getstatic",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#getstatic","aria-hidden":"true"},"#"),a(" getstatic")],-1),u={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-getstatic",target:"_blank",rel:"noopener noreferrer"},d=s("code",null,"getstatic",-1),m=a(" online tutorial"),k=t(`

Usage

  • 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.

$ getstatic demo.MathGame random
+import{_ as e,o as t,c as o,a as s,b as i,w as c,d as a,r as l,e as p}from"./app.e2427bec.js";const r={},u=a(`

getstatic

Usage

  • 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.

$ getstatic demo.MathGame random
 field: random
 @Random[
     serialVersionUID=@Long[3905348978240129619],
@@ -18,7 +18,7 @@ field: random
     seedOffset=@Long[24],
 ]
 
  • 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 <ClassName>.

if you use-c, you have to manually type hashcode by -c <hashcode>.

$ getstatic -c 3d4eac69 demo.MathGame random
-

For classloader with only one instance, it can be specified by --classLoaderClass using class name, which is more convenient to use.

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 killercoda using java 11.

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 <hashcode> is dynamic.

`,12),v=a("Tip: if the static field is a complex class, you can even use "),h={href:"https://commons.apache.org/dormant/commons-ognl/language-guide.html",target:"_blank",rel:"noopener noreferrer"},b=s("code",null,"OGNL",-1),g=a(" to traverse, filter and access the inner properties of this class."),f={href:"https://commons.apache.org/dormant/commons-ognl/language-guide.html",target:"_blank",rel:"noopener noreferrer"},_=a("OGNL official guide"),y={href:"https://github.com/alibaba/arthas/issues/71",target:"_blank",rel:"noopener noreferrer"},L=a("Special usages"),x=t(`

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:

$ getstatic com.alibaba.arthas.Test n 'entrySet().iterator.{? #this.key.name()=="STOP"}'
+

For classloader with only one instance, it can be specified by --classLoaderClass using class name, which is more convenient to use.

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 killercoda using java 11.

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 <hashcode> is dynamic.

Tip: if the static field is a complex class, you can even use OGNL to traverse, filter and access the inner properties of this class.

`,14),d=p("Tips for complex OGNL expressions"),v=a(`

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:

$ getstatic com.alibaba.arthas.Test n 'entrySet().iterator.{? #this.key.name()=="STOP"}'
 field: n
 @ArrayList[
     @Node[STOP=bbb],
@@ -31,4 +31,4 @@ field: m
 @ArrayList[
     @Node[a=aaa],
 ]
-
`,2);function N(S,w){const n=c("ExternalLinkIcon");return i(),l("div",null,[r,s("p",null,[s("a",u,[d,m,e(n)])]),k,s("p",null,[v,s("a",h,[b,e(n)]),g]),s("ul",null,[s("li",null,[s("a",f,[_,e(n)])]),s("li",null,[s("a",y,[L,e(n)])])]),x])}const B=o(p,[["render",N],["__file","getstatic.html.vue"]]);export{B as default}; +
`,2);function m(k,b){const n=l("RouterLink");return t(),o("div",null,[u,s("ul",null,[s("li",null,[i(n,{to:"/en/doc/ognl-express.html"},{default:c(()=>[d]),_:1})])]),v])}const g=e(r,[["render",m],["__file","getstatic.html.vue"]]);export{g as default}; diff --git a/assets/grep.html.577df941.js b/assets/grep.html.6ba4e7cd.js similarity index 71% rename from assets/grep.html.577df941.js rename to assets/grep.html.6ba4e7cd.js index 18be3ab6e..4ae212610 100644 --- a/assets/grep.html.577df941.js +++ b/assets/grep.html.6ba4e7cd.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-63f4cd5a","path":"/doc/grep.html","title":"grep","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/grep.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-63f4cd5a","path":"/doc/grep.html","title":"grep","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/grep.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/grep.html.7b4c2cd4.js b/assets/grep.html.831320e0.js similarity index 68% rename from assets/grep.html.7b4c2cd4.js rename to assets/grep.html.831320e0.js index 75e87758e..af883aa22 100644 --- a/assets/grep.html.7b4c2cd4.js +++ b/assets/grep.html.831320e0.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-8b2b7482","path":"/en/doc/grep.html","title":"grep","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/grep.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-8b2b7482","path":"/en/doc/grep.html","title":"grep","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/grep.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/grep.html.57324644.js b/assets/grep.html.a6f74b81.js similarity index 75% rename from assets/grep.html.57324644.js rename to assets/grep.html.a6f74b81.js index 35e631483..0226b6191 100644 --- a/assets/grep.html.57324644.js +++ b/assets/grep.html.a6f74b81.js @@ -1,4 +1,4 @@ -import{_ as t,o as s,c as l,a as e,b as a,e as n,d as r,r as d}from"./app.524ecf5c.js";const c={},o=e("h1",{id:"grep",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#grep","aria-hidden":"true"},"#"),n(" grep")],-1),v={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-grep",target:"_blank",rel:"noopener noreferrer"},u=e("code",null,"grep",-1),m=n(" online tutorial"),p=r(`

TIP

Similar to the traditional grep command.

Usage

 USAGE:
+import{_ as e,o as n,c as i,d as s}from"./app.e2427bec.js";const l={},t=s(`

grep

\u63D0\u793A

\u7C7B\u4F3C\u4F20\u7EDF\u7684grep\u547D\u4EE4\u3002

\u4F7F\u7528\u53C2\u8003

 USAGE:
    grep [-A <value>] [-B <value>] [-C <value>] [-h] [-i] [-v] [-n] [-c] [-m <value>] [-e] [--trim-end] pattern
 
  SUMMARY:
@@ -29,4 +29,4 @@ import{_ as t,o as s,c as l,a as e,b as a,e as n,d as r,r as d}from"./app.524ecf
  -e, --regex                                                                    Enable regular expression to match
      --trim-end                                                                 Remove whitespaces at the end of the line
  <pattern>                                                                      Pattern
-
`,3);function g(h,b){const i=d("ExternalLinkIcon");return s(),l("div",null,[o,e("p",null,[e("a",v,[u,m,a(i)])]),p])}const f=t(c,[["render",g],["__file","grep.html.vue"]]);export{f as default}; +
`,4),a=[t];function r(d,c){return n(),i("div",null,a)}const u=e(l,[["render",r],["__file","grep.html.vue"]]);export{u as default}; diff --git a/assets/grep.html.c6a57b9b.js b/assets/grep.html.c007dc7c.js similarity index 73% rename from assets/grep.html.c6a57b9b.js rename to assets/grep.html.c007dc7c.js index 0ed8a7ea0..1b792af62 100644 --- a/assets/grep.html.c6a57b9b.js +++ b/assets/grep.html.c007dc7c.js @@ -1,4 +1,4 @@ -import{_ as s,o as t,c as l,a as e,b as a,e as n,d as r,r as d}from"./app.524ecf5c.js";const c={},v=e("h1",{id:"grep",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#grep","aria-hidden":"true"},"#"),n(" grep")],-1),o={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-grep",target:"_blank",rel:"noopener noreferrer"},u=e("code",null,"grep",-1),m=n("\u5728\u7EBF\u6559\u7A0B"),p=r(`

\u63D0\u793A

\u7C7B\u4F3C\u4F20\u7EDF\u7684grep\u547D\u4EE4\u3002

\u4F7F\u7528\u53C2\u8003

 USAGE:
+import{_ as e,o as n,c as i,d as s}from"./app.e2427bec.js";const l={},t=s(`

grep

TIP

Similar to the traditional grep command.

Usage

 USAGE:
    grep [-A <value>] [-B <value>] [-C <value>] [-h] [-i] [-v] [-n] [-c] [-m <value>] [-e] [--trim-end] pattern
 
  SUMMARY:
@@ -29,4 +29,4 @@ import{_ as s,o as t,c as l,a as e,b as a,e as n,d as r,r as d}from"./app.524ecf
  -e, --regex                                                                    Enable regular expression to match
      --trim-end                                                                 Remove whitespaces at the end of the line
  <pattern>                                                                      Pattern
-
`,3);function g(h,b){const i=d("ExternalLinkIcon");return t(),l("div",null,[v,e("p",null,[e("a",o,[u,m,a(i)])]),p])}const f=s(c,[["render",g],["__file","grep.html.vue"]]);export{f as default}; +
`,4),a=[t];function r(d,c){return n(),i("div",null,a)}const u=e(l,[["render",r],["__file","grep.html.vue"]]);export{u as default}; diff --git a/assets/groovy.html.4ef1e7fc.js b/assets/groovy.html.47cc1adc.js similarity index 99% rename from assets/groovy.html.4ef1e7fc.js rename to assets/groovy.html.47cc1adc.js index e0b622060..e9cdb495f 100644 --- a/assets/groovy.html.4ef1e7fc.js +++ b/assets/groovy.html.47cc1adc.js @@ -1,4 +1,4 @@ -import{_ as e,o as p,c as o,a as s,b as i,w as c,d as a,e as n,r as l}from"./app.524ecf5c.js";const u={},r=a(`

groovy

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

  1. Prohibit from alternating the original logic. Like watch command, The major purpose of scripting is monitoring and observing.
  2. Only allow to monitor at the stages of before/success/exception/finish on one method.

Parameters

ParameterExplanation
class-patternclass name pattern
method-patternmethod name pattern
script-filepaththe 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

/**
+import{_ as e,o as p,c as o,a as s,b as i,w as c,d as a,e as n,r as l}from"./app.e2427bec.js";const u={},r=a(`

groovy

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

  1. Prohibit from alternating the original logic. Like watch command, The major purpose of scripting is monitoring and observing.
  2. Only allow to monitor at the stages of before/success/exception/finish on one method.

Parameters

ParameterExplanation
class-patternclass name pattern
method-patternmethod name pattern
script-filepaththe 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

/**
  * Listeners for script to enhance the class
  */
 interface ScriptListener {
diff --git a/assets/groovy.html.1c2baf9b.js b/assets/groovy.html.6c982925.js
similarity index 87%
rename from assets/groovy.html.1c2baf9b.js
rename to assets/groovy.html.6c982925.js
index 4b1fcc476..a5b0c2275 100644
--- a/assets/groovy.html.1c2baf9b.js
+++ b/assets/groovy.html.6c982925.js
@@ -1 +1 @@
-const e=JSON.parse('{"key":"v-809381ca","path":"/doc/groovy.html","title":"groovy","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"\u9650\u5236\u5185\u5BB9","slug":"\u9650\u5236\u5185\u5BB9","link":"#\u9650\u5236\u5185\u5BB9","children":[]},{"level":3,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":3,"title":"\u4E94\u4E2A\u5173\u952E\u51FD\u6570\u58F0\u660E","slug":"\u4E94\u4E2A\u5173\u952E\u51FD\u6570\u58F0\u660E","link":"#\u4E94\u4E2A\u5173\u952E\u51FD\u6570\u58F0\u660E","children":[]},{"level":3,"title":"\u53C2\u6570 Advice \u8BF4\u660E","slug":"\u53C2\u6570-advice-\u8BF4\u660E","link":"#\u53C2\u6570-advice-\u8BF4\u660E","children":[]},{"level":3,"title":"\u53C2\u6570 Output \u8BF4\u660E","slug":"\u53C2\u6570-output-\u8BF4\u660E","link":"#\u53C2\u6570-output-\u8BF4\u660E","children":[]},{"level":3,"title":"\u4E00\u4E2A\u8F93\u51FA\u65E5\u5FD7\u7684 groovy \u811A\u672C\u793A\u4F8B","slug":"\u4E00\u4E2A\u8F93\u51FA\u65E5\u5FD7\u7684-groovy-\u811A\u672C\u793A\u4F8B","link":"#\u4E00\u4E2A\u8F93\u51FA\u65E5\u5FD7\u7684-groovy-\u811A\u672C\u793A\u4F8B","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/groovy.md","version":"4.3.3"}');export{e as data};
+const e=JSON.parse('{"key":"v-809381ca","path":"/doc/groovy.html","title":"groovy","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"\u9650\u5236\u5185\u5BB9","slug":"\u9650\u5236\u5185\u5BB9","link":"#\u9650\u5236\u5185\u5BB9","children":[]},{"level":3,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":3,"title":"\u4E94\u4E2A\u5173\u952E\u51FD\u6570\u58F0\u660E","slug":"\u4E94\u4E2A\u5173\u952E\u51FD\u6570\u58F0\u660E","link":"#\u4E94\u4E2A\u5173\u952E\u51FD\u6570\u58F0\u660E","children":[]},{"level":3,"title":"\u53C2\u6570 Advice \u8BF4\u660E","slug":"\u53C2\u6570-advice-\u8BF4\u660E","link":"#\u53C2\u6570-advice-\u8BF4\u660E","children":[]},{"level":3,"title":"\u53C2\u6570 Output \u8BF4\u660E","slug":"\u53C2\u6570-output-\u8BF4\u660E","link":"#\u53C2\u6570-output-\u8BF4\u660E","children":[]},{"level":3,"title":"\u4E00\u4E2A\u8F93\u51FA\u65E5\u5FD7\u7684 groovy \u811A\u672C\u793A\u4F8B","slug":"\u4E00\u4E2A\u8F93\u51FA\u65E5\u5FD7\u7684-groovy-\u811A\u672C\u793A\u4F8B","link":"#\u4E00\u4E2A\u8F93\u51FA\u65E5\u5FD7\u7684-groovy-\u811A\u672C\u793A\u4F8B","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/groovy.md","version":"4.3.5"}');export{e as data};
diff --git a/assets/groovy.html.fc87055f.js b/assets/groovy.html.74effc34.js
similarity index 99%
rename from assets/groovy.html.fc87055f.js
rename to assets/groovy.html.74effc34.js
index 0ba686d17..cedc8c2ab 100644
--- a/assets/groovy.html.fc87055f.js
+++ b/assets/groovy.html.74effc34.js
@@ -1,4 +1,4 @@
-import{_ as e,o as p,c,a as s,b as i,w as o,d as a,e as n,r as l}from"./app.524ecf5c.js";const u={},d=a(`

groovy

\u63D0\u793A

Arthas \u652F\u6301 groovy \u811A\u672C\u589E\u5F3A\uFF0C\u5141\u8BB8\u50CF BTrace \u4E00\u6837\u7F16\u5199\u811A\u672C\u6765\u89E3\u51B3\u95EE\u9898\uFF0C\u53EF\u4EE5\u5728 groovy \u811A\u672C\u4E2D\u8FDB\u884C if/for/switch/while \u7B49\u63A7\u5236\u8BED\u53E5\uFF0C\u4E0D\u53D7\u9650\u5236\uFF0C\u4F46\u76F8\u6BD4 BTrace \u800C\u8A00\u62E5\u6709\u66F4\u591A\u7684\u9650\u5236\u8303\u56F4\u3002

\u9650\u5236\u5185\u5BB9

  1. \u7981\u6B62\u6539\u53D8\u539F\u6709\u903B\u8F91\uFF0C\u4E0E watch \u7B49\u547D\u4EE4\u4E00\u6837\uFF0C\u91CD\u70B9\u4FDD\u8BC1\u7684\u662F\u76D1\u542C\u548C\u89C2\u5BDF\u3002
  2. \u53EA\u5141\u8BB8\u5728\u65B9\u6CD5\u7684 before/success/exception/finish \u56DB\u4E2A\u73AF\u8282\u8FDB\u884C\u76D1\u542C\u3002

\u53C2\u6570\u8BF4\u660E

\u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
class-pattern\u7C7B\u540D\u8868\u8FBE\u5F0F\u5339\u914D
method-pattern\u65B9\u6CD5\u540D\u8868\u8FBE\u5F0F\u5339\u914D
script-filepathgroovy \u811A\u672C\u7684\u7EDD\u5BF9\u8DEF\u5F84
[S]\u5339\u914D\u6240\u6709\u7684\u5B50\u7C7B
[E]\u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u4E3A\u901A\u914D\u7B26\u5339\u914D

\u9700\u8981\u8BF4\u660E\u7684\u662F\uFF0C\u7B2C\u4E09\u4E2A\u8F93\u5165\u53C2\u6570\u662F\u811A\u672C\u7684\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u6BD4\u5982 /tmp/test.groovy\uFF0C\u4E0D\u5EFA\u8BAE\u8F93\u5165\u76F8\u5BF9\u8DEF\u5F84\uFF0C\u6BD4\u5982 ./test.groovy

\u4E94\u4E2A\u5173\u952E\u51FD\u6570\u58F0\u660E

/**
+import{_ as e,o as p,c,a as s,b as i,w as o,d as a,e as n,r as l}from"./app.e2427bec.js";const u={},d=a(`

groovy

\u63D0\u793A

Arthas \u652F\u6301 groovy \u811A\u672C\u589E\u5F3A\uFF0C\u5141\u8BB8\u50CF BTrace \u4E00\u6837\u7F16\u5199\u811A\u672C\u6765\u89E3\u51B3\u95EE\u9898\uFF0C\u53EF\u4EE5\u5728 groovy \u811A\u672C\u4E2D\u8FDB\u884C if/for/switch/while \u7B49\u63A7\u5236\u8BED\u53E5\uFF0C\u4E0D\u53D7\u9650\u5236\uFF0C\u4F46\u76F8\u6BD4 BTrace \u800C\u8A00\u62E5\u6709\u66F4\u591A\u7684\u9650\u5236\u8303\u56F4\u3002

\u9650\u5236\u5185\u5BB9

  1. \u7981\u6B62\u6539\u53D8\u539F\u6709\u903B\u8F91\uFF0C\u4E0E watch \u7B49\u547D\u4EE4\u4E00\u6837\uFF0C\u91CD\u70B9\u4FDD\u8BC1\u7684\u662F\u76D1\u542C\u548C\u89C2\u5BDF\u3002
  2. \u53EA\u5141\u8BB8\u5728\u65B9\u6CD5\u7684 before/success/exception/finish \u56DB\u4E2A\u73AF\u8282\u8FDB\u884C\u76D1\u542C\u3002

\u53C2\u6570\u8BF4\u660E

\u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
class-pattern\u7C7B\u540D\u8868\u8FBE\u5F0F\u5339\u914D
method-pattern\u65B9\u6CD5\u540D\u8868\u8FBE\u5F0F\u5339\u914D
script-filepathgroovy \u811A\u672C\u7684\u7EDD\u5BF9\u8DEF\u5F84
[S]\u5339\u914D\u6240\u6709\u7684\u5B50\u7C7B
[E]\u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u4E3A\u901A\u914D\u7B26\u5339\u914D

\u9700\u8981\u8BF4\u660E\u7684\u662F\uFF0C\u7B2C\u4E09\u4E2A\u8F93\u5165\u53C2\u6570\u662F\u811A\u672C\u7684\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u6BD4\u5982 /tmp/test.groovy\uFF0C\u4E0D\u5EFA\u8BAE\u8F93\u5165\u76F8\u5BF9\u8DEF\u5F84\uFF0C\u6BD4\u5982 ./test.groovy

\u4E94\u4E2A\u5173\u952E\u51FD\u6570\u58F0\u660E

/**
  * \u589E\u5F3A\u811A\u672C\u76D1\u542C\u5668
  */
 interface ScriptListener {
diff --git a/assets/groovy.html.bf8a6589.js b/assets/groovy.html.d70f2cba.js
similarity index 89%
rename from assets/groovy.html.bf8a6589.js
rename to assets/groovy.html.d70f2cba.js
index baa014989..567c688de 100644
--- a/assets/groovy.html.bf8a6589.js
+++ b/assets/groovy.html.d70f2cba.js
@@ -1 +1 @@
-const e=JSON.parse('{"key":"v-25a18087","path":"/en/doc/groovy.html","title":"groovy","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"Limitations","slug":"limitations","link":"#limitations","children":[]},{"level":3,"title":"Parameters","slug":"parameters","link":"#parameters","children":[]},{"level":3,"title":"Explanation on the important callbacks","slug":"explanation-on-the-important-callbacks","link":"#explanation-on-the-important-callbacks","children":[]},{"level":3,"title":"Advice parameter","slug":"advice-parameter","link":"#advice-parameter","children":[]},{"level":3,"title":"Output parameter","slug":"output-parameter","link":"#output-parameter","children":[]},{"level":3,"title":"A groovy sample script to output logs","slug":"a-groovy-sample-script-to-output-logs","link":"#a-groovy-sample-script-to-output-logs","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/groovy.md","version":"4.3.3"}');export{e as data};
+const e=JSON.parse('{"key":"v-25a18087","path":"/en/doc/groovy.html","title":"groovy","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"Limitations","slug":"limitations","link":"#limitations","children":[]},{"level":3,"title":"Parameters","slug":"parameters","link":"#parameters","children":[]},{"level":3,"title":"Explanation on the important callbacks","slug":"explanation-on-the-important-callbacks","link":"#explanation-on-the-important-callbacks","children":[]},{"level":3,"title":"Advice parameter","slug":"advice-parameter","link":"#advice-parameter","children":[]},{"level":3,"title":"Output parameter","slug":"output-parameter","link":"#output-parameter","children":[]},{"level":3,"title":"A groovy sample script to output logs","slug":"a-groovy-sample-script-to-output-logs","link":"#a-groovy-sample-script-to-output-logs","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/groovy.md","version":"4.3.5"}');export{e as data};
diff --git a/assets/heapdump.html.0ba3823c.js b/assets/heapdump.html.291f6f55.js
similarity index 60%
rename from assets/heapdump.html.0ba3823c.js
rename to assets/heapdump.html.291f6f55.js
index 9c3cb83c6..f28540ef9 100644
--- a/assets/heapdump.html.0ba3823c.js
+++ b/assets/heapdump.html.291f6f55.js
@@ -1,4 +1,4 @@
-import{_ as s,o as t,c as i,a,b as d,e,d as p,r as o}from"./app.524ecf5c.js";const c={},r=a("h1",{id:"heapdump",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#heapdump","aria-hidden":"true"},"#"),e(" heapdump")],-1),l={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-heapdump",target:"_blank",rel:"noopener noreferrer"},u=a("code",null,"heapdump",-1),h=e(" online tutorial"),m=p(`

TIP

dump java heap in hprof binary format, like jmap.

Usage

Dump to file

[arthas@58205]$ heapdump arthas-output/dump.hprof
+import{_ as a,o as e,c as n,d as s}from"./app.e2427bec.js";const t={},i=s(`

heapdump

TIP

dump java heap in hprof binary format, like jmap.

Usage

Dump to file

[arthas@58205]$ heapdump arthas-output/dump.hprof
 Dumping heap to arthas-output/dump.hprof ...
 Heap dump file created
 

TIP

The generated file is located in the arthas-output directory and can be downloaded through the browser at http://localhost:8563/arthas-output/

Dump only live objects

[arthas@58205]$ heapdump --live /tmp/dump.hprof
@@ -7,4 +7,4 @@ Heap dump file created
 

Dump to tmp file

[arthas@58205]$ heapdump
 Dumping heap to /var/folders/my/wy7c9w9j5732xbkcyt1mb4g40000gp/T/heapdump2019-09-03-16-385121018449645518991.hprof...
 Heap dump file created
-
`,9);function v(b,f){const n=o("ExternalLinkIcon");return t(),i("div",null,[r,a("p",null,[a("a",l,[u,h,d(n)])]),m])}const _=s(c,[["render",v],["__file","heapdump.html.vue"]]);export{_ as default}; +
`,10),p=[i];function d(c,o){return e(),n("div",null,p)}const r=a(t,[["render",d],["__file","heapdump.html.vue"]]);export{r as default}; diff --git a/assets/heapdump.html.22c951fc.js b/assets/heapdump.html.2cfa3407.js similarity index 88% rename from assets/heapdump.html.22c951fc.js rename to assets/heapdump.html.2cfa3407.js index 0a5a895cb..2b3b093e8 100644 --- a/assets/heapdump.html.22c951fc.js +++ b/assets/heapdump.html.2cfa3407.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-07868089","path":"/doc/heapdump.html","title":"heapdump","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"dump \u5230\u6307\u5B9A\u6587\u4EF6","slug":"dump-\u5230\u6307\u5B9A\u6587\u4EF6","link":"#dump-\u5230\u6307\u5B9A\u6587\u4EF6","children":[]},{"level":3,"title":"\u53EA dump live \u5BF9\u8C61","slug":"\u53EA-dump-live-\u5BF9\u8C61","link":"#\u53EA-dump-live-\u5BF9\u8C61","children":[]}]},{"level":2,"title":"dump \u5230\u4E34\u65F6\u6587\u4EF6","slug":"dump-\u5230\u4E34\u65F6\u6587\u4EF6","link":"#dump-\u5230\u4E34\u65F6\u6587\u4EF6","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/heapdump.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-07868089","path":"/doc/heapdump.html","title":"heapdump","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"dump \u5230\u6307\u5B9A\u6587\u4EF6","slug":"dump-\u5230\u6307\u5B9A\u6587\u4EF6","link":"#dump-\u5230\u6307\u5B9A\u6587\u4EF6","children":[]},{"level":3,"title":"\u53EA dump live \u5BF9\u8C61","slug":"\u53EA-dump-live-\u5BF9\u8C61","link":"#\u53EA-dump-live-\u5BF9\u8C61","children":[]}]},{"level":2,"title":"dump \u5230\u4E34\u65F6\u6587\u4EF6","slug":"dump-\u5230\u4E34\u65F6\u6587\u4EF6","link":"#dump-\u5230\u4E34\u65F6\u6587\u4EF6","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/heapdump.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/heapdump.html.7a6011ee.js b/assets/heapdump.html.3c58b047.js similarity index 59% rename from assets/heapdump.html.7a6011ee.js rename to assets/heapdump.html.3c58b047.js index b1e1b32a5..60f14019c 100644 --- a/assets/heapdump.html.7a6011ee.js +++ b/assets/heapdump.html.3c58b047.js @@ -1,4 +1,4 @@ -import{_ as s,o as t,c as d,a,b as p,e,d as i,r as c}from"./app.524ecf5c.js";const r={},o=a("h1",{id:"heapdump",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#heapdump","aria-hidden":"true"},"#"),e(" heapdump")],-1),u={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-heapdump",target:"_blank",rel:"noopener noreferrer"},l=a("code",null,"heapdump",-1),h=e("\u5728\u7EBF\u6559\u7A0B"),m=i(`

\u63D0\u793A

dump java heap, \u7C7B\u4F3C jmap \u547D\u4EE4\u7684 heap dump \u529F\u80FD\u3002

\u4F7F\u7528\u53C2\u8003

dump \u5230\u6307\u5B9A\u6587\u4EF6

[arthas@58205]$ heapdump arthas-output/dump.hprof
+import{_ as a,o as e,c as n,d as s}from"./app.e2427bec.js";const p={},d=s(`

heapdump

\u63D0\u793A

dump java heap, \u7C7B\u4F3C jmap \u547D\u4EE4\u7684 heap dump \u529F\u80FD\u3002

\u4F7F\u7528\u53C2\u8003

dump \u5230\u6307\u5B9A\u6587\u4EF6

[arthas@58205]$ heapdump arthas-output/dump.hprof
 Dumping heap to arthas-output/dump.hprof ...
 Heap dump file created
 

\u63D0\u793A

\u751F\u6210\u6587\u4EF6\u5728arthas-output\u76EE\u5F55\uFF0C\u53EF\u4EE5\u901A\u8FC7\u6D4F\u89C8\u5668\u4E0B\u8F7D\uFF1A http://localhost:8563/arthas-output/

\u53EA dump live \u5BF9\u8C61

[arthas@58205]$ heapdump --live /tmp/dump.hprof
@@ -7,4 +7,4 @@ Heap dump file created
 

dump \u5230\u4E34\u65F6\u6587\u4EF6

[arthas@58205]$ heapdump
 Dumping heap to /var/folders/my/wy7c9w9j5732xbkcyt1mb4g40000gp/T/heapdump2019-09-03-16-385121018449645518991.hprof...
 Heap dump file created
-
`,9);function v(b,f){const n=c("ExternalLinkIcon");return t(),d("div",null,[o,a("p",null,[a("a",u,[l,h,p(n)])]),m])}const g=s(r,[["render",v],["__file","heapdump.html.vue"]]);export{g as default}; +
`,10),i=[d];function t(u,c){return e(),n("div",null,i)}const l=a(p,[["render",t],["__file","heapdump.html.vue"]]);export{l as default}; diff --git a/assets/heapdump.html.986bb645.js b/assets/heapdump.html.aa31b283.js similarity index 86% rename from assets/heapdump.html.986bb645.js rename to assets/heapdump.html.aa31b283.js index 92e9caa7c..c0f01d109 100644 --- a/assets/heapdump.html.986bb645.js +++ b/assets/heapdump.html.aa31b283.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-c0b1d216","path":"/en/doc/heapdump.html","title":"heapdump","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"Dump to file","slug":"dump-to-file","link":"#dump-to-file","children":[]},{"level":3,"title":"Dump only live objects","slug":"dump-only-live-objects","link":"#dump-only-live-objects","children":[]},{"level":3,"title":"Dump to tmp file","slug":"dump-to-tmp-file","link":"#dump-to-tmp-file","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/heapdump.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-c0b1d216","path":"/en/doc/heapdump.html","title":"heapdump","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"Dump to file","slug":"dump-to-file","link":"#dump-to-file","children":[]},{"level":3,"title":"Dump only live objects","slug":"dump-only-live-objects","link":"#dump-only-live-objects","children":[]},{"level":3,"title":"Dump to tmp file","slug":"dump-to-tmp-file","link":"#dump-to-tmp-file","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/heapdump.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/help.html.fcbdb8fe.js b/assets/help.html.026cd72d.js similarity index 78% rename from assets/help.html.fcbdb8fe.js rename to assets/help.html.026cd72d.js index 56a575350..7ada90e0e 100644 --- a/assets/help.html.fcbdb8fe.js +++ b/assets/help.html.026cd72d.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-e3b34070","path":"/doc/help.html","title":"help","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/help.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-e3b34070","path":"/doc/help.html","title":"help","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/help.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/help.html.1c79c4bb.js b/assets/help.html.0f234388.js similarity index 99% rename from assets/help.html.1c79c4bb.js rename to assets/help.html.0f234388.js index 87762e721..631394bcb 100644 --- a/assets/help.html.1c79c4bb.js +++ b/assets/help.html.0f234388.js @@ -1,4 +1,4 @@ -import{_ as e,o as i,c as n,d as s}from"./app.524ecf5c.js";const a={},l=s(`

help

\u67E5\u770B\u547D\u4EE4\u5E2E\u52A9\u4FE1\u606F\uFF0C\u53EF\u4EE5\u67E5\u770B\u5F53\u524D arthas \u7248\u672C\u652F\u6301\u7684\u6307\u4EE4\uFF0C\u6216\u8005\u67E5\u770B\u5177\u4F53\u6307\u4EE4\u7684\u4F7F\u7528\u8BF4\u660E\u3002

\u63D0\u793A

[help \u6307\u4EE4]\u7684\u7B49\u540C\u4E8E[\u6307\u4EE4 -help]\uFF0C\u90FD\u662F\u67E5\u770B\u5177\u4F53\u6307\u4EE4\u7684\u4F7F\u7528\u8BF4\u660E\u3002

\u53C2\u6570\u8BF4\u660E

\u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
\u4E0D\u63A5\u53C2\u6570\u67E5\u8BE2\u5F53\u524D arthas \u7248\u672C\u652F\u6301\u7684\u6307\u4EE4\u4EE5\u53CA\u6307\u4EE4\u63CF\u8FF0
[name:]\u67E5\u8BE2\u5177\u4F53\u6307\u4EE4\u7684\u4F7F\u7528\u8BF4\u660E

\u4F7F\u7528\u53C2\u8003

$ help
+import{_ as e,o as i,c as n,d as s}from"./app.e2427bec.js";const a={},l=s(`

help

\u67E5\u770B\u547D\u4EE4\u5E2E\u52A9\u4FE1\u606F\uFF0C\u53EF\u4EE5\u67E5\u770B\u5F53\u524D arthas \u7248\u672C\u652F\u6301\u7684\u6307\u4EE4\uFF0C\u6216\u8005\u67E5\u770B\u5177\u4F53\u6307\u4EE4\u7684\u4F7F\u7528\u8BF4\u660E\u3002

\u63D0\u793A

[help \u6307\u4EE4]\u7684\u7B49\u540C\u4E8E[\u6307\u4EE4 -help]\uFF0C\u90FD\u662F\u67E5\u770B\u5177\u4F53\u6307\u4EE4\u7684\u4F7F\u7528\u8BF4\u660E\u3002

\u53C2\u6570\u8BF4\u660E

\u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
\u4E0D\u63A5\u53C2\u6570\u67E5\u8BE2\u5F53\u524D arthas \u7248\u672C\u652F\u6301\u7684\u6307\u4EE4\u4EE5\u53CA\u6307\u4EE4\u63CF\u8FF0
[name:]\u67E5\u8BE2\u5177\u4F53\u6307\u4EE4\u7684\u4F7F\u7528\u8BF4\u660E

\u4F7F\u7528\u53C2\u8003

$ help
  NAME         DESCRIPTION
  help         Display Arthas Help
  auth         Authenticates the current session
diff --git a/assets/help.html.2db31f67.js b/assets/help.html.66e76dc7.js
similarity index 65%
rename from assets/help.html.2db31f67.js
rename to assets/help.html.66e76dc7.js
index 9cb270f2a..5c58ca74c 100644
--- a/assets/help.html.2db31f67.js
+++ b/assets/help.html.66e76dc7.js
@@ -1 +1 @@
-const e=JSON.parse('{"key":"v-7a8b0c34","path":"/en/doc/help.html","title":"help","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Options","slug":"options","link":"#options","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/help.md","version":"4.3.3"}');export{e as data};
+const e=JSON.parse('{"key":"v-7a8b0c34","path":"/en/doc/help.html","title":"help","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Options","slug":"options","link":"#options","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/help.md","version":"4.3.5"}');export{e as data};
diff --git a/assets/help.html.c94858ab.js b/assets/help.html.9a08c3c3.js
similarity index 99%
rename from assets/help.html.c94858ab.js
rename to assets/help.html.9a08c3c3.js
index 1125c7c1b..d4715db82 100644
--- a/assets/help.html.c94858ab.js
+++ b/assets/help.html.9a08c3c3.js
@@ -1,4 +1,4 @@
-import{_ as n,o as s,c as e,d as a}from"./app.524ecf5c.js";const i={},t=a(`

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.

TIP

[help command] equals [command -help],both is to show the detail usage of one command.

Options

NameSpecification
show all the commands that current Arthas server supports
[name:]show the detail usage of one command

Usage

$ help
+import{_ as n,o as s,c as e,d as a}from"./app.e2427bec.js";const i={},t=a(`

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.

TIP

[help command] equals [command -help],both is to show the detail usage of one command.

Options

NameSpecification
show all the commands that current Arthas server supports
[name:]show the detail usage of one command

Usage

$ help
  NAME         DESCRIPTION
  help         Display Arthas Help
  auth         Authenticates the current session
diff --git a/assets/history.html.5487cd70.js b/assets/history.html.0a1c3393.js
similarity index 97%
rename from assets/history.html.5487cd70.js
rename to assets/history.html.0a1c3393.js
index 05930a0aa..8f6c93b7f 100644
--- a/assets/history.html.5487cd70.js
+++ b/assets/history.html.0a1c3393.js
@@ -1,4 +1,4 @@
-import{_ as s,o as e,c as n,d as a}from"./app.524ecf5c.js";const t={},i=a(`

history

view command history.

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

NameSpecification
[c:]clear all the history commands
[n:]view the nearest 5 commands

Usage

#view the nearest 3 commands
+import{_ as s,o as e,c as n,d as a}from"./app.e2427bec.js";const t={},i=a(`

history

view command history.

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

NameSpecification
[c:]clear all the history commands
[n:]view the nearest 5 commands

Usage

#view the nearest 3 commands
 $ history 3
   269  thread
   270  cls
diff --git a/assets/history.html.0118eb18.js b/assets/history.html.62683097.js
similarity index 77%
rename from assets/history.html.0118eb18.js
rename to assets/history.html.62683097.js
index 45860f66c..4023b6c5e 100644
--- a/assets/history.html.0118eb18.js
+++ b/assets/history.html.62683097.js
@@ -1 +1 @@
-const e=JSON.parse('{"key":"v-4402cd49","path":"/en/doc/history.html","title":"history","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Options","slug":"options","link":"#options","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/history.md","version":"4.3.3"}');export{e as data};
+const e=JSON.parse('{"key":"v-4402cd49","path":"/en/doc/history.html","title":"history","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Options","slug":"options","link":"#options","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/history.md","version":"4.3.5"}');export{e as data};
diff --git a/assets/history.html.aed5546b.js b/assets/history.html.9f5e30aa.js
similarity index 78%
rename from assets/history.html.aed5546b.js
rename to assets/history.html.9f5e30aa.js
index fe15f2b9b..64d84e732 100644
--- a/assets/history.html.aed5546b.js
+++ b/assets/history.html.9f5e30aa.js
@@ -1 +1 @@
-const e=JSON.parse('{"key":"v-26f43d96","path":"/doc/history.html","title":"history","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/history.md","version":"4.3.3"}');export{e as data};
+const e=JSON.parse('{"key":"v-26f43d96","path":"/doc/history.html","title":"history","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/history.md","version":"4.3.5"}');export{e as data};
diff --git a/assets/history.html.5ac8e7b1.js b/assets/history.html.a9fdd95c.js
similarity index 97%
rename from assets/history.html.5ac8e7b1.js
rename to assets/history.html.a9fdd95c.js
index d06a24a12..5fdadfcdc 100644
--- a/assets/history.html.5ac8e7b1.js
+++ b/assets/history.html.a9fdd95c.js
@@ -1,4 +1,4 @@
-import{_ as e,o as t,c as i,d as s}from"./app.524ecf5c.js";const a={},n=s(`

history

\u6253\u5370\u547D\u4EE4\u5386\u53F2\u3002

\u63D0\u793A

\u5386\u53F2\u6307\u4EE4\u4F1A\u901A\u8FC7\u4E00\u4E2A\u540D\u53EB history \u7684\u6587\u4EF6\u6301\u4E45\u5316\uFF0C\u6240\u4EE5 history \u6307\u4EE4\u53EF\u4EE5\u67E5\u770B\u5F53\u524D arthas \u670D\u52A1\u5668\u7684\u6240\u6709\u5386\u53F2\u547D\u4EE4\uFF0C\u800C\u4E0D\u4EC5\u53EA\u662F\u5F53\u524D\u6B21\u4F1A\u8BDD\u4F7F\u7528\u8FC7\u7684\u547D\u4EE4\u3002

\u53C2\u6570\u8BF4\u660E

\u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
[c:]\u6E05\u7A7A\u5386\u53F2\u6307\u4EE4
[n:]\u663E\u793A\u6700\u8FD1\u6267\u884C\u7684 n \u6761\u6307\u4EE4

\u4F7F\u7528\u53C2\u8003

#\u67E5\u770B\u6700\u8FD1\u6267\u884C\u76843\u6761\u6307\u4EE4
+import{_ as e,o as t,c as i,d as s}from"./app.e2427bec.js";const a={},n=s(`

history

\u6253\u5370\u547D\u4EE4\u5386\u53F2\u3002

\u63D0\u793A

\u5386\u53F2\u6307\u4EE4\u4F1A\u901A\u8FC7\u4E00\u4E2A\u540D\u53EB history \u7684\u6587\u4EF6\u6301\u4E45\u5316\uFF0C\u6240\u4EE5 history \u6307\u4EE4\u53EF\u4EE5\u67E5\u770B\u5F53\u524D arthas \u670D\u52A1\u5668\u7684\u6240\u6709\u5386\u53F2\u547D\u4EE4\uFF0C\u800C\u4E0D\u4EC5\u53EA\u662F\u5F53\u524D\u6B21\u4F1A\u8BDD\u4F7F\u7528\u8FC7\u7684\u547D\u4EE4\u3002

\u53C2\u6570\u8BF4\u660E

\u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
[c:]\u6E05\u7A7A\u5386\u53F2\u6307\u4EE4
[n:]\u663E\u793A\u6700\u8FD1\u6267\u884C\u7684 n \u6761\u6307\u4EE4

\u4F7F\u7528\u53C2\u8003

#\u67E5\u770B\u6700\u8FD1\u6267\u884C\u76843\u6761\u6307\u4EE4
 $ history 3
   269  thread
   270  cls
diff --git a/assets/http-api.html.78a51f51.js b/assets/http-api.html.132670cd.js
similarity index 97%
rename from assets/http-api.html.78a51f51.js
rename to assets/http-api.html.132670cd.js
index 2757259a3..a87483a2d 100644
--- a/assets/http-api.html.78a51f51.js
+++ b/assets/http-api.html.132670cd.js
@@ -1 +1 @@
-const l=JSON.parse('{"key":"v-225de034","path":"/doc/http-api.html","title":"Http API","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u6982\u89C8","slug":"\u6982\u89C8","link":"#\u6982\u89C8","children":[{"level":3,"title":"\u8BBF\u95EE\u5730\u5740","slug":"\u8BBF\u95EE\u5730\u5740","link":"#\u8BBF\u95EE\u5730\u5740","children":[]},{"level":3,"title":"\u8BF7\u6C42\u6570\u636E\u683C\u5F0F","slug":"\u8BF7\u6C42\u6570\u636E\u683C\u5F0F","link":"#\u8BF7\u6C42\u6570\u636E\u683C\u5F0F","children":[]},{"level":3,"title":"\u8BF7\u6C42 Action","slug":"\u8BF7\u6C42-action","link":"#\u8BF7\u6C42-action","children":[]},{"level":3,"title":"\u54CD\u5E94\u72B6\u6001","slug":"\u54CD\u5E94\u72B6\u6001","link":"#\u54CD\u5E94\u72B6\u6001","children":[]}]},{"level":2,"title":"\u4E00\u6B21\u6027\u547D\u4EE4","slug":"\u4E00\u6B21\u6027\u547D\u4EE4","link":"#\u4E00\u6B21\u6027\u547D\u4EE4","children":[]},{"level":2,"title":"\u4F1A\u8BDD\u4EA4\u4E92","slug":"\u4F1A\u8BDD\u4EA4\u4E92","link":"#\u4F1A\u8BDD\u4EA4\u4E92","children":[{"level":3,"title":"\u521B\u5EFA\u4F1A\u8BDD","slug":"\u521B\u5EFA\u4F1A\u8BDD","link":"#\u521B\u5EFA\u4F1A\u8BDD","children":[]},{"level":3,"title":"\u52A0\u5165\u4F1A\u8BDD","slug":"\u52A0\u5165\u4F1A\u8BDD","link":"#\u52A0\u5165\u4F1A\u8BDD","children":[]},{"level":3,"title":"\u62C9\u53D6\u547D\u4EE4\u7ED3\u679C","slug":"\u62C9\u53D6\u547D\u4EE4\u7ED3\u679C","link":"#\u62C9\u53D6\u547D\u4EE4\u7ED3\u679C","children":[]},{"level":3,"title":"\u5F02\u6B65\u6267\u884C\u547D\u4EE4","slug":"\u5F02\u6B65\u6267\u884C\u547D\u4EE4","link":"#\u5F02\u6B65\u6267\u884C\u547D\u4EE4","children":[]},{"level":3,"title":"\u4E2D\u65AD\u547D\u4EE4\u6267\u884C","slug":"\u4E2D\u65AD\u547D\u4EE4\u6267\u884C","link":"#\u4E2D\u65AD\u547D\u4EE4\u6267\u884C","children":[]},{"level":3,"title":"\u5173\u95ED\u4F1A\u8BDD","slug":"\u5173\u95ED\u4F1A\u8BDD","link":"#\u5173\u95ED\u4F1A\u8BDD","children":[]}]},{"level":2,"title":"\u9274\u6743","slug":"\u9274\u6743","link":"#\u9274\u6743","children":[]},{"level":2,"title":"Web UI","slug":"web-ui","link":"#web-ui","children":[]},{"level":2,"title":"\u7279\u6B8A\u547D\u4EE4\u7ED3\u679C","slug":"\u7279\u6B8A\u547D\u4EE4\u7ED3\u679C","link":"#\u7279\u6B8A\u547D\u4EE4\u7ED3\u679C","children":[{"level":3,"title":"status","slug":"status","link":"#status","children":[]},{"level":3,"title":"input_status","slug":"input-status","link":"#input-status","children":[]},{"level":3,"title":"command","slug":"command","link":"#command","children":[]},{"level":3,"title":"enhancer","slug":"enhancer","link":"#enhancer","children":[]}]},{"level":2,"title":"\u6848\u4F8B","slug":"\u6848\u4F8B","link":"#\u6848\u4F8B","children":[{"level":3,"title":"\u83B7\u53D6 Java \u5E94\u7528\u7684 Classpath","slug":"\u83B7\u53D6-java-\u5E94\u7528\u7684-classpath","link":"#\u83B7\u53D6-java-\u5E94\u7528\u7684-classpath","children":[]},{"level":3,"title":"watch \u547D\u4EE4\u8F93\u51FA map \u5BF9\u8C61","slug":"watch-\u547D\u4EE4\u8F93\u51FA-map-\u5BF9\u8C61","link":"#watch-\u547D\u4EE4\u8F93\u51FA-map-\u5BF9\u8C61","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/http-api.md","version":"4.3.3"}');export{l as data};
+const l=JSON.parse('{"key":"v-225de034","path":"/doc/http-api.html","title":"Http API","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u6982\u89C8","slug":"\u6982\u89C8","link":"#\u6982\u89C8","children":[{"level":3,"title":"\u8BBF\u95EE\u5730\u5740","slug":"\u8BBF\u95EE\u5730\u5740","link":"#\u8BBF\u95EE\u5730\u5740","children":[]},{"level":3,"title":"\u8BF7\u6C42\u6570\u636E\u683C\u5F0F","slug":"\u8BF7\u6C42\u6570\u636E\u683C\u5F0F","link":"#\u8BF7\u6C42\u6570\u636E\u683C\u5F0F","children":[]},{"level":3,"title":"\u8BF7\u6C42 Action","slug":"\u8BF7\u6C42-action","link":"#\u8BF7\u6C42-action","children":[]},{"level":3,"title":"\u54CD\u5E94\u72B6\u6001","slug":"\u54CD\u5E94\u72B6\u6001","link":"#\u54CD\u5E94\u72B6\u6001","children":[]}]},{"level":2,"title":"\u4E00\u6B21\u6027\u547D\u4EE4","slug":"\u4E00\u6B21\u6027\u547D\u4EE4","link":"#\u4E00\u6B21\u6027\u547D\u4EE4","children":[]},{"level":2,"title":"\u4F1A\u8BDD\u4EA4\u4E92","slug":"\u4F1A\u8BDD\u4EA4\u4E92","link":"#\u4F1A\u8BDD\u4EA4\u4E92","children":[{"level":3,"title":"\u521B\u5EFA\u4F1A\u8BDD","slug":"\u521B\u5EFA\u4F1A\u8BDD","link":"#\u521B\u5EFA\u4F1A\u8BDD","children":[]},{"level":3,"title":"\u52A0\u5165\u4F1A\u8BDD","slug":"\u52A0\u5165\u4F1A\u8BDD","link":"#\u52A0\u5165\u4F1A\u8BDD","children":[]},{"level":3,"title":"\u62C9\u53D6\u547D\u4EE4\u7ED3\u679C","slug":"\u62C9\u53D6\u547D\u4EE4\u7ED3\u679C","link":"#\u62C9\u53D6\u547D\u4EE4\u7ED3\u679C","children":[]},{"level":3,"title":"\u5F02\u6B65\u6267\u884C\u547D\u4EE4","slug":"\u5F02\u6B65\u6267\u884C\u547D\u4EE4","link":"#\u5F02\u6B65\u6267\u884C\u547D\u4EE4","children":[]},{"level":3,"title":"\u4E2D\u65AD\u547D\u4EE4\u6267\u884C","slug":"\u4E2D\u65AD\u547D\u4EE4\u6267\u884C","link":"#\u4E2D\u65AD\u547D\u4EE4\u6267\u884C","children":[]},{"level":3,"title":"\u5173\u95ED\u4F1A\u8BDD","slug":"\u5173\u95ED\u4F1A\u8BDD","link":"#\u5173\u95ED\u4F1A\u8BDD","children":[]}]},{"level":2,"title":"\u9274\u6743","slug":"\u9274\u6743","link":"#\u9274\u6743","children":[]},{"level":2,"title":"Web UI","slug":"web-ui","link":"#web-ui","children":[]},{"level":2,"title":"\u7279\u6B8A\u547D\u4EE4\u7ED3\u679C","slug":"\u7279\u6B8A\u547D\u4EE4\u7ED3\u679C","link":"#\u7279\u6B8A\u547D\u4EE4\u7ED3\u679C","children":[{"level":3,"title":"status","slug":"status","link":"#status","children":[]},{"level":3,"title":"input_status","slug":"input-status","link":"#input-status","children":[]},{"level":3,"title":"command","slug":"command","link":"#command","children":[]},{"level":3,"title":"enhancer","slug":"enhancer","link":"#enhancer","children":[]}]},{"level":2,"title":"\u6848\u4F8B","slug":"\u6848\u4F8B","link":"#\u6848\u4F8B","children":[{"level":3,"title":"\u83B7\u53D6 Java \u5E94\u7528\u7684 Classpath","slug":"\u83B7\u53D6-java-\u5E94\u7528\u7684-classpath","link":"#\u83B7\u53D6-java-\u5E94\u7528\u7684-classpath","children":[]},{"level":3,"title":"watch \u547D\u4EE4\u8F93\u51FA map \u5BF9\u8C61","slug":"watch-\u547D\u4EE4\u8F93\u51FA-map-\u5BF9\u8C61","link":"#watch-\u547D\u4EE4\u8F93\u51FA-map-\u5BF9\u8C61","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/http-api.md","version":"4.3.5"}');export{l as data};
diff --git a/assets/http-api.html.a397734f.js b/assets/http-api.html.99c4fcf0.js
similarity index 93%
rename from assets/http-api.html.a397734f.js
rename to assets/http-api.html.99c4fcf0.js
index ab9c083a5..18765b4b7 100644
--- a/assets/http-api.html.a397734f.js
+++ b/assets/http-api.html.99c4fcf0.js
@@ -1,4 +1,4 @@
-import{_ as l}from"./arthas-web-ui.89f4fc6d.js";import{_ as i,o as c,c as u,a as s,b as a,w as r,e as n,d as t,r as o}from"./app.524ecf5c.js";const d={},v=s("h1",{id:"http-api",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#http-api","aria-hidden":"true"},"#"),n(" Http API")],-1),k={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=case-http-api",target:"_blank",rel:"noopener noreferrer"},b=s("code",null,"Http API",-1),m=n("\u5728\u7EBF\u6559\u7A0B"),q=t(`

\u6982\u89C8

Http API \u63D0\u4F9B\u7C7B\u4F3C RESTful \u7684\u4EA4\u4E92\u63A5\u53E3\uFF0C\u8BF7\u6C42\u548C\u54CD\u5E94\u5747\u4E3A JSON \u683C\u5F0F\u7684\u6570\u636E\u3002\u76F8\u5BF9\u4E8E Telnet/WebConsole \u7684\u8F93\u51FA\u975E\u7ED3\u6784\u5316\u6587\u672C\u6570\u636E\uFF0CHttp API \u53EF\u4EE5\u63D0\u4F9B\u7ED3\u6784\u5316\u7684\u6570\u636E\uFF0C\u652F\u6301\u66F4\u590D\u6742\u7684\u4EA4\u4E92\u529F\u80FD\uFF0C\u6BD4\u5982\u7279\u5B9A\u5E94\u7528\u573A\u666F\u7684\u4E00\u7CFB\u5217\u8BCA\u65AD\u64CD\u4F5C\u3002

\u8BBF\u95EE\u5730\u5740

Http API \u63A5\u53E3\u5730\u5740\u4E3A\uFF1Ahttp://ip:port/api\uFF0C\u5FC5\u987B\u4F7F\u7528 POST \u65B9\u5F0F\u63D0\u4EA4\u8BF7\u6C42\u53C2\u6570\u3002\u5982 POST http://127.0.0.1:8563/api \u3002

\u6CE8\u610F\uFF1Atelnet \u670D\u52A1\u7684 3658 \u7AEF\u53E3\u4E0E Chrome \u6D4F\u89C8\u5668\u6709\u517C\u5BB9\u6027\u95EE\u9898\uFF0C\u5EFA\u8BAE\u4F7F\u7528 http \u7AEF\u53E3 8563 \u6765\u8BBF\u95EE http \u63A5\u53E3\u3002

\u8BF7\u6C42\u6570\u636E\u683C\u5F0F

{
+import{_ as l}from"./arthas-web-ui.89f4fc6d.js";import{_ as c,o as u,c as r,a as n,b as a,w as o,d as e,e as s,r as p}from"./app.e2427bec.js";const d={},v=e(`

Http API

\u6982\u89C8

Http API \u63D0\u4F9B\u7C7B\u4F3C RESTful \u7684\u4EA4\u4E92\u63A5\u53E3\uFF0C\u8BF7\u6C42\u548C\u54CD\u5E94\u5747\u4E3A JSON \u683C\u5F0F\u7684\u6570\u636E\u3002\u76F8\u5BF9\u4E8E Telnet/WebConsole \u7684\u8F93\u51FA\u975E\u7ED3\u6784\u5316\u6587\u672C\u6570\u636E\uFF0CHttp API \u53EF\u4EE5\u63D0\u4F9B\u7ED3\u6784\u5316\u7684\u6570\u636E\uFF0C\u652F\u6301\u66F4\u590D\u6742\u7684\u4EA4\u4E92\u529F\u80FD\uFF0C\u6BD4\u5982\u7279\u5B9A\u5E94\u7528\u573A\u666F\u7684\u4E00\u7CFB\u5217\u8BCA\u65AD\u64CD\u4F5C\u3002

\u8BBF\u95EE\u5730\u5740

Http API \u63A5\u53E3\u5730\u5740\u4E3A\uFF1Ahttp://ip:port/api\uFF0C\u5FC5\u987B\u4F7F\u7528 POST \u65B9\u5F0F\u63D0\u4EA4\u8BF7\u6C42\u53C2\u6570\u3002\u5982 POST http://127.0.0.1:8563/api \u3002

\u6CE8\u610F\uFF1Atelnet \u670D\u52A1\u7684 3658 \u7AEF\u53E3\u4E0E Chrome \u6D4F\u89C8\u5668\u6709\u517C\u5BB9\u6027\u95EE\u9898\uFF0C\u5EFA\u8BAE\u4F7F\u7528 http \u7AEF\u53E3 8563 \u6765\u8BBF\u95EE http \u63A5\u53E3\u3002

\u8BF7\u6C42\u6570\u636E\u683C\u5F0F

{
   "action": "exec",
   "requestId": "req112",
   "sessionId": "94766d3c-8b39-42d3-8596-98aee3ccbefb",
@@ -99,7 +99,6 @@ import{_ as l}from"./arthas-web-ui.89f4fc6d.js";import{_ as i,o as c,c as u,a as
         "message": "Welcome to arthas!"
       },
       {
-        "tutorials": "https://arthas.aliyun.com/doc/arthas-tutorials.html",
         "time": "2020-08-06 15:56:43",
         "type": "welcome",
         "jobId": 0,
@@ -118,7 +117,7 @@ import{_ as l}from"./arthas-web-ui.89f4fc6d.js";import{_ as i,o as c,c as u,a as
   "consumerId": "8f7f6ad7bc2d4cb5aa57a530927a95cc_2",
   "state": "SUCCEEDED"
 }
-

\u5F02\u6B65\u6267\u884C\u547D\u4EE4

curl -Ss -XPOST http://localhost:8563/api -d '''
+

\u5F02\u6B65\u6267\u884C\u547D\u4EE4

curl -Ss -XPOST http://localhost:8563/api -d '''
 {
   "action":"async_exec",
   "command":"watch demo.MathGame primeFactors \\"{params, returnObj, throwExp}\\" ",
@@ -239,7 +238,7 @@ import{_ as l}from"./arthas-web-ui.89f4fc6d.js";import{_ as i,o as c,c as u,a as
 
{
   "state": "SUCCEEDED"
 }
-

\u9274\u6743

`,71),h=n("\u53C2\u8003\uFF1A "),g=n("auth"),y=s("h2",{id:"web-ui",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#web-ui","aria-hidden":"true"},"#"),n(" Web UI")],-1),_=s("p",null,[s("img",{src:l,alt:"",title:"arthas web ui"})],-1),j=n("\u4E00\u4E2A\u57FA\u4E8E Http API \u63A5\u53E3\u5B9E\u73B0\u7684 Web UI\uFF0C\u8BBF\u95EE\u5730\u5740\u4E3A\uFF1A "),f={href:"http://127.0.0.1:8563/ui",target:"_blank",rel:"noopener noreferrer"},x=n("http://127.0.0.1:8563/ui"),I=n(" \u3002"),E=t(`

\u5DF2\u5B9E\u73B0\u529F\u80FD\uFF1A

  • \u521B\u5EFA\u4F1A\u8BDD
  • \u590D\u5236\u5E76\u6253\u5F00 url \u52A0\u5165\u4F1A\u8BDD\uFF0C\u591A\u4EBA\u5171\u4EAB\u4F1A\u8BDD
  • \u5468\u671F\u6027\u62C9\u53D6\u4F1A\u8BDD\u547D\u4EE4\u7ED3\u679C\u6D88\u606F
  • \u5237\u65B0\u9875\u9762\u6216\u8005\u52A0\u5165\u4F1A\u8BDD\u62C9\u53D6\u4F1A\u8BDD\u5386\u53F2\u547D\u4EE4\u6D88\u606F
  • \u8F93\u5165\u547D\u4EE4/\u4E2D\u65AD\u547D\u4EE4\u72B6\u6001\u63A7\u5236

\u5F85\u5F00\u53D1\u529F\u80FD\uFF1A

  • \u6539\u8FDB\u5C06\u547D\u4EE4\u7ED3\u679C\u6D88\u606F\u53EF\u8BFB\u6027
  • \u547D\u4EE4\u8F93\u5165\u652F\u6301\u81EA\u52A8\u5B8C\u6210\u53CA\u547D\u4EE4\u6A21\u677F
  • \u63D0\u4F9B\u547D\u4EE4\u5E2E\u52A9
  • \u652F\u6301\u4E2A\u4EBA\u9009\u9879\u8BBE\u7F6E

\u7279\u6B8A\u547D\u4EE4\u7ED3\u679C

status

{
+

\u9274\u6743

`,72),k=s("\u53C2\u8003\uFF1A "),b=s("auth"),m=n("h2",{id:"web-ui",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#web-ui","aria-hidden":"true"},"#"),s(" Web UI")],-1),q=n("p",null,[n("img",{src:l,alt:"",title:"arthas web ui"})],-1),h=s("\u4E00\u4E2A\u57FA\u4E8E Http API \u63A5\u53E3\u5B9E\u73B0\u7684 Web UI\uFF0C\u8BBF\u95EE\u5730\u5740\u4E3A\uFF1A "),g={href:"http://127.0.0.1:8563/ui",target:"_blank",rel:"noopener noreferrer"},y=s("http://127.0.0.1:8563/ui"),_=s(" \u3002"),j=e(`

\u5DF2\u5B9E\u73B0\u529F\u80FD\uFF1A

  • \u521B\u5EFA\u4F1A\u8BDD
  • \u590D\u5236\u5E76\u6253\u5F00 url \u52A0\u5165\u4F1A\u8BDD\uFF0C\u591A\u4EBA\u5171\u4EAB\u4F1A\u8BDD
  • \u5468\u671F\u6027\u62C9\u53D6\u4F1A\u8BDD\u547D\u4EE4\u7ED3\u679C\u6D88\u606F
  • \u5237\u65B0\u9875\u9762\u6216\u8005\u52A0\u5165\u4F1A\u8BDD\u62C9\u53D6\u4F1A\u8BDD\u5386\u53F2\u547D\u4EE4\u6D88\u606F
  • \u8F93\u5165\u547D\u4EE4/\u4E2D\u65AD\u547D\u4EE4\u72B6\u6001\u63A7\u5236

\u5F85\u5F00\u53D1\u529F\u80FD\uFF1A

  • \u6539\u8FDB\u5C06\u547D\u4EE4\u7ED3\u679C\u6D88\u606F\u53EF\u8BFB\u6027
  • \u547D\u4EE4\u8F93\u5165\u652F\u6301\u81EA\u52A8\u5B8C\u6210\u53CA\u547D\u4EE4\u6A21\u677F
  • \u63D0\u4F9B\u547D\u4EE4\u5E2E\u52A9
  • \u652F\u6301\u4E2A\u4EBA\u9009\u9879\u8BBE\u7F6E

\u7279\u6B8A\u547D\u4EE4\u7ED3\u679C

status

{
   "jobId": 5,
   "statusCode": 0,
   "type": "status"
@@ -282,7 +281,7 @@ import{_ as l}from"./arthas-web-ui.89f4fc6d.js";import{_ as i,o as c,c as u,a as
 
  • \u4F7F\u7528json_pp/awk\u63D0\u53D6\u503C
class_path=$(echo $json_data | tr -d '\\n' | json_pp | grep java.class.path | awk -F'"' '{ print $4 }')
 echo "classpath: $class_path"
 

\u8F93\u51FA\u5185\u5BB9\uFF1A

classpath: demo-arthas-spring-boot.jar
-

\u6CE8\u610F\uFF1A

  • echo $json_data | tr -d '\\n' : \u5220\u9664\u6362\u884C\u7B26(line.separator\u7684\u503C)\uFF0C\u907F\u514D\u5F71\u54CDsed/json_pp\u547D\u4EE4\u5904\u7406\u3002
  • awk -F'"' '{ print $4 }' : \u4F7F\u7528\u53CC\u5F15\u53F7\u4F5C\u4E3A\u5206\u9694\u7B26\u53F7

watch \u547D\u4EE4\u8F93\u51FA map \u5BF9\u8C61

`,39),S=n("watch \u7684\u7ED3\u679C\u503C\u7531\u8BA1\u7B97"),w=s("code",null,"watch-express",-1),D=n(" ognl \u8868\u8FBE\u5F0F\u4EA7\u751F\uFF0C\u53EF\u4EE5\u901A\u8FC7\u6539\u53D8 ognl \u8868\u8FBE\u5F0F\u6765\u751F\u6210\u60F3\u8981\u7684\u503C\uFF0C\u8BF7\u53C2\u8003"),C={href:"https://commons.apache.org/dormant/commons-ognl/language-guide.html",target:"_blank",rel:"noopener noreferrer"},T=n("OGNL \u6587\u6863"),A=n("\u3002"),O=t(`

\u63D0\u793A

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".

\u4E0B\u9762\u7684\u547D\u4EE4\u751F\u6210 map \u683C\u5F0F\u7684\u503C\uFF1A

watch *MathGame prime* '#{ "params" : params, "returnObj" : returnObj, "throwExp": throwExp}' -x 2 -n 5
+

\u6CE8\u610F\uFF1A

  • echo $json_data | tr -d '\\n' : \u5220\u9664\u6362\u884C\u7B26(line.separator\u7684\u503C)\uFF0C\u907F\u514D\u5F71\u54CDsed/json_pp\u547D\u4EE4\u5904\u7406\u3002
  • awk -F'"' '{ print $4 }' : \u4F7F\u7528\u53CC\u5F15\u53F7\u4F5C\u4E3A\u5206\u9694\u7B26\u53F7

watch \u547D\u4EE4\u8F93\u51FA map \u5BF9\u8C61

`,39),f=s("watch \u7684\u7ED3\u679C\u503C\u7531\u8BA1\u7B97"),x=n("code",null,"watch-express",-1),I=s(" ognl \u8868\u8FBE\u5F0F\u4EA7\u751F\uFF0C\u53EF\u4EE5\u901A\u8FC7\u6539\u53D8 ognl \u8868\u8FBE\u5F0F\u6765\u751F\u6210\u60F3\u8981\u7684\u503C\uFF0C\u8BF7\u53C2\u8003 "),E=s("OGNL \u590D\u6742\u8868\u8FBE\u5F0F\u4F7F\u7528\u6280\u5DE7"),S=s("\u3002"),w=e(`

\u63D0\u793A

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".

\u4E0B\u9762\u7684\u547D\u4EE4\u751F\u6210 map \u683C\u5F0F\u7684\u503C\uFF1A

watch *MathGame prime* '#{ "params" : params, "returnObj" : returnObj, "throwExp": throwExp}' -x 2 -n 5
 

\u5728 Telnet shell/WebConsole \u4E2D\u6267\u884C\u4E0A\u9762\u7684\u547D\u4EE4\uFF0C\u8F93\u51FA\u7684\u7ED3\u679C\uFF1A

ts=2020-08-06 16:57:20; [cost=0.241735ms] result=@LinkedHashMap[
     @String[params]:@Object[][
         @Integer[1],
@@ -341,4 +340,4 @@ EOF
             },
             ...
 }
-

\u53EF\u4EE5\u770B\u5230 watch \u7ED3\u679C\u7684 value \u53D8\u6210 map \u5BF9\u8C61\uFF0C\u7A0B\u5E8F\u53EF\u4EE5\u901A\u8FC7 key \u8BFB\u53D6\u7ED3\u679C\u3002

`,10);function L(P,U){const e=o("ExternalLinkIcon"),p=o("RouterLink");return c(),u("div",null,[v,s("p",null,[s("a",k,[b,m,a(e)])]),q,s("p",null,[h,a(p,{to:"/doc/auth.html"},{default:r(()=>[g]),_:1})]),y,_,s("p",null,[j,s("a",f,[x,a(e)]),I]),E,s("p",null,[S,w,D,s("a",C,[T,a(e)]),A]),O])}const H=i(d,[["render",L],["__file","http-api.html.vue"]]);export{H as default}; +

\u53EF\u4EE5\u770B\u5230 watch \u7ED3\u679C\u7684 value \u53D8\u6210 map \u5BF9\u8C61\uFF0C\u7A0B\u5E8F\u53EF\u4EE5\u901A\u8FC7 key \u8BFB\u53D6\u7ED3\u679C\u3002

`,10);function D(C,T){const t=p("RouterLink"),i=p("ExternalLinkIcon");return u(),r("div",null,[v,n("p",null,[k,a(t,{to:"/doc/auth.html"},{default:o(()=>[b]),_:1})]),m,q,n("p",null,[h,n("a",g,[y,a(i)]),_]),j,n("p",null,[f,x,I,a(t,{to:"/doc/ognl-express.html"},{default:o(()=>[E]),_:1}),S]),w])}const L=c(d,[["render",D],["__file","http-api.html.vue"]]);export{L as default}; diff --git a/assets/http-api.html.0b120e8b.js b/assets/http-api.html.a3d3ab18.js similarity index 96% rename from assets/http-api.html.0b120e8b.js rename to assets/http-api.html.a3d3ab18.js index b8eeddae2..6231eee8d 100644 --- a/assets/http-api.html.0b120e8b.js +++ b/assets/http-api.html.a3d3ab18.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-8b0312c0","path":"/en/doc/http-api.html","title":"Http API","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[{"level":3,"title":"Access address","slug":"access-address","link":"#access-address","children":[]},{"level":3,"title":"Request data format","slug":"request-data-format","link":"#request-data-format","children":[]},{"level":3,"title":"Request Actions","slug":"request-actions","link":"#request-actions","children":[]},{"level":3,"title":"Response status","slug":"response-status","link":"#response-status","children":[]}]},{"level":2,"title":"One-time command","slug":"one-time-command","link":"#one-time-command","children":[]},{"level":2,"title":"Session interaction","slug":"session-interaction","link":"#session-interaction","children":[{"level":3,"title":"Create session","slug":"create-session","link":"#create-session","children":[]},{"level":3,"title":"Join session","slug":"join-session","link":"#join-session","children":[]},{"level":3,"title":"Pull command results","slug":"pull-command-results","link":"#pull-command-results","children":[]},{"level":3,"title":"Execute commands asynchronously","slug":"execute-commands-asynchronously","link":"#execute-commands-asynchronously","children":[]},{"level":3,"title":"Interrupt command execution","slug":"interrupt-command-execution","link":"#interrupt-command-execution","children":[]},{"level":3,"title":"Close session","slug":"close-session","link":"#close-session","children":[]}]},{"level":2,"title":"Authentication","slug":"authentication","link":"#authentication","children":[]},{"level":2,"title":"Web UI","slug":"web-ui","link":"#web-ui","children":[]},{"level":2,"title":"Special command results","slug":"special-command-results","link":"#special-command-results","children":[{"level":3,"title":"status","slug":"status","link":"#status","children":[]},{"level":3,"title":"input_status","slug":"input-status","link":"#input-status","children":[]},{"level":3,"title":"command","slug":"command","link":"#command","children":[]},{"level":3,"title":"enhancer","slug":"enhancer","link":"#enhancer","children":[]}]},{"level":2,"title":"Cases","slug":"cases","link":"#cases","children":[{"level":3,"title":"Get classpath of Java application","slug":"get-classpath-of-java-application","link":"#get-classpath-of-java-application","children":[]},{"level":3,"title":"Make watch command output a map object","slug":"make-watch-command-output-a-map-object","link":"#make-watch-command-output-a-map-object","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/http-api.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-8b0312c0","path":"/en/doc/http-api.html","title":"Http API","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[{"level":3,"title":"Access address","slug":"access-address","link":"#access-address","children":[]},{"level":3,"title":"Request data format","slug":"request-data-format","link":"#request-data-format","children":[]},{"level":3,"title":"Request Actions","slug":"request-actions","link":"#request-actions","children":[]},{"level":3,"title":"Response status","slug":"response-status","link":"#response-status","children":[]}]},{"level":2,"title":"One-time command","slug":"one-time-command","link":"#one-time-command","children":[]},{"level":2,"title":"Session interaction","slug":"session-interaction","link":"#session-interaction","children":[{"level":3,"title":"Create session","slug":"create-session","link":"#create-session","children":[]},{"level":3,"title":"Join session","slug":"join-session","link":"#join-session","children":[]},{"level":3,"title":"Pull command results","slug":"pull-command-results","link":"#pull-command-results","children":[]},{"level":3,"title":"Execute commands asynchronously","slug":"execute-commands-asynchronously","link":"#execute-commands-asynchronously","children":[]},{"level":3,"title":"Interrupt command execution","slug":"interrupt-command-execution","link":"#interrupt-command-execution","children":[]},{"level":3,"title":"Close session","slug":"close-session","link":"#close-session","children":[]}]},{"level":2,"title":"Authentication","slug":"authentication","link":"#authentication","children":[]},{"level":2,"title":"Web UI","slug":"web-ui","link":"#web-ui","children":[]},{"level":2,"title":"Special command results","slug":"special-command-results","link":"#special-command-results","children":[{"level":3,"title":"status","slug":"status","link":"#status","children":[]},{"level":3,"title":"input_status","slug":"input-status","link":"#input-status","children":[]},{"level":3,"title":"command","slug":"command","link":"#command","children":[]},{"level":3,"title":"enhancer","slug":"enhancer","link":"#enhancer","children":[]}]},{"level":2,"title":"Cases","slug":"cases","link":"#cases","children":[{"level":3,"title":"Get classpath of Java application","slug":"get-classpath-of-java-application","link":"#get-classpath-of-java-application","children":[]},{"level":3,"title":"Make watch command output a map object","slug":"make-watch-command-output-a-map-object","link":"#make-watch-command-output-a-map-object","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/http-api.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/http-api.html.fd0631ff.js b/assets/http-api.html.d561b855.js similarity index 94% rename from assets/http-api.html.fd0631ff.js rename to assets/http-api.html.d561b855.js index c12129fa5..58a08943a 100644 --- a/assets/http-api.html.fd0631ff.js +++ b/assets/http-api.html.d561b855.js @@ -1,4 +1,4 @@ -import{_ as i}from"./arthas-web-ui.89f4fc6d.js";import{_ as c,o as l,c as u,a as s,b as a,w as r,e as n,d as t,r as o}from"./app.524ecf5c.js";const d={},m=s("h1",{id:"http-api",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#http-api","aria-hidden":"true"},"#"),n(" Http API")],-1),v={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=case-http-api",target:"_blank",rel:"noopener noreferrer"},k=s("code",null,"Http API",-1),b=n(" online tutorial"),h=t(`

Overview

Http API provides a RESTful-like interactive interface, and both requests and responses data in JSON format. Compared with 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 must be submitted using POST. Such as POST http://127.0.0.1:8563/api.

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

{
+import{_ as c}from"./arthas-web-ui.89f4fc6d.js";import{_ as l,o as u,c as r,a as s,b as a,w as o,d as e,e as n,r as p}from"./app.e2427bec.js";const d={},m=e(`

Http API

Overview

Http API provides a RESTful-like interactive interface, and both requests and responses data in JSON format. Compared with 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 must be submitted using POST. Such as POST http://127.0.0.1:8563/api.

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

{
   "action": "exec",
   "requestId": "req112",
   "sessionId": "94766d3c-8b39-42d3-8596-98aee3ccbefb",
@@ -99,7 +99,6 @@ import{_ as i}from"./arthas-web-ui.89f4fc6d.js";import{_ as c,o as l,c as u,a as
         "message": "Welcome to arthas!"
       },
       {
-        "tutorials": "https://arthas.aliyun.com/doc/arthas-tutorials.html",
         "time": "2020-08-06 15:56:43",
         "type": "welcome",
         "jobId": 0,
@@ -118,7 +117,7 @@ import{_ as i}from"./arthas-web-ui.89f4fc6d.js";import{_ as c,o as l,c as u,a as
   "consumerId": "8f7f6ad7bc2d4cb5aa57a530927a95cc_2",
   "state": "SUCCEEDED"
 }
-

Execute commands asynchronously

curl -Ss -XPOST http://localhost:8563/api -d '''
+

Execute commands asynchronously

curl -Ss -XPOST http://localhost:8563/api -d '''
 {
   "action":"async_exec",
   "command":"watch demo.MathGame primeFactors \\"{params, returnObj, throwExp}\\" ",
@@ -239,7 +238,7 @@ import{_ as i}from"./arthas-web-ui.89f4fc6d.js";import{_ as c,o as l,c as u,a as
 
{
   "state": "SUCCEEDED"
 }
-

Authentication

`,73),q=n("Reference: "),g=n("auth"),y=s("h2",{id:"web-ui",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#web-ui","aria-hidden":"true"},"#"),n(" Web UI")],-1),f=s("p",null,[s("img",{src:i,alt:"",title:"arthas web ui"})],-1),x=n("A Web UI based on Http API, visit url : "),j={href:"http://127.0.0.1:8563/ui",target:"_blank",rel:"noopener noreferrer"},_=n("http://127.0.0.1:8563/ui"),I=n(" ."),w=t(`

Completed functions:

  • 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 history
  • 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

Special command results

status

{
+

Authentication

`,74),v=n("Reference: "),k=n("auth"),b=s("h2",{id:"web-ui",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#web-ui","aria-hidden":"true"},"#"),n(" Web UI")],-1),h=s("p",null,[s("img",{src:c,alt:"",title:"arthas web ui"})],-1),q=n("A Web UI based on Http API, visit url : "),g={href:"http://127.0.0.1:8563/ui",target:"_blank",rel:"noopener noreferrer"},y=n("http://127.0.0.1:8563/ui"),f=n(" ."),x=e(`

Completed functions:

  • 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 history
  • 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

Special command results

status

{
   "jobId": 5,
   "statusCode": 0,
   "type": "status"
@@ -282,7 +281,7 @@ import{_ as i}from"./arthas-web-ui.89f4fc6d.js";import{_ as c,o as l,c as u,a as
 
  • Extract value with json_pp/awk:
class_path=$(echo $json_data | tr -d '\\n' | json_pp | grep java.class.path | awk -F'"' '{ print $4 }')
 echo "classpath: $class_path"
 

Output:

classpath: demo-arthas-spring-boot.jar
-

NOTE:

  • 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

Make watch command output a map object

`,40),E=n("The result value of "),T=s("code",null,"watch",-1),S=n(" is generated by calculating the "),C=s("code",null,"watch-express",-1),D=n(" ognl expression. You can change the ognl expression to generate the desired value, please refer to "),A={href:"https://commons.apache.org/dormant/commons-ognl/language-guide.html",target:"_blank",rel:"noopener noreferrer"},O=n("OGNL document"),P=n("."),L=t(`

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 \u200B\u200Bin map format:

watch *MathGame prime* '#{ "params" : params, "returnObj" : returnObj, "throwExp": throwExp}' -x 2 -n 5
+

NOTE:

  • 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

Make watch command output a map object

`,40),j=n("The result value of "),_=s("code",null,"watch",-1),I=n(" is generated by calculating the "),w=s("code",null,"watch-express",-1),E=n(" ognl expression. You can change the ognl expression to generate the desired value. See "),T=n("Tips for complex OGNL expressions"),S=n("."),C=e(`

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 \u200B\u200Bin map format:

watch *MathGame prime* '#{ "params" : params, "returnObj" : returnObj, "throwExp": throwExp}' -x 2 -n 5
 

Execute the above command in Telnet shell/WebConsole, the output result:

ts=2020-08-06 16:57:20; [cost=0.241735ms] result=@LinkedHashMap[
     @String[params]:@Object[][
         @Integer[1],
@@ -341,4 +340,4 @@ EOF
             },
             ...
 }
-

You can see that the value of the watch result becomes a map object, and the program can read value through a key .

`,10);function U(R,N){const e=o("ExternalLinkIcon"),p=o("RouterLink");return l(),u("div",null,[m,s("p",null,[s("a",v,[k,b,a(e)])]),h,s("ul",null,[s("li",null,[q,a(p,{to:"/en/doc/auth.html"},{default:r(()=>[g]),_:1})])]),y,f,s("p",null,[x,s("a",j,[_,a(e)]),I]),w,s("p",null,[E,T,S,C,D,s("a",A,[O,a(e)]),P]),L])}const W=c(d,[["render",U],["__file","http-api.html.vue"]]);export{W as default}; +

You can see that the value of the watch result becomes a map object, and the program can read value through a key .

`,10);function D(O,A){const t=p("RouterLink"),i=p("ExternalLinkIcon");return u(),r("div",null,[m,s("ul",null,[s("li",null,[v,a(t,{to:"/en/doc/auth.html"},{default:o(()=>[k]),_:1})])]),b,h,s("p",null,[q,s("a",g,[y,a(i)]),f]),x,s("p",null,[j,_,I,w,E,a(t,{to:"/en/doc/ognl-express.html"},{default:o(()=>[T]),_:1}),S]),C])}const U=l(d,[["render",D],["__file","http-api.html.vue"]]);export{U as default}; diff --git a/assets/idea-plugin.html.ccb84f96.js b/assets/idea-plugin.html.34a25f10.js similarity index 97% rename from assets/idea-plugin.html.ccb84f96.js rename to assets/idea-plugin.html.34a25f10.js index 6f09f61b9..d824d5534 100644 --- a/assets/idea-plugin.html.ccb84f96.js +++ b/assets/idea-plugin.html.34a25f10.js @@ -1 +1 @@ -import{_ as i,o as r,c as s,a as t,b as o,d as n,e,r as l}from"./app.524ecf5c.js";const c="/images/alibabacloud_hotreload.png",d={},h=n('

IDEA Plugin

Arthas-idea\uFF08\u90E8\u5206\u547D\u4EE4\u53EF\u89C6\u5316\uFF09

\u63D0\u793A

\u63D2\u4EF6\u7531\u793E\u533A\u5F00\u53D1\u8005\u63D0\u4F9B\u3002

',3),_=e("Jetbrains \u63D2\u4EF6\u83B7\u53D6\u5730\u5740\uFF1A "),u={href:"https://plugins.jetbrains.com/plugin/13581-arthas-idea",target:"_blank",rel:"noopener noreferrer"},p=e("https://plugins.jetbrains.com/plugin/13581-arthas-idea"),m=e("\u4F7F\u7528\u6587\u6863\uFF1A"),b={href:"https://www.yuque.com/arthas-idea-plugin",target:"_blank",rel:"noopener noreferrer"},g=e("https://www.yuque.com/arthas-idea-plugin"),f=e("\u6E90\u7801\u5730\u5740\uFF1A "),k={href:"https://github.com/WangJi92/arthas-idea-plugin",target:"_blank",rel:"noopener noreferrer"},x=e("https://github.com/WangJi92/arthas-idea-plugin"),v=n('

Alibaba Cloud Toolkit \u70ED\u90E8\u7F72\u7EC4\u4EF6\uFF08\u4E00\u952E retransform\uFF09

\u63D0\u793A

\u70ED\u90E8\u7F72\u7EC4\u4EF6\u652F\u6301\u4E00\u952E\u5C06\u7F16\u8F91\u5668\u4E2D\u4FEE\u6539\u7684 Java \u6E90\u7801\u5FEB\u901F\u7F16\u8BD1\uFF0C\u5E76\u66F4\u65B0\u5230\u8FDC\u7AEF\u5E94\u7528\u670D\u52A1\u4E2D\uFF0C\u514D\u53BB\u624B\u52A8 dump\u3001mc \u7684\u8FC7\u7A0B\u3002\u6B64\u5916\uFF0C\u4E5F\u53EF\u4EE5\u4E00\u952E\u8FD8\u539F retransform \u7684\u7C7B\u6587\u4EF6\u3002

',3),w=e("Jetbrains \u63D2\u4EF6\u83B7\u53D6\u5730\u5740\uFF1A "),J={href:"https://plugins.jetbrains.com/plugin/11386-alibaba-cloud-toolkit",target:"_blank",rel:"noopener noreferrer"},j=e("https://plugins.jetbrains.com/plugin/11386-alibaba-cloud-toolkit"),y=e("\u4F7F\u7528\u6587\u6863\uFF1A"),A={href:"https://help.aliyun.com/document_detail/381077.html",target:"_blank",rel:"noopener noreferrer"},E=e("https://help.aliyun.com/document_detail/381077.html"),N=t("li",null,[e("\u8054\u7CFB\u6211\u4EEC\uFF1A\u8BF7\u52A0 Alibaba Cloud Toolkit (\u5E94\u7528\u89C2\u6D4B\u5668) \u9489\u9489\u7528\u6237\u4EA4\u6D41\u7FA4\uFF08\u7FA4\u53F7\uFF1A"),t("strong",null,"34965379"),e("\uFF09")],-1);function V(B,C){const a=l("ExternalLinkIcon");return r(),s("div",null,[h,t("ul",null,[t("li",null,[_,t("a",u,[p,o(a)])]),t("li",null,[m,t("a",b,[g,o(a)])]),t("li",null,[f,t("a",k,[x,o(a)])])]),v,t("ul",null,[t("li",null,[w,t("a",J,[j,o(a)])]),t("li",null,[y,t("a",A,[E,o(a)])]),N])])}const T=i(d,[["render",V],["__file","idea-plugin.html.vue"]]);export{T as default}; +import{_ as i,o as r,c as s,a as t,b as o,d as n,e,r as l}from"./app.e2427bec.js";const c="/images/alibabacloud_hotreload.png",d={},h=n('

IDEA Plugin

Arthas-idea\uFF08\u90E8\u5206\u547D\u4EE4\u53EF\u89C6\u5316\uFF09

\u63D0\u793A

\u63D2\u4EF6\u7531\u793E\u533A\u5F00\u53D1\u8005\u63D0\u4F9B\u3002

',3),_=e("Jetbrains \u63D2\u4EF6\u83B7\u53D6\u5730\u5740\uFF1A "),u={href:"https://plugins.jetbrains.com/plugin/13581-arthas-idea",target:"_blank",rel:"noopener noreferrer"},p=e("https://plugins.jetbrains.com/plugin/13581-arthas-idea"),m=e("\u4F7F\u7528\u6587\u6863\uFF1A"),b={href:"https://www.yuque.com/arthas-idea-plugin",target:"_blank",rel:"noopener noreferrer"},g=e("https://www.yuque.com/arthas-idea-plugin"),f=e("\u6E90\u7801\u5730\u5740\uFF1A "),k={href:"https://github.com/WangJi92/arthas-idea-plugin",target:"_blank",rel:"noopener noreferrer"},x=e("https://github.com/WangJi92/arthas-idea-plugin"),v=n('

Alibaba Cloud Toolkit \u70ED\u90E8\u7F72\u7EC4\u4EF6\uFF08\u4E00\u952E retransform\uFF09

\u63D0\u793A

\u70ED\u90E8\u7F72\u7EC4\u4EF6\u652F\u6301\u4E00\u952E\u5C06\u7F16\u8F91\u5668\u4E2D\u4FEE\u6539\u7684 Java \u6E90\u7801\u5FEB\u901F\u7F16\u8BD1\uFF0C\u5E76\u66F4\u65B0\u5230\u8FDC\u7AEF\u5E94\u7528\u670D\u52A1\u4E2D\uFF0C\u514D\u53BB\u624B\u52A8 dump\u3001mc \u7684\u8FC7\u7A0B\u3002\u6B64\u5916\uFF0C\u4E5F\u53EF\u4EE5\u4E00\u952E\u8FD8\u539F retransform \u7684\u7C7B\u6587\u4EF6\u3002

',3),w=e("Jetbrains \u63D2\u4EF6\u83B7\u53D6\u5730\u5740\uFF1A "),J={href:"https://plugins.jetbrains.com/plugin/11386-alibaba-cloud-toolkit",target:"_blank",rel:"noopener noreferrer"},j=e("https://plugins.jetbrains.com/plugin/11386-alibaba-cloud-toolkit"),y=e("\u4F7F\u7528\u6587\u6863\uFF1A"),A={href:"https://help.aliyun.com/document_detail/381077.html",target:"_blank",rel:"noopener noreferrer"},E=e("https://help.aliyun.com/document_detail/381077.html"),N=t("li",null,[e("\u8054\u7CFB\u6211\u4EEC\uFF1A\u8BF7\u52A0 Alibaba Cloud Toolkit (\u5E94\u7528\u89C2\u6D4B\u5668) \u9489\u9489\u7528\u6237\u4EA4\u6D41\u7FA4\uFF08\u7FA4\u53F7\uFF1A"),t("strong",null,"34965379"),e("\uFF09")],-1);function V(B,C){const a=l("ExternalLinkIcon");return r(),s("div",null,[h,t("ul",null,[t("li",null,[_,t("a",u,[p,o(a)])]),t("li",null,[m,t("a",b,[g,o(a)])]),t("li",null,[f,t("a",k,[x,o(a)])])]),v,t("ul",null,[t("li",null,[w,t("a",J,[j,o(a)])]),t("li",null,[y,t("a",A,[E,o(a)])]),N])])}const T=i(d,[["render",V],["__file","idea-plugin.html.vue"]]);export{T as default}; diff --git a/assets/idea-plugin.html.b12bba00.js b/assets/idea-plugin.html.57e8f57c.js similarity index 87% rename from assets/idea-plugin.html.b12bba00.js rename to assets/idea-plugin.html.57e8f57c.js index b6dbce3c6..df7c47408 100644 --- a/assets/idea-plugin.html.b12bba00.js +++ b/assets/idea-plugin.html.57e8f57c.js @@ -1 +1 @@ -const a=JSON.parse('{"key":"v-7c670020","path":"/doc/idea-plugin.html","title":"IDEA Plugin","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Arthas-idea\uFF08\u90E8\u5206\u547D\u4EE4\u53EF\u89C6\u5316\uFF09","slug":"arthas-idea-\u90E8\u5206\u547D\u4EE4\u53EF\u89C6\u5316","link":"#arthas-idea-\u90E8\u5206\u547D\u4EE4\u53EF\u89C6\u5316","children":[]},{"level":2,"title":"Alibaba Cloud Toolkit \u70ED\u90E8\u7F72\u7EC4\u4EF6\uFF08\u4E00\u952E retransform\uFF09","slug":"alibaba-cloud-toolkit-\u70ED\u90E8\u7F72\u7EC4\u4EF6-\u4E00\u952E-retransform","link":"#alibaba-cloud-toolkit-\u70ED\u90E8\u7F72\u7EC4\u4EF6-\u4E00\u952E-retransform","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/idea-plugin.md","version":"4.3.3"}');export{a as data}; +const a=JSON.parse('{"key":"v-7c670020","path":"/doc/idea-plugin.html","title":"IDEA Plugin","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Arthas-idea\uFF08\u90E8\u5206\u547D\u4EE4\u53EF\u89C6\u5316\uFF09","slug":"arthas-idea-\u90E8\u5206\u547D\u4EE4\u53EF\u89C6\u5316","link":"#arthas-idea-\u90E8\u5206\u547D\u4EE4\u53EF\u89C6\u5316","children":[]},{"level":2,"title":"Alibaba Cloud Toolkit \u70ED\u90E8\u7F72\u7EC4\u4EF6\uFF08\u4E00\u952E retransform\uFF09","slug":"alibaba-cloud-toolkit-\u70ED\u90E8\u7F72\u7EC4\u4EF6-\u4E00\u952E-retransform","link":"#alibaba-cloud-toolkit-\u70ED\u90E8\u7F72\u7EC4\u4EF6-\u4E00\u952E-retransform","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/idea-plugin.md","version":"4.3.5"}');export{a as data}; diff --git a/assets/idea-plugin.html.9ba5ce05.js b/assets/idea-plugin.html.7d6cbcc9.js similarity index 89% rename from assets/idea-plugin.html.9ba5ce05.js rename to assets/idea-plugin.html.7d6cbcc9.js index 03bcdd181..d1349bae6 100644 --- a/assets/idea-plugin.html.9ba5ce05.js +++ b/assets/idea-plugin.html.7d6cbcc9.js @@ -1 +1 @@ -import{_ as o,o as a,c as s,a as e,b as i,e as t,r}from"./app.524ecf5c.js";const l={},c=e("h1",{id:"idea-plugin",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#idea-plugin","aria-hidden":"true"},"#"),t(" IDEA Plugin")],-1),u=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"TIP"),e("p",null,"Plugin is provided by community developers.")],-1),_=t("Jetbrains Plugin\uFF1A "),d={href:"https://plugins.jetbrains.com/plugin/13581-arthas-idea",target:"_blank",rel:"noopener noreferrer"},h=t("https://plugins.jetbrains.com/plugin/13581-arthas-idea"),p=t("Plugin Doc\uFF1A"),g={href:"https://www.yuque.com/arthas-idea-plugin",target:"_blank",rel:"noopener noreferrer"},m=t("https://www.yuque.com/arthas-idea-plugin"),f=t("Plugin Github\uFF1A "),b={href:"https://github.com/WangJi92/arthas-idea-plugin",target:"_blank",rel:"noopener noreferrer"},k=t("https://github.com/WangJi92/arthas-idea-plugin");function x(P,v){const n=r("ExternalLinkIcon");return a(),s("div",null,[c,u,e("ul",null,[e("li",null,[_,e("a",d,[h,i(n)])]),e("li",null,[p,e("a",g,[m,i(n)])]),e("li",null,[f,e("a",b,[k,i(n)])])])])}const y=o(l,[["render",x],["__file","idea-plugin.html.vue"]]);export{y as default}; +import{_ as o,o as a,c as s,a as e,b as i,e as t,r}from"./app.e2427bec.js";const l={},c=e("h1",{id:"idea-plugin",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#idea-plugin","aria-hidden":"true"},"#"),t(" IDEA Plugin")],-1),u=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"TIP"),e("p",null,"Plugin is provided by community developers.")],-1),_=t("Jetbrains Plugin\uFF1A "),d={href:"https://plugins.jetbrains.com/plugin/13581-arthas-idea",target:"_blank",rel:"noopener noreferrer"},h=t("https://plugins.jetbrains.com/plugin/13581-arthas-idea"),p=t("Plugin Doc\uFF1A"),g={href:"https://www.yuque.com/arthas-idea-plugin",target:"_blank",rel:"noopener noreferrer"},m=t("https://www.yuque.com/arthas-idea-plugin"),f=t("Plugin Github\uFF1A "),b={href:"https://github.com/WangJi92/arthas-idea-plugin",target:"_blank",rel:"noopener noreferrer"},k=t("https://github.com/WangJi92/arthas-idea-plugin");function x(P,v){const n=r("ExternalLinkIcon");return a(),s("div",null,[c,u,e("ul",null,[e("li",null,[_,e("a",d,[h,i(n)])]),e("li",null,[p,e("a",g,[m,i(n)])]),e("li",null,[f,e("a",b,[k,i(n)])])])])}const y=o(l,[["render",x],["__file","idea-plugin.html.vue"]]);export{y as default}; diff --git a/assets/idea-plugin.html.c59405cc.js b/assets/idea-plugin.html.ae6aa4f7.js similarity index 72% rename from assets/idea-plugin.html.c59405cc.js rename to assets/idea-plugin.html.ae6aa4f7.js index 9c733b4f9..fb289ba47 100644 --- a/assets/idea-plugin.html.c59405cc.js +++ b/assets/idea-plugin.html.ae6aa4f7.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-96b07b98","path":"/en/doc/idea-plugin.html","title":"IDEA Plugin","lang":"en-US","frontmatter":{},"excerpt":"","headers":[],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/idea-plugin.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-96b07b98","path":"/en/doc/idea-plugin.html","title":"IDEA Plugin","lang":"en-US","frontmatter":{},"excerpt":"","headers":[],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/idea-plugin.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/index.html.5332fd62.js b/assets/index.html.086821c2.js similarity index 63% rename from assets/index.html.5332fd62.js rename to assets/index.html.086821c2.js index 5024162f8..c113087ef 100644 --- a/assets/index.html.5332fd62.js +++ b/assets/index.html.086821c2.js @@ -1 +1 @@ -import{_ as e,o as c,c as t}from"./app.524ecf5c.js";const n={};function _(o,r){return c(),t("div")}const a=e(n,[["render",_],["__file","index.html.vue"]]);export{a as default}; +import{_ as e,o as c,c as t}from"./app.e2427bec.js";const n={};function _(o,r){return c(),t("div")}const a=e(n,[["render",_],["__file","index.html.vue"]]);export{a as default}; diff --git a/assets/index.html.74bff2cf.js b/assets/index.html.18118d67.js similarity index 63% rename from assets/index.html.74bff2cf.js rename to assets/index.html.18118d67.js index 5024162f8..c113087ef 100644 --- a/assets/index.html.74bff2cf.js +++ b/assets/index.html.18118d67.js @@ -1 +1 @@ -import{_ as e,o as c,c as t}from"./app.524ecf5c.js";const n={};function _(o,r){return c(),t("div")}const a=e(n,[["render",_],["__file","index.html.vue"]]);export{a as default}; +import{_ as e,o as c,c as t}from"./app.e2427bec.js";const n={};function _(o,r){return c(),t("div")}const a=e(n,[["render",_],["__file","index.html.vue"]]);export{a as default}; diff --git a/assets/index.html.8c8f4e7a.js b/assets/index.html.34145a94.js similarity index 98% rename from assets/index.html.8c8f4e7a.js rename to assets/index.html.34145a94.js index 582ffa7ad..d3cbfe709 100644 --- a/assets/index.html.8c8f4e7a.js +++ b/assets/index.html.34145a94.js @@ -1 +1 @@ -import{_ as i}from"./arthas.b23d3e5a.js";import{_ as a,o as r,c as n,a as e,b as s,d as l,e as t,r as c}from"./app.524ecf5c.js";const d={},h=l('

Introduction

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.

Background

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.

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.

Arthas is built to solve these issues. A developer can troubleshoot production issues on the fly. No JVM restart, no additional code changes. Arthas works as an observer, that is, it will never suspend your running threads.

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 8+ in version 4.x, including JDK 17, JDK 21, and JDK 25
  • Supports Linux/Mac/Windows
',10),u=t("If you are using Arthas, please let us know. Your feedback is very important to us: "),p={href:"https://github.com/alibaba/arthas/issues/111",target:"_blank",rel:"noopener noreferrer"},m=t("View"),b=e("h2",{id:"contributors",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#contributors","aria-hidden":"true"},"#"),t(" Contributors")],-1),f={href:"https://github.com/alibaba/arthas/graphs/contributors",target:"_blank",rel:"noopener noreferrer"},g=e("img",{src:"https://opencollective.com/arthas/contributors.svg?width=890&button=false",alt:""},null,-1);function v(_,w){const o=c("ExternalLinkIcon");return r(),n("div",null,[h,e("p",null,[e("strong",null,[u,e("a",p,[m,s(o)])])]),b,e("p",null,[e("a",f,[g,s(o)])])])}const x=a(d,[["render",v],["__file","index.html.vue"]]);export{x as default}; +import{_ as i}from"./arthas.b23d3e5a.js";import{_ as a,o as r,c as n,a as e,b as s,d as l,e as t,r as c}from"./app.e2427bec.js";const d={},h=l('

Introduction

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.

Background

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.

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.

Arthas is built to solve these issues. A developer can troubleshoot production issues on the fly. No JVM restart, no additional code changes. Arthas works as an observer, that is, it will never suspend your running threads.

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 8+ in version 4.x, including JDK 17, JDK 21, and JDK 25
  • Supports Linux/Mac/Windows
',10),u=t("If you are using Arthas, please let us know. Your feedback is very important to us: "),p={href:"https://github.com/alibaba/arthas/issues/111",target:"_blank",rel:"noopener noreferrer"},m=t("View"),b=e("h2",{id:"contributors",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#contributors","aria-hidden":"true"},"#"),t(" Contributors")],-1),f={href:"https://github.com/alibaba/arthas/graphs/contributors",target:"_blank",rel:"noopener noreferrer"},g=e("img",{src:"https://opencollective.com/arthas/contributors.svg?width=890&button=false",alt:""},null,-1);function v(_,w){const o=c("ExternalLinkIcon");return r(),n("div",null,[h,e("p",null,[e("strong",null,[u,e("a",p,[m,s(o)])])]),b,e("p",null,[e("a",f,[g,s(o)])])])}const x=a(d,[["render",v],["__file","index.html.vue"]]);export{x as default}; diff --git a/assets/index.html.7ce27c03.js b/assets/index.html.6dcd1531.js similarity index 94% rename from assets/index.html.7ce27c03.js rename to assets/index.html.6dcd1531.js index 7ac8bb928..ef8b564e0 100644 --- a/assets/index.html.7ce27c03.js +++ b/assets/index.html.6dcd1531.js @@ -1 +1 @@ -const e=JSON.parse(`{"key":"v-2d0a870d","path":"/en/","title":"Home","lang":"en-US","frontmatter":{"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":"\u{1F5A5}","title":"Dashboard","details":"View the operating status of the system in real time"},{"icon":"\u{1F52C}","title":"Parameters/Return values/Exceptions","details":"View method parameters, return values and exceptions"},{"icon":"\u{1F529}","title":"Online hotswap","details":"jad/sc/redefine online hotswap"},{"icon":"\u{1FA7A}","title":"Class conflict","details":"Resolve the class conflict problem in seconds, locate the class loading path"},{"icon":"\u26A1\uFE0F","title":"Flame Graph","details":"Quickly locate application hotspots and generate flame graphs"},{"icon":"\u{1F4E1}","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"},"excerpt":"","headers":[],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/README.md","version":"4.3.3"}`);export{e as data}; +const e=JSON.parse(`{"key":"v-2d0a870d","path":"/en/","title":"Home","lang":"en-US","frontmatter":{"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":"\u{1F5A5}","title":"Dashboard","details":"View the operating status of the system in real time"},{"icon":"\u{1F52C}","title":"Parameters/Return values/Exceptions","details":"View method parameters, return values and exceptions"},{"icon":"\u{1F529}","title":"Online hotswap","details":"jad/sc/redefine online hotswap"},{"icon":"\u{1FA7A}","title":"Class conflict","details":"Resolve the class conflict problem in seconds, locate the class loading path"},{"icon":"\u26A1\uFE0F","title":"Flame Graph","details":"Quickly locate application hotspots and generate flame graphs"},{"icon":"\u{1F4E1}","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"},"excerpt":"","headers":[],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/README.md","version":"4.3.5"}`);export{e as data}; diff --git a/assets/index.html.58d0a509.js b/assets/index.html.760efd19.js similarity index 98% rename from assets/index.html.58d0a509.js rename to assets/index.html.760efd19.js index e1eb92f4b..83c3d61ea 100644 --- a/assets/index.html.58d0a509.js +++ b/assets/index.html.760efd19.js @@ -1 +1 @@ -import{_ as o}from"./arthas.b23d3e5a.js";import{_ as s,o as i,c as n,a as e,b as r,d as c,e as a,r as h}from"./app.524ecf5c.js";const l={},d=c('

\u7B80\u4ECB

Arthas \u662F\u4E00\u6B3E\u7EBF\u4E0A\u76D1\u63A7\u8BCA\u65AD\u4EA7\u54C1\uFF0C\u901A\u8FC7\u5168\u5C40\u89C6\u89D2\u5B9E\u65F6\u67E5\u770B\u5E94\u7528 load\u3001\u5185\u5B58\u3001gc\u3001\u7EBF\u7A0B\u7684\u72B6\u6001\u4FE1\u606F\uFF0C\u5E76\u80FD\u5728\u4E0D\u4FEE\u6539\u5E94\u7528\u4EE3\u7801\u7684\u60C5\u51B5\u4E0B\uFF0C\u5BF9\u4E1A\u52A1\u95EE\u9898\u8FDB\u884C\u8BCA\u65AD\uFF0C\u5305\u62EC\u67E5\u770B\u65B9\u6CD5\u8C03\u7528\u7684\u51FA\u5165\u53C2\u3001\u5F02\u5E38\uFF0C\u76D1\u6D4B\u65B9\u6CD5\u6267\u884C\u8017\u65F6\uFF0C\u7C7B\u52A0\u8F7D\u4FE1\u606F\u7B49\uFF0C\u5927\u5927\u63D0\u5347\u7EBF\u4E0A\u95EE\u9898\u6392\u67E5\u6548\u7387\u3002

\u80CC\u666F

\u901A\u5E38\uFF0C\u672C\u5730\u5F00\u53D1\u73AF\u5883\u65E0\u6CD5\u8BBF\u95EE\u751F\u4EA7\u73AF\u5883\u3002\u5982\u679C\u5728\u751F\u4EA7\u73AF\u5883\u4E2D\u9047\u5230\u95EE\u9898\uFF0C\u5219\u65E0\u6CD5\u4F7F\u7528 IDE \u8FDC\u7A0B\u8C03\u8BD5\u3002\u66F4\u7CDF\u7CD5\u7684\u662F\uFF0C\u5728\u751F\u4EA7\u73AF\u5883\u4E2D\u8C03\u8BD5\u662F\u4E0D\u53EF\u63A5\u53D7\u7684\uFF0C\u56E0\u4E3A\u5B83\u4F1A\u6682\u505C\u6240\u6709\u7EBF\u7A0B\uFF0C\u5BFC\u81F4\u670D\u52A1\u6682\u505C\u3002

\u5F00\u53D1\u4EBA\u5458\u53EF\u4EE5\u5C1D\u8BD5\u5728\u6D4B\u8BD5\u73AF\u5883\u6216\u8005\u9884\u53D1\u73AF\u5883\u4E2D\u590D\u73B0\u751F\u4EA7\u73AF\u5883\u4E2D\u7684\u95EE\u9898\u3002\u4F46\u662F\uFF0C\u67D0\u4E9B\u95EE\u9898\u65E0\u6CD5\u5728\u4E0D\u540C\u7684\u73AF\u5883\u4E2D\u8F7B\u677E\u590D\u73B0\uFF0C\u751A\u81F3\u5728\u91CD\u65B0\u542F\u52A8\u540E\u5C31\u6D88\u5931\u4E86\u3002

\u5982\u679C\u60A8\u6B63\u5728\u8003\u8651\u5728\u4EE3\u7801\u4E2D\u6DFB\u52A0\u4E00\u4E9B\u65E5\u5FD7\u4EE5\u5E2E\u52A9\u89E3\u51B3\u95EE\u9898\uFF0C\u60A8\u5C06\u5FC5\u987B\u7ECF\u5386\u4EE5\u4E0B\u9636\u6BB5\uFF1A\u6D4B\u8BD5\u3001\u9884\u53D1\uFF0C\u7136\u540E\u751F\u4EA7\u3002\u8FD9\u79CD\u65B9\u6CD5\u6548\u7387\u4F4E\u4E0B\uFF0C\u66F4\u7CDF\u7CD5\u7684\u662F\uFF0C\u8BE5\u95EE\u9898\u53EF\u80FD\u65E0\u6CD5\u89E3\u51B3\uFF0C\u56E0\u4E3A\u4E00\u65E6 JVM \u91CD\u65B0\u542F\u52A8\uFF0C\u5B83\u53EF\u80FD\u65E0\u6CD5\u590D\u73B0\uFF0C\u5982\u4E0A\u6587\u6240\u8FF0\u3002

Arthas \u65E8\u5728\u89E3\u51B3\u8FD9\u4E9B\u95EE\u9898\u3002\u5F00\u53D1\u4EBA\u5458\u53EF\u4EE5\u5728\u7EBF\u89E3\u51B3\u751F\u4EA7\u95EE\u9898\u3002\u65E0\u9700 JVM \u91CD\u542F\uFF0C\u65E0\u9700\u4EE3\u7801\u66F4\u6539\u3002 Arthas \u4F5C\u4E3A\u89C2\u5BDF\u8005\u6C38\u8FDC\u4E0D\u4F1A\u6682\u505C\u6B63\u5728\u8FD0\u884C\u7684\u7EBF\u7A0B\u3002

Arthas\uFF08\u963F\u5C14\u8428\u65AF\uFF09\u80FD\u4E3A\u4F60\u505A\u4EC0\u4E48\uFF1F

Arthas \u662F Alibaba \u5F00\u6E90\u7684 Java \u8BCA\u65AD\u5DE5\u5177\uFF0C\u6DF1\u53D7\u5F00\u53D1\u8005\u559C\u7231\u3002

\u5F53\u4F60\u9047\u5230\u4EE5\u4E0B\u7C7B\u4F3C\u95EE\u9898\u800C\u675F\u624B\u65E0\u7B56\u65F6\uFF0CArthas\u53EF\u4EE5\u5E2E\u52A9\u4F60\u89E3\u51B3\uFF1A

  1. \u8FD9\u4E2A\u7C7B\u4ECE\u54EA\u4E2A jar \u5305\u52A0\u8F7D\u7684\uFF1F\u4E3A\u4EC0\u4E48\u4F1A\u62A5\u5404\u79CD\u7C7B\u76F8\u5173\u7684 Exception\uFF1F
  2. \u6211\u6539\u7684\u4EE3\u7801\u4E3A\u4EC0\u4E48\u6CA1\u6709\u6267\u884C\u5230\uFF1F\u96BE\u9053\u662F\u6211\u6CA1 commit\uFF1F\u5206\u652F\u641E\u9519\u4E86\uFF1F
  3. \u9047\u5230\u95EE\u9898\u65E0\u6CD5\u5728\u7EBF\u4E0A debug\uFF0C\u96BE\u9053\u53EA\u80FD\u901A\u8FC7\u52A0\u65E5\u5FD7\u518D\u91CD\u65B0\u53D1\u5E03\u5417\uFF1F
  4. \u7EBF\u4E0A\u9047\u5230\u67D0\u4E2A\u7528\u6237\u7684\u6570\u636E\u5904\u7406\u6709\u95EE\u9898\uFF0C\u4F46\u7EBF\u4E0A\u540C\u6837\u65E0\u6CD5 debug\uFF0C\u7EBF\u4E0B\u65E0\u6CD5\u91CD\u73B0\uFF01
  5. \u662F\u5426\u6709\u4E00\u4E2A\u5168\u5C40\u89C6\u89D2\u6765\u67E5\u770B\u7CFB\u7EDF\u7684\u8FD0\u884C\u72B6\u51B5\uFF1F
  6. \u6709\u4EC0\u4E48\u529E\u6CD5\u53EF\u4EE5\u76D1\u63A7\u5230 JVM \u7684\u5B9E\u65F6\u8FD0\u884C\u72B6\u6001\uFF1F
  7. \u600E\u4E48\u5FEB\u901F\u5B9A\u4F4D\u5E94\u7528\u7684\u70ED\u70B9\uFF0C\u751F\u6210\u706B\u7130\u56FE\uFF1F
  8. \u600E\u6837\u76F4\u63A5\u4ECE JVM \u5185\u67E5\u627E\u67D0\u4E2A\u7C7B\u7684\u5B9E\u4F8B\uFF1F

Arthas 4.x \u652F\u6301 JDK 8+\uFF0C\u5305\u62EC JDK 17\u3001JDK 21 \u548C JDK 25\uFF0C\u652F\u6301 Linux/Mac/Windows\uFF0C\u91C7\u7528\u547D\u4EE4\u884C\u4EA4\u4E92\u6A21\u5F0F\uFF0C\u540C\u65F6\u63D0\u4F9B\u4E30\u5BCC\u7684 Tab \u81EA\u52A8\u8865\u5168\u529F\u80FD\uFF0C\u8FDB\u4E00\u6B65\u65B9\u4FBF\u8FDB\u884C\u95EE\u9898\u7684\u5B9A\u4F4D\u548C\u8BCA\u65AD\u3002

',13),p=a("\u5982\u679C\u60A8\u5728\u4F7F\u7528 Arthas\uFF0C\u8BF7\u8BA9\u6211\u4EEC\u77E5\u9053\uFF0C\u60A8\u7684\u4F7F\u7528\u5BF9\u6211\u4EEC\u975E\u5E38\u91CD\u8981\uFF1A"),_={href:"https://github.com/alibaba/arthas/issues/111",target:"_blank",rel:"noopener noreferrer"},u=a("\u67E5\u770B"),b=e("h2",{id:"contributors",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#contributors","aria-hidden":"true"},"#"),a(" Contributors")],-1),m={href:"https://github.com/alibaba/arthas/graphs/contributors",target:"_blank",rel:"noopener noreferrer"},f=e("img",{src:"https://opencollective.com/arthas/contributors.svg?width=890&button=false",alt:""},null,-1);function x(g,A){const t=h("ExternalLinkIcon");return i(),n("div",null,[d,e("p",null,[e("strong",null,[p,e("a",_,[u,r(t)])])]),b,e("p",null,[e("a",m,[f,r(t)])])])}const k=s(l,[["render",x],["__file","index.html.vue"]]);export{k as default}; +import{_ as o}from"./arthas.b23d3e5a.js";import{_ as s,o as i,c as n,a as e,b as r,d as c,e as a,r as h}from"./app.e2427bec.js";const l={},d=c('

\u7B80\u4ECB

Arthas \u662F\u4E00\u6B3E\u7EBF\u4E0A\u76D1\u63A7\u8BCA\u65AD\u4EA7\u54C1\uFF0C\u901A\u8FC7\u5168\u5C40\u89C6\u89D2\u5B9E\u65F6\u67E5\u770B\u5E94\u7528 load\u3001\u5185\u5B58\u3001gc\u3001\u7EBF\u7A0B\u7684\u72B6\u6001\u4FE1\u606F\uFF0C\u5E76\u80FD\u5728\u4E0D\u4FEE\u6539\u5E94\u7528\u4EE3\u7801\u7684\u60C5\u51B5\u4E0B\uFF0C\u5BF9\u4E1A\u52A1\u95EE\u9898\u8FDB\u884C\u8BCA\u65AD\uFF0C\u5305\u62EC\u67E5\u770B\u65B9\u6CD5\u8C03\u7528\u7684\u51FA\u5165\u53C2\u3001\u5F02\u5E38\uFF0C\u76D1\u6D4B\u65B9\u6CD5\u6267\u884C\u8017\u65F6\uFF0C\u7C7B\u52A0\u8F7D\u4FE1\u606F\u7B49\uFF0C\u5927\u5927\u63D0\u5347\u7EBF\u4E0A\u95EE\u9898\u6392\u67E5\u6548\u7387\u3002

\u80CC\u666F

\u901A\u5E38\uFF0C\u672C\u5730\u5F00\u53D1\u73AF\u5883\u65E0\u6CD5\u8BBF\u95EE\u751F\u4EA7\u73AF\u5883\u3002\u5982\u679C\u5728\u751F\u4EA7\u73AF\u5883\u4E2D\u9047\u5230\u95EE\u9898\uFF0C\u5219\u65E0\u6CD5\u4F7F\u7528 IDE \u8FDC\u7A0B\u8C03\u8BD5\u3002\u66F4\u7CDF\u7CD5\u7684\u662F\uFF0C\u5728\u751F\u4EA7\u73AF\u5883\u4E2D\u8C03\u8BD5\u662F\u4E0D\u53EF\u63A5\u53D7\u7684\uFF0C\u56E0\u4E3A\u5B83\u4F1A\u6682\u505C\u6240\u6709\u7EBF\u7A0B\uFF0C\u5BFC\u81F4\u670D\u52A1\u6682\u505C\u3002

\u5F00\u53D1\u4EBA\u5458\u53EF\u4EE5\u5C1D\u8BD5\u5728\u6D4B\u8BD5\u73AF\u5883\u6216\u8005\u9884\u53D1\u73AF\u5883\u4E2D\u590D\u73B0\u751F\u4EA7\u73AF\u5883\u4E2D\u7684\u95EE\u9898\u3002\u4F46\u662F\uFF0C\u67D0\u4E9B\u95EE\u9898\u65E0\u6CD5\u5728\u4E0D\u540C\u7684\u73AF\u5883\u4E2D\u8F7B\u677E\u590D\u73B0\uFF0C\u751A\u81F3\u5728\u91CD\u65B0\u542F\u52A8\u540E\u5C31\u6D88\u5931\u4E86\u3002

\u5982\u679C\u60A8\u6B63\u5728\u8003\u8651\u5728\u4EE3\u7801\u4E2D\u6DFB\u52A0\u4E00\u4E9B\u65E5\u5FD7\u4EE5\u5E2E\u52A9\u89E3\u51B3\u95EE\u9898\uFF0C\u60A8\u5C06\u5FC5\u987B\u7ECF\u5386\u4EE5\u4E0B\u9636\u6BB5\uFF1A\u6D4B\u8BD5\u3001\u9884\u53D1\uFF0C\u7136\u540E\u751F\u4EA7\u3002\u8FD9\u79CD\u65B9\u6CD5\u6548\u7387\u4F4E\u4E0B\uFF0C\u66F4\u7CDF\u7CD5\u7684\u662F\uFF0C\u8BE5\u95EE\u9898\u53EF\u80FD\u65E0\u6CD5\u89E3\u51B3\uFF0C\u56E0\u4E3A\u4E00\u65E6 JVM \u91CD\u65B0\u542F\u52A8\uFF0C\u5B83\u53EF\u80FD\u65E0\u6CD5\u590D\u73B0\uFF0C\u5982\u4E0A\u6587\u6240\u8FF0\u3002

Arthas \u65E8\u5728\u89E3\u51B3\u8FD9\u4E9B\u95EE\u9898\u3002\u5F00\u53D1\u4EBA\u5458\u53EF\u4EE5\u5728\u7EBF\u89E3\u51B3\u751F\u4EA7\u95EE\u9898\u3002\u65E0\u9700 JVM \u91CD\u542F\uFF0C\u65E0\u9700\u4EE3\u7801\u66F4\u6539\u3002 Arthas \u4F5C\u4E3A\u89C2\u5BDF\u8005\u6C38\u8FDC\u4E0D\u4F1A\u6682\u505C\u6B63\u5728\u8FD0\u884C\u7684\u7EBF\u7A0B\u3002

Arthas\uFF08\u963F\u5C14\u8428\u65AF\uFF09\u80FD\u4E3A\u4F60\u505A\u4EC0\u4E48\uFF1F

Arthas \u662F Alibaba \u5F00\u6E90\u7684 Java \u8BCA\u65AD\u5DE5\u5177\uFF0C\u6DF1\u53D7\u5F00\u53D1\u8005\u559C\u7231\u3002

\u5F53\u4F60\u9047\u5230\u4EE5\u4E0B\u7C7B\u4F3C\u95EE\u9898\u800C\u675F\u624B\u65E0\u7B56\u65F6\uFF0CArthas\u53EF\u4EE5\u5E2E\u52A9\u4F60\u89E3\u51B3\uFF1A

  1. \u8FD9\u4E2A\u7C7B\u4ECE\u54EA\u4E2A jar \u5305\u52A0\u8F7D\u7684\uFF1F\u4E3A\u4EC0\u4E48\u4F1A\u62A5\u5404\u79CD\u7C7B\u76F8\u5173\u7684 Exception\uFF1F
  2. \u6211\u6539\u7684\u4EE3\u7801\u4E3A\u4EC0\u4E48\u6CA1\u6709\u6267\u884C\u5230\uFF1F\u96BE\u9053\u662F\u6211\u6CA1 commit\uFF1F\u5206\u652F\u641E\u9519\u4E86\uFF1F
  3. \u9047\u5230\u95EE\u9898\u65E0\u6CD5\u5728\u7EBF\u4E0A debug\uFF0C\u96BE\u9053\u53EA\u80FD\u901A\u8FC7\u52A0\u65E5\u5FD7\u518D\u91CD\u65B0\u53D1\u5E03\u5417\uFF1F
  4. \u7EBF\u4E0A\u9047\u5230\u67D0\u4E2A\u7528\u6237\u7684\u6570\u636E\u5904\u7406\u6709\u95EE\u9898\uFF0C\u4F46\u7EBF\u4E0A\u540C\u6837\u65E0\u6CD5 debug\uFF0C\u7EBF\u4E0B\u65E0\u6CD5\u91CD\u73B0\uFF01
  5. \u662F\u5426\u6709\u4E00\u4E2A\u5168\u5C40\u89C6\u89D2\u6765\u67E5\u770B\u7CFB\u7EDF\u7684\u8FD0\u884C\u72B6\u51B5\uFF1F
  6. \u6709\u4EC0\u4E48\u529E\u6CD5\u53EF\u4EE5\u76D1\u63A7\u5230 JVM \u7684\u5B9E\u65F6\u8FD0\u884C\u72B6\u6001\uFF1F
  7. \u600E\u4E48\u5FEB\u901F\u5B9A\u4F4D\u5E94\u7528\u7684\u70ED\u70B9\uFF0C\u751F\u6210\u706B\u7130\u56FE\uFF1F
  8. \u600E\u6837\u76F4\u63A5\u4ECE JVM \u5185\u67E5\u627E\u67D0\u4E2A\u7C7B\u7684\u5B9E\u4F8B\uFF1F

Arthas 4.x \u652F\u6301 JDK 8+\uFF0C\u5305\u62EC JDK 17\u3001JDK 21 \u548C JDK 25\uFF0C\u652F\u6301 Linux/Mac/Windows\uFF0C\u91C7\u7528\u547D\u4EE4\u884C\u4EA4\u4E92\u6A21\u5F0F\uFF0C\u540C\u65F6\u63D0\u4F9B\u4E30\u5BCC\u7684 Tab \u81EA\u52A8\u8865\u5168\u529F\u80FD\uFF0C\u8FDB\u4E00\u6B65\u65B9\u4FBF\u8FDB\u884C\u95EE\u9898\u7684\u5B9A\u4F4D\u548C\u8BCA\u65AD\u3002

',13),p=a("\u5982\u679C\u60A8\u5728\u4F7F\u7528 Arthas\uFF0C\u8BF7\u8BA9\u6211\u4EEC\u77E5\u9053\uFF0C\u60A8\u7684\u4F7F\u7528\u5BF9\u6211\u4EEC\u975E\u5E38\u91CD\u8981\uFF1A"),_={href:"https://github.com/alibaba/arthas/issues/111",target:"_blank",rel:"noopener noreferrer"},u=a("\u67E5\u770B"),b=e("h2",{id:"contributors",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#contributors","aria-hidden":"true"},"#"),a(" Contributors")],-1),m={href:"https://github.com/alibaba/arthas/graphs/contributors",target:"_blank",rel:"noopener noreferrer"},f=e("img",{src:"https://opencollective.com/arthas/contributors.svg?width=890&button=false",alt:""},null,-1);function x(g,A){const t=h("ExternalLinkIcon");return i(),n("div",null,[d,e("p",null,[e("strong",null,[p,e("a",_,[u,r(t)])])]),b,e("p",null,[e("a",m,[f,r(t)])])])}const k=s(l,[["render",x],["__file","index.html.vue"]]);export{k as default}; diff --git a/assets/index.html.7f2e8ca4.js b/assets/index.html.787b4b50.js similarity index 88% rename from assets/index.html.7f2e8ca4.js rename to assets/index.html.787b4b50.js index 9b0702e93..87d73b0ae 100644 --- a/assets/index.html.7f2e8ca4.js +++ b/assets/index.html.787b4b50.js @@ -1 +1 @@ -const t=JSON.parse('{"key":"v-7445f070","path":"/doc/","title":"\u7B80\u4ECB","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u80CC\u666F","slug":"\u80CC\u666F","link":"#\u80CC\u666F","children":[]},{"level":2,"title":"Arthas\uFF08\u963F\u5C14\u8428\u65AF\uFF09\u80FD\u4E3A\u4F60\u505A\u4EC0\u4E48\uFF1F","slug":"arthas-\u963F\u5C14\u8428\u65AF-\u80FD\u4E3A\u4F60\u505A\u4EC0\u4E48","link":"#arthas-\u963F\u5C14\u8428\u65AF-\u80FD\u4E3A\u4F60\u505A\u4EC0\u4E48","children":[]},{"level":2,"title":"Contributors","slug":"contributors","link":"#contributors","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/README.md","version":"4.3.3"}');export{t as data}; +const t=JSON.parse('{"key":"v-7445f070","path":"/doc/","title":"\u7B80\u4ECB","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u80CC\u666F","slug":"\u80CC\u666F","link":"#\u80CC\u666F","children":[]},{"level":2,"title":"Arthas\uFF08\u963F\u5C14\u8428\u65AF\uFF09\u80FD\u4E3A\u4F60\u505A\u4EC0\u4E48\uFF1F","slug":"arthas-\u963F\u5C14\u8428\u65AF-\u80FD\u4E3A\u4F60\u505A\u4EC0\u4E48","link":"#arthas-\u963F\u5C14\u8428\u65AF-\u80FD\u4E3A\u4F60\u505A\u4EC0\u4E48","children":[]},{"level":2,"title":"Contributors","slug":"contributors","link":"#contributors","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/README.md","version":"4.3.5"}');export{t as data}; diff --git a/assets/index.html.ed9ed3a9.js b/assets/index.html.cd23e113.js similarity index 94% rename from assets/index.html.ed9ed3a9.js rename to assets/index.html.cd23e113.js index 5657f4392..02ca2593f 100644 --- a/assets/index.html.ed9ed3a9.js +++ b/assets/index.html.cd23e113.js @@ -1 +1 @@ -const e=JSON.parse(`{"key":"v-8daa1a0e","path":"/","title":"","lang":"zh-CN","frontmatter":{"home":true,"heroImage":"/images/arthas_light.png","heroImageDark":"/images/arthas_dark.png","heroText":null,"tagline":"Java \u5E94\u7528\u8BCA\u65AD\u5229\u5668","actions":[{"text":"\u5FEB\u901F\u5165\u95E8","link":"/doc/quick-start.html","type":"primary"},{"text":"\u67E5\u770Bgithub","link":"https://github.com/alibaba/arthas","type":"secondary"}],"features":[{"icon":"\u{1F5A5}","title":"Dashboard","details":"\u5B9E\u65F6\u67E5\u770B\u7CFB\u7EDF\u7684\u8FD0\u884C\u72B6\u51B5\u3002"},{"icon":"\u{1F52C}","title":"\u67E5\u770B\u5165\u53C2/\u8FD4\u56DE\u503C/\u5F02\u5E38","details":"\u67E5\u770B\u51FD\u6570\u8C03\u7528\u7684\u53C2\u6570\uFF0C\u8FD4\u56DE\u503C\u548C\u5F02\u5E38\u3002"},{"icon":"\u{1F529}","title":"\u5728\u7EBF\u70ED\u66F4\u65B0","details":"jad/sc/redefine \u4E00\u6761\u9F99\u70ED\u66F4\u65B0\u4EE3\u7801\u3002"},{"icon":"\u{1FA7A}","title":"\u7C7B\u51B2\u7A81","details":"\u79D2\u89E3\u7C7B\u51B2\u7A81\u95EE\u9898\uFF0C\u5B9A\u4F4D\u7C7B\u52A0\u8F7D\u8DEF\u5F84\u3002"},{"icon":"\u26A1\uFE0F","title":"\u6027\u80FD\u70ED\u70B9","details":"\u5FEB\u901F\u5B9A\u4F4D\u5E94\u7528\u7684\u70ED\u70B9\uFF0C\u751F\u6210\u706B\u7130\u56FE\u3002"},{"icon":"\u{1F4E1}","title":"WebConsole","details":"\u5728\u7EBF\u8BCA\u65AD\uFF0C\u70B9\u5F00\u7F51\u9875\u8BCA\u65AD\u7EBF\u4E0A\u5E94\u7528\u3002"}],"users_title":"\u7528\u6237","users_details":"\u8BF7\u5728 Wanted: who's using arthas \u4E0A\u63D0\u4F9B\u4FE1\u606F\u6765\u5E2E\u52A9Arthas\u505A\u7684\u66F4\u597D\u3002","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"},"excerpt":"","headers":[],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"README.md","version":"4.3.3"}`);export{e as data}; +const e=JSON.parse(`{"key":"v-8daa1a0e","path":"/","title":"","lang":"zh-CN","frontmatter":{"home":true,"heroImage":"/images/arthas_light.png","heroImageDark":"/images/arthas_dark.png","heroText":null,"tagline":"Java \u5E94\u7528\u8BCA\u65AD\u5229\u5668","actions":[{"text":"\u5FEB\u901F\u5165\u95E8","link":"/doc/quick-start.html","type":"primary"},{"text":"\u67E5\u770Bgithub","link":"https://github.com/alibaba/arthas","type":"secondary"}],"features":[{"icon":"\u{1F5A5}","title":"Dashboard","details":"\u5B9E\u65F6\u67E5\u770B\u7CFB\u7EDF\u7684\u8FD0\u884C\u72B6\u51B5\u3002"},{"icon":"\u{1F52C}","title":"\u67E5\u770B\u5165\u53C2/\u8FD4\u56DE\u503C/\u5F02\u5E38","details":"\u67E5\u770B\u51FD\u6570\u8C03\u7528\u7684\u53C2\u6570\uFF0C\u8FD4\u56DE\u503C\u548C\u5F02\u5E38\u3002"},{"icon":"\u{1F529}","title":"\u5728\u7EBF\u70ED\u66F4\u65B0","details":"jad/sc/redefine \u4E00\u6761\u9F99\u70ED\u66F4\u65B0\u4EE3\u7801\u3002"},{"icon":"\u{1FA7A}","title":"\u7C7B\u51B2\u7A81","details":"\u79D2\u89E3\u7C7B\u51B2\u7A81\u95EE\u9898\uFF0C\u5B9A\u4F4D\u7C7B\u52A0\u8F7D\u8DEF\u5F84\u3002"},{"icon":"\u26A1\uFE0F","title":"\u6027\u80FD\u70ED\u70B9","details":"\u5FEB\u901F\u5B9A\u4F4D\u5E94\u7528\u7684\u70ED\u70B9\uFF0C\u751F\u6210\u706B\u7130\u56FE\u3002"},{"icon":"\u{1F4E1}","title":"WebConsole","details":"\u5728\u7EBF\u8BCA\u65AD\uFF0C\u70B9\u5F00\u7F51\u9875\u8BCA\u65AD\u7EBF\u4E0A\u5E94\u7528\u3002"}],"users_title":"\u7528\u6237","users_details":"\u8BF7\u5728 Wanted: who's using arthas \u4E0A\u63D0\u4F9B\u4FE1\u606F\u6765\u5E2E\u52A9Arthas\u505A\u7684\u66F4\u597D\u3002","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"},"excerpt":"","headers":[],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"README.md","version":"4.3.5"}`);export{e as data}; diff --git a/assets/index.html.8cbf0aa1.js b/assets/index.html.e6b12e55.js similarity index 83% rename from assets/index.html.8cbf0aa1.js rename to assets/index.html.e6b12e55.js index e4c4577ac..b7313968b 100644 --- a/assets/index.html.8cbf0aa1.js +++ b/assets/index.html.e6b12e55.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-07555a84","path":"/en/doc/","title":"Introduction","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Background","slug":"background","link":"#background","children":[]},{"level":2,"title":"Key features","slug":"key-features","link":"#key-features","children":[]},{"level":2,"title":"Contributors","slug":"contributors","link":"#contributors","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/README.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-07555a84","path":"/en/doc/","title":"Introduction","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Background","slug":"background","link":"#background","children":[]},{"level":2,"title":"Key features","slug":"key-features","link":"#key-features","children":[]},{"level":2,"title":"Contributors","slug":"contributors","link":"#contributors","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/README.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/install-detail.html.43202623.js b/assets/install-detail.html.041805f1.js similarity index 99% rename from assets/install-detail.html.43202623.js rename to assets/install-detail.html.041805f1.js index cf7ec12f0..2212693e3 100644 --- a/assets/install-detail.html.43202623.js +++ b/assets/install-detail.html.041805f1.js @@ -1,4 +1,4 @@ -import{_ as r,o as l,c as d,a,b as s,w as c,d as n,e,r as i}from"./app.524ecf5c.js";const h={},u=n(`

Install Arthas

Quick installation

Downloadarthas-boot.jar\uFF0CStart with java command:

curl -O https://arthas.aliyun.com/arthas-boot.jar
+import{_ as r,o as l,c as d,a,b as s,w as c,d as n,e,r as i}from"./app.e2427bec.js";const h={},u=n(`

Install Arthas

Quick installation

Downloadarthas-boot.jar\uFF0CStart with java command:

curl -O https://arthas.aliyun.com/arthas-boot.jar
 java -jar arthas-boot.jar
 

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:

curl -L https://arthas.aliyun.com/install.sh | sh
diff --git a/assets/install-detail.html.0520b8fe.js b/assets/install-detail.html.40e05e2a.js
similarity index 99%
rename from assets/install-detail.html.0520b8fe.js
rename to assets/install-detail.html.40e05e2a.js
index 12cf94cce..7e6c27f54 100644
--- a/assets/install-detail.html.0520b8fe.js
+++ b/assets/install-detail.html.40e05e2a.js
@@ -1,4 +1,4 @@
-import{_ as d,o as l,c as o,a,b as s,w as c,d as r,e,r as t}from"./app.524ecf5c.js";const h={},p=r(`

Arthas Install

\u5FEB\u901F\u5B89\u88C5

\u4F7F\u7528arthas-boot\uFF08\u63A8\u8350\uFF09

\u4E0B\u8F7Darthas-boot.jar\uFF0C\u7136\u540E\u7528java -jar\u7684\u65B9\u5F0F\u542F\u52A8\uFF1A

curl -O https://arthas.aliyun.com/arthas-boot.jar
+import{_ as d,o as l,c as o,a,b as s,w as c,d as r,e,r as t}from"./app.e2427bec.js";const h={},p=r(`

Arthas Install

\u5FEB\u901F\u5B89\u88C5

\u4F7F\u7528arthas-boot\uFF08\u63A8\u8350\uFF09

\u4E0B\u8F7Darthas-boot.jar\uFF0C\u7136\u540E\u7528java -jar\u7684\u65B9\u5F0F\u542F\u52A8\uFF1A

curl -O https://arthas.aliyun.com/arthas-boot.jar
 java -jar arthas-boot.jar
 

\u6253\u5370\u5E2E\u52A9\u4FE1\u606F\uFF1A

java -jar arthas-boot.jar -h
 
  • \u5982\u679C\u4E0B\u8F7D\u901F\u5EA6\u6BD4\u8F83\u6162\uFF0C\u53EF\u4EE5\u4F7F\u7528 aliyun \u7684\u955C\u50CF\uFF1A

    java -jar arthas-boot.jar --repo-mirror aliyun
    diff --git a/assets/install-detail.html.624d7b63.js b/assets/install-detail.html.743978fa.js
    similarity index 92%
    rename from assets/install-detail.html.624d7b63.js
    rename to assets/install-detail.html.743978fa.js
    index 0150ed617..214638bd0 100644
    --- a/assets/install-detail.html.624d7b63.js
    +++ b/assets/install-detail.html.743978fa.js
    @@ -1 +1 @@
    -const l=JSON.parse('{"key":"v-319f48f2","path":"/en/doc/install-detail.html","title":"Install Arthas","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Quick installation","slug":"quick-installation","link":"#quick-installation","children":[{"level":3,"title":"Use arthas-boot(Recommended)","slug":"use-arthas-boot-recommended","link":"#use-arthas-boot-recommended","children":[]},{"level":3,"title":"Use as.sh","slug":"use-as-sh","link":"#use-as-sh","children":[]}]},{"level":2,"title":"Full installation","slug":"full-installation","link":"#full-installation","children":[]},{"level":2,"title":"Manual Installation","slug":"manual-installation","link":"#manual-installation","children":[]},{"level":2,"title":"Installation via Packages","slug":"installation-via-packages","link":"#installation-via-packages","children":[{"level":3,"title":"Instruction for Debian based systems","slug":"instruction-for-debian-based-systems","link":"#instruction-for-debian-based-systems","children":[]},{"level":3,"title":"Instruction for Fedora based systems","slug":"instruction-for-fedora-based-systems","link":"#instruction-for-fedora-based-systems","children":[]},{"level":3,"title":"Usage","slug":"usage","link":"#usage","children":[]}]},{"level":2,"title":"Offline Help Documentation","slug":"offline-help-documentation","link":"#offline-help-documentation","children":[]},{"level":2,"title":"Uninstall","slug":"uninstall","link":"#uninstall","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/install-detail.md","version":"4.3.3"}');export{l as data};
    +const l=JSON.parse('{"key":"v-319f48f2","path":"/en/doc/install-detail.html","title":"Install Arthas","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Quick installation","slug":"quick-installation","link":"#quick-installation","children":[{"level":3,"title":"Use arthas-boot(Recommended)","slug":"use-arthas-boot-recommended","link":"#use-arthas-boot-recommended","children":[]},{"level":3,"title":"Use as.sh","slug":"use-as-sh","link":"#use-as-sh","children":[]}]},{"level":2,"title":"Full installation","slug":"full-installation","link":"#full-installation","children":[]},{"level":2,"title":"Manual Installation","slug":"manual-installation","link":"#manual-installation","children":[]},{"level":2,"title":"Installation via Packages","slug":"installation-via-packages","link":"#installation-via-packages","children":[{"level":3,"title":"Instruction for Debian based systems","slug":"instruction-for-debian-based-systems","link":"#instruction-for-debian-based-systems","children":[]},{"level":3,"title":"Instruction for Fedora based systems","slug":"instruction-for-fedora-based-systems","link":"#instruction-for-fedora-based-systems","children":[]},{"level":3,"title":"Usage","slug":"usage","link":"#usage","children":[]}]},{"level":2,"title":"Offline Help Documentation","slug":"offline-help-documentation","link":"#offline-help-documentation","children":[]},{"level":2,"title":"Uninstall","slug":"uninstall","link":"#uninstall","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/install-detail.md","version":"4.3.5"}');export{l as data};
    diff --git a/assets/install-detail.html.c1229dbb.js b/assets/install-detail.html.93881ff8.js
    similarity index 95%
    rename from assets/install-detail.html.c1229dbb.js
    rename to assets/install-detail.html.93881ff8.js
    index a8c1f6045..778f20c23 100644
    --- a/assets/install-detail.html.c1229dbb.js
    +++ b/assets/install-detail.html.93881ff8.js
    @@ -1 +1 @@
    -const l=JSON.parse('{"key":"v-0cb398f4","path":"/doc/install-detail.html","title":"Arthas Install","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u5FEB\u901F\u5B89\u88C5","slug":"\u5FEB\u901F\u5B89\u88C5","link":"#\u5FEB\u901F\u5B89\u88C5","children":[{"level":3,"title":"\u4F7F\u7528arthas-boot\uFF08\u63A8\u8350\uFF09","slug":"\u4F7F\u7528arthas-boot-\u63A8\u8350","link":"#\u4F7F\u7528arthas-boot-\u63A8\u8350","children":[]},{"level":3,"title":"\u4F7F\u7528as.sh","slug":"\u4F7F\u7528as-sh","link":"#\u4F7F\u7528as-sh","children":[]}]},{"level":2,"title":"\u5168\u91CF\u5B89\u88C5","slug":"\u5168\u91CF\u5B89\u88C5","link":"#\u5168\u91CF\u5B89\u88C5","children":[]},{"level":2,"title":"\u624B\u52A8\u5B89\u88C5","slug":"\u624B\u52A8\u5B89\u88C5","link":"#\u624B\u52A8\u5B89\u88C5","children":[]},{"level":2,"title":"\u901A\u8FC7 rpm/deb \u6765\u5B89\u88C5","slug":"\u901A\u8FC7-rpm-deb-\u6765\u5B89\u88C5","link":"#\u901A\u8FC7-rpm-deb-\u6765\u5B89\u88C5","children":[{"level":3,"title":"\u5B89\u88C5 deb","slug":"\u5B89\u88C5-deb","link":"#\u5B89\u88C5-deb","children":[]},{"level":3,"title":"\u5B89\u88C5 rpm","slug":"\u5B89\u88C5-rpm","link":"#\u5B89\u88C5-rpm","children":[]},{"level":3,"title":"deb/rpm \u5B89\u88C5\u7684\u7528\u6CD5","slug":"deb-rpm-\u5B89\u88C5\u7684\u7528\u6CD5","link":"#deb-rpm-\u5B89\u88C5\u7684\u7528\u6CD5","children":[]}]},{"level":2,"title":"\u901A\u8FC7 Cloud Toolkit \u63D2\u4EF6\u4F7F\u7528 Arthas","slug":"\u901A\u8FC7-cloud-toolkit-\u63D2\u4EF6\u4F7F\u7528-arthas","link":"#\u901A\u8FC7-cloud-toolkit-\u63D2\u4EF6\u4F7F\u7528-arthas","children":[]},{"level":2,"title":"\u79BB\u7EBF\u5E2E\u52A9\u6587\u6863","slug":"\u79BB\u7EBF\u5E2E\u52A9\u6587\u6863","link":"#\u79BB\u7EBF\u5E2E\u52A9\u6587\u6863","children":[]},{"level":2,"title":"\u5378\u8F7D","slug":"\u5378\u8F7D","link":"#\u5378\u8F7D","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/install-detail.md","version":"4.3.3"}');export{l as data};
    +const l=JSON.parse('{"key":"v-0cb398f4","path":"/doc/install-detail.html","title":"Arthas Install","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u5FEB\u901F\u5B89\u88C5","slug":"\u5FEB\u901F\u5B89\u88C5","link":"#\u5FEB\u901F\u5B89\u88C5","children":[{"level":3,"title":"\u4F7F\u7528arthas-boot\uFF08\u63A8\u8350\uFF09","slug":"\u4F7F\u7528arthas-boot-\u63A8\u8350","link":"#\u4F7F\u7528arthas-boot-\u63A8\u8350","children":[]},{"level":3,"title":"\u4F7F\u7528as.sh","slug":"\u4F7F\u7528as-sh","link":"#\u4F7F\u7528as-sh","children":[]}]},{"level":2,"title":"\u5168\u91CF\u5B89\u88C5","slug":"\u5168\u91CF\u5B89\u88C5","link":"#\u5168\u91CF\u5B89\u88C5","children":[]},{"level":2,"title":"\u624B\u52A8\u5B89\u88C5","slug":"\u624B\u52A8\u5B89\u88C5","link":"#\u624B\u52A8\u5B89\u88C5","children":[]},{"level":2,"title":"\u901A\u8FC7 rpm/deb \u6765\u5B89\u88C5","slug":"\u901A\u8FC7-rpm-deb-\u6765\u5B89\u88C5","link":"#\u901A\u8FC7-rpm-deb-\u6765\u5B89\u88C5","children":[{"level":3,"title":"\u5B89\u88C5 deb","slug":"\u5B89\u88C5-deb","link":"#\u5B89\u88C5-deb","children":[]},{"level":3,"title":"\u5B89\u88C5 rpm","slug":"\u5B89\u88C5-rpm","link":"#\u5B89\u88C5-rpm","children":[]},{"level":3,"title":"deb/rpm \u5B89\u88C5\u7684\u7528\u6CD5","slug":"deb-rpm-\u5B89\u88C5\u7684\u7528\u6CD5","link":"#deb-rpm-\u5B89\u88C5\u7684\u7528\u6CD5","children":[]}]},{"level":2,"title":"\u901A\u8FC7 Cloud Toolkit \u63D2\u4EF6\u4F7F\u7528 Arthas","slug":"\u901A\u8FC7-cloud-toolkit-\u63D2\u4EF6\u4F7F\u7528-arthas","link":"#\u901A\u8FC7-cloud-toolkit-\u63D2\u4EF6\u4F7F\u7528-arthas","children":[]},{"level":2,"title":"\u79BB\u7EBF\u5E2E\u52A9\u6587\u6863","slug":"\u79BB\u7EBF\u5E2E\u52A9\u6587\u6863","link":"#\u79BB\u7EBF\u5E2E\u52A9\u6587\u6863","children":[]},{"level":2,"title":"\u5378\u8F7D","slug":"\u5378\u8F7D","link":"#\u5378\u8F7D","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/install-detail.md","version":"4.3.5"}');export{l as data};
    diff --git a/assets/jad.html.acef5a50.js b/assets/jad.html.039013c5.js
    similarity index 92%
    rename from assets/jad.html.acef5a50.js
    rename to assets/jad.html.039013c5.js
    index 2cf4439a0..42e0e30b6 100644
    --- a/assets/jad.html.acef5a50.js
    +++ b/assets/jad.html.039013c5.js
    @@ -1 +1 @@
    -const e=JSON.parse('{"key":"v-207b7d70","path":"/en/doc/jad.html","title":"jad","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Options","slug":"options","link":"#options","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"Decompile java.lang.String","slug":"decompile-java-lang-string","link":"#decompile-java-lang-string","children":[]},{"level":3,"title":"Print source only","slug":"print-source-only","link":"#print-source-only","children":[]},{"level":3,"title":"Decompile the specified method","slug":"decompile-the-specified-method","link":"#decompile-the-specified-method","children":[]},{"level":3,"title":"Do not print line numbers","slug":"do-not-print-line-numbers","link":"#do-not-print-line-numbers","children":[]},{"level":3,"title":"Decompile with specified classLoader","slug":"decompile-with-specified-classloader","link":"#decompile-with-specified-classloader","children":[]},{"level":3,"title":"Decompile with specified directory for dumpping class","slug":"decompile-with-specified-directory-for-dumpping-class","link":"#decompile-with-specified-directory-for-dumpping-class","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/jad.md","version":"4.3.3"}');export{e as data};
    +const e=JSON.parse('{"key":"v-207b7d70","path":"/en/doc/jad.html","title":"jad","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Options","slug":"options","link":"#options","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"Decompile java.lang.String","slug":"decompile-java-lang-string","link":"#decompile-java-lang-string","children":[]},{"level":3,"title":"Print source only","slug":"print-source-only","link":"#print-source-only","children":[]},{"level":3,"title":"Decompile the specified method","slug":"decompile-the-specified-method","link":"#decompile-the-specified-method","children":[]},{"level":3,"title":"Do not print line numbers","slug":"do-not-print-line-numbers","link":"#do-not-print-line-numbers","children":[]},{"level":3,"title":"Decompile with specified classLoader","slug":"decompile-with-specified-classloader","link":"#decompile-with-specified-classloader","children":[]},{"level":3,"title":"Decompile with specified directory for dumpping class","slug":"decompile-with-specified-directory-for-dumpping-class","link":"#decompile-with-specified-directory-for-dumpping-class","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/jad.md","version":"4.3.5"}');export{e as data};
    diff --git a/assets/jad.html.e5676fd2.js b/assets/jad.html.1626c1c4.js
    similarity index 90%
    rename from assets/jad.html.e5676fd2.js
    rename to assets/jad.html.1626c1c4.js
    index d87b98f52..b6683acdb 100644
    --- a/assets/jad.html.e5676fd2.js
    +++ b/assets/jad.html.1626c1c4.js
    @@ -1,4 +1,4 @@
    -import{_ as l,o as i,c as u,a as s,b as a,w as t,e as n,d as o,r as p}from"./app.524ecf5c.js";const r={},d=s("h1",{id:"jad",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#jad","aria-hidden":"true"},"#"),n(" jad")],-1),k={href:"https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=command-jad",target:"_blank",rel:"noopener noreferrer"},m=s("code",null,"jad",-1),v=n(" online tutorial"),h=s("div",{class:"custom-container tip"},[s("p",{class:"custom-container-title"},"TIP"),s("p",null,"Decompile the specified classes.")],-1),b=s("code",null,"jad",-1),g=n(" helps to decompile the byte code running in JVM to the source code to assist you to understand the logic behind better. If you need to download the bytecode of classes in a specific package directory in bulk, you can refer to the "),y=n("dump"),w=n(" tool for assistance."),f=o(`
    • 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

    NameSpecification
    class-patternpattern 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

    Decompile java.lang.String

    $ jad java.lang.String
    +import{_ as o,o as c,c as l,a as n,b as e,w as t,e as s,d as p,r as i}from"./app.e2427bec.js";const u={},r=n("h1",{id:"jad",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#jad","aria-hidden":"true"},"#"),s(" jad")],-1),d=n("div",{class:"custom-container tip"},[n("p",{class:"custom-container-title"},"TIP"),n("p",null,"Decompile the specified classes.")],-1),k=n("code",null,"jad",-1),m=s(" helps to decompile the byte code running in JVM to the source code to assist you to understand the logic behind better. If you need to download the bytecode of classes in a specific package directory in bulk, you can refer to the "),v=s("dump"),h=s(" tool for assistance."),b=p(`
    • 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

    NameSpecification
    class-patternpattern 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

    Decompile java.lang.String

    $ jad java.lang.String
     
     ClassLoader:
     
    @@ -31,7 +31,7 @@ import{_ as l,o as i,c as u,a as s,b as a,w as t,e as n,d as o,r as p}from"./app
     /*463*/         this.value = StringCoding.decode(charset, byArray, n, n2);
                 }
     ...
    -
    `,7),j=n("By default, the decompile result will have the "),_=s("code",null,"ClassLoader",-1),L=n(" information. With the "),x=s("code",null,"--source-only",-1),C=n(" option, you can print only the source code. Conveniently used with the "),S=n("mc"),E=n("/"),I=n("retransform"),A=n(" commands."),D=o(`
    $ jad --source-only demo.MathGame
    +
    `,7),g=s("By default, the decompile result will have the "),y=n("code",null,"ClassLoader",-1),w=s(" information. With the "),f=n("code",null,"--source-only",-1),j=s(" option, you can print only the source code. Conveniently used with the "),_=s("mc"),L=s("/"),x=s("retransform"),C=s(" commands."),S=p(`
    $ jad --source-only demo.MathGame
     /*
      * Decompiled with CFR 0_132.
      */
    @@ -117,4 +117,4 @@ $ jad orgAffect(row-cnt:1) cost in 190 ms.
     

    For classloader with only one instance, it can be specified by --classLoaderClass using class name, which is more convenient to use.

    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 <hashcode> is dynamic.

    Decompile with specified directory for dumpping class

    Decompile class with jad need to dump corresponding classes into files. The default directory for dumpping classes is the directory of log file specified in logback.xml, we can use -d/--directory to specify the directory for dummping class.

    $ jad demo.MathGame -d /tmp/jad/dump
    -
    `,14);function M(N,$){const c=p("ExternalLinkIcon"),e=p("RouterLink");return i(),u("div",null,[d,s("p",null,[s("a",k,[m,v,a(c)])]),h,s("p",null,[b,g,a(e,{to:"/en/doc/dump.html"},{default:t(()=>[y]),_:1}),w]),f,s("p",null,[j,_,L,x,C,a(e,{to:"/en/doc/mc.html"},{default:t(()=>[S]),_:1}),E,a(e,{to:"/en/doc/retransform.html"},{default:t(()=>[I]),_:1}),A]),D])}const R=l(r,[["render",M],["__file","jad.html.vue"]]);export{R as default}; +
    `,14);function E(A,D){const a=i("RouterLink");return c(),l("div",null,[r,d,n("p",null,[k,m,e(a,{to:"/en/doc/dump.html"},{default:t(()=>[v]),_:1}),h]),b,n("p",null,[g,y,w,f,j,e(a,{to:"/en/doc/mc.html"},{default:t(()=>[_]),_:1}),L,e(a,{to:"/en/doc/retransform.html"},{default:t(()=>[x]),_:1}),C]),S])}const M=o(u,[["render",E],["__file","jad.html.vue"]]);export{M as default}; diff --git a/assets/jad.html.eb7a2926.js b/assets/jad.html.2e62e37f.js similarity index 88% rename from assets/jad.html.eb7a2926.js rename to assets/jad.html.2e62e37f.js index dd35b71f1..e74180545 100644 --- a/assets/jad.html.eb7a2926.js +++ b/assets/jad.html.2e62e37f.js @@ -1,4 +1,4 @@ -import{_ as l,o as i,c as u,a as s,b as a,w as p,e as n,d as o,r as t}from"./app.524ecf5c.js";const r={},d=s("h1",{id:"jad",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#jad","aria-hidden":"true"},"#"),n(" jad")],-1),k={href:"https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=command-jad",target:"_blank",rel:"noopener noreferrer"},m=s("code",null,"jad",-1),v=n("\u5728\u7EBF\u6559\u7A0B"),b=s("div",{class:"custom-container tip"},[s("p",{class:"custom-container-title"},"\u63D0\u793A"),s("p",null,"\u53CD\u7F16\u8BD1\u6307\u5B9A\u5DF2\u52A0\u8F7D\u7C7B\u7684\u6E90\u7801")],-1),h=s("code",null,"jad",-1),g=n(" \u547D\u4EE4\u5C06 JVM \u4E2D\u5B9E\u9645\u8FD0\u884C\u7684 class \u7684 byte code \u53CD\u7F16\u8BD1\u6210 java \u4EE3\u7801\uFF0C\u4FBF\u4E8E\u4F60\u7406\u89E3\u4E1A\u52A1\u903B\u8F91\uFF1B\u5982\u9700\u6279\u91CF\u4E0B\u8F7D\u6307\u5B9A\u5305\u7684\u76EE\u5F55\u7684 class \u5B57\u8282\u7801\u53EF\u4EE5\u53C2\u8003 "),y=n("dump"),w=n("\u3002"),j=o(`
    • \u5728 Arthas Console \u4E0A\uFF0C\u53CD\u7F16\u8BD1\u51FA\u6765\u7684\u6E90\u7801\u662F\u5E26\u8BED\u6CD5\u9AD8\u4EAE\u7684\uFF0C\u9605\u8BFB\u66F4\u65B9\u4FBF
    • \u5F53\u7136\uFF0C\u53CD\u7F16\u8BD1\u51FA\u6765\u7684 java \u4EE3\u7801\u53EF\u80FD\u4F1A\u5B58\u5728\u8BED\u6CD5\u9519\u8BEF\uFF0C\u4F46\u4E0D\u5F71\u54CD\u4F60\u8FDB\u884C\u9605\u8BFB\u7406\u89E3

    \u53C2\u6570\u8BF4\u660E

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    class-pattern\u7C7B\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    [c:]\u7C7B\u6240\u5C5E ClassLoader \u7684 hashcode
    [classLoaderClass:]\u6307\u5B9A\u6267\u884C\u8868\u8FBE\u5F0F\u7684 ClassLoader \u7684 class name
    [E]\u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u4E3A\u901A\u914D\u7B26\u5339\u914D

    \u4F7F\u7528\u53C2\u8003

    \u53CD\u7F16\u8BD1java.lang.String

    $ jad java.lang.String
    +import{_ as o,o as c,c as l,a as n,b as e,w as p,e as s,d as t,r as i}from"./app.e2427bec.js";const u={},r=n("h1",{id:"jad",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#jad","aria-hidden":"true"},"#"),s(" jad")],-1),d=n("div",{class:"custom-container tip"},[n("p",{class:"custom-container-title"},"\u63D0\u793A"),n("p",null,"\u53CD\u7F16\u8BD1\u6307\u5B9A\u5DF2\u52A0\u8F7D\u7C7B\u7684\u6E90\u7801")],-1),k=n("code",null,"jad",-1),m=s(" \u547D\u4EE4\u5C06 JVM \u4E2D\u5B9E\u9645\u8FD0\u884C\u7684 class \u7684 byte code \u53CD\u7F16\u8BD1\u6210 java \u4EE3\u7801\uFF0C\u4FBF\u4E8E\u4F60\u7406\u89E3\u4E1A\u52A1\u903B\u8F91\uFF1B\u5982\u9700\u6279\u91CF\u4E0B\u8F7D\u6307\u5B9A\u5305\u7684\u76EE\u5F55\u7684 class \u5B57\u8282\u7801\u53EF\u4EE5\u53C2\u8003 "),v=s("dump"),b=s("\u3002"),h=t(`
    • \u5728 Arthas Console \u4E0A\uFF0C\u53CD\u7F16\u8BD1\u51FA\u6765\u7684\u6E90\u7801\u662F\u5E26\u8BED\u6CD5\u9AD8\u4EAE\u7684\uFF0C\u9605\u8BFB\u66F4\u65B9\u4FBF
    • \u5F53\u7136\uFF0C\u53CD\u7F16\u8BD1\u51FA\u6765\u7684 java \u4EE3\u7801\u53EF\u80FD\u4F1A\u5B58\u5728\u8BED\u6CD5\u9519\u8BEF\uFF0C\u4F46\u4E0D\u5F71\u54CD\u4F60\u8FDB\u884C\u9605\u8BFB\u7406\u89E3

    \u53C2\u6570\u8BF4\u660E

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    class-pattern\u7C7B\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    [c:]\u7C7B\u6240\u5C5E ClassLoader \u7684 hashcode
    [classLoaderClass:]\u6307\u5B9A\u6267\u884C\u8868\u8FBE\u5F0F\u7684 ClassLoader \u7684 class name
    [E]\u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u4E3A\u901A\u914D\u7B26\u5339\u914D

    \u4F7F\u7528\u53C2\u8003

    \u53CD\u7F16\u8BD1java.lang.String

    $ jad java.lang.String
     
     ClassLoader:
     
    @@ -31,7 +31,7 @@ import{_ as l,o as i,c as u,a as s,b as a,w as p,e as n,d as o,r as t}from"./app
     /*463*/         this.value = StringCoding.decode(charset, byArray, n, n2);
                 }
     ...
    -

    \u53CD\u7F16\u8BD1\u65F6\u53EA\u663E\u793A\u6E90\u4EE3\u7801

    `,7),_=n("\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0C\u53CD\u7F16\u8BD1\u7ED3\u679C\u91CC\u4F1A\u5E26\u6709"),f=s("code",null,"ClassLoader",-1),L=n("\u4FE1\u606F\uFF0C\u901A\u8FC7"),C=s("code",null,"--source-only",-1),x=n("\u9009\u9879\uFF0C\u53EF\u4EE5\u53EA\u6253\u5370\u6E90\u4EE3\u7801\u3002\u65B9\u4FBF\u548C"),S=n("mc"),E=n("/"),A=n("retransform"),M=n("\u547D\u4EE4\u7ED3\u5408\u4F7F\u7528\u3002"),$=o(`
    $ jad --source-only demo.MathGame
    +

    \u53CD\u7F16\u8BD1\u65F6\u53EA\u663E\u793A\u6E90\u4EE3\u7801

    `,7),g=s("\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0C\u53CD\u7F16\u8BD1\u7ED3\u679C\u91CC\u4F1A\u5E26\u6709"),y=n("code",null,"ClassLoader",-1),w=s("\u4FE1\u606F\uFF0C\u901A\u8FC7"),j=n("code",null,"--source-only",-1),f=s("\u9009\u9879\uFF0C\u53EF\u4EE5\u53EA\u6253\u5370\u6E90\u4EE3\u7801\u3002\u65B9\u4FBF\u548C"),L=s("mc"),_=s("/"),C=s("retransform"),x=s("\u547D\u4EE4\u7ED3\u5408\u4F7F\u7528\u3002"),S=t(`
    $ jad --source-only demo.MathGame
     /*
      * Decompiled with CFR 0_132.
      */
    @@ -117,4 +117,4 @@ $ jad orgAffect(row-cnt:1) cost in 190 ms.
     

    \u5BF9\u4E8E\u53EA\u6709\u552F\u4E00\u5B9E\u4F8B\u7684 ClassLoader \u8FD8\u53EF\u4EE5\u901A\u8FC7--classLoaderClass\u6307\u5B9A class name\uFF0C\u4F7F\u7528\u8D77\u6765\u66F4\u52A0\u65B9\u4FBF\uFF1A

    --classLoaderClass \u7684\u503C\u662F ClassLoader \u7684\u7C7B\u540D\uFF0C\u53EA\u6709\u5339\u914D\u5230\u552F\u4E00\u7684 ClassLoader \u5B9E\u4F8B\u65F6\u624D\u80FD\u5DE5\u4F5C\uFF0C\u76EE\u7684\u662F\u65B9\u4FBF\u8F93\u5165\u901A\u7528\u547D\u4EE4\uFF0C\u800C-c <hashcode>\u662F\u52A8\u6001\u53D8\u5316\u7684\u3002

    \u53CD\u7F16\u8BD1\u65F6\u6307\u5B9Adump class\u6587\u4EF6\u76EE\u5F55

    jad\u53CD\u7F16\u8BD1\u9700\u8981\u5C06class dump\u5230\u6587\u4EF6\uFF0C\u9ED8\u8BA4\u4F1Adump\u5230logback.xml\u4E2D\u914D\u7F6E\u7684log\u76EE\u5F55\u4E0B\uFF0C\u4F7F\u7528-d/--directory\u53EF\u4EE5\u5C06\u6587\u4EF6dump\u5230\u6307\u5B9A\u76EE\u5F55\u3002

    $ jad demo.MathGame -d /tmp/jad/dump
    -
    `,14);function N(R,I){const c=t("ExternalLinkIcon"),e=t("RouterLink");return i(),u("div",null,[d,s("p",null,[s("a",k,[m,v,a(c)])]),b,s("p",null,[h,g,a(e,{to:"/doc/dump.html"},{default:p(()=>[y]),_:1}),w]),j,s("p",null,[_,f,L,C,x,a(e,{to:"/doc/mc.html"},{default:p(()=>[S]),_:1}),E,a(e,{to:"/doc/retransform.html"},{default:p(()=>[A]),_:1}),M]),$])}const D=l(r,[["render",N],["__file","jad.html.vue"]]);export{D as default}; +
    `,14);function E(A,M){const a=i("RouterLink");return c(),l("div",null,[r,d,n("p",null,[k,m,e(a,{to:"/doc/dump.html"},{default:p(()=>[v]),_:1}),b]),h,n("p",null,[g,y,w,j,f,e(a,{to:"/doc/mc.html"},{default:p(()=>[L]),_:1}),_,e(a,{to:"/doc/retransform.html"},{default:p(()=>[C]),_:1}),x]),S])}const N=o(u,[["render",E],["__file","jad.html.vue"]]);export{N as default}; diff --git a/assets/jad.html.403e568d.js b/assets/jad.html.49ef2409.js similarity index 93% rename from assets/jad.html.403e568d.js rename to assets/jad.html.49ef2409.js index f1fd42c93..4ebcf7a71 100644 --- a/assets/jad.html.403e568d.js +++ b/assets/jad.html.49ef2409.js @@ -1 +1 @@ -const l=JSON.parse('{"key":"v-211d675c","path":"/doc/jad.html","title":"jad","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"\u53CD\u7F16\u8BD1java.lang.String","slug":"\u53CD\u7F16\u8BD1java-lang-string","link":"#\u53CD\u7F16\u8BD1java-lang-string","children":[]},{"level":3,"title":"\u53CD\u7F16\u8BD1\u65F6\u53EA\u663E\u793A\u6E90\u4EE3\u7801","slug":"\u53CD\u7F16\u8BD1\u65F6\u53EA\u663E\u793A\u6E90\u4EE3\u7801","link":"#\u53CD\u7F16\u8BD1\u65F6\u53EA\u663E\u793A\u6E90\u4EE3\u7801","children":[]},{"level":3,"title":"\u53CD\u7F16\u8BD1\u6307\u5B9A\u7684\u51FD\u6570","slug":"\u53CD\u7F16\u8BD1\u6307\u5B9A\u7684\u51FD\u6570","link":"#\u53CD\u7F16\u8BD1\u6307\u5B9A\u7684\u51FD\u6570","children":[]},{"level":3,"title":"\u53CD\u7F16\u8BD1\u65F6\u4E0D\u663E\u793A\u884C\u53F7","slug":"\u53CD\u7F16\u8BD1\u65F6\u4E0D\u663E\u793A\u884C\u53F7","link":"#\u53CD\u7F16\u8BD1\u65F6\u4E0D\u663E\u793A\u884C\u53F7","children":[]},{"level":3,"title":"\u53CD\u7F16\u8BD1\u65F6\u6307\u5B9A ClassLoader","slug":"\u53CD\u7F16\u8BD1\u65F6\u6307\u5B9A-classloader","link":"#\u53CD\u7F16\u8BD1\u65F6\u6307\u5B9A-classloader","children":[]},{"level":3,"title":"\u53CD\u7F16\u8BD1\u65F6\u6307\u5B9Adump class\u6587\u4EF6\u76EE\u5F55","slug":"\u53CD\u7F16\u8BD1\u65F6\u6307\u5B9Adump-class\u6587\u4EF6\u76EE\u5F55","link":"#\u53CD\u7F16\u8BD1\u65F6\u6307\u5B9Adump-class\u6587\u4EF6\u76EE\u5F55","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/jad.md","version":"4.3.3"}');export{l as data}; +const l=JSON.parse('{"key":"v-211d675c","path":"/doc/jad.html","title":"jad","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"\u53CD\u7F16\u8BD1java.lang.String","slug":"\u53CD\u7F16\u8BD1java-lang-string","link":"#\u53CD\u7F16\u8BD1java-lang-string","children":[]},{"level":3,"title":"\u53CD\u7F16\u8BD1\u65F6\u53EA\u663E\u793A\u6E90\u4EE3\u7801","slug":"\u53CD\u7F16\u8BD1\u65F6\u53EA\u663E\u793A\u6E90\u4EE3\u7801","link":"#\u53CD\u7F16\u8BD1\u65F6\u53EA\u663E\u793A\u6E90\u4EE3\u7801","children":[]},{"level":3,"title":"\u53CD\u7F16\u8BD1\u6307\u5B9A\u7684\u51FD\u6570","slug":"\u53CD\u7F16\u8BD1\u6307\u5B9A\u7684\u51FD\u6570","link":"#\u53CD\u7F16\u8BD1\u6307\u5B9A\u7684\u51FD\u6570","children":[]},{"level":3,"title":"\u53CD\u7F16\u8BD1\u65F6\u4E0D\u663E\u793A\u884C\u53F7","slug":"\u53CD\u7F16\u8BD1\u65F6\u4E0D\u663E\u793A\u884C\u53F7","link":"#\u53CD\u7F16\u8BD1\u65F6\u4E0D\u663E\u793A\u884C\u53F7","children":[]},{"level":3,"title":"\u53CD\u7F16\u8BD1\u65F6\u6307\u5B9A ClassLoader","slug":"\u53CD\u7F16\u8BD1\u65F6\u6307\u5B9A-classloader","link":"#\u53CD\u7F16\u8BD1\u65F6\u6307\u5B9A-classloader","children":[]},{"level":3,"title":"\u53CD\u7F16\u8BD1\u65F6\u6307\u5B9Adump class\u6587\u4EF6\u76EE\u5F55","slug":"\u53CD\u7F16\u8BD1\u65F6\u6307\u5B9Adump-class\u6587\u4EF6\u76EE\u5F55","link":"#\u53CD\u7F16\u8BD1\u65F6\u6307\u5B9Adump-class\u6587\u4EF6\u76EE\u5F55","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/jad.md","version":"4.3.5"}');export{l as data}; diff --git a/assets/jfr.html.5ac2287e.js b/assets/jfr.html.2139c5d1.js similarity index 55% rename from assets/jfr.html.5ac2287e.js rename to assets/jfr.html.2139c5d1.js index 9a69996f4..f6c10d348 100644 --- a/assets/jfr.html.5ac2287e.js +++ b/assets/jfr.html.2139c5d1.js @@ -1,4 +1,4 @@ -import{_ as r}from"./arthas-output-recording.5e4ef7bc.js";import{_ as i,o,c as d,a as e,b as s,e as t,t as l,d as n,r as c}from"./app.524ecf5c.js";const p={},u=e("h1",{id:"jfr",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#jfr","aria-hidden":"true"},"#"),t(" jfr")],-1),h={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-jfr",target:"_blank",rel:"noopener noreferrer"},g=e("code",null,"jfr",-1),m=t(" online tutorial"),f=n(`

    TIP

    Java Flight Recorder (JFR) is a tool for collecting diagnostic and profiling data about a running Java application. It is integrated into the Java Virtual Machine (JVM) and causes almost no performance overhead, so it can be used even in heavily loaded production environments.

    The jfr command supports starting and stopping JFR recordings during dynamic program running. Recording collects data about events. Events occur in the JVM or the Java application at a specific point in time. Each event has a name, a time stamp, and an optional payload. The payload is the data associated with an event, for example, the CPU usage, the Java heap size before and after the event, the thread ID of the lock holder, and so on.

    The basic usage of the jfr command isjfr cmd [actionArg]

    Note: jfr is supported only after the 8u262 version of jdk8

    Supported Options

    NameSpecification
    cmdCommand to execute, support\u3010start\uFF0Cstatus\uFF0Cdump\uFF0Cstop\u3011
    actionArgAttribute name pattern
    [n:]Name of recording
    [r:]Recording id
    [dumponexit:]When the program exits, whether to dump the .jfr file. (boolean false)
    [d:]Duration of recording, i.e. 60s, 2m, 5h, 3d. default no delay
    [duration:]Duration of recording, default forever.
    [s:]Server-side template, The default is default.jfc located at $JAVA_HOME/lib/jfr/default.jfc
    [f:]Resulting recording filename
    [maxage:]Maximum age of buffer data
    [maxsize:]Maximum size of buffers in bytes
    [state:]Recording state

    Start jfr recording

    $ jfr start
    +import{_ as n}from"./arthas-output-recording.5e4ef7bc.js";import{_ as r,o as i,c as o,a as e,e as t,t as d,b as l,d as a,r as c}from"./app.e2427bec.js";const p={},u=a(`

    jfr

    TIP

    Java Flight Recorder (JFR) is a tool for collecting diagnostic and profiling data about a running Java application. It is integrated into the Java Virtual Machine (JVM) and causes almost no performance overhead, so it can be used even in heavily loaded production environments.

    The jfr command supports starting and stopping JFR recordings during dynamic program running. Recording collects data about events. Events occur in the JVM or the Java application at a specific point in time. Each event has a name, a time stamp, and an optional payload. The payload is the data associated with an event, for example, the CPU usage, the Java heap size before and after the event, the thread ID of the lock holder, and so on.

    The basic usage of the jfr command isjfr cmd [actionArg]

    Note: jfr is supported only after the 8u262 version of jdk8

    Supported Options

    NameSpecification
    cmdCommand to execute, support\u3010start\uFF0Cstatus\uFF0Cdump\uFF0Cstop\u3011
    actionArgAttribute name pattern
    [n:]Name of recording
    [r:]Recording id
    [dumponexit:]When the program exits, whether to dump the .jfr file. (boolean false)
    [d:]Duration of recording, i.e. 60s, 2m, 5h, 3d. default no delay
    [duration:]Duration of recording, default forever.
    [s:]Server-side template, The default is default.jfc located at $JAVA_HOME/lib/jfr/default.jfc
    [f:]Resulting recording filename
    [maxage:]Maximum age of buffer data
    [maxsize:]Maximum size of buffers in bytes
    [state:]Recording state

    Start jfr recording

    $ jfr start
     Started recording 1. No limit specified, using maxsize=250MB as default.
     

    TIP

    The default JFR record is started.

    Start the JFR recording, specify the recording name, duration, file saving path.

    $ jfr start -n myRecording --duration 60s -f /tmp/myRecording.jfr
     Started recording 2. The result will be written to:
    @@ -10,7 +10,7 @@ Recording: recordingrecording=1 name=Recording-1 (running)
     

    View recordings in a specified state.

    $ jfr status --state closed
     Recording: recording=2 name=myRecording duration=PT1M (closed)
    -

    dump jfr recording

    `,19),v=t("The "),b=e("code",null,"jfr dump",-1),x=e("br",null,null,-1),k=t(" Specifies the record output path."),_=n(`
    $ jfr dump -r 1 -f /tmp/myRecording1.jfr
    +

    dump jfr recording

    `,20),h=t("The "),g=e("code",null,"jfr dump",-1),m=e("br",null,null,-1),f=t(" Specifies the record output path."),v=a(`
    $ jfr dump -r 1 -f /tmp/myRecording1.jfr
     Dump recording 1, The result will be written to:
     /tmp/myRecording1.jfr
     

    The file output path is not specified. By default, it is saved to the arthas-output directory

    $ jfr dump -r 1
    @@ -19,4 +19,4 @@ Dump recording 1, The result will be written t
     

    Stop jfr recording

    No recording output path is specified, default is saved to arthas-output directory.

    $ jfr stop -r 1
     Stop recording 1, The result will be written to:
     /tmp/test/arthas-output/20220819-202049.jfr
    -

    notice: A recording can only be stopped once.

    You can also specify the record output path.

    View JFR recording results under arthas-output via browser

    `,9),y=t("By default, arthas uses http port 8563 , which can be opened:"),j={href:"http://localhost:8563/arthas-output/",target:"_blank",rel:"noopener noreferrer"},w=t("http://localhost:8563/arthas-output/"),R=t(" View the "),J=e("code",null,"arthas-output",-1),T=t(" directory below JFR recording results:"),S=e("p",null,[e("img",{src:r,alt:""})],-1),V=e("p",null,"The resulting results can be viewed with tools that support the JFR format. Such as:",-1),F=e("ul",null,[e("li",null,"JDK Mission Control \uFF1A https://github.com/openjdk/jmc")],-1);function M(N,$){const a=c("ExternalLinkIcon");return o(),d("div",null,[u,e("p",null,[e("a",h,[g,m,s(a)])]),f,e("p",null,[v,b,t(l()+" command will output the recordings from the start until the execution of the command to a JFR file, without stopping the recording.",1),x,k]),_,e("p",null,[y,e("a",j,[w,s(a)]),R,J,T]),S,V,F])}const A=i(p,[["render",M],["__file","jfr.html.vue"]]);export{A as default}; +

    notice: A recording can only be stopped once.

    You can also specify the record output path.

    View JFR recording results under arthas-output via browser

    `,9),b=t("By default, arthas uses http port 8563 , which can be opened:"),x={href:"http://localhost:8563/arthas-output/",target:"_blank",rel:"noopener noreferrer"},k=t("http://localhost:8563/arthas-output/"),y=t(" View the "),_=e("code",null,"arthas-output",-1),j=t(" directory below JFR recording results:"),w=e("p",null,[e("img",{src:n,alt:""})],-1),R=e("p",null,"The resulting results can be viewed with tools that support the JFR format. Such as:",-1),J=e("ul",null,[e("li",null,"JDK Mission Control \uFF1A https://github.com/openjdk/jmc")],-1);function T(S,V){const s=c("ExternalLinkIcon");return i(),o("div",null,[u,e("p",null,[h,g,t(d()+" command will output the recordings from the start until the execution of the command to a JFR file, without stopping the recording.",1),m,f]),v,e("p",null,[b,e("a",x,[k,l(s)]),y,_,j]),w,R,J])}const N=r(p,[["render",T],["__file","jfr.html.vue"]]);export{N as default}; diff --git a/assets/jfr.html.7ec12793.js b/assets/jfr.html.b77304ea.js similarity index 88% rename from assets/jfr.html.7ec12793.js rename to assets/jfr.html.b77304ea.js index 7a7a32552..c38aad7e3 100644 --- a/assets/jfr.html.7ec12793.js +++ b/assets/jfr.html.b77304ea.js @@ -1 +1 @@ -const r=JSON.parse('{"key":"v-40de7e67","path":"/en/doc/jfr.html","title":"jfr","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"Supported Options","slug":"supported-options","link":"#supported-options","children":[]},{"level":2,"title":"Start jfr recording","slug":"start-jfr-recording","link":"#start-jfr-recording","children":[]},{"level":2,"title":"dump jfr recording","slug":"dump-jfr-recording","link":"#dump-jfr-recording","children":[]},{"level":2,"title":"Stop jfr recording","slug":"stop-jfr-recording","link":"#stop-jfr-recording","children":[]},{"level":2,"title":"View JFR recording results under arthas-output via browser","slug":"view-jfr-recording-results-under-arthas-output-via-browser","link":"#view-jfr-recording-results-under-arthas-output-via-browser","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/jfr.md","version":"4.3.3"}');export{r as data}; +const r=JSON.parse('{"key":"v-40de7e67","path":"/en/doc/jfr.html","title":"jfr","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"Supported Options","slug":"supported-options","link":"#supported-options","children":[]},{"level":2,"title":"Start jfr recording","slug":"start-jfr-recording","link":"#start-jfr-recording","children":[]},{"level":2,"title":"dump jfr recording","slug":"dump-jfr-recording","link":"#dump-jfr-recording","children":[]},{"level":2,"title":"Stop jfr recording","slug":"stop-jfr-recording","link":"#stop-jfr-recording","children":[]},{"level":2,"title":"View JFR recording results under arthas-output via browser","slug":"view-jfr-recording-results-under-arthas-output-via-browser","link":"#view-jfr-recording-results-under-arthas-output-via-browser","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/jfr.md","version":"4.3.5"}');export{r as data}; diff --git a/assets/jfr.html.35e0ac56.js b/assets/jfr.html.bab2ebee.js similarity index 90% rename from assets/jfr.html.35e0ac56.js rename to assets/jfr.html.bab2ebee.js index d9624fe66..a4d113ef5 100644 --- a/assets/jfr.html.35e0ac56.js +++ b/assets/jfr.html.bab2ebee.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-41806853","path":"/doc/jfr.html","title":"jfr","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u542F\u52A8 JFR \u8BB0\u5F55","slug":"\u542F\u52A8-jfr-\u8BB0\u5F55","link":"#\u542F\u52A8-jfr-\u8BB0\u5F55","children":[]},{"level":2,"title":"\u67E5\u770B JFR \u8BB0\u5F55\u72B6\u6001","slug":"\u67E5\u770B-jfr-\u8BB0\u5F55\u72B6\u6001","link":"#\u67E5\u770B-jfr-\u8BB0\u5F55\u72B6\u6001","children":[]},{"level":2,"title":"dump jfr \u8BB0\u5F55","slug":"dump-jfr-\u8BB0\u5F55","link":"#dump-jfr-\u8BB0\u5F55","children":[]},{"level":2,"title":"\u505C\u6B62 jfr \u8BB0\u5F55","slug":"\u505C\u6B62-jfr-\u8BB0\u5F55","link":"#\u505C\u6B62-jfr-\u8BB0\u5F55","children":[]},{"level":2,"title":"\u901A\u8FC7\u6D4F\u89C8\u5668\u67E5\u770B arthas-output \u4E0B\u9762 JFR \u8BB0\u5F55\u7684\u7ED3\u679C","slug":"\u901A\u8FC7\u6D4F\u89C8\u5668\u67E5\u770B-arthas-output-\u4E0B\u9762-jfr-\u8BB0\u5F55\u7684\u7ED3\u679C","link":"#\u901A\u8FC7\u6D4F\u89C8\u5668\u67E5\u770B-arthas-output-\u4E0B\u9762-jfr-\u8BB0\u5F55\u7684\u7ED3\u679C","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/jfr.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-41806853","path":"/doc/jfr.html","title":"jfr","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u542F\u52A8 JFR \u8BB0\u5F55","slug":"\u542F\u52A8-jfr-\u8BB0\u5F55","link":"#\u542F\u52A8-jfr-\u8BB0\u5F55","children":[]},{"level":2,"title":"\u67E5\u770B JFR \u8BB0\u5F55\u72B6\u6001","slug":"\u67E5\u770B-jfr-\u8BB0\u5F55\u72B6\u6001","link":"#\u67E5\u770B-jfr-\u8BB0\u5F55\u72B6\u6001","children":[]},{"level":2,"title":"dump jfr \u8BB0\u5F55","slug":"dump-jfr-\u8BB0\u5F55","link":"#dump-jfr-\u8BB0\u5F55","children":[]},{"level":2,"title":"\u505C\u6B62 jfr \u8BB0\u5F55","slug":"\u505C\u6B62-jfr-\u8BB0\u5F55","link":"#\u505C\u6B62-jfr-\u8BB0\u5F55","children":[]},{"level":2,"title":"\u901A\u8FC7\u6D4F\u89C8\u5668\u67E5\u770B arthas-output \u4E0B\u9762 JFR \u8BB0\u5F55\u7684\u7ED3\u679C","slug":"\u901A\u8FC7\u6D4F\u89C8\u5668\u67E5\u770B-arthas-output-\u4E0B\u9762-jfr-\u8BB0\u5F55\u7684\u7ED3\u679C","link":"#\u901A\u8FC7\u6D4F\u89C8\u5668\u67E5\u770B-arthas-output-\u4E0B\u9762-jfr-\u8BB0\u5F55\u7684\u7ED3\u679C","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/jfr.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/jfr.html.b9abd2e5.js b/assets/jfr.html.fc123fb3.js similarity index 51% rename from assets/jfr.html.b9abd2e5.js rename to assets/jfr.html.fc123fb3.js index b00a231c0..c0b7b2d07 100644 --- a/assets/jfr.html.b9abd2e5.js +++ b/assets/jfr.html.fc123fb3.js @@ -1,4 +1,4 @@ -import{_ as l}from"./arthas-output-recording.5e4ef7bc.js";import{_ as i,o as d,c as o,a as e,b as s,e as t,t as n,d as r,r as c}from"./app.524ecf5c.js";const p={},u=e("h1",{id:"jfr",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#jfr","aria-hidden":"true"},"#"),t(" jfr")],-1),h={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-jfr",target:"_blank",rel:"noopener noreferrer"},m=e("code",null,"jfr",-1),g=t("\u5728\u7EBF\u6559\u7A0B"),v=r(`

    \u63D0\u793A

    Java Flight Recorder (JFR) \u662F\u4E00\u79CD\u7528\u4E8E\u6536\u96C6\u6709\u5173\u6B63\u5728\u8FD0\u884C\u7684 Java \u5E94\u7528\u7A0B\u5E8F\u7684\u8BCA\u65AD\u548C\u5206\u6790\u6570\u636E\u7684\u5DE5\u5177\u3002\u5B83\u96C6\u6210\u5230 Java \u865A\u62DF\u673A (JVM) \u4E2D\uFF0C\u51E0\u4E4E\u4E0D\u4F1A\u9020\u6210\u6027\u80FD\u5F00\u9500\uFF0C\u56E0\u6B64\u5373\u4F7F\u5728\u8D1F\u8F7D\u8F83\u91CD\u7684\u751F\u4EA7\u73AF\u5883\u4E2D\u4E5F\u53EF\u4EE5\u4F7F\u7528\u3002

    jfr \u547D\u4EE4\u652F\u6301\u5728\u7A0B\u5E8F\u52A8\u6001\u8FD0\u884C\u8FC7\u7A0B\u4E2D\u5F00\u542F\u548C\u5173\u95ED JFR \u8BB0\u5F55\u3002 \u8BB0\u5F55\u6536\u96C6\u6709\u5173 event \u7684\u6570\u636E\u3002\u4E8B\u4EF6\u5728\u7279\u5B9A\u65F6\u95F4\u70B9\u53D1\u751F\u5728 JVM \u6216 Java \u5E94\u7528\u7A0B\u5E8F\u4E2D\u3002\u6BCF\u4E2A\u4E8B\u4EF6\u90FD\u6709\u4E00\u4E2A\u540D\u79F0\u3001\u4E00\u4E2A\u65F6\u95F4\u6233\u548C\u4E00\u4E2A\u53EF\u9009\u7684\u6709\u6548\u8D1F\u8F7D\u3002\u8D1F\u8F7D\u662F\u4E0E\u4E8B\u4EF6\u76F8\u5173\u7684\u6570\u636E\uFF0C\u4F8B\u5982 CPU \u4F7F\u7528\u7387\u3001\u4E8B\u4EF6\u524D\u540E\u7684 Java \u5806\u5927\u5C0F\u3001\u9501\u6301\u6709\u8005\u7684\u7EBF\u7A0B ID \u7B49\u3002

    jfr \u547D\u4EE4\u57FA\u672C\u8FD0\u884C\u7ED3\u6784\u662F jfr cmd [actionArg]

    \u6CE8\u610F\uFF1A JDK8 \u7684 8u262 \u7248\u672C\u4E4B\u540E\u624D\u652F\u6301 jfr

    \u53C2\u6570\u8BF4\u660E

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    cmd\u8981\u6267\u884C\u7684\u64CD\u4F5C \u652F\u6301\u7684\u547D\u4EE4\u3010start\uFF0Cstatus\uFF0Cdump\uFF0Cstop\u3011
    actionArg\u5C5E\u6027\u540D\u6A21\u5F0F
    [n:]\u8BB0\u5F55\u540D\u79F0
    [r:]\u8BB0\u5F55 id \u503C
    [dumponexit:]\u7A0B\u5E8F\u9000\u51FA\u65F6\uFF0C\u662F\u5426\u8981 dump \u51FA .jfr \u6587\u4EF6\uFF0C\u9ED8\u8BA4\u4E3A false
    [d:]\u5EF6\u8FDF\u591A\u4E45\u540E\u542F\u52A8 JFR \u8BB0\u5F55\uFF0C\u652F\u6301\u5E26\u5355\u4F4D\u914D\u7F6E\uFF0Ceg: 60s, 2m, 5h, 3d. \u4E0D\u5E26\u5355\u4F4D\u5C31\u662F\u79D2\uFF0C\u9ED8\u8BA4\u65E0\u5EF6\u8FDF
    [duration:]JFR \u8BB0\u5F55\u6301\u7EED\u65F6\u95F4\uFF0C\u652F\u6301\u5355\u4F4D\u914D\u7F6E\uFF0C\u4E0D\u5E26\u5355\u4F4D\u5C31\u662F\u79D2\uFF0C\u9ED8\u8BA4\u4E00\u76F4\u8BB0\u5F55
    [s:]\u91C7\u96C6 Event \u7684\u8BE6\u7EC6\u914D\u7F6E\u6587\u4EF6\uFF0C\u9ED8\u8BA4\u662F default.jfc \u4F4D\u4E8E $JAVA_HOME/lib/jfr/default.jfc
    [f:]\u5C06\u8F93\u51FA\u8F6C\u50A8\u5230\u6307\u5B9A\u8DEF\u5F84
    [maxage:]\u7F13\u51B2\u533A\u6570\u636E\u6700\u5927\u6587\u4EF6\u8BB0\u5F55\u4FDD\u5B58\u65F6\u95F4\uFF0C\u652F\u6301\u5355\u4F4D\u914D\u7F6E\uFF0C\u4E0D\u5E26\u5355\u4F4D\u5C31\u662F\u79D2\uFF0C\u9ED8\u8BA4\u662F\u4E0D\u9650\u5236
    [maxsize:]\u7F13\u51B2\u533A\u7684\u6700\u5927\u6587\u4EF6\u5927\u5C0F\uFF0C\u652F\u6301\u5355\u4F4D\u914D\u7F6E\uFF0C \u4E0D\u5E26\u5355\u4F4D\u662F\u5B57\u8282\uFF0Cm \u6216\u8005 M \u4EE3\u8868 MB\uFF0Cg \u6216\u8005 G \u4EE3\u8868 GB\u3002
    [state:]jfr \u8BB0\u5F55\u72B6\u6001

    \u542F\u52A8 JFR \u8BB0\u5F55

    $ jfr start
    +import{_ as r}from"./arthas-output-recording.5e4ef7bc.js";import{_ as i,o as l,c as d,a as e,e as t,t as a,b as o,d as s,r as c}from"./app.e2427bec.js";const p={},u=s(`

    jfr

    \u63D0\u793A

    Java Flight Recorder (JFR) \u662F\u4E00\u79CD\u7528\u4E8E\u6536\u96C6\u6709\u5173\u6B63\u5728\u8FD0\u884C\u7684 Java \u5E94\u7528\u7A0B\u5E8F\u7684\u8BCA\u65AD\u548C\u5206\u6790\u6570\u636E\u7684\u5DE5\u5177\u3002\u5B83\u96C6\u6210\u5230 Java \u865A\u62DF\u673A (JVM) \u4E2D\uFF0C\u51E0\u4E4E\u4E0D\u4F1A\u9020\u6210\u6027\u80FD\u5F00\u9500\uFF0C\u56E0\u6B64\u5373\u4F7F\u5728\u8D1F\u8F7D\u8F83\u91CD\u7684\u751F\u4EA7\u73AF\u5883\u4E2D\u4E5F\u53EF\u4EE5\u4F7F\u7528\u3002

    jfr \u547D\u4EE4\u652F\u6301\u5728\u7A0B\u5E8F\u52A8\u6001\u8FD0\u884C\u8FC7\u7A0B\u4E2D\u5F00\u542F\u548C\u5173\u95ED JFR \u8BB0\u5F55\u3002 \u8BB0\u5F55\u6536\u96C6\u6709\u5173 event \u7684\u6570\u636E\u3002\u4E8B\u4EF6\u5728\u7279\u5B9A\u65F6\u95F4\u70B9\u53D1\u751F\u5728 JVM \u6216 Java \u5E94\u7528\u7A0B\u5E8F\u4E2D\u3002\u6BCF\u4E2A\u4E8B\u4EF6\u90FD\u6709\u4E00\u4E2A\u540D\u79F0\u3001\u4E00\u4E2A\u65F6\u95F4\u6233\u548C\u4E00\u4E2A\u53EF\u9009\u7684\u6709\u6548\u8D1F\u8F7D\u3002\u8D1F\u8F7D\u662F\u4E0E\u4E8B\u4EF6\u76F8\u5173\u7684\u6570\u636E\uFF0C\u4F8B\u5982 CPU \u4F7F\u7528\u7387\u3001\u4E8B\u4EF6\u524D\u540E\u7684 Java \u5806\u5927\u5C0F\u3001\u9501\u6301\u6709\u8005\u7684\u7EBF\u7A0B ID \u7B49\u3002

    jfr \u547D\u4EE4\u57FA\u672C\u8FD0\u884C\u7ED3\u6784\u662F jfr cmd [actionArg]

    \u6CE8\u610F\uFF1A JDK8 \u7684 8u262 \u7248\u672C\u4E4B\u540E\u624D\u652F\u6301 jfr

    \u53C2\u6570\u8BF4\u660E

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    cmd\u8981\u6267\u884C\u7684\u64CD\u4F5C \u652F\u6301\u7684\u547D\u4EE4\u3010start\uFF0Cstatus\uFF0Cdump\uFF0Cstop\u3011
    actionArg\u5C5E\u6027\u540D\u6A21\u5F0F
    [n:]\u8BB0\u5F55\u540D\u79F0
    [r:]\u8BB0\u5F55 id \u503C
    [dumponexit:]\u7A0B\u5E8F\u9000\u51FA\u65F6\uFF0C\u662F\u5426\u8981 dump \u51FA .jfr \u6587\u4EF6\uFF0C\u9ED8\u8BA4\u4E3A false
    [d:]\u5EF6\u8FDF\u591A\u4E45\u540E\u542F\u52A8 JFR \u8BB0\u5F55\uFF0C\u652F\u6301\u5E26\u5355\u4F4D\u914D\u7F6E\uFF0Ceg: 60s, 2m, 5h, 3d. \u4E0D\u5E26\u5355\u4F4D\u5C31\u662F\u79D2\uFF0C\u9ED8\u8BA4\u65E0\u5EF6\u8FDF
    [duration:]JFR \u8BB0\u5F55\u6301\u7EED\u65F6\u95F4\uFF0C\u652F\u6301\u5355\u4F4D\u914D\u7F6E\uFF0C\u4E0D\u5E26\u5355\u4F4D\u5C31\u662F\u79D2\uFF0C\u9ED8\u8BA4\u4E00\u76F4\u8BB0\u5F55
    [s:]\u91C7\u96C6 Event \u7684\u8BE6\u7EC6\u914D\u7F6E\u6587\u4EF6\uFF0C\u9ED8\u8BA4\u662F default.jfc \u4F4D\u4E8E $JAVA_HOME/lib/jfr/default.jfc
    [f:]\u5C06\u8F93\u51FA\u8F6C\u50A8\u5230\u6307\u5B9A\u8DEF\u5F84
    [maxage:]\u7F13\u51B2\u533A\u6570\u636E\u6700\u5927\u6587\u4EF6\u8BB0\u5F55\u4FDD\u5B58\u65F6\u95F4\uFF0C\u652F\u6301\u5355\u4F4D\u914D\u7F6E\uFF0C\u4E0D\u5E26\u5355\u4F4D\u5C31\u662F\u79D2\uFF0C\u9ED8\u8BA4\u662F\u4E0D\u9650\u5236
    [maxsize:]\u7F13\u51B2\u533A\u7684\u6700\u5927\u6587\u4EF6\u5927\u5C0F\uFF0C\u652F\u6301\u5355\u4F4D\u914D\u7F6E\uFF0C \u4E0D\u5E26\u5355\u4F4D\u662F\u5B57\u8282\uFF0Cm \u6216\u8005 M \u4EE3\u8868 MB\uFF0Cg \u6216\u8005 G \u4EE3\u8868 GB\u3002
    [state:]jfr \u8BB0\u5F55\u72B6\u6001

    \u542F\u52A8 JFR \u8BB0\u5F55

    $ jfr start
     Started recording 1. No limit specified, using maxsize=250MB as default.
     

    \u63D0\u793A

    \u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0C\u5F00\u542F\u7684\u662F\u9ED8\u8BA4\u53C2\u6570\u7684 jfr \u8BB0\u5F55

    \u542F\u52A8 jfr \u8BB0\u5F55\uFF0C\u6307\u5B9A\u8BB0\u5F55\u540D\uFF0C\u8BB0\u5F55\u6301\u7EED\u65F6\u95F4\uFF0C\u8BB0\u5F55\u6587\u4EF6\u4FDD\u5B58\u8DEF\u5F84\u3002

    $ jfr start -n myRecording --duration 60s -f /tmp/myRecording.jfr
     Started recording 2. The result will be written to:
    @@ -10,7 +10,7 @@ Recording: recordingrecording=1 name=Recording-1 (running)
     

    \u67E5\u770B\u6307\u5B9A\u72B6\u6001\u7684\u8BB0\u5F55\u4FE1\u606F

    $ jfr status --state closed
     Recording: recording=2 name=myRecording duration=PT1M (closed)
    -

    dump jfr \u8BB0\u5F55

    `,19),b=e("code",null,"jfr dump",-1),f=e("code",null,"jfr",-1),_=e("br",null,null,-1),x=t(" \u6307\u5B9A\u8BB0\u5F55\u8F93\u51FA\u8DEF\u5F84"),k=r(`
    $ jfr dump -r 1 -f /tmp/myRecording1.jfr
    +

    dump jfr \u8BB0\u5F55

    `,20),h=e("code",null,"jfr dump",-1),m=e("code",null,"jfr",-1),g=e("br",null,null,-1),v=t(" \u6307\u5B9A\u8BB0\u5F55\u8F93\u51FA\u8DEF\u5F84"),b=s(`
    $ jfr dump -r 1 -f /tmp/myRecording1.jfr
     Dump recording 1, The result will be written to:
     /tmp/myRecording1.jfr
     

    \u4E0D\u6307\u5B9A\u6587\u4EF6\u8F93\u51FA\u8DEF\u5F84\uFF0C\u9ED8\u8BA4\u662F\u4FDD\u5B58\u5230arthas-output\u76EE\u5F55\u4E0B

    $ jfr dump -r 1
    @@ -19,4 +19,4 @@ Dump recording 1, The result will be written t
     

    \u505C\u6B62 jfr \u8BB0\u5F55

    \u4E0D\u6307\u5B9A\u8BB0\u5F55\u8F93\u51FA\u8DEF\u5F84\uFF0C\u9ED8\u8BA4\u662F\u4FDD\u5B58\u5230arthas-output\u76EE\u5F55\u4E0B

    $ jfr stop -r 1
     Stop recording 1, The result will be written to:
     /tmp/test/arthas-output/20220819-202049.jfr
    -

    \u6CE8\u610F\u4E00\u6761\u8BB0\u5F55\u53EA\u80FD\u505C\u6B62\u4E00\u6B21\u3002

    \u4E5F\u53EF\u4EE5\u6307\u5B9A\u8BB0\u5F55\u8F93\u51FA\u8DEF\u5F84\u3002

    \u901A\u8FC7\u6D4F\u89C8\u5668\u67E5\u770B arthas-output \u4E0B\u9762 JFR \u8BB0\u5F55\u7684\u7ED3\u679C

    `,9),j=t("\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0Carthas \u4F7F\u7528 8563 \u7AEF\u53E3\uFF0C\u5219\u53EF\u4EE5\u6253\u5F00\uFF1A "),y={href:"http://localhost:8563/arthas-output/",target:"_blank",rel:"noopener noreferrer"},R=t("http://localhost:8563/arthas-output/"),J=t(" \u67E5\u770B\u5230"),F=e("code",null,"arthas-output",-1),M=t("\u76EE\u5F55\u4E0B\u9762\u7684 JFR \u8BB0\u5F55\u7ED3\u679C\uFF1A"),$=e("p",null,[e("img",{src:l,alt:""})],-1),w=e("p",null,"\u751F\u6210\u7684\u7ED3\u679C\u53EF\u4EE5\u7528\u652F\u6301 jfr \u683C\u5F0F\u7684\u5DE5\u5177\u6765\u67E5\u770B\u3002\u6BD4\u5982\uFF1A",-1),T=e("ul",null,[e("li",null,"JDK Mission Control \uFF1A https://github.com/openjdk/jmc")],-1);function V(B,D){const a=c("ExternalLinkIcon");return d(),o("div",null,[u,e("p",null,[e("a",h,[m,g,s(a)])]),v,e("p",null,[b,t(n()+" \u4F1A\u8F93\u51FA\u4ECE\u5F00\u59CB\u5230\u8FD0\u884C\u8BE5\u547D\u4EE4\u8FD9\u6BB5\u65F6\u95F4\u5185\u7684\u8BB0\u5F55\u5230 JFR \u6587\u4EF6\uFF0C\u4E14\u4E0D\u4F1A\u505C\u6B62 ",1),f,t(n()+" \u7684\u8BB0\u5F55",1),_,x]),k,e("p",null,[j,e("a",y,[R,s(a)]),J,F,M]),$,w,T])}const S=i(p,[["render",V],["__file","jfr.html.vue"]]);export{S as default}; +

    \u6CE8\u610F\u4E00\u6761\u8BB0\u5F55\u53EA\u80FD\u505C\u6B62\u4E00\u6B21\u3002

    \u4E5F\u53EF\u4EE5\u6307\u5B9A\u8BB0\u5F55\u8F93\u51FA\u8DEF\u5F84\u3002

    \u901A\u8FC7\u6D4F\u89C8\u5668\u67E5\u770B arthas-output \u4E0B\u9762 JFR \u8BB0\u5F55\u7684\u7ED3\u679C

    `,9),f=t("\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0Carthas \u4F7F\u7528 8563 \u7AEF\u53E3\uFF0C\u5219\u53EF\u4EE5\u6253\u5F00\uFF1A "),x={href:"http://localhost:8563/arthas-output/",target:"_blank",rel:"noopener noreferrer"},k=t("http://localhost:8563/arthas-output/"),_=t(" \u67E5\u770B\u5230"),j=e("code",null,"arthas-output",-1),y=t("\u76EE\u5F55\u4E0B\u9762\u7684 JFR \u8BB0\u5F55\u7ED3\u679C\uFF1A"),R=e("p",null,[e("img",{src:r,alt:""})],-1),J=e("p",null,"\u751F\u6210\u7684\u7ED3\u679C\u53EF\u4EE5\u7528\u652F\u6301 jfr \u683C\u5F0F\u7684\u5DE5\u5177\u6765\u67E5\u770B\u3002\u6BD4\u5982\uFF1A",-1),F=e("ul",null,[e("li",null,"JDK Mission Control \uFF1A https://github.com/openjdk/jmc")],-1);function M($,w){const n=c("ExternalLinkIcon");return l(),d("div",null,[u,e("p",null,[h,t(a()+" \u4F1A\u8F93\u51FA\u4ECE\u5F00\u59CB\u5230\u8FD0\u884C\u8BE5\u547D\u4EE4\u8FD9\u6BB5\u65F6\u95F4\u5185\u7684\u8BB0\u5F55\u5230 JFR \u6587\u4EF6\uFF0C\u4E14\u4E0D\u4F1A\u505C\u6B62 ",1),m,t(a()+" \u7684\u8BB0\u5F55",1),g,v]),b,e("p",null,[f,e("a",x,[k,o(n)]),_,j,y]),R,J,F])}const B=i(p,[["render",M],["__file","jfr.html.vue"]]);export{B as default}; diff --git a/assets/jvm.html.ff68b164.js b/assets/jvm.html.43ae7a7d.js similarity index 90% rename from assets/jvm.html.ff68b164.js rename to assets/jvm.html.43ae7a7d.js index 5f92c3afb..0cae8052f 100644 --- a/assets/jvm.html.ff68b164.js +++ b/assets/jvm.html.43ae7a7d.js @@ -1,4 +1,4 @@ -import{_ as s,o as l,c as a,a as e,b as d,e as i,d as r,r as v}from"./app.524ecf5c.js";const c={},m=e("h1",{id:"jvm",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#jvm","aria-hidden":"true"},"#"),i(" jvm")],-1),u={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-jvm",target:"_blank",rel:"noopener noreferrer"},t=e("code",null,"jvm",-1),b=i(" online tutorial"),o=r(`

    TIP

    Check the current JVM's info

    Usage

    $ jvm
    +import{_ as i,o as e,c as n,d as s}from"./app.e2427bec.js";const l={},d=s(`

    jvm

    TIP

    Check the current JVM's info

    Usage

    $ jvm
     RUNTIME
     --------------------------------------------------------------------------------------------------------------
      MACHINE-NAME                   37@ff267334bb65
    @@ -97,4 +97,4 @@ RUNTIME
      MAX-FILE-DESCRIPTOR-COUNT      1048576
      OPEN-FILE-DESCRIPTOR-COUNT     100
     Affect(row-cnt:0) cost in 88 ms.
    -
    • 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
    • MAX-FILE-DESCRIPTOR-COUNT\uFF1Athe count of max file descriptor JVM process can open
    • OPEN-FILE-DESCRIPTOR-COUNT\uFF1Athe current count of file descriptor JVM process open
    `,7);function E(S,h){const n=v("ExternalLinkIcon");return l(),a("div",null,[m,e("p",null,[e("a",u,[t,b,d(n)])]),o])}const C=s(c,[["render",E],["__file","jvm.html.vue"]]);export{C as default}; +
    • 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
    • MAX-FILE-DESCRIPTOR-COUNT\uFF1Athe count of max file descriptor JVM process can open
    • OPEN-FILE-DESCRIPTOR-COUNT\uFF1Athe current count of file descriptor JVM process open
    `,8),a=[d];function r(v,c){return e(),n("div",null,a)}const u=i(l,[["render",r],["__file","jvm.html.vue"]]);export{u as default}; diff --git a/assets/jvm.html.432f6c94.js b/assets/jvm.html.684dd27a.js similarity index 84% rename from assets/jvm.html.432f6c94.js rename to assets/jvm.html.684dd27a.js index 2eb93c2c2..71c315e68 100644 --- a/assets/jvm.html.432f6c94.js +++ b/assets/jvm.html.684dd27a.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-f1483d70","path":"/doc/jvm.html","title":"jvm","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]},{"level":2,"title":"THREAD \u76F8\u5173","slug":"thread-\u76F8\u5173","link":"#thread-\u76F8\u5173","children":[]},{"level":2,"title":"\u6587\u4EF6\u63CF\u8FF0\u7B26\u76F8\u5173","slug":"\u6587\u4EF6\u63CF\u8FF0\u7B26\u76F8\u5173","link":"#\u6587\u4EF6\u63CF\u8FF0\u7B26\u76F8\u5173","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/jvm.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-f1483d70","path":"/doc/jvm.html","title":"jvm","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]},{"level":2,"title":"THREAD \u76F8\u5173","slug":"thread-\u76F8\u5173","link":"#thread-\u76F8\u5173","children":[]},{"level":2,"title":"\u6587\u4EF6\u63CF\u8FF0\u7B26\u76F8\u5173","slug":"\u6587\u4EF6\u63CF\u8FF0\u7B26\u76F8\u5173","link":"#\u6587\u4EF6\u63CF\u8FF0\u7B26\u76F8\u5173","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/jvm.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/jvm.html.9c086903.js b/assets/jvm.html.9b922226.js similarity index 90% rename from assets/jvm.html.9c086903.js rename to assets/jvm.html.9b922226.js index 1f627754f..2b801966e 100644 --- a/assets/jvm.html.9c086903.js +++ b/assets/jvm.html.9b922226.js @@ -1,4 +1,4 @@ -import{_ as l,o as s,c as d,a as i,b as a,e as n,d as v,r}from"./app.524ecf5c.js";const c={},m=i("h1",{id:"jvm",tabindex:"-1"},[i("a",{class:"header-anchor",href:"#jvm","aria-hidden":"true"},"#"),n(" jvm")],-1),u={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-jvm",target:"_blank",rel:"noopener noreferrer"},b=i("code",null,"jvm",-1),t=n("\u5728\u7EBF\u6559\u7A0B"),o=v(`

    \u63D0\u793A

    \u67E5\u770B\u5F53\u524D JVM \u4FE1\u606F

    \u4F7F\u7528\u53C2\u8003

    $ jvm
    +import{_ as i,o as n,c as e,d as l}from"./app.e2427bec.js";const s={},d=l(`

    jvm

    \u63D0\u793A

    \u67E5\u770B\u5F53\u524D JVM \u4FE1\u606F

    \u4F7F\u7528\u53C2\u8003

    $ jvm
     RUNTIME
     --------------------------------------------------------------------------------------------------------------
      MACHINE-NAME                   37@ff267334bb65
    @@ -97,4 +97,4 @@ RUNTIME
      MAX-FILE-DESCRIPTOR-COUNT      1048576
      OPEN-FILE-DESCRIPTOR-COUNT     100
     Affect(row-cnt:0) cost in 88 ms.
    -

    THREAD \u76F8\u5173

    • COUNT: JVM \u5F53\u524D\u6D3B\u8DC3\u7684\u7EBF\u7A0B\u6570
    • DAEMON-COUNT: JVM \u5F53\u524D\u6D3B\u8DC3\u7684\u5B88\u62A4\u7EBF\u7A0B\u6570
    • PEAK-COUNT: \u4ECE JVM \u542F\u52A8\u5F00\u59CB\u66FE\u7ECF\u6D3B\u7740\u7684\u6700\u5927\u7EBF\u7A0B\u6570
    • STARTED-COUNT: \u4ECE JVM \u542F\u52A8\u5F00\u59CB\u603B\u5171\u542F\u52A8\u8FC7\u7684\u7EBF\u7A0B\u6B21\u6570
    • DEADLOCK-COUNT: JVM \u5F53\u524D\u6B7B\u9501\u7684\u7EBF\u7A0B\u6570

    \u6587\u4EF6\u63CF\u8FF0\u7B26\u76F8\u5173

    • MAX-FILE-DESCRIPTOR-COUNT\uFF1AJVM \u8FDB\u7A0B\u6700\u5927\u53EF\u4EE5\u6253\u5F00\u7684\u6587\u4EF6\u63CF\u8FF0\u7B26\u6570
    • OPEN-FILE-DESCRIPTOR-COUNT\uFF1AJVM \u5F53\u524D\u6253\u5F00\u7684\u6587\u4EF6\u63CF\u8FF0\u7B26\u6570
    `,7);function E(S,O){const e=r("ExternalLinkIcon");return s(),d("div",null,[m,i("p",null,[i("a",u,[b,t,a(e)])]),o])}const M=l(c,[["render",E],["__file","jvm.html.vue"]]);export{M as default}; +

    THREAD \u76F8\u5173

    • COUNT: JVM \u5F53\u524D\u6D3B\u8DC3\u7684\u7EBF\u7A0B\u6570
    • DAEMON-COUNT: JVM \u5F53\u524D\u6D3B\u8DC3\u7684\u5B88\u62A4\u7EBF\u7A0B\u6570
    • PEAK-COUNT: \u4ECE JVM \u542F\u52A8\u5F00\u59CB\u66FE\u7ECF\u6D3B\u7740\u7684\u6700\u5927\u7EBF\u7A0B\u6570
    • STARTED-COUNT: \u4ECE JVM \u542F\u52A8\u5F00\u59CB\u603B\u5171\u542F\u52A8\u8FC7\u7684\u7EBF\u7A0B\u6B21\u6570
    • DEADLOCK-COUNT: JVM \u5F53\u524D\u6B7B\u9501\u7684\u7EBF\u7A0B\u6570

    \u6587\u4EF6\u63CF\u8FF0\u7B26\u76F8\u5173

    • MAX-FILE-DESCRIPTOR-COUNT\uFF1AJVM \u8FDB\u7A0B\u6700\u5927\u53EF\u4EE5\u6253\u5F00\u7684\u6587\u4EF6\u63CF\u8FF0\u7B26\u6570
    • OPEN-FILE-DESCRIPTOR-COUNT\uFF1AJVM \u5F53\u524D\u6253\u5F00\u7684\u6587\u4EF6\u63CF\u8FF0\u7B26\u6570
    `,8),a=[d];function v(r,c){return n(),e("div",null,a)}const u=i(s,[["render",v],["__file","jvm.html.vue"]]);export{u as default}; diff --git a/assets/jvm.html.24d408b0.js b/assets/jvm.html.eac591a0.js similarity index 81% rename from assets/jvm.html.24d408b0.js rename to assets/jvm.html.eac591a0.js index 8fcd8851c..c174a9698 100644 --- a/assets/jvm.html.24d408b0.js +++ b/assets/jvm.html.eac591a0.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-f28c1148","path":"/en/doc/jvm.html","title":"jvm","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]},{"level":2,"title":"Thread related","slug":"thread-related","link":"#thread-related","children":[]},{"level":2,"title":"File descriptor related","slug":"file-descriptor-related","link":"#file-descriptor-related","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/jvm.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-f28c1148","path":"/en/doc/jvm.html","title":"jvm","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]},{"level":2,"title":"Thread related","slug":"thread-related","link":"#thread-related","children":[]},{"level":2,"title":"File descriptor related","slug":"file-descriptor-related","link":"#file-descriptor-related","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/jvm.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/keymap.html.1f91f840.js b/assets/keymap.html.1f91f840.js deleted file mode 100644 index 78766994c..000000000 --- a/assets/keymap.html.1f91f840.js +++ /dev/null @@ -1,20 +0,0 @@ -import{_ as o,o as r,c,a as t,b as a,e as d,d as l,r as i}from"./app.524ecf5c.js";const n={},u=t("h1",{id:"keymap",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#keymap","aria-hidden":"true"},"#"),d(" keymap")],-1),s={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-keymap",target:"_blank",rel:"noopener noreferrer"},q=t("code",null,"keymap",-1),h=d("\u5728\u7EBF\u6559\u7A0B"),b=l(`

    keymap\u547D\u4EE4\u8F93\u51FA\u5F53\u524D\u7684\u5FEB\u6377\u952E\u6620\u5C04\u8868\uFF1A

    \u9ED8\u8BA4\u7684\u5FEB\u6377\u952E\u5982\u4E0B\uFF1A

    \u5FEB\u6377\u952E\u5FEB\u6377\u952E\u8BF4\u660E\u547D\u4EE4\u540D\u79F0\u547D\u4EE4\u8BF4\u660E
    "\\C-a"ctrl + abeginning-of-line\u8DF3\u5230\u884C\u9996
    "\\C-e"ctrl + eend-of-line\u8DF3\u5230\u884C\u5C3E
    "\\C-f"ctrl + fforward-word\u5411\u524D\u79FB\u52A8\u4E00\u4E2A\u5355\u8BCD
    "\\C-b"ctrl + bbackward-word\u5411\u540E\u79FB\u52A8\u4E00\u4E2A\u5355\u8BCD
    "\\e[D"\u952E\u76D8\u5DE6\u65B9\u5411\u952Ebackward-char\u5149\u6807\u5411\u524D\u79FB\u52A8\u4E00\u4E2A\u5B57\u7B26
    "\\e[C"\u952E\u76D8\u53F3\u65B9\u5411\u952Eforward-char\u5149\u6807\u5411\u540E\u79FB\u52A8\u4E00\u4E2A\u5B57\u7B26
    "\\e[B"\u952E\u76D8\u4E0B\u65B9\u5411\u952Enext-history\u4E0B\u7FFB\u663E\u793A\u4E0B\u4E00\u4E2A\u547D\u4EE4
    "\\e[A"\u952E\u76D8\u4E0A\u65B9\u5411\u952Eprevious-history\u4E0A\u7FFB\u663E\u793A\u4E0A\u4E00\u4E2A\u547D\u4EE4
    "\\C-h"ctrl + hbackward-delete-char\u5411\u540E\u5220\u9664\u4E00\u4E2A\u5B57\u7B26
    "\\C-?"ctrl + shift + /backward-delete-char\u5411\u540E\u5220\u9664\u4E00\u4E2A\u5B57\u7B26
    "\\C-u"ctrl + uundo\u64A4\u9500\u4E0A\u4E00\u4E2A\u547D\u4EE4\uFF0C\u76F8\u5F53\u4E8E\u6E05\u7A7A\u5F53\u524D\u884C
    "\\C-d"ctrl + ddelete-char\u5220\u9664\u5F53\u524D\u5149\u6807\u6240\u5728\u5B57\u7B26
    "\\C-k"ctrl + kkill-line\u5220\u9664\u5F53\u524D\u5149\u6807\u5230\u884C\u5C3E\u7684\u6240\u6709\u5B57\u7B26
    "\\C-i"ctrl + icomplete\u81EA\u52A8\u8865\u5168\uFF0C\u76F8\u5F53\u4E8E\u6572TAB
    "\\C-j"ctrl + jaccept-line\u7ED3\u675F\u5F53\u524D\u884C\uFF0C\u76F8\u5F53\u4E8E\u6572\u56DE\u8F66
    "\\C-m"ctrl + maccept-line\u7ED3\u675F\u5F53\u524D\u884C\uFF0C\u76F8\u5F53\u4E8E\u6572\u56DE\u8F66
    "\\C-w"backward-delete-word
    "\\C-x\\e[3~"backward-kill-line
    "\\e\\C-?"backward-kill-word
    • \u4EFB\u4F55\u65F6\u5019 tab \u952E\uFF0C\u4F1A\u6839\u636E\u5F53\u524D\u7684\u8F93\u5165\u7ED9\u51FA\u63D0\u793A
    • \u547D\u4EE4\u540E\u6572 - \u6216 -- \uFF0C\u7136\u540E\u6309 tab \u952E\uFF0C\u53EF\u4EE5\u5C55\u793A\u51FA\u6B64\u547D\u4EE4\u5177\u4F53\u7684\u9009\u9879

    \u81EA\u5B9A\u4E49\u5FEB\u6377\u952E

    \u5728\u5F53\u524D\u7528\u6237\u76EE\u5F55\u4E0B\u65B0\u5EFA$USER_HOME/.arthas/conf/inputrc\u6587\u4EF6\uFF0C\u52A0\u5165\u81EA\u5B9A\u4E49\u914D\u7F6E\u3002

    \u5047\u8BBE\u6211\u662F vim \u7684\u91CD\u5EA6\u7528\u6237\uFF0C\u6211\u8981\u628Actrl+h\u8BBE\u7F6E\u4E3A\u5149\u6807\u5411\u524D\u4E00\u4E2A\u5B57\u7B26\uFF0C\u5219\u8BBE\u7F6E\u5982\u4E0B\uFF0C\u9996\u5148\u62F7\u8D1D\u9ED8\u8BA4\u914D\u7F6E

    "\\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
    -

    \u7136\u540E\u628A"\\C-h": backward-delete-char\u6362\u6210"\\C-h": backward-char\uFF0C\u7136\u540E\u91CD\u65B0\u8FDE\u63A5\u5373\u53EF\u3002

    \u540E\u53F0\u5F02\u6B65\u547D\u4EE4\u76F8\u5173\u5FEB\u6377\u952E

    • ctrl + c: \u7EC8\u6B62\u5F53\u524D\u547D\u4EE4
    • ctrl + z: \u6302\u8D77\u5F53\u524D\u547D\u4EE4\uFF0C\u540E\u7EED\u53EF\u4EE5 bg/fg \u91CD\u65B0\u652F\u6301\u6B64\u547D\u4EE4\uFF0C\u6216 kill \u6389
    • ctrl + a: \u56DE\u5230\u884C\u9996
    • ctrl + e: \u56DE\u5230\u884C\u5C3E
    `,11);function m(v,k){const e=i("ExternalLinkIcon");return r(),c("div",null,[u,t("p",null,[t("a",s,[q,h,a(e)])]),b])}const C=o(n,[["render",m],["__file","keymap.html.vue"]]);export{C as default}; diff --git a/assets/keymap.html.33e7213e.js b/assets/keymap.html.33e7213e.js new file mode 100644 index 000000000..bac4627a3 --- /dev/null +++ b/assets/keymap.html.33e7213e.js @@ -0,0 +1,20 @@ +import{_ as t,o as d,c as e,d as o}from"./app.e2427bec.js";const c={},r=o(`

    keymap

    keymap\u547D\u4EE4\u8F93\u51FA\u5F53\u524D\u7684\u5FEB\u6377\u952E\u6620\u5C04\u8868\uFF1A

    \u9ED8\u8BA4\u7684\u5FEB\u6377\u952E\u5982\u4E0B\uFF1A

    \u5FEB\u6377\u952E\u5FEB\u6377\u952E\u8BF4\u660E\u547D\u4EE4\u540D\u79F0\u547D\u4EE4\u8BF4\u660E
    "\\C-a"ctrl + abeginning-of-line\u8DF3\u5230\u884C\u9996
    "\\C-e"ctrl + eend-of-line\u8DF3\u5230\u884C\u5C3E
    "\\C-f"ctrl + fforward-word\u5411\u524D\u79FB\u52A8\u4E00\u4E2A\u5355\u8BCD
    "\\C-b"ctrl + bbackward-word\u5411\u540E\u79FB\u52A8\u4E00\u4E2A\u5355\u8BCD
    "\\e[D"\u952E\u76D8\u5DE6\u65B9\u5411\u952Ebackward-char\u5149\u6807\u5411\u524D\u79FB\u52A8\u4E00\u4E2A\u5B57\u7B26
    "\\e[C"\u952E\u76D8\u53F3\u65B9\u5411\u952Eforward-char\u5149\u6807\u5411\u540E\u79FB\u52A8\u4E00\u4E2A\u5B57\u7B26
    "\\e[B"\u952E\u76D8\u4E0B\u65B9\u5411\u952Enext-history\u4E0B\u7FFB\u663E\u793A\u4E0B\u4E00\u4E2A\u547D\u4EE4
    "\\e[A"\u952E\u76D8\u4E0A\u65B9\u5411\u952Eprevious-history\u4E0A\u7FFB\u663E\u793A\u4E0A\u4E00\u4E2A\u547D\u4EE4
    "\\C-h"ctrl + hbackward-delete-char\u5411\u540E\u5220\u9664\u4E00\u4E2A\u5B57\u7B26
    "\\C-?"ctrl + shift + /backward-delete-char\u5411\u540E\u5220\u9664\u4E00\u4E2A\u5B57\u7B26
    "\\C-u"ctrl + uundo\u64A4\u9500\u4E0A\u4E00\u4E2A\u547D\u4EE4\uFF0C\u76F8\u5F53\u4E8E\u6E05\u7A7A\u5F53\u524D\u884C
    "\\C-d"ctrl + ddelete-char\u5220\u9664\u5F53\u524D\u5149\u6807\u6240\u5728\u5B57\u7B26
    "\\C-k"ctrl + kkill-line\u5220\u9664\u5F53\u524D\u5149\u6807\u5230\u884C\u5C3E\u7684\u6240\u6709\u5B57\u7B26
    "\\C-i"ctrl + icomplete\u81EA\u52A8\u8865\u5168\uFF0C\u76F8\u5F53\u4E8E\u6572TAB
    "\\C-j"ctrl + jaccept-line\u7ED3\u675F\u5F53\u524D\u884C\uFF0C\u76F8\u5F53\u4E8E\u6572\u56DE\u8F66
    "\\C-m"ctrl + maccept-line\u7ED3\u675F\u5F53\u524D\u884C\uFF0C\u76F8\u5F53\u4E8E\u6572\u56DE\u8F66
    "\\C-w"backward-delete-word
    "\\C-x\\e[3~"backward-kill-line
    "\\e\\C-?"backward-kill-word
    • \u4EFB\u4F55\u65F6\u5019 tab \u952E\uFF0C\u4F1A\u6839\u636E\u5F53\u524D\u7684\u8F93\u5165\u7ED9\u51FA\u63D0\u793A
    • \u547D\u4EE4\u540E\u6572 - \u6216 -- \uFF0C\u7136\u540E\u6309 tab \u952E\uFF0C\u53EF\u4EE5\u5C55\u793A\u51FA\u6B64\u547D\u4EE4\u5177\u4F53\u7684\u9009\u9879

    \u81EA\u5B9A\u4E49\u5FEB\u6377\u952E

    \u5728\u5F53\u524D\u7528\u6237\u76EE\u5F55\u4E0B\u65B0\u5EFA$USER_HOME/.arthas/conf/inputrc\u6587\u4EF6\uFF0C\u52A0\u5165\u81EA\u5B9A\u4E49\u914D\u7F6E\u3002

    \u5047\u8BBE\u6211\u662F vim \u7684\u91CD\u5EA6\u7528\u6237\uFF0C\u6211\u8981\u628Actrl+h\u8BBE\u7F6E\u4E3A\u5149\u6807\u5411\u524D\u4E00\u4E2A\u5B57\u7B26\uFF0C\u5219\u8BBE\u7F6E\u5982\u4E0B\uFF0C\u9996\u5148\u62F7\u8D1D\u9ED8\u8BA4\u914D\u7F6E

    "\\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
    +

    \u7136\u540E\u628A"\\C-h": backward-delete-char\u6362\u6210"\\C-h": backward-char\uFF0C\u7136\u540E\u91CD\u65B0\u8FDE\u63A5\u5373\u53EF\u3002

    \u540E\u53F0\u5F02\u6B65\u547D\u4EE4\u76F8\u5173\u5FEB\u6377\u952E

    • ctrl + c: \u7EC8\u6B62\u5F53\u524D\u547D\u4EE4
    • ctrl + z: \u6302\u8D77\u5F53\u524D\u547D\u4EE4\uFF0C\u540E\u7EED\u53EF\u4EE5 bg/fg \u91CD\u65B0\u652F\u6301\u6B64\u547D\u4EE4\uFF0C\u6216 kill \u6389
    • ctrl + a: \u56DE\u5230\u884C\u9996
    • ctrl + e: \u56DE\u5230\u884C\u5C3E
    `,12),a=[r];function i(l,u){return d(),e("div",null,a)}const q=t(c,[["render",i],["__file","keymap.html.vue"]]);export{q as default}; diff --git a/assets/keymap.html.bda8b228.js b/assets/keymap.html.4bc836ba.js similarity index 80% rename from assets/keymap.html.bda8b228.js rename to assets/keymap.html.4bc836ba.js index 529b2cadc..d0c9a8235 100644 --- a/assets/keymap.html.bda8b228.js +++ b/assets/keymap.html.4bc836ba.js @@ -1 +1 @@ -const t=JSON.parse('{"key":"v-b3b5e150","path":"/en/doc/keymap.html","title":"keymap","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Custom shortcuts","slug":"custom-shortcuts","link":"#custom-shortcuts","children":[]},{"level":2,"title":"Shortcuts for jobs","slug":"shortcuts-for-jobs","link":"#shortcuts-for-jobs","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/keymap.md","version":"4.3.3"}');export{t as data}; +const t=JSON.parse('{"key":"v-b3b5e150","path":"/en/doc/keymap.html","title":"keymap","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Custom shortcuts","slug":"custom-shortcuts","link":"#custom-shortcuts","children":[]},{"level":2,"title":"Shortcuts for jobs","slug":"shortcuts-for-jobs","link":"#shortcuts-for-jobs","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/keymap.md","version":"4.3.5"}');export{t as data}; diff --git a/assets/keymap.html.32f701a7.js b/assets/keymap.html.96d9632d.js similarity index 84% rename from assets/keymap.html.32f701a7.js rename to assets/keymap.html.96d9632d.js index 7013927be..f6accc504 100644 --- a/assets/keymap.html.32f701a7.js +++ b/assets/keymap.html.96d9632d.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-4039cdec","path":"/doc/keymap.html","title":"keymap","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u81EA\u5B9A\u4E49\u5FEB\u6377\u952E","slug":"\u81EA\u5B9A\u4E49\u5FEB\u6377\u952E","link":"#\u81EA\u5B9A\u4E49\u5FEB\u6377\u952E","children":[]},{"level":2,"title":"\u540E\u53F0\u5F02\u6B65\u547D\u4EE4\u76F8\u5173\u5FEB\u6377\u952E","slug":"\u540E\u53F0\u5F02\u6B65\u547D\u4EE4\u76F8\u5173\u5FEB\u6377\u952E","link":"#\u540E\u53F0\u5F02\u6B65\u547D\u4EE4\u76F8\u5173\u5FEB\u6377\u952E","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/keymap.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-4039cdec","path":"/doc/keymap.html","title":"keymap","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u81EA\u5B9A\u4E49\u5FEB\u6377\u952E","slug":"\u81EA\u5B9A\u4E49\u5FEB\u6377\u952E","link":"#\u81EA\u5B9A\u4E49\u5FEB\u6377\u952E","children":[]},{"level":2,"title":"\u540E\u53F0\u5F02\u6B65\u547D\u4EE4\u76F8\u5173\u5FEB\u6377\u952E","slug":"\u540E\u53F0\u5F02\u6B65\u547D\u4EE4\u76F8\u5173\u5FEB\u6377\u952E","link":"#\u540E\u53F0\u5F02\u6B65\u547D\u4EE4\u76F8\u5173\u5FEB\u6377\u952E","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/keymap.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/keymap.html.bf1351b4.js b/assets/keymap.html.bf1351b4.js new file mode 100644 index 000000000..6d4a22594 --- /dev/null +++ b/assets/keymap.html.bf1351b4.js @@ -0,0 +1,20 @@ +import{_ as t,o as d,c as e,d as o}from"./app.e2427bec.js";const r={},c=o(`

    keymap

    Use keymap command to print the current keymap:

    The default keymap is:

    ShortcutShortcut DescriptionCommand NameCommand Description
    "\\C-a"ctrl + abeginning-of-linego to the beginning of the line
    "\\C-e"ctrl + eend-of-linego to the end of the line
    "\\C-f"ctrl + fforward-wordforward a word
    "\\C-b"ctrl + bbackward-wordbackward a word
    "\\e[D"left arrowbackward-charbackward a character
    "\\e[C"right arrowforward-charforward a character
    "\\e[B"down arrownext-historyshow next history command
    "\\e[A"up arrowprevious-historyshow previous history command
    "\\C-h"ctrl + hbackward-delete-charbackward delete a character
    "\\C-?"ctrl + shift + /backward-delete-charbackward delete a character
    "\\C-u"ctrl + uundoclear current line
    "\\C-d"ctrl + ddelete-chardelete the character of the current cursor
    "\\C-k"ctrl + kkill-linedelete all characters from the current cursor to the end of the line
    "\\C-i"ctrl + icompleteAuto completion, equivalent to TAB
    "\\C-j"ctrl + jaccept-lineend the current line, equivalent to enter
    "\\C-m"ctrl + maccept-lineend 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
    `,12),a=[c];function n(i,u){return d(),e("div",null,a)}const s=t(r,[["render",n],["__file","keymap.html.vue"]]);export{s as default}; diff --git a/assets/keymap.html.caa095a2.js b/assets/keymap.html.caa095a2.js deleted file mode 100644 index 494c30bf2..000000000 --- a/assets/keymap.html.caa095a2.js +++ /dev/null @@ -1,20 +0,0 @@ -import{_ as o,o as r,c,a as t,b as a,e,d as n,r as i}from"./app.524ecf5c.js";const l={},u=t("h1",{id:"keymap",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#keymap","aria-hidden":"true"},"#"),e(" keymap")],-1),s={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-keymap",target:"_blank",rel:"noopener noreferrer"},h=t("code",null,"keymap",-1),m=e(" online tutorial"),q=n(`

    Use keymap command to print the current keymap:

    The default keymap is:

    ShortcutShortcut DescriptionCommand NameCommand Description
    "\\C-a"ctrl + abeginning-of-linego to the beginning of the line
    "\\C-e"ctrl + eend-of-linego to the end of the line
    "\\C-f"ctrl + fforward-wordforward a word
    "\\C-b"ctrl + bbackward-wordbackward a word
    "\\e[D"left arrowbackward-charbackward a character
    "\\e[C"right arrowforward-charforward a character
    "\\e[B"down arrownext-historyshow next history command
    "\\e[A"up arrowprevious-historyshow previous history command
    "\\C-h"ctrl + hbackward-delete-charbackward delete a character
    "\\C-?"ctrl + shift + /backward-delete-charbackward delete a character
    "\\C-u"ctrl + uundoclear current line
    "\\C-d"ctrl + ddelete-chardelete the character of the current cursor
    "\\C-k"ctrl + kkill-linedelete all characters from the current cursor to the end of the line
    "\\C-i"ctrl + icompleteAuto completion, equivalent to TAB
    "\\C-j"ctrl + jaccept-lineend the current line, equivalent to enter
    "\\C-m"ctrl + maccept-lineend 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
    `,11);function b(p,v){const d=i("ExternalLinkIcon");return r(),c("div",null,[u,t("p",null,[t("a",s,[h,m,a(d)])]),q])}const f=o(l,[["render",b],["__file","keymap.html.vue"]]);export{f as default}; diff --git a/assets/line.html.7a5cbdbd.js b/assets/line.html.01eb3559.js similarity index 57% rename from assets/line.html.7a5cbdbd.js rename to assets/line.html.01eb3559.js index 1c33c3771..79a11042e 100644 --- a/assets/line.html.7a5cbdbd.js +++ b/assets/line.html.01eb3559.js @@ -1,4 +1,4 @@ -import{_ as n,o as l,c as i,a,b as r,w as o,d as t,e,r as c}from"./app.524ecf5c.js";const d={},p=t('

    line

    TIP

    Watch method arguments, local variables, and expression results at specified source line numbers.

    The line command inserts probes at specified source line numbers in matched methods. When execution reaches one of these lines, Arthas prints the current thread, elapsed time, line number, and OGNL expression result. It is useful when a value inside a method is unexpected at a specific source line.

    WARNING

    line works through bytecode enhancement. In production or staging environments, specify --class, --method, --desc, and --line as precisely as possible, and use -n to limit output. Run reset or stop after diagnosis to restore enhanced classes.

    Parameters

    NameSpecification
    --class <class-pattern>Class name to watch. Required. Wildcard matching is used by default
    --method <method-pattern>Method name to watch. Optional. If omitted, all instrumentable methods in the class may match
    --desc <method-desc>JVM method descriptor. Optional. Use it to select an overloaded method, for example (I)Ljava/util/List;
    --line <line>Source line numbers to watch. Supports comma-separated values and repeated options, for example --line 51,57 --line 61
    --express <express>Expression to evaluate. The default value is {params, localVarMap}
    --condition <express>Condition expression. Output is printed only when the condition is true
    --list-linesList available source line numbers without enhancing classes
    [E]Enable regular expression matching. Wildcard matching is used by default
    [x:]Object expansion level. The default value is 1
    [M:]Result size limit. The default value comes from options object-size-limit
    [n:]Execution count limit. The default value is 100
    [c:]Specify the ClassLoader hash. Only classes loaded by this ClassLoader are enhanced
    [m <arg>]Specify the maximum number of matched classes. The default value is 50. The long form is [maxMatch <arg>]
    --stackPrint the current stack trace when the line probe hits
    --stack-depth <depth>Maximum stack depth for --stack. The default value is 32, and the maximum value is 256

    Expression Variables

    line reuses the Arthas OGNL expression mechanism. Common variables:

    VariableDescription
    paramsMethod argument array
    targetCurrent object. It is null for static methods
    clazzCurrent class
    methodCurrent method information
    lineNumberMatched source line number
    argNamesMethod argument name array. It depends on debug metadata in the target class
    localVars / localsLocal variable value array visible at the current line
    localVarNamesLocal variable name array visible at the current line
    localVarMapMap from local variable name to value
    #costElapsed time from method entry to the current line, in milliseconds

    Local variable names and values depend on the target bytecode retaining LocalVariableTable debug metadata. If the target class has no debug metadata, localVarMap may be empty or incomplete.

    Usage

    Start Demo

    ',12),u=e("Start "),m=a("code",null,"math-game",-1),h=e(" in "),b=e("Quick Start"),g=e("."),v=t(`

    List Available Line Numbers

    Use --list-lines first to find source lines that can be instrumented:

    $ line --list-lines --class demo.MathGame --method primeFactors
    +import{_ as i,o,c as r,a,b as s,w as n,d as l,e,r as c}from"./app.e2427bec.js";const d={},p=l('

    line

    TIP

    Watch method arguments, local variables, and expression results at specified source line numbers.

    The line command inserts probes at specified source line numbers in matched methods. When execution reaches one of these lines, Arthas prints the current thread, elapsed time, line number, and OGNL expression result. It is useful when a value inside a method is unexpected at a specific source line.

    WARNING

    line works through bytecode enhancement. In production or staging environments, specify --class, --method, --desc, and --line as precisely as possible, and use -n to limit output. Run reset or stop after diagnosis to restore enhanced classes.

    Parameters

    NameSpecification
    --class <class-pattern>Class name to watch. Required. Wildcard matching is used by default
    --method <method-pattern>Method name to watch. Optional. If omitted, all instrumentable methods in the class may match
    --desc <method-desc>JVM method descriptor. Optional. Use it to select an overloaded method, for example (I)Ljava/util/List;
    --line <line>Source line numbers to watch. Supports comma-separated values and repeated options, for example --line 51,57 --line 61
    --express <express>Expression to evaluate. The default value is {params, localVarMap}
    --condition <express>Condition expression. Output is printed only when the condition is true
    --list-linesList available source line numbers without enhancing classes
    [E]Enable regular expression matching. Wildcard matching is used by default
    [x:]Object expansion level. The default value is 1
    [M:]Result size limit. The default value comes from options object-size-limit
    [n:]Execution count limit. The default value is 100
    [c:]Specify the ClassLoader hash. Only classes loaded by this ClassLoader are enhanced
    [m <arg>]Specify the maximum number of matched classes. The default value is 50. The long form is [maxMatch <arg>]
    --stackPrint the current stack trace when the line probe hits
    --stack-depth <depth>Maximum stack depth for --stack. The default value is 32, and the maximum value is 256

    Expression Variables

    line reuses the Arthas OGNL expression mechanism. Common variables:

    VariableDescription
    paramsMethod argument array
    targetCurrent object. It is null for static methods
    clazzCurrent class
    methodCurrent method information
    lineNumberMatched source line number
    argNamesMethod argument name array. It depends on debug metadata in the target class
    localVars / localsLocal variable value array visible at the current line
    localVarNamesLocal variable name array visible at the current line
    localVarMapMap from local variable name to value
    #costElapsed time from method entry to the current line, in milliseconds

    Local variable names and values depend on the target bytecode retaining LocalVariableTable debug metadata. If the target class has no debug metadata, localVarMap may be empty or incomplete.

    ',10),u=e("See "),m=e("Tips for complex OGNL expressions"),h=e(" for complex observation and condition expressions, null handling, and troubleshooting."),b=a("h2",{id:"usage",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#usage","aria-hidden":"true"},"#"),e(" Usage")],-1),g=a("h3",{id:"start-demo",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#start-demo","aria-hidden":"true"},"#"),e(" Start Demo")],-1),v=e("Start "),k=a("code",null,"math-game",-1),x=e(" in "),f=e("Quick Start"),y=e("."),_=l(`

    List Available Line Numbers

    Use --list-lines first to find source lines that can be instrumented:

    $ line --list-lines --class demo.MathGame --method primeFactors
     class=demo.MathGame source=MathGame.java
     method=primeFactors(I)Ljava/util/List; lines=[44, 45, 46, 49, 50, 51, 52, 53, 54, 55, 57, 61]
     

    Watch Arguments and Local Variables at a Line

    The default expression is {params, localVarMap}:

    $ line --class demo.MathGame --method primeFactors --line 51 -n 2 -x 2
    @@ -22,4 +22,4 @@ Command execution times exceed lim
       --express '{params[0], localVarMap["i"], localVarMap["result"]}' -n 1 -x 2
     

    Specify Method Descriptor

    When a method is overloaded, use --desc to select the exact JVM method descriptor:

    line --class demo.MathGame --method primeFactors --desc '(I)Ljava/util/List;' --line 51
     

    You can use sm -d demo.MathGame primeFactors to inspect method descriptors.

    Print the current stack trace when the line probe hits:

    line --class demo.MathGame --method primeFactors --line 57 --stack --stack-depth 8 -n 1
    -

    Notes

    • --line values must be greater than 0. At most 256 distinct line numbers can be specified.
    • line skips constructors, class initializers, native methods, and abstract methods.
    • If --method is omitted, multiple methods in the same class may be enhanced when they contain the target line number. Use --list-lines and --desc to narrow the target.
    • If the target class has no LineNumberTable, --list-lines cannot list available lines and line cannot insert probes by source line.
    • Running the same line probe repeatedly does not insert duplicate probes. When new line numbers are added, Arthas tries to append only missing line probes.
    `,22);function k(x,f){const s=c("RouterLink");return l(),i("div",null,[p,a("p",null,[u,m,h,r(s,{to:"/en/doc/quick-start.html"},{default:o(()=>[b]),_:1}),g]),v])}const M=n(d,[["render",k],["__file","line.html.vue"]]);export{M as default}; +

    Notes

    • --line values must be greater than 0. At most 256 distinct line numbers can be specified.
    • line skips constructors, class initializers, native methods, and abstract methods.
    • If --method is omitted, multiple methods in the same class may be enhanced when they contain the target line number. Use --list-lines and --desc to narrow the target.
    • If the target class has no LineNumberTable, --list-lines cannot list available lines and line cannot insert probes by source line.
    • Running the same line probe repeatedly does not insert duplicate probes. When new line numbers are added, Arthas tries to append only missing line probes.
    `,22);function M(L,w){const t=c("RouterLink");return o(),r("div",null,[p,a("p",null,[u,s(t,{to:"/en/doc/ognl-express.html"},{default:n(()=>[m]),_:1}),h]),b,g,a("p",null,[v,k,x,s(t,{to:"/en/doc/quick-start.html"},{default:n(()=>[f]),_:1}),y]),_])}const I=i(d,[["render",M],["__file","line.html.vue"]]);export{I as default}; diff --git a/assets/line.html.57fda898.js b/assets/line.html.70ec176e.js similarity index 55% rename from assets/line.html.57fda898.js rename to assets/line.html.70ec176e.js index e0a16241d..174e0bda2 100644 --- a/assets/line.html.57fda898.js +++ b/assets/line.html.70ec176e.js @@ -1,4 +1,4 @@ -import{_ as n,o as l,c,a as e,b as o,w as i,d as s,e as a,r}from"./app.524ecf5c.js";const d={},p=s('

    line

    \u63D0\u793A

    \u5728\u6307\u5B9A\u6E90\u7801\u884C\u89C2\u5BDF\u65B9\u6CD5\u5165\u53C2\u3001\u5C40\u90E8\u53D8\u91CF\u548C\u8868\u8FBE\u5F0F\u7ED3\u679C\u3002

    line \u547D\u4EE4\u4F1A\u5728\u76EE\u6807\u65B9\u6CD5\u7684\u6307\u5B9A\u6E90\u7801\u884C\u63D2\u5165\u63A2\u9488\u3002\u5F53\u6267\u884C\u5230\u8BE5\u884C\u65F6\uFF0CArthas \u4F1A\u8F93\u51FA\u5F53\u524D\u7EBF\u7A0B\u3001\u8017\u65F6\u3001\u884C\u53F7\u4EE5\u53CA OGNL \u8868\u8FBE\u5F0F\u7ED3\u679C\u3002\u5B83\u9002\u5408\u6392\u67E5\u201C\u65B9\u6CD5\u5185\u90E8\u67D0\u4E00\u884C\u53D8\u91CF\u503C\u4E0D\u7B26\u5408\u9884\u671F\u201D\u7684\u95EE\u9898\u3002

    \u6CE8\u610F

    line \u901A\u8FC7\u5B57\u8282\u7801\u589E\u5F3A\u5B9E\u73B0\u3002\u7EBF\u4E0A\u6216\u9884\u53D1\u73AF\u5883\u4F7F\u7528\u65F6\uFF0C\u8BF7\u5C3D\u91CF\u660E\u786E --class\u3001--method\u3001--desc \u548C --line\uFF0C\u5E76\u4F7F\u7528 -n \u9650\u5236\u8F93\u51FA\u6B21\u6570\u3002\u8BCA\u65AD\u7ED3\u675F\u540E\u53EF\u4EE5\u6267\u884C reset \u6216 stop \u8FD8\u539F\u589E\u5F3A\u8FC7\u7684\u7C7B\u3002

    \u53C2\u6570\u8BF4\u660E

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    --class <class-pattern>\u9700\u8981\u89C2\u5BDF\u7684\u7C7B\u540D\uFF0C\u5FC5\u586B\uFF0C\u9ED8\u8BA4\u901A\u914D\u7B26\u5339\u914D
    --method <method-pattern>\u9700\u8981\u89C2\u5BDF\u7684\u65B9\u6CD5\u540D\uFF0C\u53EF\u9009\uFF0C\u4E0D\u6307\u5B9A\u65F6\u5339\u914D\u7C7B\u91CC\u7684\u6240\u6709\u53EF\u63D2\u6869\u65B9\u6CD5
    --desc <method-desc>JVM \u65B9\u6CD5\u63CF\u8FF0\u7B26\uFF0C\u53EF\u9009\uFF0C\u7528\u4E8E\u533A\u5206\u91CD\u8F7D\u65B9\u6CD5\uFF0C\u6BD4\u5982 (I)Ljava/util/List;
    --line <line>\u9700\u8981\u89C2\u5BDF\u7684\u6E90\u7801\u884C\u53F7\uFF0C\u652F\u6301\u9017\u53F7\u5206\u9694\u548C\u91CD\u590D\u6307\u5B9A\uFF0C\u6BD4\u5982 --line 51,57 --line 61
    --express <express>\u89C2\u5BDF\u8868\u8FBE\u5F0F\uFF0C\u9ED8\u8BA4\u503C\u662F {params, localVarMap}
    --condition <express>\u6761\u4EF6\u8868\u8FBE\u5F0F\uFF0C\u6761\u4EF6\u6210\u7ACB\u65F6\u624D\u8F93\u51FA
    --list-lines\u53EA\u5217\u51FA\u5339\u914D\u65B9\u6CD5\u7684\u53EF\u7528\u884C\u53F7\uFF0C\u4E0D\u589E\u5F3A\u7C7B
    [E]\u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u662F\u901A\u914D\u7B26\u5339\u914D
    [x:]\u8F93\u51FA\u5BF9\u8C61\u5C55\u5F00\u5C42\u7EA7\uFF0C\u9ED8\u8BA4\u503C\u4E3A 1
    [M:]\u8F93\u51FA\u7ED3\u679C\u5927\u5C0F\u9650\u5236\uFF0C\u9ED8\u8BA4\u4F7F\u7528 options \u4E2D\u7684 object-size-limit
    [n:]\u6267\u884C\u6B21\u6570\u9650\u5236\uFF0C\u9ED8\u8BA4\u503C\u4E3A 100
    [c:]\u6307\u5B9A ClassLoader hash\uFF0C\u53EA\u589E\u5F3A\u8BE5 ClassLoader \u52A0\u8F7D\u7684\u7C7B
    [m <arg>]\u6307\u5B9A Class \u6700\u5927\u5339\u914D\u6570\u91CF\uFF0C\u9ED8\u8BA4\u503C\u4E3A 50\u3002\u957F\u683C\u5F0F\u4E3A [maxMatch <arg>]
    --stack\u547D\u4E2D\u884C\u53F7\u65F6\u8F93\u51FA\u5F53\u524D\u7EBF\u7A0B\u6808
    --stack-depth <depth>--stack \u7684\u6700\u5927\u6808\u6DF1\u5EA6\uFF0C\u9ED8\u8BA4\u503C\u4E3A 32\uFF0C\u6700\u5927\u503C\u4E3A 256

    \u8868\u8FBE\u5F0F\u53D8\u91CF

    line \u547D\u4EE4\u590D\u7528 Arthas \u7684 OGNL \u8868\u8FBE\u5F0F\u673A\u5236\u3002\u5E38\u7528\u53D8\u91CF\u5982\u4E0B\uFF1A

    \u53D8\u91CF\u8BF4\u660E
    params\u65B9\u6CD5\u5165\u53C2\u6570\u7EC4
    target\u5F53\u524D\u5BF9\u8C61\uFF0C\u9759\u6001\u65B9\u6CD5\u4E3A null
    clazz\u5F53\u524D\u7C7B
    method\u5F53\u524D\u65B9\u6CD5\u4FE1\u606F
    lineNumber\u5F53\u524D\u547D\u4E2D\u7684\u6E90\u7801\u884C\u53F7
    argNames\u65B9\u6CD5\u53C2\u6570\u540D\u6570\u7EC4\uFF0C\u4F9D\u8D56\u76EE\u6807\u7C7B\u4FDD\u7559\u8C03\u8BD5\u4FE1\u606F
    localVars / locals\u5F53\u524D\u884C\u53EF\u89C1\u7684\u5C40\u90E8\u53D8\u91CF\u503C\u6570\u7EC4
    localVarNames\u5F53\u524D\u884C\u53EF\u89C1\u7684\u5C40\u90E8\u53D8\u91CF\u540D\u6570\u7EC4
    localVarMap\u5C40\u90E8\u53D8\u91CF\u540D\u5230\u53D8\u91CF\u503C\u7684\u6620\u5C04
    #cost\u4ECE\u65B9\u6CD5\u5165\u53E3\u5230\u5F53\u524D\u884C\u7684\u8017\u65F6\uFF0C\u5355\u4F4D\u4E3A ms

    \u5C40\u90E8\u53D8\u91CF\u540D\u548C\u503C\u4F9D\u8D56\u76EE\u6807\u7C7B\u7F16\u8BD1\u65F6\u4FDD\u7559 LocalVariableTable \u8C03\u8BD5\u4FE1\u606F\u3002\u5982\u679C\u76EE\u6807\u7C7B\u6CA1\u6709\u8C03\u8BD5\u4FE1\u606F\uFF0ClocalVarMap \u53EF\u80FD\u4E3A\u7A7A\u6216\u4E0D\u5B8C\u6574\u3002

    \u4F7F\u7528\u793A\u4F8B

    \u542F\u52A8 Demo

    ',12),u=a("\u542F\u52A8"),m=a("\u5FEB\u901F\u5165\u95E8"),h=a("\u91CC\u7684 "),b=e("code",null,"math-game",-1),k=a("\u3002"),g=s(`

    \u67E5\u770B\u53EF\u7528\u884C\u53F7

    \u5148\u4F7F\u7528 --list-lines \u627E\u5230\u76EE\u6807\u65B9\u6CD5\u4E2D\u53EF\u4EE5\u63D2\u6869\u7684\u6E90\u7801\u884C\uFF1A

    $ line --list-lines --class demo.MathGame --method primeFactors
    +import{_ as o,o as c,c as i,a as e,b as t,w as n,d as l,e as a,r as d}from"./app.e2427bec.js";const r={},p=l('

    line

    \u63D0\u793A

    \u5728\u6307\u5B9A\u6E90\u7801\u884C\u89C2\u5BDF\u65B9\u6CD5\u5165\u53C2\u3001\u5C40\u90E8\u53D8\u91CF\u548C\u8868\u8FBE\u5F0F\u7ED3\u679C\u3002

    line \u547D\u4EE4\u4F1A\u5728\u76EE\u6807\u65B9\u6CD5\u7684\u6307\u5B9A\u6E90\u7801\u884C\u63D2\u5165\u63A2\u9488\u3002\u5F53\u6267\u884C\u5230\u8BE5\u884C\u65F6\uFF0CArthas \u4F1A\u8F93\u51FA\u5F53\u524D\u7EBF\u7A0B\u3001\u8017\u65F6\u3001\u884C\u53F7\u4EE5\u53CA OGNL \u8868\u8FBE\u5F0F\u7ED3\u679C\u3002\u5B83\u9002\u5408\u6392\u67E5\u201C\u65B9\u6CD5\u5185\u90E8\u67D0\u4E00\u884C\u53D8\u91CF\u503C\u4E0D\u7B26\u5408\u9884\u671F\u201D\u7684\u95EE\u9898\u3002

    \u6CE8\u610F

    line \u901A\u8FC7\u5B57\u8282\u7801\u589E\u5F3A\u5B9E\u73B0\u3002\u7EBF\u4E0A\u6216\u9884\u53D1\u73AF\u5883\u4F7F\u7528\u65F6\uFF0C\u8BF7\u5C3D\u91CF\u660E\u786E --class\u3001--method\u3001--desc \u548C --line\uFF0C\u5E76\u4F7F\u7528 -n \u9650\u5236\u8F93\u51FA\u6B21\u6570\u3002\u8BCA\u65AD\u7ED3\u675F\u540E\u53EF\u4EE5\u6267\u884C reset \u6216 stop \u8FD8\u539F\u589E\u5F3A\u8FC7\u7684\u7C7B\u3002

    \u53C2\u6570\u8BF4\u660E

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    --class <class-pattern>\u9700\u8981\u89C2\u5BDF\u7684\u7C7B\u540D\uFF0C\u5FC5\u586B\uFF0C\u9ED8\u8BA4\u901A\u914D\u7B26\u5339\u914D
    --method <method-pattern>\u9700\u8981\u89C2\u5BDF\u7684\u65B9\u6CD5\u540D\uFF0C\u53EF\u9009\uFF0C\u4E0D\u6307\u5B9A\u65F6\u5339\u914D\u7C7B\u91CC\u7684\u6240\u6709\u53EF\u63D2\u6869\u65B9\u6CD5
    --desc <method-desc>JVM \u65B9\u6CD5\u63CF\u8FF0\u7B26\uFF0C\u53EF\u9009\uFF0C\u7528\u4E8E\u533A\u5206\u91CD\u8F7D\u65B9\u6CD5\uFF0C\u6BD4\u5982 (I)Ljava/util/List;
    --line <line>\u9700\u8981\u89C2\u5BDF\u7684\u6E90\u7801\u884C\u53F7\uFF0C\u652F\u6301\u9017\u53F7\u5206\u9694\u548C\u91CD\u590D\u6307\u5B9A\uFF0C\u6BD4\u5982 --line 51,57 --line 61
    --express <express>\u89C2\u5BDF\u8868\u8FBE\u5F0F\uFF0C\u9ED8\u8BA4\u503C\u662F {params, localVarMap}
    --condition <express>\u6761\u4EF6\u8868\u8FBE\u5F0F\uFF0C\u6761\u4EF6\u6210\u7ACB\u65F6\u624D\u8F93\u51FA
    --list-lines\u53EA\u5217\u51FA\u5339\u914D\u65B9\u6CD5\u7684\u53EF\u7528\u884C\u53F7\uFF0C\u4E0D\u589E\u5F3A\u7C7B
    [E]\u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u662F\u901A\u914D\u7B26\u5339\u914D
    [x:]\u8F93\u51FA\u5BF9\u8C61\u5C55\u5F00\u5C42\u7EA7\uFF0C\u9ED8\u8BA4\u503C\u4E3A 1
    [M:]\u8F93\u51FA\u7ED3\u679C\u5927\u5C0F\u9650\u5236\uFF0C\u9ED8\u8BA4\u4F7F\u7528 options \u4E2D\u7684 object-size-limit
    [n:]\u6267\u884C\u6B21\u6570\u9650\u5236\uFF0C\u9ED8\u8BA4\u503C\u4E3A 100
    [c:]\u6307\u5B9A ClassLoader hash\uFF0C\u53EA\u589E\u5F3A\u8BE5 ClassLoader \u52A0\u8F7D\u7684\u7C7B
    [m <arg>]\u6307\u5B9A Class \u6700\u5927\u5339\u914D\u6570\u91CF\uFF0C\u9ED8\u8BA4\u503C\u4E3A 50\u3002\u957F\u683C\u5F0F\u4E3A [maxMatch <arg>]
    --stack\u547D\u4E2D\u884C\u53F7\u65F6\u8F93\u51FA\u5F53\u524D\u7EBF\u7A0B\u6808
    --stack-depth <depth>--stack \u7684\u6700\u5927\u6808\u6DF1\u5EA6\uFF0C\u9ED8\u8BA4\u503C\u4E3A 32\uFF0C\u6700\u5927\u503C\u4E3A 256

    \u8868\u8FBE\u5F0F\u53D8\u91CF

    line \u547D\u4EE4\u590D\u7528 Arthas \u7684 OGNL \u8868\u8FBE\u5F0F\u673A\u5236\u3002\u5E38\u7528\u53D8\u91CF\u5982\u4E0B\uFF1A

    \u53D8\u91CF\u8BF4\u660E
    params\u65B9\u6CD5\u5165\u53C2\u6570\u7EC4
    target\u5F53\u524D\u5BF9\u8C61\uFF0C\u9759\u6001\u65B9\u6CD5\u4E3A null
    clazz\u5F53\u524D\u7C7B
    method\u5F53\u524D\u65B9\u6CD5\u4FE1\u606F
    lineNumber\u5F53\u524D\u547D\u4E2D\u7684\u6E90\u7801\u884C\u53F7
    argNames\u65B9\u6CD5\u53C2\u6570\u540D\u6570\u7EC4\uFF0C\u4F9D\u8D56\u76EE\u6807\u7C7B\u4FDD\u7559\u8C03\u8BD5\u4FE1\u606F
    localVars / locals\u5F53\u524D\u884C\u53EF\u89C1\u7684\u5C40\u90E8\u53D8\u91CF\u503C\u6570\u7EC4
    localVarNames\u5F53\u524D\u884C\u53EF\u89C1\u7684\u5C40\u90E8\u53D8\u91CF\u540D\u6570\u7EC4
    localVarMap\u5C40\u90E8\u53D8\u91CF\u540D\u5230\u53D8\u91CF\u503C\u7684\u6620\u5C04
    #cost\u4ECE\u65B9\u6CD5\u5165\u53E3\u5230\u5F53\u524D\u884C\u7684\u8017\u65F6\uFF0C\u5355\u4F4D\u4E3A ms

    \u5C40\u90E8\u53D8\u91CF\u540D\u548C\u503C\u4F9D\u8D56\u76EE\u6807\u7C7B\u7F16\u8BD1\u65F6\u4FDD\u7559 LocalVariableTable \u8C03\u8BD5\u4FE1\u606F\u3002\u5982\u679C\u76EE\u6807\u7C7B\u6CA1\u6709\u8C03\u8BD5\u4FE1\u606F\uFF0ClocalVarMap \u53EF\u80FD\u4E3A\u7A7A\u6216\u4E0D\u5B8C\u6574\u3002

    ',10),u=a("\u590D\u6742\u7684\u89C2\u5BDF\u548C\u6761\u4EF6\u8868\u8FBE\u5F0F\u3001\u7A7A\u503C\u5904\u7406\u53CA\u6392\u9519\u65B9\u6CD5\u53C2\u89C1 "),m=a("OGNL \u590D\u6742\u8868\u8FBE\u5F0F\u4F7F\u7528\u6280\u5DE7"),h=a("\u3002"),b=e("h2",{id:"\u4F7F\u7528\u793A\u4F8B",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u4F7F\u7528\u793A\u4F8B","aria-hidden":"true"},"#"),a(" \u4F7F\u7528\u793A\u4F8B")],-1),k=e("h3",{id:"\u542F\u52A8-demo",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u542F\u52A8-demo","aria-hidden":"true"},"#"),a(" \u542F\u52A8 Demo")],-1),g=a("\u542F\u52A8"),v=a("\u5FEB\u901F\u5165\u95E8"),x=a("\u91CC\u7684 "),y=e("code",null,"math-game",-1),f=a("\u3002"),_=l(`

    \u67E5\u770B\u53EF\u7528\u884C\u53F7

    \u5148\u4F7F\u7528 --list-lines \u627E\u5230\u76EE\u6807\u65B9\u6CD5\u4E2D\u53EF\u4EE5\u63D2\u6869\u7684\u6E90\u7801\u884C\uFF1A

    $ line --list-lines --class demo.MathGame --method primeFactors
     class=demo.MathGame source=MathGame.java
     method=primeFactors(I)Ljava/util/List; lines=[44, 45, 46, 49, 50, 51, 52, 53, 54, 55, 57, 61]
     

    \u89C2\u5BDF\u6307\u5B9A\u884C\u7684\u5165\u53C2\u548C\u5C40\u90E8\u53D8\u91CF

    \u9ED8\u8BA4\u8868\u8FBE\u5F0F\u4E3A {params, localVarMap}\uFF1A

    $ line --class demo.MathGame --method primeFactors --line 51 -n 2 -x 2
    @@ -22,4 +22,4 @@ Command execution times exceed lim
       --express '{params[0], localVarMap["i"], localVarMap["result"]}' -n 1 -x 2
     

    \u6307\u5B9A\u65B9\u6CD5\u63CF\u8FF0\u7B26

    \u5F53\u65B9\u6CD5\u91CD\u8F7D\u65F6\uFF0C\u5EFA\u8BAE\u4F7F\u7528 --desc \u7CBE\u786E\u6307\u5B9A JVM \u65B9\u6CD5\u63CF\u8FF0\u7B26\uFF1A

    line --class demo.MathGame --method primeFactors --desc '(I)Ljava/util/List;' --line 51
     

    \u53EF\u4EE5\u901A\u8FC7 sm -d demo.MathGame primeFactors \u67E5\u770B\u65B9\u6CD5\u63CF\u8FF0\u7B26\u3002

    \u8F93\u51FA\u5F53\u524D\u7EBF\u7A0B\u6808

    \u547D\u4E2D\u884C\u53F7\u65F6\u8F93\u51FA\u5F53\u524D\u7EBF\u7A0B\u6808\uFF1A

    line --class demo.MathGame --method primeFactors --line 57 --stack --stack-depth 8 -n 1
    -

    \u6CE8\u610F\u4E8B\u9879

    • --line \u4F20\u5165\u7684\u884C\u53F7\u5FC5\u987B\u5927\u4E8E 0\uFF0C\u5E76\u4E14\u6700\u591A\u6307\u5B9A 256 \u4E2A\u4E0D\u540C\u7684\u884C\u53F7\u3002
    • line \u4F1A\u8DF3\u8FC7\u6784\u9020\u65B9\u6CD5\u3001\u7C7B\u521D\u59CB\u5316\u65B9\u6CD5\u3001native \u65B9\u6CD5\u548C abstract \u65B9\u6CD5\u3002
    • \u5982\u679C\u7701\u7565 --method\uFF0C\u540C\u4E00\u4E2A\u7C7B\u91CC\u591A\u4E2A\u5305\u542B\u76EE\u6807\u884C\u53F7\u7684\u65B9\u6CD5\u90FD\u53EF\u80FD\u88AB\u589E\u5F3A\uFF0C\u5EFA\u8BAE\u5148\u7528 --list-lines \u548C --desc \u6536\u655B\u76EE\u6807\u3002
    • \u5982\u679C\u76EE\u6807\u7C7B\u6CA1\u6709 LineNumberTable\uFF0C--list-lines \u4E0D\u4F1A\u5217\u51FA\u53EF\u7528\u884C\u53F7\uFF0Cline \u4E5F\u65E0\u6CD5\u5728\u6E90\u7801\u884C\u63D2\u5165\u63A2\u9488\u3002
    • \u91CD\u590D\u6267\u884C\u540C\u4E00\u4E2A\u884C\u53F7\u4E0D\u4F1A\u91CD\u590D\u63D2\u5165\u76F8\u540C\u63A2\u9488\uFF1B\u65B0\u589E\u884C\u53F7\u65F6\u4F1A\u5C3D\u91CF\u53EA\u8FFD\u52A0\u7F3A\u5931\u7684\u884C\u53F7\u63A2\u9488\u3002
    `,22);function v(x,y){const t=r("RouterLink");return l(),c("div",null,[p,e("p",null,[u,o(t,{to:"/doc/quick-start.html"},{default:i(()=>[m]),_:1}),h,b,k]),g])}const _=n(d,[["render",v],["__file","line.html.vue"]]);export{_ as default}; +

    \u6CE8\u610F\u4E8B\u9879

    • --line \u4F20\u5165\u7684\u884C\u53F7\u5FC5\u987B\u5927\u4E8E 0\uFF0C\u5E76\u4E14\u6700\u591A\u6307\u5B9A 256 \u4E2A\u4E0D\u540C\u7684\u884C\u53F7\u3002
    • line \u4F1A\u8DF3\u8FC7\u6784\u9020\u65B9\u6CD5\u3001\u7C7B\u521D\u59CB\u5316\u65B9\u6CD5\u3001native \u65B9\u6CD5\u548C abstract \u65B9\u6CD5\u3002
    • \u5982\u679C\u7701\u7565 --method\uFF0C\u540C\u4E00\u4E2A\u7C7B\u91CC\u591A\u4E2A\u5305\u542B\u76EE\u6807\u884C\u53F7\u7684\u65B9\u6CD5\u90FD\u53EF\u80FD\u88AB\u589E\u5F3A\uFF0C\u5EFA\u8BAE\u5148\u7528 --list-lines \u548C --desc \u6536\u655B\u76EE\u6807\u3002
    • \u5982\u679C\u76EE\u6807\u7C7B\u6CA1\u6709 LineNumberTable\uFF0C--list-lines \u4E0D\u4F1A\u5217\u51FA\u53EF\u7528\u884C\u53F7\uFF0Cline \u4E5F\u65E0\u6CD5\u5728\u6E90\u7801\u884C\u63D2\u5165\u63A2\u9488\u3002
    • \u91CD\u590D\u6267\u884C\u540C\u4E00\u4E2A\u884C\u53F7\u4E0D\u4F1A\u91CD\u590D\u63D2\u5165\u76F8\u540C\u63A2\u9488\uFF1B\u65B0\u589E\u884C\u53F7\u65F6\u4F1A\u5C3D\u91CF\u53EA\u8FFD\u52A0\u7F3A\u5931\u7684\u884C\u53F7\u63A2\u9488\u3002
    `,22);function M(L,V){const s=d("RouterLink");return c(),i("div",null,[p,e("p",null,[u,t(s,{to:"/doc/ognl-express.html"},{default:n(()=>[m]),_:1}),h]),b,k,e("p",null,[g,t(s,{to:"/doc/quick-start.html"},{default:n(()=>[v]),_:1}),x,y,f]),_])}const N=o(r,[["render",M],["__file","line.html.vue"]]);export{N as default}; diff --git a/assets/line.html.e9882513.js b/assets/line.html.a9e8e2e4.js similarity index 92% rename from assets/line.html.e9882513.js rename to assets/line.html.a9e8e2e4.js index 11d9ee846..a8f8e059b 100644 --- a/assets/line.html.e9882513.js +++ b/assets/line.html.a9e8e2e4.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-7baeb93e","path":"/en/doc/line.html","title":"line","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Parameters","slug":"parameters","link":"#parameters","children":[]},{"level":2,"title":"Expression Variables","slug":"expression-variables","link":"#expression-variables","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"Start Demo","slug":"start-demo","link":"#start-demo","children":[]},{"level":3,"title":"List Available Line Numbers","slug":"list-available-line-numbers","link":"#list-available-line-numbers","children":[]},{"level":3,"title":"Watch Arguments and Local Variables at a Line","slug":"watch-arguments-and-local-variables-at-a-line","link":"#watch-arguments-and-local-variables-at-a-line","children":[]},{"level":3,"title":"Watch Multiple Line Numbers","slug":"watch-multiple-line-numbers","link":"#watch-multiple-line-numbers","children":[]},{"level":3,"title":"Filter with a Condition Expression","slug":"filter-with-a-condition-expression","link":"#filter-with-a-condition-expression","children":[]},{"level":3,"title":"Specify Method Descriptor","slug":"specify-method-descriptor","link":"#specify-method-descriptor","children":[]},{"level":3,"title":"Print Current Stack Trace","slug":"print-current-stack-trace","link":"#print-current-stack-trace","children":[]}]},{"level":2,"title":"Notes","slug":"notes","link":"#notes","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/line.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-7baeb93e","path":"/en/doc/line.html","title":"line","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Parameters","slug":"parameters","link":"#parameters","children":[]},{"level":2,"title":"Expression Variables","slug":"expression-variables","link":"#expression-variables","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"Start Demo","slug":"start-demo","link":"#start-demo","children":[]},{"level":3,"title":"List Available Line Numbers","slug":"list-available-line-numbers","link":"#list-available-line-numbers","children":[]},{"level":3,"title":"Watch Arguments and Local Variables at a Line","slug":"watch-arguments-and-local-variables-at-a-line","link":"#watch-arguments-and-local-variables-at-a-line","children":[]},{"level":3,"title":"Watch Multiple Line Numbers","slug":"watch-multiple-line-numbers","link":"#watch-multiple-line-numbers","children":[]},{"level":3,"title":"Filter with a Condition Expression","slug":"filter-with-a-condition-expression","link":"#filter-with-a-condition-expression","children":[]},{"level":3,"title":"Specify Method Descriptor","slug":"specify-method-descriptor","link":"#specify-method-descriptor","children":[]},{"level":3,"title":"Print Current Stack Trace","slug":"print-current-stack-trace","link":"#print-current-stack-trace","children":[]}]},{"level":2,"title":"Notes","slug":"notes","link":"#notes","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/line.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/line.html.d873e96f.js b/assets/line.html.bfbf7f2b.js similarity index 95% rename from assets/line.html.d873e96f.js rename to assets/line.html.bfbf7f2b.js index 7f62e02ae..0b5dc3f72 100644 --- a/assets/line.html.d873e96f.js +++ b/assets/line.html.bfbf7f2b.js @@ -1 +1 @@ -const l=JSON.parse('{"key":"v-54781216","path":"/doc/line.html","title":"line","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u8868\u8FBE\u5F0F\u53D8\u91CF","slug":"\u8868\u8FBE\u5F0F\u53D8\u91CF","link":"#\u8868\u8FBE\u5F0F\u53D8\u91CF","children":[]},{"level":2,"title":"\u4F7F\u7528\u793A\u4F8B","slug":"\u4F7F\u7528\u793A\u4F8B","link":"#\u4F7F\u7528\u793A\u4F8B","children":[{"level":3,"title":"\u542F\u52A8 Demo","slug":"\u542F\u52A8-demo","link":"#\u542F\u52A8-demo","children":[]},{"level":3,"title":"\u67E5\u770B\u53EF\u7528\u884C\u53F7","slug":"\u67E5\u770B\u53EF\u7528\u884C\u53F7","link":"#\u67E5\u770B\u53EF\u7528\u884C\u53F7","children":[]},{"level":3,"title":"\u89C2\u5BDF\u6307\u5B9A\u884C\u7684\u5165\u53C2\u548C\u5C40\u90E8\u53D8\u91CF","slug":"\u89C2\u5BDF\u6307\u5B9A\u884C\u7684\u5165\u53C2\u548C\u5C40\u90E8\u53D8\u91CF","link":"#\u89C2\u5BDF\u6307\u5B9A\u884C\u7684\u5165\u53C2\u548C\u5C40\u90E8\u53D8\u91CF","children":[]},{"level":3,"title":"\u4E00\u6B21\u89C2\u5BDF\u591A\u4E2A\u884C\u53F7","slug":"\u4E00\u6B21\u89C2\u5BDF\u591A\u4E2A\u884C\u53F7","link":"#\u4E00\u6B21\u89C2\u5BDF\u591A\u4E2A\u884C\u53F7","children":[]},{"level":3,"title":"\u4F7F\u7528\u6761\u4EF6\u8868\u8FBE\u5F0F\u8FC7\u6EE4","slug":"\u4F7F\u7528\u6761\u4EF6\u8868\u8FBE\u5F0F\u8FC7\u6EE4","link":"#\u4F7F\u7528\u6761\u4EF6\u8868\u8FBE\u5F0F\u8FC7\u6EE4","children":[]},{"level":3,"title":"\u6307\u5B9A\u65B9\u6CD5\u63CF\u8FF0\u7B26","slug":"\u6307\u5B9A\u65B9\u6CD5\u63CF\u8FF0\u7B26","link":"#\u6307\u5B9A\u65B9\u6CD5\u63CF\u8FF0\u7B26","children":[]},{"level":3,"title":"\u8F93\u51FA\u5F53\u524D\u7EBF\u7A0B\u6808","slug":"\u8F93\u51FA\u5F53\u524D\u7EBF\u7A0B\u6808","link":"#\u8F93\u51FA\u5F53\u524D\u7EBF\u7A0B\u6808","children":[]}]},{"level":2,"title":"\u6CE8\u610F\u4E8B\u9879","slug":"\u6CE8\u610F\u4E8B\u9879","link":"#\u6CE8\u610F\u4E8B\u9879","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/line.md","version":"4.3.3"}');export{l as data}; +const l=JSON.parse('{"key":"v-54781216","path":"/doc/line.html","title":"line","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u8868\u8FBE\u5F0F\u53D8\u91CF","slug":"\u8868\u8FBE\u5F0F\u53D8\u91CF","link":"#\u8868\u8FBE\u5F0F\u53D8\u91CF","children":[]},{"level":2,"title":"\u4F7F\u7528\u793A\u4F8B","slug":"\u4F7F\u7528\u793A\u4F8B","link":"#\u4F7F\u7528\u793A\u4F8B","children":[{"level":3,"title":"\u542F\u52A8 Demo","slug":"\u542F\u52A8-demo","link":"#\u542F\u52A8-demo","children":[]},{"level":3,"title":"\u67E5\u770B\u53EF\u7528\u884C\u53F7","slug":"\u67E5\u770B\u53EF\u7528\u884C\u53F7","link":"#\u67E5\u770B\u53EF\u7528\u884C\u53F7","children":[]},{"level":3,"title":"\u89C2\u5BDF\u6307\u5B9A\u884C\u7684\u5165\u53C2\u548C\u5C40\u90E8\u53D8\u91CF","slug":"\u89C2\u5BDF\u6307\u5B9A\u884C\u7684\u5165\u53C2\u548C\u5C40\u90E8\u53D8\u91CF","link":"#\u89C2\u5BDF\u6307\u5B9A\u884C\u7684\u5165\u53C2\u548C\u5C40\u90E8\u53D8\u91CF","children":[]},{"level":3,"title":"\u4E00\u6B21\u89C2\u5BDF\u591A\u4E2A\u884C\u53F7","slug":"\u4E00\u6B21\u89C2\u5BDF\u591A\u4E2A\u884C\u53F7","link":"#\u4E00\u6B21\u89C2\u5BDF\u591A\u4E2A\u884C\u53F7","children":[]},{"level":3,"title":"\u4F7F\u7528\u6761\u4EF6\u8868\u8FBE\u5F0F\u8FC7\u6EE4","slug":"\u4F7F\u7528\u6761\u4EF6\u8868\u8FBE\u5F0F\u8FC7\u6EE4","link":"#\u4F7F\u7528\u6761\u4EF6\u8868\u8FBE\u5F0F\u8FC7\u6EE4","children":[]},{"level":3,"title":"\u6307\u5B9A\u65B9\u6CD5\u63CF\u8FF0\u7B26","slug":"\u6307\u5B9A\u65B9\u6CD5\u63CF\u8FF0\u7B26","link":"#\u6307\u5B9A\u65B9\u6CD5\u63CF\u8FF0\u7B26","children":[]},{"level":3,"title":"\u8F93\u51FA\u5F53\u524D\u7EBF\u7A0B\u6808","slug":"\u8F93\u51FA\u5F53\u524D\u7EBF\u7A0B\u6808","link":"#\u8F93\u51FA\u5F53\u524D\u7EBF\u7A0B\u6808","children":[]}]},{"level":2,"title":"\u6CE8\u610F\u4E8B\u9879","slug":"\u6CE8\u610F\u4E8B\u9879","link":"#\u6CE8\u610F\u4E8B\u9879","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/line.md","version":"4.3.5"}');export{l as data}; diff --git a/assets/logger.html.52980a8c.js b/assets/logger.html.3d035db4.js similarity index 92% rename from assets/logger.html.52980a8c.js rename to assets/logger.html.3d035db4.js index ae76687b2..5c6a4ba80 100644 --- a/assets/logger.html.52980a8c.js +++ b/assets/logger.html.3d035db4.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-5ae8aed9","path":"/doc/logger.html","title":"logger","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"\u67E5\u770B\u6240\u6709 logger \u4FE1\u606F","slug":"\u67E5\u770B\u6240\u6709-logger-\u4FE1\u606F","link":"#\u67E5\u770B\u6240\u6709-logger-\u4FE1\u606F","children":[]},{"level":3,"title":"\u67E5\u770B\u6307\u5B9A\u540D\u5B57\u7684 logger \u4FE1\u606F","slug":"\u67E5\u770B\u6307\u5B9A\u540D\u5B57\u7684-logger-\u4FE1\u606F","link":"#\u67E5\u770B\u6307\u5B9A\u540D\u5B57\u7684-logger-\u4FE1\u606F","children":[]},{"level":3,"title":"\u67E5\u770B\u6307\u5B9A classloader \u7684 logger \u4FE1\u606F","slug":"\u67E5\u770B\u6307\u5B9A-classloader-\u7684-logger-\u4FE1\u606F","link":"#\u67E5\u770B\u6307\u5B9A-classloader-\u7684-logger-\u4FE1\u606F","children":[]},{"level":3,"title":"\u66F4\u65B0 logger level","slug":"\u66F4\u65B0-logger-level","link":"#\u66F4\u65B0-logger-level","children":[]},{"level":3,"title":"\u6307\u5B9A classloader \u66F4\u65B0 logger level","slug":"\u6307\u5B9A-classloader-\u66F4\u65B0-logger-level","link":"#\u6307\u5B9A-classloader-\u66F4\u65B0-logger-level","children":[]},{"level":3,"title":"\u67E5\u770B\u6CA1\u6709 appender \u7684 logger \u7684\u4FE1\u606F","slug":"\u67E5\u770B\u6CA1\u6709-appender-\u7684-logger-\u7684\u4FE1\u606F","link":"#\u67E5\u770B\u6CA1\u6709-appender-\u7684-logger-\u7684\u4FE1\u606F","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/logger.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-5ae8aed9","path":"/doc/logger.html","title":"logger","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"\u67E5\u770B\u6240\u6709 logger \u4FE1\u606F","slug":"\u67E5\u770B\u6240\u6709-logger-\u4FE1\u606F","link":"#\u67E5\u770B\u6240\u6709-logger-\u4FE1\u606F","children":[]},{"level":3,"title":"\u67E5\u770B\u6307\u5B9A\u540D\u5B57\u7684 logger \u4FE1\u606F","slug":"\u67E5\u770B\u6307\u5B9A\u540D\u5B57\u7684-logger-\u4FE1\u606F","link":"#\u67E5\u770B\u6307\u5B9A\u540D\u5B57\u7684-logger-\u4FE1\u606F","children":[]},{"level":3,"title":"\u67E5\u770B\u6307\u5B9A classloader \u7684 logger \u4FE1\u606F","slug":"\u67E5\u770B\u6307\u5B9A-classloader-\u7684-logger-\u4FE1\u606F","link":"#\u67E5\u770B\u6307\u5B9A-classloader-\u7684-logger-\u4FE1\u606F","children":[]},{"level":3,"title":"\u66F4\u65B0 logger level","slug":"\u66F4\u65B0-logger-level","link":"#\u66F4\u65B0-logger-level","children":[]},{"level":3,"title":"\u6307\u5B9A classloader \u66F4\u65B0 logger level","slug":"\u6307\u5B9A-classloader-\u66F4\u65B0-logger-level","link":"#\u6307\u5B9A-classloader-\u66F4\u65B0-logger-level","children":[]},{"level":3,"title":"\u67E5\u770B\u6CA1\u6709 appender \u7684 logger \u7684\u4FE1\u606F","slug":"\u67E5\u770B\u6CA1\u6709-appender-\u7684-logger-\u7684\u4FE1\u606F","link":"#\u67E5\u770B\u6CA1\u6709-appender-\u7684-logger-\u7684\u4FE1\u606F","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/logger.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/logger.html.71a07287.js b/assets/logger.html.b88626af.js similarity index 95% rename from assets/logger.html.71a07287.js rename to assets/logger.html.b88626af.js index 458c1e43b..ea5ecd235 100644 --- a/assets/logger.html.71a07287.js +++ b/assets/logger.html.b88626af.js @@ -1,4 +1,4 @@ -import{_ as e,o as l,c as t,a,b as c,e as s,d as i,r as o}from"./app.524ecf5c.js";const p={},r=a("h1",{id:"logger",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#logger","aria-hidden":"true"},"#"),s(" logger")],-1),d={href:"https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=command-logger",target:"_blank",rel:"noopener noreferrer"},u=a("code",null,"logger",-1),v=s(" online tutorial"),g=i(`

    TIP

    Print the logger information, update the logger level

    Usage

    Take the following logback.xml as an example:

    <?xml version="1.0" encoding="UTF-8"?>
    +import{_ as a,o as s,c as n,d as e}from"./app.e2427bec.js";const l={},t=e(`

    logger

    TIP

    Print the logger information, update the logger level

    Usage

    Take the following logback.xml as an example:

    <?xml version="1.0" encoding="UTF-8"?>
     <configuration>
         <appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender">
             <file>app.log</file>
    @@ -133,4 +133,4 @@ update logger level success.
      additivity                             true
      codeSource                             file:/Users/hengyunabc/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar
     ...
    -
    `,29);function k(m,b){const n=o("ExternalLinkIcon");return l(),t("div",null,[r,a("p",null,[a("a",d,[u,v,c(n)])]),g])}const f=e(p,[["render",k],["__file","logger.html.vue"]]);export{f as default}; +
    `,30),c=[t];function i(o,p){return s(),n("div",null,c)}const d=a(l,[["render",i],["__file","logger.html.vue"]]);export{d as default}; diff --git a/assets/logger.html.2c243abb.js b/assets/logger.html.c09808a8.js similarity index 94% rename from assets/logger.html.2c243abb.js rename to assets/logger.html.c09808a8.js index 4f5c8a58e..4c9ea5c9b 100644 --- a/assets/logger.html.2c243abb.js +++ b/assets/logger.html.c09808a8.js @@ -1,4 +1,4 @@ -import{_ as e,o as l,c,a,b as t,e as s,d as o,r as p}from"./app.524ecf5c.js";const i={},r=a("h1",{id:"logger",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#logger","aria-hidden":"true"},"#"),s(" logger")],-1),d={href:"https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=command-logger",target:"_blank",rel:"noopener noreferrer"},u=a("code",null,"logger",-1),v=s("\u5728\u7EBF\u6559\u7A0B"),g=o(`

    \u63D0\u793A

    \u67E5\u770B logger \u4FE1\u606F\uFF0C\u66F4\u65B0 logger level

    \u4F7F\u7528\u53C2\u8003

    \u67E5\u770B\u6240\u6709 logger \u4FE1\u606F

    \u4EE5\u4E0B\u9762\u7684logback.xml\u4E3A\u4F8B\uFF1A

    <?xml version="1.0" encoding="UTF-8"?>
    +import{_ as a,o as s,c as n,d as e}from"./app.e2427bec.js";const l={},c=e(`

    logger

    \u63D0\u793A

    \u67E5\u770B logger \u4FE1\u606F\uFF0C\u66F4\u65B0 logger level

    \u4F7F\u7528\u53C2\u8003

    \u67E5\u770B\u6240\u6709 logger \u4FE1\u606F

    \u4EE5\u4E0B\u9762\u7684logback.xml\u4E3A\u4F8B\uFF1A

    <?xml version="1.0" encoding="UTF-8"?>
     <configuration>
         <appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender">
             <file>app.log</file>
    @@ -133,4 +133,4 @@ update logger level success.
      additivity                             true
      codeSource                             file:/Users/hengyunabc/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar
     ...
    -
    `,29);function k(m,b){const n=p("ExternalLinkIcon");return l(),c("div",null,[r,a("p",null,[a("a",d,[u,v,t(n)])]),g])}const L=e(i,[["render",k],["__file","logger.html.vue"]]);export{L as default}; +
    `,30),t=[c];function p(i,o){return s(),n("div",null,t)}const r=a(l,[["render",p],["__file","logger.html.vue"]]);export{r as default}; diff --git a/assets/logger.html.274394d2.js b/assets/logger.html.e09aeaa6.js similarity index 88% rename from assets/logger.html.274394d2.js rename to assets/logger.html.e09aeaa6.js index ae42a0a74..3c14295a2 100644 --- a/assets/logger.html.274394d2.js +++ b/assets/logger.html.e09aeaa6.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-7e581f76","path":"/en/doc/logger.html","title":"logger","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"Print the logger information","slug":"print-the-logger-information","link":"#print-the-logger-information","children":[]},{"level":3,"title":"View logger information for the special name","slug":"view-logger-information-for-the-special-name","link":"#view-logger-information-for-the-special-name","children":[]},{"level":3,"title":"View logger information for the special classloader","slug":"view-logger-information-for-the-special-classloader","link":"#view-logger-information-for-the-special-classloader","children":[]},{"level":3,"title":"Update logger level","slug":"update-logger-level","link":"#update-logger-level","children":[]},{"level":3,"title":"Speecify classloader to update logger level","slug":"speecify-classloader-to-update-logger-level","link":"#speecify-classloader-to-update-logger-level","children":[]},{"level":3,"title":"View the logger information without appenders","slug":"view-the-logger-information-without-appenders","link":"#view-the-logger-information-without-appenders","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/logger.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-7e581f76","path":"/en/doc/logger.html","title":"logger","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"Print the logger information","slug":"print-the-logger-information","link":"#print-the-logger-information","children":[]},{"level":3,"title":"View logger information for the special name","slug":"view-logger-information-for-the-special-name","link":"#view-logger-information-for-the-special-name","children":[]},{"level":3,"title":"View logger information for the special classloader","slug":"view-logger-information-for-the-special-classloader","link":"#view-logger-information-for-the-special-classloader","children":[]},{"level":3,"title":"Update logger level","slug":"update-logger-level","link":"#update-logger-level","children":[]},{"level":3,"title":"Speecify classloader to update logger level","slug":"speecify-classloader-to-update-logger-level","link":"#speecify-classloader-to-update-logger-level","children":[]},{"level":3,"title":"View the logger information without appenders","slug":"view-the-logger-information-without-appenders","link":"#view-the-logger-information-without-appenders","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/logger.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/manual-install.html.c8373a08.js b/assets/manual-install.html.315a4f72.js similarity index 99% rename from assets/manual-install.html.c8373a08.js rename to assets/manual-install.html.315a4f72.js index 9b0df91d5..6d10f36c9 100644 --- a/assets/manual-install.html.c8373a08.js +++ b/assets/manual-install.html.315a4f72.js @@ -1,4 +1,4 @@ -import{_ as o,o as i,c as r,a,b as t,e,d as s,r as l}from"./app.524ecf5c.js";const c={},d=a("h1",{id:"manually-install-arthas",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#manually-install-arthas","aria-hidden":"true"},"#"),e(" Manually Install Arthas")],-1),p=a("p",null,"Download the latest version",-1),h=a("strong",null,"Latest version, Click To Download",-1),u=e(": "),m={href:"https://arthas.aliyun.com/download/latest_version",target:"_blank",rel:"noopener noreferrer"},v=a("img",{src:"https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square",alt:"",title:"Arthas"},null,-1),b=s(`
  • Unzip zip file

    unzip arthas-packaging-bin.zip
    +import{_ as o,o as i,c as r,a,b as t,e,d as s,r as l}from"./app.e2427bec.js";const c={},d=a("h1",{id:"manually-install-arthas",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#manually-install-arthas","aria-hidden":"true"},"#"),e(" Manually Install Arthas")],-1),p=a("p",null,"Download the latest version",-1),h=a("strong",null,"Latest version, Click To Download",-1),u=e(": "),m={href:"https://arthas.aliyun.com/download/latest_version",target:"_blank",rel:"noopener noreferrer"},v=a("img",{src:"https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square",alt:"",title:"Arthas"},null,-1),b=s(`
  • Unzip zip file

    unzip arthas-packaging-bin.zip
     
  • Install Arthas

    It is recommended to completely remove all old versions of Arthas before installation.

    sudo su admin
     rm -rf /home/admin/.arthas/lib/* # remove all the leftover of the old outdated Arthas
     cd arthas
    diff --git a/assets/manual-install.html.0447e151.js b/assets/manual-install.html.81853c98.js
    similarity index 99%
    rename from assets/manual-install.html.0447e151.js
    rename to assets/manual-install.html.81853c98.js
    index a255de294..07d853f99 100644
    --- a/assets/manual-install.html.0447e151.js
    +++ b/assets/manual-install.html.81853c98.js
    @@ -1,4 +1,4 @@
    -import{_ as i,o as l,c as r,a,b as t,e,d as s,r as d}from"./app.524ecf5c.js";const c={},o=a("h1",{id:"\u624B\u52A8\u5B89\u88C5-arthas",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u624B\u52A8\u5B89\u88C5-arthas","aria-hidden":"true"},"#"),e(" \u624B\u52A8\u5B89\u88C5 Arthas")],-1),p=a("p",null,"\u4E0B\u8F7D\u6700\u65B0\u7248\u672C",-1),h=a("strong",null,"\u6700\u65B0\u7248\u672C\uFF0C\u70B9\u51FB\u4E0B\u8F7D",-1),u=e("\uFF1A"),v={href:"https://arthas.aliyun.com/download/latest_version?mirror=aliyun",target:"_blank",rel:"noopener noreferrer"},m=a("img",{src:"https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square",alt:"",title:"Arthas"},null,-1),b=s(`
  • \u89E3\u538B\u7F29 arthas \u7684\u538B\u7F29\u5305

    unzip arthas-packaging-bin.zip
    +import{_ as i,o as l,c as r,a,b as t,e,d as s,r as d}from"./app.e2427bec.js";const c={},o=a("h1",{id:"\u624B\u52A8\u5B89\u88C5-arthas",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u624B\u52A8\u5B89\u88C5-arthas","aria-hidden":"true"},"#"),e(" \u624B\u52A8\u5B89\u88C5 Arthas")],-1),p=a("p",null,"\u4E0B\u8F7D\u6700\u65B0\u7248\u672C",-1),h=a("strong",null,"\u6700\u65B0\u7248\u672C\uFF0C\u70B9\u51FB\u4E0B\u8F7D",-1),u=e("\uFF1A"),v={href:"https://arthas.aliyun.com/download/latest_version?mirror=aliyun",target:"_blank",rel:"noopener noreferrer"},m=a("img",{src:"https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square",alt:"",title:"Arthas"},null,-1),b=s(`
  • \u89E3\u538B\u7F29 arthas \u7684\u538B\u7F29\u5305

    unzip arthas-packaging-bin.zip
     
  • \u5B89\u88C5 Arthas

    \u5B89\u88C5\u4E4B\u524D\u6700\u597D\u628A\u6240\u6709\u8001\u7248\u672C\u7684 Arthas \u5168\u90FD\u5220\u6389

    sudo su admin
     rm -rf /home/admin/.arthas/lib/*
     cd arthas
    diff --git a/assets/manual-install.html.0d9682ca.js b/assets/manual-install.html.85f99b8b.js
    similarity index 85%
    rename from assets/manual-install.html.0d9682ca.js
    rename to assets/manual-install.html.85f99b8b.js
    index cdce66e70..3a21c6829 100644
    --- a/assets/manual-install.html.0d9682ca.js
    +++ b/assets/manual-install.html.85f99b8b.js
    @@ -1 +1 @@
    -const a=JSON.parse('{"key":"v-bbaa3c7e","path":"/en/doc/manual-install.html","title":"Manually Install Arthas","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Startup with as.sh/as.bat","slug":"startup-with-as-sh-as-bat","link":"#startup-with-as-sh-as-bat","children":[{"level":3,"title":"Linux/Unix/Mac","slug":"linux-unix-mac","link":"#linux-unix-mac","children":[]},{"level":3,"title":"Windows","slug":"windows","link":"#windows","children":[]}]},{"level":2,"title":"Manual command line startup","slug":"manual-command-line-startup","link":"#manual-command-line-startup","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/manual-install.md","version":"4.3.3"}');export{a as data};
    +const a=JSON.parse('{"key":"v-bbaa3c7e","path":"/en/doc/manual-install.html","title":"Manually Install Arthas","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Startup with as.sh/as.bat","slug":"startup-with-as-sh-as-bat","link":"#startup-with-as-sh-as-bat","children":[{"level":3,"title":"Linux/Unix/Mac","slug":"linux-unix-mac","link":"#linux-unix-mac","children":[]},{"level":3,"title":"Windows","slug":"windows","link":"#windows","children":[]}]},{"level":2,"title":"Manual command line startup","slug":"manual-command-line-startup","link":"#manual-command-line-startup","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/manual-install.md","version":"4.3.5"}');export{a as data};
    diff --git a/assets/manual-install.html.73a696a2.js b/assets/manual-install.html.c9b06816.js
    similarity index 88%
    rename from assets/manual-install.html.73a696a2.js
    rename to assets/manual-install.html.c9b06816.js
    index 3d5260fdf..5b3eb1b6c 100644
    --- a/assets/manual-install.html.73a696a2.js
    +++ b/assets/manual-install.html.c9b06816.js
    @@ -1 +1 @@
    -const l=JSON.parse('{"key":"v-6a31cc55","path":"/doc/manual-install.html","title":"\u624B\u52A8\u5B89\u88C5 Arthas","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4EE5\u811A\u672C\u7684\u65B9\u5F0F\u542F\u52A8 as.sh/as.bat","slug":"\u4EE5\u811A\u672C\u7684\u65B9\u5F0F\u542F\u52A8-as-sh-as-bat","link":"#\u4EE5\u811A\u672C\u7684\u65B9\u5F0F\u542F\u52A8-as-sh-as-bat","children":[{"level":3,"title":"Linux/Unix/Mac","slug":"linux-unix-mac","link":"#linux-unix-mac","children":[]},{"level":3,"title":"Windows","slug":"windows","link":"#windows","children":[]}]},{"level":2,"title":"\u624B\u52A8\u62FC\u63A5\u547D\u4EE4\u884C\u542F\u52A8","slug":"\u624B\u52A8\u62FC\u63A5\u547D\u4EE4\u884C\u542F\u52A8","link":"#\u624B\u52A8\u62FC\u63A5\u547D\u4EE4\u884C\u542F\u52A8","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/manual-install.md","version":"4.3.3"}');export{l as data};
    +const l=JSON.parse('{"key":"v-6a31cc55","path":"/doc/manual-install.html","title":"\u624B\u52A8\u5B89\u88C5 Arthas","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4EE5\u811A\u672C\u7684\u65B9\u5F0F\u542F\u52A8 as.sh/as.bat","slug":"\u4EE5\u811A\u672C\u7684\u65B9\u5F0F\u542F\u52A8-as-sh-as-bat","link":"#\u4EE5\u811A\u672C\u7684\u65B9\u5F0F\u542F\u52A8-as-sh-as-bat","children":[{"level":3,"title":"Linux/Unix/Mac","slug":"linux-unix-mac","link":"#linux-unix-mac","children":[]},{"level":3,"title":"Windows","slug":"windows","link":"#windows","children":[]}]},{"level":2,"title":"\u624B\u52A8\u62FC\u63A5\u547D\u4EE4\u884C\u542F\u52A8","slug":"\u624B\u52A8\u62FC\u63A5\u547D\u4EE4\u884C\u542F\u52A8","link":"#\u624B\u52A8\u62FC\u63A5\u547D\u4EE4\u884C\u542F\u52A8","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/manual-install.md","version":"4.3.5"}');export{l as data};
    diff --git a/assets/mbean.html.95b86909.js b/assets/mbean.html.0bf95e2b.js
    similarity index 78%
    rename from assets/mbean.html.95b86909.js
    rename to assets/mbean.html.0bf95e2b.js
    index e2f381a49..af2ea3270 100644
    --- a/assets/mbean.html.95b86909.js
    +++ b/assets/mbean.html.0bf95e2b.js
    @@ -1 +1 @@
    -const e=JSON.parse('{"key":"v-8ebd6c68","path":"/doc/mbean.html","title":"mbean","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/mbean.md","version":"4.3.3"}');export{e as data};
    +const e=JSON.parse('{"key":"v-8ebd6c68","path":"/doc/mbean.html","title":"mbean","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/mbean.md","version":"4.3.5"}');export{e as data};
    diff --git a/assets/mbean.html.8a3771f2.js b/assets/mbean.html.927e96dd.js
    similarity index 77%
    rename from assets/mbean.html.8a3771f2.js
    rename to assets/mbean.html.927e96dd.js
    index b3b9aae79..85d8afe15 100644
    --- a/assets/mbean.html.8a3771f2.js
    +++ b/assets/mbean.html.927e96dd.js
    @@ -1 +1 @@
    -const e=JSON.parse('{"key":"v-58d22ae0","path":"/en/doc/mbean.html","title":"mbean","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Parameters","slug":"parameters","link":"#parameters","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/mbean.md","version":"4.3.3"}');export{e as data};
    +const e=JSON.parse('{"key":"v-58d22ae0","path":"/en/doc/mbean.html","title":"mbean","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Parameters","slug":"parameters","link":"#parameters","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/mbean.md","version":"4.3.5"}');export{e as data};
    diff --git a/assets/mbean.html.9eaf227e.js b/assets/mbean.html.d1e0ff54.js
    similarity index 52%
    rename from assets/mbean.html.9eaf227e.js
    rename to assets/mbean.html.d1e0ff54.js
    index bcddf98ec..3dda9eded 100644
    --- a/assets/mbean.html.9eaf227e.js
    +++ b/assets/mbean.html.d1e0ff54.js
    @@ -1,9 +1,9 @@
    -import{_ as r,o as i,c as l,a as e,b as n,e as a,d as s,r as d}from"./app.524ecf5c.js";const o={},c=e("h1",{id:"mbean",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#mbean","aria-hidden":"true"},"#"),a(" mbean")],-1),m={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-mbean",target:"_blank",rel:"noopener noreferrer"},p=e("code",null,"mbean",-1),h=a(" online tutorial"),u=s(`

    TIP

    show Mbean information

    This command can show or monitor Mbean attribute information.

    Parameters

    NameSpecification
    name-patternpattern for the Mbean name
    attribute-patternpattern 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:

    mbean
    +import{_ as s,o as r,c as i,a as e,b as d,d as a,e as t,r as l}from"./app.e2427bec.js";const o={},c=a(`

    mbean

    TIP

    show Mbean information

    This command can show or monitor Mbean attribute information.

    Parameters

    NameSpecification
    name-patternpattern for the Mbean name
    attribute-patternpattern 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:

    mbean
     

    show meta data of Mbean:

    mbean -m java.lang:type=Threading
     

    show attributes of Mbean:

    mbean java.lang:type=Threading
     

    Mbean name support wildcard matcher:

    mbean java.lang:type=Th*
    -
    `,13),b={class:"custom-container warning"},g=e("p",{class:"custom-container-title"},"WARNING",-1),v=a("Notes\uFF1AObjectName matching rules differ from normal wildcards, Reference resources\uFF1A"),f={href:"https://docs.oracle.com/javase/8/docs/api/javax/management/ObjectName.html?is-external=true",target:"_blank",rel:"noopener noreferrer"},_=a("javax.management.ObjectName"),x=s(`

    Wildcards match specific attributes:

    mbean java.lang:type=Threading *Count
    +
    `,14),m={class:"custom-container warning"},p=e("p",{class:"custom-container-title"},"WARNING",-1),h=t("Notes\uFF1AObjectName matching rules differ from normal wildcards, Reference resources\uFF1A"),u={href:"https://docs.oracle.com/javase/8/docs/api/javax/management/ObjectName.html?is-external=true",target:"_blank",rel:"noopener noreferrer"},b=t("javax.management.ObjectName"),g=a(`

    Wildcards match specific attributes:

    mbean java.lang:type=Threading *Count
     

    Switch to regular matching using the -E command:

    mbean -E java.lang:type=Threading PeakThreadCount|ThreadCount|DaemonThreadCount
     

    Real-time monitoring using -i command:

    mbean -i 1000 java.lang:type=Threading *Count
     

    Real-time monitoring using -i with number of times the command will be executed using -n command (100 times by default):

    mbean -i 1000 -n 50 java.lang:type=Threading *Count
    -
    `,8);function y(k,w){const t=d("ExternalLinkIcon");return i(),l("div",null,[c,e("p",null,[e("a",m,[p,h,n(t)])]),u,e("div",b,[g,e("p",null,[v,e("a",f,[_,n(t)])])]),x])}const T=r(o,[["render",y],["__file","mbean.html.vue"]]);export{T as default}; +
    `,8);function v(f,x){const n=l("ExternalLinkIcon");return r(),i("div",null,[c,e("div",m,[p,e("p",null,[h,e("a",u,[b,d(n)])])]),g])}const y=s(o,[["render",v],["__file","mbean.html.vue"]]);export{y as default}; diff --git a/assets/mbean.html.c8caf62f.js b/assets/mbean.html.ee4f07f1.js similarity index 52% rename from assets/mbean.html.c8caf62f.js rename to assets/mbean.html.ee4f07f1.js index bb38ef924..ffe40390f 100644 --- a/assets/mbean.html.c8caf62f.js +++ b/assets/mbean.html.ee4f07f1.js @@ -1,9 +1,9 @@ -import{_ as r,o as d,c as l,a as e,b as t,e as a,d as s,r as i}from"./app.524ecf5c.js";const o={},c=e("h1",{id:"mbean",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#mbean","aria-hidden":"true"},"#"),a(" mbean")],-1),p={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-mbean",target:"_blank",rel:"noopener noreferrer"},h=e("code",null,"mbean",-1),m=a("\u5728\u7EBF\u6559\u7A0B"),b=s(`

    \u63D0\u793A

    \u67E5\u770B Mbean \u7684\u4FE1\u606F

    \u8FD9\u4E2A\u547D\u4EE4\u53EF\u4EE5\u4FBF\u6377\u7684\u67E5\u770B\u6216\u76D1\u63A7 Mbean \u7684\u5C5E\u6027\u4FE1\u606F\u3002

    \u53C2\u6570\u8BF4\u660E

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    name-pattern\u540D\u79F0\u8868\u8FBE\u5F0F\u5339\u914D
    attribute-pattern\u5C5E\u6027\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    [m]\u67E5\u770B\u5143\u4FE1\u606F
    [i:]\u5237\u65B0\u5C5E\u6027\u503C\u7684\u65F6\u95F4\u95F4\u9694 (ms)
    [n:]\u5237\u65B0\u5C5E\u6027\u503C\u7684\u6B21\u6570
    [E]\u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u4E3A\u901A\u914D\u7B26\u5339\u914D\u3002\u4EC5\u5BF9\u5C5E\u6027\u540D\u6709\u6548

    \u4F7F\u7528\u53C2\u8003

    \u5217\u51FA\u6240\u6709 Mbean \u7684\u540D\u79F0\uFF1A

    mbean
    +import{_ as t,o as r,c as d,a as e,b as i,d as a,e as n,r as l}from"./app.e2427bec.js";const o={},c=a(`

    mbean

    \u63D0\u793A

    \u67E5\u770B Mbean \u7684\u4FE1\u606F

    \u8FD9\u4E2A\u547D\u4EE4\u53EF\u4EE5\u4FBF\u6377\u7684\u67E5\u770B\u6216\u76D1\u63A7 Mbean \u7684\u5C5E\u6027\u4FE1\u606F\u3002

    \u53C2\u6570\u8BF4\u660E

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    name-pattern\u540D\u79F0\u8868\u8FBE\u5F0F\u5339\u914D
    attribute-pattern\u5C5E\u6027\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    [m]\u67E5\u770B\u5143\u4FE1\u606F
    [i:]\u5237\u65B0\u5C5E\u6027\u503C\u7684\u65F6\u95F4\u95F4\u9694 (ms)
    [n:]\u5237\u65B0\u5C5E\u6027\u503C\u7684\u6B21\u6570
    [E]\u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u4E3A\u901A\u914D\u7B26\u5339\u914D\u3002\u4EC5\u5BF9\u5C5E\u6027\u540D\u6709\u6548

    \u4F7F\u7528\u53C2\u8003

    \u5217\u51FA\u6240\u6709 Mbean \u7684\u540D\u79F0\uFF1A

    mbean
     

    \u67E5\u770B Mbean \u7684\u5143\u4FE1\u606F\uFF1A

    mbean -m java.lang:type=Threading
     

    \u67E5\u770B mbean \u5C5E\u6027\u4FE1\u606F\uFF1A

    mbean java.lang:type=Threading
     

    mbean \u7684 name \u652F\u6301\u901A\u914D\u7B26\u5339\u914D\uFF1A

    mbean java.lang:type=Th*
    -
    `,13),u={class:"custom-container warning"},g=e("p",{class:"custom-container-title"},"\u6CE8\u610F",-1),v=a("\u6CE8\u610F\uFF1AObjectName \u7684\u5339\u914D\u89C4\u5219\u4E0E\u6B63\u5E38\u7684\u901A\u914D\u7B26\u5B58\u5728\u5DEE\u5F02\uFF0C\u8BE6\u7EC6\u53C2\u89C1\uFF1A"),_={href:"https://docs.oracle.com/javase/8/docs/api/javax/management/ObjectName.html?is-external=true",target:"_blank",rel:"noopener noreferrer"},x=a("javax.management.ObjectName"),k=s(`

    \u901A\u914D\u7B26\u5339\u914D\u7279\u5B9A\u7684\u5C5E\u6027\u5B57\u6BB5\uFF1A

    mbean java.lang:type=Threading *Count
    +
    `,14),p={class:"custom-container warning"},h=e("p",{class:"custom-container-title"},"\u6CE8\u610F",-1),m=n("\u6CE8\u610F\uFF1AObjectName \u7684\u5339\u914D\u89C4\u5219\u4E0E\u6B63\u5E38\u7684\u901A\u914D\u7B26\u5B58\u5728\u5DEE\u5F02\uFF0C\u8BE6\u7EC6\u53C2\u89C1\uFF1A"),b={href:"https://docs.oracle.com/javase/8/docs/api/javax/management/ObjectName.html?is-external=true",target:"_blank",rel:"noopener noreferrer"},u=n("javax.management.ObjectName"),g=a(`

    \u901A\u914D\u7B26\u5339\u914D\u7279\u5B9A\u7684\u5C5E\u6027\u5B57\u6BB5\uFF1A

    mbean java.lang:type=Threading *Count
     

    \u4F7F\u7528-E\u547D\u4EE4\u5207\u6362\u4E3A\u6B63\u5219\u5339\u914D\uFF1A

    mbean -E java.lang:type=Threading PeakThreadCount|ThreadCount|DaemonThreadCount
     

    \u4F7F\u7528-i\u547D\u4EE4\u5B9E\u65F6\u76D1\u63A7\uFF1A

    mbean -i 1000 java.lang:type=Threading *Count
     

    \u5B9E\u65F6\u76D1\u63A7\u4F7F\u7528-i\uFF0C\u4F7F\u7528-n\u547D\u4EE4\u6267\u884C\u547D\u4EE4\u7684\u6B21\u6570\uFF08\u9ED8\u8BA4\u4E3A 100 \u6B21\uFF09\uFF1A

    mbean -i 1000 -n 50 java.lang:type=Threading *Count
    -
    `,8);function y(f,j){const n=i("ExternalLinkIcon");return d(),l("div",null,[c,e("p",null,[e("a",p,[h,m,t(n)])]),b,e("div",u,[g,e("p",null,[v,e("a",_,[x,t(n)])])]),k])}const C=r(o,[["render",y],["__file","mbean.html.vue"]]);export{C as default}; +
    `,8);function v(x,_){const s=l("ExternalLinkIcon");return r(),d("div",null,[c,e("div",p,[h,e("p",null,[m,e("a",b,[u,i(s)])])]),g])}const y=t(o,[["render",v],["__file","mbean.html.vue"]]);export{y as default}; diff --git a/assets/mc.html.3c57e00d.js b/assets/mc.html.3c57e00d.js deleted file mode 100644 index 312d05e21..000000000 --- a/assets/mc.html.3c57e00d.js +++ /dev/null @@ -1,8 +0,0 @@ -import{_ as r,o as d,c as l,a as e,b as a,w as o,e as s,d as i,r as t}from"./app.524ecf5c.js";const m={},p=e("h1",{id:"mc",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#mc","aria-hidden":"true"},"#"),s(" mc")],-1),u={href:"https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=command-mc-retransform",target:"_blank",rel:"noopener noreferrer"},h=e("code",null,"mc-retransform",-1),_=s("\u5728\u7EBF\u6559\u7A0B"),v=i(`

    \u4F7F\u7528\u53C2\u8003

    \u63D0\u793A

    Memory Compiler/\u5185\u5B58\u7F16\u8BD1\u5668\uFF0C\u7F16\u8BD1.java\u6587\u4EF6\u751F\u6210.class\u3002

    mc /tmp/Test.java
    -

    \u53EF\u4EE5\u901A\u8FC7-c\u53C2\u6570\u6307\u5B9A classloader\uFF1A

    mc -c 327a647b /tmp/Test.java
    -

    \u4E5F\u53EF\u4EE5\u901A\u8FC7--classLoaderClass\u53C2\u6570\u6307\u5B9A ClassLoader\uFF1A

    $ mc --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader /tmp/UserController.java -d /tmp
    -Memory compiler output:
    -/tmp/com/example/demo/arthas/user/UserController.class
    -Affect(row-cnt:1) cost in 346 ms
    -

    \u53EF\u4EE5\u901A\u8FC7-d\u547D\u4EE4\u6307\u5B9A\u8F93\u51FA\u76EE\u5F55\uFF1A

    mc -d /tmp/output /tmp/ClassA.java /tmp/ClassB.java
    -
    `,9),b=s("\u7F16\u8BD1\u751F\u6210"),f=e("code",null,".class",-1),g=s("\u6587\u4EF6\u4E4B\u540E\uFF0C\u53EF\u4EE5\u7ED3\u5408"),k=s("retransform"),x=s("\u547D\u4EE4\u5B9E\u73B0\u70ED\u66F4\u65B0\u4EE3\u7801\u3002"),C={class:"custom-container warning"},L=e("p",{class:"custom-container-title"},"\u6CE8\u610F",-1),j=s("\u6CE8\u610F\uFF0Cmc \u547D\u4EE4\u6709\u53EF\u80FD\u5931\u8D25\u3002\u5982\u679C\u7F16\u8BD1\u5931\u8D25\u53EF\u4EE5\u5728\u672C\u5730\u7F16\u8BD1\u597D"),w=e("code",null,".class",-1),y=s("\u6587\u4EF6\uFF0C\u518D\u4E0A\u4F20\u5230\u670D\u52A1\u5668\u3002\u5177\u4F53\u53C2\u8003"),B=s("retransform"),N=s("\u547D\u4EE4\u8BF4\u660E\u3002");function V(E,R){const c=t("ExternalLinkIcon"),n=t("RouterLink");return d(),l("div",null,[p,e("p",null,[e("a",u,[h,_,a(c)])]),v,e("p",null,[b,f,g,a(n,{to:"/doc/retransform.html"},{default:o(()=>[k]),_:1}),x]),e("div",C,[L,e("p",null,[j,w,y,a(n,{to:"/doc/retransform.html"},{default:o(()=>[B]),_:1}),N])])])}const U=r(m,[["render",V],["__file","mc.html.vue"]]);export{U as default}; diff --git a/assets/mc.html.9ed50f47.js b/assets/mc.html.9ed50f47.js new file mode 100644 index 000000000..5f2d3173a --- /dev/null +++ b/assets/mc.html.9ed50f47.js @@ -0,0 +1,8 @@ +import{_ as c,o as t,c as r,a as s,b as n,w as o,d,e,r as l}from"./app.e2427bec.js";const i={},p=d(`

    mc

    \u4F7F\u7528\u53C2\u8003

    \u63D0\u793A

    Memory Compiler/\u5185\u5B58\u7F16\u8BD1\u5668\uFF0C\u7F16\u8BD1.java\u6587\u4EF6\u751F\u6210.class\u3002

    mc /tmp/Test.java
    +

    \u53EF\u4EE5\u901A\u8FC7-c\u53C2\u6570\u6307\u5B9A classloader\uFF1A

    mc -c 327a647b /tmp/Test.java
    +

    \u4E5F\u53EF\u4EE5\u901A\u8FC7--classLoaderClass\u53C2\u6570\u6307\u5B9A ClassLoader\uFF1A

    $ mc --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader /tmp/UserController.java -d /tmp
    +Memory compiler output:
    +/tmp/com/example/demo/arthas/user/UserController.class
    +Affect(row-cnt:1) cost in 346 ms
    +

    \u53EF\u4EE5\u901A\u8FC7-d\u547D\u4EE4\u6307\u5B9A\u8F93\u51FA\u76EE\u5F55\uFF1A

    mc -d /tmp/output /tmp/ClassA.java /tmp/ClassB.java
    +
    `,10),m=e("\u7F16\u8BD1\u751F\u6210"),u=s("code",null,".class",-1),h=e("\u6587\u4EF6\u4E4B\u540E\uFF0C\u53EF\u4EE5\u7ED3\u5408"),v=e("retransform"),_=e("\u547D\u4EE4\u5B9E\u73B0\u70ED\u66F4\u65B0\u4EE3\u7801\u3002"),b={class:"custom-container warning"},f=s("p",{class:"custom-container-title"},"\u6CE8\u610F",-1),g=e("\u6CE8\u610F\uFF0Cmc \u547D\u4EE4\u6709\u53EF\u80FD\u5931\u8D25\u3002\u5982\u679C\u7F16\u8BD1\u5931\u8D25\u53EF\u4EE5\u5728\u672C\u5730\u7F16\u8BD1\u597D"),k=s("code",null,".class",-1),x=e("\u6587\u4EF6\uFF0C\u518D\u4E0A\u4F20\u5230\u670D\u52A1\u5668\u3002\u5177\u4F53\u53C2\u8003"),C=e("retransform"),L=e("\u547D\u4EE4\u8BF4\u660E\u3002");function j(w,B){const a=l("RouterLink");return t(),r("div",null,[p,s("p",null,[m,u,h,n(a,{to:"/doc/retransform.html"},{default:o(()=>[v]),_:1}),_]),s("div",b,[f,s("p",null,[g,k,x,n(a,{to:"/doc/retransform.html"},{default:o(()=>[C]),_:1}),L])])])}const V=c(i,[["render",j],["__file","mc.html.vue"]]);export{V as default}; diff --git a/assets/mc.html.96f7758d.js b/assets/mc.html.d96eb37d.js similarity index 68% rename from assets/mc.html.96f7758d.js rename to assets/mc.html.d96eb37d.js index 134be3b85..bf6405b8b 100644 --- a/assets/mc.html.96f7758d.js +++ b/assets/mc.html.d96eb37d.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-2ac66c02","path":"/en/doc/mc.html","title":"mc","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/mc.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-2ac66c02","path":"/en/doc/mc.html","title":"mc","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/mc.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/mc.html.2bb09391.js b/assets/mc.html.e292ce83.js similarity index 71% rename from assets/mc.html.2bb09391.js rename to assets/mc.html.e292ce83.js index 955b07cba..3e2762df4 100644 --- a/assets/mc.html.2bb09391.js +++ b/assets/mc.html.e292ce83.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-3b401ada","path":"/doc/mc.html","title":"mc","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/mc.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-3b401ada","path":"/doc/mc.html","title":"mc","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/mc.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/mc.html.f0819ad2.js b/assets/mc.html.f0819ad2.js new file mode 100644 index 000000000..8b9505c58 --- /dev/null +++ b/assets/mc.html.f0819ad2.js @@ -0,0 +1,8 @@ +import{_ as o,o as c,c as i,a as s,b as n,w as t,d,e,r as l}from"./app.e2427bec.js";const r={},p=d(`

    mc

    Usage

    TIP

    Memory compiler, compiles .java files into .class files in memory.

    mc /tmp/Test.java
    +

    The classloader can be specified with the -c option:

    mc -c 327a647b /tmp/Test.java
    +

    You can also specify the ClassLoader with the --classLoaderClass option:

    $ mc --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader /tmp/UserController.java -d /tmp
    +Memory compiler output:
    +/tmp/com/example/demo/arthas/user/UserController.class
    +Affect(row-cnt:1) cost in 346 ms
    +

    The output directory can be specified with the -d option:

    mc -d /tmp/output /tmp/ClassA.java /tmp/ClassB.java
    +
    `,10),m=e("After compiling the "),u=s("code",null,".class",-1),h=e(" file, you can use the "),v=e("retransform"),_=e(" command to re-define the loaded classes in JVM."),b={class:"custom-container warning"},f=s("p",{class:"custom-container-title"},"WARNING",-1),g=e("Note that the mc command may fail. If the compilation fails, the "),k=s("code",null,".class",-1),x=e(" file can be compiled locally and uploaded to the server. Refer to the "),C=e("retransform"),w=e(" command description for details.");function y(L,N){const a=l("RouterLink");return c(),i("div",null,[p,s("p",null,[m,u,h,n(a,{to:"/en/doc/retransform.html"},{default:t(()=>[v]),_:1}),_]),s("div",b,[f,s("p",null,[g,k,x,n(a,{to:"/en/doc/retransform.html"},{default:t(()=>[C]),_:1}),w])])])}const T=o(r,[["render",y],["__file","mc.html.vue"]]);export{T as default}; diff --git a/assets/mc.html.f537545c.js b/assets/mc.html.f537545c.js deleted file mode 100644 index 343fa0e2e..000000000 --- a/assets/mc.html.f537545c.js +++ /dev/null @@ -1,8 +0,0 @@ -import{_ as i,o as r,c as l,a as e,b as a,w as o,e as s,d,r as t}from"./app.524ecf5c.js";const m={},p=e("h1",{id:"mc",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#mc","aria-hidden":"true"},"#"),s(" mc")],-1),u={href:"https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=command-mc-retransform",target:"_blank",rel:"noopener noreferrer"},h=e("code",null,"mc-retransform",-1),_=s(" online tutorial"),v=d(`

    Usage

    TIP

    Memory compiler, compiles .java files into .class files in memory.

    mc /tmp/Test.java
    -

    The classloader can be specified with the -c option:

    mc -c 327a647b /tmp/Test.java
    -

    You can also specify the ClassLoader with the --classLoaderClass option:

    $ mc --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader /tmp/UserController.java -d /tmp
    -Memory compiler output:
    -/tmp/com/example/demo/arthas/user/UserController.class
    -Affect(row-cnt:1) cost in 346 ms
    -

    The output directory can be specified with the -d option:

    mc -d /tmp/output /tmp/ClassA.java /tmp/ClassB.java
    -
    `,9),f=s("After compiling the "),b=e("code",null,".class",-1),g=s(" file, you can use the "),k=s("retransform"),x=s(" command to re-define the loaded classes in JVM."),y={class:"custom-container warning"},C=e("p",{class:"custom-container-title"},"WARNING",-1),L=s("Note that the mc command may fail. If the compilation fails, the "),w=e("code",null,".class",-1),N=s(" file can be compiled locally and uploaded to the server. Refer to the "),j=s("retransform"),T=s(" command description for details.");function I(R,V){const c=t("ExternalLinkIcon"),n=t("RouterLink");return r(),l("div",null,[p,e("p",null,[e("a",u,[h,_,a(c)])]),v,e("p",null,[f,b,g,a(n,{to:"/en/doc/retransform.html"},{default:o(()=>[k]),_:1}),x]),e("div",y,[C,e("p",null,[L,w,N,a(n,{to:"/en/doc/retransform.html"},{default:o(()=>[j]),_:1}),T])])])}const B=i(m,[["render",I],["__file","mc.html.vue"]]);export{B as default}; diff --git a/assets/mcp-server.html.f0f4ef7d.js b/assets/mcp-server.html.3cd2eec5.js similarity index 97% rename from assets/mcp-server.html.f0f4ef7d.js rename to assets/mcp-server.html.3cd2eec5.js index 77746d40e..e08c36210 100644 --- a/assets/mcp-server.html.f0f4ef7d.js +++ b/assets/mcp-server.html.3cd2eec5.js @@ -1 +1 @@ -const l=JSON.parse('{"key":"v-67bc6553","path":"/doc/mcp-server.html","title":"Arthas MCP Server","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u6982\u89C8","slug":"\u6982\u89C8","link":"#\u6982\u89C8","children":[{"level":3,"title":"\u4E3B\u8981\u7279\u6027","slug":"\u4E3B\u8981\u7279\u6027","link":"#\u4E3B\u8981\u7279\u6027","children":[]}]},{"level":2,"title":"\u652F\u6301\u7684\u8BCA\u65AD\u5DE5\u5177","slug":"\u652F\u6301\u7684\u8BCA\u65AD\u5DE5\u5177","link":"#\u652F\u6301\u7684\u8BCA\u65AD\u5DE5\u5177","children":[{"level":3,"title":"JVM \u76F8\u5173\u5DE5\u5177\uFF0813 \u4E2A\uFF09","slug":"jvm-\u76F8\u5173\u5DE5\u5177-13-\u4E2A","link":"#jvm-\u76F8\u5173\u5DE5\u5177-13-\u4E2A","children":[]},{"level":3,"title":"Class/ClassLoader \u76F8\u5173\u5DE5\u5177\uFF088 \u4E2A\uFF09","slug":"class-classloader-\u76F8\u5173\u5DE5\u5177-8-\u4E2A","link":"#class-classloader-\u76F8\u5173\u5DE5\u5177-8-\u4E2A","children":[]},{"level":3,"title":"\u76D1\u63A7\u8BCA\u65AD\u5DE5\u5177\uFF086 \u4E2A\uFF09","slug":"\u76D1\u63A7\u8BCA\u65AD\u5DE5\u5177-6-\u4E2A","link":"#\u76D1\u63A7\u8BCA\u65AD\u5DE5\u5177-6-\u4E2A","children":[]},{"level":3,"title":"Arthas \u8F85\u52A9\u5DE5\u5177\uFF082 \u4E2A\uFF09","slug":"arthas-\u8F85\u52A9\u5DE5\u5177-2-\u4E2A","link":"#arthas-\u8F85\u52A9\u5DE5\u5177-2-\u4E2A","children":[]}]},{"level":2,"title":"\u5FEB\u901F\u5F00\u59CB","slug":"\u5FEB\u901F\u5F00\u59CB","link":"#\u5FEB\u901F\u5F00\u59CB","children":[{"level":3,"title":"1. \u914D\u7F6E MCP \u670D\u52A1","slug":"_1-\u914D\u7F6E-mcp-\u670D\u52A1","link":"#_1-\u914D\u7F6E-mcp-\u670D\u52A1","children":[]},{"level":3,"title":"2. \u542F\u52A8\u5E94\u7528","slug":"_2-\u542F\u52A8\u5E94\u7528","link":"#_2-\u542F\u52A8\u5E94\u7528","children":[]},{"level":3,"title":"3. \u914D\u7F6E AI \u5BA2\u6237\u7AEF","slug":"_3-\u914D\u7F6E-ai-\u5BA2\u6237\u7AEF","link":"#_3-\u914D\u7F6E-ai-\u5BA2\u6237\u7AEF","children":[]}]},{"level":2,"title":"\u914D\u7F6E\u8BF4\u660E","slug":"\u914D\u7F6E\u8BF4\u660E","link":"#\u914D\u7F6E\u8BF4\u660E","children":[{"level":3,"title":"Arthas \u914D\u7F6E\u9879","slug":"arthas-\u914D\u7F6E\u9879","link":"#arthas-\u914D\u7F6E\u9879","children":[]},{"level":3,"title":"\u4F20\u8F93\u534F\u8BAE\u6A21\u5F0F","slug":"\u4F20\u8F93\u534F\u8BAE\u6A21\u5F0F","link":"#\u4F20\u8F93\u534F\u8BAE\u6A21\u5F0F","children":[]},{"level":3,"title":"\u8BA4\u8BC1\u914D\u7F6E","slug":"\u8BA4\u8BC1\u914D\u7F6E","link":"#\u8BA4\u8BC1\u914D\u7F6E","children":[]},{"level":3,"title":"viewfile \u5DE5\u5177\u76EE\u5F55\u767D\u540D\u5355\u914D\u7F6E","slug":"viewfile-\u5DE5\u5177\u76EE\u5F55\u767D\u540D\u5355\u914D\u7F6E","link":"#viewfile-\u5DE5\u5177\u76EE\u5F55\u767D\u540D\u5355\u914D\u7F6E","children":[]}]},{"level":2,"title":"\u53CD\u9988\u4E0E\u8D21\u732E","slug":"\u53CD\u9988\u4E0E\u8D21\u732E","link":"#\u53CD\u9988\u4E0E\u8D21\u732E","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/mcp-server.md","version":"4.3.3"}');export{l as data}; +const l=JSON.parse('{"key":"v-67bc6553","path":"/doc/mcp-server.html","title":"Arthas MCP Server","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u6982\u89C8","slug":"\u6982\u89C8","link":"#\u6982\u89C8","children":[{"level":3,"title":"\u4E3B\u8981\u7279\u6027","slug":"\u4E3B\u8981\u7279\u6027","link":"#\u4E3B\u8981\u7279\u6027","children":[]}]},{"level":2,"title":"\u652F\u6301\u7684\u8BCA\u65AD\u5DE5\u5177","slug":"\u652F\u6301\u7684\u8BCA\u65AD\u5DE5\u5177","link":"#\u652F\u6301\u7684\u8BCA\u65AD\u5DE5\u5177","children":[{"level":3,"title":"JVM \u76F8\u5173\u5DE5\u5177\uFF0813 \u4E2A\uFF09","slug":"jvm-\u76F8\u5173\u5DE5\u5177-13-\u4E2A","link":"#jvm-\u76F8\u5173\u5DE5\u5177-13-\u4E2A","children":[]},{"level":3,"title":"Class/ClassLoader \u76F8\u5173\u5DE5\u5177\uFF088 \u4E2A\uFF09","slug":"class-classloader-\u76F8\u5173\u5DE5\u5177-8-\u4E2A","link":"#class-classloader-\u76F8\u5173\u5DE5\u5177-8-\u4E2A","children":[]},{"level":3,"title":"\u76D1\u63A7\u8BCA\u65AD\u5DE5\u5177\uFF086 \u4E2A\uFF09","slug":"\u76D1\u63A7\u8BCA\u65AD\u5DE5\u5177-6-\u4E2A","link":"#\u76D1\u63A7\u8BCA\u65AD\u5DE5\u5177-6-\u4E2A","children":[]},{"level":3,"title":"Arthas \u8F85\u52A9\u5DE5\u5177\uFF082 \u4E2A\uFF09","slug":"arthas-\u8F85\u52A9\u5DE5\u5177-2-\u4E2A","link":"#arthas-\u8F85\u52A9\u5DE5\u5177-2-\u4E2A","children":[]}]},{"level":2,"title":"\u5FEB\u901F\u5F00\u59CB","slug":"\u5FEB\u901F\u5F00\u59CB","link":"#\u5FEB\u901F\u5F00\u59CB","children":[{"level":3,"title":"1. \u914D\u7F6E MCP \u670D\u52A1","slug":"_1-\u914D\u7F6E-mcp-\u670D\u52A1","link":"#_1-\u914D\u7F6E-mcp-\u670D\u52A1","children":[]},{"level":3,"title":"2. \u542F\u52A8\u5E94\u7528","slug":"_2-\u542F\u52A8\u5E94\u7528","link":"#_2-\u542F\u52A8\u5E94\u7528","children":[]},{"level":3,"title":"3. \u914D\u7F6E AI \u5BA2\u6237\u7AEF","slug":"_3-\u914D\u7F6E-ai-\u5BA2\u6237\u7AEF","link":"#_3-\u914D\u7F6E-ai-\u5BA2\u6237\u7AEF","children":[]}]},{"level":2,"title":"\u914D\u7F6E\u8BF4\u660E","slug":"\u914D\u7F6E\u8BF4\u660E","link":"#\u914D\u7F6E\u8BF4\u660E","children":[{"level":3,"title":"Arthas \u914D\u7F6E\u9879","slug":"arthas-\u914D\u7F6E\u9879","link":"#arthas-\u914D\u7F6E\u9879","children":[]},{"level":3,"title":"\u4F20\u8F93\u534F\u8BAE\u6A21\u5F0F","slug":"\u4F20\u8F93\u534F\u8BAE\u6A21\u5F0F","link":"#\u4F20\u8F93\u534F\u8BAE\u6A21\u5F0F","children":[]},{"level":3,"title":"\u8BA4\u8BC1\u914D\u7F6E","slug":"\u8BA4\u8BC1\u914D\u7F6E","link":"#\u8BA4\u8BC1\u914D\u7F6E","children":[]},{"level":3,"title":"viewfile \u5DE5\u5177\u76EE\u5F55\u767D\u540D\u5355\u914D\u7F6E","slug":"viewfile-\u5DE5\u5177\u76EE\u5F55\u767D\u540D\u5355\u914D\u7F6E","link":"#viewfile-\u5DE5\u5177\u76EE\u5F55\u767D\u540D\u5355\u914D\u7F6E","children":[]}]},{"level":2,"title":"\u53CD\u9988\u4E0E\u8D21\u732E","slug":"\u53CD\u9988\u4E0E\u8D21\u732E","link":"#\u53CD\u9988\u4E0E\u8D21\u732E","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/mcp-server.md","version":"4.3.5"}');export{l as data}; diff --git a/assets/mcp-server.html.2548e7c2.js b/assets/mcp-server.html.609551f2.js similarity index 96% rename from assets/mcp-server.html.2548e7c2.js rename to assets/mcp-server.html.609551f2.js index 6e51de53b..89a42e3e9 100644 --- a/assets/mcp-server.html.2548e7c2.js +++ b/assets/mcp-server.html.609551f2.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-7a1110bf","path":"/en/doc/mcp-server.html","title":"Arthas MCP Server","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[{"level":3,"title":"Key Features","slug":"key-features","link":"#key-features","children":[]}]},{"level":2,"title":"Supported Diagnostic Tools","slug":"supported-diagnostic-tools","link":"#supported-diagnostic-tools","children":[{"level":3,"title":"JVM-Related Tools (13)","slug":"jvm-related-tools-13","link":"#jvm-related-tools-13","children":[]},{"level":3,"title":"Class/ClassLoader Tools (8)","slug":"class-classloader-tools-8","link":"#class-classloader-tools-8","children":[]},{"level":3,"title":"Monitoring and Diagnostic Tools (6)","slug":"monitoring-and-diagnostic-tools-6","link":"#monitoring-and-diagnostic-tools-6","children":[]},{"level":3,"title":"Arthas Utility Tools (2)","slug":"arthas-utility-tools-2","link":"#arthas-utility-tools-2","children":[]}]},{"level":2,"title":"Quick Start","slug":"quick-start","link":"#quick-start","children":[{"level":3,"title":"1. Configure MCP Service","slug":"_1-configure-mcp-service","link":"#_1-configure-mcp-service","children":[]},{"level":3,"title":"2. Start Application","slug":"_2-start-application","link":"#_2-start-application","children":[]},{"level":3,"title":"3. Configure AI Client","slug":"_3-configure-ai-client","link":"#_3-configure-ai-client","children":[]}]},{"level":2,"title":"Configuration","slug":"configuration","link":"#configuration","children":[{"level":3,"title":"Arthas Configuration","slug":"arthas-configuration","link":"#arthas-configuration","children":[]},{"level":3,"title":"Transport Protocol Mode","slug":"transport-protocol-mode","link":"#transport-protocol-mode","children":[]},{"level":3,"title":"Authentication Configuration","slug":"authentication-configuration","link":"#authentication-configuration","children":[]},{"level":3,"title":"viewfile Directory Whitelist Configuration","slug":"viewfile-directory-whitelist-configuration","link":"#viewfile-directory-whitelist-configuration","children":[]}]},{"level":2,"title":"Feedback & Contribution","slug":"feedback-contribution","link":"#feedback-contribution","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/mcp-server.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-7a1110bf","path":"/en/doc/mcp-server.html","title":"Arthas MCP Server","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[{"level":3,"title":"Key Features","slug":"key-features","link":"#key-features","children":[]}]},{"level":2,"title":"Supported Diagnostic Tools","slug":"supported-diagnostic-tools","link":"#supported-diagnostic-tools","children":[{"level":3,"title":"JVM-Related Tools (13)","slug":"jvm-related-tools-13","link":"#jvm-related-tools-13","children":[]},{"level":3,"title":"Class/ClassLoader Tools (8)","slug":"class-classloader-tools-8","link":"#class-classloader-tools-8","children":[]},{"level":3,"title":"Monitoring and Diagnostic Tools (6)","slug":"monitoring-and-diagnostic-tools-6","link":"#monitoring-and-diagnostic-tools-6","children":[]},{"level":3,"title":"Arthas Utility Tools (2)","slug":"arthas-utility-tools-2","link":"#arthas-utility-tools-2","children":[]}]},{"level":2,"title":"Quick Start","slug":"quick-start","link":"#quick-start","children":[{"level":3,"title":"1. Configure MCP Service","slug":"_1-configure-mcp-service","link":"#_1-configure-mcp-service","children":[]},{"level":3,"title":"2. Start Application","slug":"_2-start-application","link":"#_2-start-application","children":[]},{"level":3,"title":"3. Configure AI Client","slug":"_3-configure-ai-client","link":"#_3-configure-ai-client","children":[]}]},{"level":2,"title":"Configuration","slug":"configuration","link":"#configuration","children":[{"level":3,"title":"Arthas Configuration","slug":"arthas-configuration","link":"#arthas-configuration","children":[]},{"level":3,"title":"Transport Protocol Mode","slug":"transport-protocol-mode","link":"#transport-protocol-mode","children":[]},{"level":3,"title":"Authentication Configuration","slug":"authentication-configuration","link":"#authentication-configuration","children":[]},{"level":3,"title":"viewfile Directory Whitelist Configuration","slug":"viewfile-directory-whitelist-configuration","link":"#viewfile-directory-whitelist-configuration","children":[]}]},{"level":2,"title":"Feedback & Contribution","slug":"feedback-contribution","link":"#feedback-contribution","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/mcp-server.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/mcp-server.html.675136b6.js b/assets/mcp-server.html.675136b6.js deleted file mode 100644 index e13c61746..000000000 --- a/assets/mcp-server.html.675136b6.js +++ /dev/null @@ -1,28 +0,0 @@ -import{_ as n,o as r,c as o,a as t,b as e,e as s,d,r as i}from"./app.524ecf5c.js";const c={},l=t("h1",{id:"arthas-mcp-server",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#arthas-mcp-server","aria-hidden":"true"},"#"),s(" Arthas MCP Server")],-1),p=t("h2",{id:"\u6982\u89C8",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#\u6982\u89C8","aria-hidden":"true"},"#"),s(" \u6982\u89C8")],-1),h=s("Arthas MCP Server \u662F Arthas \u7684\u5B9E\u9A8C\u6027\u6A21\u5757\uFF0C\u5B9E\u73B0\u4E86\u57FA\u4E8E "),u={href:"https://modelcontextprotocol.io/",target:"_blank",rel:"noopener noreferrer"},v=s("MCP\uFF08Model Context Protocol\uFF09"),g=s(" \u534F\u8BAE\u7684\u670D\u52A1\u7AEF\u3002\u8BE5\u6A21\u5757\u901A\u8FC7 HTTP/Netty \u63D0\u4F9B\u7EDF\u4E00\u7684 JSON-RPC 2.0 \u63A5\u53E3\uFF0C\u4F7F AI \u52A9\u624B\u80FD\u591F\u901A\u8FC7\u5DE5\u5177\u8C03\u7528\u7684\u65B9\u5F0F\u6267\u884C Arthas \u8BCA\u65AD\u547D\u4EE4\u3002"),m=d(`

    MCP\uFF08Model Context Protocol\uFF09\u662F\u7531 Anthropic \u63D0\u51FA\u7684\u4E00\u79CD\u6807\u51C6\u5316\u534F\u8BAE\uFF0C\u7528\u4E8E\u8FDE\u63A5 AI \u52A9\u624B\u4E0E\u5404\u79CD\u5DE5\u5177\u548C\u6570\u636E\u6E90\u3002\u901A\u8FC7 Arthas MCP Server\uFF0CAI \u52A9\u624B\u53EF\u4EE5\u81EA\u7136\u5730\u6267\u884C Java \u5E94\u7528\u8BCA\u65AD\u4EFB\u52A1\uFF0C\u5927\u5E45\u63D0\u5347\u5F00\u53D1\u548C\u8FD0\u7EF4\u6548\u7387\u3002

    \u4E3B\u8981\u7279\u6027

    • AI \u539F\u751F\u96C6\u6210\uFF1A\u652F\u6301\u4E3B\u6D41 AI \u5BA2\u6237\u7AEF\uFF08Claude Desktop\u3001Cherry Studio\u3001Cline \u7B49\uFF09
    • \u6807\u51C6\u5316\u534F\u8BAE\uFF1A\u5B8C\u6574\u5B9E\u73B0 MCP \u534F\u8BAE\u89C4\u8303\uFF08\u7248\u672C 2025-06-18\uFF09\uFF0C\u652F\u6301 Streamable Http \u4F20\u8F93
    • 29 \u4E2A\u8BCA\u65AD\u5DE5\u5177\uFF1A\u6DB5\u76D6 JVM \u76D1\u63A7\u3001\u7C7B\u52A0\u8F7D\u3001\u65B9\u6CD5\u8FFD\u8E2A\u7B49\u6838\u5FC3\u529F\u80FD
    • \u5B89\u5168\u8BA4\u8BC1\uFF1A\u652F\u6301 Bearer Token \u8BA4\u8BC1\u673A\u5236

    \u652F\u6301\u7684\u8BCA\u65AD\u5DE5\u5177

    Arthas MCP Server \u96C6\u6210\u4E86 29 \u4E2A\u8BCA\u65AD\u5DE5\u5177\uFF0C\u6309\u529F\u80FD\u5206\u7C7B\u5982\u4E0B\uFF1A

    JVM \u76F8\u5173\u5DE5\u5177\uFF0813 \u4E2A\uFF09

    \u5DE5\u5177\u529F\u80FD\u63CF\u8FF0
    dashboard\u5B9E\u65F6\u5C55\u793A JVM/\u5E94\u7528\u9762\u677F\uFF0C\u652F\u6301\u81EA\u5B9A\u4E49\u5237\u65B0\u95F4\u9694\u548C\u6B21\u6570\u63A7\u5236
    heapdump\u751F\u6210 JVM heap dump \u6587\u4EF6\uFF0C\u652F\u6301 --live \u9009\u9879\u53EA\u5BFC\u51FA\u5B58\u6D3B\u5BF9\u8C61
    jvm\u67E5\u770B\u5F53\u524D JVM \u7684\u8BE6\u7EC6\u8FD0\u884C\u65F6\u4FE1\u606F
    mbean\u67E5\u770B\u6216\u76D1\u63A7 MBean \u5C5E\u6027\u4FE1\u606F\uFF0C\u652F\u6301\u5B9E\u65F6\u5237\u65B0\u548C\u6A21\u5F0F\u5339\u914D
    memory\u67E5\u770B JVM \u7684\u5185\u5B58\u4F7F\u7528\u60C5\u51B5
    thread\u67E5\u770B\u7EBF\u7A0B\u4FE1\u606F\u53CA\u5806\u6808\uFF0C\u652F\u6301\u67E5\u627E\u963B\u585E\u7EBF\u7A0B\u548C\u6700\u5FD9\u7EBF\u7A0B
    sysprop\u67E5\u770B\u6216\u4FEE\u6539\u7CFB\u7EDF\u5C5E\u6027\uFF0C\u652F\u6301\u52A8\u6001\u4FEE\u6539 JVM \u7CFB\u7EDF\u5C5E\u6027
    sysenv\u67E5\u770B\u7CFB\u7EDF\u73AF\u5883\u53D8\u91CF
    vmoption\u67E5\u770B\u6216\u66F4\u65B0 VM \u9009\u9879\uFF0C\u652F\u6301\u52A8\u6001\u8C03\u6574 JVM \u53C2\u6570
    perfcounter\u67E5\u770B JVM Perf Counter \u6027\u80FD\u8BA1\u6570\u5668\u4FE1\u606F
    vmtool\u865A\u62DF\u673A\u5DE5\u5177\u96C6\u5408\uFF0C\u652F\u6301\u5F3A\u5236 GC\u3001\u83B7\u53D6\u5B9E\u4F8B\u3001\u7EBF\u7A0B\u4E2D\u65AD\u7B49
    getstatic\u67E5\u770B\u7C7B\u7684\u9759\u6001\u5B57\u6BB5\u503C\uFF0C\u652F\u6301\u6307\u5B9A ClassLoader \u548C OGNL \u8868\u8FBE\u5F0F
    ognl\u6267\u884C OGNL \u8868\u8FBE\u5F0F\uFF0C\u52A8\u6001\u8C03\u7528\u65B9\u6CD5\u548C\u8BBF\u95EE\u5B57\u6BB5

    Class/ClassLoader \u76F8\u5173\u5DE5\u5177\uFF088 \u4E2A\uFF09

    \u5DE5\u5177\u529F\u80FD\u63CF\u8FF0
    sc\u641C\u7D22 JVM \u5DF2\u52A0\u8F7D\u7684\u7C7B\uFF0C\u652F\u6301\u901A\u914D\u7B26\u548C\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u53EF\u67E5\u770B\u7C7B\u8BE6\u60C5\uFF08\u7C7B\u52A0\u8F7D\u5668\u3001\u63A5\u53E3\u3001\u7236\u7C7B\u3001\u6CE8\u89E3\u7B49\uFF09
    sm\u641C\u7D22\u5DF2\u52A0\u8F7D\u7C7B\u7684\u65B9\u6CD5\u4FE1\u606F\uFF0C\u652F\u6301\u901A\u914D\u7B26\u548C\u6B63\u5219\u8868\u8FBE\u5F0F\uFF0C\u53EF\u67E5\u770B\u65B9\u6CD5\u7B7E\u540D\u3001\u53C2\u6570\u7C7B\u578B\u3001\u6CE8\u89E3\u7B49
    jad\u53CD\u7F16\u8BD1\u6307\u5B9A\u5DF2\u52A0\u8F7D\u7C7B\u7684\u6E90\u7801\uFF0C\u5C06 JVM \u4E2D\u5B9E\u9645\u8FD0\u884C\u7684 class \u5B57\u8282\u7801\u53CD\u7F16\u8BD1\u4E3A Java \u4EE3\u7801
    classloaderClassLoader \u8BCA\u65AD\u5DE5\u5177\uFF0C\u67E5\u770B\u7C7B\u52A0\u8F7D\u5668\u7EDF\u8BA1\u3001\u7EE7\u627F\u6811\u3001URLs\uFF0C\u652F\u6301\u8D44\u6E90\u67E5\u627E\u548C\u7C7B\u52A0\u8F7D\u64CD\u4F5C\uFF1B\u641C\u7D22\u7C7B\u4F18\u5148\u4F7F\u7528 sc \u5DE5\u5177
    mc\u5185\u5B58\u7F16\u8BD1\u5668\uFF0C\u5C06 .java \u6E90\u7801\u6587\u4EF6\u7F16\u8BD1\u4E3A .class \u5B57\u8282\u7801\u6587\u4EF6
    redefine\u91CD\u65B0\u52A0\u8F7D\u7C7B\u7684\u5B57\u8282\u7801\uFF0C\u5141\u8BB8\u5728 JVM \u8FD0\u884C\u65F6\u5BF9\u5DF2\u5B58\u5728\u7684\u7C7B\u8FDB\u884C\u70ED\u66F4\u65B0
    retransform\u70ED\u52A0\u8F7D\u7C7B\u7684\u5B57\u8282\u7801\uFF0C\u5BF9\u5DF2\u52A0\u8F7D\u7684\u7C7B\u8FDB\u884C\u5B57\u8282\u7801\u4FEE\u6539\u5E76\u4F7F\u5176\u751F\u6548
    dump\u5C06 JVM \u4E2D\u5B9E\u9645\u8FD0\u884C\u7684 class \u5B57\u8282\u7801\u5BFC\u51FA\u5230\u6307\u5B9A\u76EE\u5F55\uFF0C\u9002\u7528\u4E8E\u6279\u91CF\u4E0B\u8F7D\u6307\u5B9A\u5305\u7684\u5B57\u8282\u7801

    \u76D1\u63A7\u8BCA\u65AD\u5DE5\u5177\uFF086 \u4E2A\uFF09

    \u5DE5\u5177\u529F\u80FD\u63CF\u8FF0
    monitor\u5B9E\u65F6\u76D1\u63A7\u6307\u5B9A\u7C7B\u7684\u6307\u5B9A\u65B9\u6CD5\u7684\u8C03\u7528\u60C5\u51B5\uFF0C\u8F93\u51FA\u8C03\u7528\u6B21\u6570\u3001\u6210\u529F\u7387\u3001\u5E73\u5747 RT \u7B49\u7EDF\u8BA1\u4FE1\u606F
    stack\u8F93\u51FA\u5F53\u524D\u65B9\u6CD5\u88AB\u8C03\u7528\u7684\u8C03\u7528\u8DEF\u5F84\uFF0C\u5E2E\u52A9\u5206\u6790\u65B9\u6CD5\u7684\u8C03\u7528\u94FE\u8DEF
    trace\u8FFD\u8E2A\u65B9\u6CD5\u5185\u90E8\u8C03\u7528\u8DEF\u5F84\uFF0C\u8F93\u51FA\u6BCF\u4E2A\u8282\u70B9\u7684\u8017\u65F6\u4FE1\u606F\uFF0C\u652F\u6301\u6761\u4EF6\u8FC7\u6EE4
    tt\u65B9\u6CD5\u6267\u884C\u6570\u636E\u7684\u65F6\u7A7A\u96A7\u9053\uFF0C\u8BB0\u5F55\u6307\u5B9A\u65B9\u6CD5\u6BCF\u6B21\u8C03\u7528\u7684\u5165\u53C2\u548C\u8FD4\u56DE\u4FE1\u606F\uFF0C\u652F\u6301\u4E8B\u540E\u67E5\u770B\u548C\u91CD\u653E
    watch\u89C2\u5BDF\u6307\u5B9A\u65B9\u6CD5\u7684\u8C03\u7528\u60C5\u51B5\uFF0C\u5305\u542B\u5165\u53C2\u3001\u8FD4\u56DE\u503C\u548C\u629B\u51FA\u5F02\u5E38\u7B49\u4FE1\u606F\uFF0C\u652F\u6301\u5B9E\u65F6\u6D41\u5F0F\u8F93\u51FA
    profilerAsync Profiler \u8BCA\u65AD\u5DE5\u5177\uFF0C\u7528\u4E8E\u91C7\u6837 CPU/alloc/lock \u7B49\u4E8B\u4EF6\u5E76\u8F93\u51FA\u706B\u7130\u56FE\u3001JFR \u7B49\u683C\u5F0F

    Arthas \u8F85\u52A9\u5DE5\u5177\uFF082 \u4E2A\uFF09

    \u5DE5\u5177\u529F\u80FD\u63CF\u8FF0
    viewfile\u67E5\u770B\u6587\u4EF6\u5185\u5BB9\uFF08\u4EC5\u5141\u8BB8\u5728\u914D\u7F6E\u7684\u76EE\u5F55\u767D\u540D\u5355\u5185\u67E5\u770B\uFF09\uFF0C\u652F\u6301 cursor/offset \u5206\u6BB5\u8BFB\u53D6\uFF0C\u907F\u514D\u4E00\u6B21\u6027\u8FD4\u56DE\u5927\u91CF\u5185\u5BB9
    options\u67E5\u770B\u6216\u4FEE\u6539 Arthas \u5168\u5C40\u5F00\u5173\u9009\u9879

    \u5FEB\u901F\u5F00\u59CB

    1. \u914D\u7F6E MCP \u670D\u52A1

    \u5728 arthas.properties \u914D\u7F6E\u6587\u4EF6\u4E2D\u542F\u7528 MCP \u670D\u52A1\uFF1A

    # MCP (Model Context Protocol) configuration
    -arthas.mcpEndpoint=/mcp
    -

    2. \u542F\u52A8\u5E94\u7528

    \u6B63\u5E38\u542F\u52A8 Arthas \u6216\u5E26\u6709 Arthas \u7684 Java \u5E94\u7528\u3002\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0CMCP \u670D\u52A1\u4F1A\u5728 HTTP \u7AEF\u53E3 8563 \u4E0A\u66B4\u9732\u3002

    \u9A8C\u8BC1 MCP \u670D\u52A1\u662F\u5426\u542F\u52A8\uFF1A

    curl http://localhost:8563/mcp
    -

    \u5982\u679C\u8FD4\u56DE MCP \u534F\u8BAE\u4FE1\u606F\uFF0C\u8BF4\u660E\u670D\u52A1\u5DF2\u6210\u529F\u542F\u52A8\u3002

    3. \u914D\u7F6E AI \u5BA2\u6237\u7AEF

    \u4EE5\u4E0B\u662F\u51E0\u79CD\u4E3B\u6D41 AI \u5BA2\u6237\u7AEF\u7684\u914D\u7F6E\u65B9\u5F0F\uFF1A

    Cherry Studio / Cline

    \u5728\u8BBE\u7F6E\u4E2D\u6DFB\u52A0 MCP \u670D\u52A1\u5668\u914D\u7F6E\uFF1A

    {
    -  "mcpServers": {
    -    "arthas-mcp": {
    -      "type": "streamableHttp",
    -      "url": "http://localhost:8563/mcp"
    -    }
    -  }
    -}
    -

    \u914D\u7F6E\u8BF4\u660E

    Arthas \u914D\u7F6E\u9879

    \u914D\u7F6E\u9879\u8BF4\u660E\u9ED8\u8BA4\u503C
    arthas.mcpEndpointMCP \u670D\u52A1\u7684\u8BBF\u95EE\u8DEF\u5F84\u65E0\uFF08\u9700\u8981\u624B\u52A8\u914D\u7F6E\uFF09
    arthas.mcpProtocol\u4F20\u8F93\u534F\u8BAE\u6A21\u5F0F\uFF1ASTREAMABLE\uFF08\u6709\u72B6\u6001\uFF09\u6216 STATELESS\uFF08\u65E0\u72B6\u6001\uFF09STREAMABLE
    arthas.httpPortHTTP \u670D\u52A1\u7AEF\u53E38563
    arthas.password\u8BA4\u8BC1\u5BC6\u7801\uFF08\u5F00\u542F\u8BA4\u8BC1\u65F6\u4F7F\u7528\uFF09\u65E0

    \u4F20\u8F93\u534F\u8BAE\u6A21\u5F0F

    Arthas MCP Server \u652F\u6301\u4E24\u79CD\u4F20\u8F93\u534F\u8BAE\u6A21\u5F0F\uFF1A

    • STREAMABLE \u6A21\u5F0F\uFF08\u9ED8\u8BA4\uFF09\uFF1A\u6709\u72B6\u6001\u6A21\u5F0F\uFF0C\u901A\u8FC7 HTTP/SSE \u7EF4\u6301\u6301\u4E45\u8FDE\u63A5\uFF0C\u652F\u6301\u957F\u65F6\u95F4\u8FD0\u884C\u7684\u547D\u4EE4\uFF08\u5982 watch\u3001trace\u3001monitor \u7B49\u6D41\u5F0F\u5DE5\u5177\uFF09\u3001\u8FDB\u5EA6\u901A\u77E5\u548C\u4F1A\u8BDD\u72B6\u6001\u3002\u9002\u5408\u4EA4\u4E92\u5F0F\u8BCA\u65AD\u573A\u666F\u3002
    • STATELESS \u6A21\u5F0F\uFF1A\u65E0\u72B6\u6001\u6A21\u5F0F\uFF0C\u6BCF\u4E2A\u8BF7\u6C42\u76F8\u4E92\u72EC\u7ACB\uFF0C\u9002\u5408\u7B80\u5355\u7684\u4E00\u6B21\u6027\u67E5\u8BE2\u573A\u666F\u3002

    \u5728 arthas.properties \u4E2D\u914D\u7F6E\uFF1A

    arthas.mcpEndpoint=/mcp
    -# \u53EF\u9009\uFF0C\u9ED8\u8BA4\u4E3A STREAMABLE
    -arthas.mcpProtocol=STREAMABLE
    -

    \u8BA4\u8BC1\u914D\u7F6E

    \u5F53\u5728\u914D\u7F6E\u6587\u4EF6\u4E2D\u8BBE\u7F6E\u4E86 arthas.password \u65F6\uFF0CMCP Server \u4F1A\u81EA\u52A8\u5F00\u542F\u9274\u6743\u529F\u80FD\u3002\u6B64\u65F6\u9700\u8981\u5728 AI \u5BA2\u6237\u7AEF\u914D\u7F6E\u4E2D\u6DFB\u52A0\u8BA4\u8BC1\u5934\uFF0C\u643A\u5E26\u7684 Bearer Token \u5C31\u662F\u914D\u7F6E\u7684\u5BC6\u7801\u503C\u3002

    \u914D\u7F6E\u6587\u4EF6\u793A\u4F8B\uFF08arthas.properties\uFF09\uFF1A

    arthas.password=your-secure-password
    -

    AI \u5BA2\u6237\u7AEF\u914D\u7F6E\u793A\u4F8B\uFF1A

    {
    -  "mcpServers": {
    -    "arthas-mcp": {
    -      "type": "streamableHttp",
    -      "url": "http://localhost:8563/mcp",
    -      "headers": {
    -        "Authorization": "Bearer your-secure-password"
    -      }
    -    }
    -  }
    -}
    -

    \u6CE8\u610F

    \u6CE8\u610F\uFF1AAuthorization header \u4E2D\u7684 token \u5FC5\u987B\u4E0E arthas.password \u914D\u7F6E\u7684\u503C\u5B8C\u5168\u4E00\u81F4\u3002

    viewfile \u5DE5\u5177\u76EE\u5F55\u767D\u540D\u5355\u914D\u7F6E

    viewfile \u5DE5\u5177\u9ED8\u8BA4\u53EA\u5141\u8BB8\u67E5\u770B\u4EE5\u4E0B\u76EE\u5F55\u4E2D\u7684\u6587\u4EF6\uFF1A

    • \u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\u4E0B\u7684 arthas-output \u76EE\u5F55\uFF08\u82E5\u5B58\u5728\uFF09
    • \u7528\u6237 Home \u76EE\u5F55\u4E0B\u7684 ~/logs/ \u76EE\u5F55\uFF08\u82E5\u5B58\u5728\uFF09

    \u53EF\u901A\u8FC7\u73AF\u5883\u53D8\u91CF\u6269\u5C55\u5141\u8BB8\u76EE\u5F55\uFF1A

    export ARTHAS_MCP_VIEWFILE_ALLOWED_DIRS=/path/to/dir1,/path/to/dir2
    -

    \u53CD\u9988\u4E0E\u8D21\u732E

    \u63D0\u793A

    Arthas MCP Server \u662F\u5B9E\u9A8C\u6027\u529F\u80FD\uFF0C\u6B22\u8FCE\u63D0\u4F9B\u53CD\u9988\u548C\u5EFA\u8BAE\uFF01

    `,49),b=t("strong",null,"\u95EE\u9898\u53CD\u9988",-1),k=s("\uFF1A"),_={href:"https://github.com/alibaba/arthas/issues",target:"_blank",rel:"noopener noreferrer"},f=s("GitHub Issues"),M=t("strong",null,"\u529F\u80FD\u5EFA\u8BAE",-1),A=s("\uFF1A"),x={href:"https://github.com/alibaba/arthas/discussions",target:"_blank",rel:"noopener noreferrer"},y=s("GitHub Discussions"),C=t("strong",null,"\u53C2\u4E0E\u8D21\u732E",-1),P=s("\uFF1A"),q={href:"https://github.com/alibaba/arthas/blob/master/CONTRIBUTING.md",target:"_blank",rel:"noopener noreferrer"},S=s("\u8D21\u732E\u6307\u5357");function E(T,V){const a=i("ExternalLinkIcon");return r(),o("div",null,[l,p,t("p",null,[h,t("a",u,[v,e(a)]),g]),m,t("ul",null,[t("li",null,[b,k,t("a",_,[f,e(a)])]),t("li",null,[M,A,t("a",x,[y,e(a)])]),t("li",null,[C,P,t("a",q,[S,e(a)])])])])}const L=n(c,[["render",E],["__file","mcp-server.html.vue"]]);export{L as default}; diff --git a/assets/mcp-server.html.b2d1ada5.js b/assets/mcp-server.html.b2d1ada5.js new file mode 100644 index 000000000..ef75e4a2b --- /dev/null +++ b/assets/mcp-server.html.b2d1ada5.js @@ -0,0 +1,28 @@ +import{_ as d,o as i,c,a as t,b as a,w as l,e as s,d as n,r}from"./app.e2427bec.js";const p={},h=t("h1",{id:"arthas-mcp-server",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#arthas-mcp-server","aria-hidden":"true"},"#"),s(" Arthas MCP Server")],-1),u=t("h2",{id:"\u6982\u89C8",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#\u6982\u89C8","aria-hidden":"true"},"#"),s(" \u6982\u89C8")],-1),v=s("Arthas MCP Server \u662F Arthas \u7684\u5B9E\u9A8C\u6027\u6A21\u5757\uFF0C\u5B9E\u73B0\u4E86\u57FA\u4E8E "),g={href:"https://modelcontextprotocol.io/",target:"_blank",rel:"noopener noreferrer"},m=s("MCP\uFF08Model Context Protocol\uFF09"),b=s(" \u534F\u8BAE\u7684\u670D\u52A1\u7AEF\u3002\u8BE5\u6A21\u5757\u901A\u8FC7 HTTP/Netty \u63D0\u4F9B\u7EDF\u4E00\u7684 JSON-RPC 2.0 \u63A5\u53E3\uFF0C\u4F7F AI \u52A9\u624B\u80FD\u591F\u901A\u8FC7\u5DE5\u5177\u8C03\u7528\u7684\u65B9\u5F0F\u6267\u884C Arthas \u8BCA\u65AD\u547D\u4EE4\u3002"),k=n('

    MCP\uFF08Model Context Protocol\uFF09\u662F\u7531 Anthropic \u63D0\u51FA\u7684\u4E00\u79CD\u6807\u51C6\u5316\u534F\u8BAE\uFF0C\u7528\u4E8E\u8FDE\u63A5 AI \u52A9\u624B\u4E0E\u5404\u79CD\u5DE5\u5177\u548C\u6570\u636E\u6E90\u3002\u901A\u8FC7 Arthas MCP Server\uFF0CAI \u52A9\u624B\u53EF\u4EE5\u81EA\u7136\u5730\u6267\u884C Java \u5E94\u7528\u8BCA\u65AD\u4EFB\u52A1\uFF0C\u5927\u5E45\u63D0\u5347\u5F00\u53D1\u548C\u8FD0\u7EF4\u6548\u7387\u3002

    \u4E3B\u8981\u7279\u6027

    • AI \u539F\u751F\u96C6\u6210\uFF1A\u652F\u6301\u4E3B\u6D41 AI \u5BA2\u6237\u7AEF\uFF08Claude Desktop\u3001Cherry Studio\u3001Cline \u7B49\uFF09
    • \u6807\u51C6\u5316\u534F\u8BAE\uFF1A\u5B8C\u6574\u5B9E\u73B0 MCP \u534F\u8BAE\u89C4\u8303\uFF08\u7248\u672C 2025-06-18\uFF09\uFF0C\u652F\u6301 Streamable Http \u4F20\u8F93
    • 29 \u4E2A\u8BCA\u65AD\u5DE5\u5177\uFF1A\u6DB5\u76D6 JVM \u76D1\u63A7\u3001\u7C7B\u52A0\u8F7D\u3001\u65B9\u6CD5\u8FFD\u8E2A\u7B49\u6838\u5FC3\u529F\u80FD
    • \u5B89\u5168\u8BA4\u8BC1\uFF1A\u652F\u6301 Bearer Token \u8BA4\u8BC1\u673A\u5236

    \u652F\u6301\u7684\u8BCA\u65AD\u5DE5\u5177

    Arthas MCP Server \u96C6\u6210\u4E86 29 \u4E2A\u8BCA\u65AD\u5DE5\u5177\uFF0C\u6309\u529F\u80FD\u5206\u7C7B\u5982\u4E0B\uFF1A

    JVM \u76F8\u5173\u5DE5\u5177\uFF0813 \u4E2A\uFF09

    \u5DE5\u5177\u529F\u80FD\u63CF\u8FF0
    dashboard\u5B9E\u65F6\u5C55\u793A JVM/\u5E94\u7528\u9762\u677F\uFF0C\u652F\u6301\u81EA\u5B9A\u4E49\u5237\u65B0\u95F4\u9694\u548C\u6B21\u6570\u63A7\u5236
    heapdump\u751F\u6210 JVM heap dump \u6587\u4EF6\uFF0C\u652F\u6301 --live \u9009\u9879\u53EA\u5BFC\u51FA\u5B58\u6D3B\u5BF9\u8C61
    jvm\u67E5\u770B\u5F53\u524D JVM \u7684\u8BE6\u7EC6\u8FD0\u884C\u65F6\u4FE1\u606F
    mbean\u67E5\u770B\u6216\u76D1\u63A7 MBean \u5C5E\u6027\u4FE1\u606F\uFF0C\u652F\u6301\u5B9E\u65F6\u5237\u65B0\u548C\u6A21\u5F0F\u5339\u914D
    memory\u67E5\u770B JVM \u7684\u5185\u5B58\u4F7F\u7528\u60C5\u51B5
    thread\u67E5\u770B\u7EBF\u7A0B\u4FE1\u606F\u53CA\u5806\u6808\uFF0C\u652F\u6301\u67E5\u627E\u963B\u585E\u7EBF\u7A0B\u548C\u6700\u5FD9\u7EBF\u7A0B
    sysprop\u67E5\u770B\u6216\u4FEE\u6539\u7CFB\u7EDF\u5C5E\u6027\uFF0C\u652F\u6301\u52A8\u6001\u4FEE\u6539 JVM \u7CFB\u7EDF\u5C5E\u6027
    sysenv\u67E5\u770B\u7CFB\u7EDF\u73AF\u5883\u53D8\u91CF
    vmoption\u67E5\u770B\u6216\u66F4\u65B0 VM \u9009\u9879\uFF0C\u652F\u6301\u52A8\u6001\u8C03\u6574 JVM \u53C2\u6570
    perfcounter\u67E5\u770B JVM Perf Counter \u6027\u80FD\u8BA1\u6570\u5668\u4FE1\u606F
    vmtool\u865A\u62DF\u673A\u5DE5\u5177\u96C6\u5408\uFF0C\u652F\u6301\u5F3A\u5236 GC\u3001\u83B7\u53D6\u5B9E\u4F8B\u3001\u7EBF\u7A0B\u4E2D\u65AD\u7B49
    getstatic\u67E5\u770B\u7C7B\u7684\u9759\u6001\u5B57\u6BB5\u503C\uFF0C\u652F\u6301\u6307\u5B9A ClassLoader \u548C OGNL \u8868\u8FBE\u5F0F
    ognl\u6267\u884C OGNL \u8868\u8FBE\u5F0F\uFF0C\u52A8\u6001\u8C03\u7528\u65B9\u6CD5\u548C\u8BBF\u95EE\u5B57\u6BB5

    Class/ClassLoader \u76F8\u5173\u5DE5\u5177\uFF088 \u4E2A\uFF09

    \u5DE5\u5177\u529F\u80FD\u63CF\u8FF0
    sc\u641C\u7D22 JVM \u5DF2\u52A0\u8F7D\u7684\u7C7B\uFF0C\u652F\u6301\u901A\u914D\u7B26\u548C\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u53EF\u67E5\u770B\u7C7B\u8BE6\u60C5\uFF08\u7C7B\u52A0\u8F7D\u5668\u3001\u63A5\u53E3\u3001\u7236\u7C7B\u3001\u6CE8\u89E3\u7B49\uFF09
    sm\u641C\u7D22\u5DF2\u52A0\u8F7D\u7C7B\u7684\u65B9\u6CD5\u4FE1\u606F\uFF0C\u652F\u6301\u901A\u914D\u7B26\u548C\u6B63\u5219\u8868\u8FBE\u5F0F\uFF0C\u53EF\u67E5\u770B\u65B9\u6CD5\u7B7E\u540D\u3001\u53C2\u6570\u7C7B\u578B\u3001\u6CE8\u89E3\u7B49
    jad\u53CD\u7F16\u8BD1\u6307\u5B9A\u5DF2\u52A0\u8F7D\u7C7B\u7684\u6E90\u7801\uFF0C\u5C06 JVM \u4E2D\u5B9E\u9645\u8FD0\u884C\u7684 class \u5B57\u8282\u7801\u53CD\u7F16\u8BD1\u4E3A Java \u4EE3\u7801
    classloaderClassLoader \u8BCA\u65AD\u5DE5\u5177\uFF0C\u67E5\u770B\u7C7B\u52A0\u8F7D\u5668\u7EDF\u8BA1\u3001\u7EE7\u627F\u6811\u3001URLs\uFF0C\u652F\u6301\u8D44\u6E90\u67E5\u627E\u548C\u7C7B\u52A0\u8F7D\u64CD\u4F5C\uFF1B\u641C\u7D22\u7C7B\u4F18\u5148\u4F7F\u7528 sc \u5DE5\u5177
    mc\u5185\u5B58\u7F16\u8BD1\u5668\uFF0C\u5C06 .java \u6E90\u7801\u6587\u4EF6\u7F16\u8BD1\u4E3A .class \u5B57\u8282\u7801\u6587\u4EF6
    redefine\u91CD\u65B0\u52A0\u8F7D\u7C7B\u7684\u5B57\u8282\u7801\uFF0C\u5141\u8BB8\u5728 JVM \u8FD0\u884C\u65F6\u5BF9\u5DF2\u5B58\u5728\u7684\u7C7B\u8FDB\u884C\u70ED\u66F4\u65B0
    retransform\u70ED\u52A0\u8F7D\u7C7B\u7684\u5B57\u8282\u7801\uFF0C\u5BF9\u5DF2\u52A0\u8F7D\u7684\u7C7B\u8FDB\u884C\u5B57\u8282\u7801\u4FEE\u6539\u5E76\u4F7F\u5176\u751F\u6548
    dump\u5C06 JVM \u4E2D\u5B9E\u9645\u8FD0\u884C\u7684 class \u5B57\u8282\u7801\u5BFC\u51FA\u5230\u6307\u5B9A\u76EE\u5F55\uFF0C\u9002\u7528\u4E8E\u6279\u91CF\u4E0B\u8F7D\u6307\u5B9A\u5305\u7684\u5B57\u8282\u7801

    \u76D1\u63A7\u8BCA\u65AD\u5DE5\u5177\uFF086 \u4E2A\uFF09

    \u5DE5\u5177\u529F\u80FD\u63CF\u8FF0
    monitor\u5B9E\u65F6\u76D1\u63A7\u6307\u5B9A\u7C7B\u7684\u6307\u5B9A\u65B9\u6CD5\u7684\u8C03\u7528\u60C5\u51B5\uFF0C\u8F93\u51FA\u8C03\u7528\u6B21\u6570\u3001\u6210\u529F\u7387\u3001\u5E73\u5747 RT \u7B49\u7EDF\u8BA1\u4FE1\u606F
    stack\u8F93\u51FA\u5F53\u524D\u65B9\u6CD5\u88AB\u8C03\u7528\u7684\u8C03\u7528\u8DEF\u5F84\uFF0C\u5E2E\u52A9\u5206\u6790\u65B9\u6CD5\u7684\u8C03\u7528\u94FE\u8DEF
    trace\u8FFD\u8E2A\u65B9\u6CD5\u5185\u90E8\u8C03\u7528\u8DEF\u5F84\uFF0C\u8F93\u51FA\u6BCF\u4E2A\u8282\u70B9\u7684\u8017\u65F6\u4FE1\u606F\uFF0C\u652F\u6301\u6761\u4EF6\u8FC7\u6EE4
    tt\u65B9\u6CD5\u6267\u884C\u6570\u636E\u7684\u65F6\u7A7A\u96A7\u9053\uFF0C\u8BB0\u5F55\u6307\u5B9A\u65B9\u6CD5\u6BCF\u6B21\u8C03\u7528\u7684\u5165\u53C2\u548C\u8FD4\u56DE\u4FE1\u606F\uFF0C\u652F\u6301\u4E8B\u540E\u67E5\u770B\u548C\u91CD\u653E
    watch\u89C2\u5BDF\u6307\u5B9A\u65B9\u6CD5\u7684\u8C03\u7528\u60C5\u51B5\uFF0C\u5305\u542B\u5165\u53C2\u3001\u8FD4\u56DE\u503C\u548C\u629B\u51FA\u5F02\u5E38\u7B49\u4FE1\u606F\uFF0C\u652F\u6301\u5B9E\u65F6\u6D41\u5F0F\u8F93\u51FA
    profilerAsync Profiler \u8BCA\u65AD\u5DE5\u5177\uFF0C\u7528\u4E8E\u91C7\u6837 CPU/alloc/lock \u7B49\u4E8B\u4EF6\u5E76\u8F93\u51FA\u706B\u7130\u56FE\u3001JFR \u7B49\u683C\u5F0F

    Arthas \u8F85\u52A9\u5DE5\u5177\uFF082 \u4E2A\uFF09

    \u5DE5\u5177\u529F\u80FD\u63CF\u8FF0
    viewfile\u67E5\u770B\u6587\u4EF6\u5185\u5BB9\uFF08\u4EC5\u5141\u8BB8\u5728\u914D\u7F6E\u7684\u76EE\u5F55\u767D\u540D\u5355\u5185\u67E5\u770B\uFF09\uFF0C\u652F\u6301 cursor/offset \u5206\u6BB5\u8BFB\u53D6\uFF0C\u907F\u514D\u4E00\u6B21\u6027\u8FD4\u56DE\u5927\u91CF\u5185\u5BB9
    options\u67E5\u770B\u6216\u4FEE\u6539 Arthas \u5168\u5C40\u5F00\u5173\u9009\u9879
    ',13),_={class:"custom-container tip"},f=t("p",{class:"custom-container-title"},"\u63D0\u793A",-1),A=n("AI Agent \u8C03\u7528 ognl\u3001getstatic\u3001vmtool\u3001watch\u3001trace\u3001monitor\u3001stack \u6216 tt \u7684\u8868\u8FBE\u5F0F\u53C2\u6570\u524D\uFF0C\u5EFA\u8BAE\u5148\u9605\u8BFB ",17),M=s("OGNL \u590D\u6742\u8868\u8FBE\u5F0F\u4F7F\u7528\u6280\u5DE7"),x=s("\u3002\u5176\u4E2D\u8BF4\u660E\u4E86\u539F\u59CB\u8868\u8FBE\u5F0F\u53C2\u6570\u4E0E\u5B8C\u6574\u547D\u4EE4\u7684\u533A\u522B\u3001\u5404\u547D\u4EE4\u53EF\u7528\u53D8\u91CF\u4EE5\u53CA\u9010\u6B65\u9A8C\u8BC1\u65B9\u6CD5\u3002"),C=n(`

    \u5FEB\u901F\u5F00\u59CB

    1. \u914D\u7F6E MCP \u670D\u52A1

    \u5728 arthas.properties \u914D\u7F6E\u6587\u4EF6\u4E2D\u542F\u7528 MCP \u670D\u52A1\uFF1A

    # MCP (Model Context Protocol) configuration
    +arthas.mcpEndpoint=/mcp
    +

    2. \u542F\u52A8\u5E94\u7528

    \u6B63\u5E38\u542F\u52A8 Arthas \u6216\u5E26\u6709 Arthas \u7684 Java \u5E94\u7528\u3002\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0CMCP \u670D\u52A1\u4F1A\u5728 HTTP \u7AEF\u53E3 8563 \u4E0A\u66B4\u9732\u3002

    \u9A8C\u8BC1 MCP \u670D\u52A1\u662F\u5426\u542F\u52A8\uFF1A

    curl http://localhost:8563/mcp
    +

    \u5982\u679C\u8FD4\u56DE MCP \u534F\u8BAE\u4FE1\u606F\uFF0C\u8BF4\u660E\u670D\u52A1\u5DF2\u6210\u529F\u542F\u52A8\u3002

    3. \u914D\u7F6E AI \u5BA2\u6237\u7AEF

    \u4EE5\u4E0B\u662F\u51E0\u79CD\u4E3B\u6D41 AI \u5BA2\u6237\u7AEF\u7684\u914D\u7F6E\u65B9\u5F0F\uFF1A

    Cherry Studio / Cline

    \u5728\u8BBE\u7F6E\u4E2D\u6DFB\u52A0 MCP \u670D\u52A1\u5668\u914D\u7F6E\uFF1A

    {
    +  "mcpServers": {
    +    "arthas-mcp": {
    +      "type": "streamableHttp",
    +      "url": "http://localhost:8563/mcp"
    +    }
    +  }
    +}
    +

    \u914D\u7F6E\u8BF4\u660E

    Arthas \u914D\u7F6E\u9879

    \u914D\u7F6E\u9879\u8BF4\u660E\u9ED8\u8BA4\u503C
    arthas.mcpEndpointMCP \u670D\u52A1\u7684\u8BBF\u95EE\u8DEF\u5F84\u65E0\uFF08\u9700\u8981\u624B\u52A8\u914D\u7F6E\uFF09
    arthas.mcpProtocol\u4F20\u8F93\u534F\u8BAE\u6A21\u5F0F\uFF1ASTREAMABLE\uFF08\u6709\u72B6\u6001\uFF09\u6216 STATELESS\uFF08\u65E0\u72B6\u6001\uFF09STREAMABLE
    arthas.httpPortHTTP \u670D\u52A1\u7AEF\u53E38563
    arthas.password\u8BA4\u8BC1\u5BC6\u7801\uFF08\u5F00\u542F\u8BA4\u8BC1\u65F6\u4F7F\u7528\uFF09\u65E0

    \u4F20\u8F93\u534F\u8BAE\u6A21\u5F0F

    Arthas MCP Server \u652F\u6301\u4E24\u79CD\u4F20\u8F93\u534F\u8BAE\u6A21\u5F0F\uFF1A

    • STREAMABLE \u6A21\u5F0F\uFF08\u9ED8\u8BA4\uFF09\uFF1A\u6709\u72B6\u6001\u6A21\u5F0F\uFF0C\u901A\u8FC7 HTTP/SSE \u7EF4\u6301\u6301\u4E45\u8FDE\u63A5\uFF0C\u652F\u6301\u957F\u65F6\u95F4\u8FD0\u884C\u7684\u547D\u4EE4\uFF08\u5982 watch\u3001trace\u3001monitor \u7B49\u6D41\u5F0F\u5DE5\u5177\uFF09\u3001\u8FDB\u5EA6\u901A\u77E5\u548C\u4F1A\u8BDD\u72B6\u6001\u3002\u9002\u5408\u4EA4\u4E92\u5F0F\u8BCA\u65AD\u573A\u666F\u3002
    • STATELESS \u6A21\u5F0F\uFF1A\u65E0\u72B6\u6001\u6A21\u5F0F\uFF0C\u6BCF\u4E2A\u8BF7\u6C42\u76F8\u4E92\u72EC\u7ACB\uFF0C\u9002\u5408\u7B80\u5355\u7684\u4E00\u6B21\u6027\u67E5\u8BE2\u573A\u666F\u3002

    \u5728 arthas.properties \u4E2D\u914D\u7F6E\uFF1A

    arthas.mcpEndpoint=/mcp
    +# \u53EF\u9009\uFF0C\u9ED8\u8BA4\u4E3A STREAMABLE
    +arthas.mcpProtocol=STREAMABLE
    +

    \u8BA4\u8BC1\u914D\u7F6E

    \u5F53\u5728\u914D\u7F6E\u6587\u4EF6\u4E2D\u8BBE\u7F6E\u4E86 arthas.password \u65F6\uFF0CMCP Server \u4F1A\u81EA\u52A8\u5F00\u542F\u9274\u6743\u529F\u80FD\u3002\u6B64\u65F6\u9700\u8981\u5728 AI \u5BA2\u6237\u7AEF\u914D\u7F6E\u4E2D\u6DFB\u52A0\u8BA4\u8BC1\u5934\uFF0C\u643A\u5E26\u7684 Bearer Token \u5C31\u662F\u914D\u7F6E\u7684\u5BC6\u7801\u503C\u3002

    \u914D\u7F6E\u6587\u4EF6\u793A\u4F8B\uFF08arthas.properties\uFF09\uFF1A

    arthas.password=your-secure-password
    +

    AI \u5BA2\u6237\u7AEF\u914D\u7F6E\u793A\u4F8B\uFF1A

    {
    +  "mcpServers": {
    +    "arthas-mcp": {
    +      "type": "streamableHttp",
    +      "url": "http://localhost:8563/mcp",
    +      "headers": {
    +        "Authorization": "Bearer your-secure-password"
    +      }
    +    }
    +  }
    +}
    +

    \u6CE8\u610F

    \u6CE8\u610F\uFF1AAuthorization header \u4E2D\u7684 token \u5FC5\u987B\u4E0E arthas.password \u914D\u7F6E\u7684\u503C\u5B8C\u5168\u4E00\u81F4\u3002

    viewfile \u5DE5\u5177\u76EE\u5F55\u767D\u540D\u5355\u914D\u7F6E

    viewfile \u5DE5\u5177\u9ED8\u8BA4\u53EA\u5141\u8BB8\u67E5\u770B\u4EE5\u4E0B\u76EE\u5F55\u4E2D\u7684\u6587\u4EF6\uFF1A

    • \u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\u4E0B\u7684 arthas-output \u76EE\u5F55\uFF08\u82E5\u5B58\u5728\uFF09
    • \u7528\u6237 Home \u76EE\u5F55\u4E0B\u7684 ~/logs/ \u76EE\u5F55\uFF08\u82E5\u5B58\u5728\uFF09

    \u53EF\u901A\u8FC7\u73AF\u5883\u53D8\u91CF\u6269\u5C55\u5141\u8BB8\u76EE\u5F55\uFF1A

    export ARTHAS_MCP_VIEWFILE_ALLOWED_DIRS=/path/to/dir1,/path/to/dir2
    +

    \u53CD\u9988\u4E0E\u8D21\u732E

    \u63D0\u793A

    Arthas MCP Server \u662F\u5B9E\u9A8C\u6027\u529F\u80FD\uFF0C\u6B22\u8FCE\u63D0\u4F9B\u53CD\u9988\u548C\u5EFA\u8BAE\uFF01

    `,36),y=t("strong",null,"\u95EE\u9898\u53CD\u9988",-1),P=s("\uFF1A"),q={href:"https://github.com/alibaba/arthas/issues",target:"_blank",rel:"noopener noreferrer"},S=s("GitHub Issues"),E=t("strong",null,"\u529F\u80FD\u5EFA\u8BAE",-1),T=s("\uFF1A"),L={href:"https://github.com/alibaba/arthas/discussions",target:"_blank",rel:"noopener noreferrer"},V=s("GitHub Discussions"),I=t("strong",null,"\u53C2\u4E0E\u8D21\u732E",-1),J=s("\uFF1A"),w={href:"https://github.com/alibaba/arthas/blob/master/CONTRIBUTING.md",target:"_blank",rel:"noopener noreferrer"},R=s("\u8D21\u732E\u6307\u5357");function B(j,H){const e=r("ExternalLinkIcon"),o=r("RouterLink");return i(),c("div",null,[h,u,t("p",null,[v,t("a",g,[m,a(e)]),b]),k,t("div",_,[f,t("p",null,[A,a(o,{to:"/doc/ognl-express.html"},{default:l(()=>[M]),_:1}),x])]),C,t("ul",null,[t("li",null,[y,P,t("a",q,[S,a(e)])]),t("li",null,[E,T,t("a",L,[V,a(e)])]),t("li",null,[I,J,t("a",w,[R,a(e)])])])])}const G=d(p,[["render",B],["__file","mcp-server.html.vue"]]);export{G as default}; diff --git a/assets/mcp-server.html.d0555bb2.js b/assets/mcp-server.html.c2f288cd.js similarity index 50% rename from assets/mcp-server.html.d0555bb2.js rename to assets/mcp-server.html.c2f288cd.js index e0ae5c62f..039c2346b 100644 --- a/assets/mcp-server.html.d0555bb2.js +++ b/assets/mcp-server.html.c2f288cd.js @@ -1,4 +1,4 @@ -import{_ as n,o,c as r,a as t,b as s,e,d as i,r as d}from"./app.524ecf5c.js";const c={},l=t("h1",{id:"arthas-mcp-server",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#arthas-mcp-server","aria-hidden":"true"},"#"),e(" Arthas MCP Server")],-1),p=t("h2",{id:"overview",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#overview","aria-hidden":"true"},"#"),e(" Overview")],-1),u=e("Arthas MCP Server is an experimental module of Arthas that implements a server based on the "),h={href:"https://modelcontextprotocol.io/",target:"_blank",rel:"noopener noreferrer"},g=e("MCP (Model Context Protocol)"),m=e(". This module provides a unified JSON-RPC 2.0 interface through HTTP/Netty, enabling AI assistants to execute Arthas diagnostic commands via tool calls."),v=i(`

    MCP (Model Context Protocol) is a standardized protocol proposed by Anthropic for connecting AI assistants with various tools and data sources. Through Arthas MCP Server, AI assistants can naturally execute Java application diagnostic tasks, significantly improving development and operations efficiency.

    Key Features

    • AI-Native Integration: Supports mainstream AI clients (Claude Desktop, Cherry Studio, Cline, etc.)
    • Standardized Protocol: Full implementation of MCP protocol specification (version 2025-06-18), supporting Streamable Http transport
    • 29 Diagnostic Tools: Covers core functionalities including JVM monitoring, class loading, method tracing, etc.
    • Security Authentication: Supports Bearer Token authentication mechanism

    Supported Diagnostic Tools

    Arthas MCP Server integrates 29 diagnostic tools, categorized by functionality:

    ToolDescription
    dashboardReal-time JVM/application dashboard with customizable refresh interval and count control
    heapdumpGenerate JVM heap dump file, supports --live option to export only live objects
    jvmView current JVM detailed runtime information
    mbeanView or monitor MBean attributes, supports real-time refresh and pattern matching
    memoryView JVM memory usage
    threadView thread information and stack traces, supports finding blocked and busiest threads
    syspropView or modify system properties, supports dynamic JVM system property modification
    sysenvView system environment variables
    vmoptionView or update VM options, supports dynamic JVM parameter adjustment
    perfcounterView JVM Perf Counter information
    vmtoolVM tool collection, supports forced GC, instance retrieval, thread interruption, etc.
    getstaticView static field values of a class, supports specifying ClassLoader and OGNL expressions
    ognlExecute OGNL expressions, dynamically invoke methods and access fields

    Class/ClassLoader Tools (8)

    ToolDescription
    scSearch loaded classes in JVM, supports wildcard and regex matching, view class details (classloader, interfaces, superclass, annotations, etc.)
    smSearch methods of loaded classes, supports wildcard and regex matching, view method signatures, parameter types, annotations, etc.
    jadDecompile loaded class source code, converts actual running class bytecode in JVM to Java code
    classloaderClassLoader diagnostic tool, view classloader statistics, hierarchy tree, URLs, supports resource lookup and class loading; prefer sc for class search
    mcMemory compiler, compiles .java source files to .class bytecode files
    redefineReload class bytecode, allows hot-updating existing classes in the JVM at runtime
    retransformHot-load class bytecode, apply bytecode modifications to loaded classes and make them effective
    dumpDump actual running class bytecode from JVM to specified directory, suitable for batch downloading bytecode of specified packages

    Monitoring and Diagnostic Tools (6)

    ToolDescription
    monitorMonitor invocation of specified methods in real-time, outputs call count, success rate, average RT, and other statistics
    stackOutput call path of current method, helps analyze method call chains
    traceTrace internal method call paths, output time cost for each node, supports condition filtering
    ttTime tunnel for method execution data, records parameters and return values for each invocation, supports replay and inspection
    watchObserve method invocations including parameters, return values, and exceptions, supports real-time streaming output
    profilerAsync Profiler diagnostic tool, samples CPU/alloc/lock events and outputs flamegraph, JFR, and other formats

    Arthas Utility Tools (2)

    ToolDescription
    viewfileView file contents (only within configured directory whitelist), supports cursor/offset pagination to avoid returning large content all at once
    optionsView or modify Arthas global options

    Quick Start

    1. Configure MCP Service

    Enable MCP service in arthas.properties configuration file:

    # MCP (Model Context Protocol) configuration
    +import{_ as i,o as d,c,a as t,b as a,w as l,e,d as n,r as o}from"./app.e2427bec.js";const p={},u=t("h1",{id:"arthas-mcp-server",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#arthas-mcp-server","aria-hidden":"true"},"#"),e(" Arthas MCP Server")],-1),h=t("h2",{id:"overview",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#overview","aria-hidden":"true"},"#"),e(" Overview")],-1),m=e("Arthas MCP Server is an experimental module of Arthas that implements a server based on the "),g={href:"https://modelcontextprotocol.io/",target:"_blank",rel:"noopener noreferrer"},v=e("MCP (Model Context Protocol)"),f=e(". This module provides a unified JSON-RPC 2.0 interface through HTTP/Netty, enabling AI assistants to execute Arthas diagnostic commands via tool calls."),b=n('

    MCP (Model Context Protocol) is a standardized protocol proposed by Anthropic for connecting AI assistants with various tools and data sources. Through Arthas MCP Server, AI assistants can naturally execute Java application diagnostic tasks, significantly improving development and operations efficiency.

    Key Features

    • AI-Native Integration: Supports mainstream AI clients (Claude Desktop, Cherry Studio, Cline, etc.)
    • Standardized Protocol: Full implementation of MCP protocol specification (version 2025-06-18), supporting Streamable Http transport
    • 29 Diagnostic Tools: Covers core functionalities including JVM monitoring, class loading, method tracing, etc.
    • Security Authentication: Supports Bearer Token authentication mechanism

    Supported Diagnostic Tools

    Arthas MCP Server integrates 29 diagnostic tools, categorized by functionality:

    ToolDescription
    dashboardReal-time JVM/application dashboard with customizable refresh interval and count control
    heapdumpGenerate JVM heap dump file, supports --live option to export only live objects
    jvmView current JVM detailed runtime information
    mbeanView or monitor MBean attributes, supports real-time refresh and pattern matching
    memoryView JVM memory usage
    threadView thread information and stack traces, supports finding blocked and busiest threads
    syspropView or modify system properties, supports dynamic JVM system property modification
    sysenvView system environment variables
    vmoptionView or update VM options, supports dynamic JVM parameter adjustment
    perfcounterView JVM Perf Counter information
    vmtoolVM tool collection, supports forced GC, instance retrieval, thread interruption, etc.
    getstaticView static field values of a class, supports specifying ClassLoader and OGNL expressions
    ognlExecute OGNL expressions, dynamically invoke methods and access fields

    Class/ClassLoader Tools (8)

    ToolDescription
    scSearch loaded classes in JVM, supports wildcard and regex matching, view class details (classloader, interfaces, superclass, annotations, etc.)
    smSearch methods of loaded classes, supports wildcard and regex matching, view method signatures, parameter types, annotations, etc.
    jadDecompile loaded class source code, converts actual running class bytecode in JVM to Java code
    classloaderClassLoader diagnostic tool, view classloader statistics, hierarchy tree, URLs, supports resource lookup and class loading; prefer sc for class search
    mcMemory compiler, compiles .java source files to .class bytecode files
    redefineReload class bytecode, allows hot-updating existing classes in the JVM at runtime
    retransformHot-load class bytecode, apply bytecode modifications to loaded classes and make them effective
    dumpDump actual running class bytecode from JVM to specified directory, suitable for batch downloading bytecode of specified packages

    Monitoring and Diagnostic Tools (6)

    ToolDescription
    monitorMonitor invocation of specified methods in real-time, outputs call count, success rate, average RT, and other statistics
    stackOutput call path of current method, helps analyze method call chains
    traceTrace internal method call paths, output time cost for each node, supports condition filtering
    ttTime tunnel for method execution data, records parameters and return values for each invocation, supports replay and inspection
    watchObserve method invocations including parameters, return values, and exceptions, supports real-time streaming output
    profilerAsync Profiler diagnostic tool, samples CPU/alloc/lock events and outputs flamegraph, JFR, and other formats

    Arthas Utility Tools (2)

    ToolDescription
    viewfileView file contents (only within configured directory whitelist), supports cursor/offset pagination to avoid returning large content all at once
    optionsView or modify Arthas global options
    ',13),k={class:"custom-container tip"},y=t("p",{class:"custom-container-title"},"TIP",-1),_=n("Before an AI agent supplies expression parameters to ognl, getstatic, vmtool, watch, trace, monitor, stack, or tt, read ",17),x=e("Tips for complex OGNL expressions"),w=e(". It explains raw expression parameters versus complete commands, variables available in each context, and incremental validation."),C=n(`

    Quick Start

    1. Configure MCP Service

    Enable MCP service in arthas.properties configuration file:

    # MCP (Model Context Protocol) configuration
     arthas.mcpEndpoint=/mcp
     

    2. Start Application

    Start Arthas or Java application with Arthas normally. By default, MCP service will be exposed on HTTP port 8563.

    Verify MCP service is running:

    curl http://localhost:8563/mcp
     

    If MCP protocol information is returned, the service has started successfully.

    3. Configure AI Client

    Configuration examples for mainstream AI clients:

    Cherry Studio / Cline

    Add MCP server configuration in settings:

    {
    @@ -25,4 +25,4 @@ import{_ as n,o,c as r,a as t,b as s,e,d as i,r as d}from"./app.524ecf5c.js";con
       }
     }
     

    WARNING

    Note: The token in the Authorization header must exactly match the value configured in arthas.password.

    viewfile Directory Whitelist Configuration

    The viewfile tool by default only allows viewing files in the following directories:

    • The arthas-output directory under the current working directory (if it exists)
    • The ~/logs/ directory under the user's home directory (if it exists)

    Additional directories can be configured via environment variable:

    export ARTHAS_MCP_VIEWFILE_ALLOWED_DIRS=/path/to/dir1,/path/to/dir2
    -

    Feedback & Contribution

    TIP

    Arthas MCP Server is an experimental feature. Feedback and suggestions are welcome!

    `,49),f=t("strong",null,"Issue Report",-1),b=e(": "),y={href:"https://github.com/alibaba/arthas/issues",target:"_blank",rel:"noopener noreferrer"},k=e("GitHub Issues"),_=t("strong",null,"Feature Request",-1),x=e(": "),w={href:"https://github.com/alibaba/arthas/discussions",target:"_blank",rel:"noopener noreferrer"},C=e("GitHub Discussions"),A=t("strong",null,"Contribute",-1),M=e(": "),S={href:"https://github.com/alibaba/arthas/blob/master/CONTRIBUTING.md",target:"_blank",rel:"noopener noreferrer"},T=e("Contributing Guide");function P(q,V){const a=d("ExternalLinkIcon");return o(),r("div",null,[l,p,t("p",null,[u,t("a",h,[g,s(a)]),m]),v,t("ul",null,[t("li",null,[f,b,t("a",y,[k,s(a)])]),t("li",null,[_,x,t("a",w,[C,s(a)])]),t("li",null,[A,M,t("a",S,[T,s(a)])])])])}const I=n(c,[["render",P],["__file","mcp-server.html.vue"]]);export{I as default}; +

    Feedback & Contribution

    TIP

    Arthas MCP Server is an experimental feature. Feedback and suggestions are welcome!

    `,36),A=t("strong",null,"Issue Report",-1),M=e(": "),T={href:"https://github.com/alibaba/arthas/issues",target:"_blank",rel:"noopener noreferrer"},S=e("GitHub Issues"),P=t("strong",null,"Feature Request",-1),q=e(": "),V={href:"https://github.com/alibaba/arthas/discussions",target:"_blank",rel:"noopener noreferrer"},E=e("GitHub Discussions"),I=t("strong",null,"Contribute",-1),L=e(": "),R={href:"https://github.com/alibaba/arthas/blob/master/CONTRIBUTING.md",target:"_blank",rel:"noopener noreferrer"},J=e("Contributing Guide");function N(D,B){const s=o("ExternalLinkIcon"),r=o("RouterLink");return d(),c("div",null,[u,h,t("p",null,[m,t("a",g,[v,a(s)]),f]),b,t("div",k,[y,t("p",null,[_,a(r,{to:"/en/doc/ognl-express.html"},{default:l(()=>[x]),_:1}),w])]),C,t("ul",null,[t("li",null,[A,M,t("a",T,[S,a(s)])]),t("li",null,[P,q,t("a",V,[E,a(s)])]),t("li",null,[I,L,t("a",R,[J,a(s)])])])])}const H=i(p,[["render",N],["__file","mcp-server.html.vue"]]);export{H as default}; diff --git a/assets/memory.html.290d23a6.js b/assets/memory.html.3bde6b86.js similarity index 77% rename from assets/memory.html.290d23a6.js rename to assets/memory.html.3bde6b86.js index 114180fd8..7a6a451e7 100644 --- a/assets/memory.html.290d23a6.js +++ b/assets/memory.html.3bde6b86.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-3f212774","path":"/en/doc/memory.html","title":"memory","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/memory.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-3f212774","path":"/en/doc/memory.html","title":"memory","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/memory.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/memory.html.492ae9d3.js b/assets/memory.html.8e88a19c.js similarity index 97% rename from assets/memory.html.492ae9d3.js rename to assets/memory.html.8e88a19c.js index 7d8bbd2a3..019562cd9 100644 --- a/assets/memory.html.492ae9d3.js +++ b/assets/memory.html.8e88a19c.js @@ -1,4 +1,4 @@ -import{_ as o,o as r,c as i,a as e,b as s,e as a,d as t,r as d}from"./app.524ecf5c.js";const l={},c=e("h1",{id:"memory",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#memory","aria-hidden":"true"},"#"),a(" memory")],-1),m=e("p",null,"\u67E5\u770B JVM \u5185\u5B58\u4FE1\u606F\u3002",-1),v=e("p",null,"\u5177\u4F53\u5B57\u6BB5\u4FE1\u606F\uFF0C\u53C2\u8003\uFF1A",-1),_={href:"https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryMXBean.html#getHeapMemoryUsage()",target:"_blank",rel:"noopener noreferrer"},h=a("MemoryMXBean#getHeapMemoryUsage()"),M={href:"https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryMXBean.html#getHeapMemoryUsage()",target:"_blank",rel:"noopener noreferrer"},u=a("MemoryMXBean#getNonHeapMemoryUsage()"),p=t(`

    \u5177\u4F53\u4EE3\u7801\uFF1A

    • https://github.com/alibaba/arthas/blob/master/core/src/main/java/com/taobao/arthas/core/command/monitor200/MemoryCommand.java

    \u4F7F\u7528\u53C2\u8003

    $ memory
    +import{_ as o,o as r,c as i,a as e,b as s,e as a,d as t,r as d}from"./app.e2427bec.js";const l={},c=e("h1",{id:"memory",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#memory","aria-hidden":"true"},"#"),a(" memory")],-1),m=e("p",null,"\u67E5\u770B JVM \u5185\u5B58\u4FE1\u606F\u3002",-1),v=e("p",null,"\u5177\u4F53\u5B57\u6BB5\u4FE1\u606F\uFF0C\u53C2\u8003\uFF1A",-1),_={href:"https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryMXBean.html#getHeapMemoryUsage()",target:"_blank",rel:"noopener noreferrer"},h=a("MemoryMXBean#getHeapMemoryUsage()"),M={href:"https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryMXBean.html#getHeapMemoryUsage()",target:"_blank",rel:"noopener noreferrer"},u=a("MemoryMXBean#getNonHeapMemoryUsage()"),p=t(`

    \u5177\u4F53\u4EE3\u7801\uFF1A

    • https://github.com/alibaba/arthas/blob/master/core/src/main/java/com/taobao/arthas/core/command/monitor200/MemoryCommand.java

    \u4F7F\u7528\u53C2\u8003

    $ memory
     Memory                           used      total      max        usage
     heap                             32M       256M       4096M      0.79%
     g1_eden_space                    11M       68M        -1         16.18%
    diff --git a/assets/memory.html.7f3cbe90.js b/assets/memory.html.a1b2b15c.js
    similarity index 72%
    rename from assets/memory.html.7f3cbe90.js
    rename to assets/memory.html.a1b2b15c.js
    index 586a78636..babbec774 100644
    --- a/assets/memory.html.7f3cbe90.js
    +++ b/assets/memory.html.a1b2b15c.js
    @@ -1 +1 @@
    -const e=JSON.parse('{"key":"v-4d9433f0","path":"/doc/memory.html","title":"memory","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/memory.md","version":"4.3.3"}');export{e as data};
    +const e=JSON.parse('{"key":"v-4d9433f0","path":"/doc/memory.html","title":"memory","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/memory.md","version":"4.3.5"}');export{e as data};
    diff --git a/assets/memory.html.4cb5296e.js b/assets/memory.html.e96b1c33.js
    similarity index 98%
    rename from assets/memory.html.4cb5296e.js
    rename to assets/memory.html.e96b1c33.js
    index 3dd99dce3..1cbc44e4c 100644
    --- a/assets/memory.html.4cb5296e.js
    +++ b/assets/memory.html.e96b1c33.js
    @@ -1,4 +1,4 @@
    -import{_ as r,o,c as t,a as e,b as s,e as a,d as l,r as i}from"./app.524ecf5c.js";const c={},m=e("h1",{id:"memory",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#memory","aria-hidden":"true"},"#"),a(" memory")],-1),d=e("p",null,"View the JVM memory information.",-1),p=e("p",null,"For field information, refer to:",-1),u={href:"https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryMXBean.html#getHeapMemoryUsage()",target:"_blank",rel:"noopener noreferrer"},v=a("MemoryMXBean#getHeapMemoryUsage()"),b={href:"https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryMXBean.html#getHeapMemoryUsage()",target:"_blank",rel:"noopener noreferrer"},h=a("MemoryMXBean#getNonHeapMemoryUsage()"),_=l(`

    Source code:

    • https://github.com/alibaba/arthas/blob/master/core/src/main/java/com/taobao/arthas/core/command/monitor200/MemoryCommand.java

    Usage

    $ memory
    +import{_ as r,o,c as t,a as e,b as s,e as a,d as l,r as i}from"./app.e2427bec.js";const c={},m=e("h1",{id:"memory",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#memory","aria-hidden":"true"},"#"),a(" memory")],-1),d=e("p",null,"View the JVM memory information.",-1),p=e("p",null,"For field information, refer to:",-1),u={href:"https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryMXBean.html#getHeapMemoryUsage()",target:"_blank",rel:"noopener noreferrer"},v=a("MemoryMXBean#getHeapMemoryUsage()"),b={href:"https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryMXBean.html#getHeapMemoryUsage()",target:"_blank",rel:"noopener noreferrer"},h=a("MemoryMXBean#getNonHeapMemoryUsage()"),_=l(`

    Source code:

    • https://github.com/alibaba/arthas/blob/master/core/src/main/java/com/taobao/arthas/core/command/monitor200/MemoryCommand.java

    Usage

    $ memory
     Memory                           used      total      max        usage
     heap                             32M       256M       4096M      0.79%
     g1_eden_space                    11M       68M        -1         16.18%
    diff --git a/assets/monitor.html.aa324b7d.js b/assets/monitor.html.5a803975.js
    similarity index 93%
    rename from assets/monitor.html.aa324b7d.js
    rename to assets/monitor.html.5a803975.js
    index 0e73805a2..d21c49f8b 100644
    --- a/assets/monitor.html.aa324b7d.js
    +++ b/assets/monitor.html.5a803975.js
    @@ -1 +1 @@
    -const l=JSON.parse('{"key":"v-6e88d7a2","path":"/doc/monitor.html","title":"monitor","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u76D1\u63A7\u7684\u7EF4\u5EA6\u8BF4\u660E","slug":"\u76D1\u63A7\u7684\u7EF4\u5EA6\u8BF4\u660E","link":"#\u76D1\u63A7\u7684\u7EF4\u5EA6\u8BF4\u660E","children":[]},{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"\u6307\u5B9A Class \u6700\u5927\u5339\u914D\u6570\u91CF","slug":"\u6307\u5B9A-class-\u6700\u5927\u5339\u914D\u6570\u91CF","link":"#\u6307\u5B9A-class-\u6700\u5927\u5339\u914D\u6570\u91CF","children":[]},{"level":3,"title":"\u6307\u5B9A ClassLoader \u589E\u5F3A","slug":"\u6307\u5B9A-classloader-\u589E\u5F3A","link":"#\u6307\u5B9A-classloader-\u589E\u5F3A","children":[]},{"level":3,"title":"\u8BA1\u7B97\u6761\u4EF6\u8868\u8FBE\u5F0F\u8FC7\u6EE4\u7EDF\u8BA1\u7ED3\u679C(\u65B9\u6CD5\u6267\u884C\u5B8C\u6BD5\u4E4B\u540E)","slug":"\u8BA1\u7B97\u6761\u4EF6\u8868\u8FBE\u5F0F\u8FC7\u6EE4\u7EDF\u8BA1\u7ED3\u679C-\u65B9\u6CD5\u6267\u884C\u5B8C\u6BD5\u4E4B\u540E","link":"#\u8BA1\u7B97\u6761\u4EF6\u8868\u8FBE\u5F0F\u8FC7\u6EE4\u7EDF\u8BA1\u7ED3\u679C-\u65B9\u6CD5\u6267\u884C\u5B8C\u6BD5\u4E4B\u540E","children":[]},{"level":3,"title":"\u8BA1\u7B97\u6761\u4EF6\u8868\u8FBE\u5F0F\u8FC7\u6EE4\u7EDF\u8BA1\u7ED3\u679C(\u65B9\u6CD5\u6267\u884C\u5B8C\u6BD5\u4E4B\u524D)","slug":"\u8BA1\u7B97\u6761\u4EF6\u8868\u8FBE\u5F0F\u8FC7\u6EE4\u7EDF\u8BA1\u7ED3\u679C-\u65B9\u6CD5\u6267\u884C\u5B8C\u6BD5\u4E4B\u524D","link":"#\u8BA1\u7B97\u6761\u4EF6\u8868\u8FBE\u5F0F\u8FC7\u6EE4\u7EDF\u8BA1\u7ED3\u679C-\u65B9\u6CD5\u6267\u884C\u5B8C\u6BD5\u4E4B\u524D","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/monitor.md","version":"4.3.3"}');export{l as data};
    +const l=JSON.parse('{"key":"v-6e88d7a2","path":"/doc/monitor.html","title":"monitor","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u76D1\u63A7\u7684\u7EF4\u5EA6\u8BF4\u660E","slug":"\u76D1\u63A7\u7684\u7EF4\u5EA6\u8BF4\u660E","link":"#\u76D1\u63A7\u7684\u7EF4\u5EA6\u8BF4\u660E","children":[]},{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"\u6307\u5B9A Class \u6700\u5927\u5339\u914D\u6570\u91CF","slug":"\u6307\u5B9A-class-\u6700\u5927\u5339\u914D\u6570\u91CF","link":"#\u6307\u5B9A-class-\u6700\u5927\u5339\u914D\u6570\u91CF","children":[]},{"level":3,"title":"\u6307\u5B9A ClassLoader \u589E\u5F3A","slug":"\u6307\u5B9A-classloader-\u589E\u5F3A","link":"#\u6307\u5B9A-classloader-\u589E\u5F3A","children":[]},{"level":3,"title":"\u8BA1\u7B97\u6761\u4EF6\u8868\u8FBE\u5F0F\u8FC7\u6EE4\u7EDF\u8BA1\u7ED3\u679C(\u65B9\u6CD5\u6267\u884C\u5B8C\u6BD5\u4E4B\u540E)","slug":"\u8BA1\u7B97\u6761\u4EF6\u8868\u8FBE\u5F0F\u8FC7\u6EE4\u7EDF\u8BA1\u7ED3\u679C-\u65B9\u6CD5\u6267\u884C\u5B8C\u6BD5\u4E4B\u540E","link":"#\u8BA1\u7B97\u6761\u4EF6\u8868\u8FBE\u5F0F\u8FC7\u6EE4\u7EDF\u8BA1\u7ED3\u679C-\u65B9\u6CD5\u6267\u884C\u5B8C\u6BD5\u4E4B\u540E","children":[]},{"level":3,"title":"\u8BA1\u7B97\u6761\u4EF6\u8868\u8FBE\u5F0F\u8FC7\u6EE4\u7EDF\u8BA1\u7ED3\u679C(\u65B9\u6CD5\u6267\u884C\u5B8C\u6BD5\u4E4B\u524D)","slug":"\u8BA1\u7B97\u6761\u4EF6\u8868\u8FBE\u5F0F\u8FC7\u6EE4\u7EDF\u8BA1\u7ED3\u679C-\u65B9\u6CD5\u6267\u884C\u5B8C\u6BD5\u4E4B\u524D","link":"#\u8BA1\u7B97\u6761\u4EF6\u8868\u8FBE\u5F0F\u8FC7\u6EE4\u7EDF\u8BA1\u7ED3\u679C-\u65B9\u6CD5\u6267\u884C\u5B8C\u6BD5\u4E4B\u524D","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/monitor.md","version":"4.3.5"}');export{l as data};
    diff --git a/assets/monitor.html.78686d08.js b/assets/monitor.html.b4c17a07.js
    similarity index 75%
    rename from assets/monitor.html.78686d08.js
    rename to assets/monitor.html.b4c17a07.js
    index 97a18ada6..6ddb0c8ab 100644
    --- a/assets/monitor.html.78686d08.js
    +++ b/assets/monitor.html.b4c17a07.js
    @@ -1,4 +1,4 @@
    -import{_ as e,o as t,c as l,a as s,b as i,e as n,d as c,r}from"./app.524ecf5c.js";const p={},o=s("h1",{id:"monitor",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#monitor","aria-hidden":"true"},"#"),n(" monitor")],-1),d={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-monitor",target:"_blank",rel:"noopener noreferrer"},m=s("code",null,"monitor",-1),u=n("\u5728\u7EBF\u6559\u7A0B"),b=c(`

    \u63D0\u793A

    \u65B9\u6CD5\u6267\u884C\u76D1\u63A7

    \u5BF9\u5339\u914D class-pattern\uFF0Fmethod-pattern\uFF0Fcondition-express\u7684\u7C7B\u3001\u65B9\u6CD5\u7684\u8C03\u7528\u8FDB\u884C\u76D1\u63A7\u3002

    monitor \u547D\u4EE4\u662F\u4E00\u4E2A\u975E\u5B9E\u65F6\u8FD4\u56DE\u547D\u4EE4.

    \u5B9E\u65F6\u8FD4\u56DE\u547D\u4EE4\u662F\u8F93\u5165\u4E4B\u540E\u7ACB\u5373\u8FD4\u56DE\uFF0C\u800C\u975E\u5B9E\u65F6\u8FD4\u56DE\u7684\u547D\u4EE4\uFF0C\u5219\u662F\u4E0D\u65AD\u7684\u7B49\u5F85\u76EE\u6807 Java \u8FDB\u7A0B\u8FD4\u56DE\u4FE1\u606F\uFF0C\u76F4\u5230\u7528\u6237\u8F93\u5165 Ctrl+C \u4E3A\u6B62\u3002

    \u670D\u52A1\u7AEF\u662F\u4EE5\u4EFB\u52A1\u7684\u5F62\u5F0F\u5728\u540E\u53F0\u8DD1\u4EFB\u52A1\uFF0C\u690D\u5165\u7684\u4EE3\u7801\u968F\u7740\u4EFB\u52A1\u7684\u4E2D\u6B62\u800C\u4E0D\u4F1A\u88AB\u6267\u884C\uFF0C\u6240\u4EE5\u4EFB\u52A1\u5173\u95ED\u540E\uFF0C\u4E0D\u4F1A\u5BF9\u539F\u6709\u6027\u80FD\u4EA7\u751F\u592A\u5927\u5F71\u54CD\uFF0C\u800C\u4E14\u539F\u5219\u4E0A\uFF0C\u4EFB\u4F55 Arthas \u547D\u4EE4\u4E0D\u4F1A\u5F15\u8D77\u539F\u6709\u4E1A\u52A1\u903B\u8F91\u7684\u6539\u53D8\u3002

    \u76D1\u63A7\u7684\u7EF4\u5EA6\u8BF4\u660E

    \u76D1\u63A7\u9879\u8BF4\u660E
    timestamp\u65F6\u95F4\u6233
    classJava \u7C7B
    method\u65B9\u6CD5\uFF08\u6784\u9020\u65B9\u6CD5\u3001\u666E\u901A\u65B9\u6CD5\uFF09
    total\u8C03\u7528\u6B21\u6570
    success\u6210\u529F\u6B21\u6570
    fail\u5931\u8D25\u6B21\u6570
    rt\u5E73\u5747 RT
    fail-rate\u5931\u8D25\u7387

    \u53C2\u6570\u8BF4\u660E

    \u65B9\u6CD5\u62E5\u6709\u4E00\u4E2A\u547D\u540D\u53C2\u6570 [c:]\uFF0C\u610F\u601D\u662F\u7EDF\u8BA1\u5468\u671F\uFF08cycle of output\uFF09\uFF0C\u62E5\u6709\u4E00\u4E2A\u6574\u578B\u7684\u53C2\u6570\u503C

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    class-pattern\u7C7B\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    method-pattern\u65B9\u6CD5\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    condition-express\u6761\u4EF6\u8868\u8FBE\u5F0F
    [E]\u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u4E3A\u901A\u914D\u7B26\u5339\u914D
    [c:]\u7EDF\u8BA1\u5468\u671F\uFF0C\u9ED8\u8BA4\u503C\u4E3A 60 \u79D2
    --classloader\u6307\u5B9A classloader hash\uFF0C\u53EA\u589E\u5F3A\u8BE5 classloader \u52A0\u8F7D\u7684\u7C7B
    [b]\u5728\u65B9\u6CD5\u8C03\u7528\u4E4B\u524D\u8BA1\u7B97 condition-express
    [m <arg>]\u6307\u5B9A Class \u6700\u5927\u5339\u914D\u6570\u91CF\uFF0C\u9ED8\u8BA4\u503C\u4E3A 50\u3002\u957F\u683C\u5F0F\u4E3A[maxMatch <arg>]\u3002

    \u4F7F\u7528\u53C2\u8003

    $ monitor -c 5 demo.MathGame primeFactors
    +import{_ as i,o as c,c as r,a as t,b as a,w as e,d as l,e as s,r as p}from"./app.e2427bec.js";const o={},d=l('

    monitor

    \u63D0\u793A

    \u65B9\u6CD5\u6267\u884C\u76D1\u63A7

    \u5BF9\u5339\u914D class-pattern\uFF0Fmethod-pattern\uFF0Fcondition-express\u7684\u7C7B\u3001\u65B9\u6CD5\u7684\u8C03\u7528\u8FDB\u884C\u76D1\u63A7\u3002

    monitor \u547D\u4EE4\u662F\u4E00\u4E2A\u975E\u5B9E\u65F6\u8FD4\u56DE\u547D\u4EE4.

    \u5B9E\u65F6\u8FD4\u56DE\u547D\u4EE4\u662F\u8F93\u5165\u4E4B\u540E\u7ACB\u5373\u8FD4\u56DE\uFF0C\u800C\u975E\u5B9E\u65F6\u8FD4\u56DE\u7684\u547D\u4EE4\uFF0C\u5219\u662F\u4E0D\u65AD\u7684\u7B49\u5F85\u76EE\u6807 Java \u8FDB\u7A0B\u8FD4\u56DE\u4FE1\u606F\uFF0C\u76F4\u5230\u7528\u6237\u8F93\u5165 Ctrl+C \u4E3A\u6B62\u3002

    \u670D\u52A1\u7AEF\u662F\u4EE5\u4EFB\u52A1\u7684\u5F62\u5F0F\u5728\u540E\u53F0\u8DD1\u4EFB\u52A1\uFF0C\u690D\u5165\u7684\u4EE3\u7801\u968F\u7740\u4EFB\u52A1\u7684\u4E2D\u6B62\u800C\u4E0D\u4F1A\u88AB\u6267\u884C\uFF0C\u6240\u4EE5\u4EFB\u52A1\u5173\u95ED\u540E\uFF0C\u4E0D\u4F1A\u5BF9\u539F\u6709\u6027\u80FD\u4EA7\u751F\u592A\u5927\u5F71\u54CD\uFF0C\u800C\u4E14\u539F\u5219\u4E0A\uFF0C\u4EFB\u4F55 Arthas \u547D\u4EE4\u4E0D\u4F1A\u5F15\u8D77\u539F\u6709\u4E1A\u52A1\u903B\u8F91\u7684\u6539\u53D8\u3002

    \u76D1\u63A7\u7684\u7EF4\u5EA6\u8BF4\u660E

    \u76D1\u63A7\u9879\u8BF4\u660E
    timestamp\u65F6\u95F4\u6233
    classJava \u7C7B
    method\u65B9\u6CD5\uFF08\u6784\u9020\u65B9\u6CD5\u3001\u666E\u901A\u65B9\u6CD5\uFF09
    total\u8C03\u7528\u6B21\u6570
    success\u6210\u529F\u6B21\u6570
    fail\u5931\u8D25\u6B21\u6570
    rt\u5E73\u5747 RT
    fail-rate\u5931\u8D25\u7387

    \u53C2\u6570\u8BF4\u660E

    \u65B9\u6CD5\u62E5\u6709\u4E00\u4E2A\u547D\u540D\u53C2\u6570 [c:]\uFF0C\u610F\u601D\u662F\u7EDF\u8BA1\u5468\u671F\uFF08cycle of output\uFF09\uFF0C\u62E5\u6709\u4E00\u4E2A\u6574\u578B\u7684\u53C2\u6570\u503C

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    class-pattern\u7C7B\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    method-pattern\u65B9\u6CD5\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    condition-express\u6761\u4EF6\u8868\u8FBE\u5F0F
    [E]\u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u4E3A\u901A\u914D\u7B26\u5339\u914D
    [c:]\u7EDF\u8BA1\u5468\u671F\uFF0C\u9ED8\u8BA4\u503C\u4E3A 60 \u79D2
    --classloader\u6307\u5B9A classloader hash\uFF0C\u53EA\u589E\u5F3A\u8BE5 classloader \u52A0\u8F7D\u7684\u7C7B
    [b]\u5728\u65B9\u6CD5\u8C03\u7528\u4E4B\u524D\u8BA1\u7B97 condition-express
    [m <arg>]\u6307\u5B9A Class \u6700\u5927\u5339\u914D\u6570\u91CF\uFF0C\u9ED8\u8BA4\u503C\u4E3A 50\u3002\u957F\u683C\u5F0F\u4E3A[maxMatch <arg>]\u3002
    ',11),m=t("code",null,"condition-express",-1),u=s(" \u4F7F\u7528 OGNL \u8BED\u6CD5\u3002\u53EF\u7528\u53D8\u91CF\u53C2\u89C1"),b=s("\u8868\u8FBE\u5F0F\u6838\u5FC3\u53D8\u91CF"),v=s("\uFF0C\u590D\u6742\u6761\u4EF6\u7684\u5199\u6CD5\u4E0E\u6392\u9519\u65B9\u6CD5\u53C2\u89C1 "),k=s("OGNL \u590D\u6742\u8868\u8FBE\u5F0F\u4F7F\u7528\u6280\u5DE7"),h=s("\u3002"),g=l(`

    \u4F7F\u7528\u53C2\u8003

    $ monitor -c 5 demo.MathGame primeFactors
     Press Ctrl+C to abort.
     Affect(class-cnt:1 , method-cnt:1) cost in 94 ms.
      timestamp            class          method        total  success  fail  avg-rt(ms)  fail-rate
    @@ -80,4 +80,4 @@ Affect(class count: (ms)  fail-rate
     ----------------------------------------------------------------------------------------------
      2020-09-02 09:42:17  demo.MathGame  primeFactors    2       0        2      0.10      100.00%
    -
    `,21);function v(k,h){const a=r("ExternalLinkIcon");return t(),l("div",null,[o,s("p",null,[s("a",d,[m,u,i(a)])]),b])}const f=e(p,[["render",v],["__file","monitor.html.vue"]]);export{f as default}; +
    `,11);function f(x,y){const n=p("RouterLink");return c(),r("div",null,[d,t("p",null,[m,u,a(n,{to:"/doc/advice-class.html"},{default:e(()=>[b]),_:1}),v,a(n,{to:"/doc/ognl-express.html"},{default:e(()=>[k]),_:1}),h]),g])}const F=i(o,[["render",f],["__file","monitor.html.vue"]]);export{F as default}; diff --git a/assets/monitor.html.4f1f94d6.js b/assets/monitor.html.be46b9bd.js similarity index 78% rename from assets/monitor.html.4f1f94d6.js rename to assets/monitor.html.be46b9bd.js index 3d2606bcc..79814d5ed 100644 --- a/assets/monitor.html.4f1f94d6.js +++ b/assets/monitor.html.be46b9bd.js @@ -1,4 +1,4 @@ -import{_ as e,o as t,c as l,a as s,b as i,e as n,d as o,r as c}from"./app.524ecf5c.js";const r={},p=s("h1",{id:"monitor",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#monitor","aria-hidden":"true"},"#"),n(" monitor")],-1),m={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-monitor",target:"_blank",rel:"noopener noreferrer"},d=s("code",null,"monitor",-1),u=n(" online tutorial"),b=o(`

    TIP

    Monitor method invocation.

    Monitor invocation for the method matched with class-pattern and method-pattern and filter by condition-expression.

    monitor is not a command returning immediately.

    A command returning immediately is a command immediately returns with the result after the command is input, while a non-immediate returning command will keep outputting the information from the target JVM process until user presses Ctrl+C.

    On Arthas's server side, the command is running as a background job, but the weaved code will not take further effect once the job is terminated, therefore, it will not impact the performance after the job quits. Furthermore, Arthas is designed to have no side effect to the business logic.

    Items to monitor

    ItemSpecification
    timestamptimestamp
    classJava class
    methodmethod (constructor and regular methods)
    totalcalling times
    successsuccess count
    failfailure count
    rtaverage RT
    fail-ratefailure ratio

    Parameters

    Parameter [c:] stands for cycles of statistics. Its value is an integer value in seconds.

    NameSpecification
    class-patternpattern for the class name
    method-patternpattern for the method name
    condition-expressioncondition expression for filtering method calls
    [E]turn on regex matching while the default is wildcard matching
    [c:]cycle of statistics, the default value: 60s
    --classloaderSpecify classloader hash, only enhance classes loaded by it
    [b]evaluate the condition-expression before method invoke
    [m <arg>]Specify the max number of matched Classes, the default value is 50. Long format is [maxMatch <arg>].

    Usage

    $ monitor -c 5 demo.MathGame primeFactors
    +import{_ as i,o,c,a as t,b as a,w as e,d as l,e as s,r}from"./app.e2427bec.js";const p={},d=l('

    monitor

    TIP

    Monitor method invocation.

    Monitor invocation for the method matched with class-pattern and method-pattern and filter by condition-expression.

    monitor is not a command returning immediately.

    A command returning immediately is a command immediately returns with the result after the command is input, while a non-immediate returning command will keep outputting the information from the target JVM process until user presses Ctrl+C.

    On Arthas's server side, the command is running as a background job, but the weaved code will not take further effect once the job is terminated, therefore, it will not impact the performance after the job quits. Furthermore, Arthas is designed to have no side effect to the business logic.

    Items to monitor

    ItemSpecification
    timestamptimestamp
    classJava class
    methodmethod (constructor and regular methods)
    totalcalling times
    successsuccess count
    failfailure count
    rtaverage RT
    fail-ratefailure ratio

    Parameters

    Parameter [c:] stands for cycles of statistics. Its value is an integer value in seconds.

    NameSpecification
    class-patternpattern for the class name
    method-patternpattern for the method name
    condition-expressioncondition expression for filtering method calls
    [E]turn on regex matching while the default is wildcard matching
    [c:]cycle of statistics, the default value: 60s
    --classloaderSpecify classloader hash, only enhance classes loaded by it
    [b]evaluate the condition-expression before method invoke
    [m <arg>]Specify the max number of matched Classes, the default value is 50. Long format is [maxMatch <arg>].
    ',11),m=t("code",null,"condition-expression",-1),u=s(" uses OGNL syntax. See "),b=s("Core variables in expressions"),v=s(" for available variables and "),h=s("Tips for complex OGNL expressions"),k=s(" for complex conditions and troubleshooting."),f=l(`

    Usage

    $ monitor -c 5 demo.MathGame primeFactors
     Press Ctrl+C to abort.
     Affect(class-cnt:1 , method-cnt:1) cost in 94 ms.
      timestamp            class          method        total  success  fail  avg-rt(ms)  fail-rate
    @@ -80,4 +80,4 @@ Affect(class count: (ms)  fail-rate
     ----------------------------------------------------------------------------------------------
      2020-09-02 09:42:17  demo.MathGame  primeFactors    2       0        2      0.10      100.00%
    -
    `,21);function v(h,k){const a=c("ExternalLinkIcon");return t(),l("div",null,[p,s("p",null,[s("a",m,[d,u,i(a)])]),b])}const g=e(r,[["render",v],["__file","monitor.html.vue"]]);export{g as default}; +
    `,11);function g(x,y){const n=r("RouterLink");return o(),c("div",null,[d,t("p",null,[m,u,a(n,{to:"/en/doc/advice-class.html"},{default:e(()=>[b]),_:1}),v,a(n,{to:"/en/doc/ognl-express.html"},{default:e(()=>[h]),_:1}),k]),f])}const M=i(p,[["render",g],["__file","monitor.html.vue"]]);export{M as default}; diff --git a/assets/monitor.html.fff63a76.js b/assets/monitor.html.fc2a02d0.js similarity index 91% rename from assets/monitor.html.fff63a76.js rename to assets/monitor.html.fc2a02d0.js index b080a7ca4..08f3daa2a 100644 --- a/assets/monitor.html.fff63a76.js +++ b/assets/monitor.html.fc2a02d0.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-20388043","path":"/en/doc/monitor.html","title":"monitor","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Items to monitor","slug":"items-to-monitor","link":"#items-to-monitor","children":[]},{"level":2,"title":"Parameters","slug":"parameters","link":"#parameters","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"Specify the max number of matched Classes","slug":"specify-the-max-number-of-matched-classes","link":"#specify-the-max-number-of-matched-classes","children":[]},{"level":3,"title":"Specify ClassLoader to enhance","slug":"specify-classloader-to-enhance","link":"#specify-classloader-to-enhance","children":[]},{"level":3,"title":"Evaluate condition-express to filter method (after method call)","slug":"evaluate-condition-express-to-filter-method-after-method-call","link":"#evaluate-condition-express-to-filter-method-after-method-call","children":[]},{"level":3,"title":"Evaluate condition-express to filter method (before method call)","slug":"evaluate-condition-express-to-filter-method-before-method-call","link":"#evaluate-condition-express-to-filter-method-before-method-call","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/monitor.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-20388043","path":"/en/doc/monitor.html","title":"monitor","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Items to monitor","slug":"items-to-monitor","link":"#items-to-monitor","children":[]},{"level":2,"title":"Parameters","slug":"parameters","link":"#parameters","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"Specify the max number of matched Classes","slug":"specify-the-max-number-of-matched-classes","link":"#specify-the-max-number-of-matched-classes","children":[]},{"level":3,"title":"Specify ClassLoader to enhance","slug":"specify-classloader-to-enhance","link":"#specify-classloader-to-enhance","children":[]},{"level":3,"title":"Evaluate condition-express to filter method (after method call)","slug":"evaluate-condition-express-to-filter-method-after-method-call","link":"#evaluate-condition-express-to-filter-method-after-method-call","children":[]},{"level":3,"title":"Evaluate condition-express to filter method (before method call)","slug":"evaluate-condition-express-to-filter-method-before-method-call","link":"#evaluate-condition-express-to-filter-method-before-method-call","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/monitor.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/ognl-express.html.0cd6cdc8.js b/assets/ognl-express.html.0cd6cdc8.js new file mode 100644 index 000000000..d12153b2f --- /dev/null +++ b/assets/ognl-express.html.0cd6cdc8.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-6159b83c","path":"/en/doc/ognl-express.html","title":"Tips for Complex OGNL Expressions","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Identify the expression context first","slug":"identify-the-expression-context-first","link":"#identify-the-expression-context-first","children":[]},{"level":2,"title":"Reliable syntax building blocks","slug":"reliable-syntax-building-blocks","link":"#reliable-syntax-building-blocks","children":[]},{"level":2,"title":"Verified complex expressions","slug":"verified-complex-expressions","link":"#verified-complex-expressions","children":[{"level":3,"title":"Selection, projection, first match, and last match","slug":"selection-projection-first-match-and-last-match","link":"#selection-projection-first-match-and-last-match","children":[]},{"level":3,"title":"Construct a structured result with temporary variables","slug":"construct-a-structured-result-with-temporary-variables","link":"#construct-a-structured-result-with-temporary-variables","children":[]},{"level":3,"title":"Select first, then return only the required fields","slug":"select-first-then-return-only-the-required-fields","link":"#select-first-then-return-only-the-required-fields","children":[]},{"level":3,"title":"Count by group","slug":"count-by-group","link":"#count-by-group","children":[]},{"level":3,"title":"Bind #this early in nested objects","slug":"bind-this-early-in-nested-objects","link":"#bind-this-early-in-nested-objects","children":[]},{"level":3,"title":"Handle null explicitly","slug":"handle-null-explicitly","link":"#handle-null-explicitly","children":[]},{"level":3,"title":"Handle both return and exception paths in watch","slug":"handle-both-return-and-exception-paths-in-watch","link":"#handle-both-return-and-exception-paths-in-watch","children":[]},{"level":3,"title":"Use instances in vmtool","slug":"use-instances-in-vmtool","link":"#use-instances-in-vmtool","children":[]}]},{"level":2,"title":"ClassLoader selection is not OGNL syntax","slug":"classloader-selection-is-not-ognl-syntax","link":"#classloader-selection-is-not-ognl-syntax","children":[]},{"level":2,"title":"Quoting and formatting: there are two parsers","slug":"quoting-and-formatting-there-are-two-parsers","link":"#quoting-and-formatting-there-are-two-parsers","children":[]},{"level":2,"title":"Do not classify every failure as a syntax error","slug":"do-not-classify-every-failure-as-a-syntax-error","link":"#do-not-classify-every-failure-as-a-syntax-error","children":[]},{"level":2,"title":"Generation and validation protocol for AI agents","slug":"generation-and-validation-protocol-for-ai-agents","link":"#generation-and-validation-protocol-for-ai-agents","children":[]},{"level":2,"title":"Further reading","slug":"further-reading","link":"#further-reading","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/ognl-express.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/ognl-express.html.1fb465fc.js b/assets/ognl-express.html.1fb465fc.js new file mode 100644 index 000000000..1ef642a2d --- /dev/null +++ b/assets/ognl-express.html.1fb465fc.js @@ -0,0 +1,37 @@ +import{_ as l,o as i,c as r,a as e,b as a,w as s,e as t,d as n,r as c}from"./app.e2427bec.js";const u={},h=e("h1",{id:"ognl-\u590D\u6742\u8868\u8FBE\u5F0F\u4F7F\u7528\u6280\u5DE7",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#ognl-\u590D\u6742\u8868\u8FBE\u5F0F\u4F7F\u7528\u6280\u5DE7","aria-hidden":"true"},"#"),t(" OGNL \u590D\u6742\u8868\u8FBE\u5F0F\u4F7F\u7528\u6280\u5DE7")],-1),p=e("p",null,[t("\u672C\u9875\u4ECB\u7ECD Arthas \u4E2D\u8F83\u590D\u6742\u3001\u4F46\u4ECD\u9002\u5408\u5728\u7EBF\u8BCA\u65AD\u7684 OGNL \u5199\u6CD5\uFF0C\u91CD\u70B9\u8BF4\u660E\u53D8\u91CF\u3001\u96C6\u5408\u7B5B\u9009\u4E0E\u6295\u5F71\u3001\u4E34\u65F6\u7ED3\u679C\u7EC4\u88C5\u3001\u7A7A\u503C\u5904\u7406\u548C ClassLoader\u3002\u201C\u5DF2\u9A8C\u8BC1\u7684\u590D\u6742\u8868\u8FBE\u5F0F\u201D\u4E00\u8282\u4E2D\u7684\u5B8C\u6574\u547D\u4EE4\u5747\u4F7F\u7528\u672C\u4ED3\u5E93\u7684 "),e("code",null,"math-game"),t(" \u4F5C\u4E3A\u76EE\u6807 JVM\uFF0C\u901A\u8FC7\u771F\u5B9E Arthas attach \u4F1A\u8BDD\u9A8C\u8BC1\uFF1B\u7EBF\u7A0B\u6570\u3001\u7EBF\u7A0B\u540D\u3001\u5185\u5B58\u5730\u5740\u7B49\u52A8\u6001\u7ED3\u679C\u4F1A\u56E0\u73AF\u5883\u4E0D\u540C\u800C\u53D8\u5316\u3002")],-1),m=t("\u57FA\u7840\u547D\u4EE4\u53C2\u6570\u8BF7\u5148\u9605\u8BFB "),v=e("code",null,"ognl",-1),g=t("\uFF0C"),b=e("code",null,"watch",-1),_=t(" \u7B49\u547D\u4EE4\u63D0\u4F9B\u7684\u53D8\u91CF\u8BF7\u9605\u8BFB"),x=t("\u8868\u8FBE\u5F0F\u6838\u5FC3\u53D8\u91CF"),k=t("\u3002"),q=n('

    \u6CE8\u610F

    OGNL \u5728\u76EE\u6807 JVM \u5185\u6267\u884C\uFF0C\u8C03\u7528\u65B9\u6CD5\u53EF\u80FD\u8BFB\u53D6\u6216\u4FEE\u6539\u5E94\u7528\u72B6\u6001\u3002\u751F\u4EA7\u73AF\u5883\u9ED8\u8BA4\u53EA\u751F\u6210\u548C\u6267\u884C\u53EA\u8BFB\u8868\u8FBE\u5F0F\uFF0C\u5E76\u9650\u5236\u5BF9\u8C61\u6570\u91CF\u4E0E\u5C55\u5F00\u6DF1\u5EA6\u3002\u4E0D\u8981\u8C03\u7528\u5E94\u7528\u5BF9\u8C61\u7684 set*\u3001add\u3001remove\u3001clear \u7B49\u65B9\u6CD5\uFF0C\u4E5F\u4E0D\u8981\u505A\u6587\u4EF6\u3001\u7F51\u7EDC\u3001\u8FDB\u7A0B\u3001ClassLoader\u3001\u53CD\u5C04\u63D0\u6743\u6216\u7EBF\u7A0B\u63A7\u5236\u64CD\u4F5C\u3002\u672C\u6587\u5BF9\u65B0\u5EFA\u4E34\u65F6 Map \u7684 put \u53EA\u4FEE\u6539\u672C\u6B21\u8868\u8FBE\u5F0F\u521B\u5EFA\u7684\u5BF9\u8C61\u3002

    \u5148\u786E\u8BA4\u8868\u8FBE\u5F0F\u5728\u54EA\u4E2A\u4E0A\u4E0B\u6587\u6267\u884C

    \u8BED\u6CD5\u76F8\u540C\u4E0D\u4EE3\u8868\u53EF\u7528\u53D8\u91CF\u76F8\u540C\u3002AI Agent \u6700\u5E38\u89C1\u7684\u9519\u8BEF\u4E4B\u4E00\uFF0C\u662F\u628A\u5176\u4ED6\u547D\u4EE4\u7684\u4E0A\u4E0B\u6587\u53D8\u91CF\u76F4\u63A5\u653E\u8FDB ognl \u547D\u4EE4\u3002

    ',3),L=e("thead",null,[e("tr",null,[e("th",null,"\u4F7F\u7528\u4F4D\u7F6E"),e("th",null,"\u53EF\u76F4\u63A5\u4F7F\u7528\u7684\u6839\u5BF9\u8C61\u6216\u53D8\u91CF"),e("th",null,"\u5E38\u89C1\u9519\u8BEF")])],-1),N=e("tr",null,[e("td",null,[e("code",null,"ognl"),t(" \u547D\u4EE4")]),e("td",null,[t("\u9759\u6001\u6210\u5458\u3001\u6784\u9020\u5668\u3001\u5B57\u9762\u91CF\u548C\u81EA\u5DF1\u5B9A\u4E49\u7684 "),e("code",null,"#\u53D8\u91CF")]),e("td",null,[t("\u4F7F\u7528 "),e("code",null,"params"),t("\u3001"),e("code",null,"target"),t("\u3001"),e("code",null,"returnObj"),t(" \u6216 "),e("code",null,"instances")])],-1),S=e("tr",null,[e("td",null,[e("code",null,"getstatic"),t(" \u7684\u8868\u8FBE\u5F0F")]),e("td",null,"\u88AB\u8BFB\u53D6\u7684\u9759\u6001\u5B57\u6BB5\u503C\u662F\u6839\u5BF9\u8C61"),e("td",null,[t("\u628A\u5B83\u8BEF\u5F53\u6210\u6CA1\u6709\u6839\u5BF9\u8C61\u7684\u72EC\u7ACB "),e("code",null,"ognl"),t(" \u8868\u8FBE\u5F0F")])],-1),A=e("td",null,[e("code",null,"watch"),t("\u3001"),e("code",null,"stack"),t("\u3001"),e("code",null,"monitor"),t("\u3001"),e("code",null,"tt"),t(" \u7B49\u89C2\u5BDF\u6216\u6761\u4EF6\u8868\u8FBE\u5F0F")],-1),f=e("code",null,"params",-1),j=t("\u3001"),M=e("code",null,"target",-1),y=t("\u3001"),O=e("code",null,"returnObj",-1),C=t("\u3001"),E=e("code",null,"throwExp",-1),w=t("\u3001"),T=e("code",null,"isReturn",-1),G=t(" \u7B49 "),I=e("code",null,"Advice",-1),J=t(" \u53D8\u91CF"),V=e("td",null,[t("\u5728\u65B9\u6CD5\u8FDB\u5165\u70B9\u8BFB\u53D6\u5C1A\u4E0D\u5B58\u5728\u7684\u8FD4\u56DE\u503C\uFF1B\u5728\u5F02\u5E38\u70B9\u76F4\u63A5\u8C03\u7528 "),e("code",null,"returnObj")],-1),H=e("tr",null,[e("td",null,[e("code",null,"trace"),t(" \u7B49\u6761\u4EF6\u8868\u8FBE\u5F0F")]),e("td",null,[t("\u5BF9\u5E94\u547D\u4EE4\u66B4\u9732\u7684 Advice \u53D8\u91CF\uFF1B\u90E8\u5206\u547D\u4EE4\u8FD8\u63D0\u4F9B "),e("code",null,"#cost")]),e("td",null,[t("\u5047\u8BBE\u6BCF\u4E2A\u547D\u4EE4\u90FD\u6709 "),e("code",null,"#cost")])],-1),P=e("tr",null,[e("td",null,[e("code",null,"line --express"),t(" / "),e("code",null,"--condition")]),e("td",null,[t("Advice \u53D8\u91CF\u4EE5\u53CA "),e("code",null,"lineNumber"),t("\u3001"),e("code",null,"localVarMap"),t("\u3001"),e("code",null,"#cost"),t(" \u7B49\u884C\u7EA7\u53D8\u91CF")]),e("td",null,[t("\u5728\u5176\u4ED6\u547D\u4EE4\u4E2D\u4F7F\u7528 "),e("code",null,"localVarMap"),t(" \u6216 "),e("code",null,"lineNumber")])],-1),R=e("tr",null,[e("td",null,[e("code",null,"vmtool --express")]),e("td",null,[e("code",null,"instances"),t("\uFF0C\u5B83\u662F "),e("code",null,"getInstances"),t(" \u8FD4\u56DE\u7684\u6570\u7EC4")]),e("td",null,[t("\u5728\u666E\u901A "),e("code",null,"ognl"),t(" \u547D\u4EE4\u4E2D\u4F7F\u7528 "),e("code",null,"instances")])],-1),D=n(`

    \u8FD8\u8981\u533A\u5206\u201C\u5B8C\u6574 Arthas \u547D\u4EE4\u201D\u548C\u201C\u8868\u8FBE\u5F0F\u53C2\u6570\u201D\uFF1A

    # Arthas \u7EC8\u7AEF\u9700\u8981\u5B8C\u6574\u547D\u4EE4\uFF0C\u5E76\u7528\u5916\u5C42\u5355\u5F15\u53F7\u4FDD\u62A4\u8868\u8FBE\u5F0F
    +ognl '#value=@java.lang.System@getProperty("java.version"), #value'
    +

    \u5982\u679C MCP\u3001HTTP API \u6216\u5176\u4ED6\u5DE5\u5177\u5DF2\u7ECF\u63D0\u4F9B\u540D\u4E3A expression\u3001express \u6216 conditionExpress \u7684\u72EC\u7ACB\u53C2\u6570\uFF0C\u53EA\u4F20\u539F\u59CB\u8868\u8FBE\u5F0F\uFF0C\u4E0D\u8981\u518D\u6DFB\u52A0 ognl\u3001\u547D\u4EE4\u9009\u9879\u3001\u5916\u5C42\u5355\u5F15\u53F7\u6216 Markdown \u4EE3\u7801\u56F4\u680F\uFF1A

    #value=@java.lang.System@getProperty("java.version"), #value
    +

    \u7A33\u5B9A\u7684\u8BED\u6CD5\u79EF\u6728

    \u76EE\u7684\u8BED\u6CD5\u8BF4\u660E
    \u5B9A\u4E49\u4E34\u65F6\u53D8\u91CF#name=value\u81EA\u5B9A\u4E49\u53D8\u91CF\u5FC5\u987B\u5E26 #
    \u987A\u5E8F\u6267\u884C\u5E76\u8FD4\u56DE\u6700\u540E\u4E00\u9879#a=1, #b=2, #a+#b\u4F7F\u7528\u9017\u53F7\uFF0C\u4E0D\u8981\u4F7F\u7528\u5206\u53F7\uFF1B\u5206\u53F7\u53EF\u80FD\u88AB Arthas \u5F53\u6210\u547D\u4EE4\u5206\u9694\u7B26
    \u8BBF\u95EE\u9759\u6001\u65B9\u6CD5\u6216\u5B57\u6BB5@\u5B8C\u6574\u7C7B\u540D@method()\u3001@\u5B8C\u6574\u7C7B\u540D@FIELD\u4E24\u4E2A @ \u90FD\u4E0D\u80FD\u7701\u7565\uFF1B\u4F18\u5148\u5199\u5B8C\u6574\u7C7B\u540D
    \u521B\u5EFA\u4E34\u65F6\u5BF9\u8C61new java.util.LinkedHashMap()\u4E0D\u8981\u5199 Java \u6CDB\u578B\uFF0C\u5982 new HashMap<String,Object>()
    \u521B\u5EFA List{1, 2, 3}\u7ED3\u679C\u662F\u4E00\u4E2A List\uFF0C\u4E0D\u662F Java \u6570\u7EC4
    \u521B\u5EFA Map#{"name":"arthas", "count":1}# \u548C { \u4E4B\u95F4\u4E0D\u8981\u63D2\u5165\u7A7A\u683C\u6216\u5176\u4ED6\u5B57\u7B26
    \u521B\u5EFA\u6570\u7EC4new java.lang.String[]{"a", "b"}\u9700\u8981\u660E\u786E\u6570\u7EC4\u7C7B\u578B
    \u96C6\u5408\u6295\u5F71items.{#this.getName()}\u5BF9\u6BCF\u4E00\u9879\u6C42\u503C\uFF0C\u8FD4\u56DE\u4E00\u4E2A\u65B0 List
    \u96C6\u5408\u7B5B\u9009items.{? #this != null}\u8FD4\u56DE\u6240\u6709\u5339\u914D\u9879
    \u7B2C\u4E00\u9879/\u6700\u540E\u4E00\u9879\u7B5B\u9009items.{^ condition}\u3001items.{$ condition}\u8FD4\u56DE\u7684\u4ECD\u662F List\uFF1B\u53D6 [0] \u524D\u5E94\u8003\u8651\u7A7A\u7ED3\u679C
    \u5F53\u524D\u904D\u5386\u9879#this\u5D4C\u5957\u7B5B\u9009\u6216\u6295\u5F71\u65F6\u542B\u4E49\u4F1A\u968F\u5F53\u524D\u5C42\u7EA7\u6539\u53D8

    \u4E3A\u4E86\u51CF\u5C11\u5C5E\u6027\u89E3\u6790\u548C\u91CD\u8F7D\u9009\u62E9\u7684\u4E0D\u786E\u5B9A\u6027\uFF0C\u590D\u6742\u8868\u8FBE\u5F0F\u4E2D\u5EFA\u8BAE\u663E\u5F0F\u8C03\u7528\u516C\u5F00 getter\uFF0C\u4F8B\u5982\u4F7F\u7528 #this.getName()\uFF0C\u800C\u4E0D\u662F #this.name\u3002\u8BBF\u95EE Map \u65F6\u5EFA\u8BAE\u4F7F\u7528 get("key")\u3001containsKey("key")\uFF0C\u800C\u4E0D\u662F\u4F9D\u8D56\u70B9\u53F7\u5C5E\u6027\u7F29\u5199\u3002

    \u5DF2\u9A8C\u8BC1\u7684\u590D\u6742\u8868\u8FBE\u5F0F

    \u63D0\u793A

    \u4E3A\u4FBF\u4E8E\u5728\u4EFB\u610F\u6F14\u793A JVM \u4E2D\u590D\u73B0\uFF0C\u672C\u8282\u90E8\u5206\u4F8B\u5B50\u4F7F\u7528 Thread.getAllStackTraces() \u83B7\u5F97\u96C6\u5408\u3002\u5B83\u4F1A\u6293\u53D6\u5168\u90E8\u7EBF\u7A0B\u7684\u6808\uFF1B\u5728\u7EBF\u7A0B\u5F88\u591A\u7684\u751F\u4EA7 JVM \u4E2D\uFF0C\u5E94\u4F18\u5148\u4F7F\u7528 thread \u7B49\u4E13\u7528\u547D\u4EE4\uFF0C\u6216\u5148\u8BC4\u4F30\u5F00\u9500\uFF0C\u4E0D\u8981\u9AD8\u9891\u6267\u884C\u8FD9\u4E9B\u793A\u4F8B\u3002

    \u7B5B\u9009\u3001\u6295\u5F71\u3001\u7B2C\u4E00\u9879\u548C\u6700\u540E\u4E00\u9879

    \u4E0B\u9762\u7684\u8868\u8FBE\u5F0F\u5148\u5B9A\u4E49\u6570\u5B57\u5217\u8868\uFF0C\u518D\u4E00\u6B21\u8FD4\u56DE\u6295\u5F71\u3001\u7B5B\u9009\u3001\u7B2C\u4E00\u9879\u548C\u6700\u540E\u4E00\u9879\u7684\u7ED3\u679C\uFF1A

    ognl -x 3 '#numbers={1,2,3,4,5,6}, #{"projection":#numbers.{#this * 10},"selection":#numbers.{? #this % 2 == 0},"first":#numbers.{^ #this % 2 == 0}[0],"last":#numbers.{$ #this % 2 == 0}[0]}'
    +

    \u8FD9\u91CC\u5DF2\u77E5\u5076\u6570\u4E00\u5B9A\u5B58\u5728\uFF0C\u6240\u4EE5\u53EF\u4EE5\u76F4\u63A5\u8BBF\u95EE [0]\u3002\u5BF9\u4E8E\u8FD0\u884C\u671F\u96C6\u5408\uFF0C\u5E94\u5148\u4FDD\u5B58\u7B5B\u9009\u7ED3\u679C\u5E76\u68C0\u67E5\u662F\u5426\u4E3A\u7A7A\uFF1A

    ognl '#matched={1,3,5}.{^ #this % 2 == 0}, #matched.isEmpty() ? null : #matched[0]'
    +

    \u7528\u4E34\u65F6\u53D8\u91CF\u7EC4\u88C5\u7ED3\u6784\u5316\u7ED3\u679C

    \u957F\u8868\u8FBE\u5F0F\u4E0D\u8981\u91CD\u590D\u6267\u884C\u6602\u8D35\u65B9\u6CD5\u3002\u5148\u4FDD\u5B58\u4E2D\u95F4\u503C\uFF0C\u6700\u540E\u8FD4\u56DE\u4E00\u4E2A\u65B0\u5EFA\u7684 LinkedHashMap\uFF1A

    ognl -x 2 '#result=new java.util.LinkedHashMap(), #props=@java.lang.System@getProperties(), #threads=@java.lang.Thread@getAllStackTraces(), #result.put("javaVersion", #props.get("java.version")), #result.put("javaHome", #props.get("java.home")), #result.put("threadCount", #threads.size()), #result'
    +

    \u8FD4\u56DE\u7ED3\u679C\u7684\u952E\u662F javaVersion\u3001javaHome \u548C threadCount\u3002\u9017\u53F7\u8FDE\u63A5\u7684\u5B50\u8868\u8FBE\u5F0F\u6309\u987A\u5E8F\u6C42\u503C\uFF0C\u6574\u4E2A\u8868\u8FBE\u5F0F\u7684\u503C\u662F\u6700\u540E\u7684 #result\u3002

    \u5148\u7B5B\u9009\uFF0C\u518D\u53EA\u8FD4\u56DE\u9700\u8981\u7684\u5B57\u6BB5

    ognl '@java.lang.Thread@getAllStackTraces().keySet().{? #this.isAlive() && !#this.isDaemon()}.{#this.getName()}'
    +

    .{? ...} \u8FD4\u56DE\u7B5B\u9009\u540E\u7684\u7EBF\u7A0B\uFF0C\u540E\u9762\u7684 .{...} \u53EA\u6295\u5F71\u7EBF\u7A0B\u540D\uFF0C\u907F\u514D\u5C55\u5F00\u6574\u4E2A Thread \u5BF9\u8C61\u3002

    \u5206\u7EC4\u8BA1\u6570

    \u4E0B\u9762\u6309\u7EBF\u7A0B\u72B6\u6001\u8BA1\u6570\u3002#counts \u662F\u672C\u6B21\u8868\u8FBE\u5F0F\u521B\u5EFA\u7684\u4E34\u65F6 Map\uFF0C\u4E0D\u4F1A\u4FEE\u6539\u5E94\u7528\u5DF2\u6709\u5BF9\u8C61\uFF1A

    ognl -x 2 '#counts=new java.util.LinkedHashMap(), @java.lang.Thread@getAllStackTraces().keySet().{#state=#this.getState().toString(), #counts.put(#state, #counts.containsKey(#state) ? #counts.get(#state) + 1 : 1)}, #counts'
    +

    \u5B9E\u9645\u8F93\u51FA\u7C7B\u4F3C\uFF1A

    @LinkedHashMap[
    +    @String[RUNNABLE]:@Integer[10],
    +    @String[TIMED_WAITING]:@Integer[6],
    +    @String[WAITING]:@Integer[2],
    +]
    +

    \u4E0D\u8981\u628A Java Stream \u5199\u6CD5 stream().filter(x -> ...)\u3001\u65B9\u6CD5\u5F15\u7528 Type::method \u6216 computeIfAbsent(..., x -> ...) \u586B\u8FDB OGNL\u3002OGNL \u4E0D\u89E3\u6790 Java lambda\uFF1B\u96C6\u5408\u7B5B\u9009\u548C\u6295\u5F71\u5E94\u4F7F\u7528 .{? ...} \u4E0E .{...}\u3002

    \u5D4C\u5957\u5BF9\u8C61\u4E2D\u53CA\u65F6\u4FDD\u5B58 #this

    \u5728 entrySet() \u7684\u6295\u5F71\u4E2D\uFF0C#this \u662F\u5F53\u524D Map.Entry\u3002\u5148\u628A key \u548C value \u4FDD\u5B58\u5230\u6709\u610F\u4E49\u7684\u53D8\u91CF\uFF0C\u540E\u9762\u7684\u8868\u8FBE\u5F0F\u66F4\u4E0D\u5BB9\u6613\u5199\u9519\uFF1A

    ognl '#all=@java.lang.Thread@getAllStackTraces(), #all.entrySet().{? #this.getKey().getName().startsWith("arthas")}.{#thread=#this.getKey(), #stack=#this.getValue(), #thread.getName() + " | " + #thread.getState() + " | depth=" + #stack.length}'
    +

    \u7A7A\u503C\u4F7F\u7528\u663E\u5F0F\u5206\u652F

    OGNL \u4E0D\u652F\u6301 JavaScript \u98CE\u683C\u7684 ?.\uFF0C\u4E5F\u4E0D\u8981\u6DF7\u5165 SpEL \u7684 T(...) \u6216\u6A21\u677F\u8BED\u6CD5 \${...}\u3002\u5148\u4FDD\u5B58\u53EF\u80FD\u4E3A\u7A7A\u7684\u503C\uFF0C\u518D\u7528\u4E09\u5143\u8868\u8FBE\u5F0F\u4FDD\u62A4\u65B9\u6CD5\u8C03\u7528\uFF1A

    ognl '#value=@java.lang.System@getProperty("arthas.not.exists"), #value == null ? "<missing>" : #value.trim()'
    +

    \u8FD4\u56DE\uFF1A

    @String[<missing>]
    +

    \u5728 watch \u4E2D\u540C\u65F6\u5904\u7406\u6B63\u5E38\u8FD4\u56DE\u548C\u5F02\u5E38

    -f \u4F1A\u5728\u6B63\u5E38\u8FD4\u56DE\u548C\u629B\u51FA\u5F02\u5E38\u540E\u6267\u884C\u8868\u8FBE\u5F0F\u3002\u5FC5\u987B\u5148\u6839\u636E isReturn \u5206\u652F\uFF0C\u518D\u8BBF\u95EE returnObj \u6216 throwExp\uFF1A

    watch demo.MathGame primeFactors '#result=new java.util.LinkedHashMap(), #result.put("number", params[0]), #result.put("outcome", isReturn ? "return" : "throw"), #result.put("detail", isReturn ? returnObj.size() : throwExp.getMessage()), #result' -f -n 2 -x 2
    +

    \u8FD9\u4E2A\u8868\u8FBE\u5F0F\u5728\u5B9E\u9645 math-game JVM \u7684\u6B63\u5E38\u8FD4\u56DE\u548C\u5F02\u5E38\u8FD4\u56DE\u8DEF\u5F84\u4E0A\u90FD\u53EF\u6C42\u503C\u3002-n 2 \u9650\u5236\u89C2\u5BDF\u6B21\u6570\uFF0C\u907F\u514D\u547D\u4EE4\u6301\u7EED\u8FD0\u884C\u3002

    \u5728 vmtool \u4E2D\u4F7F\u7528 instances

    instances \u53EA\u5B58\u5728\u4E8E vmtool --action getInstances --express \u7684\u8868\u8FBE\u5F0F\u4E0A\u4E0B\u6587\uFF1A

    vmtool --action getInstances --className java.lang.Thread --limit 100 --express 'instances.{? #this.isAlive() && #this.getName().startsWith("arthas")}.{#this.getName()}'
    +

    \u5148\u7528 --limit \u9650\u5236\u5B9E\u4F8B\u6570\u91CF\uFF0C\u518D\u7B5B\u9009\u548C\u6295\u5F71\u3002\u5BF9\u4E8E\u5B9E\u4F8B\u53EF\u80FD\u5F88\u591A\u7684\u4E1A\u52A1\u7C7B\uFF0C\u4E0D\u8981\u65E0\u6761\u4EF6\u4F7F\u7528 --limit -1\u3002

    ClassLoader \u4E0D\u662F\u8BED\u6CD5\u7684\u4E00\u90E8\u5206

    \u8BBF\u95EE\u4E1A\u52A1\u7C7B\u4E4B\u524D\u5148\u786E\u8BA4\u5B83\u7531\u54EA\u4E2A ClassLoader \u52A0\u8F7D\uFF1A

    sc -d com.example.OrderService
    +

    \u4ECE\u8F93\u51FA\u4E2D\u53D6\u5F97 classLoaderHash\uFF0C\u518D\u628A\u5B83\u4F5C\u4E3A\u547D\u4EE4\u9009\u9879\u4F20\u7ED9 ognl\uFF1A

    ognl -c <classLoaderHash> '@com.example.OrderService@STATIC_FIELD'
    +

    \u9700\u8981\u6CE8\u610F\uFF1A

    • -c/--classLoaderClass \u662F Arthas \u547D\u4EE4\u9009\u9879\uFF0C\u4E0D\u662F OGNL \u8868\u8FBE\u5F0F\u7684\u4E00\u90E8\u5206\u3002
    • \u540C\u540D\u7C7B\u53EF\u80FD\u7531\u591A\u4E2A ClassLoader \u52A0\u8F7D\uFF0C\u4E0D\u8981\u731C\u6D4B hash\uFF1Bhash \u5728 JVM \u91CD\u542F\u540E\u4E5F\u53EF\u80FD\u53D8\u5316\u3002
    • ClassNotFoundException \u901A\u5E38\u5E94\u5148\u68C0\u67E5 ClassLoader\uFF0C\u800C\u4E0D\u662F\u968F\u673A\u6539\u5199 OGNL \u8BED\u6CD5\u3002
    • --classLoaderClass \u53EA\u6709\u5728\u8BE5\u7C7B\u578B\u7684 ClassLoader \u5B9E\u4F8B\u552F\u4E00\u65F6\u624D\u9002\u7528\uFF1B\u6709\u591A\u4E2A\u5B9E\u4F8B\u65F6\u4F7F\u7528 hash \u7CBE\u786E\u6307\u5B9A\u3002

    \u5F15\u53F7\u548C\u683C\u5F0F\uFF1A\u5B9E\u9645\u4E0A\u6709\u4E24\u5C42\u89E3\u6790\u5668

    Arthas \u5148\u89E3\u6790\u547D\u4EE4\u884C\uFF0C\u968F\u540E OGNL \u624D\u89E3\u6790\u8868\u8FBE\u5F0F\u3002\u82E5\u5916\u9762\u8FD8\u6709 Shell\u3001JSON \u6216 MCP\uFF0C\u53C8\u4F1A\u591A\u4E00\u5C42\u4F20\u8F93\u683C\u5F0F\u3002

    • \u5728 Arthas \u7EC8\u7AEF\u4E2D\uFF0C\u5B8C\u6574\u8868\u8FBE\u5F0F\u5916\u5C42\u4F7F\u7528\u5355\u5F15\u53F7\uFF0COGNL \u5B57\u7B26\u4E32\u5185\u90E8\u4F7F\u7528\u53CC\u5F15\u53F7\u3002
    • \u6700\u7EC8\u547D\u4EE4\u4FDD\u6301\u5728\u4E00\u4E2A\u7269\u7406\u884C\u5185\u3002\u7EC8\u7AEF\u7684\u89C6\u89C9\u81EA\u52A8\u6362\u884C\u6CA1\u6709\u95EE\u9898\uFF0C\u4F46\u4E0D\u8981\u5728\u7C7B\u540D\u3001.\u3001@\u3001#\u53D8\u91CF \u6216\u64CD\u4F5C\u7B26\u4E2D\u95F4\u63D2\u5165\u771F\u5B9E\u6362\u884C\u3002
    • \u4E0D\u8981\u5728 . \u540E\u63D2\u5165\u7A7A\u683C\uFF0C\u4F8B\u5982 #map. get("key") \u662F\u9519\u8BEF\u683C\u5F0F\u3002
    • \u8868\u8FBE\u5F0F\u5185\u90E8\u7528\u9017\u53F7\u4E32\u8054\u6B65\u9AA4\uFF0C\u4E0D\u8981\u7528\u5206\u53F7\u3002
    • \u4F7F\u7528 {$ ...} \u65F6\u5FC5\u987B\u4FDD\u7559\u5916\u5C42\u5355\u5F15\u53F7\uFF0C\u5426\u5219\u67D0\u4E9B Shell \u4F1A\u89E3\u91CA $\u3002
    • \u5411 MCP \u7684\u8868\u8FBE\u5F0F\u53C2\u6570\u4F20\u503C\u65F6\uFF0C\u4E0D\u8981\u9644\u52A0 Markdown \u53CD\u5F15\u53F7\u3001\u5916\u5C42\u5355\u5F15\u53F7\u6216\u5B8C\u6574\u547D\u4EE4\u3002
    • \u901A\u8FC7 JSON \u4F20\u8F93\u65F6\u53EA\u6309 JSON \u89C4\u5219\u8F6C\u4E49\u53CC\u5F15\u53F7\uFF1B\u4E0D\u8981\u628A Shell \u7684\u53CD\u659C\u6760\u8F6C\u4E49\u539F\u6837\u590D\u5236\u5230\u8868\u8FBE\u5F0F\u53C2\u6570\u4E2D\u3002
    `,53),F=t("\u5F53\u8C03\u7528\u94FE\u5305\u542B\u591A\u5C42\u5F15\u53F7\u65F6\uFF0C\u4F18\u5148\u4F7F\u7528 Arthas "),$=t("\u6279\u5904\u7406\u6587\u4EF6"),B=t("\u6216 API \u7684\u72EC\u7ACB\u8868\u8FBE\u5F0F\u5B57\u6BB5\uFF0C\u51CF\u5C11 Shell \u8F6C\u4E49\u5C42\u6570\u3002"),K=n(`

    \u4E0D\u8981\u628A\u6240\u6709\u5931\u8D25\u90FD\u5F53\u6210\u8BED\u6CD5\u9519\u8BEF

    \u73B0\u8C61\u6216\u5F02\u5E38\u5173\u952E\u8BCD\u4F18\u5148\u68C0\u67E5\u5EFA\u8BAE\u52A8\u4F5C
    Malformed OGNL expression\u3001ExpressionSyntaxException\u5F15\u53F7\u3001\u62EC\u53F7\u3001@\u7C7B@\u6210\u5458\u3001\u9017\u53F7\u3001\u6295\u5F71/\u7B5B\u9009\u82B1\u62EC\u53F7\u7F29\u51CF\u5230\u6700\u5C0F\u8868\u8FBE\u5F0F\uFF0C\u518D\u9010\u6BB5\u6DFB\u52A0
    NoSuchPropertyException\u5F53\u524D\u547D\u4EE4\u662F\u5426\u771F\u7684\u63D0\u4F9B\u8BE5\u53D8\u91CF\uFF1B\u5C5E\u6027\u540D\u662F\u5426\u6B63\u786E\u5BF9\u7167\u4E0A\u4E0B\u6587\u53D8\u91CF\u8868\uFF0C\u6539\u7528\u660E\u786E\u7684\u516C\u5F00 getter
    MethodFailedException\u3001NoSuchMethodException\u65B9\u6CD5\u540D\u3001\u53C2\u6570\u7C7B\u578B\u3001\u9759\u6001/\u5B9E\u4F8B\u8C03\u7528\u65B9\u5F0F\u7528 sm/jad \u786E\u8BA4\u771F\u5B9E\u7B7E\u540D\uFF0C\u4E0D\u8981\u731C\u91CD\u8F7D
    ClassNotFoundExceptionClassLoader\u5148\u6267\u884C sc -d\uFF0C\u518D\u6307\u5B9A -c
    \u4E2D\u95F4\u5BF9\u8C61\u4E3A null\u8C03\u7528\u94FE\u7F3A\u5C11\u7A7A\u503C\u5206\u652F\u5148\u8D4B\u7ED9 #\u53D8\u91CF\uFF0C\u7528\u4E09\u5143\u8868\u8FBE\u5F0F\u4FDD\u62A4\u540E\u7EED\u8C03\u7528
    stricter invocation mode\u65B9\u6CD5\u6216\u58F0\u660E\u7C7B\u88AB OGNL \u4E25\u683C\u6A21\u5F0F\u963B\u6B62\u4E0D\u8981\u5173\u95ED\u4FDD\u62A4\u6216\u5C1D\u8BD5\u53CD\u5C04\u7ED5\u8FC7\uFF1B\u6539\u7528 jvm\u3001thread\u3001sysprop \u7B49\u4E13\u7528\u547D\u4EE4\u6216\u5B89\u5168\u7684\u516C\u5F00\u63A5\u53E3
    module ... does not exportJDK \u6A21\u5757\u8FB9\u754C\uFF0C\u4E0D\u4E00\u5B9A\u662F OGNL \u8BED\u6CD5\u6539\u7528 Arthas \u4E13\u7528\u547D\u4EE4\u6216\u53EF\u8BBF\u95EE\u7684\u516C\u5F00\u5E94\u7528\u63A5\u53E3
    \u8D85\u65F6\u3001\u8F93\u51FA\u5DE8\u5927\u6216\u76EE\u6807 JVM \u6296\u52A8\u8868\u8FBE\u5F0F\u5DE5\u4F5C\u91CF\u548C\u5C55\u5F00\u8303\u56F4\u5148\u7B5B\u9009\u540E\u6295\u5F71\uFF0C\u51CF\u5C11\u91CD\u590D\u8C03\u7528\uFF0C\u8BBE\u7F6E --limit\u3001-n \u548C\u5408\u7406\u7684 -x

    \u4F8B\u5982\uFF0C@java.lang.Runtime@getRuntime() \u5373\u4F7F\u8BED\u6CD5\u6B63\u786E\uFF0C\u5728\u9ED8\u8BA4\u7684 OGNL \u4E25\u683C\u8C03\u7528\u6A21\u5F0F\u4E0B\u4E5F\u53EF\u80FD\u88AB\u62D2\u7EDD\u3002\u8FD9\u7C7B\u9519\u8BEF\u4E0D\u5E94\u8BE5\u901A\u8FC7\u53CD\u590D\u6539\u53D8 @\u3001\u62EC\u53F7\u6216\u5F15\u53F7\u6765\u201C\u78B0\u8FD0\u6C14\u201D\u3002

    AI Agent \u751F\u6210\u4E0E\u9A8C\u8BC1\u534F\u8BAE

    \u5EFA\u8BAE\u628A\u4E0B\u9762\u7684\u7EA6\u675F\u52A0\u5165\u751F\u6210 Arthas \u547D\u4EE4\u7684 Agent \u63D0\u793A\u8BCD\uFF1A

    \u4F60\u6B63\u5728\u751F\u6210 Arthas \u4F7F\u7528\u7684 OGNL\u3002\u751F\u6210\u524D\u5FC5\u987B\u786E\u8BA4\uFF1A
    +1. \u8C03\u7528\u65B9\u9700\u8981\u201C\u5B8C\u6574 Arthas \u547D\u4EE4\u201D\u8FD8\u662F\u201C\u539F\u59CB expression \u53C2\u6570\u201D\uFF0C\u53EA\u8F93\u51FA\u5176\u4E2D\u4E00\u79CD\u3002
    +2. \u8868\u8FBE\u5F0F\u8FD0\u884C\u5728 ognl\u3001getstatic\u3001watch/stack/monitor/tt/trace\u3001line\uFF0C\u8FD8\u662F vmtool \u4E0A\u4E0B\u6587\uFF1B\u53EA\u4F7F\u7528\u8BE5\u4E0A\u4E0B\u6587\u771F\u5B9E\u5B58\u5728\u7684\u53D8\u91CF\u3002
    +3. \u4E1A\u52A1\u7C7B\u5148\u901A\u8FC7 sc -d \u786E\u8BA4 ClassLoader\uFF1B\u65B9\u6CD5\u548C\u5B57\u6BB5\u4E0D\u786E\u5B9A\u65F6\u5148\u7528 sm/jad \u786E\u8BA4\uFF0C\u4E0D\u731C\u540D\u79F0\u6216\u91CD\u8F7D\u3002
    +4. \u9759\u6001\u8BBF\u95EE\u7EDF\u4E00\u4F7F\u7528 @\u5B8C\u6574\u7C7B\u540D@\u6210\u5458\uFF0C\u4E34\u65F6\u53D8\u91CF\u7EDF\u4E00\u4F7F\u7528 #name\uFF0C\u591A\u4E2A\u6B65\u9AA4\u7528\u9017\u53F7\u8FDE\u63A5\u3002
    +5. \u4E0D\u751F\u6210 Java lambda/Stream\u3001\u65B9\u6CD5\u5F15\u7528\u3001?.\u3001SpEL T(...)\u3001\${...}\u3001Java \u6CDB\u578B\u6784\u9020\u5668\u6216\u5206\u53F7\u8BED\u53E5\u3002
    +6. \u9ED8\u8BA4\u53EA\u8BFB\uFF1B\u7981\u6B62\u8FDB\u7A0B\u3001\u6587\u4EF6\u3001\u7F51\u7EDC\u3001ClassLoader\u3001\u53CD\u5C04\u63D0\u6743\u3001\u7EBF\u7A0B\u63A7\u5236\u548C\u5E94\u7528\u72B6\u6001\u4FEE\u6539\u3002\u53EA\u5141\u8BB8\u4FEE\u6539\u8868\u8FBE\u5F0F\u5185 new \u51FA\u6765\u7684\u4E34\u65F6\u96C6\u5408\u3002
    +7. \u5148\u7B5B\u9009\u518D\u6295\u5F71\uFF0C\u53EA\u8FD4\u56DE\u9700\u8981\u7684\u5B57\u6BB5\uFF0C\u5E76\u8BBE\u7F6E\u5408\u7406\u7684 limit\u3001-n\u3001-x\u3002
    +8. \u6700\u7EC8\u8868\u8FBE\u5F0F\u4FDD\u6301\u4E00\u4E2A\u7269\u7406\u884C\uFF1B\u4E0D\u5F97\u5728\u7C7B\u540D\u3001\u70B9\u53F7\u3001@...@\u3001#\u53D8\u91CF\u6216\u64CD\u4F5C\u7B26\u5185\u90E8\u65AD\u884C\u6216\u63D2\u5165\u7A7A\u683C\u3002
    +
    +\u9A8C\u8BC1\u65F6\u6309\u4EE5\u4E0B\u987A\u5E8F\u9010\u6B65\u6267\u884C\uFF0C\u4E0D\u8981\u4E00\u6B21\u63D0\u4EA4\u672A\u7ECF\u9A8C\u8BC1\u7684\u957F\u8868\u8FBE\u5F0F\uFF1A
    +A. \u9A8C\u8BC1\u6700\u5C0F\u6839\u5BF9\u8C61\u3001\u9759\u6001\u5B57\u6BB5\u6216\u4E0A\u4E0B\u6587\u53D8\u91CF\u53EF\u8BBF\u95EE\u3002
    +B. \u6BCF\u6B21\u53EA\u589E\u52A0\u4E00\u4E2A #\u53D8\u91CF\u8D4B\u503C\u3001\u65B9\u6CD5\u8C03\u7528\u3001\u7B5B\u9009\u6216\u6295\u5F71\uFF0C\u5E76\u5B9E\u9645\u6267\u884C\u3002
    +C. \u6700\u540E\u518D\u7EC4\u88C5 Map/List \u8F93\u51FA\u548C\u9650\u5236\u53C2\u6570\u3002
    +D. \u5931\u8D25\u65F6\u5148\u5206\u7C7B\u4E3A\u547D\u4EE4/\u8F6C\u4E49\u3001\u8BED\u6CD5\u3001\u4E0A\u4E0B\u6587\u53D8\u91CF\u3001ClassLoader\u3001\u7A7A\u503C\u3001\u65B9\u6CD5\u7B7E\u540D\u3001\u8BBF\u95EE\u9650\u5236\u6216\u8D44\u6E90\u5F00\u9500\uFF1B\u4FDD\u7559\u5DF2\u901A\u8FC7\u7684\u6700\u5C0F\u524D\u7F00\uFF0C\u53EA\u4FEE\u6539\u5931\u8D25\u7247\u6BB5\u3002
    +E. \u53EA\u6709\u62FF\u5230\u65E0\u8BED\u6CD5\u5F02\u5E38\u7684\u5B9E\u9645 Arthas \u8FD4\u56DE\u540E\uFF0C\u624D\u80FD\u58F0\u660E\u8868\u8FBE\u5F0F\u201C\u5DF2\u9A8C\u8BC1\u201D\u3002
    +

    Agent \u5728\u8F93\u51FA\u524D\u8FD8\u5E94\u505A\u4E00\u6B21\u673A\u68B0\u68C0\u67E5\uFF1A

    • @\u7C7B\u540D@\u6210\u5458 \u662F\u5426\u6709\u6210\u5BF9\u7684 @\uFF1B
    • ()\u3001[]\u3001{} \u548C\u5F15\u53F7\u662F\u5426\u914D\u5BF9\uFF1B
    • \u6BCF\u4E2A\u81EA\u5B9A\u4E49\u53D8\u91CF\u662F\u5426\u5E26 #\uFF1B
    • \u6295\u5F71\u548C\u7B5B\u9009\u4E2D\u7684 #this \u662F\u5426\u6307\u5411\u9884\u671F\u5C42\u7EA7\uFF1B
    • \u53EF\u80FD\u4E3A\u7A7A\u7684\u7B5B\u9009\u7ED3\u679C\u3001Map value\u3001returnObj \u6216 throwExp \u662F\u5426\u53D7\u5206\u652F\u4FDD\u62A4\uFF1B
    • \u662F\u5426\u628A\u547D\u4EE4\u9009\u9879\u8BEF\u653E\u8FDB\u8868\u8FBE\u5F0F\uFF0C\u6216\u628A\u5B8C\u6574\u547D\u4EE4\u8BEF\u653E\u8FDB\u5DE5\u5177\u7684 expression \u5B57\u6BB5\uFF1B
    • \u662F\u5426\u5B58\u5728\u88AB\u81EA\u52A8\u683C\u5F0F\u5316\u62C6\u5F00\u7684\u7C7B\u540D\u3001\u65B9\u6CD5\u540D\u6216\u64CD\u4F5C\u7B26\u3002

    \u8FD9\u79CD\u201C\u5148\u786E\u8BA4\u4E0A\u4E0B\u6587\uFF0C\u518D\u5C0F\u6B65\u6267\u884C\uFF0C\u6700\u540E\u7EC4\u88C5\u8F93\u51FA\u201D\u7684\u6D41\u7A0B\uFF0C\u6BD4\u5728\u5931\u8D25\u540E\u6574\u6761\u91CD\u5199\u590D\u6742\u8868\u8FBE\u5F0F\u66F4\u7A33\u5B9A\uFF0C\u4E5F\u66F4\u5BB9\u6613\u5B9A\u4F4D\u771F\u5B9E\u539F\u56E0\u3002

    \u8FDB\u4E00\u6B65\u53C2\u8003

    `,10),W={href:"https://github.com/alibaba/arthas/issues/71",target:"_blank",rel:"noopener noreferrer"},z=t("Arthas issue #71\uFF1AOGNL \u7279\u6B8A\u7528\u6CD5"),U={href:"https://commons.apache.org/dormant/commons-ognl/language-guide.html",target:"_blank",rel:"noopener noreferrer"},Q=t("Apache Commons OGNL Language Guide");function X(Y,Z){const d=c("RouterLink"),o=c("ExternalLinkIcon");return i(),r("div",null,[h,p,e("p",null,[m,a(d,{to:"/doc/ognl.html"},{default:s(()=>[v]),_:1}),g,b,_,a(d,{to:"/doc/advice-class.html"},{default:s(()=>[x]),_:1}),k]),q,e("table",null,[L,e("tbody",null,[N,S,e("tr",null,[A,e("td",null,[f,j,M,y,O,C,E,w,T,G,a(d,{to:"/doc/advice-class.html"},{default:s(()=>[I]),_:1}),J]),V]),H,P,R])]),D,e("p",null,[F,a(d,{to:"/doc/batch-support.html"},{default:s(()=>[$]),_:1}),B]),K,e("ul",null,[e("li",null,[e("a",W,[z,a(o)])]),e("li",null,[e("a",U,[Q,a(o)])])])])}const te=l(u,[["render",X],["__file","ognl-express.html.vue"]]);export{te as default}; diff --git a/assets/ognl-express.html.3082adb7.js b/assets/ognl-express.html.3082adb7.js new file mode 100644 index 000000000..232c6c73a --- /dev/null +++ b/assets/ognl-express.html.3082adb7.js @@ -0,0 +1,37 @@ +import{_ as d,o as l,c,a as e,b as a,w as n,e as t,d as o,r}from"./app.e2427bec.js";const u={},h=e("h1",{id:"tips-for-complex-ognl-expressions",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#tips-for-complex-ognl-expressions","aria-hidden":"true"},"#"),t(" Tips for Complex OGNL Expressions")],-1),p=e("p",null,[t("This page covers complex but production-friendly OGNL patterns in Arthas, including variables, collection selection and projection, temporary result construction, null handling, and ClassLoaders. Every complete command in the \u201CVerified complex expressions\u201D section was run in a real Arthas attach session against the repository's "),e("code",null,"math-game"),t(" JVM. Dynamic values such as thread names, counts, and object addresses will vary by environment.")],-1),m=t("Read the "),v=e("code",null,"ognl",-1),b=t(" command documentation"),g=t(" for basic options and "),x=t("Core variables in expressions"),f=t(" for variables exposed by commands such as "),y=e("code",null,"watch",-1),_=t("."),k=o('

    WARNING

    OGNL runs inside the target JVM. A method call can read or modify application state. In production, generate and execute read-only expressions by default, and limit both the number of objects and the expansion depth. Do not invoke application methods such as set*, add, remove, or clear, and do not perform file, network, process, ClassLoader, privilege-escalating reflection, or thread-control operations. Calls to put in this page only modify a temporary Map created by the same expression.

    Identify the expression context first

    The grammar may be the same while the available variables are different. A common AI agent mistake is to copy context variables from another command into the standalone ognl command.

    ',3),q=e("thead",null,[e("tr",null,[e("th",null,"Location"),e("th",null,"Available root objects or variables"),e("th",null,"Common mistake")])],-1),w=e("tr",null,[e("td",null,[e("code",null,"ognl"),t(" command")]),e("td",null,[t("Static members, constructors, literals, and self-defined "),e("code",null,"#variables")]),e("td",null,[t("Using "),e("code",null,"params"),t(", "),e("code",null,"target"),t(", "),e("code",null,"returnObj"),t(", or "),e("code",null,"instances")])],-1),j=e("tr",null,[e("td",null,[e("code",null,"getstatic"),t(" expression")]),e("td",null,"The static field value being read is the root object"),e("td",null,[t("Treating it as a standalone "),e("code",null,"ognl"),t(" expression with no root object")])],-1),L=e("td",null,[t("Observation or condition expressions in "),e("code",null,"watch"),t(", "),e("code",null,"stack"),t(", "),e("code",null,"monitor"),t(", "),e("code",null,"tt"),t(", and related commands")],-1),A=e("code",null,"Advice",-1),S=t(" variables such as "),N=e("code",null,"params",-1),C=t(", "),T=e("code",null,"target",-1),O=t(", "),M=e("code",null,"returnObj",-1),E=t(", "),I=e("code",null,"throwExp",-1),D=t(", and "),G=e("code",null,"isReturn",-1),R=e("td",null,[t("Reading a return value at method entry, or invoking "),e("code",null,"returnObj"),t(" on the exception path")],-1),V=e("tr",null,[e("td",null,[t("Conditions in "),e("code",null,"trace"),t(" and related commands")]),e("td",null,[t("Advice variables exposed by that command; some commands also provide "),e("code",null,"#cost")]),e("td",null,[t("Assuming that every command provides "),e("code",null,"#cost")])],-1),J=e("tr",null,[e("td",null,[e("code",null,"line --express"),t(" / "),e("code",null,"--condition")]),e("td",null,[t("Advice variables plus line-level variables such as "),e("code",null,"lineNumber"),t(", "),e("code",null,"localVarMap"),t(", and "),e("code",null,"#cost")]),e("td",null,[t("Using "),e("code",null,"localVarMap"),t(" or "),e("code",null,"lineNumber"),t(" in another command")])],-1),P=e("tr",null,[e("td",null,[e("code",null,"vmtool --express")]),e("td",null,[e("code",null,"instances"),t(", the array returned by "),e("code",null,"getInstances")]),e("td",null,[t("Using "),e("code",null,"instances"),t(" in the standalone "),e("code",null,"ognl"),t(" command")])],-1),F=o(`

    Also distinguish a complete Arthas command from a raw expression parameter:

    # The Arthas console needs the full command and outer single quotes
    +ognl '#value=@java.lang.System@getProperty("java.version"), #value'
    +

    When an MCP tool, HTTP API, or another client already provides a dedicated parameter named expression, express, or conditionExpress, pass only the raw expression. Do not add ognl, command options, outer single quotes, or a Markdown code fence:

    #value=@java.lang.System@getProperty("java.version"), #value
    +

    Reliable syntax building blocks

    PurposeSyntaxNotes
    Define a temporary variable#name=valueA custom variable must start with #
    Evaluate in sequence and return the last item#a=1, #b=2, #a+#bUse commas, not semicolons; Arthas may treat a semicolon as a command separator
    Access a static method or field@fully.qualified.Class@method(), @fully.qualified.Class@FIELDBoth @ characters are required; prefer the fully qualified class name
    Create a temporary objectnew java.util.LinkedHashMap()Do not include Java generics such as new HashMap<String,Object>()
    Create a List{1, 2, 3}The result is a List, not a Java array
    Create a Map#{"name":"arthas", "count":1}Do not insert anything between # and {
    Create an arraynew java.lang.String[]{"a", "b"}The array type must be explicit
    Project a collectionitems.{#this.getName()}Evaluates each item and returns a new List
    Select from a collectionitems.{? #this != null}Returns every matching item
    Select the first or last matchitems.{^ condition}, items.{$ condition}The result is still a List; account for an empty result before reading [0]
    Refer to the current item#thisIts meaning changes with the current level in nested selections and projections

    For complex expressions, explicitly invoke public getters to reduce property-resolution and overload ambiguity. Prefer #this.getName() to #this.name. For maps, prefer get("key") and containsKey("key") to dotted property shorthand.

    Verified complex expressions

    TIP

    Some examples in this section use Thread.getAllStackTraces() to obtain a collection in any demo JVM. This operation captures every thread stack. On a production JVM with many threads, prefer a dedicated command such as thread, or assess the cost first, and do not run these examples frequently.

    Selection, projection, first match, and last match

    The following expression defines a list and returns projection, selection, first-match, and last-match results together:

    ognl -x 3 '#numbers={1,2,3,4,5,6}, #{"projection":#numbers.{#this * 10},"selection":#numbers.{? #this % 2 == 0},"first":#numbers.{^ #this % 2 == 0}[0],"last":#numbers.{$ #this % 2 == 0}[0]}'
    +

    Even numbers are known to exist in this literal, so [0] is safe here. For runtime collections, save the selected list and check whether it is empty:

    ognl '#matched={1,3,5}.{^ #this % 2 == 0}, #matched.isEmpty() ? null : #matched[0]'
    +

    Construct a structured result with temporary variables

    Do not repeat expensive calls in a long expression. Save intermediate values, then return a newly created LinkedHashMap:

    ognl -x 2 '#result=new java.util.LinkedHashMap(), #props=@java.lang.System@getProperties(), #threads=@java.lang.Thread@getAllStackTraces(), #result.put("javaVersion", #props.get("java.version")), #result.put("javaHome", #props.get("java.home")), #result.put("threadCount", #threads.size()), #result'
    +

    The returned keys are javaVersion, javaHome, and threadCount. Comma-separated subexpressions are evaluated in order, and the value of the whole expression is the final #result.

    Select first, then return only the required fields

    ognl '@java.lang.Thread@getAllStackTraces().keySet().{? #this.isAlive() && !#this.isDaemon()}.{#this.getName()}'
    +

    .{? ...} returns the selected threads. The following .{...} projects only thread names, avoiding expansion of complete Thread objects.

    Count by group

    The following expression counts threads by state. #counts is a temporary map created by this expression and does not modify an existing application object:

    ognl -x 2 '#counts=new java.util.LinkedHashMap(), @java.lang.Thread@getAllStackTraces().keySet().{#state=#this.getState().toString(), #counts.put(#state, #counts.containsKey(#state) ? #counts.get(#state) + 1 : 1)}, #counts'
    +

    Example output:

    @LinkedHashMap[
    +    @String[RUNNABLE]:@Integer[10],
    +    @String[TIMED_WAITING]:@Integer[6],
    +    @String[WAITING]:@Integer[2],
    +]
    +

    Do not put Java Stream syntax such as stream().filter(x -> ...), method references such as Type::method, or computeIfAbsent(..., x -> ...) into OGNL. OGNL does not parse Java lambdas. Use OGNL selection .{? ...} and projection .{...} instead.

    Bind #this early in nested objects

    Inside the projection over entrySet(), #this is the current Map.Entry. Bind its key and value to meaningful variables before using them in a longer expression:

    ognl '#all=@java.lang.Thread@getAllStackTraces(), #all.entrySet().{? #this.getKey().getName().startsWith("arthas")}.{#thread=#this.getKey(), #stack=#this.getValue(), #thread.getName() + " | " + #thread.getState() + " | depth=" + #stack.length}'
    +

    Handle null explicitly

    OGNL does not support JavaScript-style ?.. Do not mix in SpEL T(...) or template syntax \${...} either. Save a possibly null value and protect the method call with a conditional expression:

    ognl '#value=@java.lang.System@getProperty("arthas.not.exists"), #value == null ? "<missing>" : #value.trim()'
    +

    Result:

    @String[<missing>]
    +

    Handle both return and exception paths in watch

    -f evaluates the expression after both a normal return and an exception. Branch on isReturn before accessing returnObj or throwExp:

    watch demo.MathGame primeFactors '#result=new java.util.LinkedHashMap(), #result.put("number", params[0]), #result.put("outcome", isReturn ? "return" : "throw"), #result.put("detail", isReturn ? returnObj.size() : throwExp.getMessage()), #result' -f -n 2 -x 2
    +

    This expression evaluates on both paths in the real math-game JVM. -n 2 limits the number of observations so the command terminates.

    Use instances in vmtool

    instances exists only in the expression context of vmtool --action getInstances --express:

    vmtool --action getInstances --className java.lang.Thread --limit 100 --express 'instances.{? #this.isAlive() && #this.getName().startsWith("arthas")}.{#this.getName()}'
    +

    Use --limit before selection and projection. Do not use --limit -1 unconditionally for an application class that may have many instances.

    ClassLoader selection is not OGNL syntax

    Before accessing an application class, identify its ClassLoader:

    sc -d com.example.OrderService
    +

    Read classLoaderHash from the output and pass it as an ognl command option:

    ognl -c <classLoaderHash> '@com.example.OrderService@STATIC_FIELD'
    +

    Keep these points in mind:

    • -c and --classLoaderClass are Arthas command options, not parts of the OGNL expression.
    • A class name may be loaded by multiple ClassLoaders. Do not guess the hash, and remember that it may change after a JVM restart.
    • For ClassNotFoundException, inspect the ClassLoader before randomly rewriting OGNL syntax.
    • --classLoaderClass is appropriate only when exactly one ClassLoader instance has that type. Use the hash when multiple instances match.

    Quoting and formatting: there are two parsers

    Arthas parses the command line first, then OGNL parses the expression. A shell, JSON, or MCP transport adds another formatting layer.

    • In the Arthas console, wrap a complete expression in single quotes and use double quotes for OGNL string literals.
    • Keep the final command on one physical line. Visual terminal wrapping is harmless, but do not insert a real line break inside a class name, ., @, #variable, or an operator.
    • Do not insert whitespace after ., as in the invalid form #map. get("key").
    • Join expression steps with commas, not semicolons.
    • Keep outer single quotes around expressions containing {$ ...}, otherwise some shells will interpret $.
    • For an MCP expression parameter, do not include Markdown backticks, outer single quotes, or the complete command.
    • For JSON transport, escape double quotes according to JSON rules only. Do not copy shell backslash escaping verbatim into a raw expression parameter.
    `,53),H=t("When quoting becomes deeply nested, prefer an Arthas "),U=t("batch file"),B=t(" or a dedicated expression field in the API to reduce shell-escaping layers."),W=o(`

    Do not classify every failure as a syntax error

    Symptom or exception keywordCheck firstRecommended action
    Malformed OGNL expression, ExpressionSyntaxExceptionQuotes, brackets, @class@member, commas, and projection/selection bracesReduce to a minimal expression, then add one fragment at a time
    NoSuchPropertyExceptionWhether the command exposes that variable; whether the property name is correctCheck the context-variable table and use an explicit public getter
    MethodFailedException, NoSuchMethodExceptionMethod name, argument types, and static versus instance invocationUse sm/jad to inspect the real signature instead of guessing an overload
    ClassNotFoundExceptionClassLoaderRun sc -d, then specify -c
    A null intermediate objectMissing null branch in a call chainAssign it to a #variable and guard the next call with a conditional expression
    stricter invocation modeThe method or declaring class is blocked by OGNL strict modeDo not disable the protection or bypass it with reflection; use jvm, thread, sysprop, or another dedicated command, or a safe public API
    module ... does not exportJDK module boundaries, not necessarily OGNL grammarUse a dedicated Arthas command or an accessible public application API
    Timeout, huge output, or target-JVM disturbanceExpression work and expansion scopeSelect before projecting, avoid repeated calls, and set --limit, -n, and a reasonable -x

    For example, @java.lang.Runtime@getRuntime() can be rejected by the default OGNL strict invocation mode even though its syntax is valid. Repeatedly changing @, brackets, or quotes cannot fix this category of failure.

    Generation and validation protocol for AI agents

    Consider adding the following constraints to prompts for agents that generate Arthas commands:

    You are generating OGNL for Arthas. Before generating it, you must confirm:
    +1. Whether the caller needs a complete Arthas command or a raw expression parameter. Output only the requested form.
    +2. Whether the expression runs in the ognl, getstatic, watch/stack/monitor/tt/trace, line, or vmtool context. Use only variables that actually exist in that context.
    +3. For application classes, run sc -d to identify the ClassLoader. If a method or field is uncertain, inspect it with sm/jad instead of guessing its name or overload.
    +4. Use @fully.qualified.Class@member for static access, #name for temporary variables, and commas for sequential steps.
    +5. Do not generate Java lambdas/Streams, method references, ?., SpEL T(...), \${...}, generic constructors, or semicolon statements.
    +6. Default to read-only behavior. Forbid process, file, network, ClassLoader, privilege-escalating reflection, thread-control, and application-state mutations. Mutation is allowed only on temporary collections created with new inside the expression.
    +7. Select before projecting, return only required fields, and set reasonable limit, -n, and -x values.
    +8. Keep the final expression on one physical line. Never break or insert whitespace inside a class name, dot access, @...@, #variable, or operator.
    +
    +Validate incrementally instead of submitting one untested long expression:
    +A. Verify that the minimal root object, static field, or context variable is accessible.
    +B. Add only one #variable assignment, method call, selection, or projection per attempt, and execute it.
    +C. Add Map/List output construction and limiting options last.
    +D. On failure, classify it as command/escaping, grammar, context variable, ClassLoader, null, method signature, access restriction, or resource cost. Preserve the validated prefix and change only the failing fragment.
    +E. Claim that an expression is verified only after receiving a real Arthas result without a syntax exception.
    +

    Before returning output, the agent should also perform a mechanical check:

    • Does every @class@member contain a matching pair of @ characters?
    • Are (), [], {}, and quotes balanced?
    • Does every custom variable start with #?
    • Does #this refer to the intended nesting level in each selection or projection?
    • Are possibly empty selections, map values, returnObj, and throwExp protected by a branch?
    • Was a command option incorrectly placed inside the expression, or a complete command placed in a tool's expression field?
    • Did automatic formatting split a class name, method name, or operator?

    This process\u2014confirm context, execute incrementally, then construct the final output\u2014is more reliable than rewriting an entire complex expression after every failure, and it preserves evidence about the actual cause.

    Further reading

    `,10),K={href:"https://github.com/alibaba/arthas/issues/71",target:"_blank",rel:"noopener noreferrer"},$=t("Arthas issue #71: special OGNL usages"),z={href:"https://commons.apache.org/dormant/commons-ognl/language-guide.html",target:"_blank",rel:"noopener noreferrer"},Q=t("Apache Commons OGNL Language Guide");function Y(X,Z){const s=r("RouterLink"),i=r("ExternalLinkIcon");return l(),c("div",null,[h,p,e("p",null,[m,a(s,{to:"/en/doc/ognl.html"},{default:n(()=>[v,b]),_:1}),g,a(s,{to:"/en/doc/advice-class.html"},{default:n(()=>[x]),_:1}),f,y,_]),k,e("table",null,[q,e("tbody",null,[w,j,e("tr",null,[L,e("td",null,[a(s,{to:"/en/doc/advice-class.html"},{default:n(()=>[A]),_:1}),S,N,C,T,O,M,E,I,D,G]),R]),V,J,P])]),F,e("p",null,[H,a(s,{to:"/en/doc/batch-support.html"},{default:n(()=>[U]),_:1}),B]),W,e("ul",null,[e("li",null,[e("a",K,[$,a(i)])]),e("li",null,[e("a",z,[Q,a(i)])])])])}const te=d(u,[["render",Y],["__file","ognl-express.html.vue"]]);export{te as default}; diff --git a/assets/ognl-express.html.f156515d.js b/assets/ognl-express.html.f156515d.js new file mode 100644 index 000000000..8d4e23ab4 --- /dev/null +++ b/assets/ognl-express.html.f156515d.js @@ -0,0 +1 @@ +const l=JSON.parse('{"key":"v-dcfb9060","path":"/doc/ognl-express.html","title":"OGNL \u590D\u6742\u8868\u8FBE\u5F0F\u4F7F\u7528\u6280\u5DE7","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u5148\u786E\u8BA4\u8868\u8FBE\u5F0F\u5728\u54EA\u4E2A\u4E0A\u4E0B\u6587\u6267\u884C","slug":"\u5148\u786E\u8BA4\u8868\u8FBE\u5F0F\u5728\u54EA\u4E2A\u4E0A\u4E0B\u6587\u6267\u884C","link":"#\u5148\u786E\u8BA4\u8868\u8FBE\u5F0F\u5728\u54EA\u4E2A\u4E0A\u4E0B\u6587\u6267\u884C","children":[]},{"level":2,"title":"\u7A33\u5B9A\u7684\u8BED\u6CD5\u79EF\u6728","slug":"\u7A33\u5B9A\u7684\u8BED\u6CD5\u79EF\u6728","link":"#\u7A33\u5B9A\u7684\u8BED\u6CD5\u79EF\u6728","children":[]},{"level":2,"title":"\u5DF2\u9A8C\u8BC1\u7684\u590D\u6742\u8868\u8FBE\u5F0F","slug":"\u5DF2\u9A8C\u8BC1\u7684\u590D\u6742\u8868\u8FBE\u5F0F","link":"#\u5DF2\u9A8C\u8BC1\u7684\u590D\u6742\u8868\u8FBE\u5F0F","children":[{"level":3,"title":"\u7B5B\u9009\u3001\u6295\u5F71\u3001\u7B2C\u4E00\u9879\u548C\u6700\u540E\u4E00\u9879","slug":"\u7B5B\u9009\u3001\u6295\u5F71\u3001\u7B2C\u4E00\u9879\u548C\u6700\u540E\u4E00\u9879","link":"#\u7B5B\u9009\u3001\u6295\u5F71\u3001\u7B2C\u4E00\u9879\u548C\u6700\u540E\u4E00\u9879","children":[]},{"level":3,"title":"\u7528\u4E34\u65F6\u53D8\u91CF\u7EC4\u88C5\u7ED3\u6784\u5316\u7ED3\u679C","slug":"\u7528\u4E34\u65F6\u53D8\u91CF\u7EC4\u88C5\u7ED3\u6784\u5316\u7ED3\u679C","link":"#\u7528\u4E34\u65F6\u53D8\u91CF\u7EC4\u88C5\u7ED3\u6784\u5316\u7ED3\u679C","children":[]},{"level":3,"title":"\u5148\u7B5B\u9009\uFF0C\u518D\u53EA\u8FD4\u56DE\u9700\u8981\u7684\u5B57\u6BB5","slug":"\u5148\u7B5B\u9009-\u518D\u53EA\u8FD4\u56DE\u9700\u8981\u7684\u5B57\u6BB5","link":"#\u5148\u7B5B\u9009-\u518D\u53EA\u8FD4\u56DE\u9700\u8981\u7684\u5B57\u6BB5","children":[]},{"level":3,"title":"\u5206\u7EC4\u8BA1\u6570","slug":"\u5206\u7EC4\u8BA1\u6570","link":"#\u5206\u7EC4\u8BA1\u6570","children":[]},{"level":3,"title":"\u5D4C\u5957\u5BF9\u8C61\u4E2D\u53CA\u65F6\u4FDD\u5B58 #this","slug":"\u5D4C\u5957\u5BF9\u8C61\u4E2D\u53CA\u65F6\u4FDD\u5B58-this","link":"#\u5D4C\u5957\u5BF9\u8C61\u4E2D\u53CA\u65F6\u4FDD\u5B58-this","children":[]},{"level":3,"title":"\u7A7A\u503C\u4F7F\u7528\u663E\u5F0F\u5206\u652F","slug":"\u7A7A\u503C\u4F7F\u7528\u663E\u5F0F\u5206\u652F","link":"#\u7A7A\u503C\u4F7F\u7528\u663E\u5F0F\u5206\u652F","children":[]},{"level":3,"title":"\u5728 watch \u4E2D\u540C\u65F6\u5904\u7406\u6B63\u5E38\u8FD4\u56DE\u548C\u5F02\u5E38","slug":"\u5728-watch-\u4E2D\u540C\u65F6\u5904\u7406\u6B63\u5E38\u8FD4\u56DE\u548C\u5F02\u5E38","link":"#\u5728-watch-\u4E2D\u540C\u65F6\u5904\u7406\u6B63\u5E38\u8FD4\u56DE\u548C\u5F02\u5E38","children":[]},{"level":3,"title":"\u5728 vmtool \u4E2D\u4F7F\u7528 instances","slug":"\u5728-vmtool-\u4E2D\u4F7F\u7528-instances","link":"#\u5728-vmtool-\u4E2D\u4F7F\u7528-instances","children":[]}]},{"level":2,"title":"ClassLoader \u4E0D\u662F\u8BED\u6CD5\u7684\u4E00\u90E8\u5206","slug":"classloader-\u4E0D\u662F\u8BED\u6CD5\u7684\u4E00\u90E8\u5206","link":"#classloader-\u4E0D\u662F\u8BED\u6CD5\u7684\u4E00\u90E8\u5206","children":[]},{"level":2,"title":"\u5F15\u53F7\u548C\u683C\u5F0F\uFF1A\u5B9E\u9645\u4E0A\u6709\u4E24\u5C42\u89E3\u6790\u5668","slug":"\u5F15\u53F7\u548C\u683C\u5F0F-\u5B9E\u9645\u4E0A\u6709\u4E24\u5C42\u89E3\u6790\u5668","link":"#\u5F15\u53F7\u548C\u683C\u5F0F-\u5B9E\u9645\u4E0A\u6709\u4E24\u5C42\u89E3\u6790\u5668","children":[]},{"level":2,"title":"\u4E0D\u8981\u628A\u6240\u6709\u5931\u8D25\u90FD\u5F53\u6210\u8BED\u6CD5\u9519\u8BEF","slug":"\u4E0D\u8981\u628A\u6240\u6709\u5931\u8D25\u90FD\u5F53\u6210\u8BED\u6CD5\u9519\u8BEF","link":"#\u4E0D\u8981\u628A\u6240\u6709\u5931\u8D25\u90FD\u5F53\u6210\u8BED\u6CD5\u9519\u8BEF","children":[]},{"level":2,"title":"AI Agent \u751F\u6210\u4E0E\u9A8C\u8BC1\u534F\u8BAE","slug":"ai-agent-\u751F\u6210\u4E0E\u9A8C\u8BC1\u534F\u8BAE","link":"#ai-agent-\u751F\u6210\u4E0E\u9A8C\u8BC1\u534F\u8BAE","children":[]},{"level":2,"title":"\u8FDB\u4E00\u6B65\u53C2\u8003","slug":"\u8FDB\u4E00\u6B65\u53C2\u8003","link":"#\u8FDB\u4E00\u6B65\u53C2\u8003","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/ognl-express.md","version":"4.3.5"}');export{l as data}; diff --git a/assets/ognl.html.ab98468a.js b/assets/ognl.html.67f38565.js similarity index 78% rename from assets/ognl.html.ab98468a.js rename to assets/ognl.html.67f38565.js index 1d1e7e55c..3c06ea694 100644 --- a/assets/ognl.html.ab98468a.js +++ b/assets/ognl.html.67f38565.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-627e52da","path":"/doc/ognl.html","title":"ognl","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/ognl.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-627e52da","path":"/doc/ognl.html","title":"ognl","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/ognl.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/ognl.html.bd362a1e.js b/assets/ognl.html.c20b61d9.js similarity index 77% rename from assets/ognl.html.bd362a1e.js rename to assets/ognl.html.c20b61d9.js index 58dcc0482..f9d0c4e89 100644 --- a/assets/ognl.html.bd362a1e.js +++ b/assets/ognl.html.c20b61d9.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-89b4fa02","path":"/en/doc/ognl.html","title":"ognl","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Parameters","slug":"parameters","link":"#parameters","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/ognl.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-89b4fa02","path":"/en/doc/ognl.html","title":"ognl","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Parameters","slug":"parameters","link":"#parameters","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/ognl.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/ognl.html.7836f77d.js b/assets/ognl.html.c39364dd.js similarity index 77% rename from assets/ognl.html.7836f77d.js rename to assets/ognl.html.c39364dd.js index fee916f18..d4d2b8903 100644 --- a/assets/ognl.html.7836f77d.js +++ b/assets/ognl.html.c39364dd.js @@ -1,4 +1,4 @@ -import{_ as o,o as l,c as i,a as n,b as e,e as a,d as t,r as p}from"./app.524ecf5c.js";const r={},c=n("h1",{id:"ognl",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#ognl","aria-hidden":"true"},"#"),a(" ognl")],-1),u={href:"https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=command-ognl",target:"_blank",rel:"noopener noreferrer"},d=n("code",null,"ognl",-1),g=a("\u5728\u7EBF\u6559\u7A0B"),v=t('

    \u63D0\u793A

    \u6267\u884C ognl \u8868\u8FBE\u5F0F

    \u4ECE 3.0.5 \u7248\u672C\u589E\u52A0

    \u53C2\u6570\u8BF4\u660E

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    express\u6267\u884C\u7684\u8868\u8FBE\u5F0F
    [c:]\u6267\u884C\u8868\u8FBE\u5F0F\u7684 ClassLoader \u7684 hashcode\uFF0C\u9ED8\u8BA4\u503C\u662F SystemClassLoader
    [classLoaderClass:]\u6307\u5B9A\u6267\u884C\u8868\u8FBE\u5F0F\u7684 ClassLoader \u7684 class name
    [x]\u7ED3\u679C\u5BF9\u8C61\u7684\u5C55\u5F00\u5C42\u6B21\uFF0C\u9ED8\u8BA4\u503C 1

    \u4F7F\u7528\u53C2\u8003

    ',5),k=a("OGNL \u7279\u6B8A\u7528\u6CD5\u8BF7\u53C2\u8003\uFF1A"),m={href:"https://github.com/alibaba/arthas/issues/71",target:"_blank",rel:"noopener noreferrer"},b=a("https://github.com/alibaba/arthas/issues/71"),h=a("OGNL \u8868\u8FBE\u5F0F\u5B98\u65B9\u6307\u5357\uFF1A"),f={href:"https://commons.apache.org/dormant/commons-ognl/language-guide.html",target:"_blank",rel:"noopener noreferrer"},L=a("https://commons.apache.org/dormant/commons-ognl/language-guide.html"),_=t(`

    \u8C03\u7528\u9759\u6001\u51FD\u6570\uFF1A

    $ ognl '@java.lang.System@out.println("hello")'
    +import{_ as t,o,c as l,a as n,b as p,w as i,d as a,e as s,r}from"./app.e2427bec.js";const c={},u=a('

    ognl

    \u63D0\u793A

    \u6267\u884C ognl \u8868\u8FBE\u5F0F

    \u4ECE 3.0.5 \u7248\u672C\u589E\u52A0

    \u53C2\u6570\u8BF4\u660E

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    express\u6267\u884C\u7684\u8868\u8FBE\u5F0F
    [c:]\u6267\u884C\u8868\u8FBE\u5F0F\u7684 ClassLoader \u7684 hashcode\uFF0C\u9ED8\u8BA4\u503C\u662F SystemClassLoader
    [classLoaderClass:]\u6307\u5B9A\u6267\u884C\u8868\u8FBE\u5F0F\u7684 ClassLoader \u7684 class name
    [x]\u7ED3\u679C\u5BF9\u8C61\u7684\u5C55\u5F00\u5C42\u6B21\uFF0C\u9ED8\u8BA4\u503C 1

    \u4F7F\u7528\u53C2\u8003

    ',6),d=s("OGNL \u590D\u6742\u8868\u8FBE\u5F0F\u4F7F\u7528\u6280\u5DE7"),v=s("\uFF0C\u5305\u542B\u96C6\u5408\u7B5B\u9009\u3001\u6295\u5F71\u3001\u5206\u7EC4\u3001\u7A7A\u503C\u5904\u7406\u4EE5\u53CA AI Agent \u751F\u6210\u4E0E\u9A8C\u8BC1\u5EFA\u8BAE"),g=a(`

    \u8C03\u7528\u9759\u6001\u51FD\u6570\uFF1A

    $ ognl '@java.lang.System@out.println("hello")'
     null
     

    \u83B7\u53D6\u9759\u6001\u7C7B\u7684\u9759\u6001\u5B57\u6BB5\uFF1A

    $ ognl '@demo.MathGame@random'
     @Random[
    @@ -43,4 +43,4 @@ $
         @String[/opt/java/8.0.181-zulu/jre],
         @String[OpenJDK Runtime Environment],
     ]
    -
    `,11);function x(S,y){const s=p("ExternalLinkIcon");return l(),i("div",null,[c,n("p",null,[n("a",u,[d,g,e(s)])]),v,n("ul",null,[n("li",null,[k,n("a",m,[b,e(s)])]),n("li",null,[h,n("a",f,[L,e(s)])])]),_])}const A=o(r,[["render",x],["__file","ognl.html.vue"]]);export{A as default}; +
    `,11);function k(b,m){const e=r("RouterLink");return o(),l("div",null,[u,n("ul",null,[n("li",null,[p(e,{to:"/doc/ognl-express.html"},{default:i(()=>[d]),_:1}),v])]),g])}const f=t(c,[["render",k],["__file","ognl.html.vue"]]);export{f as default}; diff --git a/assets/ognl.html.075b13f3.js b/assets/ognl.html.d226d5a4.js similarity index 80% rename from assets/ognl.html.075b13f3.js rename to assets/ognl.html.d226d5a4.js index 15271c21e..0ece873bb 100644 --- a/assets/ognl.html.075b13f3.js +++ b/assets/ognl.html.d226d5a4.js @@ -1,4 +1,4 @@ -import{_ as o,o as l,c as i,a as n,b as e,e as a,d as t,r as p}from"./app.524ecf5c.js";const r={},c=n("h1",{id:"ognl",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#ognl","aria-hidden":"true"},"#"),a(" ognl")],-1),u={href:"https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=command-ognl",target:"_blank",rel:"noopener noreferrer"},d=n("code",null,"ognl",-1),g=a(" online tutorial"),v=t('

    TIP

    Execute ognl expression.

    Since 3.0.5.

    Parameters

    NameSpecification
    expressexpression 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

    ',5),k={href:"https://github.com/alibaba/arthas/issues/71",target:"_blank",rel:"noopener noreferrer"},m=a("Special usages"),b={href:"https://commons.apache.org/dormant/commons-ognl/language-guide.html",target:"_blank",rel:"noopener noreferrer"},h=a("OGNL official guide"),f=t(`

    Call static method:

    $ ognl '@java.lang.System@out.println("hello")'
    +import{_ as t,o,c as l,a as n,b as i,w as p,d as a,e as s,r as c}from"./app.e2427bec.js";const r={},u=a('

    ognl

    TIP

    Execute ognl expression.

    Since 3.0.5.

    Parameters

    NameSpecification
    expressexpression 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

    ',6),d=s("Tips for complex OGNL expressions"),g=s(", including collection selection, projection, grouping, null handling, and guidance for AI-agent generation and validation"),v=a(`

    Call static method:

    $ ognl '@java.lang.System@out.println("hello")'
     null
     

    Get static field:

    $ ognl '@demo.MathGame@random'
     @Random[
    @@ -43,4 +43,4 @@ $
         @String[/opt/java/8.0.181-zulu/jre],
         @String[OpenJDK Runtime Environment],
     ]
    -
    `,11);function L(x,_){const s=p("ExternalLinkIcon");return l(),i("div",null,[c,n("p",null,[n("a",u,[d,g,e(s)])]),v,n("ul",null,[n("li",null,[n("a",k,[m,e(s)])]),n("li",null,[n("a",b,[h,e(s)])])]),f])}const y=o(r,[["render",L],["__file","ognl.html.vue"]]);export{y as default}; +
    `,11);function k(b,m){const e=c("RouterLink");return o(),l("div",null,[u,n("ul",null,[n("li",null,[i(e,{to:"/en/doc/ognl-express.html"},{default:p(()=>[d]),_:1}),g])]),v])}const f=t(r,[["render",k],["__file","ognl.html.vue"]]);export{f as default}; diff --git a/assets/options.html.144916f6.js b/assets/options.html.12136572.js similarity index 73% rename from assets/options.html.144916f6.js rename to assets/options.html.12136572.js index 02f522168..8eb7d0670 100644 --- a/assets/options.html.144916f6.js +++ b/assets/options.html.12136572.js @@ -1,4 +1,4 @@ -import{_ as a,o,c as l,a as e,b as t,e as n,d as i,r}from"./app.524ecf5c.js";const c={},d=e("h1",{id:"options",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#options","aria-hidden":"true"},"#"),n(" options")],-1),u={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-options",target:"_blank",rel:"noopener noreferrer"},p=e("code",null,"options",-1),m=n(" online tutorial"),b=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"TIP"),e("p",null,"Global options")],-1),h=e("thead",null,[e("tr",null,[e("th",null,"Name"),e("th",null,"Default Value"),e("th",null,"Description")])],-1),v=e("tr",null,[e("td",null,"unsafe"),e("td",null,"false"),e("td",null,"whether to enhance to system-level class. Use it with caution since JVM may hang")],-1),f=e("tr",null,[e("td",null,"dump"),e("td",null,"false"),e("td",null,[n("whether to dump enhanced class to the external files. If it's on, enhanced class will be dumped into "),e("code",null,"/${application dir}/arthas-class-dump/"),n(", the specific output path will be output in the console")])],-1),k=e("tr",null,[e("td",null,"batch-re-transform"),e("td",null,"true"),e("td",null,"whether to re-transform matched classes in batch")],-1),g=e("tr",null,[e("td",null,"json-format"),e("td",null,"false"),e("td",null,"whether to output in JSON format")],-1),_=e("tr",null,[e("td",null,"object-size-limit"),e("td",null,"10485760"),e("td",null,[n("upper size limit in bytes for ObjectView output (must be greater than 0, default is "),e("code",null,"10 * 1024 * 1024"),n(")")])],-1),w=e("tr",null,[e("td",null,"disable-sub-class"),e("td",null,"false"),e("td",null,[n("whether to enable matching child classes. The default value is "),e("code",null,"true"),n(". If exact match is desire, turn off this flag")])],-1),x=e("td",null,"support-default-method",-1),j=e("td",null,"true",-1),y=n("whether to enable matching default method in interface. The default value is "),T=e("code",null,"true",-1),E=n(". Refer to "),O={href:"https://github.com/alibaba/arthas/issues/1105",target:"_blank",rel:"noopener noreferrer"},A=n("#1105"),V=e("tr",null,[e("td",null,"save-result"),e("td",null,"false"),e("td",null,[n("whether to save execution result. All execution results will be saved to "),e("code",null,"~/logs/arthas-cache/result.log"),n(" when it's turned on")])],-1),I=e("tr",null,[e("td",null,"job-timeout"),e("td",null,"1d"),e("td",null,"default timeout for background jobs. Background job will be terminated once it's timed out (i.e. 1d, 2h, 3m, 25s)")],-1),N=e("tr",null,[e("td",null,"print-parent-fields"),e("td",null,"true"),e("td",null,"This option enables print files in parent class, default value true.")],-1),S=e("tr",null,[e("td",null,"verbose"),e("td",null,"false"),e("td",null,"This option enables print verbose information")],-1),M=e("tr",null,[e("td",null,"strict"),e("td",null,"true"),e("td",null,"whether to enable strict mode")],-1),L=i(`

    View all options

    $ options
    +import{_ as i,o as c,c as r,a as e,b as s,w as d,e as n,d as a,r as t}from"./app.e2427bec.js";const u={},p=e("h1",{id:"options",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#options","aria-hidden":"true"},"#"),n(" options")],-1),m=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"TIP"),e("p",null,"Global options")],-1),b=e("thead",null,[e("tr",null,[e("th",null,"Name"),e("th",null,"Default Value"),e("th",null,"Description")])],-1),h=e("tr",null,[e("td",null,"unsafe"),e("td",null,"false"),e("td",null,"whether to enhance to system-level class. Use it with caution since JVM may hang")],-1),v=e("tr",null,[e("td",null,"dump"),e("td",null,"false"),e("td",null,[n("whether to dump enhanced class to the external files. If it's on, enhanced class will be dumped into "),e("code",null,"/${application dir}/arthas-class-dump/"),n(", the specific output path will be output in the console")])],-1),f=e("tr",null,[e("td",null,"batch-re-transform"),e("td",null,"true"),e("td",null,"whether to re-transform matched classes in batch")],-1),k=e("tr",null,[e("td",null,"json-format"),e("td",null,"false"),e("td",null,"whether to output in JSON format")],-1),g=e("tr",null,[e("td",null,"object-size-limit"),e("td",null,"10485760"),e("td",null,[n("upper size limit in bytes for ObjectView output (must be greater than 0, default is "),e("code",null,"10 * 1024 * 1024"),n(")")])],-1),_=e("tr",null,[e("td",null,"disable-sub-class"),e("td",null,"false"),e("td",null,[n("whether to enable matching child classes. The default value is "),e("code",null,"true"),n(". If exact match is desire, turn off this flag")])],-1),w=e("td",null,"support-default-method",-1),x=e("td",null,"true",-1),j=n("whether to enable matching default method in interface. The default value is "),y=e("code",null,"true",-1),T=n(". Refer to "),E={href:"https://github.com/alibaba/arthas/issues/1105",target:"_blank",rel:"noopener noreferrer"},O=n("#1105"),A=e("tr",null,[e("td",null,"save-result"),e("td",null,"false"),e("td",null,[n("whether to save execution result. All execution results will be saved to "),e("code",null,"~/logs/arthas-cache/result.log"),n(" when it's turned on")])],-1),V=e("tr",null,[e("td",null,"job-timeout"),e("td",null,"1d"),e("td",null,"default timeout for background jobs. Background job will be terminated once it's timed out (i.e. 1d, 2h, 3m, 25s)")],-1),N=e("tr",null,[e("td",null,"print-parent-fields"),e("td",null,"true"),e("td",null,"This option enables print files in parent class, default value true.")],-1),I=e("tr",null,[e("td",null,"verbose"),e("td",null,"false"),e("td",null,"This option enables print verbose information")],-1),S=e("tr",null,[e("td",null,"strict"),e("td",null,"true"),e("td",null,"whether to enable strict mode")],-1),L=a(`

    View all options

    $ options
      LEVEL  TYPE    NAME          VALUE   SUMMARY               DESCRIPTION
     -------------------------------------------------------------------------------------------------------
      0      boolea  unsafe        false   Option to support sy  This option enables to proxy functionality
    @@ -57,8 +57,8 @@ import{_ as a,o,c as l,a as e,b as t,e as n,d as i,r}from"./app.524ecf5c.js";con
     
    $ watch java.lang.invoke.Invokers callSiteForm
     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

    TIP

    since 3.6.0

    For new users, there may be misuses when writing ognl expressions.

    For example, for Student, when judging the age is equal to 18, the conditional expression may be mistakenly written as target.age=18, which actually sets the age of the current object to 18. The correct spelling is target.age==18.

    In order to prevent misuse like the above, Arthas enables strict mode by default, in ognl expressions, it is forbidden to update the property of the object or call the setter method.

    Take MathGame as an example, the following error message will appear.

    $ watch demo.MathGame primeFactors 'target' 'target.illegalArgumentCount=1'
    +

    Turn off strict mode, allow setting object properties in ognl expressions

    TIP

    since 3.6.0

    For new users, there may be misuses when writing ognl expressions.

    `,15),M=n("See "),C=n("Tips for complex OGNL expressions"),R=n(" for read-only constraints, a generation checklist, and error classification."),U=a(`

    For example, for Student, when judging the age is equal to 18, the conditional expression may be mistakenly written as target.age=18, which actually sets the age of the current object to 18. The correct spelling is target.age==18.

    In order to prevent misuse like the above, Arthas enables strict mode by default, in ognl expressions, it is forbidden to update the property of the object or call the setter method.

    Take MathGame as an example, the following error message will appear.

    $ watch demo.MathGame primeFactors 'target' 'target.illegalArgumentCount=1'
     Press Q or Ctrl+C to abort.
     Affect(class count: 1 , method count: 1) cost in 206 ms, listenerId: 1
     watch failed, condition is: target.illegalArgumentCount=1, express is: target, By default, strict mode is true, not allowed to set object properties. Want to set object properties, execute \`options strict false\`, visit /Users/admin/logs/arthas/arthas.log for more details.
    -

    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
    `,21);function U(B,C){const s=r("ExternalLinkIcon");return o(),l("div",null,[d,e("p",null,[e("a",u,[p,m,t(s)])]),b,e("table",null,[h,e("tbody",null,[v,f,k,g,_,w,e("tr",null,[x,j,e("td",null,[y,T,E,e("a",O,[A,t(s)])])]),V,I,N,S,M])]),L])}const P=a(c,[["render",U],["__file","options.html.vue"]]);export{P as default}; +

    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
    `,6);function B(F,P){const o=t("ExternalLinkIcon"),l=t("RouterLink");return c(),r("div",null,[p,m,e("table",null,[b,e("tbody",null,[h,v,f,k,g,_,e("tr",null,[w,x,e("td",null,[j,y,T,e("a",E,[O,s(o)])])]),A,V,N,I,S])]),L,e("p",null,[M,s(l,{to:"/en/doc/ognl-express.html"},{default:d(()=>[C]),_:1}),R]),U])}const $=i(u,[["render",B],["__file","options.html.vue"]]);export{$ as default}; diff --git a/assets/options.html.3ab55601.js b/assets/options.html.7c3bfae1.js similarity index 89% rename from assets/options.html.3ab55601.js rename to assets/options.html.7c3bfae1.js index 9a8537f91..37fbdde79 100644 --- a/assets/options.html.3ab55601.js +++ b/assets/options.html.7c3bfae1.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-43a1e17f","path":"/en/doc/options.html","title":"options","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"View all options","slug":"view-all-options","link":"#view-all-options","children":[]},{"level":2,"title":"Get special option value","slug":"get-special-option-value","link":"#get-special-option-value","children":[]},{"level":2,"title":"Set special option value","slug":"set-special-option-value","link":"#set-special-option-value","children":[]},{"level":2,"title":"Set unsafe to true to enhance the classes under the java.* package","slug":"set-unsafe-to-true-to-enhance-the-classes-under-the-java-package","link":"#set-unsafe-to-true-to-enhance-the-classes-under-the-java-package","children":[]},{"level":2,"title":"Turn off strict mode, allow setting object properties in ognl expressions","slug":"turn-off-strict-mode-allow-setting-object-properties-in-ognl-expressions","link":"#turn-off-strict-mode-allow-setting-object-properties-in-ognl-expressions","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/options.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-43a1e17f","path":"/en/doc/options.html","title":"options","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"View all options","slug":"view-all-options","link":"#view-all-options","children":[]},{"level":2,"title":"Get special option value","slug":"get-special-option-value","link":"#get-special-option-value","children":[]},{"level":2,"title":"Set special option value","slug":"set-special-option-value","link":"#set-special-option-value","children":[]},{"level":2,"title":"Set unsafe to true to enhance the classes under the java.* package","slug":"set-unsafe-to-true-to-enhance-the-classes-under-the-java-package","link":"#set-unsafe-to-true-to-enhance-the-classes-under-the-java-package","children":[]},{"level":2,"title":"Turn off strict mode, allow setting object properties in ognl expressions","slug":"turn-off-strict-mode-allow-setting-object-properties-in-ognl-expressions","link":"#turn-off-strict-mode-allow-setting-object-properties-in-ognl-expressions","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/options.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/options.html.ec66483d.js b/assets/options.html.7de13b4f.js similarity index 91% rename from assets/options.html.ec66483d.js rename to assets/options.html.7de13b4f.js index 1724240fd..42afa106e 100644 --- a/assets/options.html.ec66483d.js +++ b/assets/options.html.7de13b4f.js @@ -1 +1 @@ -const t=JSON.parse('{"key":"v-27b6152a","path":"/doc/options.html","title":"options","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u67E5\u770B\u6240\u6709\u7684 options","slug":"\u67E5\u770B\u6240\u6709\u7684-options","link":"#\u67E5\u770B\u6240\u6709\u7684-options","children":[]},{"level":2,"title":"\u83B7\u53D6 option \u7684\u503C","slug":"\u83B7\u53D6-option-\u7684\u503C","link":"#\u83B7\u53D6-option-\u7684\u503C","children":[]},{"level":2,"title":"\u8BBE\u7F6E\u6307\u5B9A\u7684 option","slug":"\u8BBE\u7F6E\u6307\u5B9A\u7684-option","link":"#\u8BBE\u7F6E\u6307\u5B9A\u7684-option","children":[]},{"level":2,"title":"\u6253\u5F00 unsafe \u5F00\u5173\uFF0C\u652F\u6301 jdk package \u4E0B\u7684\u7C7B","slug":"\u6253\u5F00-unsafe-\u5F00\u5173-\u652F\u6301-jdk-package-\u4E0B\u7684\u7C7B","link":"#\u6253\u5F00-unsafe-\u5F00\u5173-\u652F\u6301-jdk-package-\u4E0B\u7684\u7C7B","children":[]},{"level":2,"title":"\u5173\u95ED strict \u6A21\u5F0F\uFF0C\u5141\u8BB8\u5728 ognl \u8868\u8FBE\u5F0F\u91CC\u8BBE\u7F6E\u5BF9\u8C61\u5C5E\u6027","slug":"\u5173\u95ED-strict-\u6A21\u5F0F-\u5141\u8BB8\u5728-ognl-\u8868\u8FBE\u5F0F\u91CC\u8BBE\u7F6E\u5BF9\u8C61\u5C5E\u6027","link":"#\u5173\u95ED-strict-\u6A21\u5F0F-\u5141\u8BB8\u5728-ognl-\u8868\u8FBE\u5F0F\u91CC\u8BBE\u7F6E\u5BF9\u8C61\u5C5E\u6027","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/options.md","version":"4.3.3"}');export{t as data}; +const t=JSON.parse('{"key":"v-27b6152a","path":"/doc/options.html","title":"options","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u67E5\u770B\u6240\u6709\u7684 options","slug":"\u67E5\u770B\u6240\u6709\u7684-options","link":"#\u67E5\u770B\u6240\u6709\u7684-options","children":[]},{"level":2,"title":"\u83B7\u53D6 option \u7684\u503C","slug":"\u83B7\u53D6-option-\u7684\u503C","link":"#\u83B7\u53D6-option-\u7684\u503C","children":[]},{"level":2,"title":"\u8BBE\u7F6E\u6307\u5B9A\u7684 option","slug":"\u8BBE\u7F6E\u6307\u5B9A\u7684-option","link":"#\u8BBE\u7F6E\u6307\u5B9A\u7684-option","children":[]},{"level":2,"title":"\u6253\u5F00 unsafe \u5F00\u5173\uFF0C\u652F\u6301 jdk package \u4E0B\u7684\u7C7B","slug":"\u6253\u5F00-unsafe-\u5F00\u5173-\u652F\u6301-jdk-package-\u4E0B\u7684\u7C7B","link":"#\u6253\u5F00-unsafe-\u5F00\u5173-\u652F\u6301-jdk-package-\u4E0B\u7684\u7C7B","children":[]},{"level":2,"title":"\u5173\u95ED strict \u6A21\u5F0F\uFF0C\u5141\u8BB8\u5728 ognl \u8868\u8FBE\u5F0F\u91CC\u8BBE\u7F6E\u5BF9\u8C61\u5C5E\u6027","slug":"\u5173\u95ED-strict-\u6A21\u5F0F-\u5141\u8BB8\u5728-ognl-\u8868\u8FBE\u5F0F\u91CC\u8BBE\u7F6E\u5BF9\u8C61\u5C5E\u6027","link":"#\u5173\u95ED-strict-\u6A21\u5F0F-\u5141\u8BB8\u5728-ognl-\u8868\u8FBE\u5F0F\u91CC\u8BBE\u7F6E\u5BF9\u8C61\u5C5E\u6027","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/options.md","version":"4.3.5"}');export{t as data}; diff --git a/assets/options.html.c70226da.js b/assets/options.html.dae019ce.js similarity index 68% rename from assets/options.html.c70226da.js rename to assets/options.html.dae019ce.js index 3813faf80..927099a02 100644 --- a/assets/options.html.c70226da.js +++ b/assets/options.html.dae019ce.js @@ -1,4 +1,4 @@ -import{_ as t,o as l,c as o,a as n,b as a,e,d as i,r as d}from"./app.524ecf5c.js";const c={},r=n("h1",{id:"options",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#options","aria-hidden":"true"},"#"),e(" options")],-1),u={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-options",target:"_blank",rel:"noopener noreferrer"},p=n("code",null,"options",-1),b=e("\u5728\u7EBF\u6559\u7A0B"),m=n("div",{class:"custom-container tip"},[n("p",{class:"custom-container-title"},"\u63D0\u793A"),n("p",null,"\u5168\u5C40\u5F00\u5173")],-1),v=n("thead",null,[n("tr",null,[n("th",null,"\u540D\u79F0"),n("th",null,"\u9ED8\u8BA4\u503C"),n("th",null,"\u63CF\u8FF0")])],-1),h=n("tr",null,[n("td",null,"unsafe"),n("td",null,"false"),n("td",null,"\u662F\u5426\u652F\u6301\u5BF9\u7CFB\u7EDF\u7EA7\u522B\u7684\u7C7B\u8FDB\u884C\u589E\u5F3A\uFF0C\u6253\u5F00\u8BE5\u5F00\u5173\u53EF\u80FD\u5BFC\u81F4\u628A JVM \u641E\u6302\uFF0C\u8BF7\u614E\u91CD\u9009\u62E9\uFF01")],-1),f=n("tr",null,[n("td",null,"dump"),n("td",null,"false"),n("td",null,[e("\u662F\u5426\u652F\u6301\u88AB\u589E\u5F3A\u4E86\u7684\u7C7B dump \u5230\u5916\u90E8\u6587\u4EF6\u4E2D\uFF0C\u5982\u679C\u6253\u5F00\u5F00\u5173\uFF0Cclass \u6587\u4EF6\u4F1A\u88AB dump \u5230"),n("code",null,"/${application working dir}/arthas-class-dump/"),e("\u76EE\u5F55\u4E0B\uFF0C\u5177\u4F53\u4F4D\u7F6E\u8BE6\u89C1\u63A7\u5236\u53F0\u8F93\u51FA")])],-1),k=n("tr",null,[n("td",null,"batch-re-transform"),n("td",null,"true"),n("td",null,"\u662F\u5426\u652F\u6301\u6279\u91CF\u5BF9\u5339\u914D\u5230\u7684\u7C7B\u6267\u884C retransform \u64CD\u4F5C")],-1),g=n("tr",null,[n("td",null,"json-format"),n("td",null,"false"),n("td",null,"\u662F\u5426\u652F\u6301 json \u5316\u7684\u8F93\u51FA")],-1),_=n("tr",null,[n("td",null,"object-size-limit"),n("td",null,"10485760"),n("td",null,[e("ObjectView \u8F93\u51FA\u5927\u5C0F\u4E0A\u9650\uFF08\u5B57\u8282\uFF09\uFF0C\u5FC5\u987B\u5927\u4E8E 0\uFF0C\u9ED8\u8BA4 "),n("code",null,"10 * 1024 * 1024")])],-1),x=n("tr",null,[n("td",null,"disable-sub-class"),n("td",null,"false"),n("td",null,"\u662F\u5426\u7981\u7528\u5B50\u7C7B\u5339\u914D\uFF0C\u9ED8\u8BA4\u5728\u5339\u914D\u76EE\u6807\u7C7B\u7684\u65F6\u5019\u4F1A\u9ED8\u8BA4\u5339\u914D\u5230\u5176\u5B50\u7C7B\uFF0C\u5982\u679C\u60F3\u7CBE\u786E\u5339\u914D\uFF0C\u53EF\u4EE5\u5173\u95ED\u6B64\u5F00\u5173")],-1),w=n("td",null,"support-default-method",-1),j=n("td",null,"true",-1),y=e("\u662F\u5426\u652F\u6301\u5339\u914D\u5230 default method\uFF0C \u9ED8\u8BA4\u4F1A\u67E5\u627E interface\uFF0C\u5339\u914D\u91CC\u9762\u7684 default method\u3002\u53C2\u8003 "),E={href:"https://github.com/alibaba/arthas/issues/1105",target:"_blank",rel:"noopener noreferrer"},O=e("#1105"),T=n("tr",null,[n("td",null,"save-result"),n("td",null,"false"),n("td",null,[e("\u662F\u5426\u6253\u5F00\u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7\u529F\u80FD\uFF0C\u6253\u5F00\u4E4B\u540E\u6240\u6709\u547D\u4EE4\u7684\u8FD0\u884C\u7ED3\u679C\u90FD\u5C06\u4FDD\u5B58\u5230"),n("code",null,"~/logs/arthas-cache/result.log"),e("\u4E2D")])],-1),A=n("tr",null,[n("td",null,"job-timeout"),n("td",null,"1d"),n("td",null,"\u5F02\u6B65\u540E\u53F0\u4EFB\u52A1\u7684\u9ED8\u8BA4\u8D85\u65F6\u65F6\u95F4\uFF0C\u8D85\u8FC7\u8FD9\u4E2A\u65F6\u95F4\uFF0C\u4EFB\u52A1\u81EA\u52A8\u505C\u6B62\uFF1B\u6BD4\u5982\u8BBE\u7F6E 1d, 2h, 3m, 25s\uFF0C\u5206\u522B\u4EE3\u8868\u5929\u3001\u5C0F\u65F6\u3001\u5206\u3001\u79D2")],-1),V=n("tr",null,[n("td",null,"print-parent-fields"),n("td",null,"true"),n("td",null,"\u662F\u5426\u6253\u5370\u5728 parent class \u91CC\u7684 filed")],-1),N=n("tr",null,[n("td",null,"verbose"),n("td",null,"false"),n("td",null,"\u662F\u5426\u6253\u5370\u66F4\u591A\u8BE6\u7EC6\u4FE1\u606F")],-1),M=n("tr",null,[n("td",null,"strict"),n("td",null,"true"),n("td",null,"\u662F\u5426\u542F\u7528 strict \u6A21\u5F0F")],-1),L=i(`

    \u67E5\u770B\u6240\u6709\u7684 options

    $ options
    +import{_ as i,o as d,c,a as n,b as s,w as r,e,d as t,r as a}from"./app.e2427bec.js";const u={},p=n("h1",{id:"options",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#options","aria-hidden":"true"},"#"),e(" options")],-1),b=n("div",{class:"custom-container tip"},[n("p",{class:"custom-container-title"},"\u63D0\u793A"),n("p",null,"\u5168\u5C40\u5F00\u5173")],-1),m=n("thead",null,[n("tr",null,[n("th",null,"\u540D\u79F0"),n("th",null,"\u9ED8\u8BA4\u503C"),n("th",null,"\u63CF\u8FF0")])],-1),v=n("tr",null,[n("td",null,"unsafe"),n("td",null,"false"),n("td",null,"\u662F\u5426\u652F\u6301\u5BF9\u7CFB\u7EDF\u7EA7\u522B\u7684\u7C7B\u8FDB\u884C\u589E\u5F3A\uFF0C\u6253\u5F00\u8BE5\u5F00\u5173\u53EF\u80FD\u5BFC\u81F4\u628A JVM \u641E\u6302\uFF0C\u8BF7\u614E\u91CD\u9009\u62E9\uFF01")],-1),h=n("tr",null,[n("td",null,"dump"),n("td",null,"false"),n("td",null,[e("\u662F\u5426\u652F\u6301\u88AB\u589E\u5F3A\u4E86\u7684\u7C7B dump \u5230\u5916\u90E8\u6587\u4EF6\u4E2D\uFF0C\u5982\u679C\u6253\u5F00\u5F00\u5173\uFF0Cclass \u6587\u4EF6\u4F1A\u88AB dump \u5230"),n("code",null,"/${application working dir}/arthas-class-dump/"),e("\u76EE\u5F55\u4E0B\uFF0C\u5177\u4F53\u4F4D\u7F6E\u8BE6\u89C1\u63A7\u5236\u53F0\u8F93\u51FA")])],-1),f=n("tr",null,[n("td",null,"batch-re-transform"),n("td",null,"true"),n("td",null,"\u662F\u5426\u652F\u6301\u6279\u91CF\u5BF9\u5339\u914D\u5230\u7684\u7C7B\u6267\u884C retransform \u64CD\u4F5C")],-1),k=n("tr",null,[n("td",null,"json-format"),n("td",null,"false"),n("td",null,"\u662F\u5426\u652F\u6301 json \u5316\u7684\u8F93\u51FA")],-1),g=n("tr",null,[n("td",null,"object-size-limit"),n("td",null,"10485760"),n("td",null,[e("ObjectView \u8F93\u51FA\u5927\u5C0F\u4E0A\u9650\uFF08\u5B57\u8282\uFF09\uFF0C\u5FC5\u987B\u5927\u4E8E 0\uFF0C\u9ED8\u8BA4 "),n("code",null,"10 * 1024 * 1024")])],-1),_=n("tr",null,[n("td",null,"disable-sub-class"),n("td",null,"false"),n("td",null,"\u662F\u5426\u7981\u7528\u5B50\u7C7B\u5339\u914D\uFF0C\u9ED8\u8BA4\u5728\u5339\u914D\u76EE\u6807\u7C7B\u7684\u65F6\u5019\u4F1A\u9ED8\u8BA4\u5339\u914D\u5230\u5176\u5B50\u7C7B\uFF0C\u5982\u679C\u60F3\u7CBE\u786E\u5339\u914D\uFF0C\u53EF\u4EE5\u5173\u95ED\u6B64\u5F00\u5173")],-1),x=n("td",null,"support-default-method",-1),w=n("td",null,"true",-1),j=e("\u662F\u5426\u652F\u6301\u5339\u914D\u5230 default method\uFF0C \u9ED8\u8BA4\u4F1A\u67E5\u627E interface\uFF0C\u5339\u914D\u91CC\u9762\u7684 default method\u3002\u53C2\u8003 "),E={href:"https://github.com/alibaba/arthas/issues/1105",target:"_blank",rel:"noopener noreferrer"},y=e("#1105"),O=n("tr",null,[n("td",null,"save-result"),n("td",null,"false"),n("td",null,[e("\u662F\u5426\u6253\u5F00\u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7\u529F\u80FD\uFF0C\u6253\u5F00\u4E4B\u540E\u6240\u6709\u547D\u4EE4\u7684\u8FD0\u884C\u7ED3\u679C\u90FD\u5C06\u4FDD\u5B58\u5230"),n("code",null,"~/logs/arthas-cache/result.log"),e("\u4E2D")])],-1),T=n("tr",null,[n("td",null,"job-timeout"),n("td",null,"1d"),n("td",null,"\u5F02\u6B65\u540E\u53F0\u4EFB\u52A1\u7684\u9ED8\u8BA4\u8D85\u65F6\u65F6\u95F4\uFF0C\u8D85\u8FC7\u8FD9\u4E2A\u65F6\u95F4\uFF0C\u4EFB\u52A1\u81EA\u52A8\u505C\u6B62\uFF1B\u6BD4\u5982\u8BBE\u7F6E 1d, 2h, 3m, 25s\uFF0C\u5206\u522B\u4EE3\u8868\u5929\u3001\u5C0F\u65F6\u3001\u5206\u3001\u79D2")],-1),A=n("tr",null,[n("td",null,"print-parent-fields"),n("td",null,"true"),n("td",null,"\u662F\u5426\u6253\u5370\u5728 parent class \u91CC\u7684 filed")],-1),V=n("tr",null,[n("td",null,"verbose"),n("td",null,"false"),n("td",null,"\u662F\u5426\u6253\u5370\u66F4\u591A\u8BE6\u7EC6\u4FE1\u606F")],-1),L=n("tr",null,[n("td",null,"strict"),n("td",null,"true"),n("td",null,"\u662F\u5426\u542F\u7528 strict \u6A21\u5F0F")],-1),N=t(`

    \u67E5\u770B\u6240\u6709\u7684 options

    $ options
      LEVEL  TYPE    NAME          VALUE   SUMMARY               DESCRIPTION
     -------------------------------------------------------------------------------------------------------
      0      boolea  unsafe        false   Option to support sy  This option enables to proxy functionality
    @@ -57,8 +57,8 @@ import{_ as t,o as l,c as o,a as n,b as a,e,d as i,r as d}from"./app.524ecf5c.js
     
    $ watch java.lang.invoke.Invokers callSiteForm
     Press Q or Ctrl+C to abort.
     Affect(class count: 1 , method count: 1) cost in 61 ms, listenerId: 1
    -

    \u5173\u95ED strict \u6A21\u5F0F\uFF0C\u5141\u8BB8\u5728 ognl \u8868\u8FBE\u5F0F\u91CC\u8BBE\u7F6E\u5BF9\u8C61\u5C5E\u6027

    \u63D0\u793A

    since 3.6.0

    \u5BF9\u4E8E\u65B0\u7528\u6237\uFF0C\u5728\u7F16\u5199 ognl \u8868\u8FBE\u5F0F\u65F6\uFF0C\u53EF\u80FD\u4F1A\u51FA\u73B0\u8BEF\u7528\u3002

    \u6BD4\u5982\u5BF9\u4E8EStudent\uFF0C\u5224\u65AD\u5E74\u9F84\u7B49\u4E8E 18 \u65F6\uFF0C\u53EF\u80FD\u6761\u4EF6\u8868\u8FBE\u5F0F\u4F1A\u8BEF\u5199\u4E3Atarget.age=18\uFF0C\u8FD9\u4E2A\u8868\u8FBE\u5F0F\u5B9E\u9645\u4E0A\u662F\u628A\u5F53\u524D\u5BF9\u8C61\u7684age\u8BBE\u7F6E\u4E3A 18 \u4E86\u3002\u6B63\u786E\u7684\u5199\u6CD5\u662Ftarget.age==18\u3002

    \u4E3A\u4E86\u9632\u6B62\u51FA\u73B0\u7C7B\u4F3C\u4E0A\u9762\u7684\u8BEF\u7528\uFF0CArthas \u9ED8\u8BA4\u542F\u7528strict\u6A21\u5F0F\uFF0C\u5728ognl\u8868\u8FBE\u5F0F\u91CC\uFF0C\u7981\u6B62\u66F4\u65B0\u5BF9\u8C61\u7684 Property \u6216\u8005\u8C03\u7528setter\u51FD\u6570\u3002

    \u4EE5MathGame\u4E3A\u4F8B\uFF0C\u4F1A\u51FA\u73B0\u4EE5\u4E0B\u7684\u9519\u8BEF\u63D0\u793A\u3002

    $ watch demo.MathGame primeFactors 'target' 'target.illegalArgumentCount=1'
    +

    \u5173\u95ED strict \u6A21\u5F0F\uFF0C\u5141\u8BB8\u5728 ognl \u8868\u8FBE\u5F0F\u91CC\u8BBE\u7F6E\u5BF9\u8C61\u5C5E\u6027

    \u63D0\u793A

    since 3.6.0

    \u5BF9\u4E8E\u65B0\u7528\u6237\uFF0C\u5728\u7F16\u5199 ognl \u8868\u8FBE\u5F0F\u65F6\uFF0C\u53EF\u80FD\u4F1A\u51FA\u73B0\u8BEF\u7528\u3002

    `,15),M=e("\u590D\u6742\u8868\u8FBE\u5F0F\u7684\u53EA\u8BFB\u7EA6\u675F\u3001\u751F\u6210\u68C0\u67E5\u6E05\u5355\u548C\u9519\u8BEF\u5206\u7C7B\u53C2\u89C1 "),S=e("OGNL \u590D\u6742\u8868\u8FBE\u5F0F\u4F7F\u7528\u6280\u5DE7"),C=e("\u3002"),R=t(`

    \u6BD4\u5982\u5BF9\u4E8EStudent\uFF0C\u5224\u65AD\u5E74\u9F84\u7B49\u4E8E 18 \u65F6\uFF0C\u53EF\u80FD\u6761\u4EF6\u8868\u8FBE\u5F0F\u4F1A\u8BEF\u5199\u4E3Atarget.age=18\uFF0C\u8FD9\u4E2A\u8868\u8FBE\u5F0F\u5B9E\u9645\u4E0A\u662F\u628A\u5F53\u524D\u5BF9\u8C61\u7684age\u8BBE\u7F6E\u4E3A 18 \u4E86\u3002\u6B63\u786E\u7684\u5199\u6CD5\u662Ftarget.age==18\u3002

    \u4E3A\u4E86\u9632\u6B62\u51FA\u73B0\u7C7B\u4F3C\u4E0A\u9762\u7684\u8BEF\u7528\uFF0CArthas \u9ED8\u8BA4\u542F\u7528strict\u6A21\u5F0F\uFF0C\u5728ognl\u8868\u8FBE\u5F0F\u91CC\uFF0C\u7981\u6B62\u66F4\u65B0\u5BF9\u8C61\u7684 Property \u6216\u8005\u8C03\u7528setter\u51FD\u6570\u3002

    \u4EE5MathGame\u4E3A\u4F8B\uFF0C\u4F1A\u51FA\u73B0\u4EE5\u4E0B\u7684\u9519\u8BEF\u63D0\u793A\u3002

    $ watch demo.MathGame primeFactors 'target' 'target.illegalArgumentCount=1'
     Press Q or Ctrl+C to abort.
     Affect(class count: 1 , method count: 1) cost in 206 ms, listenerId: 1
     watch failed, condition is: target.illegalArgumentCount=1, express is: target, By default, strict mode is true, not allowed to set object properties. Want to set object properties, execute \`options strict false\`, visit /Users/admin/logs/arthas/arthas.log for more details.
    -

    \u7528\u6237\u5982\u679C\u786E\u5B9A\u8981\u5728ognl\u8868\u8FBE\u5F0F\u91CC\u66F4\u65B0\u5BF9\u8C61\uFF0C\u53EF\u4EE5\u6267\u884Coptions strict false\uFF0C\u5173\u95EDstrict\u6A21\u5F0F\u3002

    • \u66F4\u591A\u4FE1\u606F\u53C2\u8003\uFF1A https://github.com/alibaba/arthas/issues/2128
    `,21);function S(C,U){const s=d("ExternalLinkIcon");return l(),o("div",null,[r,n("p",null,[n("a",u,[p,b,a(s)])]),m,n("table",null,[v,n("tbody",null,[h,f,k,g,_,x,n("tr",null,[w,j,n("td",null,[y,n("a",E,[O,a(s)])])]),T,A,V,N,M])]),L])}const R=t(c,[["render",S],["__file","options.html.vue"]]);export{R as default}; +

    \u7528\u6237\u5982\u679C\u786E\u5B9A\u8981\u5728ognl\u8868\u8FBE\u5F0F\u91CC\u66F4\u65B0\u5BF9\u8C61\uFF0C\u53EF\u4EE5\u6267\u884Coptions strict false\uFF0C\u5173\u95EDstrict\u6A21\u5F0F\u3002

    • \u66F4\u591A\u4FE1\u606F\u53C2\u8003\uFF1A https://github.com/alibaba/arthas/issues/2128
    `,6);function U(I,$){const l=a("ExternalLinkIcon"),o=a("RouterLink");return d(),c("div",null,[p,b,n("table",null,[m,n("tbody",null,[v,h,f,k,g,_,n("tr",null,[x,w,n("td",null,[j,n("a",E,[y,s(l)])])]),O,T,A,V,L])]),N,n("p",null,[M,s(o,{to:"/doc/ognl-express.html"},{default:r(()=>[S]),_:1}),C]),R])}const J=i(u,[["render",U],["__file","options.html.vue"]]);export{J as default}; diff --git a/assets/perfcounter.html.245a5ce5.js b/assets/perfcounter.html.02a2f773.js similarity index 80% rename from assets/perfcounter.html.245a5ce5.js rename to assets/perfcounter.html.02a2f773.js index 6acb50f54..4855ff3a8 100644 --- a/assets/perfcounter.html.245a5ce5.js +++ b/assets/perfcounter.html.02a2f773.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-2f05b636","path":"/doc/perfcounter.html","title":"perfcounter","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]},{"level":2,"title":"jdk9 \u4EE5\u4E0A\u7684\u5E94\u7528","slug":"jdk9-\u4EE5\u4E0A\u7684\u5E94\u7528","link":"#jdk9-\u4EE5\u4E0A\u7684\u5E94\u7528","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/perfcounter.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-2f05b636","path":"/doc/perfcounter.html","title":"perfcounter","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]},{"level":2,"title":"jdk9 \u4EE5\u4E0A\u7684\u5E94\u7528","slug":"jdk9-\u4EE5\u4E0A\u7684\u5E94\u7528","link":"#jdk9-\u4EE5\u4E0A\u7684\u5E94\u7528","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/perfcounter.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/perfcounter.html.cbce5e22.js b/assets/perfcounter.html.27f41458.js similarity index 75% rename from assets/perfcounter.html.cbce5e22.js rename to assets/perfcounter.html.27f41458.js index 3f72e2db6..771463bee 100644 --- a/assets/perfcounter.html.cbce5e22.js +++ b/assets/perfcounter.html.27f41458.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-6746784a","path":"/en/doc/perfcounter.html","title":"perfcounter","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]},{"level":2,"title":"JVM above JDK9","slug":"jvm-above-jdk9","link":"#jvm-above-jdk9","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/perfcounter.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-6746784a","path":"/en/doc/perfcounter.html","title":"perfcounter","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]},{"level":2,"title":"JVM above JDK9","slug":"jvm-above-jdk9","link":"#jvm-above-jdk9","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/perfcounter.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/perfcounter.html.19590f54.js b/assets/perfcounter.html.96a88381.js similarity index 69% rename from assets/perfcounter.html.19590f54.js rename to assets/perfcounter.html.96a88381.js index 66d2babcc..5353d80cf 100644 --- a/assets/perfcounter.html.19590f54.js +++ b/assets/perfcounter.html.96a88381.js @@ -1,4 +1,4 @@ -import{_ as s,o as d,c as i,a as e,b as r,e as a,d as t,r as l}from"./app.524ecf5c.js";const c={},o=e("h1",{id:"perfcounter",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#perfcounter","aria-hidden":"true"},"#"),a(" perfcounter")],-1),v={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-perfcounter",target:"_blank",rel:"noopener noreferrer"},u=e("code",null,"perfcounter",-1),m=a("\u5728\u7EBF\u6559\u7A0B"),p=t(`

    \u63D0\u793A

    \u67E5\u770B\u5F53\u524D JVM \u7684 Perf Counter \u4FE1\u606F

    \u4F7F\u7528\u53C2\u8003

    $ perfcounter
    +import{_ as e,o as a,c as n,d as s}from"./app.e2427bec.js";const d={},i=s(`

    perfcounter

    \u63D0\u793A

    \u67E5\u770B\u5F53\u524D JVM \u7684 Perf Counter \u4FE1\u606F

    \u4F7F\u7528\u53C2\u8003

    $ perfcounter
      java.ci.totalTime                            2325637411
      java.cls.loadedClasses                       3403
      java.cls.sharedLoadedClasses                 0
    @@ -17,4 +17,4 @@ import{_ as s,o as d,c as i,a as e,b as r,e as a,d as t,r as l}from"./app.524ecf
      java.cls.sharedUnloadedClasses         Monotonic     Events       0
      java.cls.unloadedClasses               Monotonic     Events       0
     

    jdk9 \u4EE5\u4E0A\u7684\u5E94\u7528

    \u5982\u679C\u6CA1\u6709\u6253\u5370\u51FA\u4FE1\u606F\uFF0C\u5E94\u7528\u5728\u542F\u52A8\u65F6\uFF0C\u52A0\u4E0B\u9762\u7684\u53C2\u6570\uFF1A

    --add-opens java.base/jdk.internal.perf=ALL-UNNAMED --add-exports java.base/jdk.internal.perf=ALL-UNNAMED --add-opens java.management/sun.management.counter.perf=ALL-UNNAMED --add-opens java.management/sun.management.counter=ALL-UNNAMED
    -
    `,8);function h(b,f){const n=l("ExternalLinkIcon");return d(),i("div",null,[o,e("p",null,[e("a",v,[u,m,r(n)])]),p])}const _=s(c,[["render",h],["__file","perfcounter.html.vue"]]);export{_ as default}; +
    `,9),r=[i];function l(t,c){return a(),n("div",null,r)}const o=e(d,[["render",l],["__file","perfcounter.html.vue"]]);export{o as default}; diff --git a/assets/perfcounter.html.0dc8c8a4.js b/assets/perfcounter.html.e11ca3a1.js similarity index 70% rename from assets/perfcounter.html.0dc8c8a4.js rename to assets/perfcounter.html.e11ca3a1.js index 5b18207d7..0d43e9175 100644 --- a/assets/perfcounter.html.0dc8c8a4.js +++ b/assets/perfcounter.html.e11ca3a1.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as d,a as e,b as t,e as a,d as r,r as o}from"./app.524ecf5c.js";const l={},c=e("h1",{id:"perfcounter",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#perfcounter","aria-hidden":"true"},"#"),a(" perfcounter")],-1),v={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-perfcounter",target:"_blank",rel:"noopener noreferrer"},u=e("code",null,"perfcounter",-1),m=a(" online tutorial"),p=r(`

    TIP

    Check the current JVM Perf Counter information.

    Usage

    $ perfcounter
    +import{_ as e,o as a,c as n,d as s}from"./app.e2427bec.js";const i={},d=s(`

    perfcounter

    TIP

    Check the current JVM Perf Counter information.

    Usage

    $ perfcounter
      java.ci.totalTime                            2325637411
      java.cls.loadedClasses                       3403
      java.cls.sharedLoadedClasses                 0
    @@ -17,4 +17,4 @@ import{_ as s,o as i,c as d,a as e,b as t,e as a,d as r,r as o}from"./app.524ecf
      java.cls.sharedUnloadedClasses         Monotonic     Events       0
      java.cls.unloadedClasses               Monotonic     Events       0
     

    JVM above JDK9

    If the information is not printed, when the application starts, add the following parameters:

    --add-opens java.base/jdk.internal.perf=ALL-UNNAMED --add-exports java.base/jdk.internal.perf=ALL-UNNAMED --add-opens java.management/sun.management.counter.perf=ALL-UNNAMED --add-opens java.management/sun.management.counter=ALL-UNNAMED
    -
    `,8);function h(b,f){const n=o("ExternalLinkIcon");return i(),d("div",null,[c,e("p",null,[e("a",v,[u,m,t(n)])]),p])}const _=s(l,[["render",h],["__file","perfcounter.html.vue"]]);export{_ as default}; +
    `,9),r=[d];function t(l,o){return a(),n("div",null,r)}const v=e(i,[["render",t],["__file","perfcounter.html.vue"]]);export{v as default}; diff --git a/assets/profiler.html.f515f668.js b/assets/profiler.html.0cd67a30.js similarity index 98% rename from assets/profiler.html.f515f668.js rename to assets/profiler.html.0cd67a30.js index 81d4c0f7a..92c9d0f5b 100644 --- a/assets/profiler.html.f515f668.js +++ b/assets/profiler.html.0cd67a30.js @@ -1 +1 @@ -const l=JSON.parse('{"key":"v-13eae420","path":"/doc/profiler.html","title":"profiler","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u542F\u52A8 profiler","slug":"\u542F\u52A8-profiler","link":"#\u542F\u52A8-profiler","children":[]},{"level":2,"title":"\u83B7\u53D6\u5DF2\u91C7\u96C6\u7684 sample \u7684\u6570\u91CF","slug":"\u83B7\u53D6\u5DF2\u91C7\u96C6\u7684-sample-\u7684\u6570\u91CF","link":"#\u83B7\u53D6\u5DF2\u91C7\u96C6\u7684-sample-\u7684\u6570\u91CF","children":[]},{"level":2,"title":"\u67E5\u770B profiling \u72B6\u6001","slug":"\u67E5\u770B-profiling-\u72B6\u6001","link":"#\u67E5\u770B-profiling-\u72B6\u6001","children":[]},{"level":2,"title":"\u67E5\u770B profiler \u81EA\u8EAB\u7684\u5185\u5B58\u5360\u7528","slug":"\u67E5\u770B-profiler-\u81EA\u8EAB\u7684\u5185\u5B58\u5360\u7528","link":"#\u67E5\u770B-profiler-\u81EA\u8EAB\u7684\u5185\u5B58\u5360\u7528","children":[]},{"level":2,"title":"\u505C\u6B62 profiler","slug":"\u505C\u6B62-profiler","link":"#\u505C\u6B62-profiler","children":[{"level":3,"title":"\u751F\u6210\u706B\u7130\u56FE\u683C\u5F0F\u7ED3\u679C","slug":"\u751F\u6210\u706B\u7130\u56FE\u683C\u5F0F\u7ED3\u679C","link":"#\u751F\u6210\u706B\u7130\u56FE\u683C\u5F0F\u7ED3\u679C","children":[]},{"level":3,"title":"\u751F\u6210 LLM \u53CB\u597D\u7684 Markdown \u62A5\u544A","slug":"\u751F\u6210-llm-\u53CB\u597D\u7684-markdown-\u62A5\u544A","link":"#\u751F\u6210-llm-\u53CB\u597D\u7684-markdown-\u62A5\u544A","children":[]}]},{"level":2,"title":"\u901A\u8FC7\u6D4F\u89C8\u5668\u67E5\u770B arthas-output \u4E0B\u9762\u7684 profiler \u7ED3\u679C","slug":"\u901A\u8FC7\u6D4F\u89C8\u5668\u67E5\u770B-arthas-output-\u4E0B\u9762\u7684-profiler-\u7ED3\u679C","link":"#\u901A\u8FC7\u6D4F\u89C8\u5668\u67E5\u770B-arthas-output-\u4E0B\u9762\u7684-profiler-\u7ED3\u679C","children":[]},{"level":2,"title":"profiler \u652F\u6301\u7684 events","slug":"profiler-\u652F\u6301\u7684-events","link":"#profiler-\u652F\u6301\u7684-events","children":[]},{"level":2,"title":"\u6062\u590D\u91C7\u6837","slug":"\u6062\u590D\u91C7\u6837","link":"#\u6062\u590D\u91C7\u6837","children":[]},{"level":2,"title":"Dump \u5206\u6790\u7ED3\u679C","slug":"dump-\u5206\u6790\u7ED3\u679C","link":"#dump-\u5206\u6790\u7ED3\u679C","children":[]},{"level":2,"title":"\u4F7F\u7528execute\u6765\u6267\u884C\u590D\u6742\u7684\u547D\u4EE4","slug":"\u4F7F\u7528execute\u6765\u6267\u884C\u590D\u6742\u7684\u547D\u4EE4","link":"#\u4F7F\u7528execute\u6765\u6267\u884C\u590D\u6742\u7684\u547D\u4EE4","children":[]},{"level":2,"title":"\u67E5\u770B\u6240\u6709\u652F\u6301\u7684 action","slug":"\u67E5\u770B\u6240\u6709\u652F\u6301\u7684-action","link":"#\u67E5\u770B\u6240\u6709\u652F\u6301\u7684-action","children":[]},{"level":2,"title":"\u67E5\u770B\u7248\u672C","slug":"\u67E5\u770B\u7248\u672C","link":"#\u67E5\u770B\u7248\u672C","children":[]},{"level":2,"title":"\u914D\u7F6E Java \u6808\u6DF1\u5EA6","slug":"\u914D\u7F6E-java-\u6808\u6DF1\u5EA6","link":"#\u914D\u7F6E-java-\u6808\u6DF1\u5EA6","children":[]},{"level":2,"title":"\u5404\u7EBF\u7A0B\u5206\u522B\u8FDB\u884C profiling","slug":"\u5404\u7EBF\u7A0B\u5206\u522B\u8FDB\u884C-profiling","link":"#\u5404\u7EBF\u7A0B\u5206\u522B\u8FDB\u884C-profiling","children":[]},{"level":2,"title":"\u914D\u7F6E include/exclude \u6765\u8FC7\u6EE4\u6570\u636E","slug":"\u914D\u7F6E-include-exclude-\u6765\u8FC7\u6EE4\u6570\u636E","link":"#\u914D\u7F6E-include-exclude-\u6765\u8FC7\u6EE4\u6570\u636E","children":[]},{"level":2,"title":"\u6307\u5B9A\u6267\u884C\u65F6\u95F4","slug":"\u6307\u5B9A\u6267\u884C\u65F6\u95F4","link":"#\u6307\u5B9A\u6267\u884C\u65F6\u95F4","children":[]},{"level":2,"title":"\u751F\u6210 jfr \u683C\u5F0F\u7ED3\u679C","slug":"\u751F\u6210-jfr-\u683C\u5F0F\u7ED3\u679C","link":"#\u751F\u6210-jfr-\u683C\u5F0F\u7ED3\u679C","children":[]},{"level":2,"title":"\u63A7\u5236\u5206\u6790\u7ED3\u679C\u7684\u683C\u5F0F","slug":"\u63A7\u5236\u5206\u6790\u7ED3\u679C\u7684\u683C\u5F0F","link":"#\u63A7\u5236\u5206\u6790\u7ED3\u679C\u7684\u683C\u5F0F","children":[]},{"level":2,"title":"\u751F\u6210\u7684\u706B\u7130\u56FE\u91CC\u7684 unknown","slug":"\u751F\u6210\u7684\u706B\u7130\u56FE\u91CC\u7684-unknown","link":"#\u751F\u6210\u7684\u706B\u7130\u56FE\u91CC\u7684-unknown","children":[]},{"level":2,"title":"\u914D\u7F6E locks/allocations \u6A21\u5F0F\u7684\u9608\u503C","slug":"\u914D\u7F6E-locks-allocations-\u6A21\u5F0F\u7684\u9608\u503C","link":"#\u914D\u7F6E-locks-allocations-\u6A21\u5F0F\u7684\u9608\u503C","children":[]},{"level":2,"title":"\u914D\u7F6E JFR \u5757","slug":"\u914D\u7F6E-jfr-\u5757","link":"#\u914D\u7F6E-jfr-\u5757","children":[]},{"level":2,"title":"\u5C06\u7EBF\u7A0B\u6309\u7167\u8C03\u5EA6\u7B56\u7565\u5206\u7EC4","slug":"\u5C06\u7EBF\u7A0B\u6309\u7167\u8C03\u5EA6\u7B56\u7565\u5206\u7EC4","link":"#\u5C06\u7EBF\u7A0B\u6309\u7167\u8C03\u5EA6\u7B56\u7565\u5206\u7EC4","children":[]},{"level":2,"title":"\u4EC5\u7528\u672A\u9500\u6BC1\u5BF9\u8C61\u6784\u5EFA\u5185\u5B58\u5206\u6790\u7ED3\u679C","slug":"\u4EC5\u7528\u672A\u9500\u6BC1\u5BF9\u8C61\u6784\u5EFA\u5185\u5B58\u5206\u6790\u7ED3\u679C","link":"#\u4EC5\u7528\u672A\u9500\u6BC1\u5BF9\u8C61\u6784\u5EFA\u5185\u5B58\u5206\u6790\u7ED3\u679C","children":[]},{"level":2,"title":"\u914D\u7F6E\u6536\u96C6 C \u6808\u5E27\u7684\u65B9\u6CD5","slug":"\u914D\u7F6E\u6536\u96C6-c-\u6808\u5E27\u7684\u65B9\u6CD5","link":"#\u914D\u7F6E\u6536\u96C6-c-\u6808\u5E27\u7684\u65B9\u6CD5","children":[]},{"level":2,"title":"\u5F53\u6307\u5B9A Native \u51FD\u6570\u6267\u884C\u65F6\u5F00\u59CB/\u505C\u6B62 Profiling","slug":"\u5F53\u6307\u5B9A-native-\u51FD\u6570\u6267\u884C\u65F6\u5F00\u59CB-\u505C\u6B62-profiling","link":"#\u5F53\u6307\u5B9A-native-\u51FD\u6570\u6267\u884C\u65F6\u5F00\u59CB-\u505C\u6B62-profiling","children":[{"level":3,"title":"Time-to-Safepoint Profiling","slug":"time-to-safepoint-profiling","link":"#time-to-safepoint-profiling","children":[]}]},{"level":2,"title":"\u4F7F\u7528 profiler \u8BB0\u5F55\u7684 event \u751F\u6210 JFR \u6587\u4EF6","slug":"\u4F7F\u7528-profiler-\u8BB0\u5F55\u7684-event-\u751F\u6210-jfr-\u6587\u4EF6","link":"#\u4F7F\u7528-profiler-\u8BB0\u5F55\u7684-event-\u751F\u6210-jfr-\u6587\u4EF6","children":[]},{"level":2,"title":"\u5468\u671F\u6027\u4FDD\u5B58\u7ED3\u679C","slug":"\u5468\u671F\u6027\u4FDD\u5B58\u7ED3\u679C","link":"#\u5468\u671F\u6027\u4FDD\u5B58\u7ED3\u679C","children":[]},{"level":2,"title":"--timeout \u9009\u9879","slug":"timeout-\u9009\u9879","link":"#timeout-\u9009\u9879","children":[]},{"level":2,"title":"--wall \u9009\u9879","slug":"wall-\u9009\u9879","link":"#wall-\u9009\u9879","children":[]},{"level":2,"title":"ctimer\u4E8B\u4EF6","slug":"ctimer\u4E8B\u4EF6","link":"#ctimer\u4E8B\u4EF6","children":[]},{"level":2,"title":"vtable\u7279\u6027","slug":"vtable\u7279\u6027","link":"#vtable\u7279\u6027","children":[]},{"level":2,"title":"comptask \u7279\u6027","slug":"comptask-\u7279\u6027","link":"#comptask-\u7279\u6027","children":[]},{"level":2,"title":"\u914D\u7F6E\u66FF\u4EE3\u7684\u5206\u6790\u4FE1\u53F7","slug":"\u914D\u7F6E\u66FF\u4EE3\u7684\u5206\u6790\u4FE1\u53F7","link":"#\u914D\u7F6E\u66FF\u4EE3\u7684\u5206\u6790\u4FE1\u53F7","children":[]},{"level":2,"title":"--clock \u9009\u9879","slug":"clock-\u9009\u9879","link":"#clock-\u9009\u9879","children":[]},{"level":2,"title":"--norm \u9009\u9879","slug":"norm-\u9009\u9879","link":"#norm-\u9009\u9879","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/profiler.md","version":"4.3.3"}');export{l as data}; +const l=JSON.parse('{"key":"v-13eae420","path":"/doc/profiler.html","title":"profiler","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u542F\u52A8 profiler","slug":"\u542F\u52A8-profiler","link":"#\u542F\u52A8-profiler","children":[]},{"level":2,"title":"\u83B7\u53D6\u5DF2\u91C7\u96C6\u7684 sample \u7684\u6570\u91CF","slug":"\u83B7\u53D6\u5DF2\u91C7\u96C6\u7684-sample-\u7684\u6570\u91CF","link":"#\u83B7\u53D6\u5DF2\u91C7\u96C6\u7684-sample-\u7684\u6570\u91CF","children":[]},{"level":2,"title":"\u67E5\u770B profiling \u72B6\u6001","slug":"\u67E5\u770B-profiling-\u72B6\u6001","link":"#\u67E5\u770B-profiling-\u72B6\u6001","children":[]},{"level":2,"title":"\u67E5\u770B profiler \u81EA\u8EAB\u7684\u5185\u5B58\u5360\u7528","slug":"\u67E5\u770B-profiler-\u81EA\u8EAB\u7684\u5185\u5B58\u5360\u7528","link":"#\u67E5\u770B-profiler-\u81EA\u8EAB\u7684\u5185\u5B58\u5360\u7528","children":[]},{"level":2,"title":"\u505C\u6B62 profiler","slug":"\u505C\u6B62-profiler","link":"#\u505C\u6B62-profiler","children":[{"level":3,"title":"\u751F\u6210\u706B\u7130\u56FE\u683C\u5F0F\u7ED3\u679C","slug":"\u751F\u6210\u706B\u7130\u56FE\u683C\u5F0F\u7ED3\u679C","link":"#\u751F\u6210\u706B\u7130\u56FE\u683C\u5F0F\u7ED3\u679C","children":[]},{"level":3,"title":"\u751F\u6210 LLM \u53CB\u597D\u7684 Markdown \u62A5\u544A","slug":"\u751F\u6210-llm-\u53CB\u597D\u7684-markdown-\u62A5\u544A","link":"#\u751F\u6210-llm-\u53CB\u597D\u7684-markdown-\u62A5\u544A","children":[]}]},{"level":2,"title":"\u901A\u8FC7\u6D4F\u89C8\u5668\u67E5\u770B arthas-output \u4E0B\u9762\u7684 profiler \u7ED3\u679C","slug":"\u901A\u8FC7\u6D4F\u89C8\u5668\u67E5\u770B-arthas-output-\u4E0B\u9762\u7684-profiler-\u7ED3\u679C","link":"#\u901A\u8FC7\u6D4F\u89C8\u5668\u67E5\u770B-arthas-output-\u4E0B\u9762\u7684-profiler-\u7ED3\u679C","children":[]},{"level":2,"title":"profiler \u652F\u6301\u7684 events","slug":"profiler-\u652F\u6301\u7684-events","link":"#profiler-\u652F\u6301\u7684-events","children":[]},{"level":2,"title":"\u6062\u590D\u91C7\u6837","slug":"\u6062\u590D\u91C7\u6837","link":"#\u6062\u590D\u91C7\u6837","children":[]},{"level":2,"title":"Dump \u5206\u6790\u7ED3\u679C","slug":"dump-\u5206\u6790\u7ED3\u679C","link":"#dump-\u5206\u6790\u7ED3\u679C","children":[]},{"level":2,"title":"\u4F7F\u7528execute\u6765\u6267\u884C\u590D\u6742\u7684\u547D\u4EE4","slug":"\u4F7F\u7528execute\u6765\u6267\u884C\u590D\u6742\u7684\u547D\u4EE4","link":"#\u4F7F\u7528execute\u6765\u6267\u884C\u590D\u6742\u7684\u547D\u4EE4","children":[]},{"level":2,"title":"\u67E5\u770B\u6240\u6709\u652F\u6301\u7684 action","slug":"\u67E5\u770B\u6240\u6709\u652F\u6301\u7684-action","link":"#\u67E5\u770B\u6240\u6709\u652F\u6301\u7684-action","children":[]},{"level":2,"title":"\u67E5\u770B\u7248\u672C","slug":"\u67E5\u770B\u7248\u672C","link":"#\u67E5\u770B\u7248\u672C","children":[]},{"level":2,"title":"\u914D\u7F6E Java \u6808\u6DF1\u5EA6","slug":"\u914D\u7F6E-java-\u6808\u6DF1\u5EA6","link":"#\u914D\u7F6E-java-\u6808\u6DF1\u5EA6","children":[]},{"level":2,"title":"\u5404\u7EBF\u7A0B\u5206\u522B\u8FDB\u884C profiling","slug":"\u5404\u7EBF\u7A0B\u5206\u522B\u8FDB\u884C-profiling","link":"#\u5404\u7EBF\u7A0B\u5206\u522B\u8FDB\u884C-profiling","children":[]},{"level":2,"title":"\u914D\u7F6E include/exclude \u6765\u8FC7\u6EE4\u6570\u636E","slug":"\u914D\u7F6E-include-exclude-\u6765\u8FC7\u6EE4\u6570\u636E","link":"#\u914D\u7F6E-include-exclude-\u6765\u8FC7\u6EE4\u6570\u636E","children":[]},{"level":2,"title":"\u6307\u5B9A\u6267\u884C\u65F6\u95F4","slug":"\u6307\u5B9A\u6267\u884C\u65F6\u95F4","link":"#\u6307\u5B9A\u6267\u884C\u65F6\u95F4","children":[]},{"level":2,"title":"\u751F\u6210 jfr \u683C\u5F0F\u7ED3\u679C","slug":"\u751F\u6210-jfr-\u683C\u5F0F\u7ED3\u679C","link":"#\u751F\u6210-jfr-\u683C\u5F0F\u7ED3\u679C","children":[]},{"level":2,"title":"\u63A7\u5236\u5206\u6790\u7ED3\u679C\u7684\u683C\u5F0F","slug":"\u63A7\u5236\u5206\u6790\u7ED3\u679C\u7684\u683C\u5F0F","link":"#\u63A7\u5236\u5206\u6790\u7ED3\u679C\u7684\u683C\u5F0F","children":[]},{"level":2,"title":"\u751F\u6210\u7684\u706B\u7130\u56FE\u91CC\u7684 unknown","slug":"\u751F\u6210\u7684\u706B\u7130\u56FE\u91CC\u7684-unknown","link":"#\u751F\u6210\u7684\u706B\u7130\u56FE\u91CC\u7684-unknown","children":[]},{"level":2,"title":"\u914D\u7F6E locks/allocations \u6A21\u5F0F\u7684\u9608\u503C","slug":"\u914D\u7F6E-locks-allocations-\u6A21\u5F0F\u7684\u9608\u503C","link":"#\u914D\u7F6E-locks-allocations-\u6A21\u5F0F\u7684\u9608\u503C","children":[]},{"level":2,"title":"\u914D\u7F6E JFR \u5757","slug":"\u914D\u7F6E-jfr-\u5757","link":"#\u914D\u7F6E-jfr-\u5757","children":[]},{"level":2,"title":"\u5C06\u7EBF\u7A0B\u6309\u7167\u8C03\u5EA6\u7B56\u7565\u5206\u7EC4","slug":"\u5C06\u7EBF\u7A0B\u6309\u7167\u8C03\u5EA6\u7B56\u7565\u5206\u7EC4","link":"#\u5C06\u7EBF\u7A0B\u6309\u7167\u8C03\u5EA6\u7B56\u7565\u5206\u7EC4","children":[]},{"level":2,"title":"\u4EC5\u7528\u672A\u9500\u6BC1\u5BF9\u8C61\u6784\u5EFA\u5185\u5B58\u5206\u6790\u7ED3\u679C","slug":"\u4EC5\u7528\u672A\u9500\u6BC1\u5BF9\u8C61\u6784\u5EFA\u5185\u5B58\u5206\u6790\u7ED3\u679C","link":"#\u4EC5\u7528\u672A\u9500\u6BC1\u5BF9\u8C61\u6784\u5EFA\u5185\u5B58\u5206\u6790\u7ED3\u679C","children":[]},{"level":2,"title":"\u914D\u7F6E\u6536\u96C6 C \u6808\u5E27\u7684\u65B9\u6CD5","slug":"\u914D\u7F6E\u6536\u96C6-c-\u6808\u5E27\u7684\u65B9\u6CD5","link":"#\u914D\u7F6E\u6536\u96C6-c-\u6808\u5E27\u7684\u65B9\u6CD5","children":[]},{"level":2,"title":"\u5F53\u6307\u5B9A Native \u51FD\u6570\u6267\u884C\u65F6\u5F00\u59CB/\u505C\u6B62 Profiling","slug":"\u5F53\u6307\u5B9A-native-\u51FD\u6570\u6267\u884C\u65F6\u5F00\u59CB-\u505C\u6B62-profiling","link":"#\u5F53\u6307\u5B9A-native-\u51FD\u6570\u6267\u884C\u65F6\u5F00\u59CB-\u505C\u6B62-profiling","children":[{"level":3,"title":"Time-to-Safepoint Profiling","slug":"time-to-safepoint-profiling","link":"#time-to-safepoint-profiling","children":[]}]},{"level":2,"title":"\u4F7F\u7528 profiler \u8BB0\u5F55\u7684 event \u751F\u6210 JFR \u6587\u4EF6","slug":"\u4F7F\u7528-profiler-\u8BB0\u5F55\u7684-event-\u751F\u6210-jfr-\u6587\u4EF6","link":"#\u4F7F\u7528-profiler-\u8BB0\u5F55\u7684-event-\u751F\u6210-jfr-\u6587\u4EF6","children":[]},{"level":2,"title":"\u5468\u671F\u6027\u4FDD\u5B58\u7ED3\u679C","slug":"\u5468\u671F\u6027\u4FDD\u5B58\u7ED3\u679C","link":"#\u5468\u671F\u6027\u4FDD\u5B58\u7ED3\u679C","children":[]},{"level":2,"title":"--timeout \u9009\u9879","slug":"timeout-\u9009\u9879","link":"#timeout-\u9009\u9879","children":[]},{"level":2,"title":"--wall \u9009\u9879","slug":"wall-\u9009\u9879","link":"#wall-\u9009\u9879","children":[]},{"level":2,"title":"ctimer\u4E8B\u4EF6","slug":"ctimer\u4E8B\u4EF6","link":"#ctimer\u4E8B\u4EF6","children":[]},{"level":2,"title":"vtable\u7279\u6027","slug":"vtable\u7279\u6027","link":"#vtable\u7279\u6027","children":[]},{"level":2,"title":"comptask \u7279\u6027","slug":"comptask-\u7279\u6027","link":"#comptask-\u7279\u6027","children":[]},{"level":2,"title":"\u914D\u7F6E\u66FF\u4EE3\u7684\u5206\u6790\u4FE1\u53F7","slug":"\u914D\u7F6E\u66FF\u4EE3\u7684\u5206\u6790\u4FE1\u53F7","link":"#\u914D\u7F6E\u66FF\u4EE3\u7684\u5206\u6790\u4FE1\u53F7","children":[]},{"level":2,"title":"--clock \u9009\u9879","slug":"clock-\u9009\u9879","link":"#clock-\u9009\u9879","children":[]},{"level":2,"title":"--norm \u9009\u9879","slug":"norm-\u9009\u9879","link":"#norm-\u9009\u9879","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/profiler.md","version":"4.3.5"}');export{l as data}; diff --git a/assets/profiler.html.887a8a7c.js b/assets/profiler.html.3f6cfb27.js similarity index 84% rename from assets/profiler.html.887a8a7c.js rename to assets/profiler.html.3f6cfb27.js index eb9c4611c..e865a54d0 100644 --- a/assets/profiler.html.887a8a7c.js +++ b/assets/profiler.html.3f6cfb27.js @@ -1,4 +1,4 @@ -import{_ as t,a as o}from"./arthas-output-svg.30f64f53.js";import{_ as r,o as l,c as d,a,b as i,e,d as n,r as c}from"./app.524ecf5c.js";const p={},h=a("h1",{id:"profiler",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#profiler","aria-hidden":"true"},"#"),e(" profiler")],-1),u={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-profiler",target:"_blank",rel:"noopener noreferrer"},m=a("code",null,"profiler",-1),f=e(" online tutorial"),v={class:"custom-container tip"},b=a("p",{class:"custom-container-title"},"TIP",-1),g=e("Generate a flame graph using "),_={href:"https://github.com/jvm-profiling-tools/async-profiler",target:"_blank",rel:"noopener noreferrer"},y=e("async-profiler"),k=a("p",null,[e("The "),a("code",null,"profiler"),e(" command supports generating flame graph for application hotspots.")],-1),x=a("p",null,[e("The basic usage of the "),a("code",null,"profiler"),e(" command is "),a("code",null,"profiler action [actionArg]")],-1),w=e("The arguments of "),T=a("code",null,"profiler",-1),C=e(" command basically keeps consistent with upstream project "),j={href:"https://github.com/async-profiler/async-profiler",target:"_blank",rel:"noopener noreferrer"},S=e("async-profiler"),F=e(", you can refer to its README, Github Discussions and other documentations for further information of usage."),I=n(`

    Supported Options

    NameSpecification
    actionAction to execute
    actionArgAttribute 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

    $ profiler start
    +import{_ as t,a as o}from"./arthas-output-svg.30f64f53.js";import{_ as r,o as l,c as d,a,b as i,e,d as n,r as c}from"./app.e2427bec.js";const p={},h=a("h1",{id:"profiler",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#profiler","aria-hidden":"true"},"#"),e(" profiler")],-1),u={class:"custom-container tip"},m=a("p",{class:"custom-container-title"},"TIP",-1),f=e("Generate a flame graph using "),v={href:"https://github.com/jvm-profiling-tools/async-profiler",target:"_blank",rel:"noopener noreferrer"},b=e("async-profiler"),g=a("p",null,[e("The "),a("code",null,"profiler"),e(" command supports generating flame graph for application hotspots.")],-1),_=a("p",null,[e("The basic usage of the "),a("code",null,"profiler"),e(" command is "),a("code",null,"profiler action [actionArg]")],-1),y=e("The arguments of "),k=a("code",null,"profiler",-1),x=e(" command basically keeps consistent with upstream project "),w={href:"https://github.com/async-profiler/async-profiler",target:"_blank",rel:"noopener noreferrer"},T=e("async-profiler"),C=e(", you can refer to its README, Github Discussions and other documentations for further information of usage."),j=n(`

    Supported Options

    NameSpecification
    actionAction to execute
    actionArgAttribute 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

    $ profiler start
     Started [cpu] profiling
     

    TIP

    By default, the sample event is cpu. Other valid profiling modes can be specified with the --event parameter, see relevant contents below.

    Get the number of samples collected

    $ profiler getSamples
     23
    @@ -10,14 +10,14 @@ Call trace storage:   10244 KB
             Code cache:   12890 KB
     ------------------------------
                  Total:   23206 KB
    -

    Stop profiler

    Generating flame graph results

    `,14),J=e("By default, the result file is "),P=a("code",null,"html",-1),G=e(" file in "),N={href:"https://github.com/BrendanGregg/FlameGraph",target:"_blank",rel:"noopener noreferrer"},U=e("Flame Graph"),O=e(" format. You can also specify other format with the "),M=a("code",null,"-o",-1),R=e(" or "),W=a("code",null,"--format",-1),E=e(" parameter, including flat, traces, collapsed, flamegraph, tree, jfr, md:"),B=n(`

    Generate LLM-friendly Markdown report

    When --format md (or md=N) is specified, Arthas generates a structured Markdown report based on async-profiler collapsed output, which is easy to copy/paste to an LLM or grep in terminal. The report includes:

    • Top N Hotspots (self)
    • Call Tree (truncated by samples)
    • Function Details (top stacks per hotspot)
    $ profiler stop --format md
    +

    Stop profiler

    Generating flame graph results

    `,14),S=e("By default, the result file is "),F=a("code",null,"html",-1),I=e(" file in "),J={href:"https://github.com/BrendanGregg/FlameGraph",target:"_blank",rel:"noopener noreferrer"},P=e("Flame Graph"),G=e(" format. You can also specify other format with the "),N=a("code",null,"-o",-1),U=e(" or "),O=a("code",null,"--format",-1),M=e(" parameter, including flat, traces, collapsed, flamegraph, tree, jfr, md:"),R=n(`

    Generate LLM-friendly Markdown report

    When --format md (or md=N) is specified, Arthas generates a structured Markdown report based on async-profiler collapsed output, which is easy to copy/paste to an LLM or grep in terminal. The report includes:

    • Top N Hotspots (self)
    • Call Tree (truncated by samples)
    • Function Details (top stacks per hotspot)
    $ profiler stop --format md
     

    Write to file (optional):

    $ profiler stop --format md --file /tmp/profile.md
     

    If --file ends with .md and --format is not specified, Arthas will infer Markdown output automatically:

    $ profiler stop --file /tmp/profile.md
     

    Set TopN (optional, default 10):

    $ profiler stop --format md=20
     
    $ profiler stop --format flamegraph
     profiler output file: /tmp/test/arthas-output/20211207-111550.html
     OK
    -

    When extension of filename in --file parameter is html or jfr, the output format can be infered. For example, --file /tmp/result.html will generate flamegraph automatically.

    View profiler results under arthas-output via browser

    `,13),L=e("By default, arthas uses port 3658, which can be opened: "),$={href:"http://localhost:3658/arthas-output/",target:"_blank",rel:"noopener noreferrer"},V=e("http://localhost:3658/arthas-output/"),A=e(" View the "),z=a("code",null,"arthas-output",-1),D=e(" directory below Profiler results:"),Y=n('

    Click to view specific results:

    TIP

    If using the chrome browser, may need to be refreshed multiple times.

    Profiler supported events

    Under different platforms and different OSs, the supported events are different. For example, under macos:

    $ profiler list
    +

    When extension of filename in --file parameter is html or jfr, the output format can be infered. For example, --file /tmp/result.html will generate flamegraph automatically.

    View profiler results under arthas-output via browser

    `,13),W=e("By default, arthas uses port 3658, which can be opened: "),E={href:"http://localhost:3658/arthas-output/",target:"_blank",rel:"noopener noreferrer"},B=e("http://localhost:3658/arthas-output/"),L=e(" View the "),$=a("code",null,"arthas-output",-1),V=e(" directory below Profiler results:"),A=n('

    Click to view specific results:

    TIP

    If using the chrome browser, may need to be refreshed multiple times.

    Profiler supported events

    Under different platforms and different OSs, the supported events are different. For example, under macos:

    $ profiler list
     Basic events:
       cpu
       alloc
    @@ -54,14 +54,14 @@ Perf events:
       trace:tracepoint
       kprobe:func
       uprobe:path
    -
    `,9),q=e("If you encounter the permissions/configuration issues of the OS itself and then missing some events, you can refer to the "),K={href:"https://github.com/jvm-profiling-tools/async-profiler",target:"_blank",rel:"noopener noreferrer"},H=e("async-profiler"),X=e(" documentation."),Q=n(`

    You can use the --event parameter to specify the event to sample, for example, alloc event means heap memory allocation profiling:

    $ profiler start --event alloc
    +
    `,9),z=e("If you encounter the permissions/configuration issues of the OS itself and then missing some events, you can refer to the "),D={href:"https://github.com/jvm-profiling-tools/async-profiler",target:"_blank",rel:"noopener noreferrer"},Y=e("async-profiler"),q=e(" documentation."),K=n(`

    You can use the --event parameter to specify the event to sample, for example, alloc event means heap memory allocation profiling:

    $ profiler start --event alloc
     

    Resume sampling

    $ profiler resume
     Started [cpu] profiling
     

    The difference between start and resume is: start will clean existing result of last profiling before starting, resume will retain the existing result and add result of this time to it.

    You can verify the number of samples by executing profiler getSamples.

    Dump action

    $ profiler dump
     OK
     

    The dump action saves profiling result to default file or specified file, but profiling will continue. That means if you start profiling and dump after 5 seconds, then dump after 2 seconds again, you will get 2 result files, the first one contains profiling result of 0~5 seconds and the second one contains that of 0~7 seconds.

    Use execute action to execute complex commands

    For example, start sampling:

    profiler execute 'start,framebuf=5000000'
     

    Stop sampling and save to the specified file:

    profiler execute 'stop,file=/tmp/result.html'
    -
    `,14),Z=e("Specific format reference: "),ee={href:"https://github.com/async-profiler/async-profiler/blob/v4.4/src/arguments.cpp#L52",target:"_blank",rel:"noopener noreferrer"},ae=e("arguments.cpp"),se=n(`

    View all supported actions

    $ profiler actions
    +
    `,14),H=e("Specific format reference: "),X={href:"https://github.com/async-profiler/async-profiler/blob/v4.4/src/arguments.cpp#L52",target:"_blank",rel:"noopener noreferrer"},Q=e("arguments.cpp"),Z=n(`

    View all supported actions

    $ profiler actions
     Supported Actions: [resume, dumpCollapsed, getSamples, start, list, version, execute, meminfo, stop, load, dumpFlat, dump, actions, dumpTraces, status]
     

    View version

    $ profiler version
     async-profiler 4.4
    @@ -72,7 +72,7 @@ Copyright The async-profiler authors
     

    Both --include/--exclude support being set multiple times, but need to be configured at the end of the command line. You can also use short parameter format -I/-X. Note that --include/--exclude only supports configuration at stop action or start action with -d/--duration parameter, otherwise it will not take effect.

    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 in start action:

    profiler start --duration 300
     

    Generate jfr format result

    Note that jfr only supports configuration at start. If it is specified at stop, it will not take effect.

    profiler start --file /tmp/test.jfr
     profiler start -o jfr
    -

    The file parameter supports some variables:

    • 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

    Control details in result

    `,25),ie=e("The "),ne=a("code",null,"-s",-1),te=e(" parameter will use simple name instead of Fully qualified name, e.g. "),oe=a("code",null,"MathGame.main",-1),re=e(" instead of "),le=a("code",null,"demo.MathGame.main",-1),de=e(". The "),ce=a("code",null,"-g",-1),pe=e(" parameter will use method signatures instead of method names, e.g. "),he=a("code",null,"demo.MathGame.main([Ljava/lang/String;)V",-1),ue=e(" instead of "),me=a("code",null,"demo.MathGame.main",-1),fe=e(". There are many parameters related to result format details, you can refer to "),ve={href:"https://github.com/async-profiler/async-profiler#readme",target:"_blank",rel:"noopener noreferrer"},be=e("async-profiler README"),ge=e(" and "),_e={href:"https://github.com/async-profiler/async-profiler/discussions",target:"_blank",rel:"noopener noreferrer"},ye=e("async-profiler Github Discussions"),ke=e(" and other information."),xe=n(`

    For example, in command below, -s use simple name for Java class, -g show method signatures, -a will annotate Java methods, -l will prepend library names for native method, --title specify a title for flame graph page, --minwidth will skip frames smaller than 15% in flame graph, --reverse will generate stack-reversed FlameGraph / Call tree.

    profiler stop -s -g -a -l --title <flametitle> --minwidth 15 --reverse
    +

    The file parameter supports some variables:

    • 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

    Control details in result

    `,25),ee=e("The "),ae=a("code",null,"-s",-1),se=e(" parameter will use simple name instead of Fully qualified name, e.g. "),ie=a("code",null,"MathGame.main",-1),ne=e(" instead of "),te=a("code",null,"demo.MathGame.main",-1),oe=e(". The "),re=a("code",null,"-g",-1),le=e(" parameter will use method signatures instead of method names, e.g. "),de=a("code",null,"demo.MathGame.main([Ljava/lang/String;)V",-1),ce=e(" instead of "),pe=a("code",null,"demo.MathGame.main",-1),he=e(". There are many parameters related to result format details, you can refer to "),ue={href:"https://github.com/async-profiler/async-profiler#readme",target:"_blank",rel:"noopener noreferrer"},me=e("async-profiler README"),fe=e(" and "),ve={href:"https://github.com/async-profiler/async-profiler/discussions",target:"_blank",rel:"noopener noreferrer"},be=e("async-profiler Github Discussions"),ge=e(" and other information."),_e=n(`

    For example, in command below, -s use simple name for Java class, -g show method signatures, -a will annotate Java methods, -l will prepend library names for native method, --title specify a title for flame graph page, --minwidth will skip frames smaller than 15% in flame graph, --reverse will generate stack-reversed FlameGraph / Call tree.

    profiler stop -s -g -a -l --title <flametitle> --minwidth 15 --reverse
     

    The 'unknown' in profiler result

    • https://github.com/jvm-profiling-tools/async-profiler/discussions/409

    Config locks/allocations profiling threshold

    When profiling in locks or allocations event, you can use --lock or --alloc to config thresholds, for example:

    profiler start -e lock --lock 10ms
     profiler start -e alloc --alloc 2m
     

    will profile contended locks longer than 10ms (default unit is ns if no unit is specified), or profile allocations with 2m BYTES interval.

    Config JFR chunks

    When using JFR as output format, you can use --chunksize or --chunktime to config approximate size (in bytes, default value is 100MB) and time limits (default value is 1 hour) for a single JFR chunk. For example:

    profiler start -f profile.jfr --chunksize 100m --chunktime 1h
    @@ -85,13 +85,13 @@ profiler start --ttsp 

    Directly specify a list of JFR events, for example, to enable jdk.YoungGarbageCollection and jdk.OldGarbageCollection events:

    profiler start -e cpu --jfrsync +jdk.YoungGarbageCollection+jdk.OldGarbageCollection -f combined.jfr
     

    Notes

    • When specifying a list of events, events are separated by a plus sign + because commas , are used to separate different options.
    • If the --jfrsync parameter does not start with +, it is treated as a preset profile name or a path to a .jfc configuration file.
    • Directly specifying a list of events is particularly useful when the target application is running in a container, without additional file operations.

    Run profiler in a loop

    Use --loop TIME to run profiler in a loop (continuous profiling). The argument is either a clock time (hh:mm:ss) or a loop duration in seconds, minutes, hours, or days. Make sure the filename includes a timestamp pattern, or the output will be overwritten on each iteration. The command below will run profiling endlessly and save records of each hour to a jfr file.

    If the -f parameter is not specified, nothing will be saved. If the -f parameter does not contain %t, it will overwrite the same file repeatedly.

    profiler start --loop 1h -f /var/log/profile-%t.jfr
     

    --timeout option

    profiler start --timeout 300s
    -

    This option specifies the time when profiling will automatically stop. The format is the same as in loop: it is either a wall clock time (12:34:56) or a relative time interval (2h).

    `,51),we=e("Both "),Te=a("code",null,"--loop",-1),Ce=e(" and "),je=a("code",null,"--timeout",-1),Se=e(" are used for "),Fe=a("code",null,"start",-1),Ie=e(" action, for further information refer to "),Je={href:"https://github.com/async-profiler/async-profiler/blob/master/docs/ProfilerOptions.md",target:"_blank",rel:"noopener noreferrer"},Pe=e("async-profiler docs"),Ge=e("."),Ne=n(`

    --wall option

    The -- wall option allows for simultaneous performance analysis of both CPU and Wall Clock. This joint analysis helps to more comprehensively identify and understand performance bottlenecks in applications. --The wall option allows users to set the sampling interval for Wall Clock analysis independently of CPU analysis. For example, by setting - e cpu-i 10-- wall 200, the CPU sampling interval can be set to 10 milliseconds, and the wall clock sampling interval can be set to 200 milliseconds. When conducting joint CPU and Wall Clock analysis, the output format must be set to jfr. This format supports recording the state information of threads (such as State_SUNNABLE or State_SLEEPING) to distinguish between different types of sampling events.

    influence Linux platform: This new feature is only available on the Linux platform. The CPU analysis engine on macOS is already based on Wall clock mode, so there are no additional benefits. Performance overhead: Enabling Wall clock analysis will increase performance overhead, so when analyzing both CPU and Wall clock simultaneously, it is recommended to increase the interval between Wall clocks.

    profiler start -e cpu -i 10 --wall 100 -f out.jfr
    -

    ctimer events

    ctimer events are a new CPU sampling mode based on timer_create, providing accurate CPU sampling without perf_events.

    In some cases, perf_events may not be available, for example due to perf_event_paranoid settings or seccomp restrictions, or in container environments. Although itimer events can work in containers, there may be sampling inaccuracies.

    ctimer events combine the advantages of cpu and itimer:

    • High accuracy: provides accurate CPU sampling.

    • Container-friendly: available in containers by default.

    • Low resource consumption: does not consume file descriptors.

    `,9),Ue=e("**Note that "),Oe=a("code",null,"ctimer",-1),Me=e(" events are currently only supported on "),Re=a("code",null,"Linux",-1),We=e(", not "),Ee=a("code",null,"macOS",-1),Be=e(". ** See "),Le={href:"https://github.com/async-profiler/async-profiler/issues/855",target:"_blank",rel:"noopener noreferrer"},$e=e("async-profiler Github Issues"),Ve=e(" for more information."),Ae=n(`

    Example:

    profiler start -e ctimer -o jfr -f ./out-test.jfr
    -

    vtable Feature

    In some applications, a lot of CPU time is spent in calling megamorphic virtual or interface methods, which is shown as vtable stub or itable stub in performance analysis. This does not help us understand why a specific call site is megamorphic and how to optimize it.

    The vtable feature can add a pseudo frame on top of the vtable stub or itable stub, showing the actual object type being called. This helps to clearly understand the ratio of different receivers at a specific call site.

    `,5),ze=e("This feature is disabled by default and can be enabled with the "),De=a("code",null,"-F vtable",-1),Ye=e(" option (or using "),qe=a("code",null,"features=vtable",-1),Ke=e("). See the "),He={href:"https://github.com/async-profiler/async-profiler/issues/736",target:"_blank",rel:"noopener noreferrer"},Xe=e("async-profiler Github Issues"),Qe=e(" for more information."),Ze=n(`

    Example:

    profiler start -F vtable
    -

    comptask feature

    profiler samples the JIT compiler threads as well as the Java threads, and can show the percentage of CPU consumed by JIT compilation. However, the compilation resource consumption of Java methods varies, and it is useful to know which specific Java methods consume the most CPU time when compiling.

    The comptask feature adds a virtual frame to the stack trace of C1/C2, showing the current task being compiled, that is, the Java method being compiled.

    `,5),ea=e("This feature is disabled by default and can be enabled with the "),aa=a("code",null,"-F comptask",-1),sa=e(" option (or using "),ia=a("code",null,"features=comptask",-1),na=e("). See "),ta={href:"https://github.com/async-profiler/async-profiler/issues/777",target:"_blank",rel:"noopener noreferrer"},oa=e("async-profiler Github Issues"),ra=e(" for more information."),la=n(`

    Example:

    profiler start -F comptask
    -

    Configuring Alternative Profiling Signals

    profiler uses POSIX signals for performance profiling. By default, SIGPROF is used for CPU profiling and SIGVTALRM is used for Wall-Clock profiling. However, this can lead to signal conflicts if your application also uses these signals or if you want to run multiple profiler instances simultaneously.

    You can now use the signal parameter to configure the signal used for profiling to avoid conflicts.

    `,5),da=e("See "),ca={href:"https://github.com/async-profiler/async-profiler/issues/759",target:"_blank",rel:"noopener noreferrer"},pa=e("async-profiler Github Issues"),ha=e(" for more information."),ua=n(`

    Syntax

    profiler start --signal <signal number>
    +

    This option specifies the time when profiling will automatically stop. The format is the same as in loop: it is either a wall clock time (12:34:56) or a relative time interval (2h).

    `,51),ye=e("Both "),ke=a("code",null,"--loop",-1),xe=e(" and "),we=a("code",null,"--timeout",-1),Te=e(" are used for "),Ce=a("code",null,"start",-1),je=e(" action, for further information refer to "),Se={href:"https://github.com/async-profiler/async-profiler/blob/master/docs/ProfilerOptions.md",target:"_blank",rel:"noopener noreferrer"},Fe=e("async-profiler docs"),Ie=e("."),Je=n(`

    --wall option

    The -- wall option allows for simultaneous performance analysis of both CPU and Wall Clock. This joint analysis helps to more comprehensively identify and understand performance bottlenecks in applications. --The wall option allows users to set the sampling interval for Wall Clock analysis independently of CPU analysis. For example, by setting - e cpu-i 10-- wall 200, the CPU sampling interval can be set to 10 milliseconds, and the wall clock sampling interval can be set to 200 milliseconds. When conducting joint CPU and Wall Clock analysis, the output format must be set to jfr. This format supports recording the state information of threads (such as State_SUNNABLE or State_SLEEPING) to distinguish between different types of sampling events.

    influence Linux platform: This new feature is only available on the Linux platform. The CPU analysis engine on macOS is already based on Wall clock mode, so there are no additional benefits. Performance overhead: Enabling Wall clock analysis will increase performance overhead, so when analyzing both CPU and Wall clock simultaneously, it is recommended to increase the interval between Wall clocks.

    profiler start -e cpu -i 10 --wall 100 -f out.jfr
    +

    ctimer events

    ctimer events are a new CPU sampling mode based on timer_create, providing accurate CPU sampling without perf_events.

    In some cases, perf_events may not be available, for example due to perf_event_paranoid settings or seccomp restrictions, or in container environments. Although itimer events can work in containers, there may be sampling inaccuracies.

    ctimer events combine the advantages of cpu and itimer:

    • High accuracy: provides accurate CPU sampling.

    • Container-friendly: available in containers by default.

    • Low resource consumption: does not consume file descriptors.

    `,9),Pe=e("**Note that "),Ge=a("code",null,"ctimer",-1),Ne=e(" events are currently only supported on "),Ue=a("code",null,"Linux",-1),Oe=e(", not "),Me=a("code",null,"macOS",-1),Re=e(". ** See "),We={href:"https://github.com/async-profiler/async-profiler/issues/855",target:"_blank",rel:"noopener noreferrer"},Ee=e("async-profiler Github Issues"),Be=e(" for more information."),Le=n(`

    Example:

    profiler start -e ctimer -o jfr -f ./out-test.jfr
    +

    vtable Feature

    In some applications, a lot of CPU time is spent in calling megamorphic virtual or interface methods, which is shown as vtable stub or itable stub in performance analysis. This does not help us understand why a specific call site is megamorphic and how to optimize it.

    The vtable feature can add a pseudo frame on top of the vtable stub or itable stub, showing the actual object type being called. This helps to clearly understand the ratio of different receivers at a specific call site.

    `,5),$e=e("This feature is disabled by default and can be enabled with the "),Ve=a("code",null,"-F vtable",-1),Ae=e(" option (or using "),ze=a("code",null,"features=vtable",-1),De=e("). See the "),Ye={href:"https://github.com/async-profiler/async-profiler/issues/736",target:"_blank",rel:"noopener noreferrer"},qe=e("async-profiler Github Issues"),Ke=e(" for more information."),He=n(`

    Example:

    profiler start -F vtable
    +

    comptask feature

    profiler samples the JIT compiler threads as well as the Java threads, and can show the percentage of CPU consumed by JIT compilation. However, the compilation resource consumption of Java methods varies, and it is useful to know which specific Java methods consume the most CPU time when compiling.

    The comptask feature adds a virtual frame to the stack trace of C1/C2, showing the current task being compiled, that is, the Java method being compiled.

    `,5),Xe=e("This feature is disabled by default and can be enabled with the "),Qe=a("code",null,"-F comptask",-1),Ze=e(" option (or using "),ea=a("code",null,"features=comptask",-1),aa=e("). See "),sa={href:"https://github.com/async-profiler/async-profiler/issues/777",target:"_blank",rel:"noopener noreferrer"},ia=e("async-profiler Github Issues"),na=e(" for more information."),ta=n(`

    Example:

    profiler start -F comptask
    +

    Configuring Alternative Profiling Signals

    profiler uses POSIX signals for performance profiling. By default, SIGPROF is used for CPU profiling and SIGVTALRM is used for Wall-Clock profiling. However, this can lead to signal conflicts if your application also uses these signals or if you want to run multiple profiler instances simultaneously.

    You can now use the signal parameter to configure the signal used for profiling to avoid conflicts.

    `,5),oa=e("See "),ra={href:"https://github.com/async-profiler/async-profiler/issues/759",target:"_blank",rel:"noopener noreferrer"},la=e("async-profiler Github Issues"),da=e(" for more information."),ca=n(`

    Syntax

    profiler start --signal <signal number>
     

    If you need to specify the signal for CPU and Wall-Clock analysis separately, you can use the following syntax:

    profiler start --signal <CPU signal number>/<Wall signal number>
     

    --clock option

    The --clock option allows the user to control the clock source used for sampling timestamps. This is useful for scenarios where you need to align the timestamps of profiler data with data from other tools.

    Usage

    profiler start --clock <tsc|monotonic>
    -

    Parameters

    `,9),ma=a("li",null,[a("p",null,[a("code",null,"tsc"),e(": Use the CPU's timestamp counter ("),a("code",null,"RDTSC"),e("). This is the default option and provides high-precision timestamps.")])],-1),fa=a("code",null,"monotonic",-1),va=e(": Use the operating system's monotonic clock ("),ba=a("code",null,"CLOCK_MONOTONIC",-1),ga=e("). This helps align timestamps between multiple data sources. See "),_a={href:"https://github.com/async-profiler/async-profiler/issues/723",target:"_blank",rel:"noopener noreferrer"},ya=e("async-profiler Github Issues"),ka=e(" for more information."),xa=n(`

    Example:

    Using CLOCK_MONOTONIC as timestamp source:

    profiler start --clock monotonic
    -

    Notes:

    • Use --clock monotonic when you need to align profiler data with data from other tools that use CLOCK_MONOTONIC (e.g. perf).

    • Use --clock option with caution when using jfrsync mode, as the JVM and profiler may use different timestamp sources, which may lead to inconsistent results.

    --norm option

    In Java 20 and earlier, the method names generated by the compiler for lambda expressions contain a unique numeric suffix. For example, a lambda expression defined in the same code location may generate multiple different frame names, because each lambda method name is appended with a unique numeric suffix (such as lambda$method$0, lambda$method$1, etc.). This causes logically identical stacks to not be merged in the flame graph, increasing the complexity of performance analysis.

    `,7),wa=e("To solve this problem, "),Ta=a("code",null,"profiler",-1),Ca=e(" has added a "),ja=a("code",null,"--norm",-1),Sa=e(" option that automatically normalizes method names when generating output, removes these numeric suffixes, and enables identical stacks to be merged correctly. Please refer to "),Fa={href:"https://github.com/async-profiler/async-profiler/issues/832",target:"_blank",rel:"noopener noreferrer"},Ia=e("async-profiler Github Issues"),Ja=e(" for more information."),Pa=n(`

    Example:

    Generate a normalized flame graph:

    profiler start --norm
    -
    `,3);function Ga(Na,Ua){const s=c("ExternalLinkIcon");return l(),d("div",null,[h,a("p",null,[a("a",u,[m,f,i(s)])]),a("div",v,[b,a("p",null,[g,a("a",_,[y,i(s)])])]),k,x,a("p",null,[w,T,C,a("a",j,[S,i(s)]),F]),I,a("p",null,[J,P,G,a("a",N,[U,i(s)]),O,M,R,W,E]),B,a("p",null,[L,a("a",$,[V,i(s)]),A,z,D]),Y,a("p",null,[q,a("a",K,[H,i(s)]),X]),Q,a("p",null,[Z,a("a",ee,[ae,i(s)])]),se,a("p",null,[ie,ne,te,oe,re,le,de,ce,pe,he,ue,me,fe,a("a",ve,[be,i(s)]),ge,a("a",_e,[ye,i(s)]),ke]),xe,a("p",null,[we,Te,Ce,je,Se,Fe,Ie,a("a",Je,[Pe,i(s)]),Ge]),Ne,a("p",null,[Ue,Oe,Me,Re,We,Ee,Be,a("a",Le,[$e,i(s)]),Ve]),Ae,a("p",null,[ze,De,Ye,qe,Ke,a("a",He,[Xe,i(s)]),Qe]),Ze,a("p",null,[ea,aa,sa,ia,na,a("a",ta,[oa,i(s)]),ra]),la,a("p",null,[da,a("a",ca,[pa,i(s)]),ha]),ua,a("ul",null,[ma,a("li",null,[a("p",null,[fa,va,ba,ga,a("a",_a,[ya,i(s)]),ka])])]),xa,a("p",null,[wa,Ta,Ca,ja,Sa,a("a",Fa,[Ia,i(s)]),Ja]),Pa])}const Ra=r(p,[["render",Ga],["__file","profiler.html.vue"]]);export{Ra as default}; +

    Parameters

    `,9),pa=a("li",null,[a("p",null,[a("code",null,"tsc"),e(": Use the CPU's timestamp counter ("),a("code",null,"RDTSC"),e("). This is the default option and provides high-precision timestamps.")])],-1),ha=a("code",null,"monotonic",-1),ua=e(": Use the operating system's monotonic clock ("),ma=a("code",null,"CLOCK_MONOTONIC",-1),fa=e("). This helps align timestamps between multiple data sources. See "),va={href:"https://github.com/async-profiler/async-profiler/issues/723",target:"_blank",rel:"noopener noreferrer"},ba=e("async-profiler Github Issues"),ga=e(" for more information."),_a=n(`

    Example:

    Using CLOCK_MONOTONIC as timestamp source:

    profiler start --clock monotonic
    +

    Notes:

    • Use --clock monotonic when you need to align profiler data with data from other tools that use CLOCK_MONOTONIC (e.g. perf).

    • Use --clock option with caution when using jfrsync mode, as the JVM and profiler may use different timestamp sources, which may lead to inconsistent results.

    --norm option

    In Java 20 and earlier, the method names generated by the compiler for lambda expressions contain a unique numeric suffix. For example, a lambda expression defined in the same code location may generate multiple different frame names, because each lambda method name is appended with a unique numeric suffix (such as lambda$method$0, lambda$method$1, etc.). This causes logically identical stacks to not be merged in the flame graph, increasing the complexity of performance analysis.

    `,7),ya=e("To solve this problem, "),ka=a("code",null,"profiler",-1),xa=e(" has added a "),wa=a("code",null,"--norm",-1),Ta=e(" option that automatically normalizes method names when generating output, removes these numeric suffixes, and enables identical stacks to be merged correctly. Please refer to "),Ca={href:"https://github.com/async-profiler/async-profiler/issues/832",target:"_blank",rel:"noopener noreferrer"},ja=e("async-profiler Github Issues"),Sa=e(" for more information."),Fa=n(`

    Example:

    Generate a normalized flame graph:

    profiler start --norm
    +
    `,3);function Ia(Ja,Pa){const s=c("ExternalLinkIcon");return l(),d("div",null,[h,a("div",u,[m,a("p",null,[f,a("a",v,[b,i(s)])])]),g,_,a("p",null,[y,k,x,a("a",w,[T,i(s)]),C]),j,a("p",null,[S,F,I,a("a",J,[P,i(s)]),G,N,U,O,M]),R,a("p",null,[W,a("a",E,[B,i(s)]),L,$,V]),A,a("p",null,[z,a("a",D,[Y,i(s)]),q]),K,a("p",null,[H,a("a",X,[Q,i(s)])]),Z,a("p",null,[ee,ae,se,ie,ne,te,oe,re,le,de,ce,pe,he,a("a",ue,[me,i(s)]),fe,a("a",ve,[be,i(s)]),ge]),_e,a("p",null,[ye,ke,xe,we,Te,Ce,je,a("a",Se,[Fe,i(s)]),Ie]),Je,a("p",null,[Pe,Ge,Ne,Ue,Oe,Me,Re,a("a",We,[Ee,i(s)]),Be]),Le,a("p",null,[$e,Ve,Ae,ze,De,a("a",Ye,[qe,i(s)]),Ke]),He,a("p",null,[Xe,Qe,Ze,ea,aa,a("a",sa,[ia,i(s)]),na]),ta,a("p",null,[oa,a("a",ra,[la,i(s)]),da]),ca,a("ul",null,[pa,a("li",null,[a("p",null,[ha,ua,ma,fa,a("a",va,[ba,i(s)]),ga])])]),_a,a("p",null,[ya,ka,xa,wa,Ta,a("a",Ca,[ja,i(s)]),Sa]),Fa])}const Ua=r(p,[["render",Ia],["__file","profiler.html.vue"]]);export{Ua as default}; diff --git a/assets/profiler.html.e7fb718f.js b/assets/profiler.html.67035c12.js similarity index 97% rename from assets/profiler.html.e7fb718f.js rename to assets/profiler.html.67035c12.js index 299f2791b..b7cbc9b2a 100644 --- a/assets/profiler.html.e7fb718f.js +++ b/assets/profiler.html.67035c12.js @@ -1 +1 @@ -const e=JSON.parse(`{"key":"v-a7e90ae8","path":"/en/doc/profiler.html","title":"profiler","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Supported Options","slug":"supported-options","link":"#supported-options","children":[]},{"level":2,"title":"Start profiler","slug":"start-profiler","link":"#start-profiler","children":[]},{"level":2,"title":"Get the number of samples collected","slug":"get-the-number-of-samples-collected","link":"#get-the-number-of-samples-collected","children":[]},{"level":2,"title":"View profiling status","slug":"view-profiling-status","link":"#view-profiling-status","children":[]},{"level":2,"title":"View profiler memory usage","slug":"view-profiler-memory-usage","link":"#view-profiler-memory-usage","children":[]},{"level":2,"title":"Stop profiler","slug":"stop-profiler","link":"#stop-profiler","children":[{"level":3,"title":"Generating flame graph results","slug":"generating-flame-graph-results","link":"#generating-flame-graph-results","children":[]},{"level":3,"title":"Generate LLM-friendly Markdown report","slug":"generate-llm-friendly-markdown-report","link":"#generate-llm-friendly-markdown-report","children":[]}]},{"level":2,"title":"View profiler results under arthas-output via browser","slug":"view-profiler-results-under-arthas-output-via-browser","link":"#view-profiler-results-under-arthas-output-via-browser","children":[]},{"level":2,"title":"Profiler supported events","slug":"profiler-supported-events","link":"#profiler-supported-events","children":[]},{"level":2,"title":"Resume sampling","slug":"resume-sampling","link":"#resume-sampling","children":[]},{"level":2,"title":"Dump action","slug":"dump-action","link":"#dump-action","children":[]},{"level":2,"title":"Use execute action to execute complex commands","slug":"use-execute-action-to-execute-complex-commands","link":"#use-execute-action-to-execute-complex-commands","children":[]},{"level":2,"title":"View all supported actions","slug":"view-all-supported-actions","link":"#view-all-supported-actions","children":[]},{"level":2,"title":"View version","slug":"view-version","link":"#view-version","children":[]},{"level":2,"title":"Configure Java stack depth","slug":"configure-java-stack-depth","link":"#configure-java-stack-depth","children":[]},{"level":2,"title":"Profiling different threads separately","slug":"profiling-different-threads-separately","link":"#profiling-different-threads-separately","children":[]},{"level":2,"title":"Configure include/exclude to filter data","slug":"configure-include-exclude-to-filter-data","link":"#configure-include-exclude-to-filter-data","children":[]},{"level":2,"title":"Specify execution time","slug":"specify-execution-time","link":"#specify-execution-time","children":[]},{"level":2,"title":"Generate jfr format result","slug":"generate-jfr-format-result","link":"#generate-jfr-format-result","children":[]},{"level":2,"title":"Control details in result","slug":"control-details-in-result","link":"#control-details-in-result","children":[]},{"level":2,"title":"The 'unknown' in profiler result","slug":"the-unknown-in-profiler-result","link":"#the-unknown-in-profiler-result","children":[]},{"level":2,"title":"Config locks/allocations profiling threshold","slug":"config-locks-allocations-profiling-threshold","link":"#config-locks-allocations-profiling-threshold","children":[]},{"level":2,"title":"Config JFR chunks","slug":"config-jfr-chunks","link":"#config-jfr-chunks","children":[]},{"level":2,"title":"Group threads by scheduling policy","slug":"group-threads-by-scheduling-policy","link":"#group-threads-by-scheduling-policy","children":[]},{"level":2,"title":"Build allocation profile from live objects only","slug":"build-allocation-profile-from-live-objects-only","link":"#build-allocation-profile-from-live-objects-only","children":[]},{"level":2,"title":"Config method of collecting C stack frames","slug":"config-method-of-collecting-c-stack-frames","link":"#config-method-of-collecting-c-stack-frames","children":[]},{"level":2,"title":"Start/Stop Profiling When a Specified Native Function is Executed","slug":"start-stop-profiling-when-a-specified-native-function-is-executed","link":"#start-stop-profiling-when-a-specified-native-function-is-executed","children":[{"level":3,"title":"Time-to-Safepoint Profiling","slug":"time-to-safepoint-profiling","link":"#time-to-safepoint-profiling","children":[]}]},{"level":2,"title":"Generate JFR file using events recorded by profiler","slug":"generate-jfr-file-using-events-recorded-by-profiler","link":"#generate-jfr-file-using-events-recorded-by-profiler","children":[]},{"level":2,"title":"Run profiler in a loop","slug":"run-profiler-in-a-loop","link":"#run-profiler-in-a-loop","children":[]},{"level":2,"title":"--timeout option","slug":"timeout-option","link":"#timeout-option","children":[]},{"level":2,"title":"--wall option","slug":"wall-option","link":"#wall-option","children":[]},{"level":2,"title":"ctimer events","slug":"ctimer-events","link":"#ctimer-events","children":[]},{"level":2,"title":"vtable Feature","slug":"vtable-feature","link":"#vtable-feature","children":[]},{"level":2,"title":"comptask feature","slug":"comptask-feature","link":"#comptask-feature","children":[]},{"level":2,"title":"Configuring Alternative Profiling Signals","slug":"configuring-alternative-profiling-signals","link":"#configuring-alternative-profiling-signals","children":[]},{"level":2,"title":"--clock option","slug":"clock-option","link":"#clock-option","children":[]},{"level":2,"title":"--norm option","slug":"norm-option","link":"#norm-option","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/profiler.md","version":"4.3.3"}`);export{e as data}; +const e=JSON.parse(`{"key":"v-a7e90ae8","path":"/en/doc/profiler.html","title":"profiler","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Supported Options","slug":"supported-options","link":"#supported-options","children":[]},{"level":2,"title":"Start profiler","slug":"start-profiler","link":"#start-profiler","children":[]},{"level":2,"title":"Get the number of samples collected","slug":"get-the-number-of-samples-collected","link":"#get-the-number-of-samples-collected","children":[]},{"level":2,"title":"View profiling status","slug":"view-profiling-status","link":"#view-profiling-status","children":[]},{"level":2,"title":"View profiler memory usage","slug":"view-profiler-memory-usage","link":"#view-profiler-memory-usage","children":[]},{"level":2,"title":"Stop profiler","slug":"stop-profiler","link":"#stop-profiler","children":[{"level":3,"title":"Generating flame graph results","slug":"generating-flame-graph-results","link":"#generating-flame-graph-results","children":[]},{"level":3,"title":"Generate LLM-friendly Markdown report","slug":"generate-llm-friendly-markdown-report","link":"#generate-llm-friendly-markdown-report","children":[]}]},{"level":2,"title":"View profiler results under arthas-output via browser","slug":"view-profiler-results-under-arthas-output-via-browser","link":"#view-profiler-results-under-arthas-output-via-browser","children":[]},{"level":2,"title":"Profiler supported events","slug":"profiler-supported-events","link":"#profiler-supported-events","children":[]},{"level":2,"title":"Resume sampling","slug":"resume-sampling","link":"#resume-sampling","children":[]},{"level":2,"title":"Dump action","slug":"dump-action","link":"#dump-action","children":[]},{"level":2,"title":"Use execute action to execute complex commands","slug":"use-execute-action-to-execute-complex-commands","link":"#use-execute-action-to-execute-complex-commands","children":[]},{"level":2,"title":"View all supported actions","slug":"view-all-supported-actions","link":"#view-all-supported-actions","children":[]},{"level":2,"title":"View version","slug":"view-version","link":"#view-version","children":[]},{"level":2,"title":"Configure Java stack depth","slug":"configure-java-stack-depth","link":"#configure-java-stack-depth","children":[]},{"level":2,"title":"Profiling different threads separately","slug":"profiling-different-threads-separately","link":"#profiling-different-threads-separately","children":[]},{"level":2,"title":"Configure include/exclude to filter data","slug":"configure-include-exclude-to-filter-data","link":"#configure-include-exclude-to-filter-data","children":[]},{"level":2,"title":"Specify execution time","slug":"specify-execution-time","link":"#specify-execution-time","children":[]},{"level":2,"title":"Generate jfr format result","slug":"generate-jfr-format-result","link":"#generate-jfr-format-result","children":[]},{"level":2,"title":"Control details in result","slug":"control-details-in-result","link":"#control-details-in-result","children":[]},{"level":2,"title":"The 'unknown' in profiler result","slug":"the-unknown-in-profiler-result","link":"#the-unknown-in-profiler-result","children":[]},{"level":2,"title":"Config locks/allocations profiling threshold","slug":"config-locks-allocations-profiling-threshold","link":"#config-locks-allocations-profiling-threshold","children":[]},{"level":2,"title":"Config JFR chunks","slug":"config-jfr-chunks","link":"#config-jfr-chunks","children":[]},{"level":2,"title":"Group threads by scheduling policy","slug":"group-threads-by-scheduling-policy","link":"#group-threads-by-scheduling-policy","children":[]},{"level":2,"title":"Build allocation profile from live objects only","slug":"build-allocation-profile-from-live-objects-only","link":"#build-allocation-profile-from-live-objects-only","children":[]},{"level":2,"title":"Config method of collecting C stack frames","slug":"config-method-of-collecting-c-stack-frames","link":"#config-method-of-collecting-c-stack-frames","children":[]},{"level":2,"title":"Start/Stop Profiling When a Specified Native Function is Executed","slug":"start-stop-profiling-when-a-specified-native-function-is-executed","link":"#start-stop-profiling-when-a-specified-native-function-is-executed","children":[{"level":3,"title":"Time-to-Safepoint Profiling","slug":"time-to-safepoint-profiling","link":"#time-to-safepoint-profiling","children":[]}]},{"level":2,"title":"Generate JFR file using events recorded by profiler","slug":"generate-jfr-file-using-events-recorded-by-profiler","link":"#generate-jfr-file-using-events-recorded-by-profiler","children":[]},{"level":2,"title":"Run profiler in a loop","slug":"run-profiler-in-a-loop","link":"#run-profiler-in-a-loop","children":[]},{"level":2,"title":"--timeout option","slug":"timeout-option","link":"#timeout-option","children":[]},{"level":2,"title":"--wall option","slug":"wall-option","link":"#wall-option","children":[]},{"level":2,"title":"ctimer events","slug":"ctimer-events","link":"#ctimer-events","children":[]},{"level":2,"title":"vtable Feature","slug":"vtable-feature","link":"#vtable-feature","children":[]},{"level":2,"title":"comptask feature","slug":"comptask-feature","link":"#comptask-feature","children":[]},{"level":2,"title":"Configuring Alternative Profiling Signals","slug":"configuring-alternative-profiling-signals","link":"#configuring-alternative-profiling-signals","children":[]},{"level":2,"title":"--clock option","slug":"clock-option","link":"#clock-option","children":[]},{"level":2,"title":"--norm option","slug":"norm-option","link":"#norm-option","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/profiler.md","version":"4.3.5"}`);export{e as data}; diff --git a/assets/profiler.html.fd3324a8.js b/assets/profiler.html.8e2f4114.js similarity index 82% rename from assets/profiler.html.fd3324a8.js rename to assets/profiler.html.8e2f4114.js index 12eef1d1f..cafb0ff8b 100644 --- a/assets/profiler.html.fd3324a8.js +++ b/assets/profiler.html.8e2f4114.js @@ -1,4 +1,4 @@ -import{_ as r,a as o}from"./arthas-output-svg.30f64f53.js";import{_ as l,o as d,c as t,a as e,b as n,e as a,d as i,r as c}from"./app.524ecf5c.js";const p={},h=e("h1",{id:"profiler",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#profiler","aria-hidden":"true"},"#"),a(" profiler")],-1),u={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-profiler",target:"_blank",rel:"noopener noreferrer"},m=e("code",null,"profiler",-1),v=a("\u5728\u7EBF\u6559\u7A0B"),b={class:"custom-container tip"},f=e("p",{class:"custom-container-title"},"\u63D0\u793A",-1),g=a("\u4F7F\u7528"),_={href:"https://github.com/jvm-profiling-tools/async-profiler",target:"_blank",rel:"noopener noreferrer"},k=a("async-profiler"),x=a("\u751F\u6210\u706B\u7130\u56FE"),y=e("p",null,[e("code",null,"profiler"),a(" \u547D\u4EE4\u652F\u6301\u751F\u6210\u5E94\u7528\u70ED\u70B9\u7684\u706B\u7130\u56FE\u3002\u672C\u8D28\u4E0A\u662F\u901A\u8FC7\u4E0D\u65AD\u7684\u91C7\u6837\uFF0C\u7136\u540E\u628A\u6536\u96C6\u5230\u7684\u91C7\u6837\u7ED3\u679C\u751F\u6210\u706B\u7130\u56FE\u3002")],-1),C=e("p",null,[e("code",null,"profiler"),a(" \u547D\u4EE4\u57FA\u672C\u8FD0\u884C\u7ED3\u6784\u662F "),e("code",null,"profiler action [actionArg]")],-1),j=e("code",null,"profiler",-1),J=a(" \u547D\u4EE4\u7684\u683C\u5F0F\u57FA\u672C\u4E0E\u4E0A\u6E38\u9879\u76EE "),S={href:"https://github.com/async-profiler/async-profiler",target:"_blank",rel:"noopener noreferrer"},F=a("async-profiler"),M=a(" \u4FDD\u6301\u4E00\u81F4\uFF0C\u8BE6\u7EC6\u7684\u4F7F\u7528\u65B9\u5F0F\u53EF\u53C2\u8003\u4E0A\u6E38\u9879\u76EE\u7684 README\u3001Github Disscussions \u4EE5\u53CA\u5176\u4ED6\u6587\u6863\u8D44\u6599\u3002"),O=i(`

    \u53C2\u6570\u8BF4\u660E

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    action\u8981\u6267\u884C\u7684\u64CD\u4F5C
    actionArg\u5C5E\u6027\u540D\u6A21\u5F0F
    [i:]\u91C7\u6837\u95F4\u9694\uFF08\u5355\u4F4D\uFF1Ans\uFF09\uFF08\u9ED8\u8BA4\u503C\uFF1A10'000'000\uFF0C\u5373 10 ms\uFF09
    [f:]\u5C06\u8F93\u51FA\u8F6C\u50A8\u5230\u6307\u5B9A\u8DEF\u5F84
    [d:]\u8FD0\u884C\u8BC4\u6D4B\u6307\u5B9A\u79D2
    [e:]\u8981\u8DDF\u8E2A\u54EA\u4E2A\u4E8B\u4EF6\uFF08cpu, alloc, lock, cache-misses \u7B49\uFF09\uFF0C\u9ED8\u8BA4\u662F cpu

    \u542F\u52A8 profiler

    $ profiler start
    +import{_ as r,a as o}from"./arthas-output-svg.30f64f53.js";import{_ as l,o as d,c as t,a as e,b as n,e as a,d as i,r as c}from"./app.e2427bec.js";const p={},h=e("h1",{id:"profiler",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#profiler","aria-hidden":"true"},"#"),a(" profiler")],-1),u={class:"custom-container tip"},m=e("p",{class:"custom-container-title"},"\u63D0\u793A",-1),v=a("\u4F7F\u7528"),b={href:"https://github.com/jvm-profiling-tools/async-profiler",target:"_blank",rel:"noopener noreferrer"},f=a("async-profiler"),g=a("\u751F\u6210\u706B\u7130\u56FE"),_=e("p",null,[e("code",null,"profiler"),a(" \u547D\u4EE4\u652F\u6301\u751F\u6210\u5E94\u7528\u70ED\u70B9\u7684\u706B\u7130\u56FE\u3002\u672C\u8D28\u4E0A\u662F\u901A\u8FC7\u4E0D\u65AD\u7684\u91C7\u6837\uFF0C\u7136\u540E\u628A\u6536\u96C6\u5230\u7684\u91C7\u6837\u7ED3\u679C\u751F\u6210\u706B\u7130\u56FE\u3002")],-1),k=e("p",null,[e("code",null,"profiler"),a(" \u547D\u4EE4\u57FA\u672C\u8FD0\u884C\u7ED3\u6784\u662F "),e("code",null,"profiler action [actionArg]")],-1),x=e("code",null,"profiler",-1),y=a(" \u547D\u4EE4\u7684\u683C\u5F0F\u57FA\u672C\u4E0E\u4E0A\u6E38\u9879\u76EE "),C={href:"https://github.com/async-profiler/async-profiler",target:"_blank",rel:"noopener noreferrer"},j=a("async-profiler"),J=a(" \u4FDD\u6301\u4E00\u81F4\uFF0C\u8BE6\u7EC6\u7684\u4F7F\u7528\u65B9\u5F0F\u53EF\u53C2\u8003\u4E0A\u6E38\u9879\u76EE\u7684 README\u3001Github Disscussions \u4EE5\u53CA\u5176\u4ED6\u6587\u6863\u8D44\u6599\u3002"),S=i(`

    \u53C2\u6570\u8BF4\u660E

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    action\u8981\u6267\u884C\u7684\u64CD\u4F5C
    actionArg\u5C5E\u6027\u540D\u6A21\u5F0F
    [i:]\u91C7\u6837\u95F4\u9694\uFF08\u5355\u4F4D\uFF1Ans\uFF09\uFF08\u9ED8\u8BA4\u503C\uFF1A10'000'000\uFF0C\u5373 10 ms\uFF09
    [f:]\u5C06\u8F93\u51FA\u8F6C\u50A8\u5230\u6307\u5B9A\u8DEF\u5F84
    [d:]\u8FD0\u884C\u8BC4\u6D4B\u6307\u5B9A\u79D2
    [e:]\u8981\u8DDF\u8E2A\u54EA\u4E2A\u4E8B\u4EF6\uFF08cpu, alloc, lock, cache-misses \u7B49\uFF09\uFF0C\u9ED8\u8BA4\u662F cpu

    \u542F\u52A8 profiler

    $ profiler start
     Started [cpu] profiling
     

    \u63D0\u793A

    \u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0C\u751F\u6210\u7684\u662F cpu \u7684\u706B\u7130\u56FE\uFF0C\u5373 event \u4E3Acpu\u3002\u53EF\u4EE5\u7528--event\u53C2\u6570\u6307\u5B9A\u5176\u4ED6\u6027\u80FD\u5206\u6790\u6A21\u5F0F\uFF0C\u89C1\u4E0B\u6587\u3002

    \u83B7\u53D6\u5DF2\u91C7\u96C6\u7684 sample \u7684\u6570\u91CF

    $ profiler getSamples
     23
    @@ -10,14 +10,14 @@ Call trace storage:   10244 KB
             Code cache:   12890 KB
     ------------------------------
                  Total:   23206 KB
    -

    \u505C\u6B62 profiler

    \u751F\u6210\u706B\u7130\u56FE\u683C\u5F0F\u7ED3\u679C

    `,14),w=a("\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0C\u7ED3\u679C\u662F "),G={href:"https://github.com/BrendanGregg/FlameGraph",target:"_blank",rel:"noopener noreferrer"},N=a("Flame Graph"),P=a(" \u683C\u5F0F\u7684 "),R=e("code",null,"html",-1),I=a(" \u6587\u4EF6\uFF0C\u4E5F\u53EF\u4EE5\u7528 "),T=e("code",null,"-o",-1),L=a(" \u6216 "),$=e("code",null,"--format",-1),U=a(" \u53C2\u6570\u6307\u5B9A\u5176\u4ED6\u5185\u5BB9\u683C\u5F0F\uFF0C\u5305\u62EC flat\u3001traces\u3001collapsed\u3001flamegraph\u3001tree\u3001jfr\u3001md\u3002"),E=i(`

    \u751F\u6210 LLM \u53CB\u597D\u7684 Markdown \u62A5\u544A

    \u5F53 --format md\uFF08\u6216 md=N\uFF09\u65F6\uFF0CArthas \u4F1A\u57FA\u4E8E async-profiler \u7684 collapsed \u8F93\u51FA\u751F\u6210\u7ED3\u6784\u5316\u7684 Markdown\uFF0C\u4FBF\u4E8E\u76F4\u63A5\u590D\u5236\u5230 LLM \u6216\u5728\u7EC8\u7AEF\u91CC grep\u3002\u62A5\u544A\u5305\u542B\uFF1A

    • Top N Hotspots\uFF08self\uFF09
    • Call Tree\uFF08\u8C03\u7528\u6811\uFF0C\u6309\u91C7\u6837\u5360\u6BD4\u6392\u5E8F\u622A\u65AD\uFF09
    • Function Details\uFF08\u6BCF\u4E2A\u70ED\u70B9\u51FD\u6570\u7684 Top stacks\uFF09
    $ profiler stop --format md
    +

    \u505C\u6B62 profiler

    \u751F\u6210\u706B\u7130\u56FE\u683C\u5F0F\u7ED3\u679C

    `,14),F=a("\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0C\u7ED3\u679C\u662F "),M={href:"https://github.com/BrendanGregg/FlameGraph",target:"_blank",rel:"noopener noreferrer"},O=a("Flame Graph"),w=a(" \u683C\u5F0F\u7684 "),G=e("code",null,"html",-1),N=a(" \u6587\u4EF6\uFF0C\u4E5F\u53EF\u4EE5\u7528 "),P=e("code",null,"-o",-1),R=a(" \u6216 "),I=e("code",null,"--format",-1),T=a(" \u53C2\u6570\u6307\u5B9A\u5176\u4ED6\u5185\u5BB9\u683C\u5F0F\uFF0C\u5305\u62EC flat\u3001traces\u3001collapsed\u3001flamegraph\u3001tree\u3001jfr\u3001md\u3002"),L=i(`

    \u751F\u6210 LLM \u53CB\u597D\u7684 Markdown \u62A5\u544A

    \u5F53 --format md\uFF08\u6216 md=N\uFF09\u65F6\uFF0CArthas \u4F1A\u57FA\u4E8E async-profiler \u7684 collapsed \u8F93\u51FA\u751F\u6210\u7ED3\u6784\u5316\u7684 Markdown\uFF0C\u4FBF\u4E8E\u76F4\u63A5\u590D\u5236\u5230 LLM \u6216\u5728\u7EC8\u7AEF\u91CC grep\u3002\u62A5\u544A\u5305\u542B\uFF1A

    • Top N Hotspots\uFF08self\uFF09
    • Call Tree\uFF08\u8C03\u7528\u6811\uFF0C\u6309\u91C7\u6837\u5360\u6BD4\u6392\u5E8F\u622A\u65AD\uFF09
    • Function Details\uFF08\u6BCF\u4E2A\u70ED\u70B9\u51FD\u6570\u7684 Top stacks\uFF09
    $ profiler stop --format md
     

    \u6307\u5B9A\u8F93\u51FA\u6587\u4EF6\uFF08\u53EF\u9009\uFF09\uFF1A

    $ profiler stop --format md --file /tmp/profile.md
     

    \u5982\u679C --file \u4EE5 .md \u7ED3\u5C3E\u4E14\u672A\u6307\u5B9A --format\uFF0C\u5C06\u81EA\u52A8\u63A8\u65AD\u4E3A Markdown \u8F93\u51FA\uFF1A

    $ profiler stop --file /tmp/profile.md
     

    \u6307\u5B9A TopN\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4 10\uFF09\uFF1A

    $ profiler stop --format md=20
     
    $ profiler stop --format flamegraph
     profiler output file: /tmp/test/arthas-output/20211207-111550.html
     OK
    -

    \u5728--file\u53C2\u6570\u6307\u5B9A\u7684\u6587\u4EF6\u540D\u540E\u7F00\u4E3A html \u6216 jfr \u65F6\uFF0C\u6587\u4EF6\u683C\u5F0F\u53EF\u4EE5\u88AB\u63A8\u65AD\u51FA\u6765\u3002\u6BD4\u5982--file /tmp/result.html \u5C06\u81EA\u52A8\u751F\u6210\u706B\u7130\u56FE\u3002

    \u901A\u8FC7\u6D4F\u89C8\u5668\u67E5\u770B arthas-output \u4E0B\u9762\u7684 profiler \u7ED3\u679C

    `,13),W=a("\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0Carthas \u4F7F\u7528 3658 \u7AEF\u53E3\uFF0C\u5219\u53EF\u4EE5\u6253\u5F00\uFF1A "),B={href:"http://localhost:3658/arthas-output/",target:"_blank",rel:"noopener noreferrer"},V=a("http://localhost:3658/arthas-output/"),A=a(" \u67E5\u770B\u5230"),D=e("code",null,"arthas-output",-1),K=a("\u76EE\u5F55\u4E0B\u9762\u7684 profiler \u7ED3\u679C\uFF1A"),z=i('

    \u70B9\u51FB\u53EF\u4EE5\u67E5\u770B\u5177\u4F53\u7684\u7ED3\u679C\uFF1A

    \u63D0\u793A

    \u5982\u679C\u662F chrome \u6D4F\u89C8\u5668\uFF0C\u53EF\u80FD\u9700\u8981\u591A\u6B21\u5237\u65B0\u3002

    profiler \u652F\u6301\u7684 events

    \u5728\u4E0D\u540C\u7684\u5E73\u53F0\uFF0C\u4E0D\u540C\u7684 OS \u4E0B\u9762\uFF0C\u652F\u6301\u7684 events \u5404\u6709\u4E0D\u540C\u3002\u6BD4\u5982\u5728 macos \u4E0B\u9762\uFF1A

    $ profiler list
    +

    \u5728--file\u53C2\u6570\u6307\u5B9A\u7684\u6587\u4EF6\u540D\u540E\u7F00\u4E3A html \u6216 jfr \u65F6\uFF0C\u6587\u4EF6\u683C\u5F0F\u53EF\u4EE5\u88AB\u63A8\u65AD\u51FA\u6765\u3002\u6BD4\u5982--file /tmp/result.html \u5C06\u81EA\u52A8\u751F\u6210\u706B\u7130\u56FE\u3002

    \u901A\u8FC7\u6D4F\u89C8\u5668\u67E5\u770B arthas-output \u4E0B\u9762\u7684 profiler \u7ED3\u679C

    `,13),$=a("\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0Carthas \u4F7F\u7528 3658 \u7AEF\u53E3\uFF0C\u5219\u53EF\u4EE5\u6253\u5F00\uFF1A "),U={href:"http://localhost:3658/arthas-output/",target:"_blank",rel:"noopener noreferrer"},E=a("http://localhost:3658/arthas-output/"),W=a(" \u67E5\u770B\u5230"),B=e("code",null,"arthas-output",-1),V=a("\u76EE\u5F55\u4E0B\u9762\u7684 profiler \u7ED3\u679C\uFF1A"),A=i('

    \u70B9\u51FB\u53EF\u4EE5\u67E5\u770B\u5177\u4F53\u7684\u7ED3\u679C\uFF1A

    \u63D0\u793A

    \u5982\u679C\u662F chrome \u6D4F\u89C8\u5668\uFF0C\u53EF\u80FD\u9700\u8981\u591A\u6B21\u5237\u65B0\u3002

    profiler \u652F\u6301\u7684 events

    \u5728\u4E0D\u540C\u7684\u5E73\u53F0\uFF0C\u4E0D\u540C\u7684 OS \u4E0B\u9762\uFF0C\u652F\u6301\u7684 events \u5404\u6709\u4E0D\u540C\u3002\u6BD4\u5982\u5728 macos \u4E0B\u9762\uFF1A

    $ profiler list
     Basic events:
       cpu
       alloc
    @@ -54,14 +54,14 @@ Perf events:
       trace:tracepoint
       kprobe:func
       uprobe:path
    -
    `,9),q=a("\u5982\u679C\u9047\u5230 OS \u672C\u8EAB\u7684\u6743\u9650/\u914D\u7F6E\u95EE\u9898\uFF0C\u7136\u540E\u7F3A\u5C11\u90E8\u5206 event\uFF0C\u53EF\u4EE5\u53C2\u8003 "),H={href:"https://github.com/jvm-profiling-tools/async-profiler",target:"_blank",rel:"noopener noreferrer"},X=a("async-profiler \u7684\u6587\u6863"),Y=a("\u3002"),Q=i(`

    \u53EF\u4EE5\u7528--event\u53C2\u6570\u6307\u5B9A\u8981\u91C7\u6837\u7684\u4E8B\u4EF6\uFF0C\u6BD4\u5982 alloc \u8868\u793A\u5206\u6790\u5185\u5B58\u5206\u914D\u60C5\u51B5\uFF1A

    $ profiler start --event alloc
    +
    `,9),D=a("\u5982\u679C\u9047\u5230 OS \u672C\u8EAB\u7684\u6743\u9650/\u914D\u7F6E\u95EE\u9898\uFF0C\u7136\u540E\u7F3A\u5C11\u90E8\u5206 event\uFF0C\u53EF\u4EE5\u53C2\u8003 "),K={href:"https://github.com/jvm-profiling-tools/async-profiler",target:"_blank",rel:"noopener noreferrer"},z=a("async-profiler \u7684\u6587\u6863"),q=a("\u3002"),H=i(`

    \u53EF\u4EE5\u7528--event\u53C2\u6570\u6307\u5B9A\u8981\u91C7\u6837\u7684\u4E8B\u4EF6\uFF0C\u6BD4\u5982 alloc \u8868\u793A\u5206\u6790\u5185\u5B58\u5206\u914D\u60C5\u51B5\uFF1A

    $ profiler start --event alloc
     

    \u6062\u590D\u91C7\u6837

    $ profiler resume
     Started [cpu] profiling
     

    start\u548Cresume\u7684\u533A\u522B\u662F\uFF1Astart\u4F1A\u6E05\u9664\u5DF2\u6709\u7684\u5206\u6790\u7ED3\u679C\u91CD\u65B0\u5F00\u59CB\uFF0Cresume\u5219\u4F1A\u4FDD\u7559\u5DF2\u6709\u7684\u7ED3\u679C\uFF0C\u5C06\u65B0\u7684\u5206\u6790\u7ED3\u679C\u9644\u52A0\u5230\u5DF2\u6709\u7ED3\u679C\u4E2D\u3002

    \u901A\u8FC7\u6267\u884Cprofiler getSamples\u53EF\u4EE5\u67E5\u770B samples \u7684\u6570\u91CF\u6765\u9A8C\u8BC1\u3002

    Dump \u5206\u6790\u7ED3\u679C

    $ profiler dump
     OK
     

    dump action \u5C06\u6027\u80FD\u5206\u6790\u7684\u7ED3\u679C\u4FDD\u5B58\u5230\u9ED8\u8BA4\u6587\u4EF6\u6216\u6307\u5B9A\u7684\u6587\u4EF6\u4E2D\uFF0C\u4F46 profiling \u8FC7\u7A0B\u4E0D\u4F1A\u505C\u6B62\u3002\u4F8B\u5982\uFF0C\u5982\u679C\u4F7F\u7528 start action \u542F\u52A8 profiling\uFF0C5 \u79D2\u540E\u6267\u884C dump action\uFF0C2 \u79D2\u540E\u518D\u6B21\u6267\u884C dump action\uFF0C\u5C06\u4F1A\u5F97\u5230 2 \u4E2A\u7ED3\u679C\u6587\u4EF6\uFF0C\u7B2C\u4E00\u4E2A\u6587\u4EF6\u5305\u62EC 0~5 \u79D2\u7684\u5206\u6790\u7ED3\u679C\uFF0C\u7B2C\u4E8C\u4E2A\u6587\u4EF6\u5305\u62EC 0~7 \u79D2\u7684\u5206\u6790\u7ED3\u679C\u3002

    \u4F7F\u7528execute\u6765\u6267\u884C\u590D\u6742\u7684\u547D\u4EE4

    \u6BD4\u5982\u5F00\u59CB\u91C7\u6837\uFF1A

    profiler execute 'start,framebuf=5000000'
     

    \u505C\u6B62\u91C7\u6837\uFF0C\u5E76\u4FDD\u5B58\u5230\u6307\u5B9A\u6587\u4EF6\u91CC\uFF1A

    profiler execute 'stop,file=/tmp/result.html'
    -
    `,14),Z=a("\u5177\u4F53\u7684\u683C\u5F0F\u53C2\u8003\uFF1A "),ee={href:"https://github.com/async-profiler/async-profiler/blob/v4.4/src/arguments.cpp#L52",target:"_blank",rel:"noopener noreferrer"},ae=a("arguments.cpp"),se=i(`

    \u67E5\u770B\u6240\u6709\u652F\u6301\u7684 action

    $ profiler actions
    +
    `,14),X=a("\u5177\u4F53\u7684\u683C\u5F0F\u53C2\u8003\uFF1A "),Y={href:"https://github.com/async-profiler/async-profiler/blob/v4.4/src/arguments.cpp#L52",target:"_blank",rel:"noopener noreferrer"},Q=a("arguments.cpp"),Z=i(`

    \u67E5\u770B\u6240\u6709\u652F\u6301\u7684 action

    $ profiler actions
     Supported Actions: [resume, dumpCollapsed, getSamples, start, list, version, execute, meminfo, stop, load, dumpFlat, dump, actions, dumpTraces, status]
     

    \u67E5\u770B\u7248\u672C

    $ profiler version
     async-profiler 4.4
    @@ -72,7 +72,7 @@ Copyright The async-profiler authors
     

    --include/--exclude \u90FD\u652F\u6301\u591A\u6B21\u8BBE\u7F6E\uFF0C\u4F46\u662F\u9700\u8981\u914D\u7F6E\u5728\u547D\u4EE4\u884C\u7684\u6700\u540E\u3002\u4E5F\u53EF\u4F7F\u7528\u77ED\u53C2\u6570\u683C\u5F0F -I/-X\u3002 \u6CE8\u610F--include/--exclude\u53EA\u652F\u6301\u5728stopaction\u6216\u8005\u5E26\u6709-d/--duration\u53C2\u6570\u7684startaction\u4E2D\u6307\u5B9A\uFF0C\u5426\u5219\u4E0D\u751F\u6548\u3002

    \u6307\u5B9A\u6267\u884C\u65F6\u95F4

    \u6BD4\u5982\uFF0C\u5E0C\u671B profiler \u6267\u884C 300 \u79D2\u81EA\u52A8\u7ED3\u675F\uFF0C\u53EF\u4EE5\u7528 -d/--duration \u53C2\u6570\u4E3A start action \u6307\u5B9A\u65F6\u95F4\uFF1A

    profiler start --duration 300
     

    \u751F\u6210 jfr \u683C\u5F0F\u7ED3\u679C

    \u6CE8\u610F\uFF0Cjfr \u53EA\u652F\u6301\u5728 start\u65F6\u914D\u7F6E\u3002\u5982\u679C\u662F\u5728stop\u65F6\u6307\u5B9A\uFF0C\u5219\u4E0D\u4F1A\u751F\u6548\u3002

    profiler start --file /tmp/test.jfr
     profiler start -o jfr
    -

    file\u53C2\u6570\u652F\u6301\u4E00\u4E9B\u53D8\u91CF\uFF1A

    • \u65F6\u95F4\u6233\uFF1A --file /tmp/test-%t.jfr
    • \u8FDB\u7A0B ID\uFF1A --file /tmp/test-%p.jfr

    \u751F\u6210\u7684\u7ED3\u679C\u53EF\u4EE5\u7528\u652F\u6301 jfr \u683C\u5F0F\u7684\u5DE5\u5177\u6765\u67E5\u770B\u3002\u6BD4\u5982\uFF1A

    • JDK Mission Control \uFF1A https://github.com/openjdk/jmc
    • JProfiler \uFF1A https://github.com/alibaba/arthas/issues/1416

    \u63A7\u5236\u5206\u6790\u7ED3\u679C\u7684\u683C\u5F0F

    `,25),ne=a("\u4F7F\u7528 "),ie=e("code",null,"-s",-1),re=a(" \u9009\u9879\u5C06\u7ED3\u679C\u4E2D\u7684 Fully qualified name \u66FF\u6362\u4E3A\u7B80\u5355\u540D\u79F0\uFF0C\u5982 "),oe=e("code",null,"demo.MathGame.main",-1),le=a(" \u66FF\u6362\u4E3A "),de=e("code",null,"MathGame.main",-1),te=a("\u3002\u4F7F\u7528 "),ce=e("code",null,"-g",-1),pe=a(" \u9009\u9879\u6307\u5B9A\u8F93\u51FA\u65B9\u6CD5\u7B7E\u540D\uFF0C\u5982 "),he=e("code",null,"demo.MathGame.main",-1),ue=a(" \u66FF\u6362\u4E3A "),me=e("code",null,"demo.MathGame.main([Ljava/lang/String;)V",-1),ve=a("\u3002\u6B64\u5916\u8FD8\u6709\u8BB8\u591A\u53EF\u8C03\u6574\u5206\u6790\u7ED3\u679C\u683C\u5F0F\u7684\u9009\u9879\uFF0C\u53EF\u53C2\u8003 "),be={href:"https://github.com/async-profiler/async-profiler#readme",target:"_blank",rel:"noopener noreferrer"},fe=a("async-profiler \u7684 README \u6587\u6863"),ge=a(" \u4EE5\u53CA "),_e={href:"https://github.com/async-profiler/async-profiler/discussions",target:"_blank",rel:"noopener noreferrer"},ke=a("async-profiler \u7684 Github Discussions"),xe=a(" \u7B49\u6750\u6599\u3002"),ye=i(`

    \u4F8B\u5982\uFF0C\u4EE5\u4E0B\u547D\u4EE4\u4E2D\uFF0C-s \u5C06\u8F93\u51FA\u4E2D\u7684\u7C7B\u540D\u79F0\u6307\u5B9A\u4E3A\u7B80\u77ED\u683C\u5F0F\uFF0C-g \u663E\u793A\u65B9\u6CD5\u7684\u5B8C\u6574\u7B7E\u540D\uFF0C-a \u6807\u6CE8\u51FA Java \u65B9\u6CD5\uFF0C-l \u4E3A\u539F\u751F\u65B9\u6CD5\u589E\u52A0\u5E93\u540D\u79F0\uFF0C--title \u4E3A\u751F\u6210\u706B\u7130\u56FE\u9875\u9762\u6307\u5B9A\u6807\u9898\uFF0C--minwidth \u5C06\u8FC7\u6EE4\u706B\u7130\u56FE\u4E2D\u5BBD\u5EA6\u4E3A 15% \u4EE5\u4E0B\u7684\u5E27\uFF0C--reverse \u5C06\u706B\u7130\u56FE\u5012\u7F6E\u3002

    profiler stop -s -g -a -l --title <flametitle> --minwidth 15 --reverse
    +

    file\u53C2\u6570\u652F\u6301\u4E00\u4E9B\u53D8\u91CF\uFF1A

    • \u65F6\u95F4\u6233\uFF1A --file /tmp/test-%t.jfr
    • \u8FDB\u7A0B ID\uFF1A --file /tmp/test-%p.jfr

    \u751F\u6210\u7684\u7ED3\u679C\u53EF\u4EE5\u7528\u652F\u6301 jfr \u683C\u5F0F\u7684\u5DE5\u5177\u6765\u67E5\u770B\u3002\u6BD4\u5982\uFF1A

    • JDK Mission Control \uFF1A https://github.com/openjdk/jmc
    • JProfiler \uFF1A https://github.com/alibaba/arthas/issues/1416

    \u63A7\u5236\u5206\u6790\u7ED3\u679C\u7684\u683C\u5F0F

    `,25),ee=a("\u4F7F\u7528 "),ae=e("code",null,"-s",-1),se=a(" \u9009\u9879\u5C06\u7ED3\u679C\u4E2D\u7684 Fully qualified name \u66FF\u6362\u4E3A\u7B80\u5355\u540D\u79F0\uFF0C\u5982 "),ne=e("code",null,"demo.MathGame.main",-1),ie=a(" \u66FF\u6362\u4E3A "),re=e("code",null,"MathGame.main",-1),oe=a("\u3002\u4F7F\u7528 "),le=e("code",null,"-g",-1),de=a(" \u9009\u9879\u6307\u5B9A\u8F93\u51FA\u65B9\u6CD5\u7B7E\u540D\uFF0C\u5982 "),te=e("code",null,"demo.MathGame.main",-1),ce=a(" \u66FF\u6362\u4E3A "),pe=e("code",null,"demo.MathGame.main([Ljava/lang/String;)V",-1),he=a("\u3002\u6B64\u5916\u8FD8\u6709\u8BB8\u591A\u53EF\u8C03\u6574\u5206\u6790\u7ED3\u679C\u683C\u5F0F\u7684\u9009\u9879\uFF0C\u53EF\u53C2\u8003 "),ue={href:"https://github.com/async-profiler/async-profiler#readme",target:"_blank",rel:"noopener noreferrer"},me=a("async-profiler \u7684 README \u6587\u6863"),ve=a(" \u4EE5\u53CA "),be={href:"https://github.com/async-profiler/async-profiler/discussions",target:"_blank",rel:"noopener noreferrer"},fe=a("async-profiler \u7684 Github Discussions"),ge=a(" \u7B49\u6750\u6599\u3002"),_e=i(`

    \u4F8B\u5982\uFF0C\u4EE5\u4E0B\u547D\u4EE4\u4E2D\uFF0C-s \u5C06\u8F93\u51FA\u4E2D\u7684\u7C7B\u540D\u79F0\u6307\u5B9A\u4E3A\u7B80\u77ED\u683C\u5F0F\uFF0C-g \u663E\u793A\u65B9\u6CD5\u7684\u5B8C\u6574\u7B7E\u540D\uFF0C-a \u6807\u6CE8\u51FA Java \u65B9\u6CD5\uFF0C-l \u4E3A\u539F\u751F\u65B9\u6CD5\u589E\u52A0\u5E93\u540D\u79F0\uFF0C--title \u4E3A\u751F\u6210\u706B\u7130\u56FE\u9875\u9762\u6307\u5B9A\u6807\u9898\uFF0C--minwidth \u5C06\u8FC7\u6EE4\u706B\u7130\u56FE\u4E2D\u5BBD\u5EA6\u4E3A 15% \u4EE5\u4E0B\u7684\u5E27\uFF0C--reverse \u5C06\u706B\u7130\u56FE\u5012\u7F6E\u3002

    profiler stop -s -g -a -l --title <flametitle> --minwidth 15 --reverse
     

    \u751F\u6210\u7684\u706B\u7130\u56FE\u91CC\u7684 unknown

    • https://github.com/jvm-profiling-tools/async-profiler/discussions/409

    \u914D\u7F6E locks/allocations \u6A21\u5F0F\u7684\u9608\u503C

    \u5F53\u4F7F\u7528 lock \u6216 alloc event \u8FDB\u884C profiling \u65F6\uFF0C\u53EF\u4EE5\u4F7F\u7528 --lock \u6216 --alloc \u914D\u7F6E\u9608\u503C\uFF0C\u6BD4\u5982\u4E0B\u5217\u547D\u4EE4\uFF1A

    profiler start -e lock --lock 10ms
     profiler start -e alloc --alloc 2m
     

    \u4F1A\u8BB0\u5F55\u7ADE\u4E89\u65F6\u95F4\u8D85\u8FC7 10ms \u7684\u9501\uFF08\u5982\u679C\u4E0D\u6307\u5B9A\u65F6\u95F4\u5355\u4F4D\uFF0C\u5219\u4F7F\u7528 ns \u4E3A\u5355\u4F4D\uFF09\uFF0C\u6216\u8005\u4EE5 2MB \u7684\u5355\u4F4D\u8BB0\u5F55\u5BF9\u5185\u5B58\u7684\u5206\u914D\u3002

    \u914D\u7F6E JFR \u5757

    \u5F53\u4F7F\u7528 JFR \u4F5C\u4E3A\u8F93\u51FA\u683C\u5F0F\u65F6\uFF0C\u53EF\u4EE5\u4F7F\u7528 --chunksize \u6216 --chunktime \u914D\u7F6E\u5355\u4E2A JFR \u5757\u7684\u5927\u81F4\u5BB9\u91CF\uFF08\u4EE5 byte \u4E3A\u5355\u4F4D\uFF0C\u9ED8\u8BA4 100 MB\uFF09\u548C\u65F6\u95F4\u9650\u5236\uFF08\u9ED8\u8BA4\u503C\u4E3A 1 \u5C0F\u65F6\uFF09\uFF0C\u6BD4\u5982\uFF1A

    profiler start -f profile.jfr --chunksize 100m --chunktime 1h
    @@ -85,13 +85,13 @@ profiler start --ttsp 

    \u76F4\u63A5\u6307\u5B9A JFR \u4E8B\u4EF6\u5217\u8868\uFF0C\u4F8B\u5982\u542F\u7528 jdk.YoungGarbageCollection \u548C jdk.OldGarbageCollection \u4E8B\u4EF6\uFF1A

    profiler start -e cpu --jfrsync +jdk.YoungGarbageCollection+jdk.OldGarbageCollection -f combined.jfr
     

    \u6CE8\u610F\u4E8B\u9879

    • \u5F53\u6307\u5B9A\u4E8B\u4EF6\u5217\u8868\u65F6\uFF0C\u7531\u4E8E\u9017\u53F7 , \u7528\u4E8E\u5206\u9694\u4E0D\u540C\u7684\u9009\u9879\uFF0C\u56E0\u6B64\u4E8B\u4EF6\u4E4B\u95F4\u4F7F\u7528\u52A0\u53F7 + \u5206\u9694\u3002
    • \u5982\u679C --jfrsync \u53C2\u6570\u4E0D\u4EE5 + \u5F00\u5934\uFF0C\u5219\u88AB\u89C6\u4E3A\u9884\u7F6E\u914D\u7F6E\u540D\u6216 .jfc \u914D\u7F6E\u6587\u4EF6\u7684\u8DEF\u5F84\u3002
    • \u76F4\u63A5\u6307\u5B9A\u4E8B\u4EF6\u5217\u8868\u5728\u76EE\u6807\u5E94\u7528\u8FD0\u884C\u5728\u5BB9\u5668\u4E2D\u65F6\u7279\u522B\u6709\u7528\uFF0C\u65E0\u9700\u989D\u5916\u7684\u6587\u4EF6\u64CD\u4F5C\u3002

    \u5468\u671F\u6027\u4FDD\u5B58\u7ED3\u679C

    \u4F7F\u7528 --loop TIME \u53EF\u4EE5\u6301\u7EED\u8FD0\u884C profiler \u5E76\u5468\u671F\u6027\u4FDD\u5B58\u7ED3\u679C\u3002\u9009\u9879\u683C\u5F0F\u53EF\u4EE5\u662F\u5177\u4F53\u65F6\u95F4 hh:mm:ss \u6216\u4EE5\u79D2\u3001\u5206\u949F\u3001\u5C0F\u65F6\u6216\u5929\u8BA1\u7B97\u7684\u65F6\u95F4\u95F4\u9694\u3002\u9700\u8981\u786E\u4FDD\u6307\u5B9A\u7684\u8F93\u51FA\u6587\u4EF6\u540D\u4E2D\u5305\u542B\u65F6\u95F4\u6233\uFF0C\u5426\u5219\u6BCF\u6B21\u8F93\u51FA\u7684\u7ED3\u679C\u90FD\u4F1A\u8986\u76D6\u4E0A\u6B21\u4FDD\u5B58\u7684\u7ED3\u679C\u3002\u4EE5\u4E0B\u547D\u4EE4\u6301\u7EED\u6267\u884C profiling \u5E76\u5C06\u6BCF\u4E2A\u5C0F\u65F6\u5185\u7684\u8BB0\u5F55\u4FDD\u5B58\u5230\u4E00\u4E2A jfr \u6587\u4EF6\u4E2D\u3002

    \u5982\u679C\u6CA1\u6709\u6307\u5B9A -f \u53C2\u6570\uFF0C\u5219\u4E0D\u4F1A\u4FDD\u5B58\u4EFB\u4F55\u5185\u5BB9\u3002\u5982\u679C -f \u53C2\u6570\u91CC\u6CA1\u6709 %t\uFF0C\u5219\u4F1A\u5FAA\u73AF\u4FDD\u5B58\u5230\u540C\u4E00\u4E2A\u6587\u4EF6\u91CC\u3002

    profiler start --loop 1h -f /var/log/profile-%t.jfr
     

    --timeout \u9009\u9879

    profiler start --timeout 300s
    -
    `,50),Ce=a("\u8FD9\u4E2A\u9009\u9879\u6307\u5B9A profiling \u81EA\u52A8\u5728\u591A\u4E45\u540E\u505C\u6B62\u3002\u8BE5\u9009\u9879\u548C "),je=e("code",null,"--loop",-1),Je=a(" \u9009\u9879\u7684\u683C\u5F0F\u4E00\u81F4\uFF0C\u53EF\u4EE5\u662F\u65F6\u95F4\u70B9\uFF0C\u4E5F\u53EF\u4EE5\u662F\u4E00\u4E2A\u65F6\u95F4\u95F4\u9694\u3002\u8FD9\u4E24\u4E2A\u9009\u9879\u90FD\u662F\u7528\u4E8E "),Se=e("code",null,"start",-1),Fe=a(" action\u3002\u53EF\u53C2\u8003 "),Me={href:"https://github.com/async-profiler/async-profiler/blob/master/docs/ProfilerOptions.md",target:"_blank",rel:"noopener noreferrer"},Oe=a("async-profiler docs"),we=a(" \u4E86\u89E3\u66F4\u591A\u4FE1\u606F\u3002"),Ge=e("h2",{id:"wall-\u9009\u9879",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wall-\u9009\u9879","aria-hidden":"true"},"#"),a(),e("code",null,"--wall"),a(" \u9009\u9879")],-1),Ne=e("p",null,"\u901A\u8FC7 --wall \u9009\u9879\uFF0C\u53EF\u4EE5\u540C\u65F6\u8FDB\u884C CPU \u548C Wall Clock \u7684\u6027\u80FD\u5206\u6790\u3002",-1),Pe=e("ol",null,[e("li",null,"\u8FD9\u79CD\u8054\u5408\u5206\u6790\u6709\u52A9\u4E8E\u66F4\u5168\u9762\u5730\u8BC6\u522B\u548C\u7406\u89E3\u5E94\u7528\u7A0B\u5E8F\u7684\u6027\u80FD\u74F6\u9888\u3002"),e("li",null,"\u5141\u8BB8\u7528\u6237\u72EC\u7ACB\u4E8E CPU \u5206\u6790\u8BBE\u7F6E Wall Clock \u5206\u6790\u7684\u91C7\u6837\u95F4\u9694\u3002\u6BD4\u5982\uFF0C\u53EF\u4EE5\u901A\u8FC7\u8BBE\u7F6E -e cpu -i 10 --wall 200\uFF0C\u5C06 CPU \u91C7\u6837\u95F4\u9694\u8BBE\u4E3A 10 \u6BEB\u79D2\uFF0C\u5899\u949F\u91C7\u6837\u95F4\u9694\u8BBE\u4E3A 200 \u6BEB\u79D2\u3002"),e("li",null,"\u8054\u5408\u8FDB\u884C CPU \u548C Wall Clock \u5206\u6790\u65F6\uFF0C\u8F93\u51FA\u683C\u5F0F\u5FC5\u987B\u8BBE\u7F6E\u4E3A jfr\u3002\u8FD9\u4E00\u683C\u5F0F\u652F\u6301\u8BB0\u5F55\u7EBF\u7A0B\u7684\u72B6\u6001\u4FE1\u606F\uFF08\u5982 STATE_RUNNABLE \u6216 STATE_SLEEPING\uFF09\uFF0C\u4ECE\u800C\u533A\u5206\u4E0D\u540C\u7C7B\u578B\u7684\u91C7\u6837\u4E8B\u4EF6\u3002")],-1),Re=a("\u53EF\u53C2\u8003 "),Ie={href:"https://github.com/async-profiler/async-profiler/issues/740",target:"_blank",rel:"noopener noreferrer"},Te=a("async-profiler Github pr#740"),Le=a(" \u4E86\u89E3\u66F4\u591A\u4FE1\u606F\u3002"),$e=i(`

    \u5F71\u54CD\uFF1A

    Linux \u5E73\u53F0: \u8FD9\u4E2A\u65B0\u529F\u80FD\u4EC5\u5728 Linux \u5E73\u53F0\u4E0A\u6709\u6548\u3002macOS \u4E0A\u7684 CPU \u5206\u6790\u5F15\u64CE\u5DF2\u7ECF\u57FA\u4E8E Wall clock \u6A21\u5F0F\uFF0C\u56E0\u6B64\u6CA1\u6709\u989D\u5916\u7684\u6536\u76CA\u3002 \u6027\u80FD\u5F00\u9500: \u542F\u7528 Wall clock \u5206\u6790\u4F1A\u589E\u52A0\u6027\u80FD\u5F00\u9500\uFF0C\u56E0\u6B64\u5728\u540C\u65F6\u5206\u6790 CPU \u548C Wall clock \u65F6\uFF0C\u5EFA\u8BAE\u589E\u52A0 Wall clock \u7684\u95F4\u9694\u3002

    profiler start -e cpu -i 10 --wall 100 -f out.jfr
    -

    ctimer\u4E8B\u4EF6

    ctimer \u4E8B\u4EF6\u662F\u4E00\u79CD\u65B0\u7684 CPU \u91C7\u6837\u6A21\u5F0F\uFF0C\u57FA\u4E8E timer_create\uFF0C\u63D0\u4F9B\u4E86\u65E0\u9700 perf_events \u7684\u7CBE\u786E CPU \u91C7\u6837\u3002

    \u5728\u67D0\u4E9B\u60C5\u51B5\u4E0B\uFF0Cperf_events \u53EF\u80FD\u4E0D\u53EF\u7528\uFF0C\u4F8B\u5982\u7531\u4E8E perf_event_paranoid \u8BBE\u7F6E\u6216 seccomp \u9650\u5236\uFF0C\u6216\u8005\u5728\u5BB9\u5668\u73AF\u5883\u4E2D\u3002\u867D\u7136 itimer \u4E8B\u4EF6\u53EF\u4EE5\u5728\u5BB9\u5668\u4E2D\u5DE5\u4F5C\uFF0C\u4F46\u53EF\u80FD\u5B58\u5728\u91C7\u6837\u4E0D\u51C6\u786E\u7684\u95EE\u9898\u3002

    ctimer \u4E8B\u4EF6\u7ED3\u5408\u4E86 cpu \u548C itimer \u7684\u4F18\u70B9\uFF1A

    • \u9AD8\u51C6\u786E\u6027\uFF1A\u63D0\u4F9B\u7CBE\u786E\u7684 CPU \u91C7\u6837\u3002
    • \u5BB9\u5668\u53CB\u597D\uFF1A\u9ED8\u8BA4\u5728\u5BB9\u5668\u4E2D\u53EF\u7528\u3002
    • \u4F4E\u8D44\u6E90\u6D88\u8017\uFF1A\u4E0D\u6D88\u8017\u6587\u4EF6\u63CF\u8FF0\u7B26\u3002
    `,8),Ue=e("strong",null,[a("\u8BF7\u6CE8\u610F\uFF0C"),e("code",null,"ctimer"),a(" \u4E8B\u4EF6\u76EE\u524D\u4EC5\u5728 "),e("code",null,"Linux"),a(" \u4E0A\u652F\u6301\uFF0C\u4E0D\u652F\u6301 "),e("code",null,"macOS"),a("\u3002")],-1),Ee=a(" \u53EF\u53C2\u8003 "),We={href:"https://github.com/async-profiler/async-profiler/issues/855",target:"_blank",rel:"noopener noreferrer"},Be=a("async-profiler Github Issues"),Ve=a(" \u4E86\u89E3\u66F4\u591A\u4FE1\u606F\u3002"),Ae=i(`

    \u793A\u4F8B\uFF1A

    profiler start -e ctimer -o jfr -f ./out-test.jfr
    -

    vtable\u7279\u6027

    \u5728\u67D0\u4E9B\u5E94\u7528\u7A0B\u5E8F\u4E2D\uFF0C\u5927\u91CF\u7684 CPU \u65F6\u95F4\u82B1\u8D39\u5728\u8C03\u7528 megamorphic \u7684\u865A\u65B9\u6CD5\u6216\u63A5\u53E3\u65B9\u6CD5\u4E0A\uFF0C\u8FD9\u5728\u6027\u80FD\u5206\u6790\u4E2D\u663E\u793A\u4E3A vtable stub \u6216 itable stub\u3002\u8FD9\u65E0\u6CD5\u5E2E\u52A9\u6211\u4EEC\u4E86\u89E3\u7279\u5B9A\u8C03\u7528\u70B9\u4E3A\u4F55\u662Fmegamorphic \u4EE5\u53CA\u5982\u4F55\u4F18\u5316\u5B83\u3002

    vtable \u7279\u6027\u53EF\u4EE5\u5728 vtable stub \u6216 itable stub \u4E4B\u4E0A\u6DFB\u52A0\u4E00\u4E2A\u4F2A\u5E27\uFF0C\u663E\u793A\u5B9E\u9645\u8C03\u7528\u7684\u5BF9\u8C61\u7C7B\u578B\u3002\u8FD9\u6709\u52A9\u4E8E\u6E05\u695A\u5730\u4E86\u89E3\u5728\u7279\u5B9A\u8C03\u7528\u70B9\uFF0C\u4E0D\u540C\u63A5\u6536\u8005\u7684\u6BD4\u4F8B\u3002

    `,5),De=a("\u8BE5\u7279\u6027\u9ED8\u8BA4\u7981\u7528\uFF0C\u53EF\u4EE5\u901A\u8FC7 "),Ke=e("code",null,"-F vtable",-1),ze=a(" \u9009\u9879\u542F\u7528\uFF08\u6216\u4F7F\u7528 "),qe=e("code",null,"features=vtable",-1),He=a("\uFF09\u3002 \u53EF\u53C2\u8003 "),Xe={href:"https://github.com/async-profiler/async-profiler/issues/736",target:"_blank",rel:"noopener noreferrer"},Ye=a("async-profiler Github Issues"),Qe=a(" \u4E86\u89E3\u66F4\u591A\u4FE1\u606F\u3002"),Ze=i(`

    \u793A\u4F8B\uFF1A

    profiler start -F vtable
    -

    comptask \u7279\u6027

    profiler \u91C7\u6837 JIT \u7F16\u8BD1\u5668\u7EBF\u7A0B\u4EE5\u53CA Java \u7EBF\u7A0B\uFF0C\u53EF\u4EE5\u663E\u793A JIT \u7F16\u8BD1\u6240\u6D88\u8017\u7684 CPU \u767E\u5206\u6BD4\u3002\u7136\u800C\uFF0CJava \u65B9\u6CD5\u7684\u7F16\u8BD1\u8D44\u6E90\u6D88\u8017\u5404\u4E0D\u76F8\u540C\uFF0C\u4E86\u89E3\u54EA\u4E9B\u7279\u5B9A\u7684 Java \u65B9\u6CD5\u5728\u7F16\u8BD1\u65F6\u6D88\u8017\u6700\u591A\u7684 CPU \u65F6\u95F4\u975E\u5E38\u6709\u7528\u3002

    comptask \u7279\u6027\u53EF\u4EE5\u5728 C1/C2 \u7684\u5806\u6808\u8DDF\u8E2A\u4E2D\u6DFB\u52A0\u4E00\u4E2A\u865A\u62DF\u5E27\uFF0C\u663E\u793A\u5F53\u524D\u6B63\u5728\u7F16\u8BD1\u7684\u4EFB\u52A1\uFF0C\u5373\u6B63\u5728\u7F16\u8BD1\u7684 Java \u65B9\u6CD5\u3002

    `,5),ea=a("\u8BE5\u7279\u6027\u9ED8\u8BA4\u7981\u7528\uFF0C\u53EF\u4EE5\u901A\u8FC7"),aa=e("code",null," -F comptask",-1),sa=a(" \u9009\u9879\u542F\u7528\uFF08\u6216\u4F7F\u7528 "),na=e("code",null,"features=comptask",-1),ia=a("\uFF09\u3002 \u53EF\u53C2\u8003 "),ra={href:"https://github.com/async-profiler/async-profiler/issues/777",target:"_blank",rel:"noopener noreferrer"},oa=a("async-profiler Github Issues"),la=a(" \u4E86\u89E3\u66F4\u591A\u4FE1\u606F\u3002"),da=i(`

    \u793A\u4F8B\uFF1A

    profiler start -F comptask
    -

    \u914D\u7F6E\u66FF\u4EE3\u7684\u5206\u6790\u4FE1\u53F7

    profiler \u4F7F\u7528 POSIX \u4FE1\u53F7\u6765\u8FDB\u884C\u6027\u80FD\u5206\u6790\u3002\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0CSIGPROF \u7528\u4E8E CPU \u5206\u6790\uFF0CSIGVTALRM \u7528\u4E8E Wall-Clock \u5206\u6790\u3002\u7136\u800C\uFF0C\u5982\u679C\u5E94\u7528\u7A0B\u5E8F\u4E5F\u4F7F\u7528\u8FD9\u4E9B\u4FE1\u53F7\uFF0C\u6216\u8005\u5E0C\u671B\u540C\u65F6\u8FD0\u884C\u591A\u4E2A profiler \u5B9E\u4F8B\uFF0C\u8FD9\u53EF\u80FD\u4F1A\u5BFC\u81F4\u4FE1\u53F7\u51B2\u7A81\u3002

    `,4),ta=a("\u73B0\u5728\uFF0C\u53EF\u4EE5\u4F7F\u7528 "),ca=e("code",null,"signal",-1),pa=a(" \u53C2\u6570\u6765\u914D\u7F6E\u7528\u4E8E\u5206\u6790\u7684\u4FE1\u53F7\uFF0C\u4EE5\u907F\u514D\u51B2\u7A81\u3002 \u53EF\u53C2\u8003 "),ha={href:"https://github.com/async-profiler/async-profiler/issues/759",target:"_blank",rel:"noopener noreferrer"},ua=a("async-profiler Github Issues"),ma=a(" \u4E86\u89E3\u66F4\u591A\u4FE1\u606F\u3002"),va=i(`

    \u8BED\u6CD5

    profiler start --signal <\u4FE1\u53F7\u53F7\u7801>
    +
    `,50),ke=a("\u8FD9\u4E2A\u9009\u9879\u6307\u5B9A profiling \u81EA\u52A8\u5728\u591A\u4E45\u540E\u505C\u6B62\u3002\u8BE5\u9009\u9879\u548C "),xe=e("code",null,"--loop",-1),ye=a(" \u9009\u9879\u7684\u683C\u5F0F\u4E00\u81F4\uFF0C\u53EF\u4EE5\u662F\u65F6\u95F4\u70B9\uFF0C\u4E5F\u53EF\u4EE5\u662F\u4E00\u4E2A\u65F6\u95F4\u95F4\u9694\u3002\u8FD9\u4E24\u4E2A\u9009\u9879\u90FD\u662F\u7528\u4E8E "),Ce=e("code",null,"start",-1),je=a(" action\u3002\u53EF\u53C2\u8003 "),Je={href:"https://github.com/async-profiler/async-profiler/blob/master/docs/ProfilerOptions.md",target:"_blank",rel:"noopener noreferrer"},Se=a("async-profiler docs"),Fe=a(" \u4E86\u89E3\u66F4\u591A\u4FE1\u606F\u3002"),Me=e("h2",{id:"wall-\u9009\u9879",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wall-\u9009\u9879","aria-hidden":"true"},"#"),a(),e("code",null,"--wall"),a(" \u9009\u9879")],-1),Oe=e("p",null,"\u901A\u8FC7 --wall \u9009\u9879\uFF0C\u53EF\u4EE5\u540C\u65F6\u8FDB\u884C CPU \u548C Wall Clock \u7684\u6027\u80FD\u5206\u6790\u3002",-1),we=e("ol",null,[e("li",null,"\u8FD9\u79CD\u8054\u5408\u5206\u6790\u6709\u52A9\u4E8E\u66F4\u5168\u9762\u5730\u8BC6\u522B\u548C\u7406\u89E3\u5E94\u7528\u7A0B\u5E8F\u7684\u6027\u80FD\u74F6\u9888\u3002"),e("li",null,"\u5141\u8BB8\u7528\u6237\u72EC\u7ACB\u4E8E CPU \u5206\u6790\u8BBE\u7F6E Wall Clock \u5206\u6790\u7684\u91C7\u6837\u95F4\u9694\u3002\u6BD4\u5982\uFF0C\u53EF\u4EE5\u901A\u8FC7\u8BBE\u7F6E -e cpu -i 10 --wall 200\uFF0C\u5C06 CPU \u91C7\u6837\u95F4\u9694\u8BBE\u4E3A 10 \u6BEB\u79D2\uFF0C\u5899\u949F\u91C7\u6837\u95F4\u9694\u8BBE\u4E3A 200 \u6BEB\u79D2\u3002"),e("li",null,"\u8054\u5408\u8FDB\u884C CPU \u548C Wall Clock \u5206\u6790\u65F6\uFF0C\u8F93\u51FA\u683C\u5F0F\u5FC5\u987B\u8BBE\u7F6E\u4E3A jfr\u3002\u8FD9\u4E00\u683C\u5F0F\u652F\u6301\u8BB0\u5F55\u7EBF\u7A0B\u7684\u72B6\u6001\u4FE1\u606F\uFF08\u5982 STATE_RUNNABLE \u6216 STATE_SLEEPING\uFF09\uFF0C\u4ECE\u800C\u533A\u5206\u4E0D\u540C\u7C7B\u578B\u7684\u91C7\u6837\u4E8B\u4EF6\u3002")],-1),Ge=a("\u53EF\u53C2\u8003 "),Ne={href:"https://github.com/async-profiler/async-profiler/issues/740",target:"_blank",rel:"noopener noreferrer"},Pe=a("async-profiler Github pr#740"),Re=a(" \u4E86\u89E3\u66F4\u591A\u4FE1\u606F\u3002"),Ie=i(`

    \u5F71\u54CD\uFF1A

    Linux \u5E73\u53F0: \u8FD9\u4E2A\u65B0\u529F\u80FD\u4EC5\u5728 Linux \u5E73\u53F0\u4E0A\u6709\u6548\u3002macOS \u4E0A\u7684 CPU \u5206\u6790\u5F15\u64CE\u5DF2\u7ECF\u57FA\u4E8E Wall clock \u6A21\u5F0F\uFF0C\u56E0\u6B64\u6CA1\u6709\u989D\u5916\u7684\u6536\u76CA\u3002 \u6027\u80FD\u5F00\u9500: \u542F\u7528 Wall clock \u5206\u6790\u4F1A\u589E\u52A0\u6027\u80FD\u5F00\u9500\uFF0C\u56E0\u6B64\u5728\u540C\u65F6\u5206\u6790 CPU \u548C Wall clock \u65F6\uFF0C\u5EFA\u8BAE\u589E\u52A0 Wall clock \u7684\u95F4\u9694\u3002

    profiler start -e cpu -i 10 --wall 100 -f out.jfr
    +

    ctimer\u4E8B\u4EF6

    ctimer \u4E8B\u4EF6\u662F\u4E00\u79CD\u65B0\u7684 CPU \u91C7\u6837\u6A21\u5F0F\uFF0C\u57FA\u4E8E timer_create\uFF0C\u63D0\u4F9B\u4E86\u65E0\u9700 perf_events \u7684\u7CBE\u786E CPU \u91C7\u6837\u3002

    \u5728\u67D0\u4E9B\u60C5\u51B5\u4E0B\uFF0Cperf_events \u53EF\u80FD\u4E0D\u53EF\u7528\uFF0C\u4F8B\u5982\u7531\u4E8E perf_event_paranoid \u8BBE\u7F6E\u6216 seccomp \u9650\u5236\uFF0C\u6216\u8005\u5728\u5BB9\u5668\u73AF\u5883\u4E2D\u3002\u867D\u7136 itimer \u4E8B\u4EF6\u53EF\u4EE5\u5728\u5BB9\u5668\u4E2D\u5DE5\u4F5C\uFF0C\u4F46\u53EF\u80FD\u5B58\u5728\u91C7\u6837\u4E0D\u51C6\u786E\u7684\u95EE\u9898\u3002

    ctimer \u4E8B\u4EF6\u7ED3\u5408\u4E86 cpu \u548C itimer \u7684\u4F18\u70B9\uFF1A

    • \u9AD8\u51C6\u786E\u6027\uFF1A\u63D0\u4F9B\u7CBE\u786E\u7684 CPU \u91C7\u6837\u3002
    • \u5BB9\u5668\u53CB\u597D\uFF1A\u9ED8\u8BA4\u5728\u5BB9\u5668\u4E2D\u53EF\u7528\u3002
    • \u4F4E\u8D44\u6E90\u6D88\u8017\uFF1A\u4E0D\u6D88\u8017\u6587\u4EF6\u63CF\u8FF0\u7B26\u3002
    `,8),Te=e("strong",null,[a("\u8BF7\u6CE8\u610F\uFF0C"),e("code",null,"ctimer"),a(" \u4E8B\u4EF6\u76EE\u524D\u4EC5\u5728 "),e("code",null,"Linux"),a(" \u4E0A\u652F\u6301\uFF0C\u4E0D\u652F\u6301 "),e("code",null,"macOS"),a("\u3002")],-1),Le=a(" \u53EF\u53C2\u8003 "),$e={href:"https://github.com/async-profiler/async-profiler/issues/855",target:"_blank",rel:"noopener noreferrer"},Ue=a("async-profiler Github Issues"),Ee=a(" \u4E86\u89E3\u66F4\u591A\u4FE1\u606F\u3002"),We=i(`

    \u793A\u4F8B\uFF1A

    profiler start -e ctimer -o jfr -f ./out-test.jfr
    +

    vtable\u7279\u6027

    \u5728\u67D0\u4E9B\u5E94\u7528\u7A0B\u5E8F\u4E2D\uFF0C\u5927\u91CF\u7684 CPU \u65F6\u95F4\u82B1\u8D39\u5728\u8C03\u7528 megamorphic \u7684\u865A\u65B9\u6CD5\u6216\u63A5\u53E3\u65B9\u6CD5\u4E0A\uFF0C\u8FD9\u5728\u6027\u80FD\u5206\u6790\u4E2D\u663E\u793A\u4E3A vtable stub \u6216 itable stub\u3002\u8FD9\u65E0\u6CD5\u5E2E\u52A9\u6211\u4EEC\u4E86\u89E3\u7279\u5B9A\u8C03\u7528\u70B9\u4E3A\u4F55\u662Fmegamorphic \u4EE5\u53CA\u5982\u4F55\u4F18\u5316\u5B83\u3002

    vtable \u7279\u6027\u53EF\u4EE5\u5728 vtable stub \u6216 itable stub \u4E4B\u4E0A\u6DFB\u52A0\u4E00\u4E2A\u4F2A\u5E27\uFF0C\u663E\u793A\u5B9E\u9645\u8C03\u7528\u7684\u5BF9\u8C61\u7C7B\u578B\u3002\u8FD9\u6709\u52A9\u4E8E\u6E05\u695A\u5730\u4E86\u89E3\u5728\u7279\u5B9A\u8C03\u7528\u70B9\uFF0C\u4E0D\u540C\u63A5\u6536\u8005\u7684\u6BD4\u4F8B\u3002

    `,5),Be=a("\u8BE5\u7279\u6027\u9ED8\u8BA4\u7981\u7528\uFF0C\u53EF\u4EE5\u901A\u8FC7 "),Ve=e("code",null,"-F vtable",-1),Ae=a(" \u9009\u9879\u542F\u7528\uFF08\u6216\u4F7F\u7528 "),De=e("code",null,"features=vtable",-1),Ke=a("\uFF09\u3002 \u53EF\u53C2\u8003 "),ze={href:"https://github.com/async-profiler/async-profiler/issues/736",target:"_blank",rel:"noopener noreferrer"},qe=a("async-profiler Github Issues"),He=a(" \u4E86\u89E3\u66F4\u591A\u4FE1\u606F\u3002"),Xe=i(`

    \u793A\u4F8B\uFF1A

    profiler start -F vtable
    +

    comptask \u7279\u6027

    profiler \u91C7\u6837 JIT \u7F16\u8BD1\u5668\u7EBF\u7A0B\u4EE5\u53CA Java \u7EBF\u7A0B\uFF0C\u53EF\u4EE5\u663E\u793A JIT \u7F16\u8BD1\u6240\u6D88\u8017\u7684 CPU \u767E\u5206\u6BD4\u3002\u7136\u800C\uFF0CJava \u65B9\u6CD5\u7684\u7F16\u8BD1\u8D44\u6E90\u6D88\u8017\u5404\u4E0D\u76F8\u540C\uFF0C\u4E86\u89E3\u54EA\u4E9B\u7279\u5B9A\u7684 Java \u65B9\u6CD5\u5728\u7F16\u8BD1\u65F6\u6D88\u8017\u6700\u591A\u7684 CPU \u65F6\u95F4\u975E\u5E38\u6709\u7528\u3002

    comptask \u7279\u6027\u53EF\u4EE5\u5728 C1/C2 \u7684\u5806\u6808\u8DDF\u8E2A\u4E2D\u6DFB\u52A0\u4E00\u4E2A\u865A\u62DF\u5E27\uFF0C\u663E\u793A\u5F53\u524D\u6B63\u5728\u7F16\u8BD1\u7684\u4EFB\u52A1\uFF0C\u5373\u6B63\u5728\u7F16\u8BD1\u7684 Java \u65B9\u6CD5\u3002

    `,5),Ye=a("\u8BE5\u7279\u6027\u9ED8\u8BA4\u7981\u7528\uFF0C\u53EF\u4EE5\u901A\u8FC7"),Qe=e("code",null," -F comptask",-1),Ze=a(" \u9009\u9879\u542F\u7528\uFF08\u6216\u4F7F\u7528 "),ea=e("code",null,"features=comptask",-1),aa=a("\uFF09\u3002 \u53EF\u53C2\u8003 "),sa={href:"https://github.com/async-profiler/async-profiler/issues/777",target:"_blank",rel:"noopener noreferrer"},na=a("async-profiler Github Issues"),ia=a(" \u4E86\u89E3\u66F4\u591A\u4FE1\u606F\u3002"),ra=i(`

    \u793A\u4F8B\uFF1A

    profiler start -F comptask
    +

    \u914D\u7F6E\u66FF\u4EE3\u7684\u5206\u6790\u4FE1\u53F7

    profiler \u4F7F\u7528 POSIX \u4FE1\u53F7\u6765\u8FDB\u884C\u6027\u80FD\u5206\u6790\u3002\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0CSIGPROF \u7528\u4E8E CPU \u5206\u6790\uFF0CSIGVTALRM \u7528\u4E8E Wall-Clock \u5206\u6790\u3002\u7136\u800C\uFF0C\u5982\u679C\u5E94\u7528\u7A0B\u5E8F\u4E5F\u4F7F\u7528\u8FD9\u4E9B\u4FE1\u53F7\uFF0C\u6216\u8005\u5E0C\u671B\u540C\u65F6\u8FD0\u884C\u591A\u4E2A profiler \u5B9E\u4F8B\uFF0C\u8FD9\u53EF\u80FD\u4F1A\u5BFC\u81F4\u4FE1\u53F7\u51B2\u7A81\u3002

    `,4),oa=a("\u73B0\u5728\uFF0C\u53EF\u4EE5\u4F7F\u7528 "),la=e("code",null,"signal",-1),da=a(" \u53C2\u6570\u6765\u914D\u7F6E\u7528\u4E8E\u5206\u6790\u7684\u4FE1\u53F7\uFF0C\u4EE5\u907F\u514D\u51B2\u7A81\u3002 \u53EF\u53C2\u8003 "),ta={href:"https://github.com/async-profiler/async-profiler/issues/759",target:"_blank",rel:"noopener noreferrer"},ca=a("async-profiler Github Issues"),pa=a(" \u4E86\u89E3\u66F4\u591A\u4FE1\u606F\u3002"),ha=i(`

    \u8BED\u6CD5

    profiler start --signal <\u4FE1\u53F7\u53F7\u7801>
     

    \u5982\u679C\u9700\u8981\u5206\u522B\u6307\u5B9A CPU \u548C Wall-Clock \u5206\u6790\u7684\u4FE1\u53F7\uFF0C\u53EF\u4EE5\u4F7F\u7528\u4EE5\u4E0B\u8BED\u6CD5\uFF1A

    profiler start --signal <CPU\u4FE1\u53F7\u53F7\u7801>/<Wall\u4FE1\u53F7\u53F7\u7801>
     

    --clock \u9009\u9879

    --clock \u9009\u9879\u5141\u8BB8\u7528\u6237\u63A7\u5236\u7528\u4E8E\u91C7\u6837\u65F6\u95F4\u6233\u7684\u65F6\u949F\u6E90\u3002\u8FD9\u5BF9\u4E8E\u9700\u8981\u5C06 profiler \u7684\u6570\u636E\u4E0E\u5176\u4ED6\u5DE5\u5177\u7684\u6570\u636E\u8FDB\u884C\u65F6\u95F4\u6233\u5BF9\u9F50\u7684\u573A\u666F\u975E\u5E38\u6709\u7528\u3002

    \u7528\u6CD5

    profiler start --clock <tsc|monotonic>
    -

    \u53C2\u6570

    `,9),ba=e("li",null,[e("code",null,"tsc"),a("\uFF1A\u4F7F\u7528 CPU \u7684\u65F6\u95F4\u6233\u8BA1\u6570\u5668\uFF08"),e("code",null,"RDTSC"),a("\uFF09\u3002\u8FD9\u662F\u9ED8\u8BA4\u9009\u9879\uFF0C\u63D0\u4F9B\u9AD8\u7CBE\u5EA6\u7684\u65F6\u95F4\u6233\u3002")],-1),fa=e("code",null,"monotonic",-1),ga=a("\uFF1A\u4F7F\u7528\u64CD\u4F5C\u7CFB\u7EDF\u7684\u5355\u8C03\u65F6\u949F\uFF08"),_a=e("code",null,"CLOCK_MONOTONIC",-1),ka=a("\uFF09\u3002\u8FD9\u6709\u52A9\u4E8E\u5728\u591A\u79CD\u6570\u636E\u6E90\u4E4B\u95F4\u5BF9\u9F50\u65F6\u95F4\u6233\u3002 \u53EF\u53C2\u8003 "),xa={href:"https://github.com/async-profiler/async-profiler/issues/723",target:"_blank",rel:"noopener noreferrer"},ya=a("async-profiler Github Issues"),Ca=a(" \u4E86\u89E3\u66F4\u591A\u4FE1\u606F\u3002"),ja=i(`

    \u793A\u4F8B :

    \u4F7F\u7528 CLOCK_MONOTONIC \u4F5C\u4E3A\u65F6\u95F4\u6233\u6E90\uFF1A

    profiler start --clock monotonic
    -

    \u6CE8\u610F\u4E8B\u9879:

    • \u5F53\u9700\u8981\u5C06 profiler \u7684\u6570\u636E\u4E0E\u5176\u4ED6\u4F7F\u7528 CLOCK_MONOTONIC \u7684\u5DE5\u5177\uFF08\u4F8B\u5982 perf\uFF09\u7684\u6570\u636E\u8FDB\u884C\u5BF9\u9F50\u65F6\uFF0C\u4F7F\u7528 --clock monotonic\u3002
    • \u5728\u4F7F\u7528 jfrsync \u6A21\u5F0F\u65F6\uFF0C\u8BF7\u8C28\u614E\u4F7F\u7528 --clock \u9009\u9879\uFF0C\u56E0\u4E3A JVM \u548C profiler \u53EF\u80FD\u4F7F\u7528\u4E0D\u540C\u7684\u65F6\u95F4\u6233\u6E90\uFF0C\u8FD9\u53EF\u80FD\u5BFC\u81F4\u7ED3\u679C\u4E0D\u4E00\u81F4\u3002

    --norm \u9009\u9879

    \u5728 Java 20 \u53CA\u66F4\u65E9\u7684\u7248\u672C\u4E2D\uFF0C\u7F16\u8BD1\u5668\u4E3A lambda \u8868\u8FBE\u5F0F\u751F\u6210\u7684\u65B9\u6CD5\u540D\u79F0\u5305\u542B\u552F\u4E00\u7684\u6570\u5B57\u540E\u7F00\u3002\u4F8B\u5982\uFF0C\u540C\u4E00\u4EE3\u7801\u4F4D\u7F6E\u5B9A\u4E49\u7684 lambda \u8868\u8FBE\u5F0F\uFF0C\u53EF\u80FD\u4F1A\u751F\u6210\u591A\u4E2A\u4E0D\u540C\u7684\u5E27\u540D\u79F0\uFF0C\u56E0\u4E3A\u6BCF\u4E2A lambda \u65B9\u6CD5\u7684\u540D\u79F0\u90FD\u4F1A\u9644\u52A0\u4E00\u4E2A\u552F\u4E00\u7684\u6570\u5B57\u540E\u7F00\uFF08\u5982 lambda$method$0\u3001lambda$method$1 \u7B49\uFF09\u3002\u8FD9\u4F1A\u5BFC\u81F4\u903B\u8F91\u4E0A\u76F8\u540C\u7684\u5806\u6808\u65E0\u6CD5\u5728\u706B\u7130\u56FE\u4E2D\u5408\u5E76\uFF0C\u589E\u52A0\u4E86\u6027\u80FD\u5206\u6790\u7684\u590D\u6742\u6027\u3002

    `,7),Ja=a("\u4E3A\u4E86\u89E3\u51B3\u8FD9\u4E2A\u95EE\u9898\uFF0C"),Sa=e("code",null,"profiler",-1),Fa=a(" \u65B0\u589E\u4E86 "),Ma=e("code",null,"--norm",-1),Oa=a(" \u9009\u9879\uFF0C\u53EF\u4EE5\u5728\u751F\u6210\u8F93\u51FA\u65F6\u81EA\u52A8\u89C4\u8303\u5316\u65B9\u6CD5\u540D\u79F0\uFF0C\u53BB\u9664\u8FD9\u4E9B\u6570\u5B57\u540E\u7F00\uFF0C\u4F7F\u76F8\u540C\u7684\u5806\u6808\u80FD\u591F\u6B63\u786E\u5730\u5408\u5E76\u3002 \u53EF\u53C2\u8003 "),wa={href:"https://github.com/async-profiler/async-profiler/issues/832",target:"_blank",rel:"noopener noreferrer"},Ga=a("async-profiler Github Issues"),Na=a(" \u4E86\u89E3\u66F4\u591A\u4FE1\u606F\u3002"),Pa=i(`

    \u793A\u4F8B:

    \u751F\u6210\u89C4\u8303\u5316\u7684\u706B\u7130\u56FE:

    profiler start --norm
    -
    `,3);function Ra(Ia,Ta){const s=c("ExternalLinkIcon");return d(),t("div",null,[h,e("p",null,[e("a",u,[m,v,n(s)])]),e("div",b,[f,e("p",null,[g,e("a",_,[k,n(s)]),x])]),y,C,e("p",null,[j,J,e("a",S,[F,n(s)]),M]),O,e("p",null,[w,e("a",G,[N,n(s)]),P,R,I,T,L,$,U]),E,e("p",null,[W,e("a",B,[V,n(s)]),A,D,K]),z,e("p",null,[q,e("a",H,[X,n(s)]),Y]),Q,e("p",null,[Z,e("a",ee,[ae,n(s)])]),se,e("p",null,[ne,ie,re,oe,le,de,te,ce,pe,he,ue,me,ve,e("a",be,[fe,n(s)]),ge,e("a",_e,[ke,n(s)]),xe]),ye,e("p",null,[Ce,je,Je,Se,Fe,e("a",Me,[Oe,n(s)]),we]),Ge,Ne,Pe,e("p",null,[Re,e("a",Ie,[Te,n(s)]),Le]),$e,e("p",null,[Ue,Ee,e("a",We,[Be,n(s)]),Ve]),Ae,e("p",null,[De,Ke,ze,qe,He,e("a",Xe,[Ye,n(s)]),Qe]),Ze,e("p",null,[ea,aa,sa,na,ia,e("a",ra,[oa,n(s)]),la]),da,e("p",null,[ta,ca,pa,e("a",ha,[ua,n(s)]),ma]),va,e("ul",null,[ba,e("li",null,[fa,ga,_a,ka,e("a",xa,[ya,n(s)]),Ca])]),ja,e("p",null,[Ja,Sa,Fa,Ma,Oa,e("a",wa,[Ga,n(s)]),Na]),Pa])}const Ua=l(p,[["render",Ra],["__file","profiler.html.vue"]]);export{Ua as default}; +

    \u53C2\u6570

    `,9),ua=e("li",null,[e("code",null,"tsc"),a("\uFF1A\u4F7F\u7528 CPU \u7684\u65F6\u95F4\u6233\u8BA1\u6570\u5668\uFF08"),e("code",null,"RDTSC"),a("\uFF09\u3002\u8FD9\u662F\u9ED8\u8BA4\u9009\u9879\uFF0C\u63D0\u4F9B\u9AD8\u7CBE\u5EA6\u7684\u65F6\u95F4\u6233\u3002")],-1),ma=e("code",null,"monotonic",-1),va=a("\uFF1A\u4F7F\u7528\u64CD\u4F5C\u7CFB\u7EDF\u7684\u5355\u8C03\u65F6\u949F\uFF08"),ba=e("code",null,"CLOCK_MONOTONIC",-1),fa=a("\uFF09\u3002\u8FD9\u6709\u52A9\u4E8E\u5728\u591A\u79CD\u6570\u636E\u6E90\u4E4B\u95F4\u5BF9\u9F50\u65F6\u95F4\u6233\u3002 \u53EF\u53C2\u8003 "),ga={href:"https://github.com/async-profiler/async-profiler/issues/723",target:"_blank",rel:"noopener noreferrer"},_a=a("async-profiler Github Issues"),ka=a(" \u4E86\u89E3\u66F4\u591A\u4FE1\u606F\u3002"),xa=i(`

    \u793A\u4F8B :

    \u4F7F\u7528 CLOCK_MONOTONIC \u4F5C\u4E3A\u65F6\u95F4\u6233\u6E90\uFF1A

    profiler start --clock monotonic
    +

    \u6CE8\u610F\u4E8B\u9879:

    • \u5F53\u9700\u8981\u5C06 profiler \u7684\u6570\u636E\u4E0E\u5176\u4ED6\u4F7F\u7528 CLOCK_MONOTONIC \u7684\u5DE5\u5177\uFF08\u4F8B\u5982 perf\uFF09\u7684\u6570\u636E\u8FDB\u884C\u5BF9\u9F50\u65F6\uFF0C\u4F7F\u7528 --clock monotonic\u3002
    • \u5728\u4F7F\u7528 jfrsync \u6A21\u5F0F\u65F6\uFF0C\u8BF7\u8C28\u614E\u4F7F\u7528 --clock \u9009\u9879\uFF0C\u56E0\u4E3A JVM \u548C profiler \u53EF\u80FD\u4F7F\u7528\u4E0D\u540C\u7684\u65F6\u95F4\u6233\u6E90\uFF0C\u8FD9\u53EF\u80FD\u5BFC\u81F4\u7ED3\u679C\u4E0D\u4E00\u81F4\u3002

    --norm \u9009\u9879

    \u5728 Java 20 \u53CA\u66F4\u65E9\u7684\u7248\u672C\u4E2D\uFF0C\u7F16\u8BD1\u5668\u4E3A lambda \u8868\u8FBE\u5F0F\u751F\u6210\u7684\u65B9\u6CD5\u540D\u79F0\u5305\u542B\u552F\u4E00\u7684\u6570\u5B57\u540E\u7F00\u3002\u4F8B\u5982\uFF0C\u540C\u4E00\u4EE3\u7801\u4F4D\u7F6E\u5B9A\u4E49\u7684 lambda \u8868\u8FBE\u5F0F\uFF0C\u53EF\u80FD\u4F1A\u751F\u6210\u591A\u4E2A\u4E0D\u540C\u7684\u5E27\u540D\u79F0\uFF0C\u56E0\u4E3A\u6BCF\u4E2A lambda \u65B9\u6CD5\u7684\u540D\u79F0\u90FD\u4F1A\u9644\u52A0\u4E00\u4E2A\u552F\u4E00\u7684\u6570\u5B57\u540E\u7F00\uFF08\u5982 lambda$method$0\u3001lambda$method$1 \u7B49\uFF09\u3002\u8FD9\u4F1A\u5BFC\u81F4\u903B\u8F91\u4E0A\u76F8\u540C\u7684\u5806\u6808\u65E0\u6CD5\u5728\u706B\u7130\u56FE\u4E2D\u5408\u5E76\uFF0C\u589E\u52A0\u4E86\u6027\u80FD\u5206\u6790\u7684\u590D\u6742\u6027\u3002

    `,7),ya=a("\u4E3A\u4E86\u89E3\u51B3\u8FD9\u4E2A\u95EE\u9898\uFF0C"),Ca=e("code",null,"profiler",-1),ja=a(" \u65B0\u589E\u4E86 "),Ja=e("code",null,"--norm",-1),Sa=a(" \u9009\u9879\uFF0C\u53EF\u4EE5\u5728\u751F\u6210\u8F93\u51FA\u65F6\u81EA\u52A8\u89C4\u8303\u5316\u65B9\u6CD5\u540D\u79F0\uFF0C\u53BB\u9664\u8FD9\u4E9B\u6570\u5B57\u540E\u7F00\uFF0C\u4F7F\u76F8\u540C\u7684\u5806\u6808\u80FD\u591F\u6B63\u786E\u5730\u5408\u5E76\u3002 \u53EF\u53C2\u8003 "),Fa={href:"https://github.com/async-profiler/async-profiler/issues/832",target:"_blank",rel:"noopener noreferrer"},Ma=a("async-profiler Github Issues"),Oa=a(" \u4E86\u89E3\u66F4\u591A\u4FE1\u606F\u3002"),wa=i(`

    \u793A\u4F8B:

    \u751F\u6210\u89C4\u8303\u5316\u7684\u706B\u7130\u56FE:

    profiler start --norm
    +
    `,3);function Ga(Na,Pa){const s=c("ExternalLinkIcon");return d(),t("div",null,[h,e("div",u,[m,e("p",null,[v,e("a",b,[f,n(s)]),g])]),_,k,e("p",null,[x,y,e("a",C,[j,n(s)]),J]),S,e("p",null,[F,e("a",M,[O,n(s)]),w,G,N,P,R,I,T]),L,e("p",null,[$,e("a",U,[E,n(s)]),W,B,V]),A,e("p",null,[D,e("a",K,[z,n(s)]),q]),H,e("p",null,[X,e("a",Y,[Q,n(s)])]),Z,e("p",null,[ee,ae,se,ne,ie,re,oe,le,de,te,ce,pe,he,e("a",ue,[me,n(s)]),ve,e("a",be,[fe,n(s)]),ge]),_e,e("p",null,[ke,xe,ye,Ce,je,e("a",Je,[Se,n(s)]),Fe]),Me,Oe,we,e("p",null,[Ge,e("a",Ne,[Pe,n(s)]),Re]),Ie,e("p",null,[Te,Le,e("a",$e,[Ue,n(s)]),Ee]),We,e("p",null,[Be,Ve,Ae,De,Ke,e("a",ze,[qe,n(s)]),He]),Xe,e("p",null,[Ye,Qe,Ze,ea,aa,e("a",sa,[na,n(s)]),ia]),ra,e("p",null,[oa,la,da,e("a",ta,[ca,n(s)]),pa]),ha,e("ul",null,[ua,e("li",null,[ma,va,ba,fa,e("a",ga,[_a,n(s)]),ka])]),xa,e("p",null,[ya,Ca,ja,Ja,Sa,e("a",Fa,[Ma,n(s)]),Oa]),wa])}const Ta=l(p,[["render",Ga],["__file","profiler.html.vue"]]);export{Ta as default}; diff --git a/assets/pwd.html.b52402a6.js b/assets/pwd.html.5af5f815.js similarity index 68% rename from assets/pwd.html.b52402a6.js rename to assets/pwd.html.5af5f815.js index 2256a77a5..ec6e1d011 100644 --- a/assets/pwd.html.b52402a6.js +++ b/assets/pwd.html.5af5f815.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-1b8ba240","path":"/en/doc/pwd.html","title":"pwd","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/pwd.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-1b8ba240","path":"/en/doc/pwd.html","title":"pwd","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/pwd.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/pwd.html.60a0a503.js b/assets/pwd.html.60a0a503.js new file mode 100644 index 000000000..8d049071f --- /dev/null +++ b/assets/pwd.html.60a0a503.js @@ -0,0 +1,2 @@ +import{_ as e,o as a,c as s,d as n}from"./app.e2427bec.js";const d={},i=n(`

    pwd

    TIP

    Return working directory name

    Usage

    $ pwd
    +
    `,4),t=[i];function c(r,o){return a(),s("div",null,t)}const h=e(d,[["render",c],["__file","pwd.html.vue"]]);export{h as default}; diff --git a/assets/pwd.html.9c033639.js b/assets/pwd.html.9c033639.js deleted file mode 100644 index 8f366e3f4..000000000 --- a/assets/pwd.html.9c033639.js +++ /dev/null @@ -1,2 +0,0 @@ -import{_ as s,o as t,c as o,a as e,b as r,e as a,d as c,r as d}from"./app.524ecf5c.js";const i={},l=e("h1",{id:"pwd",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#pwd","aria-hidden":"true"},"#"),a(" pwd")],-1),h={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-pwd",target:"_blank",rel:"noopener noreferrer"},p=e("code",null,"pwd",-1),u=a(" online tutorial"),_=c(`

    TIP

    Return working directory name

    Usage

    $ pwd
    -
    `,3);function m(f,g){const n=d("ExternalLinkIcon");return t(),o("div",null,[l,e("p",null,[e("a",h,[p,u,r(n)])]),_])}const b=s(i,[["render",m],["__file","pwd.html.vue"]]);export{b as default}; diff --git a/assets/pwd.html.a1551912.js b/assets/pwd.html.a1551912.js new file mode 100644 index 000000000..31f43b2b0 --- /dev/null +++ b/assets/pwd.html.a1551912.js @@ -0,0 +1,2 @@ +import{_ as e,o as a,c as s,d as n}from"./app.e2427bec.js";const d={},i=n(`

    pwd

    \u63D0\u793A

    \u8FD4\u56DE\u5F53\u524D\u7684\u5DE5\u4F5C\u76EE\u5F55\uFF0C\u548C linux \u547D\u4EE4\u7C7B\u4F3C

    \u4F7F\u7528\u53C2\u8003

    $ pwd
    +
    `,4),c=[i];function t(r,l){return a(),s("div",null,c)}const h=e(d,[["render",t],["__file","pwd.html.vue"]]);export{h as default}; diff --git a/assets/pwd.html.f8e10ae4.js b/assets/pwd.html.f8e10ae4.js deleted file mode 100644 index 9d9637fde..000000000 --- a/assets/pwd.html.f8e10ae4.js +++ /dev/null @@ -1,2 +0,0 @@ -import{_ as s,o as t,c as o,a as e,b as c,e as a,d,r}from"./app.524ecf5c.js";const i={},l=e("h1",{id:"pwd",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#pwd","aria-hidden":"true"},"#"),a(" pwd")],-1),h={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-pwd",target:"_blank",rel:"noopener noreferrer"},p=e("code",null,"pwd",-1),_=a("\u5728\u7EBF\u6559\u7A0B"),u=d(`

    \u63D0\u793A

    \u8FD4\u56DE\u5F53\u524D\u7684\u5DE5\u4F5C\u76EE\u5F55\uFF0C\u548C linux \u547D\u4EE4\u7C7B\u4F3C

    \u4F7F\u7528\u53C2\u8003

    $ pwd
    -
    `,3);function m(f,v){const n=r("ExternalLinkIcon");return t(),o("div",null,[l,e("p",null,[e("a",h,[p,_,c(n)])]),u])}const x=s(i,[["render",m],["__file","pwd.html.vue"]]);export{x as default}; diff --git a/assets/pwd.html.48cbf02c.js b/assets/pwd.html.fe379ca1.js similarity index 71% rename from assets/pwd.html.48cbf02c.js rename to assets/pwd.html.fe379ca1.js index ce6281415..589298f8e 100644 --- a/assets/pwd.html.48cbf02c.js +++ b/assets/pwd.html.fe379ca1.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-1c2d8c2c","path":"/doc/pwd.html","title":"pwd","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/pwd.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-1c2d8c2c","path":"/doc/pwd.html","title":"pwd","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/pwd.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/quick-start.html.bca18fad.js b/assets/quick-start.html.0a841ca8.js similarity index 90% rename from assets/quick-start.html.bca18fad.js rename to assets/quick-start.html.0a841ca8.js index 5a3c22b08..f8208356d 100644 --- a/assets/quick-start.html.bca18fad.js +++ b/assets/quick-start.html.0a841ca8.js @@ -1 +1 @@ -const t=JSON.parse('{"key":"v-d98607ca","path":"/en/doc/quick-start.html","title":"Quick Start","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"1. Start math-game","slug":"_1-start-math-game","link":"#_1-start-math-game","children":[]},{"level":2,"title":"2. Start Arthas","slug":"_2-start-arthas","link":"#_2-start-arthas","children":[{"level":3,"title":"Linux/Unix/Mac","slug":"linux-unix-mac","link":"#linux-unix-mac","children":[]}]},{"level":2,"title":"3. Check the Dashboard","slug":"_3-check-the-dashboard","link":"#_3-check-the-dashboard","children":[]},{"level":2,"title":"4. Get the Main Class of the math-game process with the thread command","slug":"_4-get-the-main-class-of-the-math-game-process-with-the-thread-command","link":"#_4-get-the-main-class-of-the-math-game-process-with-the-thread-command","children":[]},{"level":2,"title":"5. Decompile Main Class with jad command","slug":"_5-decompile-main-class-with-jad-command","link":"#_5-decompile-main-class-with-jad-command","children":[]},{"level":2,"title":"6. watch","slug":"_6-watch","link":"#_6-watch","children":[]},{"level":2,"title":"7. Exit Arthas","slug":"_7-exit-arthas","link":"#_7-exit-arthas","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/quick-start.md","version":"4.3.3"}');export{t as data}; +const t=JSON.parse('{"key":"v-d98607ca","path":"/en/doc/quick-start.html","title":"Quick Start","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"1. Start math-game","slug":"_1-start-math-game","link":"#_1-start-math-game","children":[]},{"level":2,"title":"2. Start Arthas","slug":"_2-start-arthas","link":"#_2-start-arthas","children":[{"level":3,"title":"Linux/Unix/Mac","slug":"linux-unix-mac","link":"#linux-unix-mac","children":[]}]},{"level":2,"title":"3. Check the Dashboard","slug":"_3-check-the-dashboard","link":"#_3-check-the-dashboard","children":[]},{"level":2,"title":"4. Get the Main Class of the math-game process with the thread command","slug":"_4-get-the-main-class-of-the-math-game-process-with-the-thread-command","link":"#_4-get-the-main-class-of-the-math-game-process-with-the-thread-command","children":[]},{"level":2,"title":"5. Decompile Main Class with jad command","slug":"_5-decompile-main-class-with-jad-command","link":"#_5-decompile-main-class-with-jad-command","children":[]},{"level":2,"title":"6. watch","slug":"_6-watch","link":"#_6-watch","children":[]},{"level":2,"title":"7. Exit Arthas","slug":"_7-exit-arthas","link":"#_7-exit-arthas","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/quick-start.md","version":"4.3.5"}');export{t as data}; diff --git a/assets/quick-start.html.c6104c27.js b/assets/quick-start.html.4a4a854b.js similarity index 92% rename from assets/quick-start.html.c6104c27.js rename to assets/quick-start.html.4a4a854b.js index 137e8eea1..50df1bde7 100644 --- a/assets/quick-start.html.c6104c27.js +++ b/assets/quick-start.html.4a4a854b.js @@ -1 +1 @@ -const a=JSON.parse('{"key":"v-5afc3a07","path":"/doc/quick-start.html","title":"\u5FEB\u901F\u5165\u95E8","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"1. \u542F\u52A8 math-game","slug":"_1-\u542F\u52A8-math-game","link":"#_1-\u542F\u52A8-math-game","children":[]},{"level":2,"title":"2. \u542F\u52A8 arthas","slug":"_2-\u542F\u52A8-arthas","link":"#_2-\u542F\u52A8-arthas","children":[]},{"level":2,"title":"3. \u67E5\u770B dashboard","slug":"_3-\u67E5\u770B-dashboard","link":"#_3-\u67E5\u770B-dashboard","children":[]},{"level":2,"title":"4. \u901A\u8FC7 thread \u547D\u4EE4\u6765\u83B7\u53D6\u5230math-game\u8FDB\u7A0B\u7684 Main Class","slug":"_4-\u901A\u8FC7-thread-\u547D\u4EE4\u6765\u83B7\u53D6\u5230math-game\u8FDB\u7A0B\u7684-main-class","link":"#_4-\u901A\u8FC7-thread-\u547D\u4EE4\u6765\u83B7\u53D6\u5230math-game\u8FDB\u7A0B\u7684-main-class","children":[]},{"level":2,"title":"5. \u901A\u8FC7 jad \u6765\u53CD\u7F16\u8BD1 Main Class","slug":"_5-\u901A\u8FC7-jad-\u6765\u53CD\u7F16\u8BD1-main-class","link":"#_5-\u901A\u8FC7-jad-\u6765\u53CD\u7F16\u8BD1-main-class","children":[]},{"level":2,"title":"6. watch","slug":"_6-watch","link":"#_6-watch","children":[]},{"level":2,"title":"7. \u9000\u51FA arthas","slug":"_7-\u9000\u51FA-arthas","link":"#_7-\u9000\u51FA-arthas","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/quick-start.md","version":"4.3.3"}');export{a as data}; +const a=JSON.parse('{"key":"v-5afc3a07","path":"/doc/quick-start.html","title":"\u5FEB\u901F\u5165\u95E8","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"1. \u542F\u52A8 math-game","slug":"_1-\u542F\u52A8-math-game","link":"#_1-\u542F\u52A8-math-game","children":[]},{"level":2,"title":"2. \u542F\u52A8 arthas","slug":"_2-\u542F\u52A8-arthas","link":"#_2-\u542F\u52A8-arthas","children":[]},{"level":2,"title":"3. \u67E5\u770B dashboard","slug":"_3-\u67E5\u770B-dashboard","link":"#_3-\u67E5\u770B-dashboard","children":[]},{"level":2,"title":"4. \u901A\u8FC7 thread \u547D\u4EE4\u6765\u83B7\u53D6\u5230math-game\u8FDB\u7A0B\u7684 Main Class","slug":"_4-\u901A\u8FC7-thread-\u547D\u4EE4\u6765\u83B7\u53D6\u5230math-game\u8FDB\u7A0B\u7684-main-class","link":"#_4-\u901A\u8FC7-thread-\u547D\u4EE4\u6765\u83B7\u53D6\u5230math-game\u8FDB\u7A0B\u7684-main-class","children":[]},{"level":2,"title":"5. \u901A\u8FC7 jad \u6765\u53CD\u7F16\u8BD1 Main Class","slug":"_5-\u901A\u8FC7-jad-\u6765\u53CD\u7F16\u8BD1-main-class","link":"#_5-\u901A\u8FC7-jad-\u6765\u53CD\u7F16\u8BD1-main-class","children":[]},{"level":2,"title":"6. watch","slug":"_6-watch","link":"#_6-watch","children":[]},{"level":2,"title":"7. \u9000\u51FA arthas","slug":"_7-\u9000\u51FA-arthas","link":"#_7-\u9000\u51FA-arthas","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/quick-start.md","version":"4.3.5"}');export{a as data}; diff --git a/assets/quick-start.html.687d975b.js b/assets/quick-start.html.7059ebe7.js similarity index 92% rename from assets/quick-start.html.687d975b.js rename to assets/quick-start.html.7059ebe7.js index b880846c6..ba5bf96aa 100644 --- a/assets/quick-start.html.687d975b.js +++ b/assets/quick-start.html.7059ebe7.js @@ -1,6 +1,6 @@ -import{_ as l,o as i,c as u,a as s,b as a,w as o,e as n,d as e,r as c}from"./app.524ecf5c.js";const r={},k=s("h1",{id:"\u5FEB\u901F\u5165\u95E8",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#\u5FEB\u901F\u5165\u95E8","aria-hidden":"true"},"#"),n(" \u5FEB\u901F\u5165\u95E8")],-1),d=n("\u53EF\u4EE5\u901A\u8FC7\u4E0B\u9762\u7684\u65B9\u5F0F\u81EA\u5DF1\u52A8\u624B\u5B9E\u8DF5\uFF0C\u4E5F\u53EF\u4EE5\u901A\u8FC7\u6211\u4EEC\u7684"),m={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=arthas-basics",target:"_blank",rel:"noopener noreferrer"},b=n("\u5728\u7EBF\u6559\u7A0B"),v=n("\uFF0C\u8DDF\u968F\u6559\u7A0B\u5FEB\u901F\u5165\u95E8\u3002"),h=e(`

    1. \u542F\u52A8 math-game

    curl -O https://arthas.aliyun.com/math-game.jar
    +import{_ as l,o as i,c as u,a as s,b as a,w as t,d as e,e as n,r as o}from"./app.e2427bec.js";const r={},k=e(`

    \u5FEB\u901F\u5165\u95E8

    \u53EF\u4EE5\u901A\u8FC7\u4E0B\u9762\u7684\u65B9\u5F0F\u81EA\u5DF1\u52A8\u624B\u5B9E\u8DF5\uFF0C\u5FEB\u901F\u5165\u95E8\u3002

    1. \u542F\u52A8 math-game

    curl -O https://arthas.aliyun.com/math-game.jar
     java -jar math-game.jar
    -

    math-game\u662F\u4E00\u4E2A\u7B80\u5355\u7684\u7A0B\u5E8F\uFF0C\u6BCF\u9694\u4E00\u79D2\u751F\u6210\u4E00\u4E2A\u968F\u673A\u6570\uFF0C\u518D\u6267\u884C\u8D28\u56E0\u6570\u5206\u89E3\uFF0C\u5E76\u6253\u5370\u51FA\u5206\u89E3\u7ED3\u679C\u3002

    `,3),g=s("code",null,"math-game",-1),_=n("\u6E90\u4EE3\u7801\uFF1A"),f={href:"https://github.com/alibaba/arthas/blob/master/math-game/src/main/java/demo/MathGame.java",target:"_blank",rel:"noopener noreferrer"},y=n("\u67E5\u770B"),w=e(`

    2. \u542F\u52A8 arthas

    \u5728\u547D\u4EE4\u884C\u4E0B\u9762\u6267\u884C\uFF08\u4F7F\u7528\u548C\u76EE\u6807\u8FDB\u7A0B\u4E00\u81F4\u7684\u7528\u6237\u542F\u52A8\uFF0C\u5426\u5219\u53EF\u80FD attach \u5931\u8D25\uFF09\uFF1A

    curl -O https://arthas.aliyun.com/arthas-boot.jar
    +

    math-game\u662F\u4E00\u4E2A\u7B80\u5355\u7684\u7A0B\u5E8F\uFF0C\u6BCF\u9694\u4E00\u79D2\u751F\u6210\u4E00\u4E2A\u968F\u673A\u6570\uFF0C\u518D\u6267\u884C\u8D28\u56E0\u6570\u5206\u89E3\uFF0C\u5E76\u6253\u5370\u51FA\u5206\u89E3\u7ED3\u679C\u3002

    `,5),d=s("code",null,"math-game",-1),m=n("\u6E90\u4EE3\u7801\uFF1A"),b={href:"https://github.com/alibaba/arthas/blob/master/math-game/src/main/java/demo/MathGame.java",target:"_blank",rel:"noopener noreferrer"},v=n("\u67E5\u770B"),h=e(`

    2. \u542F\u52A8 arthas

    \u5728\u547D\u4EE4\u884C\u4E0B\u9762\u6267\u884C\uFF08\u4F7F\u7528\u548C\u76EE\u6807\u8FDB\u7A0B\u4E00\u81F4\u7684\u7528\u6237\u542F\u52A8\uFF0C\u5426\u5219\u53EF\u80FD attach \u5931\u8D25\uFF09\uFF1A

    curl -O https://arthas.aliyun.com/arthas-boot.jar
     java -jar arthas-boot.jar
     
    • \u6267\u884C\u8BE5\u7A0B\u5E8F\u7684\u7528\u6237\u9700\u8981\u548C\u76EE\u6807\u8FDB\u7A0B\u5177\u6709\u76F8\u540C\u7684\u6743\u9650\u3002\u6BD4\u5982\u4EE5admin\u7528\u6237\u6765\u6267\u884C\uFF1Asudo su admin && java -jar arthas-boot.jar \u6216 sudo -u admin -EH java -jar arthas-boot.jar\u3002
    • \u5982\u679C attach \u4E0D\u4E0A\u76EE\u6807\u8FDB\u7A0B\uFF0C\u53EF\u4EE5\u67E5\u770B~/logs/arthas/ \u76EE\u5F55\u4E0B\u7684\u65E5\u5FD7\u3002
    • \u5982\u679C\u4E0B\u8F7D\u901F\u5EA6\u6BD4\u8F83\u6162\uFF0C\u53EF\u4EE5\u4F7F\u7528 aliyun \u7684\u955C\u50CF\uFF1Ajava -jar arthas-boot.jar --repo-mirror aliyun
    • java -jar arthas-boot.jar -h \u6253\u5370\u66F4\u591A\u53C2\u6570\u4FE1\u606F\u3002

    \u9009\u62E9\u5E94\u7528 java \u8FDB\u7A0B\uFF1A

    $ $ java -jar arthas-boot.jar
     * [1]: 35542
    @@ -21,7 +21,7 @@ pid: 71560
     time: 2018-11-28 19:16:24
     
     $
    -

    3. \u67E5\u770B dashboard

    `,9),I=n("\u8F93\u5165"),j=n("dashboard"),M=n("\uFF0C\u6309"),A=s("code",null,"\u56DE\u8F66/enter",-1),x=n("\uFF0C\u4F1A\u5C55\u793A\u5F53\u524D\u8FDB\u7A0B\u7684\u4FE1\u606F\uFF0C\u6309"),N=s("code",null,"ctrl+c",-1),L=n("\u53EF\u4EE5\u4E2D\u65AD\u6267\u884C\u3002"),E=e(`
    $ dashboard
    +

    3. \u67E5\u770B dashboard

    `,9),g=n("\u8F93\u5165"),_=n("dashboard"),f=n("\uFF0C\u6309"),y=s("code",null,"\u56DE\u8F66/enter",-1),w=n("\uFF0C\u4F1A\u5C55\u793A\u5F53\u524D\u8FDB\u7A0B\u7684\u4FE1\u606F\uFF0C\u6309"),I=s("code",null,"ctrl+c",-1),j=n("\u53EF\u4EE5\u4E2D\u65AD\u6267\u884C\u3002"),M=e(`
    $ dashboard
     ID     NAME                   GROUP          PRIORI STATE  %CPU    TIME   INTERRU DAEMON
     17     pool-2-thread-1        system         5      WAITIN 67      0:0    false   false
     27     Timer-for-arthas-dashb system         10     RUNNAB 32      0:0    false   true
    @@ -132,7 +132,7 @@ java.home              /Library/Java/JavaVir
     }
     
     Affect(row-cnt:1) cost in 970 ms.
    -

    6. watch

    `,7),R=n("\u901A\u8FC7"),C=n("watch"),G=n("\u547D\u4EE4\u6765\u67E5\u770B"),T=s("code",null,"demo.MathGame#primeFactors",-1),S=n("\u51FD\u6570\u7684\u8FD4\u56DE\u503C\uFF1A"),q=e(`
    $ watch demo.MathGame primeFactors returnObj
    +

    6. watch

    `,7),A=n("\u901A\u8FC7"),x=n("watch"),N=n("\u547D\u4EE4\u6765\u67E5\u770B"),L=s("code",null,"demo.MathGame#primeFactors",-1),E=n("\u51FD\u6570\u7684\u8FD4\u56DE\u503C\uFF1A"),R=e(`
    $ watch demo.MathGame primeFactors returnObj
     Press Ctrl+C to abort.
     Affect(class-cnt:1 , method-cnt:1) cost in 107 ms.
     ts=2018-11-28 19:22:30; [cost=1.715367ms] result=null
    @@ -162,4 +162,4 @@ Affect(class-cnt:1 , method-cnt:1[29],
         @Integer[7651739],
     ]
    -
    `,1),F=n("\u66F4\u591A\u7684\u529F\u80FD\u53EF\u4EE5\u67E5\u770B"),O={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=arthas-advanced",target:"_blank",rel:"noopener noreferrer"},B=n("\u8FDB\u9636\u6559\u7A0B"),U=n("\u3002"),D=s("h2",{id:"_7-\u9000\u51FA-arthas",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#_7-\u9000\u51FA-arthas","aria-hidden":"true"},"#"),n(" 7. \u9000\u51FA arthas")],-1),$=s("p",null,[n("\u5982\u679C\u53EA\u662F\u9000\u51FA\u5F53\u524D\u7684\u8FDE\u63A5\uFF0C\u53EF\u4EE5\u7528"),s("code",null,"quit"),n("\u6216\u8005"),s("code",null,"exit"),n("\u547D\u4EE4\u3002Attach \u5230\u76EE\u6807\u8FDB\u7A0B\u4E0A\u7684 arthas \u8FD8\u4F1A\u7EE7\u7EED\u8FD0\u884C\uFF0C\u7AEF\u53E3\u4F1A\u4FDD\u6301\u5F00\u653E\uFF0C\u4E0B\u6B21\u8FDE\u63A5\u65F6\u53EF\u4EE5\u76F4\u63A5\u8FDE\u63A5\u4E0A\u3002")],-1),P=s("p",null,[n("\u5982\u679C\u60F3\u5B8C\u5168\u9000\u51FA arthas\uFF0C\u53EF\u4EE5\u6267\u884C"),s("code",null,"stop"),n("\u547D\u4EE4\u3002")],-1);function V(W,H){const t=c("ExternalLinkIcon"),p=c("RouterLink");return i(),u("div",null,[k,s("p",null,[d,s("a",m,[b,a(t)]),v]),h,s("p",null,[g,_,s("a",f,[y,a(t)])]),w,s("p",null,[I,a(p,{to:"/doc/dashboard.html"},{default:o(()=>[j]),_:1}),M,A,x,N,L]),E,s("p",null,[R,a(p,{to:"/doc/watch.html"},{default:o(()=>[C]),_:1}),G,T,S]),q,s("p",null,[F,s("a",O,[B,a(t)]),U]),D,$,P])}const z=l(r,[["render",V],["__file","quick-start.html.vue"]]);export{z as default}; +
    `,1),C=n("\u66F4\u591A\u7684\u529F\u80FD\u53EF\u4EE5\u67E5\u770B"),G=n("\u8FDB\u9636\u4F7F\u7528"),T=n("\u3002"),S=s("h2",{id:"_7-\u9000\u51FA-arthas",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#_7-\u9000\u51FA-arthas","aria-hidden":"true"},"#"),n(" 7. \u9000\u51FA arthas")],-1),q=s("p",null,[n("\u5982\u679C\u53EA\u662F\u9000\u51FA\u5F53\u524D\u7684\u8FDE\u63A5\uFF0C\u53EF\u4EE5\u7528"),s("code",null,"quit"),n("\u6216\u8005"),s("code",null,"exit"),n("\u547D\u4EE4\u3002Attach \u5230\u76EE\u6807\u8FDB\u7A0B\u4E0A\u7684 arthas \u8FD8\u4F1A\u7EE7\u7EED\u8FD0\u884C\uFF0C\u7AEF\u53E3\u4F1A\u4FDD\u6301\u5F00\u653E\uFF0C\u4E0B\u6B21\u8FDE\u63A5\u65F6\u53EF\u4EE5\u76F4\u63A5\u8FDE\u63A5\u4E0A\u3002")],-1),F=s("p",null,[n("\u5982\u679C\u60F3\u5B8C\u5168\u9000\u51FA arthas\uFF0C\u53EF\u4EE5\u6267\u884C"),s("code",null,"stop"),n("\u547D\u4EE4\u3002")],-1);function O(B,U){const c=o("ExternalLinkIcon"),p=o("RouterLink");return i(),u("div",null,[k,s("p",null,[d,m,s("a",b,[v,a(c)])]),h,s("p",null,[g,a(p,{to:"/doc/dashboard.html"},{default:t(()=>[_]),_:1}),f,y,w,I,j]),M,s("p",null,[A,a(p,{to:"/doc/watch.html"},{default:t(()=>[x]),_:1}),N,L,E]),R,s("p",null,[C,a(p,{to:"/doc/advanced-use.html"},{default:t(()=>[G]),_:1}),T]),S,q,F])}const $=l(r,[["render",O],["__file","quick-start.html.vue"]]);export{$ as default}; diff --git a/assets/quick-start.html.4adf7a28.js b/assets/quick-start.html.90bb144c.js similarity index 93% rename from assets/quick-start.html.4adf7a28.js rename to assets/quick-start.html.90bb144c.js index 589336b5e..7d75bb7d4 100644 --- a/assets/quick-start.html.4adf7a28.js +++ b/assets/quick-start.html.90bb144c.js @@ -1,6 +1,6 @@ -import{_ as l,o as i,c as u,a as s,b as a,w as o,e as n,d as e,r as c}from"./app.524ecf5c.js";const r={},k=s("h1",{id:"quick-start",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#quick-start","aria-hidden":"true"},"#"),n(" Quick Start")],-1),d=n("You can practice it yourself by following the instructions below, or you can use our "),m={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=arthas-basics",target:"_blank",rel:"noopener noreferrer"},b=n("online tutorials"),v=n(" to get started quickly."),h=e(`

    1. Start math-game

    curl -O https://arthas.aliyun.com/math-game.jar
    +import{_ as l,o as i,c as u,a as s,b as a,w as p,d as e,e as n,r as o}from"./app.e2427bec.js";const r={},k=e(`

    Quick Start

    You can follow the instructions below to practice and get started quickly.

    1. Start math-game

    curl -O https://arthas.aliyun.com/math-game.jar
     java -jar math-game.jar
    -

    math-game is a simple program that generates a random number every second, then it finds all prime factors of that number.

    `,3),g=n("The source code of "),f=s("code",null,"math-game",-1),_=n(": "),w={href:"https://github.com/alibaba/arthas/blob/master/math-game/src/main/java/demo/MathGame.java",target:"_blank",rel:"noopener noreferrer"},y=n("View"),I=e(`

    2. Start Arthas

    Linux/Unix/Mac

    Execute the following command in the command line:

    curl -O https://arthas.aliyun.com/arthas-boot.jar
    +

    math-game is a simple program that generates a random number every second, then it finds all prime factors of that number.

    `,5),d=n("The source code of "),m=s("code",null,"math-game",-1),b=n(": "),v={href:"https://github.com/alibaba/arthas/blob/master/math-game/src/main/java/demo/MathGame.java",target:"_blank",rel:"noopener noreferrer"},h=n("View"),g=e(`

    2. Start Arthas

    Linux/Unix/Mac

    Execute the following command in the command line:

    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.

    Select the target Java process to attach:

    $ java -jar arthas-boot.jar
     * [1]: 35542
    @@ -21,7 +21,7 @@ pid: 71560
     time: 2018-11-28 19:16:24
     
     $
    -

    3. Check the Dashboard

    `,10),j=n("Type '"),x=n("dashboard"),A=n("' and hit 'ENTER', a brief report on the current process will be shown as below, pls. "),M=s("code",null,"Ctrl+C",-1),N=n(" to stop:"),L=e(`
    $ dashboard
    +

    3. Check the Dashboard

    `,10),f=n("Type '"),_=n("dashboard"),w=n("' and hit 'ENTER', a brief report on the current process will be shown as below, pls. "),y=s("code",null,"Ctrl+C",-1),I=n(" to stop:"),j=e(`
    $ dashboard
     ID     NAME                   GROUP          PRIORI STATE  %CPU    TIME   INTERRU DAEMON
     17     pool-2-thread-1        system         5      WAITIN 67      0:0    false   false
     27     Timer-for-arthas-dashb system         10     RUNNAB 32      0:0    false   true
    @@ -132,7 +132,7 @@ java.home              /Library/Java/JavaVir
     }
     
     Affect(row-cnt:1) cost in 970 ms.
    -

    6. watch

    `,7),E=n("Use '"),T=n("watch"),C=n("' to view the return object of "),R=s("code",null,"demo.MathGame#primeFactors",-1),S=n(":"),q=e(`
    $ watch demo.MathGame primeFactors returnObj
    +

    6. watch

    `,7),x=n("Use '"),A=n("watch"),M=n("' to view the return object of "),N=s("code",null,"demo.MathGame#primeFactors",-1),L=n(":"),E=e(`
    $ watch demo.MathGame primeFactors returnObj
     Press Ctrl+C to abort.
     Affect(class-cnt:1 , method-cnt:1) cost in 107 ms.
     ts=2018-11-28 19:22:30; [cost=1.715367ms] result=null
    @@ -162,4 +162,4 @@ Affect(class-cnt:1 , method-cnt:1[29],
         @Integer[7651739],
     ]
    -
    `,1),G=n("Pls. refer to "),U={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=arthas-advanced",target:"_blank",rel:"noopener noreferrer"},F=n("Arthas advanced"),O=n(" for more information."),B=s("h2",{id:"_7-exit-arthas",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#_7-exit-arthas","aria-hidden":"true"},"#"),n(" 7. Exit Arthas")],-1),D=s("p",null,[n("Use "),s("code",null,"quit"),n(" or "),s("code",null,"exit"),n(" to disconnect from the current process. The Arthas instance attached to the target process continues to live inside the process, and its port is standby for further connection.")],-1),$=s("p",null,[n("Use "),s("code",null,"stop"),n(" command to have Arthas completely quit from the target process.")],-1);function P(V,W){const t=c("ExternalLinkIcon"),p=c("RouterLink");return i(),u("div",null,[k,s("p",null,[d,s("a",m,[b,a(t)]),v]),h,s("p",null,[g,f,_,s("a",w,[y,a(t)])]),I,s("p",null,[j,a(p,{to:"/en/doc/dashboard.html"},{default:o(()=>[x]),_:1}),A,M,N]),L,s("p",null,[E,a(p,{to:"/en/doc/watch.html"},{default:o(()=>[T]),_:1}),C,R,S]),q,s("p",null,[G,s("a",U,[F,a(t)]),O]),B,D,$])}const J=l(r,[["render",P],["__file","quick-start.html.vue"]]);export{J as default}; +
    `,1),T=n("Please refer to "),C=n("Advanced Usage"),R=n(" for more information."),S=s("h2",{id:"_7-exit-arthas",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#_7-exit-arthas","aria-hidden":"true"},"#"),n(" 7. Exit Arthas")],-1),U=s("p",null,[n("Use "),s("code",null,"quit"),n(" or "),s("code",null,"exit"),n(" to disconnect from the current process. The Arthas instance attached to the target process continues to live inside the process, and its port is standby for further connection.")],-1),q=s("p",null,[n("Use "),s("code",null,"stop"),n(" command to have Arthas completely quit from the target process.")],-1);function G(F,O){const c=o("ExternalLinkIcon"),t=o("RouterLink");return i(),u("div",null,[k,s("p",null,[d,m,b,s("a",v,[h,a(c)])]),g,s("p",null,[f,a(t,{to:"/en/doc/dashboard.html"},{default:p(()=>[_]),_:1}),w,y,I]),j,s("p",null,[x,a(t,{to:"/en/doc/watch.html"},{default:p(()=>[A]),_:1}),M,N,L]),E,s("p",null,[T,a(t,{to:"/en/doc/advanced-use.html"},{default:p(()=>[C]),_:1}),R]),S,U,q])}const D=l(r,[["render",G],["__file","quick-start.html.vue"]]);export{D as default}; diff --git a/assets/quit.html.515a6f81.js b/assets/quit.html.44df6ca4.js similarity index 92% rename from assets/quit.html.515a6f81.js rename to assets/quit.html.44df6ca4.js index 8838e8a1f..b45c20477 100644 --- a/assets/quit.html.515a6f81.js +++ b/assets/quit.html.44df6ca4.js @@ -1 +1 @@ -import{_ as t,o as s,c as e,d as o}from"./app.524ecf5c.js";const r={},a=o('

    quit

    \u9000\u51FA\u5F53\u524D Arthas \u5BA2\u6237\u7AEF\uFF0C\u5176\u4ED6 Arthas \u5BA2\u6237\u7AEF\u4E0D\u53D7\u5F71\u54CD\u3002\u7B49\u540C\u4E8Eexit\u3001logout\u3001q\u4E09\u4E2A\u6307\u4EE4\u3002

    \u63D0\u793A

    \u53EA\u662F\u9000\u51FA\u5F53\u524D Arthas \u5BA2\u6237\u7AEF\uFF0CArthas \u7684\u670D\u52A1\u5668\u7AEF\u5E76\u6CA1\u6709\u5173\u95ED\uFF0C\u6240\u505A\u7684\u4FEE\u6539\u4E5F\u4E0D\u4F1A\u88AB\u91CD\u7F6E\u3002

    ',3),n=[a];function c(i,_){return s(),e("div",null,n)}const h=t(r,[["render",c],["__file","quit.html.vue"]]);export{h as default}; +import{_ as t,o as s,c as e,d as o}from"./app.e2427bec.js";const r={},a=o('

    quit

    \u9000\u51FA\u5F53\u524D Arthas \u5BA2\u6237\u7AEF\uFF0C\u5176\u4ED6 Arthas \u5BA2\u6237\u7AEF\u4E0D\u53D7\u5F71\u54CD\u3002\u7B49\u540C\u4E8Eexit\u3001logout\u3001q\u4E09\u4E2A\u6307\u4EE4\u3002

    \u63D0\u793A

    \u53EA\u662F\u9000\u51FA\u5F53\u524D Arthas \u5BA2\u6237\u7AEF\uFF0CArthas \u7684\u670D\u52A1\u5668\u7AEF\u5E76\u6CA1\u6709\u5173\u95ED\uFF0C\u6240\u505A\u7684\u4FEE\u6539\u4E5F\u4E0D\u4F1A\u88AB\u91CD\u7F6E\u3002

    ',3),n=[a];function c(i,_){return s(),e("div",null,n)}const h=t(r,[["render",c],["__file","quit.html.vue"]]);export{h as default}; diff --git a/assets/quit.html.2267f888.js b/assets/quit.html.47228ba9.js similarity index 61% rename from assets/quit.html.2267f888.js rename to assets/quit.html.47228ba9.js index 420678bc2..0bd64f743 100644 --- a/assets/quit.html.2267f888.js +++ b/assets/quit.html.47228ba9.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-d1b31c34","path":"/en/doc/quit.html","title":"quit","lang":"en-US","frontmatter":{},"excerpt":"","headers":[],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/quit.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-d1b31c34","path":"/en/doc/quit.html","title":"quit","lang":"en-US","frontmatter":{},"excerpt":"","headers":[],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/quit.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/quit.html.dcd270e6.js b/assets/quit.html.de692497.js similarity index 90% rename from assets/quit.html.dcd270e6.js rename to assets/quit.html.de692497.js index 023a72a8f..17e1f80f1 100644 --- a/assets/quit.html.dcd270e6.js +++ b/assets/quit.html.de692497.js @@ -1 +1 @@ -import{_ as t,o as e,c as s,d as o}from"./app.524ecf5c.js";const n={},i=o('

    quit

    exit the current Arthas client without affecting other clients. equals exit\u3001logout\u3001q command.

    TIP

    just exit Arthas client,it means Arthas server is not closed,so the changes you do will not be reseted.

    ',3),r=[i];function c(a,l){return e(),s("div",null,r)}const h=t(n,[["render",c],["__file","quit.html.vue"]]);export{h as default}; +import{_ as t,o as e,c as s,d as o}from"./app.e2427bec.js";const n={},i=o('

    quit

    exit the current Arthas client without affecting other clients. equals exit\u3001logout\u3001q command.

    TIP

    just exit Arthas client,it means Arthas server is not closed,so the changes you do will not be reseted.

    ',3),r=[i];function c(a,l){return e(),s("div",null,r)}const h=t(n,[["render",c],["__file","quit.html.vue"]]);export{h as default}; diff --git a/assets/quit.html.df8a6408.js b/assets/quit.html.e375b368.js similarity index 60% rename from assets/quit.html.df8a6408.js rename to assets/quit.html.e375b368.js index bf7fa965f..15c6eda04 100644 --- a/assets/quit.html.df8a6408.js +++ b/assets/quit.html.e375b368.js @@ -1 +1 @@ -const t=JSON.parse('{"key":"v-aa7c750c","path":"/doc/quit.html","title":"quit","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/quit.md","version":"4.3.3"}');export{t as data}; +const t=JSON.parse('{"key":"v-aa7c750c","path":"/doc/quit.html","title":"quit","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/quit.md","version":"4.3.5"}');export{t as data}; diff --git a/assets/redefine.html.30ef7ca4.js b/assets/redefine.html.02b78145.js similarity index 91% rename from assets/redefine.html.30ef7ca4.js rename to assets/redefine.html.02b78145.js index 29b3e16ee..f6d06d8cb 100644 --- a/assets/redefine.html.30ef7ca4.js +++ b/assets/redefine.html.02b78145.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-0446ad7b","path":"/doc/redefine.html","title":"redefine","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u5E38\u89C1\u95EE\u9898","slug":"\u5E38\u89C1\u95EE\u9898","link":"#\u5E38\u89C1\u95EE\u9898","children":[]},{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]},{"level":2,"title":"\u7ED3\u5408 jad/mc \u547D\u4EE4\u4F7F\u7528","slug":"\u7ED3\u5408-jad-mc-\u547D\u4EE4\u4F7F\u7528","link":"#\u7ED3\u5408-jad-mc-\u547D\u4EE4\u4F7F\u7528","children":[]},{"level":2,"title":"\u4E0A\u4F20 .class \u6587\u4EF6\u5230\u670D\u52A1\u5668\u7684\u6280\u5DE7","slug":"\u4E0A\u4F20-class-\u6587\u4EF6\u5230\u670D\u52A1\u5668\u7684\u6280\u5DE7","link":"#\u4E0A\u4F20-class-\u6587\u4EF6\u5230\u670D\u52A1\u5668\u7684\u6280\u5DE7","children":[]},{"level":2,"title":"redefine \u7684\u9650\u5236","slug":"redefine-\u7684\u9650\u5236","link":"#redefine-\u7684\u9650\u5236","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/redefine.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-0446ad7b","path":"/doc/redefine.html","title":"redefine","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u5E38\u89C1\u95EE\u9898","slug":"\u5E38\u89C1\u95EE\u9898","link":"#\u5E38\u89C1\u95EE\u9898","children":[]},{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]},{"level":2,"title":"\u7ED3\u5408 jad/mc \u547D\u4EE4\u4F7F\u7528","slug":"\u7ED3\u5408-jad-mc-\u547D\u4EE4\u4F7F\u7528","link":"#\u7ED3\u5408-jad-mc-\u547D\u4EE4\u4F7F\u7528","children":[]},{"level":2,"title":"\u4E0A\u4F20 .class \u6587\u4EF6\u5230\u670D\u52A1\u5668\u7684\u6280\u5DE7","slug":"\u4E0A\u4F20-class-\u6587\u4EF6\u5230\u670D\u52A1\u5668\u7684\u6280\u5DE7","link":"#\u4E0A\u4F20-class-\u6587\u4EF6\u5230\u670D\u52A1\u5668\u7684\u6280\u5DE7","children":[]},{"level":2,"title":"redefine \u7684\u9650\u5236","slug":"redefine-\u7684\u9650\u5236","link":"#redefine-\u7684\u9650\u5236","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/redefine.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/redefine.html.7b61fdfa.js b/assets/redefine.html.05bba39f.js similarity index 69% rename from assets/redefine.html.7b61fdfa.js rename to assets/redefine.html.05bba39f.js index f660bdb66..86dd5aeb9 100644 --- a/assets/redefine.html.7b61fdfa.js +++ b/assets/redefine.html.05bba39f.js @@ -1,4 +1,4 @@ -import{_ as l,o as p,c as i,a as n,b as a,w as c,e as s,d,r as o}from"./app.524ecf5c.js";const r={},u=n("h1",{id:"redefine",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#redefine","aria-hidden":"true"},"#"),s(" redefine")],-1),m={class:"custom-container tip"},k=n("p",{class:"custom-container-title"},"\u63D0\u793A",-1),v=s("\u63A8\u8350\u4F7F\u7528 "),h=s("retransform"),b=s(" \u547D\u4EE4"),f={href:"https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=command-mc-redefine",target:"_blank",rel:"noopener noreferrer"},_=n("code",null,"mc-redefine",-1),g=s("\u5728\u7EBF\u6559\u7A0B"),x=n("div",{class:"custom-container tip"},[n("p",{class:"custom-container-title"},"\u63D0\u793A"),n("p",null,[s("\u52A0\u8F7D\u5916\u90E8\u7684"),n("code",null,".class"),s("\u6587\u4EF6\uFF0Credefine jvm \u5DF2\u52A0\u8F7D\u7684\u7C7B\u3002")])],-1),y=s("\u53C2\u8003\uFF1A"),w={href:"https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/Instrumentation.html#redefineClasses-java.lang.instrument.ClassDefinition...-",target:"_blank",rel:"noopener noreferrer"},j=s("Instrumentation#redefineClasses"),C=n("h2",{id:"\u5E38\u89C1\u95EE\u9898",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u5E38\u89C1\u95EE\u9898","aria-hidden":"true"},"#"),s(" \u5E38\u89C1\u95EE\u9898")],-1),L={class:"custom-container tip"},I=n("p",{class:"custom-container-title"},"\u63D0\u793A",-1),S=s("\u63A8\u8350\u4F7F\u7528 "),T=s("retransform"),E=s(" \u547D\u4EE4"),q=d(`
    • redefine \u7684 class \u4E0D\u80FD\u4FEE\u6539\u3001\u6DFB\u52A0\u3001\u5220\u9664\u7C7B\u7684 field \u548C method\uFF0C\u5305\u62EC\u65B9\u6CD5\u53C2\u6570\u3001\u65B9\u6CD5\u540D\u79F0\u53CA\u8FD4\u56DE\u503C

    • \u5982\u679C mc \u5931\u8D25\uFF0C\u53EF\u4EE5\u5728\u672C\u5730\u5F00\u53D1\u73AF\u5883\u7F16\u8BD1\u597D class \u6587\u4EF6\uFF0C\u4E0A\u4F20\u5230\u76EE\u6807\u7CFB\u7EDF\uFF0C\u4F7F\u7528 redefine \u70ED\u52A0\u8F7D class

    • \u76EE\u524D redefine \u548C watch/trace/jad/tt \u7B49\u547D\u4EE4\u51B2\u7A81\uFF0C\u4EE5\u540E\u91CD\u65B0\u5B9E\u73B0 redefine \u529F\u80FD\u4F1A\u89E3\u51B3\u6B64\u95EE\u9898

    \u6CE8\u610F

    \u6CE8\u610F\uFF0C redefine \u540E\u7684\u539F\u6765\u7684\u7C7B\u4E0D\u80FD\u6062\u590D\uFF0Credefine \u6709\u53EF\u80FD\u5931\u8D25\uFF08\u6BD4\u5982\u589E\u52A0\u4E86\u65B0\u7684 field\uFF09\uFF0C\u53C2\u8003 jdk \u672C\u8EAB\u7684\u6587\u6863\u3002

    \u63D0\u793A

    reset\u547D\u4EE4\u5BF9redefine\u7684\u7C7B\u65E0\u6548\u3002\u5982\u679C\u60F3\u91CD\u7F6E\uFF0C\u9700\u8981redefine\u539F\u59CB\u7684\u5B57\u8282\u7801\u3002

    \u63D0\u793A

    redefine\u547D\u4EE4\u548Cjad/watch/trace/monitor/tt\u7B49\u547D\u4EE4\u4F1A\u51B2\u7A81\u3002\u6267\u884C\u5B8Credefine\u4E4B\u540E\uFF0C\u5982\u679C\u518D\u6267\u884C\u4E0A\u9762\u63D0\u5230\u7684\u547D\u4EE4\uFF0C\u5219\u4F1A\u628Aredefine\u7684\u5B57\u8282\u7801\u91CD\u7F6E\u3002 \u539F\u56E0\u662F jdk \u672C\u8EAB redefine \u548C Retransform \u662F\u4E0D\u540C\u7684\u673A\u5236\uFF0C\u540C\u65F6\u4F7F\u7528\u4E24\u79CD\u673A\u5236\u6765\u66F4\u65B0\u5B57\u8282\u7801\uFF0C\u53EA\u6709\u6700\u540E\u4FEE\u6539\u7684\u4F1A\u751F\u6548\u3002

    \u53C2\u6570\u8BF4\u660E

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    [c:]ClassLoader \u7684 hashcode
    [classLoaderClass:]\u6307\u5B9A\u6267\u884C\u8868\u8FBE\u5F0F\u7684 ClassLoader \u7684 class name

    \u4F7F\u7528\u53C2\u8003

       redefine /tmp/Test.class
    +import{_ as p,o as l,c as i,a as n,b as a,w as t,e as s,d,r as c}from"./app.e2427bec.js";const r={},u=n("h1",{id:"redefine",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#redefine","aria-hidden":"true"},"#"),s(" redefine")],-1),k={class:"custom-container tip"},m=n("p",{class:"custom-container-title"},"\u63D0\u793A",-1),v=s("\u63A8\u8350\u4F7F\u7528 "),h=s("retransform"),b=s(" \u547D\u4EE4"),f=n("div",{class:"custom-container tip"},[n("p",{class:"custom-container-title"},"\u63D0\u793A"),n("p",null,[s("\u52A0\u8F7D\u5916\u90E8\u7684"),n("code",null,".class"),s("\u6587\u4EF6\uFF0Credefine jvm \u5DF2\u52A0\u8F7D\u7684\u7C7B\u3002")])],-1),g=s("\u53C2\u8003\uFF1A"),_={href:"https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/Instrumentation.html#redefineClasses-java.lang.instrument.ClassDefinition...-",target:"_blank",rel:"noopener noreferrer"},x=s("Instrumentation#redefineClasses"),y=n("h2",{id:"\u5E38\u89C1\u95EE\u9898",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u5E38\u89C1\u95EE\u9898","aria-hidden":"true"},"#"),s(" \u5E38\u89C1\u95EE\u9898")],-1),w={class:"custom-container tip"},j=n("p",{class:"custom-container-title"},"\u63D0\u793A",-1),C=s("\u63A8\u8350\u4F7F\u7528 "),L=s("retransform"),I=s(" \u547D\u4EE4"),S=d(`
    • redefine \u7684 class \u4E0D\u80FD\u4FEE\u6539\u3001\u6DFB\u52A0\u3001\u5220\u9664\u7C7B\u7684 field \u548C method\uFF0C\u5305\u62EC\u65B9\u6CD5\u53C2\u6570\u3001\u65B9\u6CD5\u540D\u79F0\u53CA\u8FD4\u56DE\u503C

    • \u5982\u679C mc \u5931\u8D25\uFF0C\u53EF\u4EE5\u5728\u672C\u5730\u5F00\u53D1\u73AF\u5883\u7F16\u8BD1\u597D class \u6587\u4EF6\uFF0C\u4E0A\u4F20\u5230\u76EE\u6807\u7CFB\u7EDF\uFF0C\u4F7F\u7528 redefine \u70ED\u52A0\u8F7D class

    • \u76EE\u524D redefine \u548C watch/trace/jad/tt \u7B49\u547D\u4EE4\u51B2\u7A81\uFF0C\u4EE5\u540E\u91CD\u65B0\u5B9E\u73B0 redefine \u529F\u80FD\u4F1A\u89E3\u51B3\u6B64\u95EE\u9898

    \u6CE8\u610F

    \u6CE8\u610F\uFF0C redefine \u540E\u7684\u539F\u6765\u7684\u7C7B\u4E0D\u80FD\u6062\u590D\uFF0Credefine \u6709\u53EF\u80FD\u5931\u8D25\uFF08\u6BD4\u5982\u589E\u52A0\u4E86\u65B0\u7684 field\uFF09\uFF0C\u53C2\u8003 jdk \u672C\u8EAB\u7684\u6587\u6863\u3002

    \u63D0\u793A

    reset\u547D\u4EE4\u5BF9redefine\u7684\u7C7B\u65E0\u6548\u3002\u5982\u679C\u60F3\u91CD\u7F6E\uFF0C\u9700\u8981redefine\u539F\u59CB\u7684\u5B57\u8282\u7801\u3002

    \u63D0\u793A

    redefine\u547D\u4EE4\u548Cjad/watch/trace/monitor/tt\u7B49\u547D\u4EE4\u4F1A\u51B2\u7A81\u3002\u6267\u884C\u5B8Credefine\u4E4B\u540E\uFF0C\u5982\u679C\u518D\u6267\u884C\u4E0A\u9762\u63D0\u5230\u7684\u547D\u4EE4\uFF0C\u5219\u4F1A\u628Aredefine\u7684\u5B57\u8282\u7801\u91CD\u7F6E\u3002 \u539F\u56E0\u662F jdk \u672C\u8EAB redefine \u548C Retransform \u662F\u4E0D\u540C\u7684\u673A\u5236\uFF0C\u540C\u65F6\u4F7F\u7528\u4E24\u79CD\u673A\u5236\u6765\u66F4\u65B0\u5B57\u8282\u7801\uFF0C\u53EA\u6709\u6700\u540E\u4FEE\u6539\u7684\u4F1A\u751F\u6548\u3002

    \u53C2\u6570\u8BF4\u660E

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    [c:]ClassLoader \u7684 hashcode
    [classLoaderClass:]\u6307\u5B9A\u6267\u884C\u8868\u8FBE\u5F0F\u7684 ClassLoader \u7684 class name

    \u4F7F\u7528\u53C2\u8003

       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
     

    \u7ED3\u5408 jad/mc \u547D\u4EE4\u4F7F\u7528

    jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java
    @@ -32,4 +32,4 @@ redefine /tmp/com/example/demo/arthas/user/UserController.class
             }
         }
     }
    -
    `,17);function N(U,M){const e=o("RouterLink"),t=o("ExternalLinkIcon");return p(),i("div",null,[u,n("div",m,[k,n("p",null,[v,a(e,{to:"/doc/retransform.html"},{default:c(()=>[h]),_:1}),b])]),n("p",null,[n("a",f,[_,g,a(t)])]),x,n("p",null,[y,n("a",w,[j,a(t)])]),C,n("div",L,[I,n("p",null,[S,a(e,{to:"/doc/retransform.html"},{default:c(()=>[T]),_:1}),E])]),q])}const A=l(r,[["render",N],["__file","redefine.html.vue"]]);export{A as default}; +
    `,17);function T(E,q){const e=c("RouterLink"),o=c("ExternalLinkIcon");return l(),i("div",null,[u,n("div",k,[m,n("p",null,[v,a(e,{to:"/doc/retransform.html"},{default:t(()=>[h]),_:1}),b])]),f,n("p",null,[g,n("a",_,[x,a(o)])]),y,n("div",w,[j,n("p",null,[C,a(e,{to:"/doc/retransform.html"},{default:t(()=>[L]),_:1}),I])]),S])}const U=p(r,[["render",T],["__file","redefine.html.vue"]]);export{U as default}; diff --git a/assets/redefine.html.8eaa7cae.js b/assets/redefine.html.68e8d9d1.js similarity index 85% rename from assets/redefine.html.8eaa7cae.js rename to assets/redefine.html.68e8d9d1.js index 01b78b084..3e0fc631d 100644 --- a/assets/redefine.html.8eaa7cae.js +++ b/assets/redefine.html.68e8d9d1.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-c7317832","path":"/en/doc/redefine.html","title":"redefine","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Frequently asked questions","slug":"frequently-asked-questions","link":"#frequently-asked-questions","children":[]},{"level":2,"title":"Options","slug":"options","link":"#options","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]},{"level":2,"title":"Use with the jad/mc command","slug":"use-with-the-jad-mc-command","link":"#use-with-the-jad-mc-command","children":[]},{"level":2,"title":"Tips for uploading .class files to the server","slug":"tips-for-uploading-class-files-to-the-server","link":"#tips-for-uploading-class-files-to-the-server","children":[]},{"level":2,"title":"Restrictions of the redefine command","slug":"restrictions-of-the-redefine-command","link":"#restrictions-of-the-redefine-command","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/redefine.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-c7317832","path":"/en/doc/redefine.html","title":"redefine","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Frequently asked questions","slug":"frequently-asked-questions","link":"#frequently-asked-questions","children":[]},{"level":2,"title":"Options","slug":"options","link":"#options","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]},{"level":2,"title":"Use with the jad/mc command","slug":"use-with-the-jad-mc-command","link":"#use-with-the-jad-mc-command","children":[]},{"level":2,"title":"Tips for uploading .class files to the server","slug":"tips-for-uploading-class-files-to-the-server","link":"#tips-for-uploading-class-files-to-the-server","children":[]},{"level":2,"title":"Restrictions of the redefine command","slug":"restrictions-of-the-redefine-command","link":"#restrictions-of-the-redefine-command","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/redefine.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/redefine.html.f31e034f.js b/assets/redefine.html.c7e214b6.js similarity index 71% rename from assets/redefine.html.f31e034f.js rename to assets/redefine.html.c7e214b6.js index 27027981a..131b3fc87 100644 --- a/assets/redefine.html.f31e034f.js +++ b/assets/redefine.html.c7e214b6.js @@ -1,4 +1,4 @@ -import{_ as i,o as l,c as p,a as n,b as e,w as o,e as s,d,r as c}from"./app.524ecf5c.js";const r={},u=n("h1",{id:"redefine",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#redefine","aria-hidden":"true"},"#"),s(" redefine")],-1),m={class:"custom-container tip"},h=n("p",{class:"custom-container-title"},"TIP",-1),k=s("Recommend to use the "),v=s("retransform"),f=s(" command."),b={href:"https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=command-mc-redefine",target:"_blank",rel:"noopener noreferrer"},g=n("code",null,"mc-redefine",-1),_=s(" online tutorial"),y=n("div",{class:"custom-container tip"},[n("p",{class:"custom-container-title"},"TIP"),n("p",null,[s("Load the external "),n("code",null,"*.class"),s(" files to re-define the loaded classes in JVM.")])],-1),w=s("Reference: "),x={href:"https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/Instrumentation.html#redefineClasses-java.lang.instrument.ClassDefinition...-",target:"_blank",rel:"noopener noreferrer"},T=s("Instrumentation#redefineClasses"),I=n("h2",{id:"frequently-asked-questions",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#frequently-asked-questions","aria-hidden":"true"},"#"),s(" Frequently asked questions")],-1),C={class:"custom-container tip"},j=n("p",{class:"custom-container-title"},"TIP",-1),L=s("Recommend to use the "),q=s("retransform"),S=s(" command."),N=d(`
    • 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

    NameSpecification
    [c:]hashcode of the class loader
    [classLoaderClass:]The class name of the ClassLoader that executes the expression.

    Usage

    redefine /tmp/Test.class
    +import{_ as i,o as l,c as p,a as n,b as e,w as t,e as s,d,r as o}from"./app.e2427bec.js";const r={},u=n("h1",{id:"redefine",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#redefine","aria-hidden":"true"},"#"),s(" redefine")],-1),m={class:"custom-container tip"},h=n("p",{class:"custom-container-title"},"TIP",-1),k=s("Recommend to use the "),v=s("retransform"),f=s(" command."),b=n("div",{class:"custom-container tip"},[n("p",{class:"custom-container-title"},"TIP"),n("p",null,[s("Load the external "),n("code",null,"*.class"),s(" files to re-define the loaded classes in JVM.")])],-1),g=s("Reference: "),y={href:"https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/Instrumentation.html#redefineClasses-java.lang.instrument.ClassDefinition...-",target:"_blank",rel:"noopener noreferrer"},_=s("Instrumentation#redefineClasses"),w=n("h2",{id:"frequently-asked-questions",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#frequently-asked-questions","aria-hidden":"true"},"#"),s(" Frequently asked questions")],-1),x={class:"custom-container tip"},T=n("p",{class:"custom-container-title"},"TIP",-1),I=s("Recommend to use the "),C=s("retransform"),j=s(" command."),L=d(`
    • 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

    NameSpecification
    [c:]hashcode of the class loader
    [classLoaderClass:]The class name of the ClassLoader that executes the expression.

    Usage

    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

    jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java
    @@ -32,4 +32,4 @@ redefine /tmp/com/example/demo/arthas/user/UserController.class
             }
         }
     }
    -
    `,17);function R(U,E){const a=c("RouterLink"),t=c("ExternalLinkIcon");return l(),p("div",null,[u,n("div",m,[h,n("p",null,[k,e(a,{to:"/en/doc/retransform.html"},{default:o(()=>[v]),_:1}),f])]),n("p",null,[n("a",b,[g,_,e(t)])]),y,n("p",null,[w,n("a",x,[T,e(t)])]),I,n("div",C,[j,n("p",null,[L,e(a,{to:"/en/doc/retransform.html"},{default:o(()=>[q]),_:1}),S])]),N])}const B=i(r,[["render",R],["__file","redefine.html.vue"]]);export{B as default}; +
    `,17);function q(S,N){const a=o("RouterLink"),c=o("ExternalLinkIcon");return l(),p("div",null,[u,n("div",m,[h,n("p",null,[k,e(a,{to:"/en/doc/retransform.html"},{default:t(()=>[v]),_:1}),f])]),b,n("p",null,[g,n("a",y,[_,e(c)])]),w,n("div",x,[T,n("p",null,[I,e(a,{to:"/en/doc/retransform.html"},{default:t(()=>[C]),_:1}),j])]),L])}const U=i(r,[["render",q],["__file","redefine.html.vue"]]);export{U as default}; diff --git a/assets/release-notes.html.d64bcf20.js b/assets/release-notes.html.4d2c5e1d.js similarity index 99% rename from assets/release-notes.html.d64bcf20.js rename to assets/release-notes.html.4d2c5e1d.js index 279daee5b..11b6ed98f 100644 --- a/assets/release-notes.html.d64bcf20.js +++ b/assets/release-notes.html.4d2c5e1d.js @@ -1 +1 @@ -import{_ as d,o as r,c,a as e,b as o,w as i,e as t,d as l,r as a}from"./app.524ecf5c.js";const h={},_=e("h1",{id:"release-notes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#release-notes","aria-hidden":"true"},"#"),t(" Release Notes")],-1),u=e("h2",{id:"v3-1-1",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v3-1-1","aria-hidden":"true"},"#"),t(" v3.1.1")],-1),m={href:"https://github.com/alibaba/arthas/releases/tag/arthas-all-3.1.1",target:"_blank",rel:"noopener noreferrer"},f=t("https://github.com/alibaba/arthas/releases/tag/arthas-all-3.1.1"),g=e("h2",{id:"v3-1-0",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v3-1-0","aria-hidden":"true"},"#"),t(" v3.1.0")],-1),p={href:"https://github.com/alibaba/arthas/releases/tag/3.1.0",target:"_blank",rel:"noopener noreferrer"},b=t("https://github.com/alibaba/arthas/releases/tag/3.1.0"),v=e("h2",{id:"v3-0-5",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v3-0-5","aria-hidden":"true"},"#"),t(" v3.0.5")],-1),x={href:"https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.5",target:"_blank",rel:"noopener noreferrer"},k=t("https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.5"),w=e("h2",{id:"v3-0-4",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v3-0-4","aria-hidden":"true"},"#"),t(" v3.0.4")],-1),y={href:"https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.4",target:"_blank",rel:"noopener noreferrer"},N=t("https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.4"),A=e("h2",{id:"v2017-11-03",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v2017-11-03","aria-hidden":"true"},"#"),t(" v2017-11-03")],-1),j=t("[improvement] add "),L=e("code",null,"getstatic",-1),C=e("li",null,"[bug] fix Arthas class loader logs loading issues",-1),E=t("[improvement] introduce "),z={href:"https://en.wikipedia.org/wiki/OGNL",target:"_blank",rel:"noopener noreferrer"},B=t("OGNL"),O=t(" to customize "),q=e("code",null,"classloader",-1),D=t(" to invoke static methods"),G=l("
  • [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
  • ",4),I=t("[improvement] quit directly when encountering incorrect "),J={href:"https://en.wikipedia.org/wiki/OGNL",target:"_blank",rel:"noopener noreferrer"},P=t("OGNL"),V=t(" expression"),K=e("li",null,[t("[bug] fix "),e("code",null,"pipe"),t(" issues")],-1),R=e("li",null,"[improvement] optimize command re-direct features using asynchronous log",-1),U=t("[improvement] "),S=e("code",null,"trace",-1),T=t(" can filter JDK method calls"),X=e("h2",{id:"v2017-09-22",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v2017-09-22","aria-hidden":"true"},"#"),t(" v2017-09-22")],-1),M=e("ul",null,[e("li",null,"[improvement] improve the error message when starting agent and server fails"),e("li",null,"[bug] fix some asynchronous issues")],-1),F=e("h2",{id:"v2017-09-11",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v2017-09-11","aria-hidden":"true"},"#"),t(" v2017-09-11")],-1),H=t("[improvement] "),Q=e("code",null,"async",-1),W=t(" supported"),Y=t("[improvement] optimize "),Z=e("code",null,"jad",-1),$=t(" support JDK 8 and inner class"),ee=e("li",null,"[bug] fix Chinese encoding issues",-1),te=e("h2",{id:"v2017-05-11",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v2017-05-11","aria-hidden":"true"},"#"),t(" v2017-05-11")],-1),oe=t("[improvement] "),se=e("code",null,"tt",-1),ie=t(" investigating/recording level one to avoid too much performance overhead"),ne=e("li",null,"[bug] fix Chinese characters can not be presented issue",-1),le=e("h2",{id:"v2017-05-12",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v2017-05-12","aria-hidden":"true"},"#"),t(" v2017-05-12")],-1),ae=e("ul",null,[e("li",null,"Arthas 3.0 release \u{1F38A}")],-1),de=e("h2",{id:"v2016-12-09",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v2016-12-09","aria-hidden":"true"},"#"),t(" v2016-12-09")],-1),re=t("[feature] "),ce={href:"https://github.com/alibaba/arthas/blob/master/bin/as.sh",target:"_blank",rel:"noopener noreferrer"},he=e("code",null,"as.sh",-1),_e=t(" support "),ue=e("code",null,"-h",-1),me=t(" to print help info"),fe=e("li",null,"[bug] [#121] fix leftover temp files causing Arthas cannot start issue",-1),ge=e("li",null,[t("[bug] [#123] fix "),e("code",null,"attach/shutdown"),t(" repeatedly causing Arthas classloader leakage issue")],-1),pe=e("li",null,"[improvement] make the help info more readable",-1),be=e("li",null,"[bug] [#126] fix the documents links issues",-1),ve=t("[bug] [#122] fix the "),xe=e("code",null,"classloader",-1),ke=t(" filtering out "),we=e("code",null,"sun.reflect.DelegatingClassLoader",-1),ye=t(" issue"),Ne=t("[bug] [#129] fix "),Ae=e("code",null,"classloader",-1),je=t(" presenting structure issues"),Le=e("li",null,"[improvement] [#125] make the Arthas log output more readable",-1),Ce=t("[improvement] [#96] "),Ee=e("code",null,"sc",-1),ze=t(" and more commands are supporting format as "),Be=e("code",null,"com/taobao/xxx/TestClass",-1),Oe=t("[bug] [#124] fix the negative values of "),qe=e("code",null,"trace",-1),De=t("[improvement] [#128] the output of "),Ge=e("code",null,"tt",-1),Ie=t(" will auto-expand now"),Je=e("li",null,"[bug] [#130] providing more meaningful error messages when port conflicts",-1),Pe=e("li",null,"[bug] [#98] fix Arthas starting issue: when updating/downloading failed, Arthas will fail to start",-1),Ve=e("li",null,"[bug] [#139] fix agent attaching fails under some scenarios issues",-1),Ke=e("li",null,[t("[improvement] [#156] delay "),e("code",null,"jd-core-java"),t(" initialization to avoid Arthas starting failure")],-1),Re=e("li",null,"[bug] avoid thread names duplicate issue",-1),Ue=t("[improvement] [#150] filtering by total time cost in "),Se=e("code",null,"trace",-1),Te=t("[bug] fix "),Xe=e("code",null,"sc",-1),Me=t(),Fe=e("code",null,"NPE",-1),He=t(" issue when searching "),Qe=e("code",null,"SystemClassloader",-1),We=e("li",null,"[bug] [#180] fix attach fails issues: attaching succeed at the first time, delete the Arthas installer, re-compile and package => attaching fails",-1),Ye=l('

    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

    ',3),Ze=t("[feature] specify refreshing interval and execution times in "),$e=e("code",null,"dashboard",-1),et=l("
  • [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
  • ",8),tt=t("[improvement] optimize "),ot=e("code",null,"watch",-1),st=t(" using flow for better UX"),it=t("[improvement] add examples to "),nt=e("code",null,"thread",-1),lt=e("li",null,"[improvement] auto-completion ignores character case",-1),at=e("li",null,"[improvement] make the UI more beautiful/friendly",-1),dt=t("[bug] fix "),rt=e("code",null,"trace",-1),ct=t(" printing too much encountering loop issues"),ht=t("[bug] fix "),_t=e("code",null,"trace",-1),ut=t(" node twisting issues when method throwing exceptions"),mt=e("li",null,[t("[bug] fix injected/enhanced "),e("code",null,"BootstrapClassLoader"),t(" cannot locate "),e("code",null,"spy"),t(" issues")],-1),ft=e("h2",{id:"v2016-03-07",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v2016-03-07","aria-hidden":"true"},"#"),t(" v2016-03-07")],-1),gt=e("li",null,"[feature] checking the topN thread and related stack traces",-1),pt=t("[bug] fix Arthas starting failure in OpenJdk issues (requiring to reinstall "),bt={href:"https://github.com/alibaba/arthas/blob/master/bin/as.sh",target:"_blank",rel:"noopener noreferrer"},vt=t("as.sh"),xt=t(")"),kt=e("li",null,"[improvement] optimize UX",-1),wt=e("h2",{id:"v2016-01-18",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v2016-01-18","aria-hidden":"true"},"#"),t(" v2016-01-18")],-1),yt=t("[improvement] optimise "),Nt=e("code",null,"jad",-1),At=t("; dump memory byte array in real time; using "),jt=e("code",null,"jd-core-java",-1),Lt=t(" to decompile; line number presented;"),Ct=t("[bug] fix checking/re-producing issues when "),Et=e("code",null,"tt",-1),zt=t(" is watching thread-context related methods invoking"),Bt=e("h2",{id:"v2016-01-08",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v2016-01-08","aria-hidden":"true"},"#"),t(" v2016-01-08")],-1),Ot=e("li",null,"[bug] jad NPE",-1),qt=e("li",null,"[bug] watch/monitor NPE",-1),Dt=e("li",null,"[bug] wrong escaping issues",-1),Gt=e("li",null,"[bug] wrong statistics",-1),It=t("[bug] "),Jt=e("code",null,"sc",-1),Pt=t(" checking internal structure issues"),Vt=e("h2",{id:"v2015-12-29",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v2015-12-29","aria-hidden":"true"},"#"),t(" v2015-12-29")],-1),Kt=e("ul",null,[e("li",null,"Arthas 2.0 Beta \u{1F4A5}\uFF01")],-1);function Rt(Ut,St){const n=a("ExternalLinkIcon"),s=a("RouterLink");return r(),c("div",null,[_,u,e("ul",null,[e("li",null,[e("a",m,[f,o(n)])])]),g,e("ul",null,[e("li",null,[e("a",p,[b,o(n)])])]),v,e("ul",null,[e("li",null,[e("a",x,[k,o(n)])])]),w,e("ul",null,[e("li",null,[e("a",y,[N,o(n)])])]),A,e("ul",null,[e("li",null,[j,o(s,{to:"/en/doc/getstatic.html"},{default:i(()=>[L]),_:1})]),C,e("li",null,[E,e("a",z,[B,o(n)]),O,q,D]),G,e("li",null,[I,e("a",J,[P,o(n)]),V]),K,R,e("li",null,[U,o(s,{to:"/en/doc/trace.html"},{default:i(()=>[S]),_:1}),T])]),X,M,F,e("ul",null,[e("li",null,[H,o(s,{to:"/en/doc/async.html"},{default:i(()=>[Q]),_:1}),W]),e("li",null,[Y,o(s,{to:"/en/doc/jad.html"},{default:i(()=>[Z]),_:1}),$]),ee]),te,e("ul",null,[e("li",null,[oe,o(s,{to:"/en/doc/tt.html"},{default:i(()=>[se]),_:1}),ie]),ne]),le,ae,de,e("ul",null,[e("li",null,[re,e("a",ce,[he,o(n)]),_e,ue,me]),fe,ge,pe,be,e("li",null,[ve,o(s,{to:"/en/doc/classloader.html"},{default:i(()=>[xe]),_:1}),ke,we,ye]),e("li",null,[Ne,o(s,{to:"/en/doc/classloader.html"},{default:i(()=>[Ae]),_:1}),je]),Le,e("li",null,[Ce,o(s,{to:"/en/doc/sc.html"},{default:i(()=>[Ee]),_:1}),ze,Be]),e("li",null,[Oe,o(s,{to:"/en/doc/trace.html"},{default:i(()=>[qe]),_:1})]),e("li",null,[De,o(s,{to:"/en/doc/tt.html"},{default:i(()=>[Ge]),_:1}),Ie]),Je,Pe,Ve,Ke,Re,e("li",null,[Ue,o(s,{to:"/en/doc/trace.html"},{default:i(()=>[Se]),_:1})]),e("li",null,[Te,o(s,{to:"/en/doc/sc.html"},{default:i(()=>[Xe]),_:1}),Me,Fe,He,Qe]),We]),Ye,e("ul",null,[e("li",null,[Ze,o(s,{to:"/en/doc/dashboard.html"},{default:i(()=>[$e]),_:1})]),et,e("li",null,[tt,o(s,{to:"/en/doc/watch.html"},{default:i(()=>[ot]),_:1}),st]),e("li",null,[it,o(s,{to:"/en/doc/thread.html"},{default:i(()=>[nt]),_:1})]),lt,at,e("li",null,[dt,o(s,{to:"/en/doc/trace.html"},{default:i(()=>[rt]),_:1}),ct]),e("li",null,[ht,o(s,{to:"/en/doc/trace.html"},{default:i(()=>[_t]),_:1}),ut]),mt]),ft,e("ul",null,[gt,e("li",null,[pt,e("a",bt,[vt,o(n)]),xt]),kt]),wt,e("ul",null,[e("li",null,[yt,o(s,{to:"/en/doc/jad.html"},{default:i(()=>[Nt]),_:1}),At,jt,Lt]),e("li",null,[Ct,o(s,{to:"/en/doc/tt.html"},{default:i(()=>[Et]),_:1}),zt])]),Bt,e("ul",null,[Ot,qt,Dt,Gt,e("li",null,[It,o(s,{to:"/en/doc/sc.html"},{default:i(()=>[Jt]),_:1}),Pt])]),Vt,Kt])}const Xt=d(h,[["render",Rt],["__file","release-notes.html.vue"]]);export{Xt as default}; +import{_ as d,o as r,c,a as e,b as o,w as i,e as t,d as l,r as a}from"./app.e2427bec.js";const h={},_=e("h1",{id:"release-notes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#release-notes","aria-hidden":"true"},"#"),t(" Release Notes")],-1),u=e("h2",{id:"v3-1-1",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v3-1-1","aria-hidden":"true"},"#"),t(" v3.1.1")],-1),m={href:"https://github.com/alibaba/arthas/releases/tag/arthas-all-3.1.1",target:"_blank",rel:"noopener noreferrer"},f=t("https://github.com/alibaba/arthas/releases/tag/arthas-all-3.1.1"),g=e("h2",{id:"v3-1-0",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v3-1-0","aria-hidden":"true"},"#"),t(" v3.1.0")],-1),p={href:"https://github.com/alibaba/arthas/releases/tag/3.1.0",target:"_blank",rel:"noopener noreferrer"},b=t("https://github.com/alibaba/arthas/releases/tag/3.1.0"),v=e("h2",{id:"v3-0-5",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v3-0-5","aria-hidden":"true"},"#"),t(" v3.0.5")],-1),x={href:"https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.5",target:"_blank",rel:"noopener noreferrer"},k=t("https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.5"),w=e("h2",{id:"v3-0-4",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v3-0-4","aria-hidden":"true"},"#"),t(" v3.0.4")],-1),y={href:"https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.4",target:"_blank",rel:"noopener noreferrer"},N=t("https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.4"),A=e("h2",{id:"v2017-11-03",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v2017-11-03","aria-hidden":"true"},"#"),t(" v2017-11-03")],-1),j=t("[improvement] add "),L=e("code",null,"getstatic",-1),C=e("li",null,"[bug] fix Arthas class loader logs loading issues",-1),E=t("[improvement] introduce "),z={href:"https://en.wikipedia.org/wiki/OGNL",target:"_blank",rel:"noopener noreferrer"},B=t("OGNL"),O=t(" to customize "),q=e("code",null,"classloader",-1),D=t(" to invoke static methods"),G=l("
  • [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
  • ",4),I=t("[improvement] quit directly when encountering incorrect "),J={href:"https://en.wikipedia.org/wiki/OGNL",target:"_blank",rel:"noopener noreferrer"},P=t("OGNL"),V=t(" expression"),K=e("li",null,[t("[bug] fix "),e("code",null,"pipe"),t(" issues")],-1),R=e("li",null,"[improvement] optimize command re-direct features using asynchronous log",-1),U=t("[improvement] "),S=e("code",null,"trace",-1),T=t(" can filter JDK method calls"),X=e("h2",{id:"v2017-09-22",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v2017-09-22","aria-hidden":"true"},"#"),t(" v2017-09-22")],-1),M=e("ul",null,[e("li",null,"[improvement] improve the error message when starting agent and server fails"),e("li",null,"[bug] fix some asynchronous issues")],-1),F=e("h2",{id:"v2017-09-11",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v2017-09-11","aria-hidden":"true"},"#"),t(" v2017-09-11")],-1),H=t("[improvement] "),Q=e("code",null,"async",-1),W=t(" supported"),Y=t("[improvement] optimize "),Z=e("code",null,"jad",-1),$=t(" support JDK 8 and inner class"),ee=e("li",null,"[bug] fix Chinese encoding issues",-1),te=e("h2",{id:"v2017-05-11",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v2017-05-11","aria-hidden":"true"},"#"),t(" v2017-05-11")],-1),oe=t("[improvement] "),se=e("code",null,"tt",-1),ie=t(" investigating/recording level one to avoid too much performance overhead"),ne=e("li",null,"[bug] fix Chinese characters can not be presented issue",-1),le=e("h2",{id:"v2017-05-12",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v2017-05-12","aria-hidden":"true"},"#"),t(" v2017-05-12")],-1),ae=e("ul",null,[e("li",null,"Arthas 3.0 release \u{1F38A}")],-1),de=e("h2",{id:"v2016-12-09",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v2016-12-09","aria-hidden":"true"},"#"),t(" v2016-12-09")],-1),re=t("[feature] "),ce={href:"https://github.com/alibaba/arthas/blob/master/bin/as.sh",target:"_blank",rel:"noopener noreferrer"},he=e("code",null,"as.sh",-1),_e=t(" support "),ue=e("code",null,"-h",-1),me=t(" to print help info"),fe=e("li",null,"[bug] [#121] fix leftover temp files causing Arthas cannot start issue",-1),ge=e("li",null,[t("[bug] [#123] fix "),e("code",null,"attach/shutdown"),t(" repeatedly causing Arthas classloader leakage issue")],-1),pe=e("li",null,"[improvement] make the help info more readable",-1),be=e("li",null,"[bug] [#126] fix the documents links issues",-1),ve=t("[bug] [#122] fix the "),xe=e("code",null,"classloader",-1),ke=t(" filtering out "),we=e("code",null,"sun.reflect.DelegatingClassLoader",-1),ye=t(" issue"),Ne=t("[bug] [#129] fix "),Ae=e("code",null,"classloader",-1),je=t(" presenting structure issues"),Le=e("li",null,"[improvement] [#125] make the Arthas log output more readable",-1),Ce=t("[improvement] [#96] "),Ee=e("code",null,"sc",-1),ze=t(" and more commands are supporting format as "),Be=e("code",null,"com/taobao/xxx/TestClass",-1),Oe=t("[bug] [#124] fix the negative values of "),qe=e("code",null,"trace",-1),De=t("[improvement] [#128] the output of "),Ge=e("code",null,"tt",-1),Ie=t(" will auto-expand now"),Je=e("li",null,"[bug] [#130] providing more meaningful error messages when port conflicts",-1),Pe=e("li",null,"[bug] [#98] fix Arthas starting issue: when updating/downloading failed, Arthas will fail to start",-1),Ve=e("li",null,"[bug] [#139] fix agent attaching fails under some scenarios issues",-1),Ke=e("li",null,[t("[improvement] [#156] delay "),e("code",null,"jd-core-java"),t(" initialization to avoid Arthas starting failure")],-1),Re=e("li",null,"[bug] avoid thread names duplicate issue",-1),Ue=t("[improvement] [#150] filtering by total time cost in "),Se=e("code",null,"trace",-1),Te=t("[bug] fix "),Xe=e("code",null,"sc",-1),Me=t(),Fe=e("code",null,"NPE",-1),He=t(" issue when searching "),Qe=e("code",null,"SystemClassloader",-1),We=e("li",null,"[bug] [#180] fix attach fails issues: attaching succeed at the first time, delete the Arthas installer, re-compile and package => attaching fails",-1),Ye=l('

    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

    ',3),Ze=t("[feature] specify refreshing interval and execution times in "),$e=e("code",null,"dashboard",-1),et=l("
  • [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
  • ",8),tt=t("[improvement] optimize "),ot=e("code",null,"watch",-1),st=t(" using flow for better UX"),it=t("[improvement] add examples to "),nt=e("code",null,"thread",-1),lt=e("li",null,"[improvement] auto-completion ignores character case",-1),at=e("li",null,"[improvement] make the UI more beautiful/friendly",-1),dt=t("[bug] fix "),rt=e("code",null,"trace",-1),ct=t(" printing too much encountering loop issues"),ht=t("[bug] fix "),_t=e("code",null,"trace",-1),ut=t(" node twisting issues when method throwing exceptions"),mt=e("li",null,[t("[bug] fix injected/enhanced "),e("code",null,"BootstrapClassLoader"),t(" cannot locate "),e("code",null,"spy"),t(" issues")],-1),ft=e("h2",{id:"v2016-03-07",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v2016-03-07","aria-hidden":"true"},"#"),t(" v2016-03-07")],-1),gt=e("li",null,"[feature] checking the topN thread and related stack traces",-1),pt=t("[bug] fix Arthas starting failure in OpenJdk issues (requiring to reinstall "),bt={href:"https://github.com/alibaba/arthas/blob/master/bin/as.sh",target:"_blank",rel:"noopener noreferrer"},vt=t("as.sh"),xt=t(")"),kt=e("li",null,"[improvement] optimize UX",-1),wt=e("h2",{id:"v2016-01-18",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v2016-01-18","aria-hidden":"true"},"#"),t(" v2016-01-18")],-1),yt=t("[improvement] optimise "),Nt=e("code",null,"jad",-1),At=t("; dump memory byte array in real time; using "),jt=e("code",null,"jd-core-java",-1),Lt=t(" to decompile; line number presented;"),Ct=t("[bug] fix checking/re-producing issues when "),Et=e("code",null,"tt",-1),zt=t(" is watching thread-context related methods invoking"),Bt=e("h2",{id:"v2016-01-08",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v2016-01-08","aria-hidden":"true"},"#"),t(" v2016-01-08")],-1),Ot=e("li",null,"[bug] jad NPE",-1),qt=e("li",null,"[bug] watch/monitor NPE",-1),Dt=e("li",null,"[bug] wrong escaping issues",-1),Gt=e("li",null,"[bug] wrong statistics",-1),It=t("[bug] "),Jt=e("code",null,"sc",-1),Pt=t(" checking internal structure issues"),Vt=e("h2",{id:"v2015-12-29",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#v2015-12-29","aria-hidden":"true"},"#"),t(" v2015-12-29")],-1),Kt=e("ul",null,[e("li",null,"Arthas 2.0 Beta \u{1F4A5}\uFF01")],-1);function Rt(Ut,St){const n=a("ExternalLinkIcon"),s=a("RouterLink");return r(),c("div",null,[_,u,e("ul",null,[e("li",null,[e("a",m,[f,o(n)])])]),g,e("ul",null,[e("li",null,[e("a",p,[b,o(n)])])]),v,e("ul",null,[e("li",null,[e("a",x,[k,o(n)])])]),w,e("ul",null,[e("li",null,[e("a",y,[N,o(n)])])]),A,e("ul",null,[e("li",null,[j,o(s,{to:"/en/doc/getstatic.html"},{default:i(()=>[L]),_:1})]),C,e("li",null,[E,e("a",z,[B,o(n)]),O,q,D]),G,e("li",null,[I,e("a",J,[P,o(n)]),V]),K,R,e("li",null,[U,o(s,{to:"/en/doc/trace.html"},{default:i(()=>[S]),_:1}),T])]),X,M,F,e("ul",null,[e("li",null,[H,o(s,{to:"/en/doc/async.html"},{default:i(()=>[Q]),_:1}),W]),e("li",null,[Y,o(s,{to:"/en/doc/jad.html"},{default:i(()=>[Z]),_:1}),$]),ee]),te,e("ul",null,[e("li",null,[oe,o(s,{to:"/en/doc/tt.html"},{default:i(()=>[se]),_:1}),ie]),ne]),le,ae,de,e("ul",null,[e("li",null,[re,e("a",ce,[he,o(n)]),_e,ue,me]),fe,ge,pe,be,e("li",null,[ve,o(s,{to:"/en/doc/classloader.html"},{default:i(()=>[xe]),_:1}),ke,we,ye]),e("li",null,[Ne,o(s,{to:"/en/doc/classloader.html"},{default:i(()=>[Ae]),_:1}),je]),Le,e("li",null,[Ce,o(s,{to:"/en/doc/sc.html"},{default:i(()=>[Ee]),_:1}),ze,Be]),e("li",null,[Oe,o(s,{to:"/en/doc/trace.html"},{default:i(()=>[qe]),_:1})]),e("li",null,[De,o(s,{to:"/en/doc/tt.html"},{default:i(()=>[Ge]),_:1}),Ie]),Je,Pe,Ve,Ke,Re,e("li",null,[Ue,o(s,{to:"/en/doc/trace.html"},{default:i(()=>[Se]),_:1})]),e("li",null,[Te,o(s,{to:"/en/doc/sc.html"},{default:i(()=>[Xe]),_:1}),Me,Fe,He,Qe]),We]),Ye,e("ul",null,[e("li",null,[Ze,o(s,{to:"/en/doc/dashboard.html"},{default:i(()=>[$e]),_:1})]),et,e("li",null,[tt,o(s,{to:"/en/doc/watch.html"},{default:i(()=>[ot]),_:1}),st]),e("li",null,[it,o(s,{to:"/en/doc/thread.html"},{default:i(()=>[nt]),_:1})]),lt,at,e("li",null,[dt,o(s,{to:"/en/doc/trace.html"},{default:i(()=>[rt]),_:1}),ct]),e("li",null,[ht,o(s,{to:"/en/doc/trace.html"},{default:i(()=>[_t]),_:1}),ut]),mt]),ft,e("ul",null,[gt,e("li",null,[pt,e("a",bt,[vt,o(n)]),xt]),kt]),wt,e("ul",null,[e("li",null,[yt,o(s,{to:"/en/doc/jad.html"},{default:i(()=>[Nt]),_:1}),At,jt,Lt]),e("li",null,[Ct,o(s,{to:"/en/doc/tt.html"},{default:i(()=>[Et]),_:1}),zt])]),Bt,e("ul",null,[Ot,qt,Dt,Gt,e("li",null,[It,o(s,{to:"/en/doc/sc.html"},{default:i(()=>[Jt]),_:1}),Pt])]),Vt,Kt])}const Xt=d(h,[["render",Rt],["__file","release-notes.html.vue"]]);export{Xt as default}; diff --git a/assets/release-notes.html.5fb5ffc5.js b/assets/release-notes.html.bb1f1375.js similarity index 94% rename from assets/release-notes.html.5fb5ffc5.js rename to assets/release-notes.html.bb1f1375.js index 62c35a524..9bb9ce94c 100644 --- a/assets/release-notes.html.5fb5ffc5.js +++ b/assets/release-notes.html.bb1f1375.js @@ -1 +1 @@ -const l=JSON.parse('{"key":"v-e0bde47c","path":"/en/doc/release-notes.html","title":"Release Notes","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"v3.1.1","slug":"v3-1-1","link":"#v3-1-1","children":[]},{"level":2,"title":"v3.1.0","slug":"v3-1-0","link":"#v3-1-0","children":[]},{"level":2,"title":"v3.0.5","slug":"v3-0-5","link":"#v3-0-5","children":[]},{"level":2,"title":"v3.0.4","slug":"v3-0-4","link":"#v3-0-4","children":[]},{"level":2,"title":"v2017-11-03","slug":"v2017-11-03","link":"#v2017-11-03","children":[]},{"level":2,"title":"v2017-09-22","slug":"v2017-09-22","link":"#v2017-09-22","children":[]},{"level":2,"title":"v2017-09-11","slug":"v2017-09-11","link":"#v2017-09-11","children":[]},{"level":2,"title":"v2017-05-11","slug":"v2017-05-11","link":"#v2017-05-11","children":[]},{"level":2,"title":"v2017-05-12","slug":"v2017-05-12","link":"#v2017-05-12","children":[]},{"level":2,"title":"v2016-12-09","slug":"v2016-12-09","link":"#v2016-12-09","children":[]},{"level":2,"title":"v2016-06-07","slug":"v2016-06-07","link":"#v2016-06-07","children":[]},{"level":2,"title":"v2016-04-08","slug":"v2016-04-08","link":"#v2016-04-08","children":[]},{"level":2,"title":"v2016-03-07","slug":"v2016-03-07","link":"#v2016-03-07","children":[]},{"level":2,"title":"v2016-01-18","slug":"v2016-01-18","link":"#v2016-01-18","children":[]},{"level":2,"title":"v2016-01-08","slug":"v2016-01-08","link":"#v2016-01-08","children":[]},{"level":2,"title":"v2015-12-29","slug":"v2015-12-29","link":"#v2015-12-29","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/release-notes.md","version":"4.3.3"}');export{l as data}; +const l=JSON.parse('{"key":"v-e0bde47c","path":"/en/doc/release-notes.html","title":"Release Notes","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"v3.1.1","slug":"v3-1-1","link":"#v3-1-1","children":[]},{"level":2,"title":"v3.1.0","slug":"v3-1-0","link":"#v3-1-0","children":[]},{"level":2,"title":"v3.0.5","slug":"v3-0-5","link":"#v3-0-5","children":[]},{"level":2,"title":"v3.0.4","slug":"v3-0-4","link":"#v3-0-4","children":[]},{"level":2,"title":"v2017-11-03","slug":"v2017-11-03","link":"#v2017-11-03","children":[]},{"level":2,"title":"v2017-09-22","slug":"v2017-09-22","link":"#v2017-09-22","children":[]},{"level":2,"title":"v2017-09-11","slug":"v2017-09-11","link":"#v2017-09-11","children":[]},{"level":2,"title":"v2017-05-11","slug":"v2017-05-11","link":"#v2017-05-11","children":[]},{"level":2,"title":"v2017-05-12","slug":"v2017-05-12","link":"#v2017-05-12","children":[]},{"level":2,"title":"v2016-12-09","slug":"v2016-12-09","link":"#v2016-12-09","children":[]},{"level":2,"title":"v2016-06-07","slug":"v2016-06-07","link":"#v2016-06-07","children":[]},{"level":2,"title":"v2016-04-08","slug":"v2016-04-08","link":"#v2016-04-08","children":[]},{"level":2,"title":"v2016-03-07","slug":"v2016-03-07","link":"#v2016-03-07","children":[]},{"level":2,"title":"v2016-01-18","slug":"v2016-01-18","link":"#v2016-01-18","children":[]},{"level":2,"title":"v2016-01-08","slug":"v2016-01-08","link":"#v2016-01-08","children":[]},{"level":2,"title":"v2015-12-29","slug":"v2015-12-29","link":"#v2015-12-29","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/release-notes.md","version":"4.3.5"}');export{l as data}; diff --git a/assets/release-notes.html.0eb362a1.js b/assets/release-notes.html.c5c1003b.js similarity index 99% rename from assets/release-notes.html.0eb362a1.js rename to assets/release-notes.html.c5c1003b.js index e81a6fde9..94971c7d5 100644 --- a/assets/release-notes.html.0eb362a1.js +++ b/assets/release-notes.html.c5c1003b.js @@ -1 +1 @@ -import{_ as h,o as d,c as o,a,b as e,w as n,e as l,d as r,r as t}from"./app.524ecf5c.js";const c={},u=a("h1",{id:"release-notes",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#release-notes","aria-hidden":"true"},"#"),l(" Release Notes")],-1),_=a("h2",{id:"v3-1-1",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#v3-1-1","aria-hidden":"true"},"#"),l(" v3.1.1")],-1),b={href:"https://github.com/alibaba/arthas/releases/tag/arthas-all-3.1.1",target:"_blank",rel:"noopener noreferrer"},v=l("https://github.com/alibaba/arthas/releases/tag/arthas-all-3.1.1"),f=a("h2",{id:"v3-1-0",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#v3-1-0","aria-hidden":"true"},"#"),l(" v3.1.0")],-1),p={href:"https://github.com/alibaba/arthas/releases/tag/3.1.0",target:"_blank",rel:"noopener noreferrer"},g=l("https://github.com/alibaba/arthas/releases/tag/3.1.0"),x=a("h2",{id:"v3-0-5",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#v3-0-5","aria-hidden":"true"},"#"),l(" v3.0.5")],-1),m={href:"https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.5",target:"_blank",rel:"noopener noreferrer"},N=l("https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.5"),k=a("h2",{id:"v3-0-4",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#v3-0-4","aria-hidden":"true"},"#"),l(" v3.0.4")],-1),j={href:"https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.4",target:"_blank",rel:"noopener noreferrer"},w=l("https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.4"),C=r('

    v2017-11-03

    • \u589E\u52A0 getstatic \u65B9\u6CD5\u83B7\u53D6\u9759\u6001\u53D8\u91CF
    • \u4FEE\u590D arthas classloader \u52A0\u8F7D\u5230\u5E94\u7528\u65E5\u5FD7\u7684\u95EE\u9898
    • \u589E\u52A0 ognl custom classloader \u4FBF\u4E8E\u8C03\u7528\u9759\u6001\u65B9\u6CD5
    • \u4F18\u5316 termd \u8F93\u51FA\u5927\u5B57\u7B26\u4E32\u7684\u6027\u80FD\u95EE\u9898
    • classloader \u547D\u4EE4\u9ED8\u8BA4\u6309\u7C7B\u52A0\u8F7D\u5668\u7C7B\u578B\u5206\u7C7B\u7F16\u8BD1
    • \u4FEE\u590D wc \u547D\u4EE4\u7EDF\u8BA1\u9519\u8BEF\u7684\u95EE\u9898
    • \u7981\u6B62\u589E\u5F3A\u7279\u5B9A JDK \u7C7B\uFF0C\u5982 Classloader, Method, Integer \u7B49
    • \u652F\u6301 OGNL \u8868\u8FBE\u5F0F\u51FA\u9519\u76F4\u63A5\u9000\u51FA\u547D\u4EE4
    • \u4FEE\u590D\u7BA1\u9053\u7C7B\u547D\u4EE4\u5355\u72EC\u51FA\u9519\u7684\u95EE\u9898
    • \u4F18\u5316\u547D\u4EE4\u91CD\u5B9A\u5411\u529F\u80FD\uFF0C\u4F7F\u7528\u5F02\u6B65\u65E5\u5FD7\u8F93\u51FA\u7ED3\u679C
    • trace \u547D\u4EE4\u589E\u52A0\u8FC7\u6EE4 jdk \u65B9\u6CD5\u8C03\u7528\u7684\u529F\u80FD

    v2017-09-22

    • \u4F18\u5316 agent server\b \u542F\u52A8\u65F6\u7684\u5F02\u5E38\u4FE1\u606F
    • \u4FEE\u590D\u5F02\u6B65\u547D\u4EE4\u7684\u4E00\u4E9B bug

    v2017-09-11

    ',5),E=l("\u652F\u6301"),L=l("\u5F02\u6B65\u540E\u540E\u547D\u4EE4"),y=a("li",null,"jad \u547D\u4EE4\u4F18\u5316\uFF0C\u652F\u6301 JDK8 \u53CA\u5185\u90E8\u7C7B",-1),A=a("li",null,"\u4FEE\u590D\u4E2D\u6587\u4E71\u7801\u95EE\u9898",-1),B=r('

    v2017-05-11

    • tt \u547D\u4EE4\u9ED8\u8BA4\u53EA\u5C55\u5F00 1 \u5C42\uFF0C\u9632\u6B62\u5BF9\u8C61\u8FC7\u5927\u9020\u6210\u5361\u987F
    • \u4FEE\u590D\u4E2D\u6587\u65E0\u6CD5\u5C55\u793A\u7684\u95EE\u9898

    v2017-05-12

    • Arthas 3.0 release

    v2016-12-09

    • as.sh \u652F\u6301-h \u8F93\u51FA\u5E2E\u52A9
    • [#121] \u4FEE\u590D\u6B8B\u7559\u7684\u4E34\u65F6\u6587\u4EF6\u5BFC\u81F4 arthas \u542F\u52A8\u5931\u8D25\u7684\u95EE\u9898
    • [#123] \u4FEE\u590D\u53CD\u590D attach/shutdown \u9020\u6210 classloader \u6CC4\u9732\u7684\u95EE\u9898
    • \u4F18\u5316\u547D\u4EE4\u4E2D\u7684\u5E2E\u52A9\u63D0\u793A\u4FE1\u606F
    • [#126] \u4FEE\u590D tm \u547D\u4EE4\u6587\u6863\u94FE\u63A5\u9519\u4E71\u7684\u95EE\u9898
    • [#122] classloader \u547D\u4EE4\u4E2D\u8FC7\u6EE4\u6389sun.reflect.DelegatingClassLoader
    • [#129] \u4FEE\u590D classloader \u5C42\u6B21\u5C55\u793A\u7684\u95EE\u9898
    • [#125] arthas \u8F93\u51FA\u7684 log \u4E0D\u4E3B\u52A8\u6362\u884C\uFF0C\u5BF9\u4E8E\u65E5\u5FD7\u89E3\u6790\u66F4\u52A0\u53CB\u597D
    • [#96] sc \u7B49\u547D\u4EE4\u652F\u6301 com/taobao/xxx/TestClass \u8FD9\u6837\u7684\u683C\u5F0F\uFF0C\u4EE5\u540E\u590D\u5236\u7C98\u8D34\u4E0D\u9700\u8981\u5728\u628A'/'\u66FF\u6362\u6210'.'\u5566
    • [#124] \u4FEE\u590D\u67D0\u4E9B\u60C5\u51B5\u4E0B trace \u7684\u65F6\u95F4\u4E3A\u8D1F\u503C\u7684\u95EE\u9898
    • [#128] tt \u547D\u4EE4\u7684\u7ED3\u679C\u9ED8\u8BA4\u81EA\u52A8\u5C55\u5F00\uFF0C\u4E0D\u9700\u8981\u518D\u589E\u52A0-x 2\u6765\u770B\u5230\u53C2\u6570\uFF0C\u5F02\u5E38\u7684\u8BE6\u7EC6\u4FE1\u606F\u4E86\u3002
    • [#130] \u4FEE\u590D\u5F53\u7AEF\u53E3\u51B2\u7A81\u65F6\uFF0C\u6CA1\u6709\u5F88\u597D\u5730\u6253\u5370\u9519\u8BEF\uFF0C\u800C\u662F\u8FDB\u5165\u4E86\u4E00\u4E2A\u51FA\u9519\u7684\u4EA4\u4E92\u754C\u9762\u7684\u95EE\u9898
    • [#98] \u4FEE\u590D Arthas \u542F\u52A8\u65F6\uFF0C\u5982\u679C\u4E0B\u8F7D\u66F4\u65B0\u5931\u8D25\uFF0C\u5BFC\u81F4\u542F\u52A8\u5931\u8D25\u7684\u95EE\u9898
    • [#139] \u4FEE\u590D\u67D0\u4E9B\u7279\u6B8A\u60C5\u51B5\u4E0B agent attach \u5931\u8D25\u7684\u95EE\u9898
    • [#156] jd-core-java \u5EF6\u8FDF\u521D\u59CB\u5316\uFF0C\u907F\u514D arthas \u542F\u52A8\u65F6\u51FA\u9519
    • \u4FEE\u590D\u7EBF\u7A0B\u540D\u91CD\u590D\u7684\u95EE\u9898
    • [#150] trace \u547D\u4EE4\u652F\u6301\u6309\u8FD0\u884C\u603B\u8017\u65F6\u8FC7\u6EE4
    • \u4FEE\u590D sc \u67E5\u627E SystemClassloader \u65F6\u53EF\u80FD\u51FA\u73B0\u7684 NPE
    • [#180] \u4FEE\u590D\u7B2C\u4E00\u6B21 Attach \u6210\u529F\u4E4B\u540E\uFF0C\u5220\u9664\u4E4B\u524D Arthas \u7684\u5B89\u88C5\u5305\uFF0C\u91CD\u65B0\u7F16\u8BD1\u6253\u5305\uFF0C\u518D\u6B21 attach \u5931\u8D25\u7684\u95EE\u9898

    v2016-06-07

    • \u4FEE\u590D\u4EE5\u8D44\u6E90\u65B9\u5F0F\u52A0\u8F7D spy \u7C7B\u65F6\u51FA\u73B0 NPE \u7684\u95EE\u9898
    • \u652F\u6301\u4E00\u952E\u627E\u51FA\u7EBF\u7A0B\u4E2D\u83B7\u5F97\u9501\u5E76\u963B\u585E\u4F4F\u5176\u4ED6\u7EBF\u7A0B\u7684\u7EBF\u7A0B
    • \u4F18\u5316 Thread \u8F93\u51FA\uFF0C\u6309\u7EBF\u7A0B\u540D\u6392\u5E8F
    • \u83B7\u53D6 topN \u5FD9\u7684\u7EBF\u7A0B\u65F6\uFF0C\u652F\u6301\u6307\u5B9A\u5237\u65B0\u95F4\u9694

    v2016-04-08

    • New feature\uFF1A

      • dashboard \u652F\u6301\u6307\u5B9A\u5237\u65B0\u9891\u7387\uFF0C\u652F\u6301\u6307\u5B9A\u6267\u884C\u6B21\u6570
      • \u547D\u4EE4\u6267\u884C\u7ED3\u679C\u4FDD\u5B58\u5230\u65E5\u5FD7\u6587\u4EF6\uFF0C\u65B9\u4FBF\u540E\u7EED\u67E5\u770B
      • \u542F\u52A8\u901F\u5EA6\u4F18\u5316\uFF0C\u7B2C\u4E00\u6B21 attach \u7684\u901F\u5EA6\u63D0\u5347\u4E00\u500D
      • \u652F\u6301\u6279\u5904\u7406\u529F\u80FD\uFF0C\u652F\u6301\u6267\u884C\u811A\u672C\u6587\u4EF6
      • \u4F18\u5316\u542F\u52A8\u903B\u8F91\uFF0Carthas \u811A\u672C\u542F\u52A8\u65F6\u4EA4\u4E92\u5F0F\u9009\u62E9\u8FDB\u7A0B
      • \u7C7B\u9ED8\u8BA4\u542F\u7528\u7EE7\u627F\u5173\u7CFB\u67E5\u8BE2\uFF0C\u67E5\u627E\u7C7B\u65F6\u9ED8\u8BA4\u4F1A\u67E5\u627E\u5B50\u7C7B\uFF0C\u5982\u679C\u9700\u8981\u5173\u95ED\uFF0C\u5219\u901A\u8FC7\u5168\u5C40\u5F00\u5173 Options disable-sub-class \u5173\u95ED
      • \u652F\u6301\u5728\u5F69\u8272\u6A21\u5F0F\u548C\u6587\u672C\u6A21\u5F0F\u4E2D\u5207\u6362
    • UI Improvement:

      • \u5408\u5E76 exit \u548C quit \u547D\u4EE4
      • \u547D\u4EE4\u5E2E\u52A9\u4FE1\u606F\u589E\u52A0 wiki \u94FE\u63A5
      • \u4F18\u5316 watch \u7684\u903B\u8F91\uFF0C\u66F4\u52A0\u7B26\u5408\u5927\u5BB6\u7684\u76F4\u89C9
      • thread \u547D\u4EE4\u589E\u52A0 example \u8BF4\u660E
      • \u81EA\u52A8\u8865\u5168\u7684\u65F6\u5019\uFF0C\u5FFD\u7565\u5927\u5C0F\u5199
    • Bugfix:

      • \u4FEE\u590D trace \u547D\u4EE4\u9047\u5230\u5FAA\u73AF\u9020\u6210\u8F93\u51FA\u592A\u957F
      • \u4FEE\u590D trace \u547D\u4EE4\u5728\u65B9\u6CD5\u8C03\u7528\u4E2D\u629B\u51FA\u4E86\u5F02\u5E38\uFF0C\u4F1A\u8BA9 trace \u7684\u8282\u70B9\u9519\u4F4D
      • \u4FEE\u6B63\u589E\u5F3A BootstrapClassLoader \u52A0\u8F7D\u7684\u7C7B\uFF0C\u627E\u4E0D\u5230 Spy \u7684\u95EE\u9898
      • \u4FEE\u590D\u67D0\u4E9B\u914D\u8272\u65B9\u6848\u4E0B\uFF0C\u7ED3\u679C\u663E\u793A\u4E0D\u53CB\u597D\u7684\u95EE\u9898

    v2016-03-07

    • \u652F\u6301\u4E00\u952E\u67E5\u770B\u5F53\u524D\u6700\u5FD9\u7684\u524D N \u4E2A\u7EBF\u7A0B\u53CA\u5176\u5806\u6808
    • \u4FEE\u590D openjdk \u4E0B\u542F\u52A8 arthas \u5931\u8D25\u7684\u95EE\u9898\uFF08\u9700\u8981\u91CD\u65B0\u5B89\u88C5 as.sh\uFF09
    • \u4E00\u4E9B\u4F53\u9A8C\u4F18\u5316

    v2016-01-18

    • \u4F18\u5316 jad\uFF0C\u5B9E\u65F6 dump \u5185\u5B58 byte array\uFF0C\u5E76\u4F7F\u7528 jd-core-java \u53CD\u7F16\u8BD1\uFF0C\u652F\u6301\u884C\u53F7\u663E\u793A
    • \u4FEE\u590D tt \u547D\u4EE4\u5728\u76D1\u63A7\u4E0E\u7EBF\u7A0B\u4E0A\u4E0B\u6587\u76F8\u5173\u7684\u65B9\u6CD5\u8C03\u7528\u65F6\uFF0C\u663E\u793A/\u91CD\u505A\u7B49\u573A\u666F\u4E0B\u7684 bug

    v2016-01-08

    • \u4FEE\u590D\u4E00\u4E9B bug
      • jad NPE
      • watch/monitor NPE
      • \u4E0D\u9700\u8981\u8F6C\u4E49
      • \u6570\u636E\u7EDF\u8BA1\u95EE\u9898\u4FEE\u590D
      • sc \u67E5\u770B\u9759\u6001\u53D8\u91CF\u5185\u90E8\u5C42\u6B21\u7ED3\u6784

    v2015-12-29

    • Arthas 2.0 \u6D4B\u8BD5\u7248\u672C\u53D1\u5E03\uFF01
    ',18);function I(P,V){const i=t("ExternalLinkIcon"),s=t("RouterLink");return d(),o("div",null,[u,_,a("ul",null,[a("li",null,[a("a",b,[v,e(i)])])]),f,a("ul",null,[a("li",null,[a("a",p,[g,e(i)])])]),x,a("ul",null,[a("li",null,[a("a",m,[N,e(i)])])]),k,a("ul",null,[a("li",null,[a("a",j,[w,e(i)])])]),C,a("ul",null,[a("li",null,[E,e(s,{to:"/doc/async.html"},{default:n(()=>[L]),_:1})]),y,A]),B])}const R=h(c,[["render",I],["__file","release-notes.html.vue"]]);export{R as default}; +import{_ as h,o as d,c as o,a,b as e,w as n,e as l,d as r,r as t}from"./app.e2427bec.js";const c={},u=a("h1",{id:"release-notes",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#release-notes","aria-hidden":"true"},"#"),l(" Release Notes")],-1),_=a("h2",{id:"v3-1-1",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#v3-1-1","aria-hidden":"true"},"#"),l(" v3.1.1")],-1),b={href:"https://github.com/alibaba/arthas/releases/tag/arthas-all-3.1.1",target:"_blank",rel:"noopener noreferrer"},v=l("https://github.com/alibaba/arthas/releases/tag/arthas-all-3.1.1"),f=a("h2",{id:"v3-1-0",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#v3-1-0","aria-hidden":"true"},"#"),l(" v3.1.0")],-1),p={href:"https://github.com/alibaba/arthas/releases/tag/3.1.0",target:"_blank",rel:"noopener noreferrer"},g=l("https://github.com/alibaba/arthas/releases/tag/3.1.0"),x=a("h2",{id:"v3-0-5",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#v3-0-5","aria-hidden":"true"},"#"),l(" v3.0.5")],-1),m={href:"https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.5",target:"_blank",rel:"noopener noreferrer"},N=l("https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.5"),k=a("h2",{id:"v3-0-4",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#v3-0-4","aria-hidden":"true"},"#"),l(" v3.0.4")],-1),j={href:"https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.4",target:"_blank",rel:"noopener noreferrer"},w=l("https://github.com/alibaba/arthas/releases/tag/arthas-all-3.0.4"),C=r('

    v2017-11-03

    • \u589E\u52A0 getstatic \u65B9\u6CD5\u83B7\u53D6\u9759\u6001\u53D8\u91CF
    • \u4FEE\u590D arthas classloader \u52A0\u8F7D\u5230\u5E94\u7528\u65E5\u5FD7\u7684\u95EE\u9898
    • \u589E\u52A0 ognl custom classloader \u4FBF\u4E8E\u8C03\u7528\u9759\u6001\u65B9\u6CD5
    • \u4F18\u5316 termd \u8F93\u51FA\u5927\u5B57\u7B26\u4E32\u7684\u6027\u80FD\u95EE\u9898
    • classloader \u547D\u4EE4\u9ED8\u8BA4\u6309\u7C7B\u52A0\u8F7D\u5668\u7C7B\u578B\u5206\u7C7B\u7F16\u8BD1
    • \u4FEE\u590D wc \u547D\u4EE4\u7EDF\u8BA1\u9519\u8BEF\u7684\u95EE\u9898
    • \u7981\u6B62\u589E\u5F3A\u7279\u5B9A JDK \u7C7B\uFF0C\u5982 Classloader, Method, Integer \u7B49
    • \u652F\u6301 OGNL \u8868\u8FBE\u5F0F\u51FA\u9519\u76F4\u63A5\u9000\u51FA\u547D\u4EE4
    • \u4FEE\u590D\u7BA1\u9053\u7C7B\u547D\u4EE4\u5355\u72EC\u51FA\u9519\u7684\u95EE\u9898
    • \u4F18\u5316\u547D\u4EE4\u91CD\u5B9A\u5411\u529F\u80FD\uFF0C\u4F7F\u7528\u5F02\u6B65\u65E5\u5FD7\u8F93\u51FA\u7ED3\u679C
    • trace \u547D\u4EE4\u589E\u52A0\u8FC7\u6EE4 jdk \u65B9\u6CD5\u8C03\u7528\u7684\u529F\u80FD

    v2017-09-22

    • \u4F18\u5316 agent server\b \u542F\u52A8\u65F6\u7684\u5F02\u5E38\u4FE1\u606F
    • \u4FEE\u590D\u5F02\u6B65\u547D\u4EE4\u7684\u4E00\u4E9B bug

    v2017-09-11

    ',5),E=l("\u652F\u6301"),L=l("\u5F02\u6B65\u540E\u540E\u547D\u4EE4"),y=a("li",null,"jad \u547D\u4EE4\u4F18\u5316\uFF0C\u652F\u6301 JDK8 \u53CA\u5185\u90E8\u7C7B",-1),A=a("li",null,"\u4FEE\u590D\u4E2D\u6587\u4E71\u7801\u95EE\u9898",-1),B=r('

    v2017-05-11

    • tt \u547D\u4EE4\u9ED8\u8BA4\u53EA\u5C55\u5F00 1 \u5C42\uFF0C\u9632\u6B62\u5BF9\u8C61\u8FC7\u5927\u9020\u6210\u5361\u987F
    • \u4FEE\u590D\u4E2D\u6587\u65E0\u6CD5\u5C55\u793A\u7684\u95EE\u9898

    v2017-05-12

    • Arthas 3.0 release

    v2016-12-09

    • as.sh \u652F\u6301-h \u8F93\u51FA\u5E2E\u52A9
    • [#121] \u4FEE\u590D\u6B8B\u7559\u7684\u4E34\u65F6\u6587\u4EF6\u5BFC\u81F4 arthas \u542F\u52A8\u5931\u8D25\u7684\u95EE\u9898
    • [#123] \u4FEE\u590D\u53CD\u590D attach/shutdown \u9020\u6210 classloader \u6CC4\u9732\u7684\u95EE\u9898
    • \u4F18\u5316\u547D\u4EE4\u4E2D\u7684\u5E2E\u52A9\u63D0\u793A\u4FE1\u606F
    • [#126] \u4FEE\u590D tm \u547D\u4EE4\u6587\u6863\u94FE\u63A5\u9519\u4E71\u7684\u95EE\u9898
    • [#122] classloader \u547D\u4EE4\u4E2D\u8FC7\u6EE4\u6389sun.reflect.DelegatingClassLoader
    • [#129] \u4FEE\u590D classloader \u5C42\u6B21\u5C55\u793A\u7684\u95EE\u9898
    • [#125] arthas \u8F93\u51FA\u7684 log \u4E0D\u4E3B\u52A8\u6362\u884C\uFF0C\u5BF9\u4E8E\u65E5\u5FD7\u89E3\u6790\u66F4\u52A0\u53CB\u597D
    • [#96] sc \u7B49\u547D\u4EE4\u652F\u6301 com/taobao/xxx/TestClass \u8FD9\u6837\u7684\u683C\u5F0F\uFF0C\u4EE5\u540E\u590D\u5236\u7C98\u8D34\u4E0D\u9700\u8981\u5728\u628A'/'\u66FF\u6362\u6210'.'\u5566
    • [#124] \u4FEE\u590D\u67D0\u4E9B\u60C5\u51B5\u4E0B trace \u7684\u65F6\u95F4\u4E3A\u8D1F\u503C\u7684\u95EE\u9898
    • [#128] tt \u547D\u4EE4\u7684\u7ED3\u679C\u9ED8\u8BA4\u81EA\u52A8\u5C55\u5F00\uFF0C\u4E0D\u9700\u8981\u518D\u589E\u52A0-x 2\u6765\u770B\u5230\u53C2\u6570\uFF0C\u5F02\u5E38\u7684\u8BE6\u7EC6\u4FE1\u606F\u4E86\u3002
    • [#130] \u4FEE\u590D\u5F53\u7AEF\u53E3\u51B2\u7A81\u65F6\uFF0C\u6CA1\u6709\u5F88\u597D\u5730\u6253\u5370\u9519\u8BEF\uFF0C\u800C\u662F\u8FDB\u5165\u4E86\u4E00\u4E2A\u51FA\u9519\u7684\u4EA4\u4E92\u754C\u9762\u7684\u95EE\u9898
    • [#98] \u4FEE\u590D Arthas \u542F\u52A8\u65F6\uFF0C\u5982\u679C\u4E0B\u8F7D\u66F4\u65B0\u5931\u8D25\uFF0C\u5BFC\u81F4\u542F\u52A8\u5931\u8D25\u7684\u95EE\u9898
    • [#139] \u4FEE\u590D\u67D0\u4E9B\u7279\u6B8A\u60C5\u51B5\u4E0B agent attach \u5931\u8D25\u7684\u95EE\u9898
    • [#156] jd-core-java \u5EF6\u8FDF\u521D\u59CB\u5316\uFF0C\u907F\u514D arthas \u542F\u52A8\u65F6\u51FA\u9519
    • \u4FEE\u590D\u7EBF\u7A0B\u540D\u91CD\u590D\u7684\u95EE\u9898
    • [#150] trace \u547D\u4EE4\u652F\u6301\u6309\u8FD0\u884C\u603B\u8017\u65F6\u8FC7\u6EE4
    • \u4FEE\u590D sc \u67E5\u627E SystemClassloader \u65F6\u53EF\u80FD\u51FA\u73B0\u7684 NPE
    • [#180] \u4FEE\u590D\u7B2C\u4E00\u6B21 Attach \u6210\u529F\u4E4B\u540E\uFF0C\u5220\u9664\u4E4B\u524D Arthas \u7684\u5B89\u88C5\u5305\uFF0C\u91CD\u65B0\u7F16\u8BD1\u6253\u5305\uFF0C\u518D\u6B21 attach \u5931\u8D25\u7684\u95EE\u9898

    v2016-06-07

    • \u4FEE\u590D\u4EE5\u8D44\u6E90\u65B9\u5F0F\u52A0\u8F7D spy \u7C7B\u65F6\u51FA\u73B0 NPE \u7684\u95EE\u9898
    • \u652F\u6301\u4E00\u952E\u627E\u51FA\u7EBF\u7A0B\u4E2D\u83B7\u5F97\u9501\u5E76\u963B\u585E\u4F4F\u5176\u4ED6\u7EBF\u7A0B\u7684\u7EBF\u7A0B
    • \u4F18\u5316 Thread \u8F93\u51FA\uFF0C\u6309\u7EBF\u7A0B\u540D\u6392\u5E8F
    • \u83B7\u53D6 topN \u5FD9\u7684\u7EBF\u7A0B\u65F6\uFF0C\u652F\u6301\u6307\u5B9A\u5237\u65B0\u95F4\u9694

    v2016-04-08

    • New feature\uFF1A

      • dashboard \u652F\u6301\u6307\u5B9A\u5237\u65B0\u9891\u7387\uFF0C\u652F\u6301\u6307\u5B9A\u6267\u884C\u6B21\u6570
      • \u547D\u4EE4\u6267\u884C\u7ED3\u679C\u4FDD\u5B58\u5230\u65E5\u5FD7\u6587\u4EF6\uFF0C\u65B9\u4FBF\u540E\u7EED\u67E5\u770B
      • \u542F\u52A8\u901F\u5EA6\u4F18\u5316\uFF0C\u7B2C\u4E00\u6B21 attach \u7684\u901F\u5EA6\u63D0\u5347\u4E00\u500D
      • \u652F\u6301\u6279\u5904\u7406\u529F\u80FD\uFF0C\u652F\u6301\u6267\u884C\u811A\u672C\u6587\u4EF6
      • \u4F18\u5316\u542F\u52A8\u903B\u8F91\uFF0Carthas \u811A\u672C\u542F\u52A8\u65F6\u4EA4\u4E92\u5F0F\u9009\u62E9\u8FDB\u7A0B
      • \u7C7B\u9ED8\u8BA4\u542F\u7528\u7EE7\u627F\u5173\u7CFB\u67E5\u8BE2\uFF0C\u67E5\u627E\u7C7B\u65F6\u9ED8\u8BA4\u4F1A\u67E5\u627E\u5B50\u7C7B\uFF0C\u5982\u679C\u9700\u8981\u5173\u95ED\uFF0C\u5219\u901A\u8FC7\u5168\u5C40\u5F00\u5173 Options disable-sub-class \u5173\u95ED
      • \u652F\u6301\u5728\u5F69\u8272\u6A21\u5F0F\u548C\u6587\u672C\u6A21\u5F0F\u4E2D\u5207\u6362
    • UI Improvement:

      • \u5408\u5E76 exit \u548C quit \u547D\u4EE4
      • \u547D\u4EE4\u5E2E\u52A9\u4FE1\u606F\u589E\u52A0 wiki \u94FE\u63A5
      • \u4F18\u5316 watch \u7684\u903B\u8F91\uFF0C\u66F4\u52A0\u7B26\u5408\u5927\u5BB6\u7684\u76F4\u89C9
      • thread \u547D\u4EE4\u589E\u52A0 example \u8BF4\u660E
      • \u81EA\u52A8\u8865\u5168\u7684\u65F6\u5019\uFF0C\u5FFD\u7565\u5927\u5C0F\u5199
    • Bugfix:

      • \u4FEE\u590D trace \u547D\u4EE4\u9047\u5230\u5FAA\u73AF\u9020\u6210\u8F93\u51FA\u592A\u957F
      • \u4FEE\u590D trace \u547D\u4EE4\u5728\u65B9\u6CD5\u8C03\u7528\u4E2D\u629B\u51FA\u4E86\u5F02\u5E38\uFF0C\u4F1A\u8BA9 trace \u7684\u8282\u70B9\u9519\u4F4D
      • \u4FEE\u6B63\u589E\u5F3A BootstrapClassLoader \u52A0\u8F7D\u7684\u7C7B\uFF0C\u627E\u4E0D\u5230 Spy \u7684\u95EE\u9898
      • \u4FEE\u590D\u67D0\u4E9B\u914D\u8272\u65B9\u6848\u4E0B\uFF0C\u7ED3\u679C\u663E\u793A\u4E0D\u53CB\u597D\u7684\u95EE\u9898

    v2016-03-07

    • \u652F\u6301\u4E00\u952E\u67E5\u770B\u5F53\u524D\u6700\u5FD9\u7684\u524D N \u4E2A\u7EBF\u7A0B\u53CA\u5176\u5806\u6808
    • \u4FEE\u590D openjdk \u4E0B\u542F\u52A8 arthas \u5931\u8D25\u7684\u95EE\u9898\uFF08\u9700\u8981\u91CD\u65B0\u5B89\u88C5 as.sh\uFF09
    • \u4E00\u4E9B\u4F53\u9A8C\u4F18\u5316

    v2016-01-18

    • \u4F18\u5316 jad\uFF0C\u5B9E\u65F6 dump \u5185\u5B58 byte array\uFF0C\u5E76\u4F7F\u7528 jd-core-java \u53CD\u7F16\u8BD1\uFF0C\u652F\u6301\u884C\u53F7\u663E\u793A
    • \u4FEE\u590D tt \u547D\u4EE4\u5728\u76D1\u63A7\u4E0E\u7EBF\u7A0B\u4E0A\u4E0B\u6587\u76F8\u5173\u7684\u65B9\u6CD5\u8C03\u7528\u65F6\uFF0C\u663E\u793A/\u91CD\u505A\u7B49\u573A\u666F\u4E0B\u7684 bug

    v2016-01-08

    • \u4FEE\u590D\u4E00\u4E9B bug
      • jad NPE
      • watch/monitor NPE
      • \u4E0D\u9700\u8981\u8F6C\u4E49
      • \u6570\u636E\u7EDF\u8BA1\u95EE\u9898\u4FEE\u590D
      • sc \u67E5\u770B\u9759\u6001\u53D8\u91CF\u5185\u90E8\u5C42\u6B21\u7ED3\u6784

    v2015-12-29

    • Arthas 2.0 \u6D4B\u8BD5\u7248\u672C\u53D1\u5E03\uFF01
    ',18);function I(P,V){const i=t("ExternalLinkIcon"),s=t("RouterLink");return d(),o("div",null,[u,_,a("ul",null,[a("li",null,[a("a",b,[v,e(i)])])]),f,a("ul",null,[a("li",null,[a("a",p,[g,e(i)])])]),x,a("ul",null,[a("li",null,[a("a",m,[N,e(i)])])]),k,a("ul",null,[a("li",null,[a("a",j,[w,e(i)])])]),C,a("ul",null,[a("li",null,[E,e(s,{to:"/doc/async.html"},{default:n(()=>[L]),_:1})]),y,A]),B])}const R=h(c,[["render",I],["__file","release-notes.html.vue"]]);export{R as default}; diff --git a/assets/release-notes.html.14a11eb1.js b/assets/release-notes.html.daaf684d.js similarity index 92% rename from assets/release-notes.html.14a11eb1.js rename to assets/release-notes.html.daaf684d.js index 14fb22b86..6e4b86293 100644 --- a/assets/release-notes.html.14a11eb1.js +++ b/assets/release-notes.html.daaf684d.js @@ -1 +1 @@ -const l=JSON.parse('{"key":"v-648880ae","path":"/doc/release-notes.html","title":"Release Notes","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"v3.1.1","slug":"v3-1-1","link":"#v3-1-1","children":[]},{"level":2,"title":"v3.1.0","slug":"v3-1-0","link":"#v3-1-0","children":[]},{"level":2,"title":"v3.0.5","slug":"v3-0-5","link":"#v3-0-5","children":[]},{"level":2,"title":"v3.0.4","slug":"v3-0-4","link":"#v3-0-4","children":[]},{"level":2,"title":"v2017-11-03","slug":"v2017-11-03","link":"#v2017-11-03","children":[]},{"level":2,"title":"v2017-09-22","slug":"v2017-09-22","link":"#v2017-09-22","children":[]},{"level":2,"title":"v2017-09-11","slug":"v2017-09-11","link":"#v2017-09-11","children":[]},{"level":2,"title":"v2017-05-11","slug":"v2017-05-11","link":"#v2017-05-11","children":[]},{"level":2,"title":"v2017-05-12","slug":"v2017-05-12","link":"#v2017-05-12","children":[]},{"level":2,"title":"v2016-12-09","slug":"v2016-12-09","link":"#v2016-12-09","children":[]},{"level":2,"title":"v2016-06-07","slug":"v2016-06-07","link":"#v2016-06-07","children":[]},{"level":2,"title":"v2016-04-08","slug":"v2016-04-08","link":"#v2016-04-08","children":[]},{"level":2,"title":"v2016-03-07","slug":"v2016-03-07","link":"#v2016-03-07","children":[]},{"level":2,"title":"v2016-01-18","slug":"v2016-01-18","link":"#v2016-01-18","children":[]},{"level":2,"title":"v2016-01-08","slug":"v2016-01-08","link":"#v2016-01-08","children":[]},{"level":2,"title":"v2015-12-29","slug":"v2015-12-29","link":"#v2015-12-29","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/release-notes.md","version":"4.3.3"}');export{l as data}; +const l=JSON.parse('{"key":"v-648880ae","path":"/doc/release-notes.html","title":"Release Notes","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"v3.1.1","slug":"v3-1-1","link":"#v3-1-1","children":[]},{"level":2,"title":"v3.1.0","slug":"v3-1-0","link":"#v3-1-0","children":[]},{"level":2,"title":"v3.0.5","slug":"v3-0-5","link":"#v3-0-5","children":[]},{"level":2,"title":"v3.0.4","slug":"v3-0-4","link":"#v3-0-4","children":[]},{"level":2,"title":"v2017-11-03","slug":"v2017-11-03","link":"#v2017-11-03","children":[]},{"level":2,"title":"v2017-09-22","slug":"v2017-09-22","link":"#v2017-09-22","children":[]},{"level":2,"title":"v2017-09-11","slug":"v2017-09-11","link":"#v2017-09-11","children":[]},{"level":2,"title":"v2017-05-11","slug":"v2017-05-11","link":"#v2017-05-11","children":[]},{"level":2,"title":"v2017-05-12","slug":"v2017-05-12","link":"#v2017-05-12","children":[]},{"level":2,"title":"v2016-12-09","slug":"v2016-12-09","link":"#v2016-12-09","children":[]},{"level":2,"title":"v2016-06-07","slug":"v2016-06-07","link":"#v2016-06-07","children":[]},{"level":2,"title":"v2016-04-08","slug":"v2016-04-08","link":"#v2016-04-08","children":[]},{"level":2,"title":"v2016-03-07","slug":"v2016-03-07","link":"#v2016-03-07","children":[]},{"level":2,"title":"v2016-01-18","slug":"v2016-01-18","link":"#v2016-01-18","children":[]},{"level":2,"title":"v2016-01-08","slug":"v2016-01-08","link":"#v2016-01-08","children":[]},{"level":2,"title":"v2015-12-29","slug":"v2015-12-29","link":"#v2015-12-29","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/release-notes.md","version":"4.3.5"}');export{l as data}; diff --git a/assets/reset.html.d05a2660.js b/assets/reset.html.334188fe.js similarity index 84% rename from assets/reset.html.d05a2660.js rename to assets/reset.html.334188fe.js index 2a8d846b2..3643099a4 100644 --- a/assets/reset.html.d05a2660.js +++ b/assets/reset.html.334188fe.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-71f77d4c","path":"/doc/reset.html","title":"reset","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]},{"level":2,"title":"\u8FD8\u539F\u6307\u5B9A\u7C7B","slug":"\u8FD8\u539F\u6307\u5B9A\u7C7B","link":"#\u8FD8\u539F\u6307\u5B9A\u7C7B","children":[]},{"level":2,"title":"\u8FD8\u539F\u6240\u6709\u7C7B","slug":"\u8FD8\u539F\u6240\u6709\u7C7B","link":"#\u8FD8\u539F\u6240\u6709\u7C7B","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/reset.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-71f77d4c","path":"/doc/reset.html","title":"reset","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]},{"level":2,"title":"\u8FD8\u539F\u6307\u5B9A\u7C7B","slug":"\u8FD8\u539F\u6307\u5B9A\u7C7B","link":"#\u8FD8\u539F\u6307\u5B9A\u7C7B","children":[]},{"level":2,"title":"\u8FD8\u539F\u6240\u6709\u7C7B","slug":"\u8FD8\u539F\u6240\u6709\u7C7B","link":"#\u8FD8\u539F\u6240\u6709\u7C7B","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/reset.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/reset.html.538a5ab2.js b/assets/reset.html.5e039e96.js similarity index 72% rename from assets/reset.html.538a5ab2.js rename to assets/reset.html.5e039e96.js index 674e1919c..1c44eaa6d 100644 --- a/assets/reset.html.538a5ab2.js +++ b/assets/reset.html.5e039e96.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as t,a as e,b as d,e as s,d as r,r as l}from"./app.524ecf5c.js";const c={},v=e("h1",{id:"reset",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#reset","aria-hidden":"true"},"#"),s(" reset")],-1),o={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-reset",target:"_blank",rel:"noopener noreferrer"},m=e("code",null,"reset",-1),u=s("\u5728\u7EBF\u6559\u7A0B"),h=r(`

    \u63D0\u793A

    \u91CD\u7F6E\u589E\u5F3A\u7C7B\uFF0C\u5C06\u88AB Arthas \u589E\u5F3A\u8FC7\u7684\u7C7B\u5168\u90E8\u8FD8\u539F\uFF0CArthas \u670D\u52A1\u7AEFstop\u65F6\u4F1A\u91CD\u7F6E\u6240\u6709\u589E\u5F3A\u8FC7\u7684\u7C7B

    \u4F7F\u7528\u53C2\u8003

    $ reset -h
    +import{_ as e,o as s,c as n,d as i}from"./app.e2427bec.js";const a={},d=i(`

    reset

    \u63D0\u793A

    \u91CD\u7F6E\u589E\u5F3A\u7C7B\uFF0C\u5C06\u88AB Arthas \u589E\u5F3A\u8FC7\u7684\u7C7B\u5168\u90E8\u8FD8\u539F\uFF0CArthas \u670D\u52A1\u7AEFstop\u65F6\u4F1A\u91CD\u7F6E\u6240\u6709\u589E\u5F3A\u8FC7\u7684\u7C7B

    \u4F7F\u7528\u53C2\u8003

    $ reset -h
      USAGE:
        reset [-h] [-E] [class-pattern]
     
    @@ -33,4 +33,4 @@ Affect(class-cnt:1 , method-cnt:1) cost in 15 ms.
     
     $ reset
     Affect(class-cnt:1 , method-cnt:0) cost in 9 ms.
    -
    `,7);function b(p,_){const n=l("ExternalLinkIcon");return a(),t("div",null,[v,e("p",null,[e("a",o,[m,u,d(n)])]),h])}const x=i(c,[["render",b],["__file","reset.html.vue"]]);export{x as default}; +
    `,8),t=[d];function l(r,c){return s(),n("div",null,t)}const m=e(a,[["render",l],["__file","reset.html.vue"]]);export{m as default}; diff --git a/assets/reset.html.2e9fc05c.js b/assets/reset.html.94ebcaf7.js similarity index 80% rename from assets/reset.html.2e9fc05c.js rename to assets/reset.html.94ebcaf7.js index 2c4a45a67..d2e847dd1 100644 --- a/assets/reset.html.2e9fc05c.js +++ b/assets/reset.html.94ebcaf7.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-6735226e","path":"/en/doc/reset.html","title":"reset","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]},{"level":2,"title":"Reset specified class","slug":"reset-specified-class","link":"#reset-specified-class","children":[]},{"level":2,"title":"Reset all classes","slug":"reset-all-classes","link":"#reset-all-classes","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/reset.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-6735226e","path":"/en/doc/reset.html","title":"reset","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]},{"level":2,"title":"Reset specified class","slug":"reset-specified-class","link":"#reset-specified-class","children":[]},{"level":2,"title":"Reset all classes","slug":"reset-all-classes","link":"#reset-all-classes","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/reset.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/reset.html.86808cc2.js b/assets/reset.html.9c6228ed.js similarity index 74% rename from assets/reset.html.86808cc2.js rename to assets/reset.html.9c6228ed.js index 6cb0f6795..2f6af090f 100644 --- a/assets/reset.html.86808cc2.js +++ b/assets/reset.html.9c6228ed.js @@ -1,4 +1,4 @@ -import{_ as a,o as i,c as t,a as e,b as d,e as s,d as l,r}from"./app.524ecf5c.js";const c={},v=e("h1",{id:"reset",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#reset","aria-hidden":"true"},"#"),s(" reset")],-1),o={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-reset",target:"_blank",rel:"noopener noreferrer"},m=e("code",null,"reset",-1),u=s(" online tutorial"),h=l(`

    TIP

    Reset all classes that have been enhanced by Arthas. These enhanced classes will also be reset when Arthas server is stop.

    Usage

    $ reset -h
    +import{_ as e,o as s,c as n,d as i}from"./app.e2427bec.js";const a={},d=i(`

    reset

    TIP

    Reset all classes that have been enhanced by Arthas. These enhanced classes will also be reset when Arthas server is stop.

    Usage

    $ reset -h
      USAGE:
        reset [-h] [-E] [class-pattern]
     
    @@ -33,4 +33,4 @@ Affect(class-cnt:1 , method-cnt:1) cost in 15 ms.
     
     $ reset
     Affect(class-cnt:1 , method-cnt:0) cost in 9 ms.
    -
    `,7);function b(p,_){const n=r("ExternalLinkIcon");return i(),t("div",null,[v,e("p",null,[e("a",o,[m,u,d(n)])]),h])}const x=a(c,[["render",b],["__file","reset.html.vue"]]);export{x as default}; +
    `,8),t=[d];function l(r,c){return s(),n("div",null,t)}const m=e(a,[["render",l],["__file","reset.html.vue"]]);export{m as default}; diff --git a/assets/retransform.html.92f08601.js b/assets/retransform.html.5a86cbf5.js similarity index 93% rename from assets/retransform.html.92f08601.js rename to assets/retransform.html.5a86cbf5.js index aa88d5d3d..d252fa9d5 100644 --- a/assets/retransform.html.92f08601.js +++ b/assets/retransform.html.5a86cbf5.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-e5e2b738","path":"/en/doc/retransform.html","title":"retransform","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]},{"level":2,"title":"retransform the specified .class file","slug":"retransform-the-specified-class-file","link":"#retransform-the-specified-class-file","children":[]},{"level":2,"title":"View retransform entry","slug":"view-retransform-entry","link":"#view-retransform-entry","children":[]},{"level":2,"title":"Delete the specified retransform entry","slug":"delete-the-specified-retransform-entry","link":"#delete-the-specified-retransform-entry","children":[]},{"level":2,"title":"Delete all retransform entries","slug":"delete-all-retransform-entries","link":"#delete-all-retransform-entries","children":[]},{"level":2,"title":"Explicitly trigger retransform","slug":"explicitly-trigger-retransform","link":"#explicitly-trigger-retransform","children":[]},{"level":2,"title":"Eliminate the influence of retransform","slug":"eliminate-the-influence-of-retransform","link":"#eliminate-the-influence-of-retransform","children":[]},{"level":2,"title":"Use with the jad/mc command","slug":"use-with-the-jad-mc-command","link":"#use-with-the-jad-mc-command","children":[]},{"level":2,"title":"Tips for uploading .class files to the server","slug":"tips-for-uploading-class-files-to-the-server","link":"#tips-for-uploading-class-files-to-the-server","children":[]},{"level":2,"title":"Restrictions of the retransform command","slug":"restrictions-of-the-retransform-command","link":"#restrictions-of-the-retransform-command","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/retransform.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-e5e2b738","path":"/en/doc/retransform.html","title":"retransform","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]},{"level":2,"title":"retransform the specified .class file","slug":"retransform-the-specified-class-file","link":"#retransform-the-specified-class-file","children":[]},{"level":2,"title":"View retransform entry","slug":"view-retransform-entry","link":"#view-retransform-entry","children":[]},{"level":2,"title":"Delete the specified retransform entry","slug":"delete-the-specified-retransform-entry","link":"#delete-the-specified-retransform-entry","children":[]},{"level":2,"title":"Delete all retransform entries","slug":"delete-all-retransform-entries","link":"#delete-all-retransform-entries","children":[]},{"level":2,"title":"Explicitly trigger retransform","slug":"explicitly-trigger-retransform","link":"#explicitly-trigger-retransform","children":[]},{"level":2,"title":"Eliminate the influence of retransform","slug":"eliminate-the-influence-of-retransform","link":"#eliminate-the-influence-of-retransform","children":[]},{"level":2,"title":"Use with the jad/mc command","slug":"use-with-the-jad-mc-command","link":"#use-with-the-jad-mc-command","children":[]},{"level":2,"title":"Tips for uploading .class files to the server","slug":"tips-for-uploading-class-files-to-the-server","link":"#tips-for-uploading-class-files-to-the-server","children":[]},{"level":2,"title":"Restrictions of the retransform command","slug":"restrictions-of-the-retransform-command","link":"#restrictions-of-the-retransform-command","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/retransform.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/retransform.html.7800567a.js b/assets/retransform.html.822f2ec7.js similarity index 91% rename from assets/retransform.html.7800567a.js rename to assets/retransform.html.822f2ec7.js index a03507a67..d1b9122c1 100644 --- a/assets/retransform.html.7800567a.js +++ b/assets/retransform.html.822f2ec7.js @@ -1,4 +1,4 @@ -import{_ as t,o,c as r,a as s,b as e,e as n,d as l,r as i}from"./app.524ecf5c.js";const c={},p=s("h1",{id:"retransform",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#retransform","aria-hidden":"true"},"#"),n(" retransform")],-1),d={href:"https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=command-mc-retransform",target:"_blank",rel:"noopener noreferrer"},u=s("code",null,"mc-retransform",-1),m=n(" online tutorial"),h=s("div",{class:"custom-container tip"},[s("p",{class:"custom-container-title"},"TIP"),s("p",null,[n("Load the external "),s("code",null,"*.class"),n(" files to retransform the loaded classes in JVM.")])],-1),v=n("Reference: "),k={href:"https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/Instrumentation.html#retransformClasses-java.lang.Class...-",target:"_blank",rel:"noopener noreferrer"},f=n("Instrumentation#retransformClasses"),b=l(`

    Usage

       retransform /tmp/Test.class
    +import{_ as e,o as t,c as o,a as s,b as r,e as n,d as l,r as i}from"./app.e2427bec.js";const c={},p=s("h1",{id:"retransform",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#retransform","aria-hidden":"true"},"#"),n(" retransform")],-1),d=s("div",{class:"custom-container tip"},[s("p",{class:"custom-container-title"},"TIP"),s("p",null,[n("Load the external "),s("code",null,"*.class"),n(" files to retransform the loaded classes in JVM.")])],-1),u=n("Reference: "),m={href:"https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/Instrumentation.html#retransformClasses-java.lang.Class...-",target:"_blank",rel:"noopener noreferrer"},h=n("Instrumentation#retransformClasses"),v=l(`

    Usage

       retransform /tmp/Test.class
        retransform -l
        retransform -d 1                    # delete retransform entry
        retransform --deleteAll             # delete all retransform entries
    @@ -47,4 +47,4 @@ retransform /tmp/com/example/demo/arthas/user/UserController.class
             }
         }
     }
    -
    `,30);function g(y,x){const a=i("ExternalLinkIcon");return o(),r("div",null,[p,s("p",null,[s("a",d,[u,m,e(a)])]),h,s("p",null,[v,s("a",k,[f,e(a)])]),b])}const _=t(c,[["render",g],["__file","retransform.html.vue"]]);export{_ as default}; +
    `,30);function k(f,b){const a=i("ExternalLinkIcon");return t(),o("div",null,[p,d,s("p",null,[u,s("a",m,[h,r(a)])]),v])}const y=e(c,[["render",k],["__file","retransform.html.vue"]]);export{y as default}; diff --git a/assets/retransform.html.f32cdadb.js b/assets/retransform.html.8ab36d20.js similarity index 94% rename from assets/retransform.html.f32cdadb.js rename to assets/retransform.html.8ab36d20.js index 68e5ef96a..43bfc4e9d 100644 --- a/assets/retransform.html.f32cdadb.js +++ b/assets/retransform.html.8ab36d20.js @@ -1 +1 @@ -const r=JSON.parse('{"key":"v-54cde250","path":"/doc/retransform.html","title":"retransform","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]},{"level":2,"title":"retransform \u6307\u5B9A\u7684 .class \u6587\u4EF6","slug":"retransform-\u6307\u5B9A\u7684-class-\u6587\u4EF6","link":"#retransform-\u6307\u5B9A\u7684-class-\u6587\u4EF6","children":[]},{"level":2,"title":"\u67E5\u770B retransform entry","slug":"\u67E5\u770B-retransform-entry","link":"#\u67E5\u770B-retransform-entry","children":[]},{"level":2,"title":"\u5220\u9664\u6307\u5B9A retransform entry","slug":"\u5220\u9664\u6307\u5B9A-retransform-entry","link":"#\u5220\u9664\u6307\u5B9A-retransform-entry","children":[]},{"level":2,"title":"\u5220\u9664\u6240\u6709 retransform entry","slug":"\u5220\u9664\u6240\u6709-retransform-entry","link":"#\u5220\u9664\u6240\u6709-retransform-entry","children":[]},{"level":2,"title":"\u663E\u5F0F\u89E6\u53D1 retransform","slug":"\u663E\u5F0F\u89E6\u53D1-retransform","link":"#\u663E\u5F0F\u89E6\u53D1-retransform","children":[]},{"level":2,"title":"\u6D88\u9664 retransform \u7684\u5F71\u54CD","slug":"\u6D88\u9664-retransform-\u7684\u5F71\u54CD","link":"#\u6D88\u9664-retransform-\u7684\u5F71\u54CD","children":[]},{"level":2,"title":"\u7ED3\u5408 jad/mc \u547D\u4EE4\u4F7F\u7528","slug":"\u7ED3\u5408-jad-mc-\u547D\u4EE4\u4F7F\u7528","link":"#\u7ED3\u5408-jad-mc-\u547D\u4EE4\u4F7F\u7528","children":[]},{"level":2,"title":"\u4E0A\u4F20 .class \u6587\u4EF6\u5230\u670D\u52A1\u5668\u7684\u6280\u5DE7","slug":"\u4E0A\u4F20-class-\u6587\u4EF6\u5230\u670D\u52A1\u5668\u7684\u6280\u5DE7","link":"#\u4E0A\u4F20-class-\u6587\u4EF6\u5230\u670D\u52A1\u5668\u7684\u6280\u5DE7","children":[]},{"level":2,"title":"retransform \u7684\u9650\u5236","slug":"retransform-\u7684\u9650\u5236","link":"#retransform-\u7684\u9650\u5236","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/retransform.md","version":"4.3.3"}');export{r as data}; +const r=JSON.parse('{"key":"v-54cde250","path":"/doc/retransform.html","title":"retransform","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]},{"level":2,"title":"retransform \u6307\u5B9A\u7684 .class \u6587\u4EF6","slug":"retransform-\u6307\u5B9A\u7684-class-\u6587\u4EF6","link":"#retransform-\u6307\u5B9A\u7684-class-\u6587\u4EF6","children":[]},{"level":2,"title":"\u67E5\u770B retransform entry","slug":"\u67E5\u770B-retransform-entry","link":"#\u67E5\u770B-retransform-entry","children":[]},{"level":2,"title":"\u5220\u9664\u6307\u5B9A retransform entry","slug":"\u5220\u9664\u6307\u5B9A-retransform-entry","link":"#\u5220\u9664\u6307\u5B9A-retransform-entry","children":[]},{"level":2,"title":"\u5220\u9664\u6240\u6709 retransform entry","slug":"\u5220\u9664\u6240\u6709-retransform-entry","link":"#\u5220\u9664\u6240\u6709-retransform-entry","children":[]},{"level":2,"title":"\u663E\u5F0F\u89E6\u53D1 retransform","slug":"\u663E\u5F0F\u89E6\u53D1-retransform","link":"#\u663E\u5F0F\u89E6\u53D1-retransform","children":[]},{"level":2,"title":"\u6D88\u9664 retransform \u7684\u5F71\u54CD","slug":"\u6D88\u9664-retransform-\u7684\u5F71\u54CD","link":"#\u6D88\u9664-retransform-\u7684\u5F71\u54CD","children":[]},{"level":2,"title":"\u7ED3\u5408 jad/mc \u547D\u4EE4\u4F7F\u7528","slug":"\u7ED3\u5408-jad-mc-\u547D\u4EE4\u4F7F\u7528","link":"#\u7ED3\u5408-jad-mc-\u547D\u4EE4\u4F7F\u7528","children":[]},{"level":2,"title":"\u4E0A\u4F20 .class \u6587\u4EF6\u5230\u670D\u52A1\u5668\u7684\u6280\u5DE7","slug":"\u4E0A\u4F20-class-\u6587\u4EF6\u5230\u670D\u52A1\u5668\u7684\u6280\u5DE7","link":"#\u4E0A\u4F20-class-\u6587\u4EF6\u5230\u670D\u52A1\u5668\u7684\u6280\u5DE7","children":[]},{"level":2,"title":"retransform \u7684\u9650\u5236","slug":"retransform-\u7684\u9650\u5236","link":"#retransform-\u7684\u9650\u5236","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/retransform.md","version":"4.3.5"}');export{r as data}; diff --git a/assets/retransform.html.b4cdf8c0.js b/assets/retransform.html.cee06ec8.js similarity index 91% rename from assets/retransform.html.b4cdf8c0.js rename to assets/retransform.html.cee06ec8.js index 0f48d47c2..bfe7dfcf6 100644 --- a/assets/retransform.html.b4cdf8c0.js +++ b/assets/retransform.html.cee06ec8.js @@ -1,4 +1,4 @@ -import{_ as t,o as r,c as l,a as s,b as e,e as n,d as o,r as c}from"./app.524ecf5c.js";const p={},i=s("h1",{id:"retransform",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#retransform","aria-hidden":"true"},"#"),n(" retransform")],-1),u={href:"https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=command-mc-retransform",target:"_blank",rel:"noopener noreferrer"},d=s("code",null,"mc-retransform",-1),m=n("\u5728\u7EBF\u6559\u7A0B"),k=s("div",{class:"custom-container tip"},[s("p",{class:"custom-container-title"},"\u63D0\u793A"),s("p",null,[n("\u52A0\u8F7D\u5916\u90E8\u7684"),s("code",null,".class"),n("\u6587\u4EF6\uFF0Cretransform jvm \u5DF2\u52A0\u8F7D\u7684\u7C7B\u3002")])],-1),v=n("\u53C2\u8003\uFF1A"),h={href:"https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/Instrumentation.html#retransformClasses-java.lang.Class...-",target:"_blank",rel:"noopener noreferrer"},b=n("Instrumentation#retransformClasses"),f=o(`

    \u4F7F\u7528\u53C2\u8003

       retransform /tmp/Test.class
    +import{_ as e,o as t,c as r,a as s,b as l,e as n,d as o,r as c}from"./app.e2427bec.js";const p={},i=s("h1",{id:"retransform",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#retransform","aria-hidden":"true"},"#"),n(" retransform")],-1),u=s("div",{class:"custom-container tip"},[s("p",{class:"custom-container-title"},"\u63D0\u793A"),s("p",null,[n("\u52A0\u8F7D\u5916\u90E8\u7684"),s("code",null,".class"),n("\u6587\u4EF6\uFF0Cretransform jvm \u5DF2\u52A0\u8F7D\u7684\u7C7B\u3002")])],-1),d=n("\u53C2\u8003\uFF1A"),m={href:"https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/Instrumentation.html#retransformClasses-java.lang.Class...-",target:"_blank",rel:"noopener noreferrer"},v=n("Instrumentation#retransformClasses"),k=o(`

    \u4F7F\u7528\u53C2\u8003

       retransform /tmp/Test.class
        retransform -l
        retransform -d 1                    # delete retransform entry
        retransform --deleteAll             # delete all retransform entries
    @@ -47,4 +47,4 @@ retransform /tmp/com/example/demo/arthas/user/UserController.class
             }
         }
     }
    -
    `,30);function g(x,y){const a=c("ExternalLinkIcon");return r(),l("div",null,[i,s("p",null,[s("a",u,[d,m,e(a)])]),k,s("p",null,[v,s("a",h,[b,e(a)])]),f])}const w=t(p,[["render",g],["__file","retransform.html.vue"]]);export{w as default}; +
    `,30);function b(h,f){const a=c("ExternalLinkIcon");return t(),r("div",null,[i,u,s("p",null,[d,s("a",m,[v,l(a)])]),k])}const x=e(p,[["render",b],["__file","retransform.html.vue"]]);export{x as default}; diff --git a/assets/save-log.html.02816c57.js b/assets/save-log.html.02816c57.js deleted file mode 100644 index 30c38c823..000000000 --- a/assets/save-log.html.02816c57.js +++ /dev/null @@ -1,6 +0,0 @@ -import{_ as c,o as l,c as r,a as e,b as a,w as i,e as s,d,r as n}from"./app.524ecf5c.js";const u={},p=e("h1",{id:"\u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7","aria-hidden":"true"},"#"),s(" \u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7")],-1),h={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=save-log",target:"_blank",rel:"noopener noreferrer"},_=e("code",null,"\u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7",-1),m=s("\u5728\u7EBF\u6559\u7A0B"),v=d(`

    \u63D0\u793A

    \u5C06\u547D\u4EE4\u7684\u7ED3\u679C\u5B8C\u6574\u4FDD\u5B58\u5728\u65E5\u5FD7\u6587\u4EF6\u4E2D\uFF0C\u4FBF\u4E8E\u540E\u7EED\u8FDB\u884C\u5206\u6790

    • \u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0C\u8BE5\u529F\u80FD\u662F\u5173\u95ED\u7684\uFF0C\u5982\u679C\u9700\u8981\u5F00\u542F\uFF0C\u8BF7\u6267\u884C\u4EE5\u4E0B\u547D\u4EE4\uFF1A
    $ options save-result true
    - NAME         BEFORE-VALUE  AFTER-VALUE
    -----------------------------------------
    - save-result  false         true
    -Affect(row-cnt:1) cost in 3 ms.
    -

    \u770B\u5230\u4E0A\u9762\u7684\u8F93\u51FA\uFF0C\u5373\u8868\u793A\u6210\u529F\u5F00\u542F\u8BE5\u529F\u80FD\uFF1B

    • \u65E5\u5FD7\u6587\u4EF6\u8DEF\u5F84

    \u7ED3\u679C\u4F1A\u5F02\u6B65\u4FDD\u5B58\u5728\uFF1A{user.home}/logs/arthas-cache/result.log\uFF0C\u8BF7\u5B9A\u671F\u8FDB\u884C\u6E05\u7406\uFF0C\u4EE5\u514D\u5360\u636E\u78C1\u76D8\u7A7A\u95F4

    \u4F7F\u7528 Arthas \u7684\u5F02\u6B65\u540E\u53F0\u4EFB\u52A1\u5C06\u7ED3\u679C\u5B58\u65E5\u5FD7\u6587\u4EF6

    `,7),b=s("\u53C2\u8003\uFF1A"),f=s("async");function k(g,x){const t=n("ExternalLinkIcon"),o=n("RouterLink");return l(),r("div",null,[p,e("p",null,[e("a",h,[_,m,a(t)])]),v,e("p",null,[b,a(o,{to:"/doc/async.html"},{default:i(()=>[f]),_:1})])])}const L=c(u,[["render",k],["__file","save-log.html.vue"]]);export{L as default}; diff --git a/assets/save-log.html.19fe32a1.js b/assets/save-log.html.19fe32a1.js deleted file mode 100644 index 2592f30ca..000000000 --- a/assets/save-log.html.19fe32a1.js +++ /dev/null @@ -1,6 +0,0 @@ -import{_ as l,o as c,c as i,a as e,b as n,w as r,e as s,d as u,r as o}from"./app.524ecf5c.js";const d={},p=e("h1",{id:"log-command-outputs",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#log-command-outputs","aria-hidden":"true"},"#"),s(" Log command outputs")],-1),h={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=save-log",target:"_blank",rel:"noopener noreferrer"},m=e("code",null,"Log command outputs",-1),_=s(" online tutorial"),v=u(`

    TIP

    Log command outputs for later analysis

    • By default, this behavior is turned off. To enable it, execute the command below:

      $ 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

      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

    `,3),b=s("Reference: "),f=s("async");function g(k,x){const a=o("ExternalLinkIcon"),t=o("RouterLink");return c(),i("div",null,[p,e("p",null,[e("a",h,[m,_,n(a)])]),v,e("p",null,[b,n(t,{to:"/en/doc/async.html"},{default:r(()=>[f]),_:1})])])}const L=l(d,[["render",g],["__file","save-log.html.vue"]]);export{L as default}; diff --git a/assets/save-log.html.d56e7726.js b/assets/save-log.html.6b300b97.js similarity index 84% rename from assets/save-log.html.d56e7726.js rename to assets/save-log.html.6b300b97.js index 2ba4dae8b..432b9f077 100644 --- a/assets/save-log.html.d56e7726.js +++ b/assets/save-log.html.6b300b97.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-8e632816","path":"/doc/save-log.html","title":"\u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528 Arthas \u7684\u5F02\u6B65\u540E\u53F0\u4EFB\u52A1\u5C06\u7ED3\u679C\u5B58\u65E5\u5FD7\u6587\u4EF6","slug":"\u4F7F\u7528-arthas-\u7684\u5F02\u6B65\u540E\u53F0\u4EFB\u52A1\u5C06\u7ED3\u679C\u5B58\u65E5\u5FD7\u6587\u4EF6","link":"#\u4F7F\u7528-arthas-\u7684\u5F02\u6B65\u540E\u53F0\u4EFB\u52A1\u5C06\u7ED3\u679C\u5B58\u65E5\u5FD7\u6587\u4EF6","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/save-log.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-8e632816","path":"/doc/save-log.html","title":"\u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528 Arthas \u7684\u5F02\u6B65\u540E\u53F0\u4EFB\u52A1\u5C06\u7ED3\u679C\u5B58\u65E5\u5FD7\u6587\u4EF6","slug":"\u4F7F\u7528-arthas-\u7684\u5F02\u6B65\u540E\u53F0\u4EFB\u52A1\u5C06\u7ED3\u679C\u5B58\u65E5\u5FD7\u6587\u4EF6","link":"#\u4F7F\u7528-arthas-\u7684\u5F02\u6B65\u540E\u53F0\u4EFB\u52A1\u5C06\u7ED3\u679C\u5B58\u65E5\u5FD7\u6587\u4EF6","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/save-log.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/save-log.html.aaad8817.js b/assets/save-log.html.aaad8817.js new file mode 100644 index 000000000..1999096e8 --- /dev/null +++ b/assets/save-log.html.aaad8817.js @@ -0,0 +1,6 @@ +import{_ as a,o as n,c as o,a as t,b as l,w as c,d as i,e,r}from"./app.e2427bec.js";const u={},d=i(`

    Log command outputs

    TIP

    Log command outputs for later analysis

    • By default, this behavior is turned off. To enable it, execute the command below:

      $ 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

      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

    `,4),p=e("Reference: "),h=e("async");function m(v,b){const s=r("RouterLink");return n(),o("div",null,[d,t("p",null,[p,l(s,{to:"/en/doc/async.html"},{default:c(()=>[h]),_:1})])])}const _=a(u,[["render",m],["__file","save-log.html.vue"]]);export{_ as default}; diff --git a/assets/save-log.html.dcea4094.js b/assets/save-log.html.f871291e.js similarity index 77% rename from assets/save-log.html.dcea4094.js rename to assets/save-log.html.f871291e.js index fce851f58..3be6d4e1f 100644 --- a/assets/save-log.html.dcea4094.js +++ b/assets/save-log.html.f871291e.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-50ef0261","path":"/en/doc/save-log.html","title":"Log command outputs","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Use asynchronous job to log","slug":"use-asynchronous-job-to-log","link":"#use-asynchronous-job-to-log","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/save-log.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-50ef0261","path":"/en/doc/save-log.html","title":"Log command outputs","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Use asynchronous job to log","slug":"use-asynchronous-job-to-log","link":"#use-asynchronous-job-to-log","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/save-log.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/save-log.html.fea95237.js b/assets/save-log.html.fea95237.js new file mode 100644 index 000000000..a83ec13fd --- /dev/null +++ b/assets/save-log.html.fea95237.js @@ -0,0 +1,6 @@ +import{_ as a,o as n,c as t,a as o,b as c,w as l,d as i,e,r}from"./app.e2427bec.js";const d={},u=i(`

    \u6267\u884C\u7ED3\u679C\u5B58\u65E5\u5FD7

    \u63D0\u793A

    \u5C06\u547D\u4EE4\u7684\u7ED3\u679C\u5B8C\u6574\u4FDD\u5B58\u5728\u65E5\u5FD7\u6587\u4EF6\u4E2D\uFF0C\u4FBF\u4E8E\u540E\u7EED\u8FDB\u884C\u5206\u6790

    • \u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0C\u8BE5\u529F\u80FD\u662F\u5173\u95ED\u7684\uFF0C\u5982\u679C\u9700\u8981\u5F00\u542F\uFF0C\u8BF7\u6267\u884C\u4EE5\u4E0B\u547D\u4EE4\uFF1A
    $ options save-result true
    + NAME         BEFORE-VALUE  AFTER-VALUE
    +----------------------------------------
    + save-result  false         true
    +Affect(row-cnt:1) cost in 3 ms.
    +

    \u770B\u5230\u4E0A\u9762\u7684\u8F93\u51FA\uFF0C\u5373\u8868\u793A\u6210\u529F\u5F00\u542F\u8BE5\u529F\u80FD\uFF1B

    • \u65E5\u5FD7\u6587\u4EF6\u8DEF\u5F84

    \u7ED3\u679C\u4F1A\u5F02\u6B65\u4FDD\u5B58\u5728\uFF1A{user.home}/logs/arthas-cache/result.log\uFF0C\u8BF7\u5B9A\u671F\u8FDB\u884C\u6E05\u7406\uFF0C\u4EE5\u514D\u5360\u636E\u78C1\u76D8\u7A7A\u95F4

    \u4F7F\u7528 Arthas \u7684\u5F02\u6B65\u540E\u53F0\u4EFB\u52A1\u5C06\u7ED3\u679C\u5B58\u65E5\u5FD7\u6587\u4EF6

    `,8),p=e("\u53C2\u8003\uFF1A"),h=e("async");function v(m,_){const s=r("RouterLink");return n(),t("div",null,[u,o("p",null,[p,c(s,{to:"/doc/async.html"},{default:l(()=>[h]),_:1})])])}const f=a(d,[["render",v],["__file","save-log.html.vue"]]);export{f as default}; diff --git a/assets/sc.html.98f7cc34.js b/assets/sc.html.049f2400.js similarity index 60% rename from assets/sc.html.98f7cc34.js rename to assets/sc.html.049f2400.js index 8c6574aac..59a8b0b33 100644 --- a/assets/sc.html.98f7cc34.js +++ b/assets/sc.html.049f2400.js @@ -1,4 +1,4 @@ -import{_ as n,o as t,c as i,a as e,b as l,e as s,d,r as c}from"./app.524ecf5c.js";const o={},r=e("h1",{id:"sc",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#sc","aria-hidden":"true"},"#"),s(" sc")],-1),m={href:"https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=command-sc",target:"_blank",rel:"noopener noreferrer"},p=e("code",null,"sc",-1),u=s(" online tutorial"),v=d(`

    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]\u3001[E]\u3001[f] and [x:].

    Supported Options

    NameSpecification
    class-patternpattern for the class name
    method-patternpattern 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)
    [cs <arg>]Specify the return value of class's ClassLoader#toString(). Long format is[classLoaderStr <arg>]

    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

      $ sc demo.*
      +import{_ as e,o as s,c as a,d as n}from"./app.e2427bec.js";const t={},i=n(`

      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]\u3001[E]\u3001[f] and [x:].

      Supported Options

      NameSpecification
      class-patternpattern for the class name
      method-patternpattern 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)
      [cs <arg>]Specify the return value of class's ClassLoader#toString(). Long format is[classLoaderStr <arg>]

      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

        $ sc demo.*
         demo.MathGame
         Affect(row-cnt:1) cost in 55 ms.
         
      • View class details

        $ sc -d demo.MathGame
        @@ -62,4 +62,4 @@ demo.MathGame
         demo.MyBar
         demo.MyFoo
         Affect(row-cnt:3) cost in 56 ms.
        -
      `,8);function b(h,f){const a=c("ExternalLinkIcon");return t(),i("div",null,[r,e("p",null,[e("a",m,[p,u,l(a)])]),v])}const k=n(o,[["render",b],["__file","sc.html.vue"]]);export{k as default}; +
    `,9),l=[i];function d(c,o){return s(),a("div",null,l)}const m=e(t,[["render",d],["__file","sc.html.vue"]]);export{m as default}; diff --git a/assets/sc.html.bdfbd20c.js b/assets/sc.html.13503b4f.js similarity index 75% rename from assets/sc.html.bdfbd20c.js rename to assets/sc.html.13503b4f.js index 91e0652a2..e78bbb659 100644 --- a/assets/sc.html.bdfbd20c.js +++ b/assets/sc.html.13503b4f.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-28022d85","path":"/en/doc/sc.html","title":"sc","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Supported Options","slug":"supported-options","link":"#supported-options","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/sc.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-28022d85","path":"/en/doc/sc.html","title":"sc","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Supported Options","slug":"supported-options","link":"#supported-options","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/sc.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/sc.html.27f757b3.js b/assets/sc.html.7cdf140e.js similarity index 77% rename from assets/sc.html.27f757b3.js rename to assets/sc.html.7cdf140e.js index 5943ae740..522d57867 100644 --- a/assets/sc.html.27f757b3.js +++ b/assets/sc.html.7cdf140e.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-1fc55619","path":"/doc/sc.html","title":"sc","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/sc.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-1fc55619","path":"/doc/sc.html","title":"sc","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/sc.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/sc.html.3b5ef46c.js b/assets/sc.html.982b84c0.js similarity index 56% rename from assets/sc.html.3b5ef46c.js rename to assets/sc.html.982b84c0.js index 6d04aaff9..cf31e29d9 100644 --- a/assets/sc.html.3b5ef46c.js +++ b/assets/sc.html.982b84c0.js @@ -1,4 +1,4 @@ -import{_ as n,o as l,c as i,a as s,b as t,e,d,r as c}from"./app.524ecf5c.js";const o={},r=s("h1",{id:"sc",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#sc","aria-hidden":"true"},"#"),e(" sc")],-1),m={href:"https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=command-sc",target:"_blank",rel:"noopener noreferrer"},v=s("code",null,"sc",-1),p=e("\u5728\u7EBF\u6559\u7A0B"),u=d(`

    \u63D0\u793A

    \u67E5\u770B JVM \u5DF2\u52A0\u8F7D\u7684\u7C7B\u4FE1\u606F

    \u201CSearch-Class\u201D \u7684\u7B80\u5199\uFF0C\u8FD9\u4E2A\u547D\u4EE4\u80FD\u641C\u7D22\u51FA\u6240\u6709\u5DF2\u7ECF\u52A0\u8F7D\u5230 JVM \u4E2D\u7684 Class \u4FE1\u606F\uFF0C\u8FD9\u4E2A\u547D\u4EE4\u652F\u6301\u7684\u53C2\u6570\u6709 [d]\u3001[E]\u3001[f] \u548C [x:]\u3002

    \u53C2\u6570\u8BF4\u660E

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    class-pattern\u7C7B\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    method-pattern\u65B9\u6CD5\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    [d]\u8F93\u51FA\u5F53\u524D\u7C7B\u7684\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u5305\u62EC\u8FD9\u4E2A\u7C7B\u6240\u52A0\u8F7D\u7684\u539F\u59CB\u6587\u4EF6\u6765\u6E90\u3001\u7C7B\u7684\u58F0\u660E\u3001\u52A0\u8F7D\u7684 ClassLoader \u7B49\u8BE6\u7EC6\u4FE1\u606F\u3002
    \u5982\u679C\u4E00\u4E2A\u7C7B\u88AB\u591A\u4E2A ClassLoader \u6240\u52A0\u8F7D\uFF0C\u5219\u4F1A\u51FA\u73B0\u591A\u6B21
    [E]\u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u4E3A\u901A\u914D\u7B26\u5339\u914D
    [f]\u8F93\u51FA\u5F53\u524D\u7C7B\u7684\u6210\u5458\u53D8\u91CF\u4FE1\u606F\uFF08\u9700\u8981\u914D\u5408\u53C2\u6570-d \u4E00\u8D77\u4F7F\u7528\uFF09
    [x:]\u6307\u5B9A\u8F93\u51FA\u9759\u6001\u53D8\u91CF\u65F6\u5C5E\u6027\u7684\u904D\u5386\u6DF1\u5EA6\uFF0C\u9ED8\u8BA4\u4E3A 0\uFF0C\u5373\u76F4\u63A5\u4F7F\u7528 toString \u8F93\u51FA
    [c:]\u6307\u5B9A class \u7684 ClassLoader \u7684 hashcode
    [classLoaderClass:]\u6307\u5B9A\u6267\u884C\u8868\u8FBE\u5F0F\u7684 ClassLoader \u7684 class name
    [n:]\u5177\u6709\u8BE6\u7EC6\u4FE1\u606F\u7684\u5339\u914D\u7C7B\u7684\u6700\u5927\u6570\u91CF\uFF08\u9ED8\u8BA4\u4E3A 100\uFF09
    [cs <arg>]\u6307\u5B9A class \u7684 ClassLoader#toString() \u8FD4\u56DE\u503C\u3002\u957F\u683C\u5F0F[classLoaderStr <arg>]

    \u63D0\u793A

    class-pattern \u652F\u6301\u5168\u9650\u5B9A\u540D\uFF0C\u5982 com.taobao.test.AAA\uFF0C\u4E5F\u652F\u6301 com/taobao/test/AAA \u8FD9\u6837\u7684\u683C\u5F0F\uFF0C\u8FD9\u6837\uFF0C\u6211\u4EEC\u4ECE\u5F02\u5E38\u5806\u6808\u91CC\u9762\u628A\u7C7B\u540D\u62F7\u8D1D\u8FC7\u6765\u7684\u65F6\u5019\uFF0C\u4E0D\u9700\u8981\u5728\u624B\u52A8\u628A/\u66FF\u6362\u4E3A.\u5566\u3002

    \u63D0\u793A

    sc \u9ED8\u8BA4\u5F00\u542F\u4E86\u5B50\u7C7B\u5339\u914D\u529F\u80FD\uFF0C\u4E5F\u5C31\u662F\u8BF4\u6240\u6709\u5F53\u524D\u7C7B\u7684\u5B50\u7C7B\u4E5F\u4F1A\u88AB\u641C\u7D22\u51FA\u6765\uFF0C\u60F3\u8981\u7CBE\u786E\u7684\u5339\u914D\uFF0C\u8BF7\u6253\u5F00options disable-sub-class true\u5F00\u5173

    \u4F7F\u7528\u53C2\u8003

    • \u6A21\u7CCA\u641C\u7D22

      $ sc demo.*
      +import{_ as s,o as e,c as a,d as n}from"./app.e2427bec.js";const i={},l=n(`

      sc

      \u63D0\u793A

      \u67E5\u770B JVM \u5DF2\u52A0\u8F7D\u7684\u7C7B\u4FE1\u606F

      \u201CSearch-Class\u201D \u7684\u7B80\u5199\uFF0C\u8FD9\u4E2A\u547D\u4EE4\u80FD\u641C\u7D22\u51FA\u6240\u6709\u5DF2\u7ECF\u52A0\u8F7D\u5230 JVM \u4E2D\u7684 Class \u4FE1\u606F\uFF0C\u8FD9\u4E2A\u547D\u4EE4\u652F\u6301\u7684\u53C2\u6570\u6709 [d]\u3001[E]\u3001[f] \u548C [x:]\u3002

      \u53C2\u6570\u8BF4\u660E

      \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
      class-pattern\u7C7B\u540D\u8868\u8FBE\u5F0F\u5339\u914D
      method-pattern\u65B9\u6CD5\u540D\u8868\u8FBE\u5F0F\u5339\u914D
      [d]\u8F93\u51FA\u5F53\u524D\u7C7B\u7684\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u5305\u62EC\u8FD9\u4E2A\u7C7B\u6240\u52A0\u8F7D\u7684\u539F\u59CB\u6587\u4EF6\u6765\u6E90\u3001\u7C7B\u7684\u58F0\u660E\u3001\u52A0\u8F7D\u7684 ClassLoader \u7B49\u8BE6\u7EC6\u4FE1\u606F\u3002
      \u5982\u679C\u4E00\u4E2A\u7C7B\u88AB\u591A\u4E2A ClassLoader \u6240\u52A0\u8F7D\uFF0C\u5219\u4F1A\u51FA\u73B0\u591A\u6B21
      [E]\u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u4E3A\u901A\u914D\u7B26\u5339\u914D
      [f]\u8F93\u51FA\u5F53\u524D\u7C7B\u7684\u6210\u5458\u53D8\u91CF\u4FE1\u606F\uFF08\u9700\u8981\u914D\u5408\u53C2\u6570-d \u4E00\u8D77\u4F7F\u7528\uFF09
      [x:]\u6307\u5B9A\u8F93\u51FA\u9759\u6001\u53D8\u91CF\u65F6\u5C5E\u6027\u7684\u904D\u5386\u6DF1\u5EA6\uFF0C\u9ED8\u8BA4\u4E3A 0\uFF0C\u5373\u76F4\u63A5\u4F7F\u7528 toString \u8F93\u51FA
      [c:]\u6307\u5B9A class \u7684 ClassLoader \u7684 hashcode
      [classLoaderClass:]\u6307\u5B9A\u6267\u884C\u8868\u8FBE\u5F0F\u7684 ClassLoader \u7684 class name
      [n:]\u5177\u6709\u8BE6\u7EC6\u4FE1\u606F\u7684\u5339\u914D\u7C7B\u7684\u6700\u5927\u6570\u91CF\uFF08\u9ED8\u8BA4\u4E3A 100\uFF09
      [cs <arg>]\u6307\u5B9A class \u7684 ClassLoader#toString() \u8FD4\u56DE\u503C\u3002\u957F\u683C\u5F0F[classLoaderStr <arg>]

      \u63D0\u793A

      class-pattern \u652F\u6301\u5168\u9650\u5B9A\u540D\uFF0C\u5982 com.taobao.test.AAA\uFF0C\u4E5F\u652F\u6301 com/taobao/test/AAA \u8FD9\u6837\u7684\u683C\u5F0F\uFF0C\u8FD9\u6837\uFF0C\u6211\u4EEC\u4ECE\u5F02\u5E38\u5806\u6808\u91CC\u9762\u628A\u7C7B\u540D\u62F7\u8D1D\u8FC7\u6765\u7684\u65F6\u5019\uFF0C\u4E0D\u9700\u8981\u5728\u624B\u52A8\u628A/\u66FF\u6362\u4E3A.\u5566\u3002

      \u63D0\u793A

      sc \u9ED8\u8BA4\u5F00\u542F\u4E86\u5B50\u7C7B\u5339\u914D\u529F\u80FD\uFF0C\u4E5F\u5C31\u662F\u8BF4\u6240\u6709\u5F53\u524D\u7C7B\u7684\u5B50\u7C7B\u4E5F\u4F1A\u88AB\u641C\u7D22\u51FA\u6765\uFF0C\u60F3\u8981\u7CBE\u786E\u7684\u5339\u914D\uFF0C\u8BF7\u6253\u5F00options disable-sub-class true\u5F00\u5173

      \u4F7F\u7528\u53C2\u8003

      • \u6A21\u7CCA\u641C\u7D22

        $ sc demo.*
         demo.MathGame
         Affect(row-cnt:1) cost in 55 ms.
         
      • \u6253\u5370\u7C7B\u7684\u8BE6\u7EC6\u4FE1\u606F

        $ sc -d demo.MathGame
        @@ -62,4 +62,4 @@ demo.MathGame
         demo.MyBar
         demo.MyFoo
         Affect(row-cnt:3) cost in 56 ms.
        -
      `,8);function b(h,g){const a=c("ExternalLinkIcon");return l(),i("div",null,[r,s("p",null,[s("a",m,[v,p,t(a)])]),u])}const k=n(o,[["render",b],["__file","sc.html.vue"]]);export{k as default}; +
    `,9),t=[l];function d(c,o){return e(),a("div",null,t)}const v=s(i,[["render",d],["__file","sc.html.vue"]]);export{v as default}; diff --git a/assets/session.html.a2ad9e80.js b/assets/session.html.0168cb9d.js similarity index 72% rename from assets/session.html.a2ad9e80.js rename to assets/session.html.0168cb9d.js index c5a166b72..1241c4ae6 100644 --- a/assets/session.html.a2ad9e80.js +++ b/assets/session.html.0168cb9d.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-3891b473","path":"/doc/session.html","title":"session","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/session.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-3891b473","path":"/doc/session.html","title":"session","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/session.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/session.html.a83717c2.js b/assets/session.html.35f7a4aa.js similarity index 95% rename from assets/session.html.a83717c2.js rename to assets/session.html.35f7a4aa.js index 516b584a9..5f3e90881 100644 --- a/assets/session.html.a83717c2.js +++ b/assets/session.html.35f7a4aa.js @@ -1,4 +1,4 @@ -import{_ as e,o as s,c as n,d as i}from"./app.524ecf5c.js";const a={},d=i(`

    session

    \u67E5\u770B\u5F53\u524D\u4F1A\u8BDD\u7684\u4FE1\u606F\uFF0C\u663E\u793A\u5F53\u524D\u7ED1\u5B9A\u7684 pid \u4EE5\u53CA\u4F1A\u8BDD id\u3002

    \u63D0\u793A

    \u5982\u679C\u914D\u7F6E\u4E86 tunnel server\uFF0C\u4F1A\u8FFD\u52A0\u6253\u5370 \u4EE3\u7406 id\u3001tunnel \u670D\u52A1\u5668\u7684 url \u4EE5\u53CA\u8FDE\u63A5\u72B6\u6001\u3002

    \u5982\u679C\u4F7F\u7528\u4E86 staturl \u505A\u7EDF\u8BA1\uFF0C\u4F1A\u8FFD\u52A0\u663E\u793A statUrl \u5730\u5740\u3002

    \u4F7F\u7528\u53C2\u8003

    $ session
    +import{_ as e,o as s,c as n,d as i}from"./app.e2427bec.js";const a={},d=i(`

    session

    \u67E5\u770B\u5F53\u524D\u4F1A\u8BDD\u7684\u4FE1\u606F\uFF0C\u663E\u793A\u5F53\u524D\u7ED1\u5B9A\u7684 pid \u4EE5\u53CA\u4F1A\u8BDD id\u3002

    \u63D0\u793A

    \u5982\u679C\u914D\u7F6E\u4E86 tunnel server\uFF0C\u4F1A\u8FFD\u52A0\u6253\u5370 \u4EE3\u7406 id\u3001tunnel \u670D\u52A1\u5668\u7684 url \u4EE5\u53CA\u8FDE\u63A5\u72B6\u6001\u3002

    \u5982\u679C\u4F7F\u7528\u4E86 staturl \u505A\u7EDF\u8BA1\uFF0C\u4F1A\u8FFD\u52A0\u663E\u793A statUrl \u5730\u5740\u3002

    \u4F7F\u7528\u53C2\u8003

    $ session
       Name        Value
     --------------------------------------------------
      JAVA_PID    14584
    diff --git a/assets/session.html.01d5cdb0.js b/assets/session.html.602a88b1.js
    similarity index 77%
    rename from assets/session.html.01d5cdb0.js
    rename to assets/session.html.602a88b1.js
    index ac428e4bf..04ee1698f 100644
    --- a/assets/session.html.01d5cdb0.js
    +++ b/assets/session.html.602a88b1.js
    @@ -1 +1 @@
    -const e=JSON.parse('{"key":"v-dfe2bef2","path":"/en/doc/session.html","title":"session","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/session.md","version":"4.3.3"}');export{e as data};
    +const e=JSON.parse('{"key":"v-dfe2bef2","path":"/en/doc/session.html","title":"session","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/session.md","version":"4.3.5"}');export{e as data};
    diff --git a/assets/session.html.aac6a451.js b/assets/session.html.fa0a110f.js
    similarity index 94%
    rename from assets/session.html.aac6a451.js
    rename to assets/session.html.fa0a110f.js
    index 99fe16458..89b379ad0 100644
    --- a/assets/session.html.aac6a451.js
    +++ b/assets/session.html.fa0a110f.js
    @@ -1,4 +1,4 @@
    -import{_ as e,o as s,c as n,d as a}from"./app.524ecf5c.js";const i={},t=a(`

    session

    examines the current session,show the current binded processId and the sessionId.

    TIP

    if exits tunnel server\uFF0Cit will also show agentId\u3001tunnelServerUrl\u3001connected status.

    if exits statUrl\uFF0Cit will also show statUrl.

    Usage

    $ session
    +import{_ as e,o as s,c as n,d as a}from"./app.e2427bec.js";const i={},t=a(`

    session

    examines the current session,show the current binded processId and the sessionId.

    TIP

    if exits tunnel server\uFF0Cit will also show agentId\u3001tunnelServerUrl\u3001connected status.

    if exits statUrl\uFF0Cit will also show statUrl.

    Usage

    $ session
       Name        Value
     --------------------------------------------------
      JAVA_PID    14584
    diff --git a/assets/sm.html.8bd93288.js b/assets/sm.html.552b6b44.js
    similarity index 65%
    rename from assets/sm.html.8bd93288.js
    rename to assets/sm.html.552b6b44.js
    index 916bc6bcc..e6aeaeb4a 100644
    --- a/assets/sm.html.8bd93288.js
    +++ b/assets/sm.html.552b6b44.js
    @@ -1,4 +1,4 @@
    -import{_ as e,o as t,c as l,a,b as i,e as n,d as r,r as o}from"./app.524ecf5c.js";const d={},c=a("h1",{id:"sm",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#sm","aria-hidden":"true"},"#"),n(" sm")],-1),p={href:"https://arthas.aliyun.com/doc/arthas-tutorials?language=cn&id=command-sm",target:"_blank",rel:"noopener noreferrer"},g=a("code",null,"sm",-1),v=n("\u5728\u7EBF\u6559\u7A0B"),m=r(`

    \u63D0\u793A

    \u67E5\u770B\u5DF2\u52A0\u8F7D\u7C7B\u7684\u65B9\u6CD5\u4FE1\u606F

    \u201CSearch-Method\u201D \u7684\u7B80\u5199\uFF0C\u8FD9\u4E2A\u547D\u4EE4\u80FD\u641C\u7D22\u51FA\u6240\u6709\u5DF2\u7ECF\u52A0\u8F7D\u4E86 Class \u4FE1\u606F\u7684\u65B9\u6CD5\u4FE1\u606F\u3002

    sm \u547D\u4EE4\u53EA\u80FD\u770B\u5230\u7531\u5F53\u524D\u7C7B\u6240\u58F0\u660E (declaring) \u7684\u65B9\u6CD5\uFF0C\u7236\u7C7B\u5219\u65E0\u6CD5\u770B\u5230\u3002

    \u53C2\u6570\u8BF4\u660E

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    class-pattern\u7C7B\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    method-pattern\u65B9\u6CD5\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    [d]\u5C55\u793A\u6BCF\u4E2A\u65B9\u6CD5\u7684\u8BE6\u7EC6\u4FE1\u606F
    [E]\u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u4E3A\u901A\u914D\u7B26\u5339\u914D
    [c:]\u6307\u5B9A class \u7684 ClassLoader \u7684 hashcode
    [classLoaderClass:]\u6307\u5B9A\u6267\u884C\u8868\u8FBE\u5F0F\u7684 ClassLoader \u7684 class name
    [n:]\u5177\u6709\u8BE6\u7EC6\u4FE1\u606F\u7684\u5339\u914D\u7C7B\u7684\u6700\u5927\u6570\u91CF\uFF08\u9ED8\u8BA4\u4E3A 100\uFF09

    \u4F7F\u7528\u53C2\u8003

    $ sm java.lang.String
    +import{_ as a,o as n,c as s,d as t}from"./app.e2427bec.js";const e={},i=t(`

    sm

    \u63D0\u793A

    \u67E5\u770B\u5DF2\u52A0\u8F7D\u7C7B\u7684\u65B9\u6CD5\u4FE1\u606F

    \u201CSearch-Method\u201D \u7684\u7B80\u5199\uFF0C\u8FD9\u4E2A\u547D\u4EE4\u80FD\u641C\u7D22\u51FA\u6240\u6709\u5DF2\u7ECF\u52A0\u8F7D\u4E86 Class \u4FE1\u606F\u7684\u65B9\u6CD5\u4FE1\u606F\u3002

    sm \u547D\u4EE4\u53EA\u80FD\u770B\u5230\u7531\u5F53\u524D\u7C7B\u6240\u58F0\u660E (declaring) \u7684\u65B9\u6CD5\uFF0C\u7236\u7C7B\u5219\u65E0\u6CD5\u770B\u5230\u3002

    \u53C2\u6570\u8BF4\u660E

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    class-pattern\u7C7B\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    method-pattern\u65B9\u6CD5\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    [d]\u5C55\u793A\u6BCF\u4E2A\u65B9\u6CD5\u7684\u8BE6\u7EC6\u4FE1\u606F
    [E]\u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u4E3A\u901A\u914D\u7B26\u5339\u914D
    [c:]\u6307\u5B9A class \u7684 ClassLoader \u7684 hashcode
    [classLoaderClass:]\u6307\u5B9A\u6267\u884C\u8868\u8FBE\u5F0F\u7684 ClassLoader \u7684 class name
    [n:]\u5177\u6709\u8BE6\u7EC6\u4FE1\u606F\u7684\u5339\u914D\u7C7B\u7684\u6700\u5927\u6570\u91CF\uFF08\u9ED8\u8BA4\u4E3A 100\uFF09

    \u4F7F\u7528\u53C2\u8003

    $ sm java.lang.String
     java.lang.String-><init>
     java.lang.String->equals
     java.lang.String->toString
    @@ -54,4 +54,4 @@ Affect(row-cnt:44(row-cnt:1) cost in 3 ms.
    -
    `,8);function u(b,h){const s=o("ExternalLinkIcon");return t(),l("div",null,[c,a("p",null,[a("a",p,[g,v,i(s)])]),m])}const S=e(d,[["render",u],["__file","sm.html.vue"]]);export{S as default}; +
    `,9),l=[i];function r(o,d){return n(),s("div",null,l)}const p=a(e,[["render",r],["__file","sm.html.vue"]]);export{p as default}; diff --git a/assets/sm.html.599ec454.js b/assets/sm.html.a226714f.js similarity index 80% rename from assets/sm.html.599ec454.js rename to assets/sm.html.a226714f.js index b25121e02..1a0cc0ebf 100644 --- a/assets/sm.html.599ec454.js +++ b/assets/sm.html.a226714f.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-3912a3bb","path":"/en/doc/sm.html","title":"sm","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Options","slug":"options","link":"#options","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/sm.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-3912a3bb","path":"/en/doc/sm.html","title":"sm","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Options","slug":"options","link":"#options","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/sm.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/sm.html.a2e231e6.js b/assets/sm.html.fd569c95.js similarity index 69% rename from assets/sm.html.a2e231e6.js rename to assets/sm.html.fd569c95.js index ae3168a7d..ff8c3ab65 100644 --- a/assets/sm.html.a2e231e6.js +++ b/assets/sm.html.fd569c95.js @@ -1,4 +1,4 @@ -import{_ as s,o as t,c as i,a,b as l,e as n,d as r,r as o}from"./app.524ecf5c.js";const d={},c=a("h1",{id:"sm",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#sm","aria-hidden":"true"},"#"),n(" sm")],-1),p={href:"https://arthas.aliyun.com/doc/arthas-tutorials?language=en&id=command-sm",target:"_blank",rel:"noopener noreferrer"},g=a("code",null,"sm",-1),v=n(" online tutorial"),m=r(`

    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

    NameSpecification
    class-patternpattern for class name
    method-patternpattern 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

    View methods of java.lang.String:

    $ sm java.lang.String
    +import{_ as a,o as n,c as s,d as e}from"./app.e2427bec.js";const t={},i=e(`

    sm

    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

    NameSpecification
    class-patternpattern for class name
    method-patternpattern 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

    View methods of java.lang.String:

    $ sm java.lang.String
     java.lang.String-><init>
     java.lang.String->equals
     java.lang.String->toString
    @@ -54,4 +54,4 @@ Affect(row-cnt:44(row-cnt:1) cost in 3 ms.
    -
    `,9);function u(h,b){const e=o("ExternalLinkIcon");return t(),i("div",null,[c,a("p",null,[a("a",p,[g,v,l(e)])]),m])}const S=s(d,[["render",u],["__file","sm.html.vue"]]);export{S as default}; +
    `,10),l=[i];function r(o,d){return n(),s("div",null,l)}const p=a(t,[["render",r],["__file","sm.html.vue"]]);export{p as default}; diff --git a/assets/sm.html.ddce8266.js b/assets/sm.html.fe572b7b.js similarity index 77% rename from assets/sm.html.ddce8266.js rename to assets/sm.html.fe572b7b.js index dca2e660b..646de859e 100644 --- a/assets/sm.html.ddce8266.js +++ b/assets/sm.html.fe572b7b.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-30d5cc4f","path":"/doc/sm.html","title":"sm","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/sm.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-30d5cc4f","path":"/doc/sm.html","title":"sm","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/sm.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/spring-boot-starter.html.90204de4.js b/assets/spring-boot-starter.html.78d66843.js similarity index 87% rename from assets/spring-boot-starter.html.90204de4.js rename to assets/spring-boot-starter.html.78d66843.js index fd10fa023..90efe1039 100644 --- a/assets/spring-boot-starter.html.90204de4.js +++ b/assets/spring-boot-starter.html.78d66843.js @@ -1 +1 @@ -const t=JSON.parse('{"key":"v-71870b69","path":"/en/doc/spring-boot-starter.html","title":"Arthas Spring Boot Starter","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Configuration properties","slug":"configuration-properties","link":"#configuration-properties","children":[]},{"level":2,"title":"View Endpoint Information","slug":"view-endpoint-information","link":"#view-endpoint-information","children":[]},{"level":2,"title":"Non-spring boot application usage","slug":"non-spring-boot-application-usage","link":"#non-spring-boot-application-usage","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/spring-boot-starter.md","version":"4.3.3"}');export{t as data}; +const t=JSON.parse('{"key":"v-71870b69","path":"/en/doc/spring-boot-starter.html","title":"Arthas Spring Boot Starter","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Configuration properties","slug":"configuration-properties","link":"#configuration-properties","children":[]},{"level":2,"title":"View Endpoint Information","slug":"view-endpoint-information","link":"#view-endpoint-information","children":[]},{"level":2,"title":"Non-spring boot application usage","slug":"non-spring-boot-application-usage","link":"#non-spring-boot-application-usage","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/spring-boot-starter.md","version":"4.3.5"}');export{t as data}; diff --git a/assets/spring-boot-starter.html.17c047b1.js b/assets/spring-boot-starter.html.89e33109.js similarity index 86% rename from assets/spring-boot-starter.html.17c047b1.js rename to assets/spring-boot-starter.html.89e33109.js index 675560f8b..981dea35d 100644 --- a/assets/spring-boot-starter.html.17c047b1.js +++ b/assets/spring-boot-starter.html.89e33109.js @@ -1 +1 @@ -const t=JSON.parse('{"key":"v-07cf9d55","path":"/doc/spring-boot-starter.html","title":"Arthas Spring Boot Starter","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u914D\u7F6E\u5C5E\u6027","slug":"\u914D\u7F6E\u5C5E\u6027","link":"#\u914D\u7F6E\u5C5E\u6027","children":[]},{"level":2,"title":"\u67E5\u770B Endpoint \u4FE1\u606F","slug":"\u67E5\u770B-endpoint-\u4FE1\u606F","link":"#\u67E5\u770B-endpoint-\u4FE1\u606F","children":[]},{"level":2,"title":"\u975E spring boot \u5E94\u7528\u4F7F\u7528\u65B9\u5F0F","slug":"\u975E-spring-boot-\u5E94\u7528\u4F7F\u7528\u65B9\u5F0F","link":"#\u975E-spring-boot-\u5E94\u7528\u4F7F\u7528\u65B9\u5F0F","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/spring-boot-starter.md","version":"4.3.3"}');export{t as data}; +const t=JSON.parse('{"key":"v-07cf9d55","path":"/doc/spring-boot-starter.html","title":"Arthas Spring Boot Starter","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u914D\u7F6E\u5C5E\u6027","slug":"\u914D\u7F6E\u5C5E\u6027","link":"#\u914D\u7F6E\u5C5E\u6027","children":[]},{"level":2,"title":"\u67E5\u770B Endpoint \u4FE1\u606F","slug":"\u67E5\u770B-endpoint-\u4FE1\u606F","link":"#\u67E5\u770B-endpoint-\u4FE1\u606F","children":[]},{"level":2,"title":"\u975E spring boot \u5E94\u7528\u4F7F\u7528\u65B9\u5F0F","slug":"\u975E-spring-boot-\u5E94\u7528\u4F7F\u7528\u65B9\u5F0F","link":"#\u975E-spring-boot-\u5E94\u7528\u4F7F\u7528\u65B9\u5F0F","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/spring-boot-starter.md","version":"4.3.5"}');export{t as data}; diff --git a/assets/spring-boot-starter.html.4d61e938.js b/assets/spring-boot-starter.html.adad135d.js similarity index 99% rename from assets/spring-boot-starter.html.4d61e938.js rename to assets/spring-boot-starter.html.adad135d.js index 16ec79e51..cfecb5f76 100644 --- a/assets/spring-boot-starter.html.4d61e938.js +++ b/assets/spring-boot-starter.html.adad135d.js @@ -1,4 +1,4 @@ -import{_ as c,o as i,c as l,a as n,b as a,w as u,e as s,d as p,r as e}from"./app.524ecf5c.js";const r={},d=n("h1",{id:"arthas-spring-boot-starter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#arthas-spring-boot-starter","aria-hidden":"true"},"#"),s(" Arthas Spring Boot Starter")],-1),k=n("div",{class:"custom-container tip"},[n("p",{class:"custom-container-title"},"\u63D0\u793A"),n("p",null,"arthas 3.7.2\u53CA\u4EE5\u540E\u7684\u7248\u672C\u540C\u65F6\u652F\u6301 springboot 2/3")],-1),g=s("\u6700\u65B0\u7248\u672C\uFF1A"),v={href:"https://search.maven.org/search?q=arthas-spring-boot-starter",target:"_blank",rel:"noopener noreferrer"},h=s("\u67E5\u770B"),m=p(`

    \u914D\u7F6E maven \u4F9D\u8D56\uFF1A

            <dependency>
    +import{_ as c,o as i,c as l,a as n,b as a,w as u,e as s,d as p,r as e}from"./app.e2427bec.js";const r={},d=n("h1",{id:"arthas-spring-boot-starter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#arthas-spring-boot-starter","aria-hidden":"true"},"#"),s(" Arthas Spring Boot Starter")],-1),k=n("div",{class:"custom-container tip"},[n("p",{class:"custom-container-title"},"\u63D0\u793A"),n("p",null,"arthas 3.7.2\u53CA\u4EE5\u540E\u7684\u7248\u672C\u540C\u65F6\u652F\u6301 springboot 2/3")],-1),g=s("\u6700\u65B0\u7248\u672C\uFF1A"),v={href:"https://search.maven.org/search?q=arthas-spring-boot-starter",target:"_blank",rel:"noopener noreferrer"},h=s("\u67E5\u770B"),m=p(`

    \u914D\u7F6E maven \u4F9D\u8D56\uFF1A

            <dependency>
                 <groupId>com.taobao.arthas</groupId>
                 <artifactId>arthas-spring-boot-starter</artifactId>
                 <version>\${arthas.version}</version>
    diff --git a/assets/spring-boot-starter.html.e05dbeb5.js b/assets/spring-boot-starter.html.cb1cd476.js
    similarity index 99%
    rename from assets/spring-boot-starter.html.e05dbeb5.js
    rename to assets/spring-boot-starter.html.cb1cd476.js
    index 7b213e0ec..0e71527f0 100644
    --- a/assets/spring-boot-starter.html.e05dbeb5.js
    +++ b/assets/spring-boot-starter.html.cb1cd476.js
    @@ -1,4 +1,4 @@
    -import{_ as c,o as i,c as l,a as n,b as a,w as r,e as s,d as p,r as e}from"./app.524ecf5c.js";const u={},d=n("h1",{id:"arthas-spring-boot-starter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#arthas-spring-boot-starter","aria-hidden":"true"},"#"),s(" Arthas Spring Boot Starter")],-1),k=n("div",{class:"custom-container tip"},[n("p",{class:"custom-container-title"},"TIP"),n("p",null,"Arthas 3.7.2 and later support both Spring Boot 2 and Spring Boot 3.")],-1),g=s("Latest Version: "),h={href:"https://search.maven.org/search?q=arthas-spring-boot-starter",target:"_blank",rel:"noopener noreferrer"},m=s("View"),v=p(`

    Add maven dependency:

            <dependency>
    +import{_ as c,o as i,c as l,a as n,b as a,w as r,e as s,d as p,r as e}from"./app.e2427bec.js";const u={},d=n("h1",{id:"arthas-spring-boot-starter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#arthas-spring-boot-starter","aria-hidden":"true"},"#"),s(" Arthas Spring Boot Starter")],-1),k=n("div",{class:"custom-container tip"},[n("p",{class:"custom-container-title"},"TIP"),n("p",null,"Arthas 3.7.2 and later support both Spring Boot 2 and Spring Boot 3.")],-1),g=s("Latest Version: "),h={href:"https://search.maven.org/search?q=arthas-spring-boot-starter",target:"_blank",rel:"noopener noreferrer"},m=s("View"),v=p(`

    Add maven dependency:

            <dependency>
                 <groupId>com.taobao.arthas</groupId>
                 <artifactId>arthas-spring-boot-starter</artifactId>
                 <version>\${arthas.version}</version>
    diff --git a/assets/stack.html.5eeaffe9.js b/assets/stack.html.39dc52db.js
    similarity index 68%
    rename from assets/stack.html.5eeaffe9.js
    rename to assets/stack.html.39dc52db.js
    index e753835b8..b0e5f0bf9 100644
    --- a/assets/stack.html.5eeaffe9.js
    +++ b/assets/stack.html.39dc52db.js
    @@ -1,4 +1,4 @@
    -import{_ as c,o as i,c as r,a,b as n,w as o,e as s,d as p,r as l}from"./app.524ecf5c.js";const d={},u=a("h1",{id:"stack",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#stack","aria-hidden":"true"},"#"),s(" stack")],-1),m={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-stack",target:"_blank",rel:"noopener noreferrer"},k=a("code",null,"stack",-1),h=s("\u5728\u7EBF\u6559\u7A0B"),b=p('

    \u63D0\u793A

    \u8F93\u51FA\u5F53\u524D\u65B9\u6CD5\u88AB\u8C03\u7528\u7684\u8C03\u7528\u8DEF\u5F84

    \u5F88\u591A\u65F6\u5019\u6211\u4EEC\u90FD\u77E5\u9053\u4E00\u4E2A\u65B9\u6CD5\u88AB\u6267\u884C\uFF0C\u4F46\u8FD9\u4E2A\u65B9\u6CD5\u88AB\u6267\u884C\u7684\u8DEF\u5F84\u975E\u5E38\u591A\uFF0C\u6216\u8005\u4F60\u6839\u672C\u5C31\u4E0D\u77E5\u9053\u8FD9\u4E2A\u65B9\u6CD5\u662F\u4ECE\u90A3\u91CC\u88AB\u6267\u884C\u4E86\uFF0C\u6B64\u65F6\u4F60\u9700\u8981\u7684\u662F stack \u547D\u4EE4\u3002

    \u53C2\u6570\u8BF4\u660E

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    class-pattern\u7C7B\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    method-pattern\u65B9\u6CD5\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    condition-express\u6761\u4EF6\u8868\u8FBE\u5F0F
    [E]\u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u4E3A\u901A\u914D\u7B26\u5339\u914D
    [n:]\u6267\u884C\u6B21\u6570\u9650\u5236
    [c:]\u6307\u5B9A classloader hash\uFF0C\u53EA\u589E\u5F3A\u8BE5 classloader \u52A0\u8F7D\u7684\u7C7B
    [m <arg>]\u6307\u5B9A Class \u6700\u5927\u5339\u914D\u6570\u91CF\uFF0C\u9ED8\u8BA4\u503C\u4E3A 50\u3002\u957F\u683C\u5F0F\u4E3A[maxMatch <arg>]\u3002

    \u8FD9\u91CC\u91CD\u70B9\u8981\u8BF4\u660E\u7684\u662F\u89C2\u5BDF\u8868\u8FBE\u5F0F\uFF0C\u89C2\u5BDF\u8868\u8FBE\u5F0F\u7684\u6784\u6210\u4E3B\u8981\u7531 \bognl \u8868\u8FBE\u5F0F\u7EC4\u6210\uFF0C\u6240\u4EE5\u4F60\u53EF\u4EE5\u8FD9\u6837\u5199"{params,returnObj}"\uFF0C\u53EA\u8981\u662F\u4E00\u4E2A\u5408\u6CD5\u7684 ognl \u8868\u8FBE\u5F0F\uFF0C\u90FD\u80FD\u88AB\u6B63\u5E38\u652F\u6301\u3002

    \u89C2\u5BDF\u7684\u7EF4\u5EA6\u4E5F\u6BD4\u8F83\u591A\uFF0C\u4E3B\u8981\u4F53\u73B0\u5728\u53C2\u6570 advice \u7684\u6570\u636E\u7ED3\u6784\u4E0A\u3002Advice \u53C2\u6570\u6700\u4E3B\u8981\u662F\u5C01\u88C5\u4E86\u901A\u77E5\u8282\u70B9\u7684\u6240\u6709\u4FE1\u606F\u3002

    ',6),v=s("\u8BF7\u53C2\u8003"),g=s("\u8868\u8FBE\u5F0F\u6838\u5FC3\u53D8\u91CF"),f=s("\u4E2D\u5173\u4E8E\u8BE5\u8282\u70B9\u7684\u63CF\u8FF0\u3002"),_=s("\u7279\u6B8A\u7528\u6CD5\u8BF7\u53C2\u8003\uFF1A"),x={href:"https://github.com/alibaba/arthas/issues/71",target:"_blank",rel:"noopener noreferrer"},C=s("https://github.com/alibaba/arthas/issues/71"),y=s("OGNL \u8868\u8FBE\u5F0F\u5B98\u7F51\uFF1A"),G={href:"https://commons.apache.org/dormant/commons-ognl/language-guide.html",target:"_blank",rel:"noopener noreferrer"},M=s("https://commons.apache.org/dormant/commons-ognl/language-guide.html"),L=a("h2",{id:"\u4F7F\u7528\u4F8B\u5B50",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u4F7F\u7528\u4F8B\u5B50","aria-hidden":"true"},"#"),s(" \u4F7F\u7528\u4F8B\u5B50")],-1),A=a("h3",{id:"\u542F\u52A8-demo",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u542F\u52A8-demo","aria-hidden":"true"},"#"),s(" \u542F\u52A8 Demo")],-1),$=s("\u542F\u52A8"),w=s("\u5FEB\u901F\u5165\u95E8"),j=s("\u91CC\u7684"),F=a("code",null,"math-game",-1),T=s("\u3002"),N=p(`

    stack

    $ stack demo.MathGame primeFactors
    +import{_ as o,o as p,c,a as s,b as e,w as t,d as l,e as a,r as i}from"./app.e2427bec.js";const r={},d=l('

    stack

    \u63D0\u793A

    \u8F93\u51FA\u5F53\u524D\u65B9\u6CD5\u88AB\u8C03\u7528\u7684\u8C03\u7528\u8DEF\u5F84

    \u5F88\u591A\u65F6\u5019\u6211\u4EEC\u90FD\u77E5\u9053\u4E00\u4E2A\u65B9\u6CD5\u88AB\u6267\u884C\uFF0C\u4F46\u8FD9\u4E2A\u65B9\u6CD5\u88AB\u6267\u884C\u7684\u8DEF\u5F84\u975E\u5E38\u591A\uFF0C\u6216\u8005\u4F60\u6839\u672C\u5C31\u4E0D\u77E5\u9053\u8FD9\u4E2A\u65B9\u6CD5\u662F\u4ECE\u90A3\u91CC\u88AB\u6267\u884C\u4E86\uFF0C\u6B64\u65F6\u4F60\u9700\u8981\u7684\u662F stack \u547D\u4EE4\u3002

    \u53C2\u6570\u8BF4\u660E

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    class-pattern\u7C7B\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    method-pattern\u65B9\u6CD5\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    condition-express\u6761\u4EF6\u8868\u8FBE\u5F0F
    [E]\u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u4E3A\u901A\u914D\u7B26\u5339\u914D
    [n:]\u6267\u884C\u6B21\u6570\u9650\u5236
    [c:]\u6307\u5B9A classloader hash\uFF0C\u53EA\u589E\u5F3A\u8BE5 classloader \u52A0\u8F7D\u7684\u7C7B
    [m <arg>]\u6307\u5B9A Class \u6700\u5927\u5339\u914D\u6570\u91CF\uFF0C\u9ED8\u8BA4\u503C\u4E3A 50\u3002\u957F\u683C\u5F0F\u4E3A[maxMatch <arg>]\u3002

    \u8FD9\u91CC\u91CD\u70B9\u8981\u8BF4\u660E\u7684\u662F\u89C2\u5BDF\u8868\u8FBE\u5F0F\uFF0C\u89C2\u5BDF\u8868\u8FBE\u5F0F\u7684\u6784\u6210\u4E3B\u8981\u7531 \bognl \u8868\u8FBE\u5F0F\u7EC4\u6210\uFF0C\u6240\u4EE5\u4F60\u53EF\u4EE5\u8FD9\u6837\u5199"{params,returnObj}"\uFF0C\u53EA\u8981\u662F\u4E00\u4E2A\u5408\u6CD5\u7684 ognl \u8868\u8FBE\u5F0F\uFF0C\u90FD\u80FD\u88AB\u6B63\u5E38\u652F\u6301\u3002

    \u89C2\u5BDF\u7684\u7EF4\u5EA6\u4E5F\u6BD4\u8F83\u591A\uFF0C\u4E3B\u8981\u4F53\u73B0\u5728\u53C2\u6570 advice \u7684\u6570\u636E\u7ED3\u6784\u4E0A\u3002Advice \u53C2\u6570\u6700\u4E3B\u8981\u662F\u5C01\u88C5\u4E86\u901A\u77E5\u8282\u70B9\u7684\u6240\u6709\u4FE1\u606F\u3002

    ',7),u=a("\u8BF7\u53C2\u8003"),m=a("\u8868\u8FBE\u5F0F\u6838\u5FC3\u53D8\u91CF"),k=a("\u4E2D\u5173\u4E8E\u8BE5\u8282\u70B9\u7684\u63CF\u8FF0\u3002"),h=a("OGNL \u590D\u6742\u8868\u8FBE\u5F0F\u4F7F\u7528\u6280\u5DE7"),b=s("h2",{id:"\u4F7F\u7528\u4F8B\u5B50",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#\u4F7F\u7528\u4F8B\u5B50","aria-hidden":"true"},"#"),a(" \u4F7F\u7528\u4F8B\u5B50")],-1),v=s("h3",{id:"\u542F\u52A8-demo",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#\u542F\u52A8-demo","aria-hidden":"true"},"#"),a(" \u542F\u52A8 Demo")],-1),g=a("\u542F\u52A8"),f=a("\u5FEB\u901F\u5165\u95E8"),_=a("\u91CC\u7684"),x=s("code",null,"math-game",-1),C=a("\u3002"),y=l(`

    stack

    $ stack demo.MathGame primeFactors
     Press Ctrl+C to abort.
     Affect(class-cnt:1 , method-cnt:1) cost in 36 ms.
     ts=2018-12-04 01:32:19;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69
    @@ -31,4 +31,4 @@ Affect(class-cnt:1 , method-cnt:1ts=2018-12-04 01:35:58;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69
         @demo.MathGame.run()
             at demo.MathGame.main(MathGame.java:16)
    -
    `,11);function E(P,V){const e=l("ExternalLinkIcon"),t=l("RouterLink");return i(),r("div",null,[u,a("p",null,[a("a",m,[k,h,n(e)])]),b,a("p",null,[v,n(t,{to:"/doc/advice-class.html"},{default:o(()=>[g]),_:1}),f]),a("ul",null,[a("li",null,[_,a("a",x,[C,n(e)])]),a("li",null,[y,a("a",G,[M,n(e)])])]),L,A,a("p",null,[$,n(t,{to:"/doc/quick-start.html"},{default:o(()=>[w]),_:1}),j,F,T]),N])}const B=c(d,[["render",E],["__file","stack.html.vue"]]);export{B as default}; +
    `,11);function G(M,L){const n=i("RouterLink");return p(),c("div",null,[d,s("p",null,[u,e(n,{to:"/doc/advice-class.html"},{default:t(()=>[m]),_:1}),k]),s("ul",null,[s("li",null,[e(n,{to:"/doc/ognl-express.html"},{default:t(()=>[h]),_:1})])]),b,v,s("p",null,[g,e(n,{to:"/doc/quick-start.html"},{default:t(()=>[f]),_:1}),_,x,C]),y])}const $=o(r,[["render",G],["__file","stack.html.vue"]]);export{$ as default}; diff --git a/assets/stack.html.9612a18d.js b/assets/stack.html.67e8e31b.js similarity index 92% rename from assets/stack.html.9612a18d.js rename to assets/stack.html.67e8e31b.js index 9fb7bb429..7fa6d62d4 100644 --- a/assets/stack.html.9612a18d.js +++ b/assets/stack.html.67e8e31b.js @@ -1 +1 @@ -const l=JSON.parse('{"key":"v-b75a107e","path":"/doc/stack.html","title":"stack","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u4F8B\u5B50","slug":"\u4F7F\u7528\u4F8B\u5B50","link":"#\u4F7F\u7528\u4F8B\u5B50","children":[{"level":3,"title":"\u542F\u52A8 Demo","slug":"\u542F\u52A8-demo","link":"#\u542F\u52A8-demo","children":[]},{"level":3,"title":"stack","slug":"stack-1","link":"#stack-1","children":[]},{"level":3,"title":"\u6307\u5B9A Class \u6700\u5927\u5339\u914D\u6570\u91CF","slug":"\u6307\u5B9A-class-\u6700\u5927\u5339\u914D\u6570\u91CF","link":"#\u6307\u5B9A-class-\u6700\u5927\u5339\u914D\u6570\u91CF","children":[]},{"level":3,"title":"\u6307\u5B9A ClassLoader \u589E\u5F3A","slug":"\u6307\u5B9A-classloader-\u589E\u5F3A","link":"#\u6307\u5B9A-classloader-\u589E\u5F3A","children":[]},{"level":3,"title":"\u636E\u6761\u4EF6\u8868\u8FBE\u5F0F\u6765\u8FC7\u6EE4","slug":"\u636E\u6761\u4EF6\u8868\u8FBE\u5F0F\u6765\u8FC7\u6EE4","link":"#\u636E\u6761\u4EF6\u8868\u8FBE\u5F0F\u6765\u8FC7\u6EE4","children":[]},{"level":3,"title":"\u636E\u6267\u884C\u65F6\u95F4\u6765\u8FC7\u6EE4","slug":"\u636E\u6267\u884C\u65F6\u95F4\u6765\u8FC7\u6EE4","link":"#\u636E\u6267\u884C\u65F6\u95F4\u6765\u8FC7\u6EE4","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/stack.md","version":"4.3.3"}');export{l as data}; +const l=JSON.parse('{"key":"v-b75a107e","path":"/doc/stack.html","title":"stack","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u4F8B\u5B50","slug":"\u4F7F\u7528\u4F8B\u5B50","link":"#\u4F7F\u7528\u4F8B\u5B50","children":[{"level":3,"title":"\u542F\u52A8 Demo","slug":"\u542F\u52A8-demo","link":"#\u542F\u52A8-demo","children":[]},{"level":3,"title":"stack","slug":"stack-1","link":"#stack-1","children":[]},{"level":3,"title":"\u6307\u5B9A Class \u6700\u5927\u5339\u914D\u6570\u91CF","slug":"\u6307\u5B9A-class-\u6700\u5927\u5339\u914D\u6570\u91CF","link":"#\u6307\u5B9A-class-\u6700\u5927\u5339\u914D\u6570\u91CF","children":[]},{"level":3,"title":"\u6307\u5B9A ClassLoader \u589E\u5F3A","slug":"\u6307\u5B9A-classloader-\u589E\u5F3A","link":"#\u6307\u5B9A-classloader-\u589E\u5F3A","children":[]},{"level":3,"title":"\u636E\u6761\u4EF6\u8868\u8FBE\u5F0F\u6765\u8FC7\u6EE4","slug":"\u636E\u6761\u4EF6\u8868\u8FBE\u5F0F\u6765\u8FC7\u6EE4","link":"#\u636E\u6761\u4EF6\u8868\u8FBE\u5F0F\u6765\u8FC7\u6EE4","children":[]},{"level":3,"title":"\u636E\u6267\u884C\u65F6\u95F4\u6765\u8FC7\u6EE4","slug":"\u636E\u6267\u884C\u65F6\u95F4\u6765\u8FC7\u6EE4","link":"#\u636E\u6267\u884C\u65F6\u95F4\u6765\u8FC7\u6EE4","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/stack.md","version":"4.3.5"}');export{l as data}; diff --git a/assets/stack.html.a0d22cd5.js b/assets/stack.html.aa5021d8.js similarity index 86% rename from assets/stack.html.a0d22cd5.js rename to assets/stack.html.aa5021d8.js index ebcee052f..38f3d845c 100644 --- a/assets/stack.html.a0d22cd5.js +++ b/assets/stack.html.aa5021d8.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-4483d8d5","path":"/en/doc/stack.html","title":"stack","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Parameters","slug":"parameters","link":"#parameters","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"Start Demo","slug":"start-demo","link":"#start-demo","children":[]},{"level":3,"title":"stack","slug":"stack-1","link":"#stack-1","children":[]},{"level":3,"title":"Specify the max number of matched Classes","slug":"specify-the-max-number-of-matched-classes","link":"#specify-the-max-number-of-matched-classes","children":[]},{"level":3,"title":"Specify ClassLoader to enhance","slug":"specify-classloader-to-enhance","link":"#specify-classloader-to-enhance","children":[]},{"level":3,"title":"Filtering by condition expression","slug":"filtering-by-condition-expression","link":"#filtering-by-condition-expression","children":[]},{"level":3,"title":"Filtering by cost","slug":"filtering-by-cost","link":"#filtering-by-cost","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/stack.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-4483d8d5","path":"/en/doc/stack.html","title":"stack","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Parameters","slug":"parameters","link":"#parameters","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"Start Demo","slug":"start-demo","link":"#start-demo","children":[]},{"level":3,"title":"stack","slug":"stack-1","link":"#stack-1","children":[]},{"level":3,"title":"Specify the max number of matched Classes","slug":"specify-the-max-number-of-matched-classes","link":"#specify-the-max-number-of-matched-classes","children":[]},{"level":3,"title":"Specify ClassLoader to enhance","slug":"specify-classloader-to-enhance","link":"#specify-classloader-to-enhance","children":[]},{"level":3,"title":"Filtering by condition expression","slug":"filtering-by-condition-expression","link":"#filtering-by-condition-expression","children":[]},{"level":3,"title":"Filtering by cost","slug":"filtering-by-cost","link":"#filtering-by-cost","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/stack.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/stack.html.7399ec24.js b/assets/stack.html.bdb92f2d.js similarity index 71% rename from assets/stack.html.7399ec24.js rename to assets/stack.html.bdb92f2d.js index ef6f0717c..a7f289af3 100644 --- a/assets/stack.html.7399ec24.js +++ b/assets/stack.html.bdb92f2d.js @@ -1,4 +1,4 @@ -import{_ as c,o as p,c as r,a,b as n,w as o,e as s,d as l,r as i}from"./app.524ecf5c.js";const d={},u=a("h1",{id:"stack",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#stack","aria-hidden":"true"},"#"),s(" stack")],-1),m={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-stack",target:"_blank",rel:"noopener noreferrer"},h=a("code",null,"stack",-1),k=s(" online tutorial"),b=l('

    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

    NameSpecification
    class-patternpattern for the class name
    method-patternpattern for the method name
    condition-expressioncondition expression
    [E]turn on regex match, the default behavior is wildcard match
    [n:]execution times
    [c:]Specify classloader hash, only enhance classes loaded by it
    [m <arg>]Specify the max number of matched Classes, the default value is 50. Long format is [maxMatch <arg>].

    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.

    ',6),v=s("Pls. refer to "),g=s("core parameters in expression"),f=s(" for more details."),_=s("Pls. also refer to "),x={href:"https://github.com/alibaba/arthas/issues/71",target:"_blank",rel:"noopener noreferrer"},y=s("https://github.com/alibaba/arthas/issues/71"),C=s(" for more advanced usage"),G=s("OGNL official site: "),L={href:"https://commons.apache.org/dormant/commons-ognl/language-guide.html",target:"_blank",rel:"noopener noreferrer"},M=s("https://commons.apache.org/dormant/commons-ognl/language-guide.html"),w=a("h2",{id:"usage",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#usage","aria-hidden":"true"},"#"),s(" Usage")],-1),T=a("h3",{id:"start-demo",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#start-demo","aria-hidden":"true"},"#"),s(" Start Demo")],-1),A=s("Start "),F=a("code",null,"math-game",-1),P=s(" in "),S=s("Quick Start"),$=s("."),N=l(`

    stack

    $ stack demo.MathGame primeFactors
    +import{_ as i,o as l,c as p,a as s,b as e,w as t,d as o,e as a,r as c}from"./app.e2427bec.js";const r={},d=o('

    stack

    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

    NameSpecification
    class-patternpattern for the class name
    method-patternpattern for the method name
    condition-expressioncondition expression
    [E]turn on regex match, the default behavior is wildcard match
    [n:]execution times
    [c:]Specify classloader hash, only enhance classes loaded by it
    [m <arg>]Specify the max number of matched Classes, the default value is 50. Long format is [maxMatch <arg>].

    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.

    ',7),u=a("Pls. refer to "),m=a("core parameters in expression"),h=a(" for more details."),k=a("Tips for complex OGNL expressions"),b=s("h2",{id:"usage",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#usage","aria-hidden":"true"},"#"),a(" Usage")],-1),v=s("h3",{id:"start-demo",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#start-demo","aria-hidden":"true"},"#"),a(" Start Demo")],-1),f=a("Start "),g=s("code",null,"math-game",-1),x=a(" in "),_=a("Quick Start"),y=a("."),C=o(`

    stack

    $ stack demo.MathGame primeFactors
     Press Ctrl+C to abort.
     Affect(class-cnt:1 , method-cnt:1) cost in 36 ms.
     ts=2018-12-04 01:32:19;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69
    @@ -31,4 +31,4 @@ Affect(class-cnt:1 , method-cnt:1ts=2018-12-04 01:35:58;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69
         @demo.MathGame.run()
             at demo.MathGame.main(MathGame.java:16)
    -
    `,11);function j(I,E){const e=i("ExternalLinkIcon"),t=i("RouterLink");return p(),r("div",null,[u,a("p",null,[a("a",m,[h,k,n(e)])]),b,a("p",null,[v,n(t,{to:"/en/doc/advice-class.html"},{default:o(()=>[g]),_:1}),f]),a("ul",null,[a("li",null,[_,a("a",x,[y,n(e)]),C]),a("li",null,[G,a("a",L,[M,n(e)])])]),w,T,a("p",null,[A,F,P,n(t,{to:"/en/doc/quick-start.html"},{default:o(()=>[S]),_:1}),$]),N])}const V=c(d,[["render",j],["__file","stack.html.vue"]]);export{V as default}; +
    `,11);function G(M,L){const n=c("RouterLink");return l(),p("div",null,[d,s("p",null,[u,e(n,{to:"/en/doc/advice-class.html"},{default:t(()=>[m]),_:1}),h]),s("ul",null,[s("li",null,[e(n,{to:"/en/doc/ognl-express.html"},{default:t(()=>[k]),_:1})])]),b,v,s("p",null,[f,g,x,e(n,{to:"/en/doc/quick-start.html"},{default:t(()=>[_]),_:1}),y]),C])}const T=i(r,[["render",G],["__file","stack.html.vue"]]);export{T as default}; diff --git a/assets/start-arthas.html.643bd996.js b/assets/start-arthas.html.1a3db2ff.js similarity index 99% rename from assets/start-arthas.html.643bd996.js rename to assets/start-arthas.html.1a3db2ff.js index 0a6c10154..6493c12da 100644 --- a/assets/start-arthas.html.643bd996.js +++ b/assets/start-arthas.html.1a3db2ff.js @@ -1,4 +1,4 @@ -import{_ as a,o as s,c as e,d as n}from"./app.524ecf5c.js";const t={},r=n(`

    Start Arthas

    Interactive Mode

    ./as.sh
    +import{_ as a,o as s,c as e,d as n}from"./app.e2427bec.js";const t={},r=n(`

    Start Arthas

    Interactive Mode

    ./as.sh
     
    \u279C  bin git:(develop) \u2717 ./as.sh
     Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.
       [1]: 3088 org.jetbrains.idea.maven.server.RemoteMavenServer
    diff --git a/assets/start-arthas.html.19401c09.js b/assets/start-arthas.html.497d3293.js
    similarity index 99%
    rename from assets/start-arthas.html.19401c09.js
    rename to assets/start-arthas.html.497d3293.js
    index 881346c8c..f4575a90d 100644
    --- a/assets/start-arthas.html.19401c09.js
    +++ b/assets/start-arthas.html.497d3293.js
    @@ -1,4 +1,4 @@
    -import{_ as a,o as s,c as n,d as e}from"./app.524ecf5c.js";const t={},p=e(`

    \u542F\u52A8 Arthas

    \u4EA4\u4E92\u6A21\u5F0F\u542F\u52A8

    ./as.sh
    +import{_ as a,o as s,c as n,d as e}from"./app.e2427bec.js";const t={},p=e(`

    \u542F\u52A8 Arthas

    \u4EA4\u4E92\u6A21\u5F0F\u542F\u52A8

    ./as.sh
     
    \u279C  bin git:(develop) \u2717 ./as.sh
     Found existing java process, please choose one and input the serial number of the process, eg: 1 . Then hit ENTER.
       [1]: 3088 org.jetbrains.idea.maven.server.RemoteMavenServer
    diff --git a/assets/start-arthas.html.14fd95da.js b/assets/start-arthas.html.614c57c4.js
    similarity index 88%
    rename from assets/start-arthas.html.14fd95da.js
    rename to assets/start-arthas.html.614c57c4.js
    index 44b72e3fc..79472c9cc 100644
    --- a/assets/start-arthas.html.14fd95da.js
    +++ b/assets/start-arthas.html.614c57c4.js
    @@ -1 +1 @@
    -const e=JSON.parse('{"key":"v-7af576f3","path":"/en/doc/start-arthas.html","title":"Start Arthas","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Interactive Mode","slug":"interactive-mode","link":"#interactive-mode","children":[]},{"level":2,"title":"Non-Interactive Mode","slug":"non-interactive-mode","link":"#non-interactive-mode","children":[{"level":3,"title":"Parameter Description","slug":"parameter-description","link":"#parameter-description","children":[]},{"level":3,"title":"Sample","slug":"sample","link":"#sample","children":[]},{"level":3,"title":"Remote Diagnosis","slug":"remote-diagnosis","link":"#remote-diagnosis","children":[]},{"level":3,"title":"sudo Support","slug":"sudo-support","link":"#sudo-support","children":[]},{"level":3,"title":"Windows Support","slug":"windows-support","link":"#windows-support","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/start-arthas.md","version":"4.3.3"}');export{e as data};
    +const e=JSON.parse('{"key":"v-7af576f3","path":"/en/doc/start-arthas.html","title":"Start Arthas","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Interactive Mode","slug":"interactive-mode","link":"#interactive-mode","children":[]},{"level":2,"title":"Non-Interactive Mode","slug":"non-interactive-mode","link":"#non-interactive-mode","children":[{"level":3,"title":"Parameter Description","slug":"parameter-description","link":"#parameter-description","children":[]},{"level":3,"title":"Sample","slug":"sample","link":"#sample","children":[]},{"level":3,"title":"Remote Diagnosis","slug":"remote-diagnosis","link":"#remote-diagnosis","children":[]},{"level":3,"title":"sudo Support","slug":"sudo-support","link":"#sudo-support","children":[]},{"level":3,"title":"Windows Support","slug":"windows-support","link":"#windows-support","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/start-arthas.md","version":"4.3.5"}');export{e as data};
    diff --git a/assets/start-arthas.html.13fc8e7c.js b/assets/start-arthas.html.6198e218.js
    similarity index 87%
    rename from assets/start-arthas.html.13fc8e7c.js
    rename to assets/start-arthas.html.6198e218.js
    index 278d79ba4..2ef10a1ef 100644
    --- a/assets/start-arthas.html.13fc8e7c.js
    +++ b/assets/start-arthas.html.6198e218.js
    @@ -1 +1 @@
    -const l=JSON.parse('{"key":"v-a9c412f2","path":"/doc/start-arthas.html","title":"\u542F\u52A8 Arthas","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4EA4\u4E92\u6A21\u5F0F\u542F\u52A8","slug":"\u4EA4\u4E92\u6A21\u5F0F\u542F\u52A8","link":"#\u4EA4\u4E92\u6A21\u5F0F\u542F\u52A8","children":[]},{"level":2,"title":"\u975E\u4EA4\u4E92\u6A21\u5F0F\u542F\u52A8","slug":"\u975E\u4EA4\u4E92\u6A21\u5F0F\u542F\u52A8","link":"#\u975E\u4EA4\u4E92\u6A21\u5F0F\u542F\u52A8","children":[{"level":3,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":3,"title":"\u793A\u4F8B","slug":"\u793A\u4F8B","link":"#\u793A\u4F8B","children":[]},{"level":3,"title":"\u8FDC\u7A0B\u8BCA\u65AD","slug":"\u8FDC\u7A0B\u8BCA\u65AD","link":"#\u8FDC\u7A0B\u8BCA\u65AD","children":[]},{"level":3,"title":"sudo \u652F\u6301","slug":"sudo-\u652F\u6301","link":"#sudo-\u652F\u6301","children":[]},{"level":3,"title":"Windows \u73AF\u5883\u652F\u6301","slug":"windows-\u73AF\u5883\u652F\u6301","link":"#windows-\u73AF\u5883\u652F\u6301","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/start-arthas.md","version":"4.3.3"}');export{l as data};
    +const l=JSON.parse('{"key":"v-a9c412f2","path":"/doc/start-arthas.html","title":"\u542F\u52A8 Arthas","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4EA4\u4E92\u6A21\u5F0F\u542F\u52A8","slug":"\u4EA4\u4E92\u6A21\u5F0F\u542F\u52A8","link":"#\u4EA4\u4E92\u6A21\u5F0F\u542F\u52A8","children":[]},{"level":2,"title":"\u975E\u4EA4\u4E92\u6A21\u5F0F\u542F\u52A8","slug":"\u975E\u4EA4\u4E92\u6A21\u5F0F\u542F\u52A8","link":"#\u975E\u4EA4\u4E92\u6A21\u5F0F\u542F\u52A8","children":[{"level":3,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":3,"title":"\u793A\u4F8B","slug":"\u793A\u4F8B","link":"#\u793A\u4F8B","children":[]},{"level":3,"title":"\u8FDC\u7A0B\u8BCA\u65AD","slug":"\u8FDC\u7A0B\u8BCA\u65AD","link":"#\u8FDC\u7A0B\u8BCA\u65AD","children":[]},{"level":3,"title":"sudo \u652F\u6301","slug":"sudo-\u652F\u6301","link":"#sudo-\u652F\u6301","children":[]},{"level":3,"title":"Windows \u73AF\u5883\u652F\u6301","slug":"windows-\u73AF\u5883\u652F\u6301","link":"#windows-\u73AF\u5883\u652F\u6301","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/start-arthas.md","version":"4.3.5"}');export{l as data};
    diff --git a/assets/stop.html.7682683c.js b/assets/stop.html.481c9049.js
    similarity index 61%
    rename from assets/stop.html.7682683c.js
    rename to assets/stop.html.481c9049.js
    index 828c6318f..b6bad063e 100644
    --- a/assets/stop.html.7682683c.js
    +++ b/assets/stop.html.481c9049.js
    @@ -1 +1 @@
    -const e=JSON.parse('{"key":"v-e33fb7da","path":"/en/doc/stop.html","title":"stop","lang":"en-US","frontmatter":{},"excerpt":"","headers":[],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/stop.md","version":"4.3.3"}');export{e as data};
    +const e=JSON.parse('{"key":"v-e33fb7da","path":"/en/doc/stop.html","title":"stop","lang":"en-US","frontmatter":{},"excerpt":"","headers":[],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/stop.md","version":"4.3.5"}');export{e as data};
    diff --git a/assets/stop.html.150a6560.js b/assets/stop.html.9224e553.js
    similarity index 92%
    rename from assets/stop.html.150a6560.js
    rename to assets/stop.html.9224e553.js
    index 1272691f7..902f24274 100644
    --- a/assets/stop.html.150a6560.js
    +++ b/assets/stop.html.9224e553.js
    @@ -1 +1 @@
    -import{_ as t,o as s,c as o,a as e,e as a}from"./app.524ecf5c.js";const c={},r=e("h1",{id:"stop",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#stop","aria-hidden":"true"},"#"),a(" stop")],-1),n=e("p",null,"\u5173\u95ED Arthas \u670D\u52A1\u7AEF\uFF0C\u6240\u6709 Arthas \u5BA2\u6237\u7AEF\u5168\u90E8\u9000\u51FA\u3002",-1),_=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"\u63D0\u793A"),e("p",null,"\u5173\u95ED Arthas \u670D\u52A1\u5668\u4E4B\u524D\uFF0C\u4F1A\u91CD\u7F6E\u6389\u6240\u6709\u505A\u8FC7\u7684\u589E\u5F3A\u7C7B\u3002\u4F46\u662F\u7528 redefine \u548C retransform \u91CD\u52A0\u8F7D\u7684\u7C7B\u5185\u5BB9\u4E0D\u4F1A\u88AB\u91CD\u7F6E\u3002")],-1),i=[r,n,_];function d(l,h){return s(),o("div",null,i)}const f=t(c,[["render",d],["__file","stop.html.vue"]]);export{f as default};
    +import{_ as t,o as s,c as o,a as e,e as a}from"./app.e2427bec.js";const c={},r=e("h1",{id:"stop",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#stop","aria-hidden":"true"},"#"),a(" stop")],-1),n=e("p",null,"\u5173\u95ED Arthas \u670D\u52A1\u7AEF\uFF0C\u6240\u6709 Arthas \u5BA2\u6237\u7AEF\u5168\u90E8\u9000\u51FA\u3002",-1),_=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"\u63D0\u793A"),e("p",null,"\u5173\u95ED Arthas \u670D\u52A1\u5668\u4E4B\u524D\uFF0C\u4F1A\u91CD\u7F6E\u6389\u6240\u6709\u505A\u8FC7\u7684\u589E\u5F3A\u7C7B\u3002\u4F46\u662F\u7528 redefine \u548C retransform \u91CD\u52A0\u8F7D\u7684\u7C7B\u5185\u5BB9\u4E0D\u4F1A\u88AB\u91CD\u7F6E\u3002")],-1),i=[r,n,_];function d(l,h){return s(),o("div",null,i)}const f=t(c,[["render",d],["__file","stop.html.vue"]]);export{f as default};
    diff --git a/assets/stop.html.b32333b4.js b/assets/stop.html.c30e7079.js
    similarity index 89%
    rename from assets/stop.html.b32333b4.js
    rename to assets/stop.html.c30e7079.js
    index 29d7738e8..3b8410d5c 100644
    --- a/assets/stop.html.b32333b4.js
    +++ b/assets/stop.html.c30e7079.js
    @@ -1 +1 @@
    -import{_ as t,o as s,c as o,a as e,e as n}from"./app.524ecf5c.js";const c={},r=e("h1",{id:"stop",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#stop","aria-hidden":"true"},"#"),n(" stop")],-1),a=e("p",null,"terminates the Arthas server, all the Arthas clients connecting to this server will be disconnected.",-1),i=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"TIP"),e("p",null,"the class redefined by redefine or retransform command will not be reset.")],-1),l=[r,a,i];function d(_,h){return s(),o("div",null,l)}const m=t(c,[["render",d],["__file","stop.html.vue"]]);export{m as default};
    +import{_ as t,o as s,c as o,a as e,e as n}from"./app.e2427bec.js";const c={},r=e("h1",{id:"stop",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#stop","aria-hidden":"true"},"#"),n(" stop")],-1),a=e("p",null,"terminates the Arthas server, all the Arthas clients connecting to this server will be disconnected.",-1),i=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"TIP"),e("p",null,"the class redefined by redefine or retransform command will not be reset.")],-1),l=[r,a,i];function d(_,h){return s(),o("div",null,l)}const m=t(c,[["render",d],["__file","stop.html.vue"]]);export{m as default};
    diff --git a/assets/stop.html.92337bb0.js b/assets/stop.html.c39fd416.js
    similarity index 60%
    rename from assets/stop.html.92337bb0.js
    rename to assets/stop.html.c39fd416.js
    index 042f850c8..42fb8bb1b 100644
    --- a/assets/stop.html.92337bb0.js
    +++ b/assets/stop.html.c39fd416.js
    @@ -1 +1 @@
    -const t=JSON.parse('{"key":"v-bc0910b2","path":"/doc/stop.html","title":"stop","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/stop.md","version":"4.3.3"}');export{t as data};
    +const t=JSON.parse('{"key":"v-bc0910b2","path":"/doc/stop.html","title":"stop","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/stop.md","version":"4.3.5"}');export{t as data};
    diff --git a/assets/sysenv.html.f5be624d.js b/assets/sysenv.html.152ba8c4.js
    similarity index 88%
    rename from assets/sysenv.html.f5be624d.js
    rename to assets/sysenv.html.152ba8c4.js
    index f5d5eccd0..f26f3b1f8 100644
    --- a/assets/sysenv.html.f5be624d.js
    +++ b/assets/sysenv.html.152ba8c4.js
    @@ -1 +1 @@
    -const e=JSON.parse('{"key":"v-0333612e","path":"/doc/sysenv.html","title":"sysenv","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"\u67E5\u770B\u6240\u6709\u73AF\u5883\u53D8\u91CF","slug":"\u67E5\u770B\u6240\u6709\u73AF\u5883\u53D8\u91CF","link":"#\u67E5\u770B\u6240\u6709\u73AF\u5883\u53D8\u91CF","children":[]},{"level":3,"title":"\u67E5\u770B\u5355\u4E2A\u73AF\u5883\u53D8\u91CF","slug":"\u67E5\u770B\u5355\u4E2A\u73AF\u5883\u53D8\u91CF","link":"#\u67E5\u770B\u5355\u4E2A\u73AF\u5883\u53D8\u91CF","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/sysenv.md","version":"4.3.3"}');export{e as data};
    +const e=JSON.parse('{"key":"v-0333612e","path":"/doc/sysenv.html","title":"sysenv","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"\u67E5\u770B\u6240\u6709\u73AF\u5883\u53D8\u91CF","slug":"\u67E5\u770B\u6240\u6709\u73AF\u5883\u53D8\u91CF","link":"#\u67E5\u770B\u6240\u6709\u73AF\u5883\u53D8\u91CF","children":[]},{"level":3,"title":"\u67E5\u770B\u5355\u4E2A\u73AF\u5883\u53D8\u91CF","slug":"\u67E5\u770B\u5355\u4E2A\u73AF\u5883\u53D8\u91CF","link":"#\u67E5\u770B\u5355\u4E2A\u73AF\u5883\u53D8\u91CF","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/sysenv.md","version":"4.3.5"}');export{e as data};
    diff --git a/assets/sysenv.html.190ccd25.js b/assets/sysenv.html.33a80b4e.js
    similarity index 82%
    rename from assets/sysenv.html.190ccd25.js
    rename to assets/sysenv.html.33a80b4e.js
    index e14ba3638..b48251eb9 100644
    --- a/assets/sysenv.html.190ccd25.js
    +++ b/assets/sysenv.html.33a80b4e.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as a,c as d,a as e,b as l,e as n,d as r,r as v}from"./app.524ecf5c.js";const c={},t=e("h1",{id:"sysenv",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#sysenv","aria-hidden":"true"},"#"),n(" sysenv")],-1),m={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-sysenv",target:"_blank",rel:"noopener noreferrer"},u=e("code",null,"sysenv",-1),o=n(" online tutorial"),b=r(`

    TIP

    View the current JVM environment variables.

    Usage

     USAGE:
    +import{_ as e,o as n,c as i,d as s}from"./app.e2427bec.js";const a={},d=s(`

    sysenv

    TIP

    View the current JVM environment variables.

    Usage

     USAGE:
        sysenv [-h] [env-name]
     
      SUMMARY:
    @@ -49,4 +49,4 @@ import{_ as s,o as a,c as d,a as e,b as l,e as n,d as r,r as v}from"./app.524ecf
      AUTOJUMP_ERROR_PATH      /Users/admin/Library/autojump/errors.log
     

    View individual environment variables

    TIP

    Use tab for auto-completion

    $ sysenv USER
     USER=admin
    -
    `,8);function h(_,p){const i=v("ExternalLinkIcon");return a(),d("div",null,[t,e("p",null,[e("a",m,[u,o,l(i)])]),b])}const R=s(c,[["render",h],["__file","sysenv.html.vue"]]);export{R as default}; +
    `,9),l=[d];function v(r,c){return n(),i("div",null,l)}const t=e(a,[["render",v],["__file","sysenv.html.vue"]]);export{t as default}; diff --git a/assets/sysenv.html.0c3d74c0.js b/assets/sysenv.html.e76b6bf3.js similarity index 80% rename from assets/sysenv.html.0c3d74c0.js rename to assets/sysenv.html.e76b6bf3.js index 90d42b857..cad23fd3a 100644 --- a/assets/sysenv.html.0c3d74c0.js +++ b/assets/sysenv.html.e76b6bf3.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as d,a as e,b as l,e as n,d as r,r as v}from"./app.524ecf5c.js";const c={},t=e("h1",{id:"sysenv",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#sysenv","aria-hidden":"true"},"#"),n(" sysenv")],-1),m={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-sysenv",target:"_blank",rel:"noopener noreferrer"},u=e("code",null,"sysenv",-1),o=n("\u5728\u7EBF\u6559\u7A0B"),b=r(`

    \u63D0\u793A

    \u67E5\u770B\u5F53\u524D JVM \u7684\u73AF\u5883\u5C5E\u6027(System Environment Variables)

    \u4F7F\u7528\u53C2\u8003

     USAGE:
    +import{_ as e,o as n,c as i,d as s}from"./app.e2427bec.js";const d={},a=s(`

    sysenv

    \u63D0\u793A

    \u67E5\u770B\u5F53\u524D JVM \u7684\u73AF\u5883\u5C5E\u6027(System Environment Variables)

    \u4F7F\u7528\u53C2\u8003

     USAGE:
        sysenv [-h] [env-name]
     
      SUMMARY:
    @@ -49,4 +49,4 @@ import{_ as s,o as a,c as d,a as e,b as l,e as n,d as r,r as v}from"./app.524ecf
      AUTOJUMP_ERROR_PATH      /Users/admin/Library/autojump/errors.log
     

    \u67E5\u770B\u5355\u4E2A\u73AF\u5883\u53D8\u91CF

    \u63D0\u793A

    \u652F\u6301\u901A\u8FC7TAB\u952E\u81EA\u52A8\u8865\u5168

    $ sysenv USER
     USER=admin
    -
    `,8);function h(_,p){const i=v("ExternalLinkIcon");return a(),d("div",null,[t,e("p",null,[e("a",m,[u,o,l(i)])]),b])}const R=s(c,[["render",h],["__file","sysenv.html.vue"]]);export{R as default}; +
    `,9),l=[a];function r(v,c){return n(),i("div",null,l)}const t=e(d,[["render",r],["__file","sysenv.html.vue"]]);export{t as default}; diff --git a/assets/sysenv.html.416666a5.js b/assets/sysenv.html.f7014c3b.js similarity index 82% rename from assets/sysenv.html.416666a5.js rename to assets/sysenv.html.f7014c3b.js index 8e0d127b3..653deca6f 100644 --- a/assets/sysenv.html.416666a5.js +++ b/assets/sysenv.html.f7014c3b.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-645190d5","path":"/en/doc/sysenv.html","title":"sysenv","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"View all environment variables","slug":"view-all-environment-variables","link":"#view-all-environment-variables","children":[]},{"level":3,"title":"View individual environment variables","slug":"view-individual-environment-variables","link":"#view-individual-environment-variables","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/sysenv.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-645190d5","path":"/en/doc/sysenv.html","title":"sysenv","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"View all environment variables","slug":"view-all-environment-variables","link":"#view-all-environment-variables","children":[]},{"level":3,"title":"View individual environment variables","slug":"view-individual-environment-variables","link":"#view-individual-environment-variables","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/sysenv.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/sysprop.html.bd1fe463.js b/assets/sysprop.html.0dfbbffb.js similarity index 90% rename from assets/sysprop.html.bd1fe463.js rename to assets/sysprop.html.0dfbbffb.js index 886a599ca..b7e58345c 100644 --- a/assets/sysprop.html.bd1fe463.js +++ b/assets/sysprop.html.0dfbbffb.js @@ -1,4 +1,4 @@ -import{_ as a,o as s,c as r,a as e,b as d,e as n,d as l,r as v}from"./app.524ecf5c.js";const c={},t=e("h1",{id:"sysprop",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#sysprop","aria-hidden":"true"},"#"),n(" sysprop")],-1),o={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-sysprop",target:"_blank",rel:"noopener noreferrer"},u=e("code",null,"sysprop",-1),m=n("\u5728\u7EBF\u6559\u7A0B"),b=l(`

    \u63D0\u793A

    \u67E5\u770B\u5F53\u524D JVM \u7684\u7CFB\u7EDF\u5C5E\u6027(System Property)

    \u4F7F\u7528\u53C2\u8003

     USAGE:
    +import{_ as e,o as n,c as i,d as a}from"./app.e2427bec.js";const s={},r=a(`

    sysprop

    \u63D0\u793A

    \u67E5\u770B\u5F53\u524D JVM \u7684\u7CFB\u7EDF\u5C5E\u6027(System Property)

    \u4F7F\u7528\u53C2\u8003

     USAGE:
        sysprop [-h] [property-name] [property-value]
     
      SUMMARY:
    @@ -93,4 +93,4 @@ user.country=US
     $ sysprop user.country CN
     Successfully changed the system property.
     user.country=CN
    -
    `,10);function p(h,j){const i=v("ExternalLinkIcon");return s(),r("div",null,[t,e("p",null,[e("a",o,[u,m,d(i)])]),b])}const g=a(c,[["render",p],["__file","sysprop.html.vue"]]);export{g as default}; +
    `,11),d=[r];function v(l,c){return n(),i("div",null,d)}const o=e(s,[["render",v],["__file","sysprop.html.vue"]]);export{o as default}; diff --git a/assets/sysprop.html.8ac285ec.js b/assets/sysprop.html.93843170.js similarity index 83% rename from assets/sysprop.html.8ac285ec.js rename to assets/sysprop.html.93843170.js index 50012ed6e..73e995055 100644 --- a/assets/sysprop.html.8ac285ec.js +++ b/assets/sysprop.html.93843170.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-1f738fad","path":"/en/doc/sysprop.html","title":"sysprop","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"Check all properties","slug":"check-all-properties","link":"#check-all-properties","children":[]},{"level":3,"title":"Check One Single Property","slug":"check-one-single-property","link":"#check-one-single-property","children":[]},{"level":3,"title":"Modify Single Property","slug":"modify-single-property","link":"#modify-single-property","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/sysprop.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-1f738fad","path":"/en/doc/sysprop.html","title":"sysprop","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"Check all properties","slug":"check-all-properties","link":"#check-all-properties","children":[]},{"level":3,"title":"Check One Single Property","slug":"check-one-single-property","link":"#check-one-single-property","children":[]},{"level":3,"title":"Modify Single Property","slug":"modify-single-property","link":"#modify-single-property","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/sysprop.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/sysprop.html.c463bcd7.js b/assets/sysprop.html.ae3ef70a.js similarity index 91% rename from assets/sysprop.html.c463bcd7.js rename to assets/sysprop.html.ae3ef70a.js index 266bb4298..141b68f7b 100644 --- a/assets/sysprop.html.c463bcd7.js +++ b/assets/sysprop.html.ae3ef70a.js @@ -1,4 +1,4 @@ -import{_ as a,o as s,c as r,a as e,b as l,e as n,d,r as v}from"./app.524ecf5c.js";const t={},c=e("h1",{id:"sysprop",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#sysprop","aria-hidden":"true"},"#"),n(" sysprop")],-1),o={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-sysprop",target:"_blank",rel:"noopener noreferrer"},u=e("code",null,"sysprop",-1),m=n(" online tutorial"),b=d(`

    TIP

    Examine the system properties from the target JVM

    Usage

     USAGE:
    +import{_ as e,o as n,c as i,d as a}from"./app.e2427bec.js";const s={},r=a(`

    sysprop

    TIP

    Examine the system properties from the target JVM

    Usage

     USAGE:
        sysprop [-h] [property-name] [property-value]
     
      SUMMARY:
    @@ -93,4 +93,4 @@ user.country=US
     $ sysprop user.country CN
     Successfully changed the system property.
     user.country=CN
    -
    `,10);function p(h,j){const i=v("ExternalLinkIcon");return s(),r("div",null,[c,e("p",null,[e("a",o,[u,m,l(i)])]),b])}const g=a(t,[["render",p],["__file","sysprop.html.vue"]]);export{g as default}; +
    `,11),l=[r];function d(v,c){return n(),i("div",null,l)}const o=e(s,[["render",d],["__file","sysprop.html.vue"]]);export{o as default}; diff --git a/assets/sysprop.html.83009099.js b/assets/sysprop.html.f03585de.js similarity index 86% rename from assets/sysprop.html.83009099.js rename to assets/sysprop.html.f03585de.js index 381892013..ae352e11e 100644 --- a/assets/sysprop.html.83009099.js +++ b/assets/sysprop.html.f03585de.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-7012b8ce","path":"/doc/sysprop.html","title":"sysprop","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"\u67E5\u770B\u6240\u6709\u5C5E\u6027","slug":"\u67E5\u770B\u6240\u6709\u5C5E\u6027","link":"#\u67E5\u770B\u6240\u6709\u5C5E\u6027","children":[]},{"level":3,"title":"\u67E5\u770B\u5355\u4E2A\u5C5E\u6027","slug":"\u67E5\u770B\u5355\u4E2A\u5C5E\u6027","link":"#\u67E5\u770B\u5355\u4E2A\u5C5E\u6027","children":[]},{"level":3,"title":"\u4FEE\u6539\u5355\u4E2A\u5C5E\u6027","slug":"\u4FEE\u6539\u5355\u4E2A\u5C5E\u6027","link":"#\u4FEE\u6539\u5355\u4E2A\u5C5E\u6027","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/sysprop.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-7012b8ce","path":"/doc/sysprop.html","title":"sysprop","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"\u67E5\u770B\u6240\u6709\u5C5E\u6027","slug":"\u67E5\u770B\u6240\u6709\u5C5E\u6027","link":"#\u67E5\u770B\u6240\u6709\u5C5E\u6027","children":[]},{"level":3,"title":"\u67E5\u770B\u5355\u4E2A\u5C5E\u6027","slug":"\u67E5\u770B\u5355\u4E2A\u5C5E\u6027","link":"#\u67E5\u770B\u5355\u4E2A\u5C5E\u6027","children":[]},{"level":3,"title":"\u4FEE\u6539\u5355\u4E2A\u5C5E\u6027","slug":"\u4FEE\u6539\u5355\u4E2A\u5C5E\u6027","link":"#\u4FEE\u6539\u5355\u4E2A\u5C5E\u6027","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/sysprop.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/tee.html.14530271.js b/assets/tee.html.14530271.js deleted file mode 100644 index 7c94eb1ba..000000000 --- a/assets/tee.html.14530271.js +++ /dev/null @@ -1,18 +0,0 @@ -import{_ as a,o as s,c as t,a as e,b as l,e as n,d,r}from"./app.524ecf5c.js";const c={},o=e("h1",{id:"tee",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#tee","aria-hidden":"true"},"#"),n(" tee")],-1),v={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-tee",target:"_blank",rel:"noopener noreferrer"},m=e("code",null,"tee",-1),u=n("\u5728\u7EBF\u6559\u7A0B"),p=d(`

    \u63D0\u793A

    \u7C7B\u4F3C\u4F20\u7EDF\u7684tee\u547D\u4EE4, \u7528\u4E8E\u8BFB\u53D6\u6807\u51C6\u8F93\u5165\u7684\u6570\u636E\uFF0C\u5E76\u5C06\u5176\u5185\u5BB9\u8F93\u51FA\u6210\u6587\u4EF6\u3002

    tee \u6307\u4EE4\u4F1A\u4ECE\u6807\u51C6\u8F93\u5165\u8BBE\u5907\u8BFB\u53D6\u6570\u636E\uFF0C\u5C06\u5176\u5185\u5BB9\u8F93\u51FA\u5230\u6807\u51C6\u8F93\u51FA\u8BBE\u5907\uFF0C\u540C\u65F6\u4FDD\u5B58\u6210\u6587\u4EF6\u3002

    \u4F7F\u7528\u53C2\u8003

     USAGE:
    -   tee [-a] [-h] [file]
    -
    - SUMMARY:
    -   tee command for pipes.
    -
    - EXAMPLES:
    -  sysprop | tee /path/to/logfile | grep java
    -  sysprop | tee -a /path/to/logfile | grep java
    -
    - WIKI:
    -   https://arthas.aliyun.com/doc/tee
    -
    - OPTIONS:
    - -a, --append                              Append to file
    - -h, --help                                this help
    - <file>                                    File path
    -
    `,3);function h(_,b){const i=r("ExternalLinkIcon");return s(),t("div",null,[o,e("p",null,[e("a",v,[m,u,l(i)])]),p])}const g=a(c,[["render",h],["__file","tee.html.vue"]]);export{g as default}; diff --git a/assets/tee.html.26f3bf83.js b/assets/tee.html.26f3bf83.js deleted file mode 100644 index e0c2296eb..000000000 --- a/assets/tee.html.26f3bf83.js +++ /dev/null @@ -1,18 +0,0 @@ -import{_ as t,o as i,c as s,a as e,b as d,e as n,d as l,r}from"./app.524ecf5c.js";const o={},c=e("h1",{id:"tee",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#tee","aria-hidden":"true"},"#"),n(" tee")],-1),u={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-tee",target:"_blank",rel:"noopener noreferrer"},v=e("code",null,"tee",-1),m=n(" online tutorial"),p=l(`

    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

     USAGE:
    -   tee [-a] [-h] [file]
    -
    - SUMMARY:
    -   tee command for pipes.
    -
    - EXAMPLES:
    -  sysprop | tee /path/to/logfile | grep java
    -  sysprop | tee -a /path/to/logfile | grep java
    -
    - WIKI:
    -   https://arthas.aliyun.com/doc/tee
    -
    - OPTIONS:
    - -a, --append                              Append to file
    - -h, --help                                this help
    - <file>                                    File path
    -
    `,3);function h(_,b){const a=r("ExternalLinkIcon");return i(),s("div",null,[c,e("p",null,[e("a",u,[v,m,d(a)])]),p])}const g=t(o,[["render",h],["__file","tee.html.vue"]]);export{g as default}; diff --git a/assets/tee.html.26f6c8a9.js b/assets/tee.html.26f6c8a9.js new file mode 100644 index 000000000..72ee24bf9 --- /dev/null +++ b/assets/tee.html.26f6c8a9.js @@ -0,0 +1,18 @@ +import{_ as e,o as i,c as n,d as s}from"./app.e2427bec.js";const a={},d=s(`

    tee

    \u63D0\u793A

    \u7C7B\u4F3C\u4F20\u7EDF\u7684tee\u547D\u4EE4, \u7528\u4E8E\u8BFB\u53D6\u6807\u51C6\u8F93\u5165\u7684\u6570\u636E\uFF0C\u5E76\u5C06\u5176\u5185\u5BB9\u8F93\u51FA\u6210\u6587\u4EF6\u3002

    tee \u6307\u4EE4\u4F1A\u4ECE\u6807\u51C6\u8F93\u5165\u8BBE\u5907\u8BFB\u53D6\u6570\u636E\uFF0C\u5C06\u5176\u5185\u5BB9\u8F93\u51FA\u5230\u6807\u51C6\u8F93\u51FA\u8BBE\u5907\uFF0C\u540C\u65F6\u4FDD\u5B58\u6210\u6587\u4EF6\u3002

    \u4F7F\u7528\u53C2\u8003

     USAGE:
    +   tee [-a] [-h] [file]
    +
    + SUMMARY:
    +   tee command for pipes.
    +
    + EXAMPLES:
    +  sysprop | tee /path/to/logfile | grep java
    +  sysprop | tee -a /path/to/logfile | grep java
    +
    + WIKI:
    +   https://arthas.aliyun.com/doc/tee
    +
    + OPTIONS:
    + -a, --append                              Append to file
    + -h, --help                                this help
    + <file>                                    File path
    +
    `,4),l=[d];function t(c,r){return i(),n("div",null,l)}const o=e(a,[["render",t],["__file","tee.html.vue"]]);export{o as default}; diff --git a/assets/tee.html.ffedf5a9.js b/assets/tee.html.796f8441.js similarity index 68% rename from assets/tee.html.ffedf5a9.js rename to assets/tee.html.796f8441.js index 01b89088c..509105b12 100644 --- a/assets/tee.html.ffedf5a9.js +++ b/assets/tee.html.796f8441.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-049503c9","path":"/en/doc/tee.html","title":"tee","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/tee.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-049503c9","path":"/en/doc/tee.html","title":"tee","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/tee.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/tee.html.80593816.js b/assets/tee.html.80593816.js new file mode 100644 index 000000000..7d75a1360 --- /dev/null +++ b/assets/tee.html.80593816.js @@ -0,0 +1,18 @@ +import{_ as e,o as i,c as n,d as a}from"./app.e2427bec.js";const t={},d=a(`

    tee

    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

     USAGE:
    +   tee [-a] [-h] [file]
    +
    + SUMMARY:
    +   tee command for pipes.
    +
    + EXAMPLES:
    +  sysprop | tee /path/to/logfile | grep java
    +  sysprop | tee -a /path/to/logfile | grep java
    +
    + WIKI:
    +   https://arthas.aliyun.com/doc/tee
    +
    + OPTIONS:
    + -a, --append                              Append to file
    + -h, --help                                this help
    + <file>                                    File path
    +
    `,4),s=[d];function l(c,r){return i(),n("div",null,s)}const v=e(t,[["render",l],["__file","tee.html.vue"]]);export{v as default}; diff --git a/assets/tee.html.1fd68c76.js b/assets/tee.html.dccc689b.js similarity index 71% rename from assets/tee.html.1fd68c76.js rename to assets/tee.html.dccc689b.js index c2ea1c5a9..904e1b128 100644 --- a/assets/tee.html.1fd68c76.js +++ b/assets/tee.html.dccc689b.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-0536edb5","path":"/doc/tee.html","title":"tee","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/tee.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-0536edb5","path":"/doc/tee.html","title":"tee","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/tee.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/thread.html.0170c85f.js b/assets/thread.html.96dd9ac3.js similarity index 94% rename from assets/thread.html.0170c85f.js rename to assets/thread.html.96dd9ac3.js index 3cb2edd87..4492b30fa 100644 --- a/assets/thread.html.0170c85f.js +++ b/assets/thread.html.96dd9ac3.js @@ -1 +1 @@ -const e=JSON.parse(`{"key":"v-5da9140b","path":"/en/doc/thread.html","title":"thread","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Parameters","slug":"parameters","link":"#parameters","children":[]},{"level":2,"title":"How the CPU ratios are calculated?","slug":"how-the-cpu-ratios-are-calculated","link":"#how-the-cpu-ratios-are-calculated","children":[{"level":3,"title":"Working principle description:","slug":"working-principle-description","link":"#working-principle-description","children":[]}]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"List the top n busiest threads with detailed stack trace","slug":"list-the-top-n-busiest-threads-with-detailed-stack-trace","link":"#list-the-top-n-busiest-threads-with-detailed-stack-trace","children":[]},{"level":3,"title":"List first page threads' info when no options provided","slug":"list-first-page-threads-info-when-no-options-provided","link":"#list-first-page-threads-info-when-no-options-provided","children":[]},{"level":3,"title":"thread --all, show all matching threads","slug":"thread-all-show-all-matching-threads","link":"#thread-all-show-all-matching-threads","children":[]},{"level":3,"title":"thread id, show the running stack for the target thread","slug":"thread-id-show-the-running-stack-for-the-target-thread","link":"#thread-id-show-the-running-stack-for-the-target-thread","children":[]},{"level":3,"title":"thread -b, locate the thread bocking the others","slug":"thread-b-locate-the-thread-bocking-the-others","link":"#thread-b-locate-the-thread-bocking-the-others","children":[]},{"level":3,"title":"thread -i, specify the sampling interval","slug":"thread-i-specify-the-sampling-interval","link":"#thread-i-specify-the-sampling-interval","children":[]},{"level":3,"title":"thread --state , view the special state theads","slug":"thread-state-view-the-special-state-theads","link":"#thread-state-view-the-special-state-theads","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/thread.md","version":"4.3.3"}`);export{e as data}; +const e=JSON.parse(`{"key":"v-5da9140b","path":"/en/doc/thread.html","title":"thread","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Parameters","slug":"parameters","link":"#parameters","children":[]},{"level":2,"title":"How the CPU ratios are calculated?","slug":"how-the-cpu-ratios-are-calculated","link":"#how-the-cpu-ratios-are-calculated","children":[{"level":3,"title":"Working principle description:","slug":"working-principle-description","link":"#working-principle-description","children":[]}]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"List the top n busiest threads with detailed stack trace","slug":"list-the-top-n-busiest-threads-with-detailed-stack-trace","link":"#list-the-top-n-busiest-threads-with-detailed-stack-trace","children":[]},{"level":3,"title":"List first page threads' info when no options provided","slug":"list-first-page-threads-info-when-no-options-provided","link":"#list-first-page-threads-info-when-no-options-provided","children":[]},{"level":3,"title":"thread --all, show all matching threads","slug":"thread-all-show-all-matching-threads","link":"#thread-all-show-all-matching-threads","children":[]},{"level":3,"title":"thread id, show the running stack for the target thread","slug":"thread-id-show-the-running-stack-for-the-target-thread","link":"#thread-id-show-the-running-stack-for-the-target-thread","children":[]},{"level":3,"title":"thread -b, locate the thread bocking the others","slug":"thread-b-locate-the-thread-bocking-the-others","link":"#thread-b-locate-the-thread-bocking-the-others","children":[]},{"level":3,"title":"thread -i, specify the sampling interval","slug":"thread-i-specify-the-sampling-interval","link":"#thread-i-specify-the-sampling-interval","children":[]},{"level":3,"title":"thread --state , view the special state theads","slug":"thread-state-view-the-special-state-theads","link":"#thread-state-view-the-special-state-theads","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/thread.md","version":"4.3.5"}`);export{e as data}; diff --git a/assets/thread.html.553b1dd3.js b/assets/thread.html.bceb3488.js similarity index 86% rename from assets/thread.html.553b1dd3.js rename to assets/thread.html.bceb3488.js index bdecc1427..013306594 100644 --- a/assets/thread.html.553b1dd3.js +++ b/assets/thread.html.bceb3488.js @@ -1,4 +1,4 @@ -import{_ as r,o as c,c as i,a,b as s,w as l,e as n,d as e,r as p}from"./app.524ecf5c.js";const d={},u=a("h1",{id:"thread",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#thread","aria-hidden":"true"},"#"),n(" thread")],-1),m={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-thread",target:"_blank",rel:"noopener noreferrer"},h=a("code",null,"thread",-1),v=n(" online tutorial"),b=e('

    TIP

    Check the basic info and stack trace of the target thread.

    Parameters

    NameSpecification
    idthread id in JVM
    [n:]the top n busiest threads with stack traces printed
    [b]locate the thread blocking the others
    [i <value>]specify the interval to collect data to compute CPU ratios (ms)
    [--all]Show all matching threads

    How the CPU ratios are calculated?

    The cpu ratios here is similar to the thread %CPU of the linux command top -H -p <pid>. 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%

    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.

    ',8),k=n("Another way to view the thread cpu usage of the Java process, "),g={href:"https://github.com/oldratlee/useful-scripts/blob/dev-2.x/docs/java.md#-show-busy-java-threads",target:"_blank",rel:"noopener noreferrer"},T=a("code",null,"show-busy-java-threads",-1),f=n(" can come to help."),j=e(`

    Usage

    List the top n busiest threads with detailed stack trace

    $ thread -n 3
    +import{_ as c,o as r,c as i,a,b as s,w as o,d as e,e as n,r as l}from"./app.e2427bec.js";const d={},u=e('

    thread

    TIP

    Check the basic info and stack trace of the target thread.

    Parameters

    NameSpecification
    idthread id in JVM
    [n:]the top n busiest threads with stack traces printed
    [b]locate the thread blocking the others
    [i <value>]specify the interval to collect data to compute CPU ratios (ms)
    [--all]Show all matching threads

    How the CPU ratios are calculated?

    The cpu ratios here is similar to the thread %CPU of the linux command top -H -p <pid>. 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%

    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.

    ',9),m=n("Another way to view the thread cpu usage of the Java process, "),h={href:"https://github.com/oldratlee/useful-scripts/blob/dev-2.x/docs/java.md#-show-busy-java-threads",target:"_blank",rel:"noopener noreferrer"},v=a("code",null,"show-busy-java-threads",-1),b=n(" can come to help."),k=e(`

    Usage

    List the top n busiest threads with detailed stack trace

    $ thread -n 3
     "C1 CompilerThread0" [Internal] cpuUsage=1.63% deltaTime=3ms time=1170ms
     
     
    @@ -21,7 +21,7 @@ import{_ as r,o as c,c as i,a,b as s,w as l,e as n,d as e,r as p}from"./app.524e
     
     
     "VM Periodic Task Thread" [Internal] cpuUsage=0.07% deltaTime=0ms time=584ms
    -
    `,3),I=n("Without thread ID, including "),A=a("code",null,"[Internal]",-1),C=n(" means JVM internal thread, refer to the introduction of "),y=n("dashboard"),x=n(" command."),E=a("code",null,"cpuUsage",-1),_=n(" is the CPU usage of the thread during the sampling interval, consistent with the data of the "),N=n("dashboard"),P=n(" command."),w=a("li",null,[a("code",null,"deltaTime"),n(" 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.")],-1),S=a("li",null,[a("code",null,"time"),n(" The total CPU time of thread.")],-1),U=e(`

    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.

    $ thread
    +
    `,3),g=n("Without thread ID, including "),T=a("code",null,"[Internal]",-1),f=n(" means JVM internal thread, refer to the introduction of "),j=n("dashboard"),I=n(" command."),A=a("code",null,"cpuUsage",-1),C=n(" is the CPU usage of the thread during the sampling interval, consistent with the data of the "),y=n("dashboard"),x=n(" command."),E=a("li",null,[a("code",null,"deltaTime"),n(" 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.")],-1),N=a("li",null,[a("code",null,"time"),n(" The total CPU time of thread.")],-1),_=e(`

    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.

    $ thread
     Threads Total: 33, NEW: 0, RUNNABLE: 9, BLOCKED: 0, WAITING: 3, TIMED_WAITING: 4, TERMINATED: 0, Internal threads: 17
     ID   NAME                           GROUP          PRIORITY  STATE     %CPU      DELTA_TIME TIME      INTERRUPT DAEMON
     -1   C2 CompilerThread0             -              -1        -         5.06      0.010      0:0.973   false     true
    @@ -109,4 +109,4 @@ ID   NAME                           GROUP           PRIORITY   STATE     %CPU
     3    Finalizer                      system          8          WAITING   0.0       0.000      0:0.000   false      true
     20   arthas-UserStat                system          9          WAITING   0.0       0.000      0:0.001   false      true
     14   arthas-timer                   system          9          WAITING   0.0       0.000      0:0.000   false      true
    -
    `,18);function F(L,B){const t=p("ExternalLinkIcon"),o=p("RouterLink");return c(),i("div",null,[u,a("p",null,[a("a",m,[h,v,s(t)])]),b,a("blockquote",null,[a("p",null,[k,a("a",g,[T,s(t)]),f])]),j,a("ul",null,[a("li",null,[I,A,C,s(o,{to:"/en/doc/dashboard.html"},{default:l(()=>[y]),_:1}),x]),a("li",null,[E,_,s(o,{to:"/en/doc/dashboard.html"},{default:l(()=>[N]),_:1}),P]),w,S]),U])}const W=r(d,[["render",F],["__file","thread.html.vue"]]);export{W as default}; +
    `,18);function P(w,S){const p=l("ExternalLinkIcon"),t=l("RouterLink");return r(),i("div",null,[u,a("blockquote",null,[a("p",null,[m,a("a",h,[v,s(p)]),b])]),k,a("ul",null,[a("li",null,[g,T,f,s(t,{to:"/en/doc/dashboard.html"},{default:o(()=>[j]),_:1}),I]),a("li",null,[A,C,s(t,{to:"/en/doc/dashboard.html"},{default:o(()=>[y]),_:1}),x]),E,N]),_])}const F=c(d,[["render",P],["__file","thread.html.vue"]]);export{F as default}; diff --git a/assets/thread.html.1d083244.js b/assets/thread.html.c9f7c599.js similarity index 96% rename from assets/thread.html.1d083244.js rename to assets/thread.html.c9f7c599.js index bd3197942..05bd65ab5 100644 --- a/assets/thread.html.1d083244.js +++ b/assets/thread.html.c9f7c599.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-10845ac2","path":"/doc/thread.html","title":"thread","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"cpu \u4F7F\u7528\u7387\u662F\u5982\u4F55\u7EDF\u8BA1\u51FA\u6765\u7684\uFF1F","slug":"cpu-\u4F7F\u7528\u7387\u662F\u5982\u4F55\u7EDF\u8BA1\u51FA\u6765\u7684","link":"#cpu-\u4F7F\u7528\u7387\u662F\u5982\u4F55\u7EDF\u8BA1\u51FA\u6765\u7684","children":[{"level":3,"title":"\u5DE5\u4F5C\u539F\u7406\u8BF4\u660E\uFF1A","slug":"\u5DE5\u4F5C\u539F\u7406\u8BF4\u660E","link":"#\u5DE5\u4F5C\u539F\u7406\u8BF4\u660E","children":[]}]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"\u652F\u6301\u4E00\u952E\u5C55\u793A\u5F53\u524D\u6700\u5FD9\u7684\u524D N \u4E2A\u7EBF\u7A0B\u5E76\u6253\u5370\u5806\u6808\uFF1A","slug":"\u652F\u6301\u4E00\u952E\u5C55\u793A\u5F53\u524D\u6700\u5FD9\u7684\u524D-n-\u4E2A\u7EBF\u7A0B\u5E76\u6253\u5370\u5806\u6808","link":"#\u652F\u6301\u4E00\u952E\u5C55\u793A\u5F53\u524D\u6700\u5FD9\u7684\u524D-n-\u4E2A\u7EBF\u7A0B\u5E76\u6253\u5370\u5806\u6808","children":[]},{"level":3,"title":"\u5F53\u6CA1\u6709\u53C2\u6570\u65F6\uFF0C\u663E\u793A\u7B2C\u4E00\u9875\u7EBF\u7A0B\u7684\u4FE1\u606F","slug":"\u5F53\u6CA1\u6709\u53C2\u6570\u65F6-\u663E\u793A\u7B2C\u4E00\u9875\u7EBF\u7A0B\u7684\u4FE1\u606F","link":"#\u5F53\u6CA1\u6709\u53C2\u6570\u65F6-\u663E\u793A\u7B2C\u4E00\u9875\u7EBF\u7A0B\u7684\u4FE1\u606F","children":[]},{"level":3,"title":"thread --all, \u663E\u793A\u6240\u6709\u5339\u914D\u7684\u7EBF\u7A0B","slug":"thread-all-\u663E\u793A\u6240\u6709\u5339\u914D\u7684\u7EBF\u7A0B","link":"#thread-all-\u663E\u793A\u6240\u6709\u5339\u914D\u7684\u7EBF\u7A0B","children":[]},{"level":3,"title":"thread id, \u663E\u793A\u6307\u5B9A\u7EBF\u7A0B\u7684\u8FD0\u884C\u5806\u6808","slug":"thread-id-\u663E\u793A\u6307\u5B9A\u7EBF\u7A0B\u7684\u8FD0\u884C\u5806\u6808","link":"#thread-id-\u663E\u793A\u6307\u5B9A\u7EBF\u7A0B\u7684\u8FD0\u884C\u5806\u6808","children":[]},{"level":3,"title":"thread -b, \u627E\u51FA\u5F53\u524D\u963B\u585E\u5176\u4ED6\u7EBF\u7A0B\u7684\u7EBF\u7A0B","slug":"thread-b-\u627E\u51FA\u5F53\u524D\u963B\u585E\u5176\u4ED6\u7EBF\u7A0B\u7684\u7EBF\u7A0B","link":"#thread-b-\u627E\u51FA\u5F53\u524D\u963B\u585E\u5176\u4ED6\u7EBF\u7A0B\u7684\u7EBF\u7A0B","children":[]},{"level":3,"title":"thread -i, \u6307\u5B9A\u91C7\u6837\u65F6\u95F4\u95F4\u9694","slug":"thread-i-\u6307\u5B9A\u91C7\u6837\u65F6\u95F4\u95F4\u9694","link":"#thread-i-\u6307\u5B9A\u91C7\u6837\u65F6\u95F4\u95F4\u9694","children":[]},{"level":3,"title":"thread --state \uFF0C\u67E5\u770B\u6307\u5B9A\u72B6\u6001\u7684\u7EBF\u7A0B","slug":"thread-state-\u67E5\u770B\u6307\u5B9A\u72B6\u6001\u7684\u7EBF\u7A0B","link":"#thread-state-\u67E5\u770B\u6307\u5B9A\u72B6\u6001\u7684\u7EBF\u7A0B","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/thread.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-10845ac2","path":"/doc/thread.html","title":"thread","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"cpu \u4F7F\u7528\u7387\u662F\u5982\u4F55\u7EDF\u8BA1\u51FA\u6765\u7684\uFF1F","slug":"cpu-\u4F7F\u7528\u7387\u662F\u5982\u4F55\u7EDF\u8BA1\u51FA\u6765\u7684","link":"#cpu-\u4F7F\u7528\u7387\u662F\u5982\u4F55\u7EDF\u8BA1\u51FA\u6765\u7684","children":[{"level":3,"title":"\u5DE5\u4F5C\u539F\u7406\u8BF4\u660E\uFF1A","slug":"\u5DE5\u4F5C\u539F\u7406\u8BF4\u660E","link":"#\u5DE5\u4F5C\u539F\u7406\u8BF4\u660E","children":[]}]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"\u652F\u6301\u4E00\u952E\u5C55\u793A\u5F53\u524D\u6700\u5FD9\u7684\u524D N \u4E2A\u7EBF\u7A0B\u5E76\u6253\u5370\u5806\u6808\uFF1A","slug":"\u652F\u6301\u4E00\u952E\u5C55\u793A\u5F53\u524D\u6700\u5FD9\u7684\u524D-n-\u4E2A\u7EBF\u7A0B\u5E76\u6253\u5370\u5806\u6808","link":"#\u652F\u6301\u4E00\u952E\u5C55\u793A\u5F53\u524D\u6700\u5FD9\u7684\u524D-n-\u4E2A\u7EBF\u7A0B\u5E76\u6253\u5370\u5806\u6808","children":[]},{"level":3,"title":"\u5F53\u6CA1\u6709\u53C2\u6570\u65F6\uFF0C\u663E\u793A\u7B2C\u4E00\u9875\u7EBF\u7A0B\u7684\u4FE1\u606F","slug":"\u5F53\u6CA1\u6709\u53C2\u6570\u65F6-\u663E\u793A\u7B2C\u4E00\u9875\u7EBF\u7A0B\u7684\u4FE1\u606F","link":"#\u5F53\u6CA1\u6709\u53C2\u6570\u65F6-\u663E\u793A\u7B2C\u4E00\u9875\u7EBF\u7A0B\u7684\u4FE1\u606F","children":[]},{"level":3,"title":"thread --all, \u663E\u793A\u6240\u6709\u5339\u914D\u7684\u7EBF\u7A0B","slug":"thread-all-\u663E\u793A\u6240\u6709\u5339\u914D\u7684\u7EBF\u7A0B","link":"#thread-all-\u663E\u793A\u6240\u6709\u5339\u914D\u7684\u7EBF\u7A0B","children":[]},{"level":3,"title":"thread id, \u663E\u793A\u6307\u5B9A\u7EBF\u7A0B\u7684\u8FD0\u884C\u5806\u6808","slug":"thread-id-\u663E\u793A\u6307\u5B9A\u7EBF\u7A0B\u7684\u8FD0\u884C\u5806\u6808","link":"#thread-id-\u663E\u793A\u6307\u5B9A\u7EBF\u7A0B\u7684\u8FD0\u884C\u5806\u6808","children":[]},{"level":3,"title":"thread -b, \u627E\u51FA\u5F53\u524D\u963B\u585E\u5176\u4ED6\u7EBF\u7A0B\u7684\u7EBF\u7A0B","slug":"thread-b-\u627E\u51FA\u5F53\u524D\u963B\u585E\u5176\u4ED6\u7EBF\u7A0B\u7684\u7EBF\u7A0B","link":"#thread-b-\u627E\u51FA\u5F53\u524D\u963B\u585E\u5176\u4ED6\u7EBF\u7A0B\u7684\u7EBF\u7A0B","children":[]},{"level":3,"title":"thread -i, \u6307\u5B9A\u91C7\u6837\u65F6\u95F4\u95F4\u9694","slug":"thread-i-\u6307\u5B9A\u91C7\u6837\u65F6\u95F4\u95F4\u9694","link":"#thread-i-\u6307\u5B9A\u91C7\u6837\u65F6\u95F4\u95F4\u9694","children":[]},{"level":3,"title":"thread --state \uFF0C\u67E5\u770B\u6307\u5B9A\u72B6\u6001\u7684\u7EBF\u7A0B","slug":"thread-state-\u67E5\u770B\u6307\u5B9A\u72B6\u6001\u7684\u7EBF\u7A0B","link":"#thread-state-\u67E5\u770B\u6307\u5B9A\u72B6\u6001\u7684\u7EBF\u7A0B","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/thread.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/thread.html.3d486268.js b/assets/thread.html.f8f09dc5.js similarity index 82% rename from assets/thread.html.3d486268.js rename to assets/thread.html.f8f09dc5.js index 428eebbfd..f829e7ee8 100644 --- a/assets/thread.html.3d486268.js +++ b/assets/thread.html.f8f09dc5.js @@ -1,4 +1,4 @@ -import{_ as c,o as r,c as i,a,b as s,w as l,e as n,d as e,r as p}from"./app.524ecf5c.js";const u={},d=a("h1",{id:"thread",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#thread","aria-hidden":"true"},"#"),n(" thread")],-1),m={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-thread",target:"_blank",rel:"noopener noreferrer"},v=a("code",null,"thread",-1),b=n("\u5728\u7EBF\u6559\u7A0B"),k=e('

    \u63D0\u793A

    \u67E5\u770B\u5F53\u524D\u7EBF\u7A0B\u4FE1\u606F\uFF0C\u67E5\u770B\u7EBF\u7A0B\u7684\u5806\u6808

    \u53C2\u6570\u8BF4\u660E

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    id\u7EBF\u7A0B id
    [n:]\u6307\u5B9A\u6700\u5FD9\u7684\u524D N \u4E2A\u7EBF\u7A0B\u5E76\u6253\u5370\u5806\u6808
    [b]\u627E\u51FA\u5F53\u524D\u963B\u585E\u5176\u4ED6\u7EBF\u7A0B\u7684\u7EBF\u7A0B
    [i <value>]\u6307\u5B9A cpu \u4F7F\u7528\u7387\u7EDF\u8BA1\u7684\u91C7\u6837\u95F4\u9694\uFF0C\u5355\u4F4D\u4E3A\u6BEB\u79D2\uFF0C\u9ED8\u8BA4\u503C\u4E3A 200
    [--all]\u663E\u793A\u6240\u6709\u5339\u914D\u7684\u7EBF\u7A0B

    cpu \u4F7F\u7528\u7387\u662F\u5982\u4F55\u7EDF\u8BA1\u51FA\u6765\u7684\uFF1F

    \u8FD9\u91CC\u7684 cpu \u4F7F\u7528\u7387\u4E0E linux \u547D\u4EE4top -H -p <pid> \u7684\u7EBF\u7A0B%CPU\u7C7B\u4F3C\uFF0C\u4E00\u6BB5\u91C7\u6837\u95F4\u9694\u65F6\u95F4\u5185\uFF0C\u5F53\u524D JVM \u91CC\u5404\u4E2A\u7EBF\u7A0B\u7684\u589E\u91CF cpu \u65F6\u95F4\u4E0E\u91C7\u6837\u95F4\u9694\u65F6\u95F4\u7684\u6BD4\u4F8B\u3002

    \u5DE5\u4F5C\u539F\u7406\u8BF4\u660E\uFF1A

    • \u9996\u5148\u7B2C\u4E00\u6B21\u91C7\u6837\uFF0C\u83B7\u53D6\u6240\u6709\u7EBF\u7A0B\u7684 CPU \u65F6\u95F4(\u8C03\u7528\u7684\u662Fjava.lang.management.ThreadMXBean#getThreadCpuTime()\u53CAsun.management.HotspotThreadMBean.getInternalThreadCpuTimes()\u63A5\u53E3)
    • \u7136\u540E\u7761\u7720\u7B49\u5F85\u4E00\u4E2A\u95F4\u9694\u65F6\u95F4\uFF08\u9ED8\u8BA4\u4E3A 200ms\uFF0C\u53EF\u4EE5\u901A\u8FC7-i\u6307\u5B9A\u95F4\u9694\u65F6\u95F4\uFF09
    • \u518D\u6B21\u7B2C\u4E8C\u6B21\u91C7\u6837\uFF0C\u83B7\u53D6\u6240\u6709\u7EBF\u7A0B\u7684 CPU \u65F6\u95F4\uFF0C\u5BF9\u6BD4\u4E24\u6B21\u91C7\u6837\u6570\u636E\uFF0C\u8BA1\u7B97\u51FA\u6BCF\u4E2A\u7EBF\u7A0B\u7684\u589E\u91CF CPU \u65F6\u95F4
    • \u7EBF\u7A0B CPU \u4F7F\u7528\u7387 = \u7EBF\u7A0B\u589E\u91CF CPU \u65F6\u95F4 / \u91C7\u6837\u95F4\u9694\u65F6\u95F4 * 100%

    \u6CE8\u610F

    \u6CE8\u610F\uFF1A \u8FD9\u4E2A\u7EDF\u8BA1\u4E5F\u4F1A\u4EA7\u751F\u4E00\u5B9A\u7684\u5F00\u9500\uFF08JDK \u8FD9\u4E2A\u63A5\u53E3\u672C\u8EAB\u5F00\u9500\u6BD4\u8F83\u5927\uFF09\uFF0C\u56E0\u6B64\u4F1A\u770B\u5230 as \u7684\u7EBF\u7A0B\u5360\u7528\u4E00\u5B9A\u7684\u767E\u5206\u6BD4\uFF0C\u4E3A\u4E86\u964D\u4F4E\u7EDF\u8BA1\u81EA\u8EAB\u7684\u5F00\u9500\u5E26\u6765\u7684\u5F71\u54CD\uFF0C\u53EF\u4EE5\u628A\u91C7\u6837\u95F4\u9694\u62C9\u957F\u4E00\u4E9B\uFF0C\u6BD4\u5982 5000 \u6BEB\u79D2\u3002

    ',8),h={class:"custom-container tip"},g=a("p",{class:"custom-container-title"},"\u63D0\u793A",-1),T=n("\u53E6\u5916\u4E00\u79CD\u67E5\u770B Java \u8FDB\u7A0B\u7684\u7EBF\u7A0B cpu \u4F7F\u7528\u7387\u65B9\u6CD5\uFF1A\u53EF\u4EE5\u4F7F\u7528"),j={href:"https://github.com/oldratlee/useful-scripts/blob/dev-2.x/docs/java.md#-show-busy-java-threads",target:"_blank",rel:"noopener noreferrer"},I=a("code",null,"show-busy-java-threads",-1),A=n("\u8FD9\u4E2A\u811A\u672C\u3002"),C=e(`

    \u4F7F\u7528\u53C2\u8003

    \u652F\u6301\u4E00\u952E\u5C55\u793A\u5F53\u524D\u6700\u5FD9\u7684\u524D N \u4E2A\u7EBF\u7A0B\u5E76\u6253\u5370\u5806\u6808\uFF1A

    $ thread -n 3
    +import{_ as c,o as r,c as i,a,b as s,w as o,d as e,e as n,r as l}from"./app.e2427bec.js";const u={},d=e('

    thread

    \u63D0\u793A

    \u67E5\u770B\u5F53\u524D\u7EBF\u7A0B\u4FE1\u606F\uFF0C\u67E5\u770B\u7EBF\u7A0B\u7684\u5806\u6808

    \u53C2\u6570\u8BF4\u660E

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    id\u7EBF\u7A0B id
    [n:]\u6307\u5B9A\u6700\u5FD9\u7684\u524D N \u4E2A\u7EBF\u7A0B\u5E76\u6253\u5370\u5806\u6808
    [b]\u627E\u51FA\u5F53\u524D\u963B\u585E\u5176\u4ED6\u7EBF\u7A0B\u7684\u7EBF\u7A0B
    [i <value>]\u6307\u5B9A cpu \u4F7F\u7528\u7387\u7EDF\u8BA1\u7684\u91C7\u6837\u95F4\u9694\uFF0C\u5355\u4F4D\u4E3A\u6BEB\u79D2\uFF0C\u9ED8\u8BA4\u503C\u4E3A 200
    [--all]\u663E\u793A\u6240\u6709\u5339\u914D\u7684\u7EBF\u7A0B

    cpu \u4F7F\u7528\u7387\u662F\u5982\u4F55\u7EDF\u8BA1\u51FA\u6765\u7684\uFF1F

    \u8FD9\u91CC\u7684 cpu \u4F7F\u7528\u7387\u4E0E linux \u547D\u4EE4top -H -p <pid> \u7684\u7EBF\u7A0B%CPU\u7C7B\u4F3C\uFF0C\u4E00\u6BB5\u91C7\u6837\u95F4\u9694\u65F6\u95F4\u5185\uFF0C\u5F53\u524D JVM \u91CC\u5404\u4E2A\u7EBF\u7A0B\u7684\u589E\u91CF cpu \u65F6\u95F4\u4E0E\u91C7\u6837\u95F4\u9694\u65F6\u95F4\u7684\u6BD4\u4F8B\u3002

    \u5DE5\u4F5C\u539F\u7406\u8BF4\u660E\uFF1A

    • \u9996\u5148\u7B2C\u4E00\u6B21\u91C7\u6837\uFF0C\u83B7\u53D6\u6240\u6709\u7EBF\u7A0B\u7684 CPU \u65F6\u95F4(\u8C03\u7528\u7684\u662Fjava.lang.management.ThreadMXBean#getThreadCpuTime()\u53CAsun.management.HotspotThreadMBean.getInternalThreadCpuTimes()\u63A5\u53E3)
    • \u7136\u540E\u7761\u7720\u7B49\u5F85\u4E00\u4E2A\u95F4\u9694\u65F6\u95F4\uFF08\u9ED8\u8BA4\u4E3A 200ms\uFF0C\u53EF\u4EE5\u901A\u8FC7-i\u6307\u5B9A\u95F4\u9694\u65F6\u95F4\uFF09
    • \u518D\u6B21\u7B2C\u4E8C\u6B21\u91C7\u6837\uFF0C\u83B7\u53D6\u6240\u6709\u7EBF\u7A0B\u7684 CPU \u65F6\u95F4\uFF0C\u5BF9\u6BD4\u4E24\u6B21\u91C7\u6837\u6570\u636E\uFF0C\u8BA1\u7B97\u51FA\u6BCF\u4E2A\u7EBF\u7A0B\u7684\u589E\u91CF CPU \u65F6\u95F4
    • \u7EBF\u7A0B CPU \u4F7F\u7528\u7387 = \u7EBF\u7A0B\u589E\u91CF CPU \u65F6\u95F4 / \u91C7\u6837\u95F4\u9694\u65F6\u95F4 * 100%

    \u6CE8\u610F

    \u6CE8\u610F\uFF1A \u8FD9\u4E2A\u7EDF\u8BA1\u4E5F\u4F1A\u4EA7\u751F\u4E00\u5B9A\u7684\u5F00\u9500\uFF08JDK \u8FD9\u4E2A\u63A5\u53E3\u672C\u8EAB\u5F00\u9500\u6BD4\u8F83\u5927\uFF09\uFF0C\u56E0\u6B64\u4F1A\u770B\u5230 as \u7684\u7EBF\u7A0B\u5360\u7528\u4E00\u5B9A\u7684\u767E\u5206\u6BD4\uFF0C\u4E3A\u4E86\u964D\u4F4E\u7EDF\u8BA1\u81EA\u8EAB\u7684\u5F00\u9500\u5E26\u6765\u7684\u5F71\u54CD\uFF0C\u53EF\u4EE5\u628A\u91C7\u6837\u95F4\u9694\u62C9\u957F\u4E00\u4E9B\uFF0C\u6BD4\u5982 5000 \u6BEB\u79D2\u3002

    ',9),m={class:"custom-container tip"},v=a("p",{class:"custom-container-title"},"\u63D0\u793A",-1),b=n("\u53E6\u5916\u4E00\u79CD\u67E5\u770B Java \u8FDB\u7A0B\u7684\u7EBF\u7A0B cpu \u4F7F\u7528\u7387\u65B9\u6CD5\uFF1A\u53EF\u4EE5\u4F7F\u7528"),k={href:"https://github.com/oldratlee/useful-scripts/blob/dev-2.x/docs/java.md#-show-busy-java-threads",target:"_blank",rel:"noopener noreferrer"},h=a("code",null,"show-busy-java-threads",-1),T=n("\u8FD9\u4E2A\u811A\u672C\u3002"),g=e(`

    \u4F7F\u7528\u53C2\u8003

    \u652F\u6301\u4E00\u952E\u5C55\u793A\u5F53\u524D\u6700\u5FD9\u7684\u524D N \u4E2A\u7EBF\u7A0B\u5E76\u6253\u5370\u5806\u6808\uFF1A

    $ thread -n 3
     "C1 CompilerThread0" [Internal] cpuUsage=1.63% deltaTime=3ms time=1170ms
     
     
    @@ -21,7 +21,7 @@ import{_ as c,o as r,c as i,a,b as s,w as l,e as n,d as e,r as p}from"./app.524e
     
     
     "VM Periodic Task Thread" [Internal] cpuUsage=0.07% deltaTime=0ms time=584ms
    -
    `,3),f=n("\u6CA1\u6709\u7EBF\u7A0B ID\uFF0C\u5305\u542B"),_=a("code",null,"[Internal]",-1),x=n("\u8868\u793A\u4E3A JVM \u5185\u90E8\u7EBF\u7A0B\uFF0C\u53C2\u8003"),E=n("dashboard"),N=n("\u547D\u4EE4\u7684\u4ECB\u7ECD\u3002"),y=a("code",null,"cpuUsage",-1),P=n("\u4E3A\u91C7\u6837\u95F4\u9694\u65F6\u95F4\u5185\u7EBF\u7A0B\u7684 CPU \u4F7F\u7528\u7387\uFF0C\u4E0E"),F=n("dashboard"),S=n("\u547D\u4EE4\u7684\u6570\u636E\u4E00\u81F4\u3002"),U=a("li",null,[a("code",null,"deltaTime"),n("\u4E3A\u91C7\u6837\u95F4\u9694\u65F6\u95F4\u5185\u7EBF\u7A0B\u7684\u589E\u91CF CPU \u65F6\u95F4\uFF0C\u5C0F\u4E8E 1ms \u65F6\u88AB\u53D6\u6574\u663E\u793A\u4E3A 0ms\u3002")],-1),L=a("li",null,[a("code",null,"time"),n(" \u7EBF\u7A0B\u8FD0\u884C\u603B CPU \u65F6\u95F4\u3002")],-1),R=e(`

    \u6CE8\u610F\uFF1A\u7EBF\u7A0B\u6808\u4E3A\u7B2C\u4E8C\u91C7\u6837\u7ED3\u675F\u65F6\u83B7\u53D6\uFF0C\u4E0D\u80FD\u8868\u660E\u91C7\u6837\u95F4\u9694\u65F6\u95F4\u5185\u8BE5\u7EBF\u7A0B\u90FD\u662F\u5728\u5904\u7406\u76F8\u540C\u7684\u4EFB\u52A1\u3002\u5EFA\u8BAE\u95F4\u9694\u65F6\u95F4\u4E0D\u8981\u592A\u957F\uFF0C\u53EF\u80FD\u95F4\u9694\u65F6\u95F4\u8D8A\u5927\u8D8A\u4E0D\u51C6\u786E\u3002 \u53EF\u4EE5\u6839\u636E\u5177\u4F53\u60C5\u51B5\u5C1D\u8BD5\u6307\u5B9A\u4E0D\u540C\u7684\u95F4\u9694\u65F6\u95F4\uFF0C\u89C2\u5BDF\u8F93\u51FA\u7ED3\u679C\u3002

    \u5F53\u6CA1\u6709\u53C2\u6570\u65F6\uFF0C\u663E\u793A\u7B2C\u4E00\u9875\u7EBF\u7A0B\u7684\u4FE1\u606F

    \u9ED8\u8BA4\u6309\u7167 CPU \u589E\u91CF\u65F6\u95F4\u964D\u5E8F\u6392\u5217\uFF0C\u53EA\u663E\u793A\u7B2C\u4E00\u9875\u6570\u636E\u3002

    $ thread
    +
    `,3),j=n("\u6CA1\u6709\u7EBF\u7A0B ID\uFF0C\u5305\u542B"),I=a("code",null,"[Internal]",-1),A=n("\u8868\u793A\u4E3A JVM \u5185\u90E8\u7EBF\u7A0B\uFF0C\u53C2\u8003"),C=n("dashboard"),f=n("\u547D\u4EE4\u7684\u4ECB\u7ECD\u3002"),x=a("code",null,"cpuUsage",-1),E=n("\u4E3A\u91C7\u6837\u95F4\u9694\u65F6\u95F4\u5185\u7EBF\u7A0B\u7684 CPU \u4F7F\u7528\u7387\uFF0C\u4E0E"),_=n("dashboard"),N=n("\u547D\u4EE4\u7684\u6570\u636E\u4E00\u81F4\u3002"),y=a("li",null,[a("code",null,"deltaTime"),n("\u4E3A\u91C7\u6837\u95F4\u9694\u65F6\u95F4\u5185\u7EBF\u7A0B\u7684\u589E\u91CF CPU \u65F6\u95F4\uFF0C\u5C0F\u4E8E 1ms \u65F6\u88AB\u53D6\u6574\u663E\u793A\u4E3A 0ms\u3002")],-1),P=a("li",null,[a("code",null,"time"),n(" \u7EBF\u7A0B\u8FD0\u884C\u603B CPU \u65F6\u95F4\u3002")],-1),F=e(`

    \u6CE8\u610F\uFF1A\u7EBF\u7A0B\u6808\u4E3A\u7B2C\u4E8C\u91C7\u6837\u7ED3\u675F\u65F6\u83B7\u53D6\uFF0C\u4E0D\u80FD\u8868\u660E\u91C7\u6837\u95F4\u9694\u65F6\u95F4\u5185\u8BE5\u7EBF\u7A0B\u90FD\u662F\u5728\u5904\u7406\u76F8\u540C\u7684\u4EFB\u52A1\u3002\u5EFA\u8BAE\u95F4\u9694\u65F6\u95F4\u4E0D\u8981\u592A\u957F\uFF0C\u53EF\u80FD\u95F4\u9694\u65F6\u95F4\u8D8A\u5927\u8D8A\u4E0D\u51C6\u786E\u3002 \u53EF\u4EE5\u6839\u636E\u5177\u4F53\u60C5\u51B5\u5C1D\u8BD5\u6307\u5B9A\u4E0D\u540C\u7684\u95F4\u9694\u65F6\u95F4\uFF0C\u89C2\u5BDF\u8F93\u51FA\u7ED3\u679C\u3002

    \u5F53\u6CA1\u6709\u53C2\u6570\u65F6\uFF0C\u663E\u793A\u7B2C\u4E00\u9875\u7EBF\u7A0B\u7684\u4FE1\u606F

    \u9ED8\u8BA4\u6309\u7167 CPU \u589E\u91CF\u65F6\u95F4\u964D\u5E8F\u6392\u5217\uFF0C\u53EA\u663E\u793A\u7B2C\u4E00\u9875\u6570\u636E\u3002

    $ thread
     Threads Total: 33, NEW: 0, RUNNABLE: 9, BLOCKED: 0, WAITING: 3, TIMED_WAITING: 4, TERMINATED: 0, Internal threads: 17
     ID   NAME                           GROUP          PRIORITY  STATE     %CPU      DELTA_TIME TIME      INTERRUPT DAEMON
     -1   C2 CompilerThread0             -              -1        -         5.06      0.010      0:0.973   false     true
    @@ -109,4 +109,4 @@ ID   NAME                           GROUP           PRIORITY   STATE     %CPU
     3    Finalizer                      system          8          WAITING   0.0       0.000      0:0.000   false      true
     20   arthas-UserStat                system          9          WAITING   0.0       0.000      0:0.001   false      true
     14   arthas-timer                   system          9          WAITING   0.0       0.000      0:0.000   false      true
    -
    `,17);function B(W,$){const t=p("ExternalLinkIcon"),o=p("RouterLink");return r(),i("div",null,[d,a("p",null,[a("a",m,[v,b,s(t)])]),k,a("div",h,[g,a("p",null,[T,a("a",j,[I,s(t)]),A])]),C,a("ul",null,[a("li",null,[f,_,x,s(o,{to:"/doc/dashboard.html"},{default:l(()=>[E]),_:1}),N]),a("li",null,[y,P,s(o,{to:"/doc/dashboard.html"},{default:l(()=>[F]),_:1}),S]),U,L]),R])}const M=c(u,[["render",B],["__file","thread.html.vue"]]);export{M as default}; +
    `,17);function S(U,L){const p=l("ExternalLinkIcon"),t=l("RouterLink");return r(),i("div",null,[d,a("div",m,[v,a("p",null,[b,a("a",k,[h,s(p)]),T])]),g,a("ul",null,[a("li",null,[j,I,A,s(t,{to:"/doc/dashboard.html"},{default:o(()=>[C]),_:1}),f]),a("li",null,[x,E,s(t,{to:"/doc/dashboard.html"},{default:o(()=>[_]),_:1}),N]),y,P]),F])}const B=c(u,[["render",S],["__file","thread.html.vue"]]);export{B as default}; diff --git a/assets/trace.html.1fba9aaf.js b/assets/trace.html.05e818e5.js similarity index 95% rename from assets/trace.html.1fba9aaf.js rename to assets/trace.html.05e818e5.js index ad3b0fdb9..90555ec2f 100644 --- a/assets/trace.html.1fba9aaf.js +++ b/assets/trace.html.05e818e5.js @@ -1 +1 @@ -const l=JSON.parse('{"key":"v-65d67724","path":"/doc/trace.html","title":"trace","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u6CE8\u610F\u4E8B\u9879","slug":"\u6CE8\u610F\u4E8B\u9879","link":"#\u6CE8\u610F\u4E8B\u9879","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"\u542F\u52A8 Demo","slug":"\u542F\u52A8-demo","link":"#\u542F\u52A8-demo","children":[]},{"level":3,"title":"trace \u51FD\u6570","slug":"trace-\u51FD\u6570","link":"#trace-\u51FD\u6570","children":[]},{"level":3,"title":"\u6307\u5B9A Class \u5339\u914D\u7684\u6700\u5927\u6570\u91CF","slug":"\u6307\u5B9A-class-\u5339\u914D\u7684\u6700\u5927\u6570\u91CF","link":"#\u6307\u5B9A-class-\u5339\u914D\u7684\u6700\u5927\u6570\u91CF","children":[]},{"level":3,"title":"\u6307\u5B9A ClassLoader \u589E\u5F3A","slug":"\u6307\u5B9A-classloader-\u589E\u5F3A","link":"#\u6307\u5B9A-classloader-\u589E\u5F3A","children":[]},{"level":3,"title":"trace \u6B21\u6570\u9650\u5236","slug":"trace-\u6B21\u6570\u9650\u5236","link":"#trace-\u6B21\u6570\u9650\u5236","children":[]},{"level":3,"title":"\u5305\u542B jdk \u7684\u51FD\u6570","slug":"\u5305\u542B-jdk-\u7684\u51FD\u6570","link":"#\u5305\u542B-jdk-\u7684\u51FD\u6570","children":[]},{"level":3,"title":"\u6839\u636E\u8C03\u7528\u8017\u65F6\u8FC7\u6EE4","slug":"\u6839\u636E\u8C03\u7528\u8017\u65F6\u8FC7\u6EE4","link":"#\u6839\u636E\u8C03\u7528\u8017\u65F6\u8FC7\u6EE4","children":[]},{"level":3,"title":"trace \u591A\u4E2A\u7C7B\u6216\u8005\u591A\u4E2A\u51FD\u6570","slug":"trace-\u591A\u4E2A\u7C7B\u6216\u8005\u591A\u4E2A\u51FD\u6570","link":"#trace-\u591A\u4E2A\u7C7B\u6216\u8005\u591A\u4E2A\u51FD\u6570","children":[]},{"level":3,"title":"\u6392\u9664\u6389\u6307\u5B9A\u7684\u7C7B","slug":"\u6392\u9664\u6389\u6307\u5B9A\u7684\u7C7B","link":"#\u6392\u9664\u6389\u6307\u5B9A\u7684\u7C7B","children":[]}]},{"level":2,"title":"\u52A8\u6001 trace","slug":"\u52A8\u6001-trace","link":"#\u52A8\u6001-trace","children":[]},{"level":2,"title":"trace \u7ED3\u679C\u65F6\u95F4\u4E0D\u51C6\u786E\u95EE\u9898","slug":"trace-\u7ED3\u679C\u65F6\u95F4\u4E0D\u51C6\u786E\u95EE\u9898","link":"#trace-\u7ED3\u679C\u65F6\u95F4\u4E0D\u51C6\u786E\u95EE\u9898","children":[{"level":3,"title":"\u4F7F\u7528 -v \u53C2\u6570\u6253\u5370\u66F4\u591A\u4FE1\u606F","slug":"\u4F7F\u7528-v-\u53C2\u6570\u6253\u5370\u66F4\u591A\u4FE1\u606F","link":"#\u4F7F\u7528-v-\u53C2\u6570\u6253\u5370\u66F4\u591A\u4FE1\u606F","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/trace.md","version":"4.3.3"}');export{l as data}; +const l=JSON.parse('{"key":"v-65d67724","path":"/doc/trace.html","title":"trace","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u6CE8\u610F\u4E8B\u9879","slug":"\u6CE8\u610F\u4E8B\u9879","link":"#\u6CE8\u610F\u4E8B\u9879","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"\u542F\u52A8 Demo","slug":"\u542F\u52A8-demo","link":"#\u542F\u52A8-demo","children":[]},{"level":3,"title":"trace \u51FD\u6570","slug":"trace-\u51FD\u6570","link":"#trace-\u51FD\u6570","children":[]},{"level":3,"title":"\u6307\u5B9A Class \u5339\u914D\u7684\u6700\u5927\u6570\u91CF","slug":"\u6307\u5B9A-class-\u5339\u914D\u7684\u6700\u5927\u6570\u91CF","link":"#\u6307\u5B9A-class-\u5339\u914D\u7684\u6700\u5927\u6570\u91CF","children":[]},{"level":3,"title":"\u6307\u5B9A ClassLoader \u589E\u5F3A","slug":"\u6307\u5B9A-classloader-\u589E\u5F3A","link":"#\u6307\u5B9A-classloader-\u589E\u5F3A","children":[]},{"level":3,"title":"trace \u6B21\u6570\u9650\u5236","slug":"trace-\u6B21\u6570\u9650\u5236","link":"#trace-\u6B21\u6570\u9650\u5236","children":[]},{"level":3,"title":"\u5305\u542B jdk \u7684\u51FD\u6570","slug":"\u5305\u542B-jdk-\u7684\u51FD\u6570","link":"#\u5305\u542B-jdk-\u7684\u51FD\u6570","children":[]},{"level":3,"title":"\u6839\u636E\u8C03\u7528\u8017\u65F6\u8FC7\u6EE4","slug":"\u6839\u636E\u8C03\u7528\u8017\u65F6\u8FC7\u6EE4","link":"#\u6839\u636E\u8C03\u7528\u8017\u65F6\u8FC7\u6EE4","children":[]},{"level":3,"title":"trace \u591A\u4E2A\u7C7B\u6216\u8005\u591A\u4E2A\u51FD\u6570","slug":"trace-\u591A\u4E2A\u7C7B\u6216\u8005\u591A\u4E2A\u51FD\u6570","link":"#trace-\u591A\u4E2A\u7C7B\u6216\u8005\u591A\u4E2A\u51FD\u6570","children":[]},{"level":3,"title":"\u6392\u9664\u6389\u6307\u5B9A\u7684\u7C7B","slug":"\u6392\u9664\u6389\u6307\u5B9A\u7684\u7C7B","link":"#\u6392\u9664\u6389\u6307\u5B9A\u7684\u7C7B","children":[]}]},{"level":2,"title":"\u52A8\u6001 trace","slug":"\u52A8\u6001-trace","link":"#\u52A8\u6001-trace","children":[]},{"level":2,"title":"trace \u7ED3\u679C\u65F6\u95F4\u4E0D\u51C6\u786E\u95EE\u9898","slug":"trace-\u7ED3\u679C\u65F6\u95F4\u4E0D\u51C6\u786E\u95EE\u9898","link":"#trace-\u7ED3\u679C\u65F6\u95F4\u4E0D\u51C6\u786E\u95EE\u9898","children":[{"level":3,"title":"\u4F7F\u7528 -v \u53C2\u6570\u6253\u5370\u66F4\u591A\u4FE1\u606F","slug":"\u4F7F\u7528-v-\u53C2\u6570\u6253\u5370\u66F4\u591A\u4FE1\u606F","link":"#\u4F7F\u7528-v-\u53C2\u6570\u6253\u5370\u66F4\u591A\u4FE1\u606F","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/trace.md","version":"4.3.5"}');export{l as data}; diff --git a/assets/trace.html.2d811f32.js b/assets/trace.html.27ac97ec.js similarity index 87% rename from assets/trace.html.2d811f32.js rename to assets/trace.html.27ac97ec.js index 672eec5ab..33dbd9981 100644 --- a/assets/trace.html.2d811f32.js +++ b/assets/trace.html.27ac97ec.js @@ -1,4 +1,4 @@ -import{_ as l,o as i,c as r,a as s,b as n,w as p,e as a,d as c,r as o}from"./app.524ecf5c.js";const u={},k=s("h1",{id:"trace",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#trace","aria-hidden":"true"},"#"),a(" trace")],-1),d={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-trace",target:"_blank",rel:"noopener noreferrer"},m=s("code",null,"trace",-1),b=a("\u5728\u7EBF\u6559\u7A0B"),v=c('

    \u63D0\u793A

    \u65B9\u6CD5\u5185\u90E8\u8C03\u7528\u8DEF\u5F84\uFF0C\u5E76\u8F93\u51FA\u65B9\u6CD5\u8DEF\u5F84\u4E0A\u7684\u6BCF\u4E2A\u8282\u70B9\u4E0A\u8017\u65F6

    trace \u547D\u4EE4\u80FD\u4E3B\u52A8\u641C\u7D22 class-pattern\uFF0Fmethod-pattern \u5BF9\u5E94\u7684\u65B9\u6CD5\u8C03\u7528\u8DEF\u5F84\uFF0C\u6E32\u67D3\u548C\u7EDF\u8BA1\u6574\u4E2A\u8C03\u7528\u94FE\u8DEF\u4E0A\u7684\u6240\u6709\u6027\u80FD\u5F00\u9500\u548C\u8FFD\u8E2A\u8C03\u7528\u94FE\u8DEF\u3002

    \u53C2\u6570\u8BF4\u660E

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    class-pattern\u7C7B\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    method-pattern\u65B9\u6CD5\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    condition-express\u6761\u4EF6\u8868\u8FBE\u5F0F
    [E]\u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u4E3A\u901A\u914D\u7B26\u5339\u914D
    [n:]\u547D\u4EE4\u6267\u884C\u6B21\u6570\uFF0C\u9ED8\u8BA4\u503C\u4E3A 100\u3002
    #cost\u65B9\u6CD5\u6267\u884C\u8017\u65F6
    [c:]\u6307\u5B9A classloader hash\uFF0C\u53EA\u589E\u5F3A\u8BE5 classloader \u52A0\u8F7D\u7684\u7C7B
    [m <arg>]\u6307\u5B9A Class \u6700\u5927\u5339\u914D\u6570\u91CF\uFF0C\u9ED8\u8BA4\u503C\u4E3A 50\u3002\u957F\u683C\u5F0F\u4E3A[maxMatch <arg>]\u3002

    \u8FD9\u91CC\u91CD\u70B9\u8981\u8BF4\u660E\u7684\u662F\u6761\u4EF6\u8868\u8FBE\u5F0F\uFF0C\u6761\u4EF6\u8868\u8FBE\u5F0F\u7684\u6784\u6210\u4E3B\u8981\u7531 \bognl \u8868\u8FBE\u5F0F\u7EC4\u6210\uFF0C\u6240\u4EE5\u4F60\u53EF\u4EE5\u8FD9\u6837\u5199"params[0]<0"\uFF0C\u53EA\u8981\u662F\u4E00\u4E2A\u5408\u6CD5\u7684 ognl \u8868\u8FBE\u5F0F\uFF0C\u90FD\u80FD\u88AB\u6B63\u5E38\u652F\u6301\u3002

    ',5),h=a("\u8BF7\u53C2\u8003"),g=a("\u8868\u8FBE\u5F0F\u6838\u5FC3\u53D8\u91CF"),f=a("\u4E2D\u5173\u4E8E\u8BE5\u8282\u70B9\u7684\u63CF\u8FF0\u3002"),_=a("\u7279\u6B8A\u7528\u6CD5\u8BF7\u53C2\u8003\uFF1A"),x={href:"https://github.com/alibaba/arthas/issues/71",target:"_blank",rel:"noopener noreferrer"},C=a("https://github.com/alibaba/arthas/issues/71"),M=a("OGNL \u8868\u8FBE\u5F0F\u5B98\u7F51\uFF1A"),L={href:"https://commons.apache.org/dormant/commons-ognl/language-guide.html",target:"_blank",rel:"noopener noreferrer"},y=a("https://commons.apache.org/dormant/commons-ognl/language-guide.html"),G=s("p",null,[a("\u5F88\u591A\u65F6\u5019\u6211\u4EEC\u53EA\u60F3\u770B\u5230\u67D0\u4E2A\u65B9\u6CD5\u7684 rt \u5927\u4E8E\u67D0\u4E2A\u65F6\u95F4\u4E4B\u540E\u7684 trace \u7ED3\u679C\uFF0C\u73B0\u5728 Arthas \u53EF\u4EE5\u6309\u7167\u65B9\u6CD5\u6267\u884C\u7684\u8017\u65F6\u6765\u8FDB\u884C\u8FC7\u6EE4\u4E86\uFF0C\u4F8B\u5982"),s("code",null,"trace *StringUtils isBlank '#cost>100'"),a("\u8868\u793A\u5F53\u6267\u884C\u65F6\u95F4\u8D85\u8FC7 100ms \u7684\u65F6\u5019\uFF0C\u624D\u4F1A\u8F93\u51FA trace \u7684\u7ED3\u679C\u3002")],-1),j=s("div",{class:"custom-container tip"},[s("p",{class:"custom-container-title"},"\u63D0\u793A"),s("p",null,[a("watch/stack/trace \u8FD9\u4E2A\u4E09\u4E2A\u547D\u4EE4\u90FD\u652F\u6301"),s("code",null,"#cost")])],-1),w=s("h2",{id:"\u6CE8\u610F\u4E8B\u9879",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#\u6CE8\u610F\u4E8B\u9879","aria-hidden":"true"},"#"),a(" \u6CE8\u610F\u4E8B\u9879")],-1),A=s("p",null,[s("code",null,"trace"),a(" \u80FD\u65B9\u4FBF\u7684\u5E2E\u52A9\u4F60\u5B9A\u4F4D\u548C\u53D1\u73B0\u56E0 RT \u9AD8\u800C\u5BFC\u81F4\u7684\u6027\u80FD\u95EE\u9898\u7F3A\u9677\uFF0C\u4F46\u5176\u6BCF\u6B21\u53EA\u80FD\u8DDF\u8E2A\u4E00\u7EA7\u65B9\u6CD5\u7684\u8C03\u7528\u94FE\u8DEF\u3002")],-1),F=a("\u53C2\u8003\uFF1A"),$={href:"https://github.com/alibaba/arthas/issues/597",target:"_blank",rel:"noopener noreferrer"},E=a("Trace \u547D\u4EE4\u7684\u5B9E\u73B0\u539F\u7406"),S=s("li",null,[s("p",null,"3.3.0 \u7248\u672C\u540E\uFF0C\u53EF\u4EE5\u4F7F\u7528\u52A8\u6001 Trace \u529F\u80FD\uFF0C\u4E0D\u65AD\u589E\u52A0\u65B0\u7684\u5339\u914D\u7C7B\uFF0C\u53C2\u8003\u4E0B\u9762\u7684\u793A\u4F8B\u3002")],-1),T=a("\u76EE\u524D\u4E0D\u652F\u6301 "),I=s("code",null,"trace java.lang.Thread getName",-1),B=a("\uFF0C\u53C2\u8003 issue: "),P={href:"https://github.com/alibaba/arthas/issues/1610",target:"_blank",rel:"noopener noreferrer"},J=a("#1610"),Q=a(" \uFF0C\u8003\u8651\u5230\u4E0D\u662F\u975E\u5E38\u5FC5\u8981\u573A\u666F\uFF0C\u4E14\u4FEE\u590D\u6709\u4E00\u5B9A\u96BE\u5EA6\uFF0C\u56E0\u6B64\u5F53\u524D\u6682\u4E0D\u4FEE\u590D"),R=s("h2",{id:"\u4F7F\u7528\u53C2\u8003",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#\u4F7F\u7528\u53C2\u8003","aria-hidden":"true"},"#"),a(" \u4F7F\u7528\u53C2\u8003")],-1),D=s("h3",{id:"\u542F\u52A8-demo",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#\u542F\u52A8-demo","aria-hidden":"true"},"#"),a(" \u542F\u52A8 Demo")],-1),N=a("\u542F\u52A8"),K=a("\u5FEB\u901F\u5165\u95E8"),V=a("\u91CC\u7684"),q=s("code",null,"math-game",-1),O=a("\u3002"),U=c(`

    trace \u51FD\u6570

    $ trace demo.MathGame run
    +import{_ as l,o as i,c as r,a as s,b as n,w as t,d as c,e as a,r as o}from"./app.e2427bec.js";const u={},k=c('

    trace

    \u63D0\u793A

    \u65B9\u6CD5\u5185\u90E8\u8C03\u7528\u8DEF\u5F84\uFF0C\u5E76\u8F93\u51FA\u65B9\u6CD5\u8DEF\u5F84\u4E0A\u7684\u6BCF\u4E2A\u8282\u70B9\u4E0A\u8017\u65F6

    trace \u547D\u4EE4\u80FD\u4E3B\u52A8\u641C\u7D22 class-pattern\uFF0Fmethod-pattern \u5BF9\u5E94\u7684\u65B9\u6CD5\u8C03\u7528\u8DEF\u5F84\uFF0C\u6E32\u67D3\u548C\u7EDF\u8BA1\u6574\u4E2A\u8C03\u7528\u94FE\u8DEF\u4E0A\u7684\u6240\u6709\u6027\u80FD\u5F00\u9500\u548C\u8FFD\u8E2A\u8C03\u7528\u94FE\u8DEF\u3002

    \u53C2\u6570\u8BF4\u660E

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    class-pattern\u7C7B\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    method-pattern\u65B9\u6CD5\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    condition-express\u6761\u4EF6\u8868\u8FBE\u5F0F
    [E]\u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u4E3A\u901A\u914D\u7B26\u5339\u914D
    [n:]\u547D\u4EE4\u6267\u884C\u6B21\u6570\uFF0C\u9ED8\u8BA4\u503C\u4E3A 100\u3002
    #cost\u65B9\u6CD5\u6267\u884C\u8017\u65F6
    [c:]\u6307\u5B9A classloader hash\uFF0C\u53EA\u589E\u5F3A\u8BE5 classloader \u52A0\u8F7D\u7684\u7C7B
    [m <arg>]\u6307\u5B9A Class \u6700\u5927\u5339\u914D\u6570\u91CF\uFF0C\u9ED8\u8BA4\u503C\u4E3A 50\u3002\u957F\u683C\u5F0F\u4E3A[maxMatch <arg>]\u3002

    \u8FD9\u91CC\u91CD\u70B9\u8981\u8BF4\u660E\u7684\u662F\u6761\u4EF6\u8868\u8FBE\u5F0F\uFF0C\u6761\u4EF6\u8868\u8FBE\u5F0F\u7684\u6784\u6210\u4E3B\u8981\u7531 \bognl \u8868\u8FBE\u5F0F\u7EC4\u6210\uFF0C\u6240\u4EE5\u4F60\u53EF\u4EE5\u8FD9\u6837\u5199"params[0]<0"\uFF0C\u53EA\u8981\u662F\u4E00\u4E2A\u5408\u6CD5\u7684 ognl \u8868\u8FBE\u5F0F\uFF0C\u90FD\u80FD\u88AB\u6B63\u5E38\u652F\u6301\u3002

    ',6),d=a("\u8BF7\u53C2\u8003"),m=a("\u8868\u8FBE\u5F0F\u6838\u5FC3\u53D8\u91CF"),b=a("\u4E2D\u5173\u4E8E\u8BE5\u8282\u70B9\u7684\u63CF\u8FF0\u3002"),v=a("OGNL \u590D\u6742\u8868\u8FBE\u5F0F\u4F7F\u7528\u6280\u5DE7"),h=s("p",null,[a("\u5F88\u591A\u65F6\u5019\u6211\u4EEC\u53EA\u60F3\u770B\u5230\u67D0\u4E2A\u65B9\u6CD5\u7684 rt \u5927\u4E8E\u67D0\u4E2A\u65F6\u95F4\u4E4B\u540E\u7684 trace \u7ED3\u679C\uFF0C\u73B0\u5728 Arthas \u53EF\u4EE5\u6309\u7167\u65B9\u6CD5\u6267\u884C\u7684\u8017\u65F6\u6765\u8FDB\u884C\u8FC7\u6EE4\u4E86\uFF0C\u4F8B\u5982"),s("code",null,"trace *StringUtils isBlank '#cost>100'"),a("\u8868\u793A\u5F53\u6267\u884C\u65F6\u95F4\u8D85\u8FC7 100ms \u7684\u65F6\u5019\uFF0C\u624D\u4F1A\u8F93\u51FA trace \u7684\u7ED3\u679C\u3002")],-1),g=s("div",{class:"custom-container tip"},[s("p",{class:"custom-container-title"},"\u63D0\u793A"),s("p",null,[a("watch/stack/trace \u8FD9\u4E2A\u4E09\u4E2A\u547D\u4EE4\u90FD\u652F\u6301"),s("code",null,"#cost")])],-1),f=s("h2",{id:"\u6CE8\u610F\u4E8B\u9879",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#\u6CE8\u610F\u4E8B\u9879","aria-hidden":"true"},"#"),a(" \u6CE8\u610F\u4E8B\u9879")],-1),_=s("p",null,[s("code",null,"trace"),a(" \u80FD\u65B9\u4FBF\u7684\u5E2E\u52A9\u4F60\u5B9A\u4F4D\u548C\u53D1\u73B0\u56E0 RT \u9AD8\u800C\u5BFC\u81F4\u7684\u6027\u80FD\u95EE\u9898\u7F3A\u9677\uFF0C\u4F46\u5176\u6BCF\u6B21\u53EA\u80FD\u8DDF\u8E2A\u4E00\u7EA7\u65B9\u6CD5\u7684\u8C03\u7528\u94FE\u8DEF\u3002")],-1),x=a("\u53C2\u8003\uFF1A"),C={href:"https://github.com/alibaba/arthas/issues/597",target:"_blank",rel:"noopener noreferrer"},M=a("Trace \u547D\u4EE4\u7684\u5B9E\u73B0\u539F\u7406"),L=s("li",null,[s("p",null,"3.3.0 \u7248\u672C\u540E\uFF0C\u53EF\u4EE5\u4F7F\u7528\u52A8\u6001 Trace \u529F\u80FD\uFF0C\u4E0D\u65AD\u589E\u52A0\u65B0\u7684\u5339\u914D\u7C7B\uFF0C\u53C2\u8003\u4E0B\u9762\u7684\u793A\u4F8B\u3002")],-1),y=a("\u76EE\u524D\u4E0D\u652F\u6301 "),G=s("code",null,"trace java.lang.Thread getName",-1),j=a("\uFF0C\u53C2\u8003 issue: "),w={href:"https://github.com/alibaba/arthas/issues/1610",target:"_blank",rel:"noopener noreferrer"},A=a("#1610"),F=a(" \uFF0C\u8003\u8651\u5230\u4E0D\u662F\u975E\u5E38\u5FC5\u8981\u573A\u666F\uFF0C\u4E14\u4FEE\u590D\u6709\u4E00\u5B9A\u96BE\u5EA6\uFF0C\u56E0\u6B64\u5F53\u524D\u6682\u4E0D\u4FEE\u590D"),$=s("h2",{id:"\u4F7F\u7528\u53C2\u8003",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#\u4F7F\u7528\u53C2\u8003","aria-hidden":"true"},"#"),a(" \u4F7F\u7528\u53C2\u8003")],-1),E=s("h3",{id:"\u542F\u52A8-demo",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#\u542F\u52A8-demo","aria-hidden":"true"},"#"),a(" \u542F\u52A8 Demo")],-1),S=a("\u542F\u52A8"),T=a("\u5FEB\u901F\u5165\u95E8"),I=a("\u91CC\u7684"),B=s("code",null,"math-game",-1),P=a("\u3002"),J=c(`

    trace \u51FD\u6570

    $ trace demo.MathGame run
     Press Q or Ctrl+C to abort.
     Affect(class-cnt:1 , method-cnt:1) cost in 28 ms.
     \`---ts=2019-12-04 00:45:08;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69
    @@ -110,4 +110,4 @@ Affect(class count: [0.021911ms] java.lang.Exception:getMessage() #57
             +---[0.015643ms] java.lang.StringBuilder:toString() #57
             \`---[0.086622ms] java.io.PrintStream:println() #57
    -
  • \u975E\u51FD\u6570\u8C03\u7528\u7684\u6307\u4EE4\u6D88\u8017\u3002\u6BD4\u5982 i++, getfield\u7B49\u6307\u4EE4\u3002

  • \u5728\u4EE3\u7801\u6267\u884C\u8FC7\u7A0B\u4E2D\uFF0CJVM \u53EF\u80FD\u51FA\u73B0\u505C\u987F\uFF0C\u6BD4\u5982 GC\uFF0C\u8FDB\u5165\u540C\u6B65\u5757\u7B49\u3002

  • \u4F7F\u7528 -v \u53C2\u6570\u6253\u5370\u66F4\u591A\u4FE1\u606F

    \u63D0\u793A

    watch/trace/monitor/stack/tt \u547D\u4EE4\u90FD\u652F\u6301 -v \u53C2\u6570

    \u5F53\u547D\u4EE4\u6267\u884C\u4E4B\u540E\uFF0C\u6CA1\u6709\u8F93\u51FA\u7ED3\u679C\u3002\u6709\u4E24\u79CD\u53EF\u80FD\uFF1A

    1. \u5339\u914D\u5230\u7684\u51FD\u6570\u6CA1\u6709\u88AB\u6267\u884C
    2. \u6761\u4EF6\u8868\u8FBE\u5F0F\u7ED3\u679C\u662F false

    \u4F46\u7528\u6237\u533A\u5206\u4E0D\u51FA\u662F\u54EA\u79CD\u60C5\u51B5\u3002

    \u4F7F\u7528 -v\u9009\u9879\uFF0C\u5219\u4F1A\u6253\u5370Condition express\u7684\u5177\u4F53\u503C\u548C\u6267\u884C\u7ED3\u679C\uFF0C\u65B9\u4FBF\u786E\u8BA4\u3002

    `,47);function Y(z,H){const e=o("ExternalLinkIcon"),t=o("RouterLink");return i(),r("div",null,[k,s("p",null,[s("a",d,[m,b,n(e)])]),v,s("p",null,[h,n(t,{to:"/doc/advice-class.html"},{default:p(()=>[g]),_:1}),f]),s("ul",null,[s("li",null,[_,s("a",x,[C,n(e)])]),s("li",null,[M,s("a",L,[y,n(e)])])]),G,j,w,s("ul",null,[s("li",null,[A,s("p",null,[F,s("a",$,[E,n(e)])])]),S,s("li",null,[s("p",null,[T,I,B,s("a",P,[J,n(e)]),Q])])]),R,D,s("p",null,[N,n(t,{to:"/doc/quick-start.html"},{default:p(()=>[K]),_:1}),V,q,O]),U])}const X=l(u,[["render",Y],["__file","trace.html.vue"]]);export{X as default}; +
  • \u975E\u51FD\u6570\u8C03\u7528\u7684\u6307\u4EE4\u6D88\u8017\u3002\u6BD4\u5982 i++, getfield\u7B49\u6307\u4EE4\u3002

  • \u5728\u4EE3\u7801\u6267\u884C\u8FC7\u7A0B\u4E2D\uFF0CJVM \u53EF\u80FD\u51FA\u73B0\u505C\u987F\uFF0C\u6BD4\u5982 GC\uFF0C\u8FDB\u5165\u540C\u6B65\u5757\u7B49\u3002

  • \u4F7F\u7528 -v \u53C2\u6570\u6253\u5370\u66F4\u591A\u4FE1\u606F

    \u63D0\u793A

    watch/trace/monitor/stack/tt \u547D\u4EE4\u90FD\u652F\u6301 -v \u53C2\u6570

    \u5F53\u547D\u4EE4\u6267\u884C\u4E4B\u540E\uFF0C\u6CA1\u6709\u8F93\u51FA\u7ED3\u679C\u3002\u6709\u4E24\u79CD\u53EF\u80FD\uFF1A

    1. \u5339\u914D\u5230\u7684\u51FD\u6570\u6CA1\u6709\u88AB\u6267\u884C
    2. \u6761\u4EF6\u8868\u8FBE\u5F0F\u7ED3\u679C\u662F false

    \u4F46\u7528\u6237\u533A\u5206\u4E0D\u51FA\u662F\u54EA\u79CD\u60C5\u51B5\u3002

    \u4F7F\u7528 -v\u9009\u9879\uFF0C\u5219\u4F1A\u6253\u5370Condition express\u7684\u5177\u4F53\u503C\u548C\u6267\u884C\u7ED3\u679C\uFF0C\u65B9\u4FBF\u786E\u8BA4\u3002

    `,47);function Q(R,D){const e=o("RouterLink"),p=o("ExternalLinkIcon");return i(),r("div",null,[k,s("p",null,[d,n(e,{to:"/doc/advice-class.html"},{default:t(()=>[m]),_:1}),b]),s("ul",null,[s("li",null,[n(e,{to:"/doc/ognl-express.html"},{default:t(()=>[v]),_:1})])]),h,g,f,s("ul",null,[s("li",null,[_,s("p",null,[x,s("a",C,[M,n(p)])])]),L,s("li",null,[s("p",null,[y,G,j,s("a",w,[A,n(p)]),F])])]),$,E,s("p",null,[S,n(e,{to:"/doc/quick-start.html"},{default:t(()=>[T]),_:1}),I,B,P]),J])}const K=l(u,[["render",Q],["__file","trace.html.vue"]]);export{K as default}; diff --git a/assets/trace.html.89cc6cb1.js b/assets/trace.html.4fabc19b.js similarity index 94% rename from assets/trace.html.89cc6cb1.js rename to assets/trace.html.4fabc19b.js index 6e9c03fe6..4251e0a53 100644 --- a/assets/trace.html.89cc6cb1.js +++ b/assets/trace.html.4fabc19b.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-06075838","path":"/en/doc/trace.html","title":"trace","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Parameters","slug":"parameters","link":"#parameters","children":[]},{"level":2,"title":"Notice","slug":"notice","link":"#notice","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"Start Demo","slug":"start-demo","link":"#start-demo","children":[]},{"level":3,"title":"Trace method","slug":"trace-method","link":"#trace-method","children":[]},{"level":3,"title":"Specify the max number of matched Classes","slug":"specify-the-max-number-of-matched-classes","link":"#specify-the-max-number-of-matched-classes","children":[]},{"level":3,"title":"Specify ClassLoader to enhance","slug":"specify-classloader-to-enhance","link":"#specify-classloader-to-enhance","children":[]},{"level":3,"title":"Trace times limit","slug":"trace-times-limit","link":"#trace-times-limit","children":[]},{"level":3,"title":"Include jdk method","slug":"include-jdk-method","link":"#include-jdk-method","children":[]},{"level":3,"title":"Filtering by cost","slug":"filtering-by-cost","link":"#filtering-by-cost","children":[]},{"level":3,"title":"Trace multiple classes or multiple methods","slug":"trace-multiple-classes-or-multiple-methods","link":"#trace-multiple-classes-or-multiple-methods","children":[]},{"level":3,"title":"Exclude the specified class","slug":"exclude-the-specified-class","link":"#exclude-the-specified-class","children":[]},{"level":3,"title":"Dynamic trace","slug":"dynamic-trace","link":"#dynamic-trace","children":[]}]},{"level":2,"title":"Trace result time inaccuracy problem","slug":"trace-result-time-inaccuracy-problem","link":"#trace-result-time-inaccuracy-problem","children":[{"level":3,"title":"Use the -v parameter to print more information","slug":"use-the-v-parameter-to-print-more-information","link":"#use-the-v-parameter-to-print-more-information","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/trace.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-06075838","path":"/en/doc/trace.html","title":"trace","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Parameters","slug":"parameters","link":"#parameters","children":[]},{"level":2,"title":"Notice","slug":"notice","link":"#notice","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"Start Demo","slug":"start-demo","link":"#start-demo","children":[]},{"level":3,"title":"Trace method","slug":"trace-method","link":"#trace-method","children":[]},{"level":3,"title":"Specify the max number of matched Classes","slug":"specify-the-max-number-of-matched-classes","link":"#specify-the-max-number-of-matched-classes","children":[]},{"level":3,"title":"Specify ClassLoader to enhance","slug":"specify-classloader-to-enhance","link":"#specify-classloader-to-enhance","children":[]},{"level":3,"title":"Trace times limit","slug":"trace-times-limit","link":"#trace-times-limit","children":[]},{"level":3,"title":"Include jdk method","slug":"include-jdk-method","link":"#include-jdk-method","children":[]},{"level":3,"title":"Filtering by cost","slug":"filtering-by-cost","link":"#filtering-by-cost","children":[]},{"level":3,"title":"Trace multiple classes or multiple methods","slug":"trace-multiple-classes-or-multiple-methods","link":"#trace-multiple-classes-or-multiple-methods","children":[]},{"level":3,"title":"Exclude the specified class","slug":"exclude-the-specified-class","link":"#exclude-the-specified-class","children":[]},{"level":3,"title":"Dynamic trace","slug":"dynamic-trace","link":"#dynamic-trace","children":[]}]},{"level":2,"title":"Trace result time inaccuracy problem","slug":"trace-result-time-inaccuracy-problem","link":"#trace-result-time-inaccuracy-problem","children":[{"level":3,"title":"Use the -v parameter to print more information","slug":"use-the-v-parameter-to-print-more-information","link":"#use-the-v-parameter-to-print-more-information","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/trace.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/trace.html.f4675ea7.js b/assets/trace.html.63fe4169.js similarity index 89% rename from assets/trace.html.f4675ea7.js rename to assets/trace.html.63fe4169.js index 06d236e6d..273e8a80e 100644 --- a/assets/trace.html.f4675ea7.js +++ b/assets/trace.html.63fe4169.js @@ -1,4 +1,4 @@ -import{_ as l,o as i,c as r,a as s,b as n,w as o,e as a,d as t,r as c}from"./app.524ecf5c.js";const u={},d=s("h1",{id:"trace",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#trace","aria-hidden":"true"},"#"),a(" trace")],-1),m={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-trace",target:"_blank",rel:"noopener noreferrer"},k=s("code",null,"trace",-1),b=a(" online tutorial"),h=t('

    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

    NameSpecification
    class-patternpattern for the class name
    method-patternpattern for the method name
    condition-expresscondition expression
    [E]enable regex match, the default behavior is wildcards match
    [n:]execution times, the default value is 100.
    #costtime cost
    [c:]Specify classloader hash, only enhance classes loaded by it
    [m <arg>]Specify the max number of matched Classes, the default value is 50. Long format is [maxMatch <arg>].

    There's one thing worthy noting here is condition expression. The condition expression supports OGNL grammar, for example, you can come up a expression like this "params[0]<0". All OGNL expressions are supported as long as they are legal to the grammar.

    ',5),v=a("Pls. refer to "),g=a("core parameters in expression"),f=a(" for more details."),x=a("Pls. also refer to "),_={href:"https://github.com/alibaba/arthas/issues/71",target:"_blank",rel:"noopener noreferrer"},y=a("https://github.com/alibaba/arthas/issues/71"),C=a(" for more advanced usage"),w=a("OGNL official site: "),M={href:"https://commons.apache.org/dormant/commons-ognl/language-guide.html",target:"_blank",rel:"noopener noreferrer"},L=a("https://commons.apache.org/dormant/commons-ognl/language-guide.html"),G=t('

    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.

    TIP

    watch/stack/trace, these three commands all support #cost.

    Notice

    ',3),T=s("li",null,[s("p",null,[s("code",null,"trace"),a(" 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.")])],-1),A=s("li",null,[s("p",null,"After version 3.3.0, you can use the Dynamic Trace feature to add new matching classes/methods, see the following example.")],-1),j=a("Currently "),I=s("code",null,"trace java.lang.Thread getName",-1),S=a(" is not supported, please refer to issue: "),F={href:"https://github.com/alibaba/arthas/issues/1610",target:"_blank",rel:"noopener noreferrer"},P=a("#1610"),$=a(", considering that it is not very necessary and it is difficult to repair , So it won\u2019t be fixed for now"),E=s("h2",{id:"usage",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#usage","aria-hidden":"true"},"#"),a(" Usage")],-1),B=s("h3",{id:"start-demo",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#start-demo","aria-hidden":"true"},"#"),a(" Start Demo")],-1),q=a("Start "),N=s("code",null,"math-game",-1),Q=a(" in "),D=a("Quick Start"),O=a("."),J=t(`

    Trace method

    $ trace demo.MathGame run
    +import{_ as l,o as i,c as r,a as s,b as n,w as t,d as p,e as a,r as o}from"./app.e2427bec.js";const u={},d=p('

    trace

    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

    NameSpecification
    class-patternpattern for the class name
    method-patternpattern for the method name
    condition-expresscondition expression
    [E]enable regex match, the default behavior is wildcards match
    [n:]execution times, the default value is 100.
    #costtime cost
    [c:]Specify classloader hash, only enhance classes loaded by it
    [m <arg>]Specify the max number of matched Classes, the default value is 50. Long format is [maxMatch <arg>].

    There's one thing worthy noting here is condition expression. The condition expression supports OGNL grammar, for example, you can come up a expression like this "params[0]<0". All OGNL expressions are supported as long as they are legal to the grammar.

    ',6),m=a("Pls. refer to "),k=a("core parameters in expression"),b=a(" for more details."),h=a("Tips for complex OGNL expressions"),v=p('

    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.

    TIP

    watch/stack/trace, these three commands all support #cost.

    Notice

    ',3),g=s("li",null,[s("p",null,[s("code",null,"trace"),a(" 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.")])],-1),f=s("li",null,[s("p",null,"After version 3.3.0, you can use the Dynamic Trace feature to add new matching classes/methods, see the following example.")],-1),x=a("Currently "),y=s("code",null,"trace java.lang.Thread getName",-1),_=a(" is not supported, please refer to issue: "),C={href:"https://github.com/alibaba/arthas/issues/1610",target:"_blank",rel:"noopener noreferrer"},w=a("#1610"),M=a(", considering that it is not very necessary and it is difficult to repair , So it won\u2019t be fixed for now"),L=s("h2",{id:"usage",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#usage","aria-hidden":"true"},"#"),a(" Usage")],-1),G=s("h3",{id:"start-demo",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#start-demo","aria-hidden":"true"},"#"),a(" Start Demo")],-1),T=a("Start "),A=s("code",null,"math-game",-1),j=a(" in "),I=a("Quick Start"),S=a("."),F=p(`

    Trace method

    $ trace demo.MathGame run
     Press Q or Ctrl+C to abort.
     Affect(class-cnt:1 , method-cnt:1) cost in 28 ms.
     \`---ts=2019-12-04 00:45:08;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69
    @@ -110,4 +110,4 @@ Affect(class count: [0.021911ms] java.lang.Exception:getMessage() #57
             +---[0.015643ms] java.lang.StringBuilder:toString() #57
             \`--[0.086622ms] java.io.PrintStream:println() #57
    -
  • Instruction consumption. For example, instructions such as i++, getfield, etc.

  • Possible JVM pause during code execution, such as GC, entering synchronization blocks, etc.

  • Use the -v parameter to print more information

    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:

    1. The matched function is not executed
    2. The result of the conditional expression is false

    But the user cannot tell which situation is.

    Using the -v option, the specific value and execution result of Condition express will be printed for easy confirmation.

    `,47);function R(U,V){const e=c("ExternalLinkIcon"),p=c("RouterLink");return i(),r("div",null,[d,s("p",null,[s("a",m,[k,b,n(e)])]),h,s("p",null,[v,n(p,{to:"/en/doc/advice-class.html"},{default:o(()=>[g]),_:1}),f]),s("ul",null,[s("li",null,[x,s("a",_,[y,n(e)]),C]),s("li",null,[w,s("a",M,[L,n(e)])])]),G,s("ul",null,[T,A,s("li",null,[s("p",null,[j,I,S,s("a",F,[P,n(e)]),$])])]),E,B,s("p",null,[q,N,Q,n(p,{to:"/en/doc/quick-start.html"},{default:o(()=>[D]),_:1}),O]),J])}const Y=l(u,[["render",R],["__file","trace.html.vue"]]);export{Y as default}; +
  • Instruction consumption. For example, instructions such as i++, getfield, etc.

  • Possible JVM pause during code execution, such as GC, entering synchronization blocks, etc.

  • Use the -v parameter to print more information

    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:

    1. The matched function is not executed
    2. The result of the conditional expression is false

    But the user cannot tell which situation is.

    Using the -v option, the specific value and execution result of Condition express will be printed for easy confirmation.

    `,47);function P($,E){const e=o("RouterLink"),c=o("ExternalLinkIcon");return i(),r("div",null,[d,s("p",null,[m,n(e,{to:"/en/doc/advice-class.html"},{default:t(()=>[k]),_:1}),b]),s("ul",null,[s("li",null,[n(e,{to:"/en/doc/ognl-express.html"},{default:t(()=>[h]),_:1})])]),v,s("ul",null,[g,f,s("li",null,[s("p",null,[x,y,_,s("a",C,[w,n(c)]),M])])]),L,G,s("p",null,[T,A,j,n(e,{to:"/en/doc/quick-start.html"},{default:t(()=>[I]),_:1}),S]),F])}const q=l(u,[["render",P],["__file","trace.html.vue"]]);export{q as default}; diff --git a/assets/tt.html.53706e22.js b/assets/tt.html.2b487719.js similarity index 85% rename from assets/tt.html.53706e22.js rename to assets/tt.html.2b487719.js index 80c99ccc9..c94f031a8 100644 --- a/assets/tt.html.53706e22.js +++ b/assets/tt.html.2b487719.js @@ -1,4 +1,4 @@ -import{_ as p,o as i,c as r,a as n,b as a,w as o,e as s,d as e,r as c}from"./app.524ecf5c.js";const d={},u=n("h1",{id:"tt",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#tt","aria-hidden":"true"},"#"),s(" tt")],-1),m={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-tt",target:"_blank",rel:"noopener noreferrer"},b=n("code",null,"tt",-1),h=s(" online tutorial"),k=e('

    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.

    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.

    Precautions

    • The implementation of the tt command is to save the input parameters/return values of the function into a Map<Integer, TimeFragment>. The default size is 100.
    • After using tt related functions, you need to manually release the memory, otherwise OOM may occur for a long time. Exiting arthas will not automatically clear tt's cache map.

    Usage

    Start Demo

    ',8),v=s("Start "),f=n("code",null,"math-game",-1),g=s(" in "),x=s("Quick Start"),_=s("."),T=e(`

    Record method calls

    $ tt -t demo.MathGame primeFactors
    +import{_ as p,o as i,c as r,a as s,b as a,w as t,d as o,e as n,r as l}from"./app.e2427bec.js";const d={},u=o('

    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.

    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.

    Precautions

    • The implementation of the tt command is to save the input parameters/return values of the function into a Map<Integer, TimeFragment>. The default size is 100.
    • After using tt related functions, you need to manually release the memory, otherwise OOM may occur for a long time. Exiting arthas will not automatically clear tt's cache map.

    Usage

    Start Demo

    ',9),m=n("Start "),b=s("code",null,"math-game",-1),h=n(" in "),k=n("Quick Start"),v=n("."),f=o(`

    Record method calls

    $ tt -t demo.MathGame primeFactors
     Press Ctrl+C to abort.
     Affect(class-cnt:1 , method-cnt:1) cost in 66 ms.
      INDEX   TIMESTAMP            COST(ms)  IS-RET  IS-EXP   OBJECT         CLASS                          METHOD
    @@ -15,7 +15,7 @@ Affect(class count:1 , method count:11000    2022-12-25 19:41:45  2.629929  true    false    0x3bf400       MathGame                       primeFactors
      1001    2022-12-25 19:41:55  0.146161  false   true     0x3bf400       MathGame                       primeFactors
    -
    • -t

      record the calling context of the method demo.MathGame primeFactors

    • -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)

    • -m 1

      limit the number of matched Classes to avoid JVM suspending when too many matched Classes. The default value is 50.

    • -c <classloader hash>

      if the same class is loaded by multiple classloaders, you can use -c to enhance only the specified classloader. Use sc -d className to find the classloader hash.

    • Property

    NameSpecification
    INDEXthe index for each call based on time
    TIMESTAMPtime to invoke the method
    COST(ms)time cost of the method call
    IS-RETwhether method exits with normal return
    IS-EXPwhether method failed with exceptions
    OBJECThashCode() of the object invoking the method
    CLASSclass name of the object invoking the method
    METHODmethod being invoked
    • 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:

    `,10),E=s("Critical fields in expression"),M={href:"https://github.com/alibaba/arthas/issues/71",target:"_blank",rel:"noopener noreferrer"},S=s("Special usage"),y={href:"https://commons.apache.org/dormant/commons-ognl/language-guide.html",target:"_blank",rel:"noopener noreferrer"},I=s("OGNL official guide"),C=e(`

    List all records

    $ tt -l
    +
    • -t

      record the calling context of the method demo.MathGame primeFactors

    • -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)

    • -m 1

      limit the number of matched Classes to avoid JVM suspending when too many matched Classes. The default value is 50.

    • -c <classloader hash>

      if the same class is loaded by multiple classloaders, you can use -c to enhance only the specified classloader. Use sc -d className to find the classloader hash.

    • Property

    NameSpecification
    INDEXthe index for each call based on time
    TIMESTAMPtime to invoke the method
    COST(ms)time cost of the method call
    IS-RETwhether method exits with normal return
    IS-EXPwhether method failed with exceptions
    OBJECThashCode() of the object invoking the method
    CLASSclass name of the object invoking the method
    METHODmethod being invoked
    • 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:

    `,10),g=n("Critical fields in expression"),x=n("Tips for complex OGNL expressions"),_=o(`

    List all records

    $ tt -l
      INDEX   TIMESTAMP            COST(ms)  IS-RET  IS-EXP   OBJECT         CLASS                          METHOD
     -------------------------------------------------------------------------------------------------------------------------------------
      1000    2018-12-04 11:15:38  1.096236  false   true     0x4b67cf4d     MathGame                       primeFactors
    @@ -37,7 +37,7 @@ Affect(row-cnt:69
      1005    2018-12-04 11:15:43  0.4776    false   true     0x4b67cf4d     MathGame                       primeFactors
     Affect(row-cnt:6) cost in 607 ms.
    -

    Advanced:

    `,5),A=s("Critical fields in expression"),w=e(`

    Check context of the call

    Using tt -i <index> to check a specific calling details.

    $ tt -i 1003
    +

    Advanced:

    `,5),T=n("Critical fields in expression"),E=o(`

    Check context of the call

    Using tt -i <index> to check a specific calling details.

    $ tt -i 1003
      INDEX            1003
      GMT-CREATE       2018-12-04 11:15:41
      COST(ms)         0.186073
    @@ -70,7 +70,7 @@ Affect(row-cnt:1]
     Time fragment[1004] successfully replayed.
     Affect(row-cnt:1) cost in 14 ms.
    -

    Watch express

    -w, --watch-express watch the time fragment by ognl express.

    `,8),G=s("You can used all variables in "),O=s("fundamental fields in expressions"),F=s(" for the watch express\u3002"),P=e(`
    [arthas@10718]$ tt -t demo.MathGame run -n 5
    +

    Watch express

    -w, --watch-express watch the time fragment by ognl express.

    `,8),M=n("You can used all variables in "),S=n("fundamental fields in expressions"),y=n(" for the watch express\u3002"),I=o(`
    [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
    @@ -87,6 +87,6 @@ Affect(class count: 1000       2021-01-08 21:54:17         0.901091     true       false       0x7699a589          MathGame                                  run
     [arthas@10718]$ tt -w '@demo.MathGame@random.nextInt(100)'  -x 1 -i 1000
     @Integer[46]
    -
    `,3),R=s("Note that "),N=n("code",null,"com.taobao.arthas.core.advisor.Advice#getLoader",-1),L=s(" is used here, and that it is better to use the exact "),D=n("code",null,"classloader",-1),X=s(),B=s("ognl"),J=s("."),H=s("Advanced usage "),$={href:"https://github.com/alibaba/arthas/issues/482",target:"_blank",rel:"noopener noreferrer"},j=s("get spring context to call the bean method"),q=e(`

    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.

    2. params may be modified

      Arthas save params into an array, they are object references. The Objects may be modified by other code.

    Delete the specified tt record by index

    tt -d -i 1001
    +
    `,3),C=n("Note that "),A=s("code",null,"com.taobao.arthas.core.advisor.Advice#getLoader",-1),w=n(" is used here, and that it is better to use the exact "),G=s("code",null,"classloader",-1),O=n(),F=n("ognl"),P=n("."),R=n("Advanced usage "),N={href:"https://github.com/alibaba/arthas/issues/482",target:"_blank",rel:"noopener noreferrer"},L=n("get spring context to call the bean method"),D=o(`

    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.

    2. params may be modified

      Arthas save params into an array, they are object references. The Objects may be modified by other code.

    Delete the specified tt record by index

    tt -d -i 1001
     

    Clear all tt records

    tt --delete-all
    -
    `,6);function U(V,Q){const l=c("ExternalLinkIcon"),t=c("RouterLink");return i(),r("div",null,[u,n("p",null,[n("a",m,[b,h,a(l)])]),k,n("p",null,[v,f,g,a(t,{to:"/en/doc/quick-start.html"},{default:o(()=>[x]),_:1}),_]),T,n("ul",null,[n("li",null,[a(t,{to:"/en/doc/advice-class.html"},{default:o(()=>[E]),_:1})]),n("li",null,[n("a",M,[S,a(l)])]),n("li",null,[n("a",y,[I,a(l)])])]),C,n("ul",null,[n("li",null,[a(t,{to:"/en/doc/advice-class.html"},{default:o(()=>[A]),_:1})])]),w,n("ul",null,[n("li",null,[G,a(t,{to:"/en/doc/advice-class.html"},{default:o(()=>[O]),_:1}),F])]),P,n("p",null,[R,N,L,D,X,a(t,{to:"/en/doc/ognl.html"},{default:o(()=>[B]),_:1}),J]),n("p",null,[H,n("a",$,[j,a(l)])]),q])}const Y=p(d,[["render",U],["__file","tt.html.vue"]]);export{Y as default}; +
    `,6);function X(B,J){const e=l("RouterLink"),c=l("ExternalLinkIcon");return i(),r("div",null,[u,s("p",null,[m,b,h,a(e,{to:"/en/doc/quick-start.html"},{default:t(()=>[k]),_:1}),v]),f,s("ul",null,[s("li",null,[a(e,{to:"/en/doc/advice-class.html"},{default:t(()=>[g]),_:1})]),s("li",null,[a(e,{to:"/en/doc/ognl-express.html"},{default:t(()=>[x]),_:1})])]),_,s("ul",null,[s("li",null,[a(e,{to:"/en/doc/advice-class.html"},{default:t(()=>[T]),_:1})])]),E,s("ul",null,[s("li",null,[M,a(e,{to:"/en/doc/advice-class.html"},{default:t(()=>[S]),_:1}),y])]),I,s("p",null,[C,A,w,G,O,a(e,{to:"/en/doc/ognl.html"},{default:t(()=>[F]),_:1}),P]),s("p",null,[R,s("a",N,[L,a(c)])]),D])}const $=p(d,[["render",X],["__file","tt.html.vue"]]);export{$ as default}; diff --git a/assets/tt.html.f4a8867b.js b/assets/tt.html.a410b6a0.js similarity index 84% rename from assets/tt.html.f4a8867b.js rename to assets/tt.html.a410b6a0.js index d8f52e90e..7681c81e3 100644 --- a/assets/tt.html.f4a8867b.js +++ b/assets/tt.html.a410b6a0.js @@ -1,4 +1,4 @@ -import{_ as c,o as i,c as r,a as s,b as a,w as o,e as n,d as e,r as l}from"./app.524ecf5c.js";const d={},u=s("h1",{id:"tt",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#tt","aria-hidden":"true"},"#"),n(" tt")],-1),m={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-tt",target:"_blank",rel:"noopener noreferrer"},b=s("code",null,"tt",-1),k=n("\u5728\u7EBF\u6559\u7A0B"),v=e('

    \u63D0\u793A

    \u65B9\u6CD5\u6267\u884C\u6570\u636E\u7684\u65F6\u7A7A\u96A7\u9053\uFF0C\u8BB0\u5F55\u4E0B\u6307\u5B9A\u65B9\u6CD5\u6BCF\u6B21\u8C03\u7528\u7684\u5165\u53C2\u548C\u8FD4\u56DE\u4FE1\u606F\uFF0C\u5E76\u80FD\u5BF9\u8FD9\u4E9B\u4E0D\u540C\u7684\u65F6\u95F4\u4E0B\u8C03\u7528\u8FDB\u884C\u89C2\u6D4B

    watch \u867D\u7136\u5F88\u65B9\u4FBF\u548C\u7075\u6D3B\uFF0C\u4F46\u9700\u8981\u63D0\u524D\u60F3\u6E05\u695A\u89C2\u5BDF\u8868\u8FBE\u5F0F\u7684\u62FC\u5199\uFF0C\u8FD9\u5BF9\u6392\u67E5\u95EE\u9898\u800C\u8A00\u8981\u6C42\u592A\u9AD8\uFF0C\u56E0\u4E3A\u5F88\u591A\u65F6\u5019\u6211\u4EEC\u5E76\u4E0D\u6E05\u695A\u95EE\u9898\u51FA\u81EA\u4E8E\u4F55\u65B9\uFF0C\u53EA\u80FD\u9760\u86DB\u4E1D\u9A6C\u8FF9\u8FDB\u884C\u731C\u6D4B\u3002

    \u8FD9\u4E2A\u65F6\u5019\u5982\u679C\u80FD\u8BB0\u5F55\u4E0B\u5F53\u65F6\u65B9\u6CD5\u8C03\u7528\u7684\u6240\u6709\u5165\u53C2\u548C\u8FD4\u56DE\u503C\u3001\u629B\u51FA\u7684\u5F02\u5E38\u4F1A\u5BF9\u6574\u4E2A\u95EE\u9898\u7684\u601D\u8003\u4E0E\u5224\u65AD\u975E\u5E38\u6709\u5E2E\u52A9\u3002

    \u4E8E\u662F\u4E4E\uFF0CTimeTunnel \u547D\u4EE4\u5C31\u8BDE\u751F\u4E86\u3002

    \u6CE8\u610F\u4E8B\u9879

    • tt \u547D\u4EE4\u7684\u5B9E\u73B0\u662F\uFF1A\u628A\u51FD\u6570\u7684\u5165\u53C2/\u8FD4\u56DE\u503C\u7B49\uFF0C\u4FDD\u5B58\u5230\u4E00\u4E2AMap<Integer, TimeFragment>\u91CC\uFF0C\u9ED8\u8BA4\u7684\u5927\u5C0F\u662F 100\u3002
    • tt \u76F8\u5173\u529F\u80FD\u5728\u4F7F\u7528\u5B8C\u4E4B\u540E\uFF0C\u9700\u8981\u624B\u52A8\u91CA\u653E\u5185\u5B58\uFF0C\u5426\u5219\u957F\u65F6\u95F4\u53EF\u80FD\u5BFC\u81F4OOM\u3002\u9000\u51FA arthas \u4E0D\u4F1A\u81EA\u52A8\u6E05\u9664 tt \u7684\u7F13\u5B58 map\u3002

    \u4F7F\u7528\u53C2\u8003

    \u542F\u52A8 Demo

    ',8),h=n("\u542F\u52A8"),f=n("\u5FEB\u901F\u5165\u95E8"),_=n("\u91CC\u7684"),g=s("code",null,"math-game",-1),T=n("\u3002"),E=e(`

    \u8BB0\u5F55\u8C03\u7528

    \u5BF9\u4E8E\u4E00\u4E2A\u6700\u57FA\u672C\u7684\u4F7F\u7528\u6765\u8BF4\uFF0C\u5C31\u662F\u8BB0\u5F55\u4E0B\u5F53\u524D\u65B9\u6CD5\u7684\u6BCF\u6B21\u8C03\u7528\u73AF\u5883\u73B0\u573A\u3002

    $ tt -t demo.MathGame primeFactors
    +import{_ as c,o as i,c as r,a as s,b as a,w as p,d as e,e as n,r as o}from"./app.e2427bec.js";const d={},u=e('

    tt

    \u63D0\u793A

    \u65B9\u6CD5\u6267\u884C\u6570\u636E\u7684\u65F6\u7A7A\u96A7\u9053\uFF0C\u8BB0\u5F55\u4E0B\u6307\u5B9A\u65B9\u6CD5\u6BCF\u6B21\u8C03\u7528\u7684\u5165\u53C2\u548C\u8FD4\u56DE\u4FE1\u606F\uFF0C\u5E76\u80FD\u5BF9\u8FD9\u4E9B\u4E0D\u540C\u7684\u65F6\u95F4\u4E0B\u8C03\u7528\u8FDB\u884C\u89C2\u6D4B

    watch \u867D\u7136\u5F88\u65B9\u4FBF\u548C\u7075\u6D3B\uFF0C\u4F46\u9700\u8981\u63D0\u524D\u60F3\u6E05\u695A\u89C2\u5BDF\u8868\u8FBE\u5F0F\u7684\u62FC\u5199\uFF0C\u8FD9\u5BF9\u6392\u67E5\u95EE\u9898\u800C\u8A00\u8981\u6C42\u592A\u9AD8\uFF0C\u56E0\u4E3A\u5F88\u591A\u65F6\u5019\u6211\u4EEC\u5E76\u4E0D\u6E05\u695A\u95EE\u9898\u51FA\u81EA\u4E8E\u4F55\u65B9\uFF0C\u53EA\u80FD\u9760\u86DB\u4E1D\u9A6C\u8FF9\u8FDB\u884C\u731C\u6D4B\u3002

    \u8FD9\u4E2A\u65F6\u5019\u5982\u679C\u80FD\u8BB0\u5F55\u4E0B\u5F53\u65F6\u65B9\u6CD5\u8C03\u7528\u7684\u6240\u6709\u5165\u53C2\u548C\u8FD4\u56DE\u503C\u3001\u629B\u51FA\u7684\u5F02\u5E38\u4F1A\u5BF9\u6574\u4E2A\u95EE\u9898\u7684\u601D\u8003\u4E0E\u5224\u65AD\u975E\u5E38\u6709\u5E2E\u52A9\u3002

    \u4E8E\u662F\u4E4E\uFF0CTimeTunnel \u547D\u4EE4\u5C31\u8BDE\u751F\u4E86\u3002

    \u6CE8\u610F\u4E8B\u9879

    • tt \u547D\u4EE4\u7684\u5B9E\u73B0\u662F\uFF1A\u628A\u51FD\u6570\u7684\u5165\u53C2/\u8FD4\u56DE\u503C\u7B49\uFF0C\u4FDD\u5B58\u5230\u4E00\u4E2AMap<Integer, TimeFragment>\u91CC\uFF0C\u9ED8\u8BA4\u7684\u5927\u5C0F\u662F 100\u3002
    • tt \u76F8\u5173\u529F\u80FD\u5728\u4F7F\u7528\u5B8C\u4E4B\u540E\uFF0C\u9700\u8981\u624B\u52A8\u91CA\u653E\u5185\u5B58\uFF0C\u5426\u5219\u957F\u65F6\u95F4\u53EF\u80FD\u5BFC\u81F4OOM\u3002\u9000\u51FA arthas \u4E0D\u4F1A\u81EA\u52A8\u6E05\u9664 tt \u7684\u7F13\u5B58 map\u3002

    \u4F7F\u7528\u53C2\u8003

    \u542F\u52A8 Demo

    ',9),m=n("\u542F\u52A8"),b=n("\u5FEB\u901F\u5165\u95E8"),k=n("\u91CC\u7684"),v=s("code",null,"math-game",-1),h=n("\u3002"),f=e(`

    \u8BB0\u5F55\u8C03\u7528

    \u5BF9\u4E8E\u4E00\u4E2A\u6700\u57FA\u672C\u7684\u4F7F\u7528\u6765\u8BF4\uFF0C\u5C31\u662F\u8BB0\u5F55\u4E0B\u5F53\u524D\u65B9\u6CD5\u7684\u6BCF\u6B21\u8C03\u7528\u73AF\u5883\u73B0\u573A\u3002

    $ tt -t demo.MathGame primeFactors
     Press Ctrl+C to abort.
     Affect(class-cnt:1 , method-cnt:1) cost in 66 ms.
      INDEX   TIMESTAMP            COST(ms)  IS-RET  IS-EXP   OBJECT         CLASS                          METHOD
    @@ -15,7 +15,7 @@ Affect(class count:1 , method count:11000    2022-12-25 19:41:45  2.629929  true    false    0x3bf400       MathGame                       primeFactors
      1001    2022-12-25 19:41:55  0.146161  false   true     0x3bf400       MathGame                       primeFactors
    -
    • \u547D\u4EE4\u53C2\u6570\u89E3\u6790

      • -t

        tt \u547D\u4EE4\u6709\u5F88\u591A\u4E2A\u4E3B\u53C2\u6570\uFF0C-t \u5C31\u662F\u5176\u4E2D\u4E4B\u4E00\u3002\u8FD9\u4E2A\u53C2\u6570\u7684\u8868\u660E\u5E0C\u671B\u8BB0\u5F55\u4E0B\u7C7B demo.MathGame \u7684 primeFactors \u65B9\u6CD5\u7684\u6BCF\u6B21\u6267\u884C\u60C5\u51B5\u3002

      • -n 3

        \u5F53\u4F60\u6267\u884C\u4E00\u4E2A\u8C03\u7528\u91CF\u4E0D\u9AD8\u7684\u65B9\u6CD5\u65F6\u53EF\u80FD\u4F60\u8FD8\u80FD\u6709\u8DB3\u591F\u7684\u65F6\u95F4\u7528 CTRL+C \u4E2D\u65AD tt \u547D\u4EE4\u8BB0\u5F55\u7684\u8FC7\u7A0B\uFF0C\u4F46\u5982\u679C\u9047\u5230\u8C03\u7528\u91CF\u975E\u5E38\u5927\u7684\u65B9\u6CD5\uFF0C\u77AC\u95F4\u5C31\u80FD\u5C06\u4F60\u7684 JVM \u5185\u5B58\u6491\u7206\u3002

        \u6B64\u65F6\u4F60\u53EF\u4EE5\u901A\u8FC7 -n \u53C2\u6570\u6307\u5B9A\u4F60\u9700\u8981\u8BB0\u5F55\u7684\u6B21\u6570\uFF0C\u5F53\u8FBE\u5230\u8BB0\u5F55\u6B21\u6570\u65F6 Arthas \u4F1A\u4E3B\u52A8\u4E2D\u65AD tt \u547D\u4EE4\u7684\u8BB0\u5F55\u8FC7\u7A0B\uFF0C\u907F\u514D\u4EBA\u5DE5\u64CD\u4F5C\u65E0\u6CD5\u505C\u6B62\u7684\u60C5\u51B5\u3002

      • -m 1

        \u901A\u8FC7 -m \u53C2\u6570\u6307\u5B9A Class \u5339\u914D\u7684\u6700\u5927\u6570\u91CF\uFF0C\u9632\u6B62\u5339\u914D\u5230\u7684 Class \u6570\u91CF\u592A\u591A\u5BFC\u81F4 JVM \u6302\u8D77\uFF0C\u9ED8\u8BA4\u503C\u662F 50\u3002

      • -c <classloader hash>

        \u5F53\u540C\u540D\u7C7B\u88AB\u591A\u4E2A classloader \u52A0\u8F7D\u65F6\uFF0C\u53EF\u4EE5\u7528 -c \u6307\u5B9A\u53EA\u589E\u5F3A\u67D0\u4E2A classloader \u52A0\u8F7D\u7684\u7C7B\u3002\u53EF\u4EE5\u5148\u7528 sc -d className \u67E5\u770B\u5177\u4F53\u7684 classloader hash\u3002

    • \u8868\u683C\u5B57\u6BB5\u8BF4\u660E

    \u8868\u683C\u5B57\u6BB5\u5B57\u6BB5\u89E3\u91CA
    INDEX\u65F6\u95F4\u7247\u6BB5\u8BB0\u5F55\u7F16\u53F7\uFF0C\u6BCF\u4E00\u4E2A\u7F16\u53F7\u4EE3\u8868\u7740\u4E00\u6B21\u8C03\u7528\uFF0C\u540E\u7EED tt \u8FD8\u6709\u5F88\u591A\u547D\u4EE4\u90FD\u662F\u57FA\u4E8E\u6B64\u7F16\u53F7\u6307\u5B9A\u8BB0\u5F55\u64CD\u4F5C\uFF0C\u975E\u5E38\u91CD\u8981\u3002
    TIMESTAMP\u65B9\u6CD5\u6267\u884C\u7684\u672C\u673A\u65F6\u95F4\uFF0C\u8BB0\u5F55\u4E86\u8FD9\u4E2A\u65F6\u95F4\u7247\u6BB5\u6240\u53D1\u751F\u7684\u672C\u673A\u65F6\u95F4
    COST(ms)\u65B9\u6CD5\u6267\u884C\u7684\u8017\u65F6
    IS-RET\u65B9\u6CD5\u662F\u5426\u4EE5\u6B63\u5E38\u8FD4\u56DE\u7684\u5F62\u5F0F\u7ED3\u675F
    IS-EXP\u65B9\u6CD5\u662F\u5426\u4EE5\u629B\u5F02\u5E38\u7684\u5F62\u5F0F\u7ED3\u675F
    OBJECT\u6267\u884C\u5BF9\u8C61\u7684hashCode()\uFF0C\u6CE8\u610F\uFF0C\u66FE\u7ECF\u6709\u4EBA\u8BEF\u8BA4\u4E3A\u662F\u5BF9\u8C61\u5728 JVM \u4E2D\u7684\u5185\u5B58\u5730\u5740\uFF0C\u4F46\u5F88\u9057\u61BE\u4ED6\u4E0D\u662F\u3002\u4F46\u4ED6\u80FD\u5E2E\u52A9\u4F60\u7B80\u5355\u7684\u6807\u8BB0\u5F53\u524D\u6267\u884C\u65B9\u6CD5\u7684\u7C7B\u5B9E\u4F53
    CLASS\u6267\u884C\u7684\u7C7B\u540D
    METHOD\u6267\u884C\u7684\u65B9\u6CD5\u540D
    `,7),M=e("
  • \u6761\u4EF6\u8868\u8FBE\u5F0F

    \u4E0D\u77E5\u9053\u5927\u5BB6\u662F\u5426\u6709\u5728\u4F7F\u7528\u8FC7\u7A0B\u4E2D\u9047\u5230\u4EE5\u4E0B\u56F0\u60D1

    • Arthas \u4F3C\u4E4E\u5F88\u96BE\u533A\u5206\u51FA\u91CD\u8F7D\u7684\u65B9\u6CD5
    • \u6211\u53EA\u9700\u8981\u89C2\u5BDF\u7279\u5B9A\u53C2\u6570\uFF0C\u4F46\u662F tt \u5374\u5168\u90E8\u90FD\u7ED9\u6211\u8BB0\u5F55\u4E86\u4E0B\u6765

    \u6761\u4EF6\u8868\u8FBE\u5F0F\u4E5F\u662F\u7528 \bOGNL \u6765\u7F16\u5199\uFF0C\u6838\u5FC3\u7684\u5224\u65AD\u5BF9\u8C61\u4F9D\u7136\u662F Advice \u5BF9\u8C61\u3002\u9664\u4E86 tt \u547D\u4EE4\u4E4B\u5916\uFF0Cwatch\u3001trace\u3001stack \u547D\u4EE4\u4E5F\u90FD\u652F\u6301\u6761\u4EF6\u8868\u8FBE\u5F0F\u3002

  • \u89E3\u51B3\u65B9\u6CD5\u91CD\u8F7D

    tt -t *Test print params.length==1

    \u901A\u8FC7\u5236\u5B9A\u53C2\u6570\u4E2A\u6570\u7684\u5F62\u5F0F\u89E3\u51B3\u4E0D\u540C\u7684\u65B9\u6CD5\u7B7E\u540D\uFF0C\u5982\u679C\u53C2\u6570\u4E2A\u6570\u4E00\u6837\uFF0C\u4F60\u8FD8\u53EF\u4EE5\u8FD9\u6837\u5199

    tt -t *Test print 'params[1] instanceof Integer'

  • \u89E3\u51B3\u6307\u5B9A\u53C2\u6570

    tt -t *Test print params[0].mobile=="13989838402"

  • ",3),x=s("p",null,[n("\u6784\u6210\u6761\u4EF6\u8868\u8FBE\u5F0F\u7684 "),s("code",null,"Advice"),n(" \u5BF9\u8C61")],-1),I=n("\u524D\u8FB9\u770B\u5230\u4E86\u5F88\u591A\u6761\u4EF6\u8868\u8FBE\u5F0F\u4E2D\uFF0C\u90FD\u4F7F\u7528\u4E86 "),S=s("code",null,"params[0]",-1),C=n("\uFF0C\u6709\u5173\u8FD9\u4E2A\u53D8\u91CF\u7684\u4ECB\u7ECD\uFF0C\u8BF7\u53C2\u8003"),A=n("\u8868\u8FBE\u5F0F\u6838\u5FC3\u53D8\u91CF"),G=e(`

    \u68C0\u7D22\u8C03\u7528\u8BB0\u5F55

    \u5F53\u4F60\u7528 tt \u8BB0\u5F55\u4E86\u4E00\u5927\u7247\u7684\u65F6\u95F4\u7247\u6BB5\u4E4B\u540E\uFF0C\u4F60\u5E0C\u671B\u80FD\u4ECE\u4E2D\u7B5B\u9009\u51FA\u81EA\u5DF1\u9700\u8981\u7684\u65F6\u95F4\u7247\u6BB5\uFF0C\u8FD9\u4E2A\u65F6\u5019\u4F60\u5C31\u9700\u8981\u5BF9\u73B0\u6709\u8BB0\u5F55\u8FDB\u884C\u68C0\u7D22\u3002

    \u5047\u8BBE\u6211\u4EEC\u6709\u8FD9\u4E9B\u8BB0\u5F55

    $ tt -l
    +
    • \u547D\u4EE4\u53C2\u6570\u89E3\u6790

      • -t

        tt \u547D\u4EE4\u6709\u5F88\u591A\u4E2A\u4E3B\u53C2\u6570\uFF0C-t \u5C31\u662F\u5176\u4E2D\u4E4B\u4E00\u3002\u8FD9\u4E2A\u53C2\u6570\u7684\u8868\u660E\u5E0C\u671B\u8BB0\u5F55\u4E0B\u7C7B demo.MathGame \u7684 primeFactors \u65B9\u6CD5\u7684\u6BCF\u6B21\u6267\u884C\u60C5\u51B5\u3002

      • -n 3

        \u5F53\u4F60\u6267\u884C\u4E00\u4E2A\u8C03\u7528\u91CF\u4E0D\u9AD8\u7684\u65B9\u6CD5\u65F6\u53EF\u80FD\u4F60\u8FD8\u80FD\u6709\u8DB3\u591F\u7684\u65F6\u95F4\u7528 CTRL+C \u4E2D\u65AD tt \u547D\u4EE4\u8BB0\u5F55\u7684\u8FC7\u7A0B\uFF0C\u4F46\u5982\u679C\u9047\u5230\u8C03\u7528\u91CF\u975E\u5E38\u5927\u7684\u65B9\u6CD5\uFF0C\u77AC\u95F4\u5C31\u80FD\u5C06\u4F60\u7684 JVM \u5185\u5B58\u6491\u7206\u3002

        \u6B64\u65F6\u4F60\u53EF\u4EE5\u901A\u8FC7 -n \u53C2\u6570\u6307\u5B9A\u4F60\u9700\u8981\u8BB0\u5F55\u7684\u6B21\u6570\uFF0C\u5F53\u8FBE\u5230\u8BB0\u5F55\u6B21\u6570\u65F6 Arthas \u4F1A\u4E3B\u52A8\u4E2D\u65AD tt \u547D\u4EE4\u7684\u8BB0\u5F55\u8FC7\u7A0B\uFF0C\u907F\u514D\u4EBA\u5DE5\u64CD\u4F5C\u65E0\u6CD5\u505C\u6B62\u7684\u60C5\u51B5\u3002

      • -m 1

        \u901A\u8FC7 -m \u53C2\u6570\u6307\u5B9A Class \u5339\u914D\u7684\u6700\u5927\u6570\u91CF\uFF0C\u9632\u6B62\u5339\u914D\u5230\u7684 Class \u6570\u91CF\u592A\u591A\u5BFC\u81F4 JVM \u6302\u8D77\uFF0C\u9ED8\u8BA4\u503C\u662F 50\u3002

      • -c <classloader hash>

        \u5F53\u540C\u540D\u7C7B\u88AB\u591A\u4E2A classloader \u52A0\u8F7D\u65F6\uFF0C\u53EF\u4EE5\u7528 -c \u6307\u5B9A\u53EA\u589E\u5F3A\u67D0\u4E2A classloader \u52A0\u8F7D\u7684\u7C7B\u3002\u53EF\u4EE5\u5148\u7528 sc -d className \u67E5\u770B\u5177\u4F53\u7684 classloader hash\u3002

    • \u8868\u683C\u5B57\u6BB5\u8BF4\u660E

    \u8868\u683C\u5B57\u6BB5\u5B57\u6BB5\u89E3\u91CA
    INDEX\u65F6\u95F4\u7247\u6BB5\u8BB0\u5F55\u7F16\u53F7\uFF0C\u6BCF\u4E00\u4E2A\u7F16\u53F7\u4EE3\u8868\u7740\u4E00\u6B21\u8C03\u7528\uFF0C\u540E\u7EED tt \u8FD8\u6709\u5F88\u591A\u547D\u4EE4\u90FD\u662F\u57FA\u4E8E\u6B64\u7F16\u53F7\u6307\u5B9A\u8BB0\u5F55\u64CD\u4F5C\uFF0C\u975E\u5E38\u91CD\u8981\u3002
    TIMESTAMP\u65B9\u6CD5\u6267\u884C\u7684\u672C\u673A\u65F6\u95F4\uFF0C\u8BB0\u5F55\u4E86\u8FD9\u4E2A\u65F6\u95F4\u7247\u6BB5\u6240\u53D1\u751F\u7684\u672C\u673A\u65F6\u95F4
    COST(ms)\u65B9\u6CD5\u6267\u884C\u7684\u8017\u65F6
    IS-RET\u65B9\u6CD5\u662F\u5426\u4EE5\u6B63\u5E38\u8FD4\u56DE\u7684\u5F62\u5F0F\u7ED3\u675F
    IS-EXP\u65B9\u6CD5\u662F\u5426\u4EE5\u629B\u5F02\u5E38\u7684\u5F62\u5F0F\u7ED3\u675F
    OBJECT\u6267\u884C\u5BF9\u8C61\u7684hashCode()\uFF0C\u6CE8\u610F\uFF0C\u66FE\u7ECF\u6709\u4EBA\u8BEF\u8BA4\u4E3A\u662F\u5BF9\u8C61\u5728 JVM \u4E2D\u7684\u5185\u5B58\u5730\u5740\uFF0C\u4F46\u5F88\u9057\u61BE\u4ED6\u4E0D\u662F\u3002\u4F46\u4ED6\u80FD\u5E2E\u52A9\u4F60\u7B80\u5355\u7684\u6807\u8BB0\u5F53\u524D\u6267\u884C\u65B9\u6CD5\u7684\u7C7B\u5B9E\u4F53
    CLASS\u6267\u884C\u7684\u7C7B\u540D
    METHOD\u6267\u884C\u7684\u65B9\u6CD5\u540D
    `,7),_=e("
  • \u6761\u4EF6\u8868\u8FBE\u5F0F

    \u4E0D\u77E5\u9053\u5927\u5BB6\u662F\u5426\u6709\u5728\u4F7F\u7528\u8FC7\u7A0B\u4E2D\u9047\u5230\u4EE5\u4E0B\u56F0\u60D1

    • Arthas \u4F3C\u4E4E\u5F88\u96BE\u533A\u5206\u51FA\u91CD\u8F7D\u7684\u65B9\u6CD5
    • \u6211\u53EA\u9700\u8981\u89C2\u5BDF\u7279\u5B9A\u53C2\u6570\uFF0C\u4F46\u662F tt \u5374\u5168\u90E8\u90FD\u7ED9\u6211\u8BB0\u5F55\u4E86\u4E0B\u6765

    \u6761\u4EF6\u8868\u8FBE\u5F0F\u4E5F\u662F\u7528 \bOGNL \u6765\u7F16\u5199\uFF0C\u6838\u5FC3\u7684\u5224\u65AD\u5BF9\u8C61\u4F9D\u7136\u662F Advice \u5BF9\u8C61\u3002\u9664\u4E86 tt \u547D\u4EE4\u4E4B\u5916\uFF0Cwatch\u3001trace\u3001stack \u547D\u4EE4\u4E5F\u90FD\u652F\u6301\u6761\u4EF6\u8868\u8FBE\u5F0F\u3002

  • \u89E3\u51B3\u65B9\u6CD5\u91CD\u8F7D

    tt -t *Test print params.length==1

    \u901A\u8FC7\u5236\u5B9A\u53C2\u6570\u4E2A\u6570\u7684\u5F62\u5F0F\u89E3\u51B3\u4E0D\u540C\u7684\u65B9\u6CD5\u7B7E\u540D\uFF0C\u5982\u679C\u53C2\u6570\u4E2A\u6570\u4E00\u6837\uFF0C\u4F60\u8FD8\u53EF\u4EE5\u8FD9\u6837\u5199

    tt -t *Test print 'params[1] instanceof Integer'

  • \u89E3\u51B3\u6307\u5B9A\u53C2\u6570

    tt -t *Test print params[0].mobile=="13989838402"

  • ",3),g=s("p",null,[n("\u6784\u6210\u6761\u4EF6\u8868\u8FBE\u5F0F\u7684 "),s("code",null,"Advice"),n(" \u5BF9\u8C61")],-1),T=n("\u524D\u8FB9\u770B\u5230\u4E86\u5F88\u591A\u6761\u4EF6\u8868\u8FBE\u5F0F\u4E2D\uFF0C\u90FD\u4F7F\u7528\u4E86 "),E=s("code",null,"params[0]",-1),M=n("\uFF0C\u6709\u5173\u8FD9\u4E2A\u53D8\u91CF\u7684\u4ECB\u7ECD\uFF0C\u8BF7\u53C2\u8003"),x=n("\u8868\u8FBE\u5F0F\u6838\u5FC3\u53D8\u91CF"),I=n("\u590D\u6742\u7684\u7B5B\u9009\u3001\u6295\u5F71\u3001\u7A7A\u503C\u5904\u7406\u53CA AI Agent \u751F\u6210\u5EFA\u8BAE\u53C2\u89C1 "),S=n("OGNL \u590D\u6742\u8868\u8FBE\u5F0F\u4F7F\u7528\u6280\u5DE7"),C=n("\u3002"),A=e(`

    \u68C0\u7D22\u8C03\u7528\u8BB0\u5F55

    \u5F53\u4F60\u7528 tt \u8BB0\u5F55\u4E86\u4E00\u5927\u7247\u7684\u65F6\u95F4\u7247\u6BB5\u4E4B\u540E\uFF0C\u4F60\u5E0C\u671B\u80FD\u4ECE\u4E2D\u7B5B\u9009\u51FA\u81EA\u5DF1\u9700\u8981\u7684\u65F6\u95F4\u7247\u6BB5\uFF0C\u8FD9\u4E2A\u65F6\u5019\u4F60\u5C31\u9700\u8981\u5BF9\u73B0\u6709\u8BB0\u5F55\u8FDB\u884C\u68C0\u7D22\u3002

    \u5047\u8BBE\u6211\u4EEC\u6709\u8FD9\u4E9B\u8BB0\u5F55

    $ tt -l
      INDEX   TIMESTAMP            COST(ms)  IS-RET  IS-EXP   OBJECT         CLASS                          METHOD
     -------------------------------------------------------------------------------------------------------------------------------------
      1000    2018-12-04 11:15:38  1.096236  false   true     0x4b67cf4d     MathGame                       primeFactors
    @@ -71,7 +71,7 @@ Affect(row-cnt:1]
     Time fragment[1004] successfully replayed.
     Affect(row-cnt:1) cost in 14 ms.
    -

    \u4F60\u4F1A\u53D1\u73B0\u7ED3\u679C\u867D\u7136\u4E00\u6837\uFF0C\u4F46\u8C03\u7528\u7684\u8DEF\u5F84\u53D1\u751F\u4E86\u53D8\u5316\uFF0C\u7531\u539F\u6765\u7684\u7A0B\u5E8F\u53D1\u8D77\u53D8\u6210\u4E86 Arthas \u81EA\u5DF1\u7684\u5185\u90E8\u7EBF\u7A0B\u53D1\u8D77\u7684\u8C03\u7528\u4E86\u3002

    \u89C2\u5BDF\u8868\u8FBE\u5F0F

    -w, --watch-express \u89C2\u5BDF\u65F6\u7A7A\u96A7\u9053\u4F7F\u7528ognl \u8868\u8FBE\u5F0F

    `,17),O=n("\u4F7F\u7528"),F=n("\u8868\u8FBE\u5F0F\u6838\u5FC3\u53D8\u91CF"),P=n("\u4E2D\u6240\u6709\u53D8\u91CF\u4F5C\u4E3A\u5DF2\u77E5\u6761\u4EF6\u7F16\u5199\u8868\u8FBE\u5F0F\u3002"),R=e(`
    [arthas@10718]$ tt -t demo.MathGame run -n 5
    +

    \u4F60\u4F1A\u53D1\u73B0\u7ED3\u679C\u867D\u7136\u4E00\u6837\uFF0C\u4F46\u8C03\u7528\u7684\u8DEF\u5F84\u53D1\u751F\u4E86\u53D8\u5316\uFF0C\u7531\u539F\u6765\u7684\u7A0B\u5E8F\u53D1\u8D77\u53D8\u6210\u4E86 Arthas \u81EA\u5DF1\u7684\u5185\u90E8\u7EBF\u7A0B\u53D1\u8D77\u7684\u8C03\u7528\u4E86\u3002

    \u89C2\u5BDF\u8868\u8FBE\u5F0F

    -w, --watch-express \u89C2\u5BDF\u65F6\u7A7A\u96A7\u9053\u4F7F\u7528ognl \u8868\u8FBE\u5F0F

    `,17),G=n("\u4F7F\u7528"),O=n("\u8868\u8FBE\u5F0F\u6838\u5FC3\u53D8\u91CF"),F=n("\u4E2D\u6240\u6709\u53D8\u91CF\u4F5C\u4E3A\u5DF2\u77E5\u6761\u4EF6\u7F16\u5199\u8868\u8FBE\u5F0F\u3002"),N=e(`
    [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
    @@ -88,6 +88,6 @@ Affect(class count: 1000       2021-01-08 21:54:17         0.901091     true       false       0x7699a589          MathGame                                  run
     [arthas@10718]$ tt -w '@demo.MathGame@random.nextInt(100)'  -x 1 -i 1000
     @Integer[46]
    -
    `,3),w=n("\u6CE8\u610F\u8FD9\u91CC\u4F7F\u7528 "),N=s("code",null,"com.taobao.arthas.core.advisor.Advice#getLoader",-1),D=n("\u52A0\u8F7D,\u4F7F\u7528\u7CBE\u786E"),L=s("code",null,"classloader",-1),X=n(),y=n("ognl"),B=n("\u66F4\u597D\u3002"),J=n("\u9AD8\u7EA7\u7528\u6CD5 "),H={href:"https://github.com/alibaba/arthas/issues/482",target:"_blank",rel:"noopener noreferrer"},$=n("\u83B7\u53D6 spring context \u8C03\u7528 bean \u65B9\u6CD5"),V=e(`
    • \u9700\u8981\u5F3A\u8C03\u7684\u70B9
      1. ThreadLocal \u4FE1\u606F\u4E22\u5931

        \u5F88\u591A\u6846\u67B6\u5077\u5077\u7684\u5C06\u4E00\u4E9B\u73AF\u5883\u53D8\u91CF\u4FE1\u606F\u585E\u5230\u4E86\u53D1\u8D77\u8C03\u7528\u7EBF\u7A0B\u7684 ThreadLocal \u4E2D\uFF0C\u7531\u4E8E\u8C03\u7528\u7EBF\u7A0B\u53D1\u751F\u4E86\u53D8\u5316\uFF0C\u8FD9\u4E9B ThreadLocal \u7EBF\u7A0B\u4FE1\u606F\u65E0\u6CD5\u901A\u8FC7 Arthas \u4FDD\u5B58\uFF0C\u6240\u4EE5\u8FD9\u4E9B\u4FE1\u606F\u5C06\u4F1A\u4E22\u5931\u3002

        \u4E00\u4E9B\u5E38\u89C1\u7684 CASE \u6BD4\u5982\uFF1A\u9E70\u773C\u7684 TraceId \u7B49\u3002

      2. \u5F15\u7528\u7684\u5BF9\u8C61

        \u9700\u8981\u5F3A\u8C03\u7684\u662F\uFF0Ctt \u547D\u4EE4\u662F\u5C06\u5F53\u524D\u73AF\u5883\u7684\u5BF9\u8C61\u5F15\u7528\u4FDD\u5B58\u8D77\u6765\uFF0C\u4F46\u4EC5\u4EC5\u4E5F\u53EA\u80FD\u4FDD\u5B58\u4E00\u4E2A\u5F15\u7528\u800C\u5DF2\u3002\u5982\u679C\u65B9\u6CD5\u5185\u90E8\u5BF9\u5165\u53C2\u8FDB\u884C\u4E86\u53D8\u66F4\uFF0C\u6216\u8005\u8FD4\u56DE\u7684\u5BF9\u8C61\u7ECF\u8FC7\u4E86\u540E\u7EED\u7684\u5904\u7406\uFF0C\u90A3\u4E48\u5728 tt \u67E5\u770B\u7684\u65F6\u5019\u5C06\u65E0\u6CD5\u770B\u5230\u5F53\u65F6\u6700\u51C6\u786E\u7684\u503C\u3002\u8FD9\u4E5F\u662F\u4E3A\u4EC0\u4E48 watch \u547D\u4EE4\u5B58\u5728\u7684\u610F\u4E49\u3002

    \u901A\u8FC7\u7D22\u5F15\u5220\u9664\u6307\u5B9A\u7684 tt \u8BB0\u5F55

    tt -d -i 1001
    +
    `,3),P=n("\u6CE8\u610F\u8FD9\u91CC\u4F7F\u7528 "),R=s("code",null,"com.taobao.arthas.core.advisor.Advice#getLoader",-1),w=n("\u52A0\u8F7D,\u4F7F\u7528\u7CBE\u786E"),L=s("code",null,"classloader",-1),D=n(),X=n("ognl"),y=n("\u66F4\u597D\u3002"),B=n("\u9AD8\u7EA7\u7528\u6CD5 "),J={href:"https://github.com/alibaba/arthas/issues/482",target:"_blank",rel:"noopener noreferrer"},H=n("\u83B7\u53D6 spring context \u8C03\u7528 bean \u65B9\u6CD5"),$=e(`
    • \u9700\u8981\u5F3A\u8C03\u7684\u70B9
      1. ThreadLocal \u4FE1\u606F\u4E22\u5931

        \u5F88\u591A\u6846\u67B6\u5077\u5077\u7684\u5C06\u4E00\u4E9B\u73AF\u5883\u53D8\u91CF\u4FE1\u606F\u585E\u5230\u4E86\u53D1\u8D77\u8C03\u7528\u7EBF\u7A0B\u7684 ThreadLocal \u4E2D\uFF0C\u7531\u4E8E\u8C03\u7528\u7EBF\u7A0B\u53D1\u751F\u4E86\u53D8\u5316\uFF0C\u8FD9\u4E9B ThreadLocal \u7EBF\u7A0B\u4FE1\u606F\u65E0\u6CD5\u901A\u8FC7 Arthas \u4FDD\u5B58\uFF0C\u6240\u4EE5\u8FD9\u4E9B\u4FE1\u606F\u5C06\u4F1A\u4E22\u5931\u3002

        \u4E00\u4E9B\u5E38\u89C1\u7684 CASE \u6BD4\u5982\uFF1A\u9E70\u773C\u7684 TraceId \u7B49\u3002

      2. \u5F15\u7528\u7684\u5BF9\u8C61

        \u9700\u8981\u5F3A\u8C03\u7684\u662F\uFF0Ctt \u547D\u4EE4\u662F\u5C06\u5F53\u524D\u73AF\u5883\u7684\u5BF9\u8C61\u5F15\u7528\u4FDD\u5B58\u8D77\u6765\uFF0C\u4F46\u4EC5\u4EC5\u4E5F\u53EA\u80FD\u4FDD\u5B58\u4E00\u4E2A\u5F15\u7528\u800C\u5DF2\u3002\u5982\u679C\u65B9\u6CD5\u5185\u90E8\u5BF9\u5165\u53C2\u8FDB\u884C\u4E86\u53D8\u66F4\uFF0C\u6216\u8005\u8FD4\u56DE\u7684\u5BF9\u8C61\u7ECF\u8FC7\u4E86\u540E\u7EED\u7684\u5904\u7406\uFF0C\u90A3\u4E48\u5728 tt \u67E5\u770B\u7684\u65F6\u5019\u5C06\u65E0\u6CD5\u770B\u5230\u5F53\u65F6\u6700\u51C6\u786E\u7684\u503C\u3002\u8FD9\u4E5F\u662F\u4E3A\u4EC0\u4E48 watch \u547D\u4EE4\u5B58\u5728\u7684\u610F\u4E49\u3002

    \u901A\u8FC7\u7D22\u5F15\u5220\u9664\u6307\u5B9A\u7684 tt \u8BB0\u5F55

    tt -d -i 1001
     

    \u6E05\u9664\u6240\u6709\u7684 tt \u8BB0\u5F55

    tt --delete-all
    -
    `,5);function q(j,Q){const p=l("ExternalLinkIcon"),t=l("RouterLink");return i(),r("div",null,[u,s("p",null,[s("a",m,[b,k,a(p)])]),v,s("p",null,[h,a(t,{to:"/doc/quick-start.html"},{default:o(()=>[f]),_:1}),_,g,T]),E,s("ul",null,[M,s("li",null,[x,s("p",null,[I,S,C,a(t,{to:"/doc/advice-class.html"},{default:o(()=>[A]),_:1})])])]),G,s("ul",null,[s("li",null,[O,a(t,{to:"/doc/advice-class.html"},{default:o(()=>[F]),_:1}),P])]),R,s("p",null,[w,N,D,L,X,a(t,{to:"/doc/ognl.html"},{default:o(()=>[y]),_:1}),B]),s("p",null,[J,s("a",H,[$,a(p)])]),V])}const W=c(d,[["render",q],["__file","tt.html.vue"]]);export{W as default}; +
    `,5);function V(q,j){const t=o("RouterLink"),l=o("ExternalLinkIcon");return i(),r("div",null,[u,s("p",null,[m,a(t,{to:"/doc/quick-start.html"},{default:p(()=>[b]),_:1}),k,v,h]),f,s("ul",null,[_,s("li",null,[g,s("p",null,[T,E,M,a(t,{to:"/doc/advice-class.html"},{default:p(()=>[x]),_:1})]),s("p",null,[I,a(t,{to:"/doc/ognl-express.html"},{default:p(()=>[S]),_:1}),C])])]),A,s("ul",null,[s("li",null,[G,a(t,{to:"/doc/advice-class.html"},{default:p(()=>[O]),_:1}),F])]),N,s("p",null,[P,R,w,L,D,a(t,{to:"/doc/ognl.html"},{default:p(()=>[X]),_:1}),y]),s("p",null,[B,s("a",J,[H,a(l)])]),$])}const U=c(d,[["render",V],["__file","tt.html.vue"]]);export{U as default}; diff --git a/assets/tt.html.e26b44fd.js b/assets/tt.html.ab370b4f.js similarity index 92% rename from assets/tt.html.e26b44fd.js rename to assets/tt.html.ab370b4f.js index 4670e2224..08802c980 100644 --- a/assets/tt.html.e26b44fd.js +++ b/assets/tt.html.ab370b4f.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-79eacb55","path":"/en/doc/tt.html","title":"tt","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Precautions","slug":"precautions","link":"#precautions","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"Start Demo","slug":"start-demo","link":"#start-demo","children":[]},{"level":3,"title":"Record method calls","slug":"record-method-calls","link":"#record-method-calls","children":[]},{"level":3,"title":"Specify the max number of matched Classes","slug":"specify-the-max-number-of-matched-classes","link":"#specify-the-max-number-of-matched-classes","children":[]},{"level":3,"title":"List all records","slug":"list-all-records","link":"#list-all-records","children":[]},{"level":3,"title":"Searching for records","slug":"searching-for-records","link":"#searching-for-records","children":[]},{"level":3,"title":"Check context of the call","slug":"check-context-of-the-call","link":"#check-context-of-the-call","children":[]},{"level":3,"title":"Replay record","slug":"replay-record","link":"#replay-record","children":[]},{"level":3,"title":"Watch express","slug":"watch-express","link":"#watch-express","children":[]},{"level":3,"title":"Delete the specified tt record by index","slug":"delete-the-specified-tt-record-by-index","link":"#delete-the-specified-tt-record-by-index","children":[]},{"level":3,"title":"Clear all tt records","slug":"clear-all-tt-records","link":"#clear-all-tt-records","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/tt.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-79eacb55","path":"/en/doc/tt.html","title":"tt","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Precautions","slug":"precautions","link":"#precautions","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"Start Demo","slug":"start-demo","link":"#start-demo","children":[]},{"level":3,"title":"Record method calls","slug":"record-method-calls","link":"#record-method-calls","children":[]},{"level":3,"title":"Specify the max number of matched Classes","slug":"specify-the-max-number-of-matched-classes","link":"#specify-the-max-number-of-matched-classes","children":[]},{"level":3,"title":"List all records","slug":"list-all-records","link":"#list-all-records","children":[]},{"level":3,"title":"Searching for records","slug":"searching-for-records","link":"#searching-for-records","children":[]},{"level":3,"title":"Check context of the call","slug":"check-context-of-the-call","link":"#check-context-of-the-call","children":[]},{"level":3,"title":"Replay record","slug":"replay-record","link":"#replay-record","children":[]},{"level":3,"title":"Watch express","slug":"watch-express","link":"#watch-express","children":[]},{"level":3,"title":"Delete the specified tt record by index","slug":"delete-the-specified-tt-record-by-index","link":"#delete-the-specified-tt-record-by-index","children":[]},{"level":3,"title":"Clear all tt records","slug":"clear-all-tt-records","link":"#clear-all-tt-records","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/tt.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/tt.html.06ba156a.js b/assets/tt.html.ec638e55.js similarity index 95% rename from assets/tt.html.06ba156a.js rename to assets/tt.html.ec638e55.js index 74b7f73c6..c5354d989 100644 --- a/assets/tt.html.06ba156a.js +++ b/assets/tt.html.ec638e55.js @@ -1 +1 @@ -const l=JSON.parse('{"key":"v-71adf3e9","path":"/doc/tt.html","title":"tt","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u6CE8\u610F\u4E8B\u9879","slug":"\u6CE8\u610F\u4E8B\u9879","link":"#\u6CE8\u610F\u4E8B\u9879","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"\u542F\u52A8 Demo","slug":"\u542F\u52A8-demo","link":"#\u542F\u52A8-demo","children":[]},{"level":3,"title":"\u8BB0\u5F55\u8C03\u7528","slug":"\u8BB0\u5F55\u8C03\u7528","link":"#\u8BB0\u5F55\u8C03\u7528","children":[]},{"level":3,"title":"\u6307\u5B9A Class \u6700\u5927\u5339\u914D\u6570\u91CF","slug":"\u6307\u5B9A-class-\u6700\u5927\u5339\u914D\u6570\u91CF","link":"#\u6307\u5B9A-class-\u6700\u5927\u5339\u914D\u6570\u91CF","children":[]},{"level":3,"title":"\u68C0\u7D22\u8C03\u7528\u8BB0\u5F55","slug":"\u68C0\u7D22\u8C03\u7528\u8BB0\u5F55","link":"#\u68C0\u7D22\u8C03\u7528\u8BB0\u5F55","children":[]},{"level":3,"title":"\u67E5\u770B\u8C03\u7528\u4FE1\u606F","slug":"\u67E5\u770B\u8C03\u7528\u4FE1\u606F","link":"#\u67E5\u770B\u8C03\u7528\u4FE1\u606F","children":[]},{"level":3,"title":"\u91CD\u505A\u4E00\u6B21\u8C03\u7528","slug":"\u91CD\u505A\u4E00\u6B21\u8C03\u7528","link":"#\u91CD\u505A\u4E00\u6B21\u8C03\u7528","children":[]},{"level":3,"title":"\u89C2\u5BDF\u8868\u8FBE\u5F0F","slug":"\u89C2\u5BDF\u8868\u8FBE\u5F0F","link":"#\u89C2\u5BDF\u8868\u8FBE\u5F0F","children":[]},{"level":3,"title":"\u901A\u8FC7\u7D22\u5F15\u5220\u9664\u6307\u5B9A\u7684 tt \u8BB0\u5F55","slug":"\u901A\u8FC7\u7D22\u5F15\u5220\u9664\u6307\u5B9A\u7684-tt-\u8BB0\u5F55","link":"#\u901A\u8FC7\u7D22\u5F15\u5220\u9664\u6307\u5B9A\u7684-tt-\u8BB0\u5F55","children":[]},{"level":3,"title":"\u6E05\u9664\u6240\u6709\u7684 tt \u8BB0\u5F55","slug":"\u6E05\u9664\u6240\u6709\u7684-tt-\u8BB0\u5F55","link":"#\u6E05\u9664\u6240\u6709\u7684-tt-\u8BB0\u5F55","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/tt.md","version":"4.3.3"}');export{l as data}; +const l=JSON.parse('{"key":"v-71adf3e9","path":"/doc/tt.html","title":"tt","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u6CE8\u610F\u4E8B\u9879","slug":"\u6CE8\u610F\u4E8B\u9879","link":"#\u6CE8\u610F\u4E8B\u9879","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"\u542F\u52A8 Demo","slug":"\u542F\u52A8-demo","link":"#\u542F\u52A8-demo","children":[]},{"level":3,"title":"\u8BB0\u5F55\u8C03\u7528","slug":"\u8BB0\u5F55\u8C03\u7528","link":"#\u8BB0\u5F55\u8C03\u7528","children":[]},{"level":3,"title":"\u6307\u5B9A Class \u6700\u5927\u5339\u914D\u6570\u91CF","slug":"\u6307\u5B9A-class-\u6700\u5927\u5339\u914D\u6570\u91CF","link":"#\u6307\u5B9A-class-\u6700\u5927\u5339\u914D\u6570\u91CF","children":[]},{"level":3,"title":"\u68C0\u7D22\u8C03\u7528\u8BB0\u5F55","slug":"\u68C0\u7D22\u8C03\u7528\u8BB0\u5F55","link":"#\u68C0\u7D22\u8C03\u7528\u8BB0\u5F55","children":[]},{"level":3,"title":"\u67E5\u770B\u8C03\u7528\u4FE1\u606F","slug":"\u67E5\u770B\u8C03\u7528\u4FE1\u606F","link":"#\u67E5\u770B\u8C03\u7528\u4FE1\u606F","children":[]},{"level":3,"title":"\u91CD\u505A\u4E00\u6B21\u8C03\u7528","slug":"\u91CD\u505A\u4E00\u6B21\u8C03\u7528","link":"#\u91CD\u505A\u4E00\u6B21\u8C03\u7528","children":[]},{"level":3,"title":"\u89C2\u5BDF\u8868\u8FBE\u5F0F","slug":"\u89C2\u5BDF\u8868\u8FBE\u5F0F","link":"#\u89C2\u5BDF\u8868\u8FBE\u5F0F","children":[]},{"level":3,"title":"\u901A\u8FC7\u7D22\u5F15\u5220\u9664\u6307\u5B9A\u7684 tt \u8BB0\u5F55","slug":"\u901A\u8FC7\u7D22\u5F15\u5220\u9664\u6307\u5B9A\u7684-tt-\u8BB0\u5F55","link":"#\u901A\u8FC7\u7D22\u5F15\u5220\u9664\u6307\u5B9A\u7684-tt-\u8BB0\u5F55","children":[]},{"level":3,"title":"\u6E05\u9664\u6240\u6709\u7684 tt \u8BB0\u5F55","slug":"\u6E05\u9664\u6240\u6709\u7684-tt-\u8BB0\u5F55","link":"#\u6E05\u9664\u6240\u6709\u7684-tt-\u8BB0\u5F55","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/tt.md","version":"4.3.5"}');export{l as data}; diff --git a/assets/tunnel.html.244face9.js b/assets/tunnel.html.3a98510a.js similarity index 79% rename from assets/tunnel.html.244face9.js rename to assets/tunnel.html.3a98510a.js index 354519bf4..929c7dd00 100644 --- a/assets/tunnel.html.244face9.js +++ b/assets/tunnel.html.3a98510a.js @@ -1,4 +1,4 @@ -import{_ as o,a as c,b as d}from"./tunnel-server-agents.03d5eafa.js";import{_ as p,o as h,c as u,a as e,b as n,w as l,e as s,d as t,r as i}from"./app.524ecf5c.js";const v={},_=e("h1",{id:"arthas-tunnel",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#arthas-tunnel","aria-hidden":"true"},"#"),s(" Arthas Tunnel")],-1),b=e("p",null,"\u901A\u8FC7 Arthas Tunnel Server/Client \u6765\u8FDC\u7A0B\u7BA1\u7406/\u8FDE\u63A5\u591A\u4E2A Agent\u3002",-1),m=e("p",null,"\u6BD4\u5982\uFF0C\u5728\u6D41\u5F0F\u8BA1\u7B97\u91CC\uFF0CJava \u8FDB\u7A0B\u53EF\u4EE5\u662F\u5728\u4E0D\u540C\u7684\u673A\u5668\u542F\u52A8\u7684\uFF0C\u60F3\u8981\u4F7F\u7528 Arthas \u53BB\u8BCA\u65AD\u4F1A\u6BD4\u8F83\u9EBB\u70E6\uFF0C\u56E0\u4E3A\u7528\u6237\u901A\u5E38\u6CA1\u6709\u673A\u5668\u7684\u6743\u9650\uFF0C\u5373\u4F7F\u767B\u5F55\u673A\u5668\u4E5F\u5206\u4E0D\u6E05\u662F\u54EA\u4E2A Java \u8FDB\u7A0B\u3002",-1),g=e("p",null,"\u5728\u8FD9\u79CD\u60C5\u51B5\u4E0B\uFF0C\u53EF\u4EE5\u4F7F\u7528 Arthas Tunnel Server/Client\u3002",-1),k=e("p",null,"\u53C2\u8003:",-1),f=s("1: "),x=s("Web Console"),w=s("2: "),A=s("Arthas Spring Boot Starter"),I=e("h2",{id:"\u4E0B\u8F7D\u90E8\u7F72-arthas-tunnel-server",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u4E0B\u8F7D\u90E8\u7F72-arthas-tunnel-server","aria-hidden":"true"},"#"),s(" \u4E0B\u8F7D\u90E8\u7F72 arthas tunnel server")],-1),E={href:"https://github.com/alibaba/arthas/releases",target:"_blank",rel:"noopener noreferrer"},N=s("https://github.com/alibaba/arthas/releases"),R=s("\u4ECE Maven \u4ED3\u5E93\u4E0B\u8F7D\uFF1A"),L={href:"https://arthas.aliyun.com/download/arthas-tunnel-server/latest_version?mirror=aliyun",target:"_blank",rel:"noopener noreferrer"},S=e("img",{src:"https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square",alt:"",title:"Arthas"},null,-1),y=s("\u4ECE Github Releases \u9875\u4E0B\u8F7D\uFF1A "),T={href:"https://github.com/alibaba/arthas/releases",target:"_blank",rel:"noopener noreferrer"},V=s("https://github.com/alibaba/arthas/releases"),j=t(`

    Arthas tunnel server \u662F\u4E00\u4E2A spring boot fat jar \u5E94\u7528\uFF0C\u76F4\u63A5java -jar\u542F\u52A8\uFF1A

    java -jar  arthas-tunnel-server.jar
    +import{_ as o,a as c,b as d}from"./tunnel-server-agents.03d5eafa.js";import{_ as p,o as h,c as u,a as e,b as n,w as l,e as s,d as t,r as i}from"./app.e2427bec.js";const v={},_=e("h1",{id:"arthas-tunnel",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#arthas-tunnel","aria-hidden":"true"},"#"),s(" Arthas Tunnel")],-1),b=e("p",null,"\u901A\u8FC7 Arthas Tunnel Server/Client \u6765\u8FDC\u7A0B\u7BA1\u7406/\u8FDE\u63A5\u591A\u4E2A Agent\u3002",-1),m=e("p",null,"\u6BD4\u5982\uFF0C\u5728\u6D41\u5F0F\u8BA1\u7B97\u91CC\uFF0CJava \u8FDB\u7A0B\u53EF\u4EE5\u662F\u5728\u4E0D\u540C\u7684\u673A\u5668\u542F\u52A8\u7684\uFF0C\u60F3\u8981\u4F7F\u7528 Arthas \u53BB\u8BCA\u65AD\u4F1A\u6BD4\u8F83\u9EBB\u70E6\uFF0C\u56E0\u4E3A\u7528\u6237\u901A\u5E38\u6CA1\u6709\u673A\u5668\u7684\u6743\u9650\uFF0C\u5373\u4F7F\u767B\u5F55\u673A\u5668\u4E5F\u5206\u4E0D\u6E05\u662F\u54EA\u4E2A Java \u8FDB\u7A0B\u3002",-1),g=e("p",null,"\u5728\u8FD9\u79CD\u60C5\u51B5\u4E0B\uFF0C\u53EF\u4EE5\u4F7F\u7528 Arthas Tunnel Server/Client\u3002",-1),k=e("p",null,"\u53C2\u8003:",-1),f=s("1: "),x=s("Web Console"),w=s("2: "),A=s("Arthas Spring Boot Starter"),I=e("h2",{id:"\u4E0B\u8F7D\u90E8\u7F72-arthas-tunnel-server",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u4E0B\u8F7D\u90E8\u7F72-arthas-tunnel-server","aria-hidden":"true"},"#"),s(" \u4E0B\u8F7D\u90E8\u7F72 arthas tunnel server")],-1),E={href:"https://github.com/alibaba/arthas/releases",target:"_blank",rel:"noopener noreferrer"},N=s("https://github.com/alibaba/arthas/releases"),R=s("\u4ECE Maven \u4ED3\u5E93\u4E0B\u8F7D\uFF1A"),L={href:"https://arthas.aliyun.com/download/arthas-tunnel-server/latest_version?mirror=aliyun",target:"_blank",rel:"noopener noreferrer"},S=e("img",{src:"https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square",alt:"",title:"Arthas"},null,-1),T=s("\u4ECE Github Releases \u9875\u4E0B\u8F7D\uFF1A "),V={href:"https://github.com/alibaba/arthas/releases",target:"_blank",rel:"noopener noreferrer"},j=s("https://github.com/alibaba/arthas/releases"),y=t(`

    Arthas tunnel server \u662F\u4E00\u4E2A spring boot fat jar \u5E94\u7528\uFF0C\u76F4\u63A5java -jar\u542F\u52A8\uFF1A

    java -jar  arthas-tunnel-server.jar
     

    \u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0Carthas tunnel server \u7684 web \u7AEF\u53E3\u662F8080\uFF0Carthas agent \u8FDE\u63A5\u7684\u7AEF\u53E3\u662F7777\u3002

    `,3),B=s("\u542F\u52A8\u4E4B\u540E\uFF0C\u53EF\u4EE5\u8BBF\u95EE "),D={href:"http://127.0.0.1:8080/",target:"_blank",rel:"noopener noreferrer"},C=s("http://127.0.0.1:8080/"),J=s(" \uFF0C\u518D\u901A\u8FC7"),O=e("code",null,"agentId",-1),P=s("\u8FDE\u63A5\u5230\u5DF2\u6CE8\u518C\u7684 arthas agent \u4E0A\u3002"),U=s("\u901A\u8FC7 Spring Boot \u7684 Endpoint\uFF0C\u53EF\u4EE5\u67E5\u770B\u5230\u5177\u4F53\u7684\u8FDE\u63A5\u4FE1\u606F\uFF1A "),G={href:"http://127.0.0.1:8080/actuator/arthas",target:"_blank",rel:"noopener noreferrer"},M=s("http://127.0.0.1:8080/actuator/arthas"),Z=s(" \uFF0C\u767B\u5F55\u7528\u6237\u540D\u662F"),K=e("code",null,"arthas",-1),$=s("\uFF0C\u5BC6\u7801\u5728 arthas tunnel server \u7684\u65E5\u5FD7\u91CC\u53EF\u4EE5\u627E\u5230\uFF0C\u6BD4\u5982\uFF1A"),q=t(`
    32851 [main] INFO  o.s.b.a.s.s.UserDetailsServiceAutoConfiguration
     
     Using generated security password: f1dca050-3777-48f4-a577-6367e55a78a2
    @@ -12,12 +12,11 @@ Using generated security password: f1dca050-3777-48f4-a577-6367e55a78a2
     
     
     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
    -

    \u5982\u679C\u662F\u542F\u52A8\u65F6\u6CA1\u6709\u8FDE\u63A5\u5230 tunnel server\uFF0C\u4E5F\u53EF\u4EE5\u5728\u540E\u7EED\u81EA\u52A8\u91CD\u8FDE\u6210\u529F\u4E4B\u540E\uFF0C\u901A\u8FC7 session \u547D\u4EE4\u6765\u83B7\u53D6 agentId\uFF1A

    [arthas@86183]$ session
    +

    \u5982\u679C\u662F\u542F\u52A8\u65F6\u6CA1\u6709\u8FDE\u63A5\u5230 tunnel server\uFF0C\u4E5F\u53EF\u4EE5\u5728\u540E\u7EED\u81EA\u52A8\u91CD\u8FDE\u6210\u529F\u4E4B\u540E\uFF0C\u901A\u8FC7 session \u547D\u4EE4\u6765\u83B7\u53D6 agentId\uFF1A

    [arthas@86183]$ session
      Name           Value
     -----------------------------------------------------
      JAVA_PID       86183
    @@ -37,11 +36,10 @@ Escape character is '^]'.
     
     
     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
    -

    \u7136\u540E\u8BBF\u95EE tunnel-server\uFF0C\u53EF\u4EE5\u770B\u5230\u6240\u6709\u8FDE\u63A5\u7684\u5E94\u7528\u5217\u8868\uFF1A

    `,3),oe={href:"http://localhost:8080/apps.html",target:"_blank",rel:"noopener noreferrer"},ce=s("http://localhost:8080/apps.html"),de=e("p",null,[e("img",{src:o,alt:""})],-1),pe=e("p",null,"\u518D\u6253\u5F00\u8BE6\u60C5\uFF0C\u5219\u53EF\u4EE5\u770B\u5230\u8FDE\u63A5\u7684\u6240\u6709 agent \u5217\u8868\uFF1A",-1),he={href:"http://localhost:8080/agents.html?app=test",target:"_blank",rel:"noopener noreferrer"},ue=s("http://localhost:8080/agents.html?app=test"),ve=t('

    \u5B89\u5168\u548C\u6743\u9650\u7BA1\u7406

    \u63D0\u793A

    \u5F3A\u70C8\u5EFA\u8BAE\u4E0D\u8981\u628A tunnel server \u76F4\u63A5\u66B4\u9732\u5230\u516C\u7F51\u4E0A\u3002

    \u76EE\u524D tunnel server \u6CA1\u6709\u4E13\u95E8\u7684\u6743\u9650\u7BA1\u7406

    1. \u7528\u6237\u9700\u8981\u81EA\u884C\u5F00\u53D1\uFF0C\u5BF9 app name \u9274\u6743\u3002
    2. \u5982\u679C\u5F00\u653E\u7BA1\u7406\u9875\u9762\uFF0C\u9700\u8981\u589E\u52A0\u5B89\u5168\u63AA\u65BD\u3002

    \u96C6\u7FA4\u65B9\u5F0F\u7BA1\u7406

    \u5982\u679C\u5E0C\u671B\u90E8\u7F72\u591A\u53F0 tunnel server\uFF0C\u53EF\u4EE5\u901A\u8FC7 nginx \u505A\u8F6C\u53D1\uFF0Credis \u6765\u4FDD\u5B58 agent \u4FE1\u606F\u3002

    • nginx \u9700\u8981\u914D\u7F6E sticky session\uFF0C\u4FDD\u8BC1\u7528\u6237 web socket \u8FDE\u63A5\u5230\u540C\u4E00\u4E2A\u540E\u7AEF tunnel server \u4E0A\u3002\u7B80\u5355\u7684\u914D\u7F6E\u65B9\u5F0F\u662F\u7528ip_hash\u3002

    Arthas tunnel server \u7684\u5DE5\u4F5C\u539F\u7406

    browser <-> arthas tunnel server <-> arthas tunnel client <-> arthas agent
    -
    `,10),_e={href:"https://github.com/alibaba/arthas/blob/master/tunnel-server/README.md#",target:"_blank",rel:"noopener noreferrer"},be=s("tunnel-server/README.md");function me(ge,ke){const r=i("RouterLink"),a=i("ExternalLinkIcon");return h(),u("div",null,[_,b,m,g,k,e("ul",null,[e("li",null,[f,n(r,{to:"/doc/web-console.html"},{default:l(()=>[x]),_:1})]),e("li",null,[w,n(r,{to:"/doc/spring-boot-starter.html"},{default:l(()=>[A]),_:1})])]),I,e("p",null,[e("a",E,[N,n(a)])]),e("ul",null,[e("li",null,[e("p",null,[R,e("a",L,[S,n(a)])])]),e("li",null,[e("p",null,[y,e("a",T,[V,n(a)])])])]),j,e("p",null,[B,e("a",D,[C,n(a)]),J,O,P]),e("p",null,[U,e("a",G,[M,n(a)]),Z,K,$]),q,e("p",null,[F,e("a",W,[Y,n(a)]),z,H,Q]),X,e("div",ee,[se,ne,e("p",null,[ae,e("a",te,[re,n(a)])]),le]),ie,e("p",null,[e("a",oe,[ce,n(a)])]),de,pe,e("p",null,[e("a",he,[ue,n(a)])]),ve,e("p",null,[e("a",_e,[be,n(a)])])])}const we=p(v,[["render",me],["__file","tunnel.html.vue"]]);export{we as default}; +

    \u7136\u540E\u8BBF\u95EE tunnel-server\uFF0C\u53EF\u4EE5\u770B\u5230\u6240\u6709\u8FDE\u63A5\u7684\u5E94\u7528\u5217\u8868\uFF1A

    `,3),oe={href:"http://localhost:8080/apps.html",target:"_blank",rel:"noopener noreferrer"},ce=s("http://localhost:8080/apps.html"),de=e("p",null,[e("img",{src:o,alt:""})],-1),pe=e("p",null,"\u518D\u6253\u5F00\u8BE6\u60C5\uFF0C\u5219\u53EF\u4EE5\u770B\u5230\u8FDE\u63A5\u7684\u6240\u6709 agent \u5217\u8868\uFF1A",-1),he={href:"http://localhost:8080/agents.html?app=test",target:"_blank",rel:"noopener noreferrer"},ue=s("http://localhost:8080/agents.html?app=test"),ve=t('

    \u5B89\u5168\u548C\u6743\u9650\u7BA1\u7406

    \u63D0\u793A

    \u5F3A\u70C8\u5EFA\u8BAE\u4E0D\u8981\u628A tunnel server \u76F4\u63A5\u66B4\u9732\u5230\u516C\u7F51\u4E0A\u3002

    \u76EE\u524D tunnel server \u6CA1\u6709\u4E13\u95E8\u7684\u6743\u9650\u7BA1\u7406

    1. \u7528\u6237\u9700\u8981\u81EA\u884C\u5F00\u53D1\uFF0C\u5BF9 app name \u9274\u6743\u3002
    2. \u5982\u679C\u5F00\u653E\u7BA1\u7406\u9875\u9762\uFF0C\u9700\u8981\u589E\u52A0\u5B89\u5168\u63AA\u65BD\u3002

    \u96C6\u7FA4\u65B9\u5F0F\u7BA1\u7406

    \u5982\u679C\u5E0C\u671B\u90E8\u7F72\u591A\u53F0 tunnel server\uFF0C\u53EF\u4EE5\u901A\u8FC7 nginx \u505A\u8F6C\u53D1\uFF0Credis \u6765\u4FDD\u5B58 agent \u4FE1\u606F\u3002

    • nginx \u9700\u8981\u914D\u7F6E sticky session\uFF0C\u4FDD\u8BC1\u7528\u6237 web socket \u8FDE\u63A5\u5230\u540C\u4E00\u4E2A\u540E\u7AEF tunnel server \u4E0A\u3002\u7B80\u5355\u7684\u914D\u7F6E\u65B9\u5F0F\u662F\u7528ip_hash\u3002

    Arthas tunnel server \u7684\u5DE5\u4F5C\u539F\u7406

    browser <-> arthas tunnel server <-> arthas tunnel client <-> arthas agent
    +
    `,10),_e={href:"https://github.com/alibaba/arthas/blob/master/tunnel-server/README.md#",target:"_blank",rel:"noopener noreferrer"},be=s("tunnel-server/README.md");function me(ge,ke){const r=i("RouterLink"),a=i("ExternalLinkIcon");return h(),u("div",null,[_,b,m,g,k,e("ul",null,[e("li",null,[f,n(r,{to:"/doc/web-console.html"},{default:l(()=>[x]),_:1})]),e("li",null,[w,n(r,{to:"/doc/spring-boot-starter.html"},{default:l(()=>[A]),_:1})])]),I,e("p",null,[e("a",E,[N,n(a)])]),e("ul",null,[e("li",null,[e("p",null,[R,e("a",L,[S,n(a)])])]),e("li",null,[e("p",null,[T,e("a",V,[j,n(a)])])])]),y,e("p",null,[B,e("a",D,[C,n(a)]),J,O,P]),e("p",null,[U,e("a",G,[M,n(a)]),Z,K,$]),q,e("p",null,[F,e("a",W,[Y,n(a)]),z,H,Q]),X,e("div",ee,[se,ne,e("p",null,[ae,e("a",te,[re,n(a)])]),le]),ie,e("p",null,[e("a",oe,[ce,n(a)])]),de,pe,e("p",null,[e("a",he,[ue,n(a)])]),ve,e("p",null,[e("a",_e,[be,n(a)])])])}const we=p(v,[["render",me],["__file","tunnel.html.vue"]]);export{we as default}; diff --git a/assets/tunnel.html.3a583b73.js b/assets/tunnel.html.5c03c09c.js similarity index 93% rename from assets/tunnel.html.3a583b73.js rename to assets/tunnel.html.5c03c09c.js index f3b6d36ff..50e475db5 100644 --- a/assets/tunnel.html.3a583b73.js +++ b/assets/tunnel.html.5c03c09c.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-d2ddc9fe","path":"/doc/tunnel.html","title":"Arthas Tunnel","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4E0B\u8F7D\u90E8\u7F72 arthas tunnel server","slug":"\u4E0B\u8F7D\u90E8\u7F72-arthas-tunnel-server","link":"#\u4E0B\u8F7D\u90E8\u7F72-arthas-tunnel-server","children":[]},{"level":2,"title":"\u542F\u52A8 arthas \u65F6\u8FDE\u63A5\u5230 tunnel server","slug":"\u542F\u52A8-arthas-\u65F6\u8FDE\u63A5\u5230-tunnel-server","link":"#\u542F\u52A8-arthas-\u65F6\u8FDE\u63A5\u5230-tunnel-server","children":[]},{"level":2,"title":"\u6700\u4F73\u5B9E\u8DF5","slug":"\u6700\u4F73\u5B9E\u8DF5","link":"#\u6700\u4F73\u5B9E\u8DF5","children":[]},{"level":2,"title":"Tunnel Server \u7684\u7BA1\u7406\u9875\u9762","slug":"tunnel-server-\u7684\u7BA1\u7406\u9875\u9762","link":"#tunnel-server-\u7684\u7BA1\u7406\u9875\u9762","children":[]},{"level":2,"title":"\u5B89\u5168\u548C\u6743\u9650\u7BA1\u7406","slug":"\u5B89\u5168\u548C\u6743\u9650\u7BA1\u7406","link":"#\u5B89\u5168\u548C\u6743\u9650\u7BA1\u7406","children":[]},{"level":2,"title":"\u96C6\u7FA4\u65B9\u5F0F\u7BA1\u7406","slug":"\u96C6\u7FA4\u65B9\u5F0F\u7BA1\u7406","link":"#\u96C6\u7FA4\u65B9\u5F0F\u7BA1\u7406","children":[]},{"level":2,"title":"Arthas tunnel server \u7684\u5DE5\u4F5C\u539F\u7406","slug":"arthas-tunnel-server-\u7684\u5DE5\u4F5C\u539F\u7406","link":"#arthas-tunnel-server-\u7684\u5DE5\u4F5C\u539F\u7406","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/tunnel.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-d2ddc9fe","path":"/doc/tunnel.html","title":"Arthas Tunnel","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4E0B\u8F7D\u90E8\u7F72 arthas tunnel server","slug":"\u4E0B\u8F7D\u90E8\u7F72-arthas-tunnel-server","link":"#\u4E0B\u8F7D\u90E8\u7F72-arthas-tunnel-server","children":[]},{"level":2,"title":"\u542F\u52A8 arthas \u65F6\u8FDE\u63A5\u5230 tunnel server","slug":"\u542F\u52A8-arthas-\u65F6\u8FDE\u63A5\u5230-tunnel-server","link":"#\u542F\u52A8-arthas-\u65F6\u8FDE\u63A5\u5230-tunnel-server","children":[]},{"level":2,"title":"\u6700\u4F73\u5B9E\u8DF5","slug":"\u6700\u4F73\u5B9E\u8DF5","link":"#\u6700\u4F73\u5B9E\u8DF5","children":[]},{"level":2,"title":"Tunnel Server \u7684\u7BA1\u7406\u9875\u9762","slug":"tunnel-server-\u7684\u7BA1\u7406\u9875\u9762","link":"#tunnel-server-\u7684\u7BA1\u7406\u9875\u9762","children":[]},{"level":2,"title":"\u5B89\u5168\u548C\u6743\u9650\u7BA1\u7406","slug":"\u5B89\u5168\u548C\u6743\u9650\u7BA1\u7406","link":"#\u5B89\u5168\u548C\u6743\u9650\u7BA1\u7406","children":[]},{"level":2,"title":"\u96C6\u7FA4\u65B9\u5F0F\u7BA1\u7406","slug":"\u96C6\u7FA4\u65B9\u5F0F\u7BA1\u7406","link":"#\u96C6\u7FA4\u65B9\u5F0F\u7BA1\u7406","children":[]},{"level":2,"title":"Arthas tunnel server \u7684\u5DE5\u4F5C\u539F\u7406","slug":"arthas-tunnel-server-\u7684\u5DE5\u4F5C\u539F\u7406","link":"#arthas-tunnel-server-\u7684\u5DE5\u4F5C\u539F\u7406","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/tunnel.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/tunnel.html.634d8c45.js b/assets/tunnel.html.6d15b349.js similarity index 91% rename from assets/tunnel.html.634d8c45.js rename to assets/tunnel.html.6d15b349.js index c95803f27..d70f53546 100644 --- a/assets/tunnel.html.634d8c45.js +++ b/assets/tunnel.html.6d15b349.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-07074726","path":"/en/doc/tunnel.html","title":"Arthas Tunnel","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Download and deploy arthas tunnel server","slug":"download-and-deploy-arthas-tunnel-server","link":"#download-and-deploy-arthas-tunnel-server","children":[]},{"level":2,"title":"Connecting to the tunnel server when starting arthas","slug":"connecting-to-the-tunnel-server-when-starting-arthas","link":"#connecting-to-the-tunnel-server-when-starting-arthas","children":[]},{"level":2,"title":"Best practices","slug":"best-practices","link":"#best-practices","children":[]},{"level":2,"title":"Tunnel Server Management Page","slug":"tunnel-server-management-page","link":"#tunnel-server-management-page","children":[]},{"level":2,"title":"Security and Privilege Management","slug":"security-and-privilege-management","link":"#security-and-privilege-management","children":[]},{"level":2,"title":"Cluster Management","slug":"cluster-management","link":"#cluster-management","children":[]},{"level":2,"title":"How arthas tunnel server works","slug":"how-arthas-tunnel-server-works","link":"#how-arthas-tunnel-server-works","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/tunnel.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-07074726","path":"/en/doc/tunnel.html","title":"Arthas Tunnel","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Download and deploy arthas tunnel server","slug":"download-and-deploy-arthas-tunnel-server","link":"#download-and-deploy-arthas-tunnel-server","children":[]},{"level":2,"title":"Connecting to the tunnel server when starting arthas","slug":"connecting-to-the-tunnel-server-when-starting-arthas","link":"#connecting-to-the-tunnel-server-when-starting-arthas","children":[]},{"level":2,"title":"Best practices","slug":"best-practices","link":"#best-practices","children":[]},{"level":2,"title":"Tunnel Server Management Page","slug":"tunnel-server-management-page","link":"#tunnel-server-management-page","children":[]},{"level":2,"title":"Security and Privilege Management","slug":"security-and-privilege-management","link":"#security-and-privilege-management","children":[]},{"level":2,"title":"Cluster Management","slug":"cluster-management","link":"#cluster-management","children":[]},{"level":2,"title":"How arthas tunnel server works","slug":"how-arthas-tunnel-server-works","link":"#how-arthas-tunnel-server-works","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/tunnel.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/tunnel.html.0c3c205b.js b/assets/tunnel.html.7e8c485e.js similarity index 81% rename from assets/tunnel.html.0c3c205b.js rename to assets/tunnel.html.7e8c485e.js index 30954d717..879570d19 100644 --- a/assets/tunnel.html.0c3c205b.js +++ b/assets/tunnel.html.7e8c485e.js @@ -1,4 +1,4 @@ -import{_ as l,a as c,b as d}from"./tunnel-server-agents.03d5eafa.js";import{_ as p,o as h,c as u,a as e,b as a,w as r,e as n,d as t,r as i}from"./app.524ecf5c.js";const m={},v=e("h1",{id:"arthas-tunnel",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#arthas-tunnel","aria-hidden":"true"},"#"),n(" Arthas Tunnel")],-1),b=e("p",null,"Manage/connect multiple Agents remotely via Arthas Tunnel Server/Client.",-1),g=e("p",null,"For example, in streaming computing, Java processes can be started on different machines, and it can be difficult to use Arthas to diagnose them, because the user usually does not have access to the machine.",-1),_=e("p",null,"In this case, Arthas Tunnel Server/Client can be used.",-1),f=e("p",null,"Reference:",-1),k=n("1: "),w=n("Web Console"),y=n("2: "),x=n("Arthas Spring Boot Starter"),I=e("h2",{id:"download-and-deploy-arthas-tunnel-server",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#download-and-deploy-arthas-tunnel-server","aria-hidden":"true"},"#"),n(" Download and deploy arthas tunnel server")],-1),A={href:"https://github.com/alibaba/arthas/releases",target:"_blank",rel:"noopener noreferrer"},N=n("https://github.com/alibaba/arthas/releases"),T=t(`

    Arthas tunnel server is a spring boot fat jar application, start with the java -jar command:

    java -jar  arthas-tunnel-server.jar
    +import{_ as l,a as c,b as d}from"./tunnel-server-agents.03d5eafa.js";import{_ as p,o as h,c as u,a as e,b as a,w as r,e as n,d as t,r as i}from"./app.e2427bec.js";const v={},m=e("h1",{id:"arthas-tunnel",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#arthas-tunnel","aria-hidden":"true"},"#"),n(" Arthas Tunnel")],-1),b=e("p",null,"Manage/connect multiple Agents remotely via Arthas Tunnel Server/Client.",-1),g=e("p",null,"For example, in streaming computing, Java processes can be started on different machines, and it can be difficult to use Arthas to diagnose them, because the user usually does not have access to the machine.",-1),_=e("p",null,"In this case, Arthas Tunnel Server/Client can be used.",-1),f=e("p",null,"Reference:",-1),k=n("1: "),w=n("Web Console"),y=n("2: "),x=n("Arthas Spring Boot Starter"),I=e("h2",{id:"download-and-deploy-arthas-tunnel-server",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#download-and-deploy-arthas-tunnel-server","aria-hidden":"true"},"#"),n(" Download and deploy arthas tunnel server")],-1),A={href:"https://github.com/alibaba/arthas/releases",target:"_blank",rel:"noopener noreferrer"},N=n("https://github.com/alibaba/arthas/releases"),T=t(`

    Arthas tunnel server is a spring boot fat jar application, start with the java -jar command:

    java -jar  arthas-tunnel-server.jar
     

    By default, the web port of the arthas tunnel server is 8080, and the port connected by the arthas agent is 7777.

    `,3),R=n("Once started, you can go to "),E={href:"http://127.0.0.1:8080/",target:"_blank",rel:"noopener noreferrer"},S=n("http://127.0.0.1:8080/"),L=n(" and connect to the registered arthas agent via "),B=e("code",null,"agentId",-1),P=n("."),C=n("Through Spring Boot's Endpoint, you can view the specific connection information: "),V={href:"http://127.0.0.1:8080/actuator/arthas",target:"_blank",rel:"noopener noreferrer"},j=n("http://127.0.0.1:8080/actuator/arthas"),D=n(", the login user name is "),O=e("code",null,"arthas",-1),M=n(", and the password can be found in the log of arthas tunnel server, for example:"),U=t(`
    32851 [main] INFO o.s.b.a.s.s.UserDetailsServiceAutoConfiguration
     
     Using generated security password: f1dca050-3777-48f4-a577-6367e55a78a2
    @@ -12,12 +12,11 @@ Using generated security password: f1dca050-3777-48f4-a577-6367e55a78a2
     
     
     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
    -

    If the connection is not connected to the tunnel server at startup, you can also obtain the agentId through the session command after reconnection succeeds:

    [arthas@86183]$ session
    +

    If the connection is not connected to the tunnel server at startup, you can also obtain the agentId through the session command after reconnection succeeds:

    [arthas@86183]$ session
      Name           Value
     -----------------------------------------------------
      JAVA_PID       86183
    @@ -37,11 +36,10 @@ Escape character is '^]'.
     
     
     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
    -

    Then visit tunnel-server, you can see a list of all connected applications:

    `,3),ae={href:"http://localhost:8080/apps.html",target:"_blank",rel:"noopener noreferrer"},se=n("http://localhost:8080/apps.html"),te=e("p",null,[e("img",{src:l,alt:""})],-1),oe=e("p",null,"Then open the details, you can see a list of all connected agents:",-1),re={href:"http://localhost:8080/agents.html?app=test",target:"_blank",rel:"noopener noreferrer"},ie=n("http://localhost:8080/agents.html?app=test"),le=t('

    Security and Privilege Management

    TIP

    It is strongly recommended not to expose the tunnel server directly to the public network.

    Currently tunnel server does not have special permission management

    1. Users need to develop by themselves and authenticate the app name.
    2. If the management page is opened, security measures need to be added.

    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

    browser <-> arthas tunnel server <-> arthas tunnel client <-> arthas agent
    -
    `,10),ce={href:"https://github.com/alibaba/arthas/blob/master/tunnel-server/README.md#",target:"_blank",rel:"noopener noreferrer"},de=n("tunnel-server/README.md");function pe(he,ue){const o=i("RouterLink"),s=i("ExternalLinkIcon");return h(),u("div",null,[v,b,g,_,f,e("ul",null,[e("li",null,[k,a(o,{to:"/en/doc/web-console.html"},{default:r(()=>[w]),_:1})]),e("li",null,[y,a(o,{to:"/en/doc/spring-boot-starter.html"},{default:r(()=>[x]),_:1})])]),I,e("p",null,[e("a",A,[N,a(s)])]),T,e("p",null,[R,e("a",E,[S,a(s)]),L,B,P]),e("p",null,[C,e("a",V,[j,a(s)]),D,O,M]),U,e("p",null,[J,e("a",F,[G,a(s)]),Y,Z,K]),W,e("div",$,[q,z,e("p",null,[H,e("a",Q,[X,a(s)])]),ee]),ne,e("p",null,[e("a",ae,[se,a(s)])]),te,oe,e("p",null,[e("a",re,[ie,a(s)])]),le,e("p",null,[e("a",ce,[de,a(s)])])])}const be=p(m,[["render",pe],["__file","tunnel.html.vue"]]);export{be as default}; +

    Then visit tunnel-server, you can see a list of all connected applications:

    `,3),ae={href:"http://localhost:8080/apps.html",target:"_blank",rel:"noopener noreferrer"},se=n("http://localhost:8080/apps.html"),te=e("p",null,[e("img",{src:l,alt:""})],-1),oe=e("p",null,"Then open the details, you can see a list of all connected agents:",-1),re={href:"http://localhost:8080/agents.html?app=test",target:"_blank",rel:"noopener noreferrer"},ie=n("http://localhost:8080/agents.html?app=test"),le=t('

    Security and Privilege Management

    TIP

    It is strongly recommended not to expose the tunnel server directly to the public network.

    Currently tunnel server does not have special permission management

    1. Users need to develop by themselves and authenticate the app name.
    2. If the management page is opened, security measures need to be added.

    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

    browser <-> arthas tunnel server <-> arthas tunnel client <-> arthas agent
    +
    `,10),ce={href:"https://github.com/alibaba/arthas/blob/master/tunnel-server/README.md#",target:"_blank",rel:"noopener noreferrer"},de=n("tunnel-server/README.md");function pe(he,ue){const o=i("RouterLink"),s=i("ExternalLinkIcon");return h(),u("div",null,[m,b,g,_,f,e("ul",null,[e("li",null,[k,a(o,{to:"/en/doc/web-console.html"},{default:r(()=>[w]),_:1})]),e("li",null,[y,a(o,{to:"/en/doc/spring-boot-starter.html"},{default:r(()=>[x]),_:1})])]),I,e("p",null,[e("a",A,[N,a(s)])]),T,e("p",null,[R,e("a",E,[S,a(s)]),L,B,P]),e("p",null,[C,e("a",V,[j,a(s)]),D,O,M]),U,e("p",null,[J,e("a",F,[G,a(s)]),Y,Z,K]),W,e("div",$,[q,z,e("p",null,[H,e("a",Q,[X,a(s)])]),ee]),ne,e("p",null,[e("a",ae,[se,a(s)])]),te,oe,e("p",null,[e("a",re,[ie,a(s)])]),le,e("p",null,[e("a",ce,[de,a(s)])])])}const be=p(v,[["render",pe],["__file","tunnel.html.vue"]]);export{be as default}; diff --git a/assets/version.html.5f312c99.js b/assets/version.html.08321a1e.js similarity index 72% rename from assets/version.html.5f312c99.js rename to assets/version.html.08321a1e.js index 0063fa281..0d369b687 100644 --- a/assets/version.html.5f312c99.js +++ b/assets/version.html.08321a1e.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-5b5d3371","path":"/doc/version.html","title":"version","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/version.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-5b5d3371","path":"/doc/version.html","title":"version","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/version.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/version.html.7908d9e9.js b/assets/version.html.3edc2ceb.js similarity index 91% rename from assets/version.html.7908d9e9.js rename to assets/version.html.3edc2ceb.js index bab1dd0af..b3a07bef9 100644 --- a/assets/version.html.7908d9e9.js +++ b/assets/version.html.3edc2ceb.js @@ -1,3 +1,3 @@ -import{_ as e,o as s,c as a,d as n}from"./app.524ecf5c.js";const r={},i=n(`

    version

    prints out Arthas's version.

    Usage

    $ version
    +import{_ as e,o as s,c as a,d as n}from"./app.e2427bec.js";const r={},i=n(`

    version

    prints out Arthas's version.

    Usage

    $ version
      3.5.1
     
    `,4),d=[i];function o(t,c){return s(),a("div",null,d)}const h=e(r,[["render",o],["__file","version.html.vue"]]);export{h as default}; diff --git a/assets/version.html.5bd75c3c.js b/assets/version.html.acfdfafa.js similarity index 77% rename from assets/version.html.5bd75c3c.js rename to assets/version.html.acfdfafa.js index b665645bb..992c56892 100644 --- a/assets/version.html.5bd75c3c.js +++ b/assets/version.html.acfdfafa.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-9a4bc0f6","path":"/en/doc/version.html","title":"version","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/version.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-9a4bc0f6","path":"/en/doc/version.html","title":"version","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/version.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/version.html.76793579.js b/assets/version.html.e13ddf0e.js similarity index 92% rename from assets/version.html.76793579.js rename to assets/version.html.e13ddf0e.js index 03c196a02..9ca538c52 100644 --- a/assets/version.html.76793579.js +++ b/assets/version.html.e13ddf0e.js @@ -1,3 +1,3 @@ -import{_ as e,o as a,c as n,d as r}from"./app.524ecf5c.js";const s={},i=r(`

    version

    \u8F93\u51FA\u5F53\u524D\u76EE\u6807 Java \u8FDB\u7A0B\u6240\u52A0\u8F7D\u7684 Arthas \u7248\u672C\u53F7

    \u4F7F\u7528\u53C2\u8003

    $ version
    +import{_ as e,o as a,c as n,d as r}from"./app.e2427bec.js";const s={},i=r(`

    version

    \u8F93\u51FA\u5F53\u524D\u76EE\u6807 Java \u8FDB\u7A0B\u6240\u52A0\u8F7D\u7684 Arthas \u7248\u672C\u53F7

    \u4F7F\u7528\u53C2\u8003

    $ version
      3.5.1
     
    `,4),t=[i];function d(c,o){return a(),n("div",null,t)}const h=e(s,[["render",d],["__file","version.html.vue"]]);export{h as default}; diff --git a/assets/vmoption.html.1f830c74.js b/assets/vmoption.html.698e78cd.js similarity index 83% rename from assets/vmoption.html.1f830c74.js rename to assets/vmoption.html.698e78cd.js index 78c06d60c..d57d3066a 100644 --- a/assets/vmoption.html.1f830c74.js +++ b/assets/vmoption.html.698e78cd.js @@ -1 +1 @@ -const i=JSON.parse('{"key":"v-4e08032e","path":"/en/doc/vmoption.html","title":"vmoption","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"View all options","slug":"view-all-options","link":"#view-all-options","children":[]},{"level":3,"title":"View individual option","slug":"view-individual-option","link":"#view-individual-option","children":[]},{"level":3,"title":"Update individual option","slug":"update-individual-option","link":"#update-individual-option","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/vmoption.md","version":"4.3.3"}');export{i as data}; +const i=JSON.parse('{"key":"v-4e08032e","path":"/en/doc/vmoption.html","title":"vmoption","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"View all options","slug":"view-all-options","link":"#view-all-options","children":[]},{"level":3,"title":"View individual option","slug":"view-individual-option","link":"#view-individual-option","children":[]},{"level":3,"title":"Update individual option","slug":"update-individual-option","link":"#update-individual-option","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/vmoption.md","version":"4.3.5"}');export{i as data}; diff --git a/assets/vmoption.html.2893cc9a.js b/assets/vmoption.html.7a568db9.js similarity index 80% rename from assets/vmoption.html.2893cc9a.js rename to assets/vmoption.html.7a568db9.js index 2fa1928bc..3734fc998 100644 --- a/assets/vmoption.html.2893cc9a.js +++ b/assets/vmoption.html.7a568db9.js @@ -1,4 +1,4 @@ -import{_ as e,o as l,c as i,a as n,b as o,e as a,d as t,r}from"./app.524ecf5c.js";const d={},c=n("h1",{id:"vmoption",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#vmoption","aria-hidden":"true"},"#"),a(" vmoption")],-1),p={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-vmoption",target:"_blank",rel:"noopener noreferrer"},u=n("code",null,"vmoption",-1),v=a("\u5728\u7EBF\u6559\u7A0B"),b=t(`

    \u63D0\u793A

    \u67E5\u770B\uFF0C\u66F4\u65B0 VM \u8BCA\u65AD\u76F8\u5173\u7684\u53C2\u6570

    \u4F7F\u7528\u53C2\u8003

    \u67E5\u770B\u6240\u6709\u7684 option

    [arthas@56963]$ vmoption
    +import{_ as n,o as s,c as a,d as e}from"./app.e2427bec.js";const l={},i=e(`

    vmoption

    \u63D0\u793A

    \u67E5\u770B\uFF0C\u66F4\u65B0 VM \u8BCA\u65AD\u76F8\u5173\u7684\u53C2\u6570

    \u4F7F\u7528\u53C2\u8003

    \u67E5\u770B\u6240\u6709\u7684 option

    [arthas@56963]$ vmoption
      KEY                    VALUE                   ORIGIN                 WRITEABLE
     ---------------------------------------------------------------------------------------------
      HeapDumpBeforeFullGC   false                   DEFAULT                true
    @@ -37,4 +37,4 @@ Successfully updated the vm option.
      NAME            BEFORE-VALUE  AFTER-VALUE
     -------------------------------------------
      PrintGCDetails  false         true
    -
    `,9);function m(h,k){const s=r("ExternalLinkIcon");return l(),i("div",null,[c,n("p",null,[n("a",p,[u,v,o(s)])]),b])}const A=e(d,[["render",m],["__file","vmoption.html.vue"]]);export{A as default}; +
    `,10),o=[i];function t(r,d){return s(),a("div",null,o)}const p=n(l,[["render",t],["__file","vmoption.html.vue"]]);export{p as default}; diff --git a/assets/vmoption.html.5081a863.js b/assets/vmoption.html.b0134475.js similarity index 82% rename from assets/vmoption.html.5081a863.js rename to assets/vmoption.html.b0134475.js index 35ea0e830..6a5d29438 100644 --- a/assets/vmoption.html.5081a863.js +++ b/assets/vmoption.html.b0134475.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as l,a as n,b as o,e as a,d as t,r}from"./app.524ecf5c.js";const d={},c=n("h1",{id:"vmoption",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#vmoption","aria-hidden":"true"},"#"),a(" vmoption")],-1),p={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-vmoption",target:"_blank",rel:"noopener noreferrer"},u=n("code",null,"vmoption",-1),v=a(" online tutorial"),b=t(`

    TIP

    Display, and update the vm diagnostic options.

    Usage

    View all options

    [arthas@56963]$ vmoption
    +import{_ as n,o as a,c as s,d as e}from"./app.e2427bec.js";const i={},l=e(`

    vmoption

    TIP

    Display, and update the vm diagnostic options.

    Usage

    View all options

    [arthas@56963]$ vmoption
      KEY                    VALUE                   ORIGIN                 WRITEABLE
     ---------------------------------------------------------------------------------------------
      HeapDumpBeforeFullGC   false                   DEFAULT                true
    @@ -37,4 +37,4 @@ Successfully updated the vm option.
      NAME            BEFORE-VALUE  AFTER-VALUE
     -------------------------------------------
      PrintGCDetails  false         true
    -
    `,9);function m(h,k){const e=r("ExternalLinkIcon");return i(),l("div",null,[c,n("p",null,[n("a",p,[u,v,o(e)])]),b])}const A=s(d,[["render",m],["__file","vmoption.html.vue"]]);export{A as default}; +
    `,10),o=[l];function t(d,r){return a(),s("div",null,o)}const c=n(i,[["render",t],["__file","vmoption.html.vue"]]);export{c as default}; diff --git a/assets/vmoption.html.f7b6a945.js b/assets/vmoption.html.d219c85b.js similarity index 86% rename from assets/vmoption.html.f7b6a945.js rename to assets/vmoption.html.d219c85b.js index 2872aafc3..247bdeddd 100644 --- a/assets/vmoption.html.f7b6a945.js +++ b/assets/vmoption.html.d219c85b.js @@ -1 +1 @@ -const t=JSON.parse('{"key":"v-40db67fd","path":"/doc/vmoption.html","title":"vmoption","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"\u67E5\u770B\u6240\u6709\u7684 option","slug":"\u67E5\u770B\u6240\u6709\u7684-option","link":"#\u67E5\u770B\u6240\u6709\u7684-option","children":[]},{"level":3,"title":"\u67E5\u770B\u6307\u5B9A\u7684 option","slug":"\u67E5\u770B\u6307\u5B9A\u7684-option","link":"#\u67E5\u770B\u6307\u5B9A\u7684-option","children":[]},{"level":3,"title":"\u66F4\u65B0\u6307\u5B9A\u7684 option","slug":"\u66F4\u65B0\u6307\u5B9A\u7684-option","link":"#\u66F4\u65B0\u6307\u5B9A\u7684-option","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/vmoption.md","version":"4.3.3"}');export{t as data}; +const t=JSON.parse('{"key":"v-40db67fd","path":"/doc/vmoption.html","title":"vmoption","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"\u67E5\u770B\u6240\u6709\u7684 option","slug":"\u67E5\u770B\u6240\u6709\u7684-option","link":"#\u67E5\u770B\u6240\u6709\u7684-option","children":[]},{"level":3,"title":"\u67E5\u770B\u6307\u5B9A\u7684 option","slug":"\u67E5\u770B\u6307\u5B9A\u7684-option","link":"#\u67E5\u770B\u6307\u5B9A\u7684-option","children":[]},{"level":3,"title":"\u66F4\u65B0\u6307\u5B9A\u7684 option","slug":"\u66F4\u65B0\u6307\u5B9A\u7684-option","link":"#\u66F4\u65B0\u6307\u5B9A\u7684-option","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/vmoption.md","version":"4.3.5"}');export{t as data}; diff --git a/assets/vmtool.html.cf122534.js b/assets/vmtool.html.27325bff.js similarity index 73% rename from assets/vmtool.html.cf122534.js rename to assets/vmtool.html.27325bff.js index bd16b25b7..be920f6b5 100644 --- a/assets/vmtool.html.cf122534.js +++ b/assets/vmtool.html.27325bff.js @@ -1,4 +1,4 @@ -import{_ as c,o as l,c as r,a,b as s,w as d,e,d as o,r as t}from"./app.524ecf5c.js";const p={},m=a("h1",{id:"vmtool",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#vmtool","aria-hidden":"true"},"#"),e(" vmtool")],-1),u=a("div",{class:"custom-container tip"},[a("p",{class:"custom-container-title"},"\u63D0\u793A"),a("p",null,"@since 3.5.1")],-1),v={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-vmtool",target:"_blank",rel:"noopener noreferrer"},h=a("code",null,"vmtool",-1),b=e("\u5728\u7EBF\u6559\u7A0B"),g=a("p",null,[a("code",null,"vmtool"),e(" \u5229\u7528"),a("code",null,"JVMTI"),e("\u63A5\u53E3\uFF0C\u5B9E\u73B0\u67E5\u8BE2\u5185\u5B58\u5BF9\u8C61\uFF0C\u5F3A\u5236 GC \u7B49\u529F\u80FD\u3002")],-1),k={href:"https://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html",target:"_blank",rel:"noopener noreferrer"},_=e("JVM Tool Interface"),x=o(`

    \u83B7\u53D6\u5BF9\u8C61

    $ vmtool --action getInstances --className java.lang.String --limit 10
    +import{_ as l,o as r,c as d,a,b as s,w as i,e,d as n,r as c}from"./app.e2427bec.js";const p={},m=a("h1",{id:"vmtool",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#vmtool","aria-hidden":"true"},"#"),e(" vmtool")],-1),u=a("div",{class:"custom-container tip"},[a("p",{class:"custom-container-title"},"\u63D0\u793A"),a("p",null,"@since 3.5.1")],-1),v=a("p",null,[a("code",null,"vmtool"),e(" \u5229\u7528"),a("code",null,"JVMTI"),e("\u63A5\u53E3\uFF0C\u5B9E\u73B0\u67E5\u8BE2\u5185\u5B58\u5BF9\u8C61\uFF0C\u5F3A\u5236 GC \u7B49\u529F\u80FD\u3002")],-1),h={href:"https://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html",target:"_blank",rel:"noopener noreferrer"},b=e("JVM Tool Interface"),g=n(`

    \u83B7\u53D6\u5BF9\u8C61

    $ vmtool --action getInstances --className java.lang.String --limit 10
     @String[][
         @String[com/taobao/arthas/core/shell/session/Session],
         @String[com.taobao.arthas.core.shell.session.Session],
    @@ -24,13 +24,13 @@ import{_ as c,o as l,c as r,a,b as s,w as d,e,d as o,r as t}from"./app.524ecf5c.
     

    \u7136\u540E\u7528-c/--classloader \u53C2\u6570\u6307\u5B9A\uFF1A

    vmtool --action getInstances -c 19469ea2 --className org.springframework.context.ApplicationContext
     

    \u6307\u5B9A\u8FD4\u56DE\u7ED3\u679C\u5C55\u5F00\u5C42\u6570

    \u63D0\u793A

    getInstances action \u8FD4\u56DE\u7ED3\u679C\u7ED1\u5B9A\u5230instances\u53D8\u91CF\u4E0A\uFF0C\u5B83\u662F\u6570\u7EC4\u3002

    \u901A\u8FC7 -x/--expand \u53C2\u6570\u53EF\u4EE5\u6307\u5B9A\u7ED3\u679C\u7684\u5C55\u5F00\u5C42\u6B21\uFF0C\u9ED8\u8BA4\u503C\u662F 1\u3002

    vmtool --action getInstances -c 19469ea2 --className org.springframework.context.ApplicationContext -x 2
     

    \u6267\u884C\u8868\u8FBE\u5F0F

    \u63D0\u793A

    getInstances action \u8FD4\u56DE\u7ED3\u679C\u7ED1\u5B9A\u5230instances\u53D8\u91CF\u4E0A\uFF0C\u5B83\u662F\u6570\u7EC4\u3002\u53EF\u4EE5\u901A\u8FC7--express\u53C2\u6570\u6267\u884C\u6307\u5B9A\u7684\u8868\u8FBE\u5F0F\u3002

    vmtool --action getInstances --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader --className org.springframework.context.ApplicationContext --express 'instances[0].getBeanDefinitionNames()'
    -

    \u8FC7\u6EE4\u5BF9\u8C61

    \u5BF9 getInstances \u8FD4\u56DE\u7684 instances \u6570\u7EC4\uFF0C\u53EF\u4EE5\u7EE7\u7EED\u4F7F\u7528 OGNL \u9009\u62E9\u8868\u8FBE\u5F0F .{? \u6761\u4EF6} \u505A\u8FC7\u6EE4\uFF0C\u5176\u4E2D #this \u8868\u793A\u5F53\u524D\u904D\u5386\u5230\u7684\u5BF9\u8C61\u3002

    \u4E0B\u9762\u7684\u4F8B\u5B50\u4F7F\u7528 java.lang.Thread\uFF0C\u9002\u5408\u5728\u4EFB\u610F\u4ECD\u5728\u8FD0\u884C\u7684 JVM \u91CC\u9A8C\u8BC1\u8FC7\u6EE4\u8868\u8FBE\u5F0F\u3002\u5B83\u4F1A\u7B5B\u9009\u51FA\u6240\u6709\u975E daemon \u7EBF\u7A0B\uFF0C\u5E76\u53EA\u8F93\u51FA\u7EBF\u7A0B\u540D\uFF1A

    vmtool --action getInstances --className java.lang.Thread --limit -1 --express 'instances.{? #this.daemon == false}.{name}'
    +
    `,16),k=e("\u5728 "),_=a("code",null,"instances",-1),x=e(" \u4E0A\u7F16\u5199\u590D\u6742\u7B5B\u9009\u3001\u6295\u5F71\u6216\u7A7A\u503C\u5206\u652F\u65F6\uFF0C\u8BF7\u53C2\u8003 "),f=e("OGNL \u590D\u6742\u8868\u8FBE\u5F0F\u4F7F\u7528\u6280\u5DE7"),L=e("\u3002"),C=n(`

    \u8FC7\u6EE4\u5BF9\u8C61

    \u5BF9 getInstances \u8FD4\u56DE\u7684 instances \u6570\u7EC4\uFF0C\u53EF\u4EE5\u7EE7\u7EED\u4F7F\u7528 OGNL \u9009\u62E9\u8868\u8FBE\u5F0F .{? \u6761\u4EF6} \u505A\u8FC7\u6EE4\uFF0C\u5176\u4E2D #this \u8868\u793A\u5F53\u524D\u904D\u5386\u5230\u7684\u5BF9\u8C61\u3002

    \u4E0B\u9762\u7684\u4F8B\u5B50\u4F7F\u7528 java.lang.Thread\uFF0C\u9002\u5408\u5728\u4EFB\u610F\u4ECD\u5728\u8FD0\u884C\u7684 JVM \u91CC\u9A8C\u8BC1\u8FC7\u6EE4\u8868\u8FBE\u5F0F\u3002\u5B83\u4F1A\u7B5B\u9009\u51FA\u6240\u6709\u975E daemon \u7EBF\u7A0B\uFF0C\u5E76\u53EA\u8F93\u51FA\u7EBF\u7A0B\u540D\uFF1A

    vmtool --action getInstances --className java.lang.Thread --limit -1 --express 'instances.{? #this.daemon == false}.{name}'
     

    \u5982\u679C\u60F3\u76F4\u63A5\u67E5\u770B\u8FC7\u6EE4\u540E\u7684\u5BF9\u8C61\u672C\u8EAB\uFF0C\u53EF\u4EE5\u53BB\u6389\u6700\u540E\u7684 .{name}\u3002

    \u5F3A\u5236 GC

    vmtool --action forceGc
    -
    `,23),f=e("\u53EF\u4EE5\u7ED3\u5408 "),L=a("code",null,"vmoption",-1),C=e(" \u547D\u4EE4\u52A8\u6001\u6253\u5F00"),S=a("code",null,"PrintGC",-1),N=e("\u5F00\u5173\u3002"),A=o(`

    \u5206\u6790\u5806\u5185\u5B58\u5360\u7528

    heapAnalyze \u4F1A\u4ECE GC Root \u53EF\u8FBE\u5BF9\u8C61\u51FA\u53D1\uFF0C\u7EDF\u8BA1\u5404\u4E2A\u7C7B\u7684\u5B9E\u4F8B\u6570\u91CF\u4E0E\u5360\u7528\u5B57\u8282\u6570\uFF0C\u5E76\u8F93\u51FA\u5360\u7528\u6700\u5927\u7684\u82E5\u5E72\u5BF9\u8C61\u4E0E\u7C7B\u3002

    $ vmtool --action heapAnalyze --classNum 5 --objectNum 3
    +
    `,7),N=e("\u53EF\u4EE5\u7ED3\u5408 "),S=a("code",null,"vmoption",-1),A=e(" \u547D\u4EE4\u52A8\u6001\u6253\u5F00"),I=a("code",null,"PrintGC",-1),j=e("\u5F00\u5173\u3002"),w=n(`

    \u5206\u6790\u5806\u5185\u5B58\u5360\u7528

    heapAnalyze \u4F1A\u4ECE GC Root \u53EF\u8FBE\u5BF9\u8C61\u51FA\u53D1\uFF0C\u7EDF\u8BA1\u5404\u4E2A\u7C7B\u7684\u5B9E\u4F8B\u6570\u91CF\u4E0E\u5360\u7528\u5B57\u8282\u6570\uFF0C\u5E76\u8F93\u51FA\u5360\u7528\u6700\u5927\u7684\u82E5\u5E72\u5BF9\u8C61\u4E0E\u7C7B\u3002

    $ vmtool --action heapAnalyze --classNum 5 --objectNum 3
     

    \u63D0\u793A

    \u901A\u8FC7 --classNum \u53C2\u6570\u6307\u5B9A\u5C55\u793A\u7684\u7C7B\u6570\u91CF\uFF0C\u901A\u8FC7 --objectNum \u53C2\u6570\u6307\u5B9A\u5C55\u793A\u7684\u5BF9\u8C61\u6570\u91CF\u3002

    \u5206\u6790\u5BF9\u8C61\u5F15\u7528\u94FE

    referenceAnalyze \u7528\u4E8E\u5206\u6790\u67D0\u4E2A\u7C7B\u7684\u5B9E\u4F8B\u5BF9\u8C61\uFF0C\u5E76\u8F93\u51FA\u5360\u7528\u6700\u5927\u7684\u82E5\u5E72\u5BF9\u8C61\u53CA\u5176\u5F15\u7528\u56DE\u6EAF\u94FE\uFF08\u4ECE\u5BF9\u8C61\u56DE\u6EAF\u5230 GC Root\uFF09\uFF0C\u7528\u4E8E\u8F85\u52A9\u5B9A\u4F4D\u5BF9\u8C61\u6765\u6E90\u3002

    $ vmtool --action referenceAnalyze --className java.lang.String --objectNum 5 --backtraceNum 3
     

    \u63D0\u793A

    • \u901A\u8FC7 --objectNum \u53C2\u6570\u6307\u5B9A\u5C55\u793A\u7684\u5BF9\u8C61\u6570\u91CF
    • \u901A\u8FC7 --backtraceNum \u53C2\u6570\u6307\u5B9A\u56DE\u6EAF\u5C42\u6570\uFF0C\u8BBE\u7F6E\u4E3A -1 \u8868\u793A\u4E00\u76F4\u56DE\u6EAF\u5230 root\uFF0C\u8BBE\u7F6E\u4E3A 0 \u8868\u793A\u4E0D\u8F93\u51FA\u5F15\u7528\u94FE
    • --backtraceNum \u5C0F\u4E8E -1 \u4E3A\u975E\u6CD5\u503C
    • getInstances \u652F\u6301\u7684 --classLoaderClass / --classloader \u53C2\u6570\u540C\u6837\u9002\u7528\u4E8E referenceAnalyze

    interrupt \u6307\u5B9A\u7EBF\u7A0B

    thread id \u901A\u8FC7-t\u53C2\u6570\u6307\u5B9A\uFF0C\u53EF\u4EE5\u4F7F\u7528 thread\u547D\u4EE4\u83B7\u53D6\u3002

    vmtool --action interruptThread -t 1
    -

    glibc \u91CA\u653E\u7A7A\u95F2\u5185\u5B58

    `,12),I=e("Linux man page: "),j={href:"https://man7.org/linux/man-pages/man3/malloc_trim.3.html",target:"_blank",rel:"noopener noreferrer"},y=e("malloc_trim"),w=o(`
    vmtool --action mallocTrim
    -

    glibc \u5185\u5B58\u72B6\u6001

    `,2),E=e("\u5185\u5B58\u72B6\u6001\u5C06\u4F1A\u8F93\u51FA\u5230\u5E94\u7528\u7684 stderr\u3002Linux man page: "),T={href:"https://man7.org/linux/man-pages/man3/malloc_stats.3.html",target:"_blank",rel:"noopener noreferrer"},V=e("malloc_stats"),R=o(`
    vmtool --action mallocStats
    +

    glibc \u91CA\u653E\u7A7A\u95F2\u5185\u5B58

    `,12),y=e("Linux man page: "),E={href:"https://man7.org/linux/man-pages/man3/malloc_trim.3.html",target:"_blank",rel:"noopener noreferrer"},T=e("malloc_trim"),V=n(`
    vmtool --action mallocTrim
    +

    glibc \u5185\u5B58\u72B6\u6001

    `,2),G=e("\u5185\u5B58\u72B6\u6001\u5C06\u4F1A\u8F93\u51FA\u5230\u5E94\u7528\u7684 stderr\u3002Linux man page: "),R={href:"https://man7.org/linux/man-pages/man3/malloc_stats.3.html",target:"_blank",rel:"noopener noreferrer"},$=e("malloc_stats"),z=n(`
    vmtool --action mallocStats
     

    \u8F93\u51FA\u5230 stderr \u7684\u5185\u5BB9\u5982\u4E0B\uFF1A

    Arena 0:
     system bytes     =     135168
     in use bytes     =      74352
    @@ -39,4 +39,4 @@ system bytes     =     135168
     in use bytes     =      74352
     max mmap regions =          0
     max mmap bytes   =          0
    -
    `,3);function G($,z){const n=t("ExternalLinkIcon"),i=t("RouterLink");return l(),r("div",null,[m,u,a("p",null,[a("a",v,[h,b,s(n)])]),g,a("ul",null,[a("li",null,[a("a",k,[_,s(n)])])]),x,a("ul",null,[a("li",null,[f,s(i,{to:"/doc/vmoption.html"},{default:d(()=>[L]),_:1}),C,S,N])]),A,a("p",null,[I,a("a",j,[y,s(n)])]),w,a("p",null,[E,a("a",T,[V,s(n)])]),R])}const M=c(p,[["render",G],["__file","vmtool.html.vue"]]);export{M as default}; +
    `,3);function B(M,J){const o=c("ExternalLinkIcon"),t=c("RouterLink");return r(),d("div",null,[m,u,v,a("ul",null,[a("li",null,[a("a",h,[b,s(o)])])]),g,a("p",null,[k,_,x,s(t,{to:"/doc/ognl-express.html"},{default:i(()=>[f]),_:1}),L]),C,a("ul",null,[a("li",null,[N,s(t,{to:"/doc/vmoption.html"},{default:i(()=>[S]),_:1}),A,I,j])]),w,a("p",null,[y,a("a",E,[T,s(o)])]),V,a("p",null,[G,a("a",R,[$,s(o)])]),z])}const U=l(p,[["render",B],["__file","vmtool.html.vue"]]);export{U as default}; diff --git a/assets/vmtool.html.a0367808.js b/assets/vmtool.html.9e179166.js similarity index 74% rename from assets/vmtool.html.a0367808.js rename to assets/vmtool.html.9e179166.js index d0c8b9ead..c5f5d3ef6 100644 --- a/assets/vmtool.html.a0367808.js +++ b/assets/vmtool.html.9e179166.js @@ -1,4 +1,4 @@ -import{_ as r,o as c,c as l,a as e,b as s,w as d,e as a,d as t,r as o}from"./app.524ecf5c.js";const p={},u=e("h1",{id:"vmtool",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#vmtool","aria-hidden":"true"},"#"),a(" vmtool")],-1),m=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"TIP"),e("p",null,"@since 3.5.1")],-1),h={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-vmtool",target:"_blank",rel:"noopener noreferrer"},b=e("code",null,"vmtool",-1),v=a(" online tutorial"),g=e("p",null,[e("code",null,"vmtool"),a(" uses the "),e("code",null,"JVMTI"),a(" to support "),e("code",null,"getInstances"),a(" in jvm and "),e("code",null,"forceGc"),a(".")],-1),f={href:"https://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html",target:"_blank",rel:"noopener noreferrer"},k=a("JVM Tool Interface"),x=t(`

    getInstances

    $ vmtool --action getInstances --className java.lang.String --limit 10
    +import{_ as c,o as l,c as d,a as e,b as n,w as i,d as s,e as a,r}from"./app.e2427bec.js";const p={},u=s('

    vmtool

    TIP

    @since 3.5.1

    vmtool uses the JVMTI to support getInstances in jvm and forceGc.

    ',3),m={href:"https://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html",target:"_blank",rel:"noopener noreferrer"},h=a("JVM Tool Interface"),b=s(`

    getInstances

    $ vmtool --action getInstances --className java.lang.String --limit 10
     @String[][
         @String[com/taobao/arthas/core/shell/session/Session],
         @String[com.taobao.arthas.core.shell.session.Session],
    @@ -24,13 +24,13 @@ import{_ as r,o as c,c as l,a as e,b as s,w as d,e as a,d as t,r as o}from"./app
     

    Then use the -c/--classloader parameter to specify:

    vmtool --action getInstances -c 19469ea2 --className org.springframework.context.ApplicationContext
     

    Specify the number of expanded layers of returned results

    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.

    vmtool --action getInstances -c 19469ea2 --className org.springframework.context.ApplicationContext -x 2
     

    Execute expression

    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.

    vmtool --action getInstances --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader --className org.springframework.context.ApplicationContext --express 'instances[0].getBeanDefinitionNames()'
    -

    Filter objects

    For the instances array returned by getInstances, you can further filter objects with the OGNL selection expression .{? condition}. Here #this refers to the current object being evaluated.

    The following example uses java.lang.Thread, which is suitable for verifying filter expressions in almost any running JVM. It filters all non-daemon threads and prints only their names:

    vmtool --action getInstances --className java.lang.Thread --limit -1 --express 'instances.{? #this.daemon == false}.{name}'
    +
    `,16),v=a("See "),g=a("Tips for complex OGNL expressions"),f=a(" when writing complex selections, projections, or null branches over "),k=e("code",null,"instances",-1),x=a("."),_=s(`

    Filter objects

    For the instances array returned by getInstances, you can further filter objects with the OGNL selection expression .{? condition}. Here #this refers to the current object being evaluated.

    The following example uses java.lang.Thread, which is suitable for verifying filter expressions in almost any running JVM. It filters all non-daemon threads and prints only their names:

    vmtool --action getInstances --className java.lang.Thread --limit -1 --express 'instances.{? #this.daemon == false}.{name}'
     

    If you want to inspect the filtered objects directly, remove the trailing .{name}.

    Force GC

    vmtool --action forceGc
    -
    `,23),_=a("Use the "),y=e("code",null,"vmoption",-1),w=a(" command to dynamically turn on the "),j=e("code",null,"PrintGC",-1),S=a(" option."),I=t(`

    Analyze heap usage

    heapAnalyze starts from objects reachable from GC Root, counts instance numbers and bytes per class, and prints the top objects/classes by heap usage.

    $ vmtool --action heapAnalyze --classNum 5 --objectNum 3
    +
    `,7),y=a("Use the "),w=e("code",null,"vmoption",-1),j=a(" command to dynamically turn on the "),S=e("code",null,"PrintGC",-1),T=a(" option."),I=s(`

    Analyze heap usage

    heapAnalyze starts from objects reachable from GC Root, counts instance numbers and bytes per class, and prints the top objects/classes by heap usage.

    $ vmtool --action heapAnalyze --classNum 5 --objectNum 3
     

    TIP

    Use --classNum to specify how many classes will be shown, and use --objectNum to specify how many objects will be shown.

    Analyze reference chain

    referenceAnalyze analyzes instances of a specific class and prints the largest objects and their backtrace chain (from the object back to GC Root) to help locate them.

    $ vmtool --action referenceAnalyze --className java.lang.String --objectNum 5 --backtraceNum 3
     

    TIP

    • Use --objectNum to specify how many objects will be shown
    • Use --backtraceNum to specify how many steps of backtrace will be done, set -1 to backtrace until root, set 0 to disable backtrace output
    • --backtraceNum values less than -1 are invalid
    • --classLoaderClass and --classloader from getInstances are also applicable here

    interrupt \u6307\u5B9A\u7EBF\u7A0B

    The thread id is specified by the -t parameter. It can be obtained using the thread command.

    vmtool --action interruptThread -t 1
    -

    glibc Release Free Memory

    `,12),T=a("Linux man page: "),L={href:"https://man7.org/linux/man-pages/man3/malloc_trim.3.html",target:"_blank",rel:"noopener noreferrer"},C=a("malloc_trim"),N=t(`
    vmtool --action mallocTrim
    -

    glibc Memory Status

    `,2),A=a("The memory status will be output to the application's stderr. Linux man page: "),z={href:"https://man7.org/linux/man-pages/man3/malloc_stats.3.html",target:"_blank",rel:"noopener noreferrer"},E=a("malloc_stats"),R=t(`
    vmtool --action mallocStats
    +

    glibc Release Free Memory

    `,12),L=a("Linux man page: "),C={href:"https://man7.org/linux/man-pages/man3/malloc_trim.3.html",target:"_blank",rel:"noopener noreferrer"},N=a("malloc_trim"),A=s(`
    vmtool --action mallocTrim
    +

    glibc Memory Status

    `,2),z=a("The memory status will be output to the application's stderr. Linux man page: "),E={href:"https://man7.org/linux/man-pages/man3/malloc_stats.3.html",target:"_blank",rel:"noopener noreferrer"},R=a("malloc_stats"),V=s(`
    vmtool --action mallocStats
     

    The output to stderr is as follows:

    Arena 0:
     system bytes     =     135168
     in use bytes     =      74352
    @@ -39,4 +39,4 @@ system bytes     =     135168
     in use bytes     =      74352
     max mmap regions =          0
     max mmap bytes   =          0
    -
    `,3);function V(G,M){const n=o("ExternalLinkIcon"),i=o("RouterLink");return c(),l("div",null,[u,m,e("p",null,[e("a",h,[b,v,s(n)])]),g,e("ul",null,[e("li",null,[e("a",f,[k,s(n)])])]),x,e("ul",null,[e("li",null,[_,s(i,{to:"/en/doc/vmoption.html"},{default:d(()=>[y]),_:1}),w,j,S])]),I,e("p",null,[T,e("a",L,[C,s(n)])]),N,e("p",null,[A,e("a",z,[E,s(n)])]),R])}const U=r(p,[["render",V],["__file","vmtool.html.vue"]]);export{U as default}; +
    `,3);function G(M,P){const t=r("ExternalLinkIcon"),o=r("RouterLink");return l(),d("div",null,[u,e("ul",null,[e("li",null,[e("a",m,[h,n(t)])])]),b,e("p",null,[v,n(o,{to:"/en/doc/ognl-express.html"},{default:i(()=>[g]),_:1}),f,k,x]),_,e("ul",null,[e("li",null,[y,n(o,{to:"/en/doc/vmoption.html"},{default:i(()=>[w]),_:1}),j,S,T])]),I,e("p",null,[L,e("a",C,[N,n(t)])]),A,e("p",null,[z,e("a",E,[R,n(t)])]),V])}const $=c(p,[["render",G],["__file","vmtool.html.vue"]]);export{$ as default}; diff --git a/assets/vmtool.html.7c48ec6d.js b/assets/vmtool.html.ab938841.js similarity index 93% rename from assets/vmtool.html.7c48ec6d.js rename to assets/vmtool.html.ab938841.js index 4cd1f537d..1748b6ba0 100644 --- a/assets/vmtool.html.7c48ec6d.js +++ b/assets/vmtool.html.ab938841.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-76745066","path":"/en/doc/vmtool.html","title":"vmtool","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"getInstances","slug":"getinstances","link":"#getinstances","children":[]},{"level":2,"title":"Specify classloader name","slug":"specify-classloader-name","link":"#specify-classloader-name","children":[]},{"level":2,"title":"Specify classloader hash","slug":"specify-classloader-hash","link":"#specify-classloader-hash","children":[]},{"level":2,"title":"Specify the number of expanded layers of returned results","slug":"specify-the-number-of-expanded-layers-of-returned-results","link":"#specify-the-number-of-expanded-layers-of-returned-results","children":[]},{"level":2,"title":"Execute expression","slug":"execute-expression","link":"#execute-expression","children":[{"level":3,"title":"Filter objects","slug":"filter-objects","link":"#filter-objects","children":[]}]},{"level":2,"title":"Force GC","slug":"force-gc","link":"#force-gc","children":[]},{"level":2,"title":"Analyze heap usage","slug":"analyze-heap-usage","link":"#analyze-heap-usage","children":[]},{"level":2,"title":"Analyze reference chain","slug":"analyze-reference-chain","link":"#analyze-reference-chain","children":[]},{"level":2,"title":"interrupt \u6307\u5B9A\u7EBF\u7A0B","slug":"interrupt-\u6307\u5B9A\u7EBF\u7A0B","link":"#interrupt-\u6307\u5B9A\u7EBF\u7A0B","children":[]},{"level":2,"title":"glibc Release Free Memory","slug":"glibc-release-free-memory","link":"#glibc-release-free-memory","children":[]},{"level":2,"title":"glibc Memory Status","slug":"glibc-memory-status","link":"#glibc-memory-status","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/vmtool.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-76745066","path":"/en/doc/vmtool.html","title":"vmtool","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"getInstances","slug":"getinstances","link":"#getinstances","children":[]},{"level":2,"title":"Specify classloader name","slug":"specify-classloader-name","link":"#specify-classloader-name","children":[]},{"level":2,"title":"Specify classloader hash","slug":"specify-classloader-hash","link":"#specify-classloader-hash","children":[]},{"level":2,"title":"Specify the number of expanded layers of returned results","slug":"specify-the-number-of-expanded-layers-of-returned-results","link":"#specify-the-number-of-expanded-layers-of-returned-results","children":[]},{"level":2,"title":"Execute expression","slug":"execute-expression","link":"#execute-expression","children":[{"level":3,"title":"Filter objects","slug":"filter-objects","link":"#filter-objects","children":[]}]},{"level":2,"title":"Force GC","slug":"force-gc","link":"#force-gc","children":[]},{"level":2,"title":"Analyze heap usage","slug":"analyze-heap-usage","link":"#analyze-heap-usage","children":[]},{"level":2,"title":"Analyze reference chain","slug":"analyze-reference-chain","link":"#analyze-reference-chain","children":[]},{"level":2,"title":"interrupt \u6307\u5B9A\u7EBF\u7A0B","slug":"interrupt-\u6307\u5B9A\u7EBF\u7A0B","link":"#interrupt-\u6307\u5B9A\u7EBF\u7A0B","children":[]},{"level":2,"title":"glibc Release Free Memory","slug":"glibc-release-free-memory","link":"#glibc-release-free-memory","children":[]},{"level":2,"title":"glibc Memory Status","slug":"glibc-memory-status","link":"#glibc-memory-status","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/vmtool.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/vmtool.html.a7d95339.js b/assets/vmtool.html.b5c2a935.js similarity index 94% rename from assets/vmtool.html.a7d95339.js rename to assets/vmtool.html.b5c2a935.js index b6c9ed0f8..15ad85e26 100644 --- a/assets/vmtool.html.a7d95339.js +++ b/assets/vmtool.html.b5c2a935.js @@ -1 +1 @@ -const l=JSON.parse('{"key":"v-10890efa","path":"/doc/vmtool.html","title":"vmtool","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u83B7\u53D6\u5BF9\u8C61","slug":"\u83B7\u53D6\u5BF9\u8C61","link":"#\u83B7\u53D6\u5BF9\u8C61","children":[]},{"level":2,"title":"\u6307\u5B9A classloader name","slug":"\u6307\u5B9A-classloader-name","link":"#\u6307\u5B9A-classloader-name","children":[]},{"level":2,"title":"\u6307\u5B9A classloader hash","slug":"\u6307\u5B9A-classloader-hash","link":"#\u6307\u5B9A-classloader-hash","children":[]},{"level":2,"title":"\u6307\u5B9A\u8FD4\u56DE\u7ED3\u679C\u5C55\u5F00\u5C42\u6570","slug":"\u6307\u5B9A\u8FD4\u56DE\u7ED3\u679C\u5C55\u5F00\u5C42\u6570","link":"#\u6307\u5B9A\u8FD4\u56DE\u7ED3\u679C\u5C55\u5F00\u5C42\u6570","children":[]},{"level":2,"title":"\u6267\u884C\u8868\u8FBE\u5F0F","slug":"\u6267\u884C\u8868\u8FBE\u5F0F","link":"#\u6267\u884C\u8868\u8FBE\u5F0F","children":[{"level":3,"title":"\u8FC7\u6EE4\u5BF9\u8C61","slug":"\u8FC7\u6EE4\u5BF9\u8C61","link":"#\u8FC7\u6EE4\u5BF9\u8C61","children":[]}]},{"level":2,"title":"\u5F3A\u5236 GC","slug":"\u5F3A\u5236-gc","link":"#\u5F3A\u5236-gc","children":[]},{"level":2,"title":"\u5206\u6790\u5806\u5185\u5B58\u5360\u7528","slug":"\u5206\u6790\u5806\u5185\u5B58\u5360\u7528","link":"#\u5206\u6790\u5806\u5185\u5B58\u5360\u7528","children":[]},{"level":2,"title":"\u5206\u6790\u5BF9\u8C61\u5F15\u7528\u94FE","slug":"\u5206\u6790\u5BF9\u8C61\u5F15\u7528\u94FE","link":"#\u5206\u6790\u5BF9\u8C61\u5F15\u7528\u94FE","children":[]},{"level":2,"title":"interrupt \u6307\u5B9A\u7EBF\u7A0B","slug":"interrupt-\u6307\u5B9A\u7EBF\u7A0B","link":"#interrupt-\u6307\u5B9A\u7EBF\u7A0B","children":[]},{"level":2,"title":"glibc \u91CA\u653E\u7A7A\u95F2\u5185\u5B58","slug":"glibc-\u91CA\u653E\u7A7A\u95F2\u5185\u5B58","link":"#glibc-\u91CA\u653E\u7A7A\u95F2\u5185\u5B58","children":[]},{"level":2,"title":"glibc \u5185\u5B58\u72B6\u6001","slug":"glibc-\u5185\u5B58\u72B6\u6001","link":"#glibc-\u5185\u5B58\u72B6\u6001","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/vmtool.md","version":"4.3.3"}');export{l as data}; +const l=JSON.parse('{"key":"v-10890efa","path":"/doc/vmtool.html","title":"vmtool","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u83B7\u53D6\u5BF9\u8C61","slug":"\u83B7\u53D6\u5BF9\u8C61","link":"#\u83B7\u53D6\u5BF9\u8C61","children":[]},{"level":2,"title":"\u6307\u5B9A classloader name","slug":"\u6307\u5B9A-classloader-name","link":"#\u6307\u5B9A-classloader-name","children":[]},{"level":2,"title":"\u6307\u5B9A classloader hash","slug":"\u6307\u5B9A-classloader-hash","link":"#\u6307\u5B9A-classloader-hash","children":[]},{"level":2,"title":"\u6307\u5B9A\u8FD4\u56DE\u7ED3\u679C\u5C55\u5F00\u5C42\u6570","slug":"\u6307\u5B9A\u8FD4\u56DE\u7ED3\u679C\u5C55\u5F00\u5C42\u6570","link":"#\u6307\u5B9A\u8FD4\u56DE\u7ED3\u679C\u5C55\u5F00\u5C42\u6570","children":[]},{"level":2,"title":"\u6267\u884C\u8868\u8FBE\u5F0F","slug":"\u6267\u884C\u8868\u8FBE\u5F0F","link":"#\u6267\u884C\u8868\u8FBE\u5F0F","children":[{"level":3,"title":"\u8FC7\u6EE4\u5BF9\u8C61","slug":"\u8FC7\u6EE4\u5BF9\u8C61","link":"#\u8FC7\u6EE4\u5BF9\u8C61","children":[]}]},{"level":2,"title":"\u5F3A\u5236 GC","slug":"\u5F3A\u5236-gc","link":"#\u5F3A\u5236-gc","children":[]},{"level":2,"title":"\u5206\u6790\u5806\u5185\u5B58\u5360\u7528","slug":"\u5206\u6790\u5806\u5185\u5B58\u5360\u7528","link":"#\u5206\u6790\u5806\u5185\u5B58\u5360\u7528","children":[]},{"level":2,"title":"\u5206\u6790\u5BF9\u8C61\u5F15\u7528\u94FE","slug":"\u5206\u6790\u5BF9\u8C61\u5F15\u7528\u94FE","link":"#\u5206\u6790\u5BF9\u8C61\u5F15\u7528\u94FE","children":[]},{"level":2,"title":"interrupt \u6307\u5B9A\u7EBF\u7A0B","slug":"interrupt-\u6307\u5B9A\u7EBF\u7A0B","link":"#interrupt-\u6307\u5B9A\u7EBF\u7A0B","children":[]},{"level":2,"title":"glibc \u91CA\u653E\u7A7A\u95F2\u5185\u5B58","slug":"glibc-\u91CA\u653E\u7A7A\u95F2\u5185\u5B58","link":"#glibc-\u91CA\u653E\u7A7A\u95F2\u5185\u5B58","children":[]},{"level":2,"title":"glibc \u5185\u5B58\u72B6\u6001","slug":"glibc-\u5185\u5B58\u72B6\u6001","link":"#glibc-\u5185\u5B58\u72B6\u6001","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/vmtool.md","version":"4.3.5"}');export{l as data}; diff --git a/assets/watch.html.bed23820.js b/assets/watch.html.2383ed88.js similarity index 83% rename from assets/watch.html.bed23820.js rename to assets/watch.html.2383ed88.js index c0606bd18..94ad62ae9 100644 --- a/assets/watch.html.bed23820.js +++ b/assets/watch.html.2383ed88.js @@ -1,4 +1,4 @@ -import{_ as c,o as i,c as r,a as s,b as a,w as o,e as n,d as e,r as l}from"./app.524ecf5c.js";const u={},d=s("h1",{id:"watch",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#watch","aria-hidden":"true"},"#"),n(" watch")],-1),k={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-watch",target:"_blank",rel:"noopener noreferrer"},m=s("code",null,"watch",-1),v=n("\u5728\u7EBF\u6559\u7A0B"),b=e('

    \u63D0\u793A

    \u51FD\u6570\u6267\u884C\u6570\u636E\u89C2\u6D4B

    \u8BA9\u4F60\u80FD\u65B9\u4FBF\u7684\u89C2\u5BDF\u5230\u6307\u5B9A\u51FD\u6570\u7684\u8C03\u7528\u60C5\u51B5\u3002\u80FD\u89C2\u5BDF\u5230\u7684\u8303\u56F4\u4E3A\uFF1A\u8FD4\u56DE\u503C\u3001\u629B\u51FA\u5F02\u5E38\u3001\u5165\u53C2\uFF0C\u901A\u8FC7\u7F16\u5199 OGNL \u8868\u8FBE\u5F0F\u8FDB\u884C\u5BF9\u5E94\u53D8\u91CF\u7684\u67E5\u770B\u3002

    \u53C2\u6570\u8BF4\u660E

    watch \u7684\u53C2\u6570\u6BD4\u8F83\u591A\uFF0C\u4E3B\u8981\u662F\u56E0\u4E3A\u5B83\u80FD\u5728 4 \u4E2A\u4E0D\u540C\u7684\u573A\u666F\u89C2\u5BDF\u5BF9\u8C61

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    class-pattern\u7C7B\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    method-pattern\u51FD\u6570\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    express\u89C2\u5BDF\u8868\u8FBE\u5F0F\uFF0C\u9ED8\u8BA4\u503C\uFF1A{params, target, returnObj}
    condition-express\u6761\u4EF6\u8868\u8FBE\u5F0F
    [b]\u5728\u51FD\u6570\u8C03\u7528\u4E4B\u524D\u89C2\u5BDF
    [e]\u5728\u51FD\u6570\u5F02\u5E38\u4E4B\u540E\u89C2\u5BDF
    [s]\u5728\u51FD\u6570\u8FD4\u56DE\u4E4B\u540E\u89C2\u5BDF
    [f]\u5728\u51FD\u6570\u7ED3\u675F\u4E4B\u540E(\u6B63\u5E38\u8FD4\u56DE\u548C\u5F02\u5E38\u8FD4\u56DE)\u89C2\u5BDF
    [E]\u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u4E3A\u901A\u914D\u7B26\u5339\u914D
    [x:]\u6307\u5B9A\u8F93\u51FA\u7ED3\u679C\u7684\u5C5E\u6027\u904D\u5386\u6DF1\u5EA6\uFF0C\u9ED8\u8BA4\u4E3A 1\uFF0C\u6700\u5927\u503C\u662F 4
    [c:]\u6307\u5B9A classloader hash\uFF0C\u53EA\u589E\u5F3A\u8BE5 classloader \u52A0\u8F7D\u7684\u7C7B
    [m <arg>]\u6307\u5B9A Class \u6700\u5927\u5339\u914D\u6570\u91CF\uFF0C\u9ED8\u8BA4\u503C\u4E3A 50\u3002\u957F\u683C\u5F0F\u4E3A[maxMatch <arg>]\u3002

    \u8FD9\u91CC\u91CD\u70B9\u8981\u8BF4\u660E\u7684\u662F\u89C2\u5BDF\u8868\u8FBE\u5F0F\uFF0C\u89C2\u5BDF\u8868\u8FBE\u5F0F\u7684\u6784\u6210\u4E3B\u8981\u7531 ognl \u8868\u8FBE\u5F0F\u7EC4\u6210\uFF0C\u6240\u4EE5\u4F60\u53EF\u4EE5\u8FD9\u6837\u5199"{params,returnObj}"\uFF0C\u53EA\u8981\u662F\u4E00\u4E2A\u5408\u6CD5\u7684 ognl \u8868\u8FBE\u5F0F\uFF0C\u90FD\u80FD\u88AB\u6B63\u5E38\u652F\u6301\u3002

    ',6),h=n("\u89C2\u5BDF\u7684\u7EF4\u5EA6\u4E5F\u6BD4\u8F83\u591A\uFF0C\u4E3B\u8981\u4F53\u73B0\u5728\u53C2\u6570 "),g=s("code",null,"advice",-1),f=n(" \u7684\u6570\u636E\u7ED3\u6784\u4E0A\u3002"),x=s("code",null,"Advice",-1),_=n(" \u53C2\u6570\u6700\u4E3B\u8981\u662F\u5C01\u88C5\u4E86\u901A\u77E5\u8282\u70B9\u7684\u6240\u6709\u4FE1\u606F\u3002\u8BF7\u53C2\u8003"),y=n("\u8868\u8FBE\u5F0F\u6838\u5FC3\u53D8\u91CF"),A=n("\u4E2D\u5173\u4E8E\u8BE5\u8282\u70B9\u7684\u63CF\u8FF0\u3002"),I=n("\u7279\u6B8A\u7528\u6CD5\u8BF7\u53C2\u8003\uFF1A"),w={href:"https://github.com/alibaba/arthas/issues/71",target:"_blank",rel:"noopener noreferrer"},C=n("https://github.com/alibaba/arthas/issues/71"),G=n("OGNL \u8868\u8FBE\u5F0F\u5B98\u7F51\uFF1A"),M={href:"https://commons.apache.org/dormant/commons-ognl/language-guide.html",target:"_blank",rel:"noopener noreferrer"},L=n("https://commons.apache.org/dormant/commons-ognl/language-guide.html"),j=e('

    \u7279\u522B\u8BF4\u660E\uFF1A

    • watch \u547D\u4EE4\u5B9A\u4E49\u4E86 4 \u4E2A\u89C2\u5BDF\u4E8B\u4EF6\u70B9\uFF0C\u5373 -b \u51FD\u6570\u8C03\u7528\u524D\uFF0C-e \u51FD\u6570\u5F02\u5E38\u540E\uFF0C-s \u51FD\u6570\u8FD4\u56DE\u540E\uFF0C-f \u51FD\u6570\u7ED3\u675F\u540E
    • 4 \u4E2A\u89C2\u5BDF\u4E8B\u4EF6\u70B9 -b\u3001-e\u3001-s \u9ED8\u8BA4\u5173\u95ED\uFF0C-f \u9ED8\u8BA4\u6253\u5F00\uFF0C\u5F53\u6307\u5B9A\u89C2\u5BDF\u70B9\u88AB\u6253\u5F00\u540E\uFF0C\u5728\u76F8\u5E94\u4E8B\u4EF6\u70B9\u4F1A\u5BF9\u89C2\u5BDF\u8868\u8FBE\u5F0F\u8FDB\u884C\u6C42\u503C\u5E76\u8F93\u51FA
    • \u8FD9\u91CC\u8981\u6CE8\u610F\u51FD\u6570\u5165\u53C2\u548C\u51FD\u6570\u51FA\u53C2\u7684\u533A\u522B\uFF0C\u6709\u53EF\u80FD\u5728\u4E2D\u95F4\u88AB\u4FEE\u6539\u5BFC\u81F4\u524D\u540E\u4E0D\u4E00\u81F4\uFF0C\u9664\u4E86 -b \u4E8B\u4EF6\u70B9 params \u4EE3\u8868\u51FD\u6570\u5165\u53C2\u5916\uFF0C\u5176\u4F59\u4E8B\u4EF6\u90FD\u4EE3\u8868\u51FD\u6570\u51FA\u53C2
    • \u5F53\u4F7F\u7528 -b \u65F6\uFF0C\u7531\u4E8E\u89C2\u5BDF\u4E8B\u4EF6\u70B9\u662F\u5728\u51FD\u6570\u8C03\u7528\u524D\uFF0C\u6B64\u65F6\u8FD4\u56DE\u503C\u6216\u5F02\u5E38\u5747\u4E0D\u5B58\u5728
    • \u5728 watch \u547D\u4EE4\u7684\u7ED3\u679C\u91CC\uFF0C\u4F1A\u6253\u5370\u51FAlocation\u4FE1\u606F\u3002location\u6709\u4E09\u79CD\u53EF\u80FD\u503C\uFF1AAtEnter\uFF0CAtExit\uFF0CAtExceptionExit\u3002\u5BF9\u5E94\u51FD\u6570\u5165\u53E3\uFF0C\u51FD\u6570\u6B63\u5E38 return\uFF0C\u51FD\u6570\u629B\u51FA\u5F02\u5E38\u3002

    \u4F7F\u7528\u53C2\u8003

    \u542F\u52A8 Demo

    ',4),E=n("\u542F\u52A8"),O=n("\u5FEB\u901F\u5165\u95E8"),F=n("\u91CC\u7684"),q=s("code",null,"math-game",-1),R=n("\u3002"),P=e(`

    \u89C2\u5BDF\u51FD\u6570\u8C03\u7528\u8FD4\u56DE\u65F6\u7684\u53C2\u6570\u3001this \u5BF9\u8C61\u548C\u8FD4\u56DE\u503C

    \u63D0\u793A

    \u89C2\u5BDF\u8868\u8FBE\u5F0F\uFF0C\u9ED8\u8BA4\u503C\u662F{params, target, returnObj}

    $ watch demo.MathGame primeFactors -x 2
    +import{_ as o,o as l,c,a as s,b as e,w as t,d as p,e as n,r as i}from"./app.e2427bec.js";const r={},u=p('

    watch

    \u63D0\u793A

    \u51FD\u6570\u6267\u884C\u6570\u636E\u89C2\u6D4B

    \u8BA9\u4F60\u80FD\u65B9\u4FBF\u7684\u89C2\u5BDF\u5230\u6307\u5B9A\u51FD\u6570\u7684\u8C03\u7528\u60C5\u51B5\u3002\u80FD\u89C2\u5BDF\u5230\u7684\u8303\u56F4\u4E3A\uFF1A\u8FD4\u56DE\u503C\u3001\u629B\u51FA\u5F02\u5E38\u3001\u5165\u53C2\uFF0C\u901A\u8FC7\u7F16\u5199 OGNL \u8868\u8FBE\u5F0F\u8FDB\u884C\u5BF9\u5E94\u53D8\u91CF\u7684\u67E5\u770B\u3002

    \u53C2\u6570\u8BF4\u660E

    watch \u7684\u53C2\u6570\u6BD4\u8F83\u591A\uFF0C\u4E3B\u8981\u662F\u56E0\u4E3A\u5B83\u80FD\u5728 4 \u4E2A\u4E0D\u540C\u7684\u573A\u666F\u89C2\u5BDF\u5BF9\u8C61

    \u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
    class-pattern\u7C7B\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    method-pattern\u51FD\u6570\u540D\u8868\u8FBE\u5F0F\u5339\u914D
    express\u89C2\u5BDF\u8868\u8FBE\u5F0F\uFF0C\u9ED8\u8BA4\u503C\uFF1A{params, target, returnObj}
    condition-express\u6761\u4EF6\u8868\u8FBE\u5F0F
    [b]\u5728\u51FD\u6570\u8C03\u7528\u4E4B\u524D\u89C2\u5BDF
    [e]\u5728\u51FD\u6570\u5F02\u5E38\u4E4B\u540E\u89C2\u5BDF
    [s]\u5728\u51FD\u6570\u8FD4\u56DE\u4E4B\u540E\u89C2\u5BDF
    [f]\u5728\u51FD\u6570\u7ED3\u675F\u4E4B\u540E(\u6B63\u5E38\u8FD4\u56DE\u548C\u5F02\u5E38\u8FD4\u56DE)\u89C2\u5BDF
    [E]\u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u4E3A\u901A\u914D\u7B26\u5339\u914D
    [x:]\u6307\u5B9A\u8F93\u51FA\u7ED3\u679C\u7684\u5C5E\u6027\u904D\u5386\u6DF1\u5EA6\uFF0C\u9ED8\u8BA4\u4E3A 1\uFF0C\u6700\u5927\u503C\u662F 4
    [c:]\u6307\u5B9A classloader hash\uFF0C\u53EA\u589E\u5F3A\u8BE5 classloader \u52A0\u8F7D\u7684\u7C7B
    [m <arg>]\u6307\u5B9A Class \u6700\u5927\u5339\u914D\u6570\u91CF\uFF0C\u9ED8\u8BA4\u503C\u4E3A 50\u3002\u957F\u683C\u5F0F\u4E3A[maxMatch <arg>]\u3002

    \u8FD9\u91CC\u91CD\u70B9\u8981\u8BF4\u660E\u7684\u662F\u89C2\u5BDF\u8868\u8FBE\u5F0F\uFF0C\u89C2\u5BDF\u8868\u8FBE\u5F0F\u7684\u6784\u6210\u4E3B\u8981\u7531 ognl \u8868\u8FBE\u5F0F\u7EC4\u6210\uFF0C\u6240\u4EE5\u4F60\u53EF\u4EE5\u8FD9\u6837\u5199"{params,returnObj}"\uFF0C\u53EA\u8981\u662F\u4E00\u4E2A\u5408\u6CD5\u7684 ognl \u8868\u8FBE\u5F0F\uFF0C\u90FD\u80FD\u88AB\u6B63\u5E38\u652F\u6301\u3002

    ',7),d=n("\u89C2\u5BDF\u7684\u7EF4\u5EA6\u4E5F\u6BD4\u8F83\u591A\uFF0C\u4E3B\u8981\u4F53\u73B0\u5728\u53C2\u6570 "),k=s("code",null,"advice",-1),m=n(" \u7684\u6570\u636E\u7ED3\u6784\u4E0A\u3002"),v=s("code",null,"Advice",-1),b=n(" \u53C2\u6570\u6700\u4E3B\u8981\u662F\u5C01\u88C5\u4E86\u901A\u77E5\u8282\u70B9\u7684\u6240\u6709\u4FE1\u606F\u3002\u8BF7\u53C2\u8003"),h=n("\u8868\u8FBE\u5F0F\u6838\u5FC3\u53D8\u91CF"),g=n("\u4E2D\u5173\u4E8E\u8BE5\u8282\u70B9\u7684\u63CF\u8FF0\u3002"),f=n("OGNL \u590D\u6742\u8868\u8FBE\u5F0F\u4F7F\u7528\u6280\u5DE7"),x=p('

    \u7279\u522B\u8BF4\u660E\uFF1A

    • watch \u547D\u4EE4\u5B9A\u4E49\u4E86 4 \u4E2A\u89C2\u5BDF\u4E8B\u4EF6\u70B9\uFF0C\u5373 -b \u51FD\u6570\u8C03\u7528\u524D\uFF0C-e \u51FD\u6570\u5F02\u5E38\u540E\uFF0C-s \u51FD\u6570\u8FD4\u56DE\u540E\uFF0C-f \u51FD\u6570\u7ED3\u675F\u540E
    • 4 \u4E2A\u89C2\u5BDF\u4E8B\u4EF6\u70B9 -b\u3001-e\u3001-s \u9ED8\u8BA4\u5173\u95ED\uFF0C-f \u9ED8\u8BA4\u6253\u5F00\uFF0C\u5F53\u6307\u5B9A\u89C2\u5BDF\u70B9\u88AB\u6253\u5F00\u540E\uFF0C\u5728\u76F8\u5E94\u4E8B\u4EF6\u70B9\u4F1A\u5BF9\u89C2\u5BDF\u8868\u8FBE\u5F0F\u8FDB\u884C\u6C42\u503C\u5E76\u8F93\u51FA
    • \u8FD9\u91CC\u8981\u6CE8\u610F\u51FD\u6570\u5165\u53C2\u548C\u51FD\u6570\u51FA\u53C2\u7684\u533A\u522B\uFF0C\u6709\u53EF\u80FD\u5728\u4E2D\u95F4\u88AB\u4FEE\u6539\u5BFC\u81F4\u524D\u540E\u4E0D\u4E00\u81F4\uFF0C\u9664\u4E86 -b \u4E8B\u4EF6\u70B9 params \u4EE3\u8868\u51FD\u6570\u5165\u53C2\u5916\uFF0C\u5176\u4F59\u4E8B\u4EF6\u90FD\u4EE3\u8868\u51FD\u6570\u51FA\u53C2
    • \u5F53\u4F7F\u7528 -b \u65F6\uFF0C\u7531\u4E8E\u89C2\u5BDF\u4E8B\u4EF6\u70B9\u662F\u5728\u51FD\u6570\u8C03\u7528\u524D\uFF0C\u6B64\u65F6\u8FD4\u56DE\u503C\u6216\u5F02\u5E38\u5747\u4E0D\u5B58\u5728
    • \u5728 watch \u547D\u4EE4\u7684\u7ED3\u679C\u91CC\uFF0C\u4F1A\u6253\u5370\u51FAlocation\u4FE1\u606F\u3002location\u6709\u4E09\u79CD\u53EF\u80FD\u503C\uFF1AAtEnter\uFF0CAtExit\uFF0CAtExceptionExit\u3002\u5BF9\u5E94\u51FD\u6570\u5165\u53E3\uFF0C\u51FD\u6570\u6B63\u5E38 return\uFF0C\u51FD\u6570\u629B\u51FA\u5F02\u5E38\u3002

    \u4F7F\u7528\u53C2\u8003

    \u542F\u52A8 Demo

    ',4),_=n("\u542F\u52A8"),y=n("\u5FEB\u901F\u5165\u95E8"),A=n("\u91CC\u7684"),I=s("code",null,"math-game",-1),C=n("\u3002"),w=p(`

    \u89C2\u5BDF\u51FD\u6570\u8C03\u7528\u8FD4\u56DE\u65F6\u7684\u53C2\u6570\u3001this \u5BF9\u8C61\u548C\u8FD4\u56DE\u503C

    \u63D0\u793A

    \u89C2\u5BDF\u8868\u8FBE\u5F0F\uFF0C\u9ED8\u8BA4\u503C\u662F{params, target, returnObj}

    $ watch demo.MathGame primeFactors -x 2
     Press Q or Ctrl+C to abort.
     Affect(class count: 1 , method count: 1) cost in 32 ms, listenerId: 5
     method=demo.MathGame.primeFactors location=AtExceptionExit
    @@ -165,7 +165,7 @@ Affect(class count: ],
         @Integer[89],
     ]
    -
    `,34),$=n("\u6CE8\u610F\u8FD9\u91CC\u4F7F\u7528 "),N=s("code",null,"Thread.currentThread().getContextClassLoader()",-1),B=n(" \u52A0\u8F7D,\u4F7F\u7528\u7CBE\u786E"),S=s("code",null,"classloader",-1),U=n(),z=n("ognl"),D=n("\u66F4\u597D\u3002"),T=e(`

    \u6392\u9664\u6389\u6307\u5B9A\u7684\u7C7B

    \u63D0\u793A

    watch/trace/monitor/stack/tt \u547D\u4EE4\u90FD\u652F\u6301 --exclude-class-pattern \u53C2\u6570

    \u4F7F\u7528 --exclude-class-pattern \u53C2\u6570\u53EF\u4EE5\u6392\u9664\u6389\u6307\u5B9A\u7684\u7C7B\uFF0C\u6BD4\u5982\uFF1A

    watch javax.servlet.Filter * --exclude-class-pattern com.demo.TestFilter
    +
    `,34),G=n("\u6CE8\u610F\u8FD9\u91CC\u4F7F\u7528 "),M=s("code",null,"Thread.currentThread().getContextClassLoader()",-1),j=n(" \u52A0\u8F7D,\u4F7F\u7528\u7CBE\u786E"),L=s("code",null,"classloader",-1),O=n(),E=n("ognl"),F=n("\u66F4\u597D\u3002"),q=p(`

    \u6392\u9664\u6389\u6307\u5B9A\u7684\u7C7B

    \u63D0\u793A

    watch/trace/monitor/stack/tt \u547D\u4EE4\u90FD\u652F\u6301 --exclude-class-pattern \u53C2\u6570

    \u4F7F\u7528 --exclude-class-pattern \u53C2\u6570\u53EF\u4EE5\u6392\u9664\u6389\u6307\u5B9A\u7684\u7C7B\uFF0C\u6BD4\u5982\uFF1A

    watch javax.servlet.Filter * --exclude-class-pattern com.demo.TestFilter
     

    \u4E0D\u5339\u914D\u5B50\u7C7B

    \u9ED8\u8BA4\u60C5\u51B5\u4E0B watch/trace/monitor/stack/tt \u547D\u4EE4\u90FD\u4F1A\u5339\u914D\u5B50\u7C7B\u3002\u5982\u679C\u60F3\u4E0D\u5339\u914D\uFF0C\u53EF\u4EE5\u901A\u8FC7\u5168\u5C40\u53C2\u6570\u5173\u6389\u3002

    options disable-sub-class true
     

    \u4F7F\u7528 -v \u53C2\u6570\u6253\u5370\u66F4\u591A\u4FE1\u606F

    \u63D0\u793A

    watch/trace/monitor/stack/tt \u547D\u4EE4\u90FD\u652F\u6301 -v \u53C2\u6570

    \u5F53\u547D\u4EE4\u6267\u884C\u4E4B\u540E\uFF0C\u6CA1\u6709\u8F93\u51FA\u7ED3\u679C\u3002\u6709\u4E24\u79CD\u53EF\u80FD\uFF1A

    1. \u5339\u914D\u5230\u7684\u51FD\u6570\u6CA1\u6709\u88AB\u6267\u884C
    2. \u6761\u4EF6\u8868\u8FBE\u5F0F\u7ED3\u679C\u662F false

    \u4F46\u7528\u6237\u533A\u5206\u4E0D\u51FA\u662F\u54EA\u79CD\u60C5\u51B5\u3002

    \u4F7F\u7528 -v\u9009\u9879\uFF0C\u5219\u4F1A\u6253\u5370Condition express\u7684\u5177\u4F53\u503C\u548C\u6267\u884C\u7ED3\u679C\uFF0C\u65B9\u4FBF\u786E\u8BA4\u3002

    \u6BD4\u5982\uFF1A

    $ watch -v -x 2 demo.MathGame print 'params' 'params[0] > 100000'
     Press Q or Ctrl+C to abort.
    @@ -187,4 +187,4 @@ ts=2020-12-02 22:38:57; [cost=0.052877ms] result=@Object[][
             @Integer[4243],
         ],
     ]
    -
    `,15);function V(Q,H){const t=l("ExternalLinkIcon"),p=l("RouterLink");return i(),r("div",null,[d,s("p",null,[s("a",k,[m,v,a(t)])]),b,s("p",null,[h,g,f,x,_,a(p,{to:"/doc/advice-class.html"},{default:o(()=>[y]),_:1}),A]),s("ul",null,[s("li",null,[I,s("a",w,[C,a(t)])]),s("li",null,[G,s("a",M,[L,a(t)])])]),j,s("p",null,[E,a(p,{to:"/doc/quick-start.html"},{default:o(()=>[O]),_:1}),F,q,R]),P,s("ul",null,[s("li",null,[$,N,B,S,U,a(p,{to:"/doc/ognl.html"},{default:o(()=>[z]),_:1}),D])]),T])}const K=c(u,[["render",V],["__file","watch.html.vue"]]);export{K as default}; +
    `,15);function R(P,$){const a=i("RouterLink");return l(),c("div",null,[u,s("p",null,[d,k,m,v,b,e(a,{to:"/doc/advice-class.html"},{default:t(()=>[h]),_:1}),g]),s("ul",null,[s("li",null,[e(a,{to:"/doc/ognl-express.html"},{default:t(()=>[f]),_:1})])]),x,s("p",null,[_,e(a,{to:"/doc/quick-start.html"},{default:t(()=>[y]),_:1}),A,I,C]),w,s("ul",null,[s("li",null,[G,M,j,L,O,e(a,{to:"/doc/ognl.html"},{default:t(()=>[E]),_:1}),F])]),q])}const B=o(r,[["render",R],["__file","watch.html.vue"]]);export{B as default}; diff --git a/assets/watch.html.ae8c575e.js b/assets/watch.html.72a5979d.js similarity index 95% rename from assets/watch.html.ae8c575e.js rename to assets/watch.html.72a5979d.js index 365e0e62a..70f76bc6b 100644 --- a/assets/watch.html.ae8c575e.js +++ b/assets/watch.html.72a5979d.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-75a5aa24","path":"/en/doc/watch.html","title":"watch","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Parameters & Options","slug":"parameters-options","link":"#parameters-options","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"Start Demo","slug":"start-demo","link":"#start-demo","children":[]},{"level":3,"title":"Check the out parameters, this and return value","slug":"check-the-out-parameters-this-and-return-value","link":"#check-the-out-parameters-this-and-return-value","children":[]},{"level":3,"title":"Specify the max number of matched Classes","slug":"specify-the-max-number-of-matched-classes","link":"#specify-the-max-number-of-matched-classes","children":[]},{"level":3,"title":"Specify ClassLoader to enhance","slug":"specify-classloader-to-enhance","link":"#specify-classloader-to-enhance","children":[]},{"level":3,"title":"Check in parameters","slug":"check-in-parameters","link":"#check-in-parameters","children":[]},{"level":3,"title":"Check before and after at the same time","slug":"check-before-and-after-at-the-same-time","link":"#check-before-and-after-at-the-same-time","children":[]},{"level":3,"title":"Use -x to check more details","slug":"use-x-to-check-more-details","link":"#use-x-to-check-more-details","children":[]},{"level":3,"title":"Use condition expressions to locate specific call","slug":"use-condition-expressions-to-locate-specific-call","link":"#use-condition-expressions-to-locate-specific-call","children":[]},{"level":3,"title":"Check exceptions","slug":"check-exceptions","link":"#check-exceptions","children":[]},{"level":3,"title":"Filter by time cost","slug":"filter-by-time-cost","link":"#filter-by-time-cost","children":[]},{"level":3,"title":"Check the field of the target object","slug":"check-the-field-of-the-target-object","link":"#check-the-field-of-the-target-object","children":[]},{"level":3,"title":"Get a static field and calling a static method","slug":"get-a-static-field-and-calling-a-static-method","link":"#get-a-static-field-and-calling-a-static-method","children":[]},{"level":3,"title":"Exclude the specified class","slug":"exclude-the-specified-class","link":"#exclude-the-specified-class","children":[]},{"level":3,"title":"Does not match subclass","slug":"does-not-match-subclass","link":"#does-not-match-subclass","children":[]},{"level":3,"title":"Use the -v parameter to print more information","slug":"use-the-v-parameter-to-print-more-information","link":"#use-the-v-parameter-to-print-more-information","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/watch.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-75a5aa24","path":"/en/doc/watch.html","title":"watch","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Parameters & Options","slug":"parameters-options","link":"#parameters-options","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[{"level":3,"title":"Start Demo","slug":"start-demo","link":"#start-demo","children":[]},{"level":3,"title":"Check the out parameters, this and return value","slug":"check-the-out-parameters-this-and-return-value","link":"#check-the-out-parameters-this-and-return-value","children":[]},{"level":3,"title":"Specify the max number of matched Classes","slug":"specify-the-max-number-of-matched-classes","link":"#specify-the-max-number-of-matched-classes","children":[]},{"level":3,"title":"Specify ClassLoader to enhance","slug":"specify-classloader-to-enhance","link":"#specify-classloader-to-enhance","children":[]},{"level":3,"title":"Check in parameters","slug":"check-in-parameters","link":"#check-in-parameters","children":[]},{"level":3,"title":"Check before and after at the same time","slug":"check-before-and-after-at-the-same-time","link":"#check-before-and-after-at-the-same-time","children":[]},{"level":3,"title":"Use -x to check more details","slug":"use-x-to-check-more-details","link":"#use-x-to-check-more-details","children":[]},{"level":3,"title":"Use condition expressions to locate specific call","slug":"use-condition-expressions-to-locate-specific-call","link":"#use-condition-expressions-to-locate-specific-call","children":[]},{"level":3,"title":"Check exceptions","slug":"check-exceptions","link":"#check-exceptions","children":[]},{"level":3,"title":"Filter by time cost","slug":"filter-by-time-cost","link":"#filter-by-time-cost","children":[]},{"level":3,"title":"Check the field of the target object","slug":"check-the-field-of-the-target-object","link":"#check-the-field-of-the-target-object","children":[]},{"level":3,"title":"Get a static field and calling a static method","slug":"get-a-static-field-and-calling-a-static-method","link":"#get-a-static-field-and-calling-a-static-method","children":[]},{"level":3,"title":"Exclude the specified class","slug":"exclude-the-specified-class","link":"#exclude-the-specified-class","children":[]},{"level":3,"title":"Does not match subclass","slug":"does-not-match-subclass","link":"#does-not-match-subclass","children":[]},{"level":3,"title":"Use the -v parameter to print more information","slug":"use-the-v-parameter-to-print-more-information","link":"#use-the-v-parameter-to-print-more-information","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/watch.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/watch.html.fadb694e.js b/assets/watch.html.9d383a57.js similarity index 87% rename from assets/watch.html.fadb694e.js rename to assets/watch.html.9d383a57.js index e3a1f9c9c..5536fb4b9 100644 --- a/assets/watch.html.fadb694e.js +++ b/assets/watch.html.9d383a57.js @@ -1,4 +1,4 @@ -import{_ as l,o as i,c as r,a as n,b as a,w as o,e as s,d as p,r as c}from"./app.524ecf5c.js";const u={},d=n("h1",{id:"watch",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#watch","aria-hidden":"true"},"#"),s(" watch")],-1),m={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-watch",target:"_blank",rel:"noopener noreferrer"},k=n("code",null,"watch",-1),v=s(" online tutorial"),b=n("p",null,[s("Monitor methods in data aspect including "),n("code",null,"return values"),s(", "),n("code",null,"exceptions"),s(" and "),n("code",null,"parameters"),s(".")],-1),h=s("With the help of "),g={href:"https://commons.apache.org/proper/commons-ognl/index.html",target:"_blank",rel:"noopener noreferrer"},f=s("OGNL"),x=s(", you can easily check the details of variables when methods being invoked."),y=p('

    Parameters & Options

    There are four different scenarios for watch command, which makes it rather complicated.

    NameSpecification
    class-patternpattern for the class name
    method-patternpattern for the method name
    expressionexpression to watch, default value {params, target, returnObj}
    condition-expressioncondition 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
    [c:]Specify classloader hash, only enhance classes loaded by it
    [m <arg>]Specify the max number of matched Classes, the default value is 50. Long format is [maxMatch <arg>].

    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 -bwhile 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:

    ',6),_=s("Critical fields in "),w=n("em",null,"expression",-1),I={href:"https://github.com/alibaba/arthas/issues/71",target:"_blank",rel:"noopener noreferrer"},A=s("Special usages"),C={href:"https://commons.apache.org/dormant/commons-ognl/language-guide.html",target:"_blank",rel:"noopener noreferrer"},G=s("OGNL official guide"),j=n("h2",{id:"usage",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#usage","aria-hidden":"true"},"#"),s(" Usage")],-1),M=n("h3",{id:"start-demo",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#start-demo","aria-hidden":"true"},"#"),s(" Start Demo")],-1),L=s("Start "),E=n("code",null,"math-game",-1),O=s(" in "),F=s("Quick Start"),q=s("."),T=p(`

    Check the out parameters, this and return value

    TIP

    The expression to watch, default value {params, target, returnObj}

    $ watch demo.MathGame primeFactors -x 2
    +import{_ as p,o as c,c as i,a as n,b as e,w as t,d as o,e as s,r as l}from"./app.e2427bec.js";const r={},u=o('

    watch

    Monitor methods in data aspect including return values, exceptions and parameters.

    With the help of OGNL, you can easily check the details of variables when methods being invoked.

    Parameters & Options

    There are four different scenarios for watch command, which makes it rather complicated.

    NameSpecification
    class-patternpattern for the class name
    method-patternpattern for the method name
    expressionexpression to watch, default value {params, target, returnObj}
    condition-expressioncondition 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
    [c:]Specify classloader hash, only enhance classes loaded by it
    [m <arg>]Specify the max number of matched Classes, the default value is 50. Long format is [maxMatch <arg>].

    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 -bwhile 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:

    ',9),d=s("Critical fields in "),m=n("em",null,"expression",-1),k=s("Tips for complex OGNL expressions"),v=n("h2",{id:"usage",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#usage","aria-hidden":"true"},"#"),s(" Usage")],-1),b=n("h3",{id:"start-demo",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#start-demo","aria-hidden":"true"},"#"),s(" Start Demo")],-1),h=s("Start "),g=n("code",null,"math-game",-1),f=s(" in "),x=s("Quick Start"),y=s("."),w=o(`

    Check the out parameters, this and return value

    TIP

    The expression to watch, default value {params, target, returnObj}

    $ watch demo.MathGame primeFactors -x 2
     Press Q or Ctrl+C to abort.
     Affect(class count: 1 , method count: 1) cost in 32 ms, listenerId: 5
     method=demo.MathGame.primeFactors location=AtExceptionExit
    @@ -165,7 +165,7 @@ Affect(class count: ],
         @Integer[89],
     ]
    -
    `,35),P=s("Note that here you use "),S=n("code",null,"Thread.currentThread().getContextClassLoader()",-1),R=s(" to load, and it is better to use the exact "),N=n("code",null,"classloader",-1),U=s(),$=s("ognl"),B=s("."),D=p(`

    Exclude the specified class

    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:

    watch javax.servlet.Filter * --exclude-class-pattern com.demo.TestFilter
    +
    `,35),_=s("Note that here you use "),I=n("code",null,"Thread.currentThread().getContextClassLoader()",-1),A=s(" to load, and it is better to use the exact "),C=n("code",null,"classloader",-1),G=s(),j=s("ognl"),M=s("."),L=o(`

    Exclude the specified class

    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:

    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.

    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.

    When the command is executed, there is no output result. There are two possibilities:

    1. The matched function is not executed
    2. The result of the conditional expression is false

    But the user cannot tell which situation is.

    Using the -v option, the specific value and execution result of Condition express will be printed for easy confirmation.

    such as:

    $ watch -v -x 2 demo.MathGame print 'params' 'params[0] > 100000'
     Press Q or Ctrl+C to abort.
    @@ -187,4 +187,4 @@ ts=2020-12-02 22:38:57; [cost=0.052877ms] result=@Object[][
             @Integer[4243],
         ],
     ]
    -
    `,15);function z(Q,V){const e=c("ExternalLinkIcon"),t=c("RouterLink");return i(),r("div",null,[d,n("p",null,[n("a",m,[k,v,a(e)])]),b,n("p",null,[h,n("a",g,[f,a(e)]),x]),y,n("ul",null,[n("li",null,[a(t,{to:"/en/doc/advice-class.html"},{default:o(()=>[_,w]),_:1})]),n("li",null,[n("a",I,[A,a(e)])]),n("li",null,[n("a",C,[G,a(e)])])]),j,M,n("p",null,[L,E,O,a(t,{to:"/en/doc/quick-start.html"},{default:o(()=>[F]),_:1}),q]),T,n("ul",null,[n("li",null,[P,S,R,N,U,a(t,{to:"/en/doc/ognl.html"},{default:o(()=>[$]),_:1}),B])]),D])}const Y=l(u,[["render",z],["__file","watch.html.vue"]]);export{Y as default}; +
    `,15);function O(E,F){const a=l("RouterLink");return c(),i("div",null,[u,n("ul",null,[n("li",null,[e(a,{to:"/en/doc/advice-class.html"},{default:t(()=>[d,m]),_:1})]),n("li",null,[e(a,{to:"/en/doc/ognl-express.html"},{default:t(()=>[k]),_:1})])]),v,b,n("p",null,[h,g,f,e(a,{to:"/en/doc/quick-start.html"},{default:t(()=>[x]),_:1}),y]),w,n("ul",null,[n("li",null,[_,I,A,C,G,e(a,{to:"/en/doc/ognl.html"},{default:t(()=>[j]),_:1}),M])]),L])}const T=p(r,[["render",O],["__file","watch.html.vue"]]);export{T as default}; diff --git a/assets/watch.html.ebf01288.js b/assets/watch.html.a9d6b6e1.js similarity index 97% rename from assets/watch.html.ebf01288.js rename to assets/watch.html.a9d6b6e1.js index 2f49457ec..33c306e2b 100644 --- a/assets/watch.html.ebf01288.js +++ b/assets/watch.html.a9d6b6e1.js @@ -1 +1 @@ -const l=JSON.parse('{"key":"v-24fc49da","path":"/doc/watch.html","title":"watch","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"\u542F\u52A8 Demo","slug":"\u542F\u52A8-demo","link":"#\u542F\u52A8-demo","children":[]},{"level":3,"title":"\u89C2\u5BDF\u51FD\u6570\u8C03\u7528\u8FD4\u56DE\u65F6\u7684\u53C2\u6570\u3001this \u5BF9\u8C61\u548C\u8FD4\u56DE\u503C","slug":"\u89C2\u5BDF\u51FD\u6570\u8C03\u7528\u8FD4\u56DE\u65F6\u7684\u53C2\u6570\u3001this-\u5BF9\u8C61\u548C\u8FD4\u56DE\u503C","link":"#\u89C2\u5BDF\u51FD\u6570\u8C03\u7528\u8FD4\u56DE\u65F6\u7684\u53C2\u6570\u3001this-\u5BF9\u8C61\u548C\u8FD4\u56DE\u503C","children":[]},{"level":3,"title":"\u6307\u5B9A Class \u6700\u5927\u5339\u914D\u6570\u91CF","slug":"\u6307\u5B9A-class-\u6700\u5927\u5339\u914D\u6570\u91CF","link":"#\u6307\u5B9A-class-\u6700\u5927\u5339\u914D\u6570\u91CF","children":[]},{"level":3,"title":"\u6307\u5B9A ClassLoader \u589E\u5F3A","slug":"\u6307\u5B9A-classloader-\u589E\u5F3A","link":"#\u6307\u5B9A-classloader-\u589E\u5F3A","children":[]},{"level":3,"title":"\u89C2\u5BDF\u51FD\u6570\u8C03\u7528\u5165\u53E3\u7684\u53C2\u6570\u548C\u8FD4\u56DE\u503C","slug":"\u89C2\u5BDF\u51FD\u6570\u8C03\u7528\u5165\u53E3\u7684\u53C2\u6570\u548C\u8FD4\u56DE\u503C","link":"#\u89C2\u5BDF\u51FD\u6570\u8C03\u7528\u5165\u53E3\u7684\u53C2\u6570\u548C\u8FD4\u56DE\u503C","children":[]},{"level":3,"title":"\u540C\u65F6\u89C2\u5BDF\u51FD\u6570\u8C03\u7528\u524D\u548C\u51FD\u6570\u8FD4\u56DE\u540E","slug":"\u540C\u65F6\u89C2\u5BDF\u51FD\u6570\u8C03\u7528\u524D\u548C\u51FD\u6570\u8FD4\u56DE\u540E","link":"#\u540C\u65F6\u89C2\u5BDF\u51FD\u6570\u8C03\u7528\u524D\u548C\u51FD\u6570\u8FD4\u56DE\u540E","children":[]},{"level":3,"title":"\u8C03\u6574-x\u7684\u503C\uFF0C\u89C2\u5BDF\u5177\u4F53\u7684\u51FD\u6570\u53C2\u6570\u503C","slug":"\u8C03\u6574-x\u7684\u503C-\u89C2\u5BDF\u5177\u4F53\u7684\u51FD\u6570\u53C2\u6570\u503C","link":"#\u8C03\u6574-x\u7684\u503C-\u89C2\u5BDF\u5177\u4F53\u7684\u51FD\u6570\u53C2\u6570\u503C","children":[]},{"level":3,"title":"\u6761\u4EF6\u8868\u8FBE\u5F0F\u7684\u4F8B\u5B50","slug":"\u6761\u4EF6\u8868\u8FBE\u5F0F\u7684\u4F8B\u5B50","link":"#\u6761\u4EF6\u8868\u8FBE\u5F0F\u7684\u4F8B\u5B50","children":[]},{"level":3,"title":"\u89C2\u5BDF\u5F02\u5E38\u4FE1\u606F\u7684\u4F8B\u5B50","slug":"\u89C2\u5BDF\u5F02\u5E38\u4FE1\u606F\u7684\u4F8B\u5B50","link":"#\u89C2\u5BDF\u5F02\u5E38\u4FE1\u606F\u7684\u4F8B\u5B50","children":[]},{"level":3,"title":"\u6309\u7167\u8017\u65F6\u8FDB\u884C\u8FC7\u6EE4","slug":"\u6309\u7167\u8017\u65F6\u8FDB\u884C\u8FC7\u6EE4","link":"#\u6309\u7167\u8017\u65F6\u8FDB\u884C\u8FC7\u6EE4","children":[]},{"level":3,"title":"\u89C2\u5BDF\u5F53\u524D\u5BF9\u8C61\u4E2D\u7684\u5C5E\u6027","slug":"\u89C2\u5BDF\u5F53\u524D\u5BF9\u8C61\u4E2D\u7684\u5C5E\u6027","link":"#\u89C2\u5BDF\u5F53\u524D\u5BF9\u8C61\u4E2D\u7684\u5C5E\u6027","children":[]},{"level":3,"title":"\u83B7\u53D6\u7C7B\u7684\u9759\u6001\u5B57\u6BB5\u3001\u8C03\u7528\u7C7B\u7684\u9759\u6001\u51FD\u6570\u7684\u4F8B\u5B50","slug":"\u83B7\u53D6\u7C7B\u7684\u9759\u6001\u5B57\u6BB5\u3001\u8C03\u7528\u7C7B\u7684\u9759\u6001\u51FD\u6570\u7684\u4F8B\u5B50","link":"#\u83B7\u53D6\u7C7B\u7684\u9759\u6001\u5B57\u6BB5\u3001\u8C03\u7528\u7C7B\u7684\u9759\u6001\u51FD\u6570\u7684\u4F8B\u5B50","children":[]},{"level":3,"title":"\u6392\u9664\u6389\u6307\u5B9A\u7684\u7C7B","slug":"\u6392\u9664\u6389\u6307\u5B9A\u7684\u7C7B","link":"#\u6392\u9664\u6389\u6307\u5B9A\u7684\u7C7B","children":[]},{"level":3,"title":"\u4E0D\u5339\u914D\u5B50\u7C7B","slug":"\u4E0D\u5339\u914D\u5B50\u7C7B","link":"#\u4E0D\u5339\u914D\u5B50\u7C7B","children":[]},{"level":3,"title":"\u4F7F\u7528 -v \u53C2\u6570\u6253\u5370\u66F4\u591A\u4FE1\u606F","slug":"\u4F7F\u7528-v-\u53C2\u6570\u6253\u5370\u66F4\u591A\u4FE1\u606F","link":"#\u4F7F\u7528-v-\u53C2\u6570\u6253\u5370\u66F4\u591A\u4FE1\u606F","children":[]}]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/watch.md","version":"4.3.3"}');export{l as data}; +const l=JSON.parse('{"key":"v-24fc49da","path":"/doc/watch.html","title":"watch","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u53C2\u6570\u8BF4\u660E","slug":"\u53C2\u6570\u8BF4\u660E","link":"#\u53C2\u6570\u8BF4\u660E","children":[]},{"level":2,"title":"\u4F7F\u7528\u53C2\u8003","slug":"\u4F7F\u7528\u53C2\u8003","link":"#\u4F7F\u7528\u53C2\u8003","children":[{"level":3,"title":"\u542F\u52A8 Demo","slug":"\u542F\u52A8-demo","link":"#\u542F\u52A8-demo","children":[]},{"level":3,"title":"\u89C2\u5BDF\u51FD\u6570\u8C03\u7528\u8FD4\u56DE\u65F6\u7684\u53C2\u6570\u3001this \u5BF9\u8C61\u548C\u8FD4\u56DE\u503C","slug":"\u89C2\u5BDF\u51FD\u6570\u8C03\u7528\u8FD4\u56DE\u65F6\u7684\u53C2\u6570\u3001this-\u5BF9\u8C61\u548C\u8FD4\u56DE\u503C","link":"#\u89C2\u5BDF\u51FD\u6570\u8C03\u7528\u8FD4\u56DE\u65F6\u7684\u53C2\u6570\u3001this-\u5BF9\u8C61\u548C\u8FD4\u56DE\u503C","children":[]},{"level":3,"title":"\u6307\u5B9A Class \u6700\u5927\u5339\u914D\u6570\u91CF","slug":"\u6307\u5B9A-class-\u6700\u5927\u5339\u914D\u6570\u91CF","link":"#\u6307\u5B9A-class-\u6700\u5927\u5339\u914D\u6570\u91CF","children":[]},{"level":3,"title":"\u6307\u5B9A ClassLoader \u589E\u5F3A","slug":"\u6307\u5B9A-classloader-\u589E\u5F3A","link":"#\u6307\u5B9A-classloader-\u589E\u5F3A","children":[]},{"level":3,"title":"\u89C2\u5BDF\u51FD\u6570\u8C03\u7528\u5165\u53E3\u7684\u53C2\u6570\u548C\u8FD4\u56DE\u503C","slug":"\u89C2\u5BDF\u51FD\u6570\u8C03\u7528\u5165\u53E3\u7684\u53C2\u6570\u548C\u8FD4\u56DE\u503C","link":"#\u89C2\u5BDF\u51FD\u6570\u8C03\u7528\u5165\u53E3\u7684\u53C2\u6570\u548C\u8FD4\u56DE\u503C","children":[]},{"level":3,"title":"\u540C\u65F6\u89C2\u5BDF\u51FD\u6570\u8C03\u7528\u524D\u548C\u51FD\u6570\u8FD4\u56DE\u540E","slug":"\u540C\u65F6\u89C2\u5BDF\u51FD\u6570\u8C03\u7528\u524D\u548C\u51FD\u6570\u8FD4\u56DE\u540E","link":"#\u540C\u65F6\u89C2\u5BDF\u51FD\u6570\u8C03\u7528\u524D\u548C\u51FD\u6570\u8FD4\u56DE\u540E","children":[]},{"level":3,"title":"\u8C03\u6574-x\u7684\u503C\uFF0C\u89C2\u5BDF\u5177\u4F53\u7684\u51FD\u6570\u53C2\u6570\u503C","slug":"\u8C03\u6574-x\u7684\u503C-\u89C2\u5BDF\u5177\u4F53\u7684\u51FD\u6570\u53C2\u6570\u503C","link":"#\u8C03\u6574-x\u7684\u503C-\u89C2\u5BDF\u5177\u4F53\u7684\u51FD\u6570\u53C2\u6570\u503C","children":[]},{"level":3,"title":"\u6761\u4EF6\u8868\u8FBE\u5F0F\u7684\u4F8B\u5B50","slug":"\u6761\u4EF6\u8868\u8FBE\u5F0F\u7684\u4F8B\u5B50","link":"#\u6761\u4EF6\u8868\u8FBE\u5F0F\u7684\u4F8B\u5B50","children":[]},{"level":3,"title":"\u89C2\u5BDF\u5F02\u5E38\u4FE1\u606F\u7684\u4F8B\u5B50","slug":"\u89C2\u5BDF\u5F02\u5E38\u4FE1\u606F\u7684\u4F8B\u5B50","link":"#\u89C2\u5BDF\u5F02\u5E38\u4FE1\u606F\u7684\u4F8B\u5B50","children":[]},{"level":3,"title":"\u6309\u7167\u8017\u65F6\u8FDB\u884C\u8FC7\u6EE4","slug":"\u6309\u7167\u8017\u65F6\u8FDB\u884C\u8FC7\u6EE4","link":"#\u6309\u7167\u8017\u65F6\u8FDB\u884C\u8FC7\u6EE4","children":[]},{"level":3,"title":"\u89C2\u5BDF\u5F53\u524D\u5BF9\u8C61\u4E2D\u7684\u5C5E\u6027","slug":"\u89C2\u5BDF\u5F53\u524D\u5BF9\u8C61\u4E2D\u7684\u5C5E\u6027","link":"#\u89C2\u5BDF\u5F53\u524D\u5BF9\u8C61\u4E2D\u7684\u5C5E\u6027","children":[]},{"level":3,"title":"\u83B7\u53D6\u7C7B\u7684\u9759\u6001\u5B57\u6BB5\u3001\u8C03\u7528\u7C7B\u7684\u9759\u6001\u51FD\u6570\u7684\u4F8B\u5B50","slug":"\u83B7\u53D6\u7C7B\u7684\u9759\u6001\u5B57\u6BB5\u3001\u8C03\u7528\u7C7B\u7684\u9759\u6001\u51FD\u6570\u7684\u4F8B\u5B50","link":"#\u83B7\u53D6\u7C7B\u7684\u9759\u6001\u5B57\u6BB5\u3001\u8C03\u7528\u7C7B\u7684\u9759\u6001\u51FD\u6570\u7684\u4F8B\u5B50","children":[]},{"level":3,"title":"\u6392\u9664\u6389\u6307\u5B9A\u7684\u7C7B","slug":"\u6392\u9664\u6389\u6307\u5B9A\u7684\u7C7B","link":"#\u6392\u9664\u6389\u6307\u5B9A\u7684\u7C7B","children":[]},{"level":3,"title":"\u4E0D\u5339\u914D\u5B50\u7C7B","slug":"\u4E0D\u5339\u914D\u5B50\u7C7B","link":"#\u4E0D\u5339\u914D\u5B50\u7C7B","children":[]},{"level":3,"title":"\u4F7F\u7528 -v \u53C2\u6570\u6253\u5370\u66F4\u591A\u4FE1\u606F","slug":"\u4F7F\u7528-v-\u53C2\u6570\u6253\u5370\u66F4\u591A\u4FE1\u606F","link":"#\u4F7F\u7528-v-\u53C2\u6570\u6253\u5370\u66F4\u591A\u4FE1\u606F","children":[]}]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/watch.md","version":"4.3.5"}');export{l as data}; diff --git a/assets/web-console.html.0614d78d.js b/assets/web-console.html.0614d78d.js new file mode 100644 index 000000000..7198b0f7c --- /dev/null +++ b/assets/web-console.html.0614d78d.js @@ -0,0 +1 @@ +import{_ as r}from"./web-console-local.156ba0ce.js";import{_ as c,o as h,c as l,a as e,b as o,w as i,e as t,d,r as a}from"./app.e2427bec.js";const u={},_=e("h1",{id:"web-console",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#web-console","aria-hidden":"true"},"#"),t(" Web Console")],-1),p=e("h2",{id:"connect-arthas-through-the-browser",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#connect-arthas-through-the-browser","aria-hidden":"true"},"#"),t(" Connect arthas through the browser")],-1),b=t("Arthas supports the Web Console. After attach success, the user can access: "),m={href:"http://127.0.0.1:8563/",target:"_blank",rel:"noopener noreferrer"},f=t("http://127.0.0.1:8563/"),g=t("."),k=e("p",null,"The user can fill in the IP and connect the remote arthas on other machines.",-1),w=e("p",null,[e("img",{src:r,alt:""})],-1),v=e("div",{class:"custom-container warning"},[e("p",{class:"custom-container-title"},"WARNING"),e("p",null,[t("By default, arthas only listens to "),e("code",null,"127.0.0.1"),t(", so if you want to connect from a remote, you can use the "),e("code",null,"--target-ip"),t(" parameter to specify the IP. See the help description for "),e("code",null,"-h"),t(" for more information.")])],-1),x=t("If you have suggestions for the Web Console, please leave a message here: "),C={href:"https://github.com/alibaba/arthas/issues/15",target:"_blank",rel:"noopener noreferrer"},y=t("https://github.com/alibaba/arthas/issues/15"),I=t("Copy and paste shortcut keys in Web Console: "),W={href:"https://github.com/alibaba/arthas/issues/1056",target:"_blank",rel:"noopener noreferrer"},L=t("https://github.com/alibaba/arthas/issues/1056"),N=d('

    TIP

    Since 3.5.4, you can right-click to copy and paste in the Web Console.

    scrollback URL parameters

    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

    ',4),R={href:"http://127.0.0.1:8563/?scrollback=3000",target:"_blank",rel:"noopener noreferrer"},B=t("http://127.0.0.1:8563/?scrollback=3000"),T=e("h2",{id:"connect-remote-arthas-through-arthas-tunnel-server",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#connect-remote-arthas-through-arthas-tunnel-server","aria-hidden":"true"},"#"),t(" Connect remote arthas through arthas tunnel server")],-1),A=t("Reference: "),P=t("Arthas Tunnel");function S(V,E){const s=a("ExternalLinkIcon"),n=a("RouterLink");return h(),l("div",null,[_,p,e("p",null,[b,e("a",m,[f,o(s)]),g]),k,w,v,e("p",null,[x,e("a",C,[y,o(s)])]),e("ul",null,[e("li",null,[I,e("a",W,[L,o(s)])])]),N,e("p",null,[e("a",R,[B,o(s)])]),T,e("p",null,[A,o(n,{to:"/en/doc/tunnel.html"},{default:i(()=>[P]),_:1})])])}const j=c(u,[["render",S],["__file","web-console.html.vue"]]);export{j as default}; diff --git a/assets/web-console.html.17603cf0.js b/assets/web-console.html.17603cf0.js deleted file mode 100644 index d392a9fcf..000000000 --- a/assets/web-console.html.17603cf0.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as r}from"./web-console-local.156ba0ce.js";import{_ as c,o as l,c as i,a as e,b as o,w as h,e as t,d as _,r as a}from"./app.524ecf5c.js";const d={},u=e("h1",{id:"web-console",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#web-console","aria-hidden":"true"},"#"),t(" Web Console")],-1),p={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=case-web-console",target:"_blank",rel:"noopener noreferrer"},b=e("code",null,"Web Console",-1),m=t("\u5728\u7EBF\u6559\u7A0B"),f=e("h2",{id:"\u901A\u8FC7\u6D4F\u89C8\u5668\u8FDE\u63A5-arthas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u901A\u8FC7\u6D4F\u89C8\u5668\u8FDE\u63A5-arthas","aria-hidden":"true"},"#"),t(" \u901A\u8FC7\u6D4F\u89C8\u5668\u8FDE\u63A5 arthas")],-1),k=t("Arthas \u76EE\u524D\u652F\u6301 Web Console\uFF0C\u7528\u6237\u5728 attach \u6210\u529F\u4E4B\u540E\uFF0C\u53EF\u4EE5\u76F4\u63A5\u8BBF\u95EE\uFF1A"),v={href:"http://127.0.0.1:8563/",target:"_blank",rel:"noopener noreferrer"},g=t("http://127.0.0.1:8563/"),x=t("\u3002"),C=e("p",null,"\u53EF\u4EE5\u586B\u5165 IP\uFF0C\u8FDC\u7A0B\u8FDE\u63A5\u5176\u5B83\u673A\u5668\u4E0A\u7684 arthas\u3002",-1),w=e("p",null,[e("img",{src:r,alt:""})],-1),L=e("div",{class:"custom-container warning"},[e("p",{class:"custom-container-title"},"\u6CE8\u610F"),e("p",null,[t("\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0Carthas \u53EA listen 127.0.0.1\uFF0C\u6240\u4EE5\u5982\u679C\u60F3\u4ECE\u8FDC\u7A0B\u8FDE\u63A5\uFF0C\u5219\u53EF\u4EE5\u4F7F\u7528 "),e("code",null,"--target-ip"),t("\u53C2\u6570\u6307\u5B9A listen \u7684 IP\uFF0C\u66F4\u591A\u53C2\u8003"),e("code",null,"-h"),t("\u7684\u5E2E\u52A9\u8BF4\u660E\u3002 \u6CE8\u610F\u4F1A\u6709\u5B89\u5168\u98CE\u9669\uFF0C\u8003\u8651\u4E0B\u9762\u7684 tunnel server \u7684\u65B9\u6848\u3002")])],-1),W=t("\u5728 Web Console \u590D\u5236\u7C98\u8D34\u5FEB\u6377\u952E\u53C2\u8003\uFF1A "),I={href:"https://github.com/alibaba/arthas/issues/1056",target:"_blank",rel:"noopener noreferrer"},N=t("https://github.com/alibaba/arthas/issues/1056"),R=_('

    \u63D0\u793A

    3.5.4 \u7248\u672C\u540E\uFF0C\u5728 Web Console \u53EF\u4EE5\u9F20\u6807\u53F3\u952E\u590D\u5236\u7C98\u8D34\u3002

    scrollback URL \u53C2\u6570

    \u63D0\u793A

    3.5.5 \u7248\u672C\u540E\u652F\u6301

    \u9ED8\u8BA4 Web Console \u652F\u6301\u5411\u4E0A\u56DE\u6EDA\u7684\u884C\u6570\u662F 1000\u3002\u53EF\u4EE5\u5728 URL \u91CC\u7528scrollback\u6307\u5B9A\u3002\u6BD4\u5982

    ',4),V={href:"http://127.0.0.1:8563/?scrollback=3000",target:"_blank",rel:"noopener noreferrer"},B=t("http://127.0.0.1:8563/?scrollback=3000"),E=e("h2",{id:"\u4F7F\u7528-arthas-tunnel-server-\u8FDE\u63A5\u8FDC\u7A0B-arthas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u4F7F\u7528-arthas-tunnel-server-\u8FDE\u63A5\u8FDC\u7A0B-arthas","aria-hidden":"true"},"#"),t(" \u4F7F\u7528 arthas tunnel server \u8FDE\u63A5\u8FDC\u7A0B arthas")],-1),A=t("\u53C2\u8003\uFF1A"),P=t("Arthas Tunnel");function T(U,y){const s=a("ExternalLinkIcon"),n=a("RouterLink");return l(),i("div",null,[u,e("p",null,[e("a",p,[b,m,o(s)])]),f,e("p",null,[k,e("a",v,[g,o(s)]),x]),C,w,L,e("ul",null,[e("li",null,[W,e("a",I,[N,o(s)])])]),R,e("p",null,[e("a",V,[B,o(s)])]),E,e("p",null,[A,o(n,{to:"/doc/tunnel.html"},{default:h(()=>[P]),_:1})])])}const q=c(d,[["render",T],["__file","web-console.html.vue"]]);export{q as default}; diff --git a/assets/web-console.html.db278269.js b/assets/web-console.html.6349f4a1.js similarity index 85% rename from assets/web-console.html.db278269.js rename to assets/web-console.html.6349f4a1.js index f9198c815..3eb78db22 100644 --- a/assets/web-console.html.db278269.js +++ b/assets/web-console.html.6349f4a1.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-35756382","path":"/en/doc/web-console.html","title":"Web Console","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Connect arthas through the browser","slug":"connect-arthas-through-the-browser","link":"#connect-arthas-through-the-browser","children":[]},{"level":2,"title":"scrollback URL parameters","slug":"scrollback-url-parameters","link":"#scrollback-url-parameters","children":[]},{"level":2,"title":"Connect remote arthas through arthas tunnel server","slug":"connect-remote-arthas-through-arthas-tunnel-server","link":"#connect-remote-arthas-through-arthas-tunnel-server","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/web-console.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-35756382","path":"/en/doc/web-console.html","title":"Web Console","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Connect arthas through the browser","slug":"connect-arthas-through-the-browser","link":"#connect-arthas-through-the-browser","children":[]},{"level":2,"title":"scrollback URL parameters","slug":"scrollback-url-parameters","link":"#scrollback-url-parameters","children":[]},{"level":2,"title":"Connect remote arthas through arthas tunnel server","slug":"connect-remote-arthas-through-arthas-tunnel-server","link":"#connect-remote-arthas-through-arthas-tunnel-server","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"en/doc/web-console.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/web-console.html.553210f1.js b/assets/web-console.html.7d232bc6.js similarity index 88% rename from assets/web-console.html.553210f1.js rename to assets/web-console.html.7d232bc6.js index 8e2af7f15..2c8f3de54 100644 --- a/assets/web-console.html.553210f1.js +++ b/assets/web-console.html.7d232bc6.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-a5f6e7aa","path":"/doc/web-console.html","title":"Web Console","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u901A\u8FC7\u6D4F\u89C8\u5668\u8FDE\u63A5 arthas","slug":"\u901A\u8FC7\u6D4F\u89C8\u5668\u8FDE\u63A5-arthas","link":"#\u901A\u8FC7\u6D4F\u89C8\u5668\u8FDE\u63A5-arthas","children":[]},{"level":2,"title":"scrollback URL \u53C2\u6570","slug":"scrollback-url-\u53C2\u6570","link":"#scrollback-url-\u53C2\u6570","children":[]},{"level":2,"title":"\u4F7F\u7528 arthas tunnel server \u8FDE\u63A5\u8FDC\u7A0B arthas","slug":"\u4F7F\u7528-arthas-tunnel-server-\u8FDE\u63A5\u8FDC\u7A0B-arthas","link":"#\u4F7F\u7528-arthas-tunnel-server-\u8FDE\u63A5\u8FDC\u7A0B-arthas","children":[]}],"git":{"updatedTime":1786516912000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/web-console.md","version":"4.3.3"}');export{e as data}; +const e=JSON.parse('{"key":"v-a5f6e7aa","path":"/doc/web-console.html","title":"Web Console","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u901A\u8FC7\u6D4F\u89C8\u5668\u8FDE\u63A5 arthas","slug":"\u901A\u8FC7\u6D4F\u89C8\u5668\u8FDE\u63A5-arthas","link":"#\u901A\u8FC7\u6D4F\u89C8\u5668\u8FDE\u63A5-arthas","children":[]},{"level":2,"title":"scrollback URL \u53C2\u6570","slug":"scrollback-url-\u53C2\u6570","link":"#scrollback-url-\u53C2\u6570","children":[]},{"level":2,"title":"\u4F7F\u7528 arthas tunnel server \u8FDE\u63A5\u8FDC\u7A0B arthas","slug":"\u4F7F\u7528-arthas-tunnel-server-\u8FDE\u63A5\u8FDC\u7A0B-arthas","link":"#\u4F7F\u7528-arthas-tunnel-server-\u8FDE\u63A5\u8FDC\u7A0B-arthas","children":[]}],"git":{"updatedTime":1788152951000,"contributors":[{"name":"hengyunabc","email":"hengyunabc@gmail.com","commits":1}]},"filePathRelative":"doc/web-console.md","version":"4.3.5"}');export{e as data}; diff --git a/assets/web-console.html.8abc2cdc.js b/assets/web-console.html.8abc2cdc.js deleted file mode 100644 index dbcc71964..000000000 --- a/assets/web-console.html.8abc2cdc.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as r}from"./web-console-local.156ba0ce.js";import{_ as c,o as h,c as l,a as e,b as o,w as i,e as t,d,r as a}from"./app.524ecf5c.js";const u={},_=e("h1",{id:"web-console",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#web-console","aria-hidden":"true"},"#"),t(" Web Console")],-1),p={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=case-web-console",target:"_blank",rel:"noopener noreferrer"},b=e("code",null,"Web Console",-1),m=t(" online tutorial"),f=e("h2",{id:"connect-arthas-through-the-browser",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#connect-arthas-through-the-browser","aria-hidden":"true"},"#"),t(" Connect arthas through the browser")],-1),g=t("Arthas supports the Web Console. After attach success, the user can access: "),k={href:"http://127.0.0.1:8563/",target:"_blank",rel:"noopener noreferrer"},w=t("http://127.0.0.1:8563/"),v=t("."),C=e("p",null,"The user can fill in the IP and connect the remote arthas on other machines.",-1),x=e("p",null,[e("img",{src:r,alt:""})],-1),y=e("div",{class:"custom-container warning"},[e("p",{class:"custom-container-title"},"WARNING"),e("p",null,[t("By default, arthas only listens to "),e("code",null,"127.0.0.1"),t(", so if you want to connect from a remote, you can use the "),e("code",null,"--target-ip"),t(" parameter to specify the IP. See the help description for "),e("code",null,"-h"),t(" for more information.")])],-1),I=t("If you have suggestions for the Web Console, please leave a message here: "),W={href:"https://github.com/alibaba/arthas/issues/15",target:"_blank",rel:"noopener noreferrer"},L=t("https://github.com/alibaba/arthas/issues/15"),N=t("Copy and paste shortcut keys in Web Console: "),R={href:"https://github.com/alibaba/arthas/issues/1056",target:"_blank",rel:"noopener noreferrer"},B=t("https://github.com/alibaba/arthas/issues/1056"),T=d('

    TIP

    Since 3.5.4, you can right-click to copy and paste in the Web Console.

    scrollback URL parameters

    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

    ',4),A={href:"http://127.0.0.1:8563/?scrollback=3000",target:"_blank",rel:"noopener noreferrer"},P=t("http://127.0.0.1:8563/?scrollback=3000"),S=e("h2",{id:"connect-remote-arthas-through-arthas-tunnel-server",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#connect-remote-arthas-through-arthas-tunnel-server","aria-hidden":"true"},"#"),t(" Connect remote arthas through arthas tunnel server")],-1),V=t("Reference: "),E=t("Arthas Tunnel");function U(G,j){const s=a("ExternalLinkIcon"),n=a("RouterLink");return h(),l("div",null,[_,e("p",null,[e("a",p,[b,m,o(s)])]),f,e("p",null,[g,e("a",k,[w,o(s)]),v]),C,x,y,e("p",null,[I,e("a",W,[L,o(s)])]),e("ul",null,[e("li",null,[N,e("a",R,[B,o(s)])])]),T,e("p",null,[e("a",A,[P,o(s)])]),S,e("p",null,[V,o(n,{to:"/en/doc/tunnel.html"},{default:i(()=>[E]),_:1})])])}const D=c(u,[["render",U],["__file","web-console.html.vue"]]);export{D as default}; diff --git a/assets/web-console.html.e58ea91b.js b/assets/web-console.html.e58ea91b.js new file mode 100644 index 000000000..60063e079 --- /dev/null +++ b/assets/web-console.html.e58ea91b.js @@ -0,0 +1 @@ +import{_ as r}from"./web-console-local.156ba0ce.js";import{_ as c,o as l,c as i,a as e,b as s,w as h,e as t,d as _,r as a}from"./app.e2427bec.js";const d={},u=e("h1",{id:"web-console",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#web-console","aria-hidden":"true"},"#"),t(" Web Console")],-1),p=e("h2",{id:"\u901A\u8FC7\u6D4F\u89C8\u5668\u8FDE\u63A5-arthas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u901A\u8FC7\u6D4F\u89C8\u5668\u8FDE\u63A5-arthas","aria-hidden":"true"},"#"),t(" \u901A\u8FC7\u6D4F\u89C8\u5668\u8FDE\u63A5 arthas")],-1),b=t("Arthas \u76EE\u524D\u652F\u6301 Web Console\uFF0C\u7528\u6237\u5728 attach \u6210\u529F\u4E4B\u540E\uFF0C\u53EF\u4EE5\u76F4\u63A5\u8BBF\u95EE\uFF1A"),m={href:"http://127.0.0.1:8563/",target:"_blank",rel:"noopener noreferrer"},f=t("http://127.0.0.1:8563/"),k=t("\u3002"),v=e("p",null,"\u53EF\u4EE5\u586B\u5165 IP\uFF0C\u8FDC\u7A0B\u8FDE\u63A5\u5176\u5B83\u673A\u5668\u4E0A\u7684 arthas\u3002",-1),x=e("p",null,[e("img",{src:r,alt:""})],-1),g=e("div",{class:"custom-container warning"},[e("p",{class:"custom-container-title"},"\u6CE8\u610F"),e("p",null,[t("\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0Carthas \u53EA listen 127.0.0.1\uFF0C\u6240\u4EE5\u5982\u679C\u60F3\u4ECE\u8FDC\u7A0B\u8FDE\u63A5\uFF0C\u5219\u53EF\u4EE5\u4F7F\u7528 "),e("code",null,"--target-ip"),t("\u53C2\u6570\u6307\u5B9A listen \u7684 IP\uFF0C\u66F4\u591A\u53C2\u8003"),e("code",null,"-h"),t("\u7684\u5E2E\u52A9\u8BF4\u660E\u3002 \u6CE8\u610F\u4F1A\u6709\u5B89\u5168\u98CE\u9669\uFF0C\u8003\u8651\u4E0B\u9762\u7684 tunnel server \u7684\u65B9\u6848\u3002")])],-1),C=t("\u5728 Web Console \u590D\u5236\u7C98\u8D34\u5FEB\u6377\u952E\u53C2\u8003\uFF1A "),w={href:"https://github.com/alibaba/arthas/issues/1056",target:"_blank",rel:"noopener noreferrer"},L=t("https://github.com/alibaba/arthas/issues/1056"),W=_('

    \u63D0\u793A

    3.5.4 \u7248\u672C\u540E\uFF0C\u5728 Web Console \u53EF\u4EE5\u9F20\u6807\u53F3\u952E\u590D\u5236\u7C98\u8D34\u3002

    scrollback URL \u53C2\u6570

    \u63D0\u793A

    3.5.5 \u7248\u672C\u540E\u652F\u6301

    \u9ED8\u8BA4 Web Console \u652F\u6301\u5411\u4E0A\u56DE\u6EDA\u7684\u884C\u6570\u662F 1000\u3002\u53EF\u4EE5\u5728 URL \u91CC\u7528scrollback\u6307\u5B9A\u3002\u6BD4\u5982

    ',4),I={href:"http://127.0.0.1:8563/?scrollback=3000",target:"_blank",rel:"noopener noreferrer"},N=t("http://127.0.0.1:8563/?scrollback=3000"),R=e("h2",{id:"\u4F7F\u7528-arthas-tunnel-server-\u8FDE\u63A5\u8FDC\u7A0B-arthas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u4F7F\u7528-arthas-tunnel-server-\u8FDE\u63A5\u8FDC\u7A0B-arthas","aria-hidden":"true"},"#"),t(" \u4F7F\u7528 arthas tunnel server \u8FDE\u63A5\u8FDC\u7A0B arthas")],-1),V=t("\u53C2\u8003\uFF1A"),B=t("Arthas Tunnel");function E(A,P){const o=a("ExternalLinkIcon"),n=a("RouterLink");return l(),i("div",null,[u,p,e("p",null,[b,e("a",m,[f,s(o)]),k]),v,x,g,e("ul",null,[e("li",null,[C,e("a",w,[L,s(o)])])]),W,e("p",null,[e("a",I,[N,s(o)])]),R,e("p",null,[V,s(n,{to:"/doc/tunnel.html"},{default:h(()=>[B]),_:1})])])}const S=c(d,[["render",E],["__file","web-console.html.vue"]]);export{S as default}; diff --git a/doc/advanced-use.html b/doc/advanced-use.html index d061cbd34..427522c07 100644 --- a/doc/advanced-use.html +++ b/doc/advanced-use.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); 其他特性 | arthas - + -
    目录

    其他特性

    Arthas 后台异步任务

    当需要排查一个问题,但是这个问题的出现时间不能确定,那我们就可以把检测命令挂在后台运行,并将保存到输出日志。

    执行结果存日志

    所有执行记录的结果完整保存在日志文件中,便于后续进行分析。

    Docker

    Arthas 在 docker 容器中使用配置参考。

    Web Console

    通过 websocket 连接 Arthas。

    Arthas Tunnel

    通过 Arthas Tunnel Server/Client 来远程管理/连接多个服务器下的Java服务。

    ognl 表达式用法

    IDEA Plugin

    IntelliJ IDEA 编译器中更加快捷构建 arhtas 命令。

    Arthas Properties

    Arthas 支持配置项参考。

    以 java agent 方式启动

    Arthas Spring Boot Starter

    随应用一起启动。

    加载外部命令

    在 Arthas 启动时加载外部 command jar,把团队内部诊断动作扩展为新的 Arthas 命令。

    HTTP API

    Http API 提供结构化的数据,支持更复杂的交互功能,方便自定义界面集成 arthas。

    批处理功能

    方便自定义脚本一次性批量运行多个命令,可结合 --select 参数可以指定进程名字一起使用。

    as.sh 和 arthas-boot 技巧

    • 通过select功能选择 attach 的进程。

    正常情况下,每次执行as.sh/arthas-boot.jar需要选择,或者指定 PID。这样会比较麻烦,因为每次启动应用,它的 PID 会变化。

    比如,已经启动了math-game.jar,使用jps命令查看:

    $ jps
    +    
    目录

    其他特性

    Arthas 后台异步任务

    当需要排查一个问题,但是这个问题的出现时间不能确定,那我们就可以把检测命令挂在后台运行,并将保存到输出日志。

    执行结果存日志

    所有执行记录的结果完整保存在日志文件中,便于后续进行分析。

    Docker

    Arthas 在 docker 容器中使用配置参考。

    Web Console

    通过 websocket 连接 Arthas。

    Arthas Tunnel

    通过 Arthas Tunnel Server/Client 来远程管理/连接多个服务器下的Java服务。

    ognl 表达式用法

    IDEA Plugin

    IntelliJ IDEA 编译器中更加快捷构建 arhtas 命令。

    Arthas Properties

    Arthas 支持配置项参考。

    以 java agent 方式启动

    Arthas Spring Boot Starter

    随应用一起启动。

    加载外部命令

    在 Arthas 启动时加载外部 command jar,把团队内部诊断动作扩展为新的 Arthas 命令。

    HTTP API

    Http API 提供结构化的数据,支持更复杂的交互功能,方便自定义界面集成 arthas。

    批处理功能

    方便自定义脚本一次性批量运行多个命令,可结合 --select 参数可以指定进程名字一起使用。

    as.sh 和 arthas-boot 技巧

    • 通过select功能选择 attach 的进程。

    正常情况下,每次执行as.sh/arthas-boot.jar需要选择,或者指定 PID。这样会比较麻烦,因为每次启动应用,它的 PID 会变化。

    比如,已经启动了math-game.jar,使用jps命令查看:

    $ jps
     58883 math-game.jar
     58884 Jps
     

    通过select参数可以指定进程名字,非常方便。

    $ ./as.sh --select math-game
    @@ -61,10 +61,9 @@ Escape character is '^]'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在新窗口打开

    - +

    用户数据回报

    在3.1.4版本后,增加了用户数据回报功能,方便统一做安全或者历史数据统计。

    在启动时,指定stat-url,就会回报执行的每一行命令,比如: ./as.sh --stat-url 'http://192.168.10.11:8080/api/stat'

    在 tunnel server 里有一个示例的回报代码,用户可以自己在服务器上实现。

    StatController.java在新窗口打开

    + diff --git a/doc/advice-class.html b/doc/advice-class.html index 6f61b4fa1..88185ca02 100644 --- a/doc/advice-class.html +++ b/doc/advice-class.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); 表达式核心变量 | arthas - + -

    表达式核心变量

    无论是匹配表达式也好、观察表达式也罢,他们核心判断变量都是围绕着一个 Arthas 中的通用通知对象 Advice 进行。

    它的简略代码结构如下

    public class Advice {
    +    

    表达式核心变量

    无论是匹配表达式也好、观察表达式也罢,他们核心判断变量都是围绕着一个 Arthas 中的通用通知对象 Advice 进行。

    它的简略代码结构如下

    public class Advice {
     
         private final ClassLoader loader;
         private final Class<?> clazz;
    @@ -50,7 +50,7 @@
     
         // 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 脚本语法或者引入了不在表格中的变量,则退出命令的执行;用户可以根据当前的异常信息修正条件表达式或观察表达式

    - +

    这里列一个表格来说明不同变量的含义

    变量名变量解释
    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 脚本语法或者引入了不在表格中的变量,则退出命令的执行;用户可以根据当前的异常信息修正条件表达式或观察表达式

    + diff --git a/doc/agent.html b/doc/agent.html index 5a6108830..963eb5aeb 100644 --- a/doc/agent.html +++ b/doc/agent.html @@ -31,12 +31,12 @@ s.parentNode.insertBefore(hm, s); })(); 以 Java Agent 的方式启动 | arthas - + -

    以 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
    +    

    以 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

    Java Agent 机制参考: https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html

    - + diff --git a/doc/ai.html b/doc/ai.html index 7f53011c6..e511df17a 100644 --- a/doc/ai.html +++ b/doc/ai.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); AI 相关 | arthas - + -
    目录

    AI 相关

    Arthas 可以通过 MCP Server 接入 AI 助手,让 AI 客户端以工具调用的方式执行 Arthas 诊断命令,适合结合 Java 应用排障、运行时分析和自动化诊断场景使用。

    MCP Server

    • Arthas MCP Server:了解如何启用 MCP 服务、配置 AI 客户端、使用 Streamable HTTP 传输模式以及查看支持的诊断工具。
    - +
    目录

    AI 相关

    Arthas 可以通过 MCP Server 接入 AI 助手,让 AI 客户端以工具调用的方式执行 Arthas 诊断命令,适合结合 Java 应用排障、运行时分析和自动化诊断场景使用。

    MCP Server

    • Arthas MCP Server:了解如何启用 MCP 服务、配置 AI 客户端、使用 Streamable HTTP 传输模式以及查看支持的诊断工具。
    + diff --git a/doc/arthas-properties.html b/doc/arthas-properties.html index 7f3520a8a..dc2b2e025 100644 --- a/doc/arthas-properties.html +++ b/doc/arthas-properties.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); Arthas Properties | arthas - + -
    目录

    Arthas Properties

    arthas.properties文件在 arthas 的目录下。

    • 如果是自动下载的 arthas,则目录在~/.arthas/lib/3.x.x/arthas/下面
    • 如果是下载的完整包,在 arthas 解压目录下

    支持的配置项

    注意

    注意配置必须是驼峰的,和 spring boot 的-风格不一样。spring boot 应用才同时支持驼峰 和 -风格的配置。

    #arthas.config.overrideAll=true
    +    
    目录

    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
    @@ -51,6 +51,6 @@ arthas.sessionTimeout=10800
     
    • 如果配置 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命令。

    加载外部命令

    可以通过下面配置在 Arthas 启动时加载外部 command jar:

    arthas.commandLocations=/opt/arthas/ext-command.jar,/opt/arthas/ext-commands
     
    • 支持单个 jar 路径,或目录路径,多个值用英文逗号分隔。
    • 目录只会扫描当前目录下的 *.jar,不会递归子目录。
    • 如果 ${arthas.home}/commands 目录存在,Arthas 启动时也会自动尝试从该目录加载 *.jar。显式配置的 arthas.commandLocations 会先加载,再加载默认目录。
    • 外部 jar 需要通过 META-INF/services/com.taobao.arthas.core.shell.command.CommandResolver 暴露 CommandResolver 实现。
    • Arthas 会优先保留内置命令;如果外部命令和内置命令重名,会跳过外部命令并记录日志。

    也可以在命令行配置: --command-locations '/opt/arthas/ext-command.jar,/opt/arthas/ext-commands' 。

    完整的外部命令开发和加载示例请参考:加载外部命令。

    配置的优先级

    配置的优先级是:命令行参数 > 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/doc/arthas3.html b/doc/arthas3.html index df2858cd8..a6b7cd093 100644 --- a/doc/arthas3.html +++ b/doc/arthas3.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); arthas - + -
    目录

    Arthas3.0 的新特性

    在线诊断功能

    Arthas3.0 中最重要的特性,不需要登录机器就可以对应用进行诊断,体验和本地诊断完全一致

    使用步骤

    TODO

    动图演示

    TODO

    管道支持

    Arthas 3.0 开始支持管道, 率先提供了grep,wc,plaintext的支持。

    去 groovy 依赖

    groovy 表达式在 arthas2.0 中大量使用,例如 watch 表达式

    watch com.alibaba.sample.petstore.web.store.module.screen.ItemList add "params + ' ' + returnObj" params.size()==2
    +    
    目录

    Arthas3.0 的新特性

    在线诊断功能

    Arthas3.0 中最重要的特性,不需要登录机器就可以对应用进行诊断,体验和本地诊断完全一致

    使用步骤

    TODO

    动图演示

    TODO

    管道支持

    Arthas 3.0 开始支持管道, 率先提供了grep,wc,plaintext的支持。

    去 groovy 依赖

    groovy 表达式在 arthas2.0 中大量使用,例如 watch 表达式

    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。

    为了避免这个问题,Arthas 3.0 中使用了 ognl 这个更加轻量的表达式求值库来代替 groovy,彻底解决了 groovy 引起的 FGC 风险。但由于这个替换,导致原来使用 groovy 脚本编写的自定义脚本失效。这个问题留待后续解决。

    在 3.0 中,watch 命令的表达式部分的书写有了一些改变,详见这里在新窗口打开

    提升 rt 统计精度

    Arthas 2.0 中,统计 rt 都是以ms为单位,对于某些比较小的方法调用,耗时在毫秒以下的都会被认为是 0ms,造成 trace 总时间和各方法的时间相加不一致等问题(虽然这里面确实会有误差,主要 Arthas 自身的开销)。Arthas 3.0 中所有 rt 的单位统一改为使用ns来统计,精准捕获你的方法耗时,让 0ms 这样无意义的统计数据不再出现!

    $ tt -l
      INDEX     TIMESTAMP               COST(ms)    IS-RET    IS-EXP   OBJECT            CLASS                                METHOD
     ------------------------------------------------------------------------------------------------------------------------------------------------------------
    @@ -84,6 +84,6 @@ ID                 NAME                                                     GROU
     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 命令现在会自动显示

    ![Untitled2](TODO /Untitled2.gif)

    - + diff --git a/doc/async.html b/doc/async.html index a5ce15af4..c8e046f9d 100644 --- a/doc/async.html +++ b/doc/async.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); Arthas 后台异步任务 | arthas - + -
    目录

    Arthas 后台异步任务

    后台异步任务在线教程在新窗口打开

    arthas 中的后台异步任务,使用了仿 linux 系统任务相关的命令。linux 任务相关介绍在新窗口打开。

    1. 使用&在后台执行任务

    比如希望执行后台执行 trace 命令,那么调用下面命令

    trace Test t &
    +    
    目录

    Arthas 后台异步任务

    arthas 中的后台异步任务,使用了仿 linux 系统任务相关的命令。linux 任务相关介绍在新窗口打开。

    1. 使用&在后台执行任务

    比如希望执行后台执行 trace 命令,那么调用下面命令

    trace Test t &
     

    这时命令在后台执行,可以在 console 中继续执行其他命令。

    2. 通过 jobs 查看任务

    如果希望查看当前有哪些 arthas 任务在执行,可以执行 jobs 命令,执行结果如下

    $ jobs
     [10]*
            Stopped           watch com.taobao.container.Test test "params[0].{? #this.name == null }" -x 2
    @@ -49,6 +49,6 @@
     job id  : 2
     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 中异步写结果。

    6. 停止命令

    异步执行的命令,如果希望停止,可执行kill <job-id>

    7. 其他

    • 最多同时支持 8 个命令使用重定向将结果写日志
    • 请勿同时开启过多的后台异步命令,以免对目标 JVM 性能造成影响
    • 如果不想停止 arthas,继续执行后台任务,可以执行 quit 退出 arthas 控制台(stop 会停止 arthas 服务)
    - + diff --git a/doc/auth.html b/doc/auth.html index b00fb0f22..e46f593e0 100644 --- a/doc/auth.html +++ b/doc/auth.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); auth | arthas - + -
    目录

    auth

    提示

    验证当前会话

    配置用户名和密码

    在 attach 时,可以在命令行指定密码。比如:

    java -jar arthas-boot.jar --password ppp
    +    
    目录

    auth

    提示

    验证当前会话

    配置用户名和密码

    在 attach 时,可以在命令行指定密码。比如:

    java -jar arthas-boot.jar --password ppp
     
    • 可以通过 --username 选项来指定用户,默认值是arthas。

    • 也可以在 arthas.properties 里中配置 username/password。命令行的优先级大于配置文件。

    • 如果只配置username,没有配置password,则会生成随机密码,打印在~/logs/arthas/arthas.log中

      Using generated security password: 0vUBJpRIppkKuZ7dYzYqOKtranj4unGh
       

    本地连接不鉴权

    默认情况下,在arthas.properties文件里有配置:

    arthas.localConnectionNonAuth=true
     

    当配置密码时,使用本地连接,也不需要鉴权。默认配置值是 true,方便本地连接使用。只有远程连接时,才需要鉴权。

    在 telnet console 里鉴权

    连接到 arthas 后,直接执行命令会提示需要鉴权:

    [arthas@37430]$ help
    @@ -48,6 +48,6 @@ Authentication result: true
     

    URL 参数传递方式

    为了方便各种特殊情况,支持了以 parameters 方式传递 username 和 password。比如:

    curl 'http://localhost:8563/api?password=admin' \
       --data-raw '{"action":"exec","command":"version"}'
     
    - + diff --git a/doc/base64.html b/doc/base64.html index e56851bb2..cc8975bc7 100644 --- a/doc/base64.html +++ b/doc/base64.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); base64 | arthas - + -
    目录

    base64

    提示

    base64 编码转换,和 linux 里的 base64 命令类似。

    对文件进行 base64 编码

    [arthas@70070]$ echo 'abc' > /tmp/test.txt
    +    
    -    
    +    
       
     
    diff --git a/doc/batch-support.html b/doc/batch-support.html
    index d09f38216..3b67a442a 100644
    --- a/doc/batch-support.html
    +++ b/doc/batch-support.html
    @@ -31,11 +31,11 @@
           s.parentNode.insertBefore(hm, s);
         })();
         批处理功能 | arthas
    -    
    +    
         
       
       
    -    
    目录

    批处理功能

    提示

    通过批处理功能,arthas 支持一次性批量运行多个命令,并取得命令执行的结果。可结合 --select 参数可以指定进程名字一起使用。

    使用方法

    第一步:创建你的批处理脚本

    这里我们新建了一个test.as脚本,为了规范,我们采用了.as 后缀名,但事实上任意的文本文件都 ok。

    提示

    • 目前需要每个命令占一行
    • dashboard 务必指定执行次数 (-n),否则会导致批处理脚本无法终止
    • watch/tt/trace/monitor/stack 等命令务必指定执行次数 (-n),否则会导致批处理脚本无法终止
    • 可以使用异步后台任务,如 watch c.t.X test returnObj > &,让命令一直在后台运行,通过日志获取结果,获取更多异步任务的信息
    ➜  arthas git:(develop) cat /var/tmp/test.as
    +    
    目录

    批处理功能

    提示

    通过批处理功能,arthas 支持一次性批量运行多个命令,并取得命令执行的结果。可结合 --select 参数可以指定进程名字一起使用。

    使用方法

    第一步:创建你的批处理脚本

    这里我们新建了一个test.as脚本,为了规范,我们采用了.as 后缀名,但事实上任意的文本文件都 ok。

    提示

    • 目前需要每个命令占一行
    • dashboard 务必指定执行次数 (-n),否则会导致批处理脚本无法终止
    • watch/tt/trace/monitor/stack 等命令务必指定执行次数 (-n),否则会导致批处理脚本无法终止
    • 可以使用异步后台任务,如 watch c.t.X test returnObj > &,让命令一直在后台运行,通过日志获取结果,获取更多异步任务的信息
    ➜  arthas git:(develop) cat /var/tmp/test.as
     help
     dashboard -n 1
     session
    @@ -45,6 +45,6 @@ sc -d org.apache.commons.lang.StringUtils
     

    也可以通过 -c 来指定指行的命令,比如

    ./as.sh -c 'sysprop; thread' <pid> > test.out # pid 可以通过 jps 命令查看
     

    第三步:查看运行结果

    cat test.out
     
    - + diff --git a/doc/cat.html b/doc/cat.html index 355d6788a..da53d81a2 100644 --- a/doc/cat.html +++ b/doc/cat.html @@ -31,12 +31,12 @@ s.parentNode.insertBefore(hm, s); })(); cat | arthas - + -
    目录

    cat

    cat在线教程在新窗口打开

    提示

    打印文件内容,和 linux 里的 cat 命令类似。

    使用参考

    $ cat /tmp/a.txt
    +    
    -    
    +    
       
     
    diff --git a/doc/classloader-metaspace.html b/doc/classloader-metaspace.html
    index 189817b67..fc7bcfcd8 100644
    --- a/doc/classloader-metaspace.html
    +++ b/doc/classloader-metaspace.html
    @@ -31,11 +31,11 @@
           s.parentNode.insertBefore(hm, s);
         })();
         classloader-metaspace | arthas
    -    
    +    
         
       
       
    -    
    目录

    classloader-metaspace

    提示

    按 ClassLoader 实例统计 metaspace / class metadata 相关内存。

    classloader-metaspace 使用 JFR 的 jdk.ClassLoaderStatistics 事件采集每个 ClassLoaderData 的 metaspace 统计信息,并把这些统计信息映射回 Arthas 可识别的 ClassLoader hash、类型和显示名。

    注意:这个命令统计的是 metaspace / class metadata 相关内存,不是从 ClassLoader 可达的所有 Java heap 对象的 retained size。

    classloader-metaspace 依赖 JFR。JDK 不支持 JFR 时不会注册该命令。

    参数说明

    参数名称参数说明
    [c:]ClassLoader 的 hashcode,格式和 classloader -c 一致
    [classLoaderClass:]按 ClassLoader 完整类名过滤
    [duration:]JFR 采样时长,默认 2500ms,支持 ms、s、m,裸数字按毫秒处理
    [period:]jdk.ClassLoaderStatistics 采样周期,默认 500ms,支持 ms、s、m
    [limit:]只输出按 chunkSize 降序排序后的前 N 行
    [verbose:]输出完整诊断列,包括 classLoaderData、hiddenBlockSize 和 type;也可使用 -v

    输出字段

    默认终端表格优先展示日常排查需要的核心列。使用 --verbose 时会输出完整诊断列,type 和 name 这类长文本列放在右侧;如果终端宽度不足,长文本列可能被截断或隐藏。

    字段说明
    hashArthas ClassLoader hash
    classesJFR classCount,已加载类数量
    chunkSize该 ClassLoaderData 已分配的 metaspace chunk 总大小
    blockSize已使用的 metaspace block 总大小
    name显示名,优先使用 JFR name,失败时回退到 toString()

    --verbose 额外输出:

    字段说明
    classLoaderDataHotSpot 内部 ClassLoaderData 指针
    hiddenBlockSizehidden class 使用的 metaspace block 总大小;在 JDK 11 上兼容读取 JFR 的 anonymousBlockSize
    typeClassLoader 类名

    使用参考

    查看所有 ClassLoader metaspace 统计

    $ classloader-metaspace
    +    
    目录

    classloader-metaspace

    提示

    按 ClassLoader 实例统计 metaspace / class metadata 相关内存。

    classloader-metaspace 使用 JFR 的 jdk.ClassLoaderStatistics 事件采集每个 ClassLoaderData 的 metaspace 统计信息,并把这些统计信息映射回 Arthas 可识别的 ClassLoader hash、类型和显示名。

    注意:这个命令统计的是 metaspace / class metadata 相关内存,不是从 ClassLoader 可达的所有 Java heap 对象的 retained size。

    classloader-metaspace 依赖 JFR。JDK 不支持 JFR 时不会注册该命令。

    参数说明

    参数名称参数说明
    [c:]ClassLoader 的 hashcode,格式和 classloader -c 一致
    [classLoaderClass:]按 ClassLoader 完整类名过滤
    [duration:]JFR 采样时长,默认 2500ms,支持 ms、s、m,裸数字按毫秒处理
    [period:]jdk.ClassLoaderStatistics 采样周期,默认 500ms,支持 ms、s、m
    [limit:]只输出按 chunkSize 降序排序后的前 N 行
    [verbose:]输出完整诊断列,包括 classLoaderData、hiddenBlockSize 和 type;也可使用 -v

    输出字段

    默认终端表格优先展示日常排查需要的核心列。使用 --verbose 时会输出完整诊断列,type 和 name 这类长文本列放在右侧;如果终端宽度不足,长文本列可能被截断或隐藏。

    字段说明
    hashArthas ClassLoader hash
    classesJFR classCount,已加载类数量
    chunkSize该 ClassLoaderData 已分配的 metaspace chunk 总大小
    blockSize已使用的 metaspace block 总大小
    name显示名,优先使用 JFR name,失败时回退到 toString()

    --verbose 额外输出:

    字段说明
    classLoaderDataHotSpot 内部 ClassLoaderData 指针
    hiddenBlockSizehidden class 使用的 metaspace block 总大小;在 JDK 11 上兼容读取 JFR 的 anonymousBlockSize
    typeClassLoader 类名

    使用参考

    查看所有 ClassLoader metaspace 统计

    $ classloader-metaspace
      hash      classes  chunkSize  blockSize  name
      68b31f0a  2115     1048576    823296     com.taobao.arthas.agent.ArthasClassloader@68b31f0a
      null      1861     524288     410624     BootstrapClassLoader
    @@ -52,6 +52,6 @@ Affect(row-cnt:21        7168       1752       0                demo.TestApp$ModuleClassLoader  user-service's ModuleClassLoader
     

    限制输出行数

    $ classloader-metaspace --limit 20
     

    默认按 chunkSize desc, blockSize desc, name asc 排序,因此 --limit 会保留 metaspace chunk 分配较大的 ClassLoader。

    - + diff --git a/doc/classloader.html b/doc/classloader.html index 7f008848a..dae86d10e 100644 --- a/doc/classloader.html +++ b/doc/classloader.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); classloader | arthas - + -
    目录

    classloader

    classloader在线教程在新窗口打开

    提示

    查看 classloader 的继承树,urls,类加载信息

    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 去加载指定的类

    --url-classes 参数说明

    参数名称参数说明
    --url-classes统计指定 ClassLoader 中,已加载类与 codeSource(URL/jar) 的关系
    -d, --details详情模式:列出每个 URL/jar 加载的类名(建议配合 -n/--limit 控制输出量)
    --jar <kw>按 jar 包名/URL 关键字过滤(默认包含匹配)
    --class <kw>按类名/包名关键字过滤(默认包含匹配)
    -E, --regex--jar/--class 使用正则匹配(默认关键字包含匹配)
    -n, --limit <N>详情模式下,每个 URL/jar 最多展示 N 个类(100 默认)

    使用参考

    按类加载类型查看统计信息

    $ classloader
    +    
    目录

    classloader

    提示

    查看 classloader 的继承树,urls,类加载信息

    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 去加载指定的类

    --url-classes 参数说明

    参数名称参数说明
    --url-classes统计指定 ClassLoader 中,已加载类与 codeSource(URL/jar) 的关系
    -d, --details详情模式:列出每个 URL/jar 加载的类名(建议配合 -n/--limit 控制输出量)
    --jar <kw>按 jar 包名/URL 关键字过滤(默认包含匹配)
    --class <kw>按类名/包名关键字过滤(默认包含匹配)
    -E, --regex--jar/--class 使用正则匹配(默认关键字包含匹配)
    -n, --limit <N>详情模式下,每个 URL/jar 最多展示 N 个类(100 默认)

    使用参考

    按类加载类型查看统计信息

    $ classloader
      name                                       numberOfInstances  loadedCountTotal
      com.taobao.arthas.agent.ArthasClassloader  1                  2115
      BootstrapClassLoader                       1                  1861
    @@ -130,6 +130,6 @@ Affect(row-cnt:2

    按 jar 包名关键字过滤并查看详情(列出类名):

    $ classloader -c 3d4eac69 --url-classes -d --jar math-game
     

    进一步按包名/关键字过滤(同时会输出 matchedClassCount 便于统计):

    $ classloader -c 3d4eac69 --url-classes --jar spring-core --class org.springframework
     
    - + diff --git a/doc/cls.html b/doc/cls.html index 7928ad0fc..d57b813ee 100644 --- a/doc/cls.html +++ b/doc/cls.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); cls | arthas - + - - + + diff --git a/doc/commands.html b/doc/commands.html index 33f4d29ec..e580f5d8c 100644 --- a/doc/commands.html +++ b/doc/commands.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); 命令列表 | arthas - + -
    目录

    命令列表

    jvm 相关

    • dashboard - 当前系统的实时数据面板
    • getstatic - 查看类的静态属性
    • heapdump - dump java heap, 类似 jmap 命令的 heap dump 功能
    • jvm - 查看当前 JVM 的信息
    • logger - 查看和修改 logger
    • mbean - 查看 Mbean 的信息
    • memory - 查看 JVM 的内存信息
    • ognl - 执行 ognl 表达式
    • perfcounter - 查看当前 JVM 的 Perf Counter 信息
    • sysenv - 查看 JVM 的环境变量
    • sysprop - 查看和修改 JVM 的系统属性
    • thread - 查看当前 JVM 的线程堆栈信息
    • vmoption - 查看和修改 JVM 里诊断相关的 option
    • vmtool - 从 jvm 里查询对象,执行 forceGc

    class/classloader 相关

    • classloader - 查看 classloader 的继承树,urls,类加载信息,使用 classloader 去 getResource
    • classloader-metaspace - 按 ClassLoader 实例统计 metaspace / class metadata 内存
    • dump - dump 已加载类的 byte code 到特定目录
    • jad - 反编译指定已加载类的源码
    • mc - 内存编译器,内存编译.java文件为.class文件
    • redefine - 加载外部的.class文件,redefine 到 JVM 里
    • retransform - 加载外部的.class文件,retransform 到 JVM 里
    • sc - 查看 JVM 已加载的类信息
    • sm - 查看已加载类的方法信息

    monitor/watch/trace 相关

    注意

    请注意,这些命令,都通过字节码增强技术来实现的,会在指定类的方法中插入一些切面来实现数据统计和观测,因此在线上、预发使用时,请尽量明确需要观测的类、方法以及条件,诊断结束要执行 stop 或将增强过的类执行 reset 命令。

    • monitor - 方法执行监控
    • line - 观察指定源码行的入参、局部变量和表达式结果
    • stack - 输出当前方法被调用的调用路径
    • trace - 方法内部调用路径,并输出方法路径上的每个节点上耗时
    • tt - 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测
    • watch - 方法执行数据观测

    profiler/火焰图

    鉴权

    options

    • options - 查看或设置 Arthas 全局开关

    扩展命令

    管道

    Arthas 支持使用管道对上述命令的结果进行进一步的处理,如sm java.lang.String * | grep 'index'

    • grep - 搜索满足条件的结果
    • plaintext - 将命令的结果去除 ANSI 颜色
    • wc - 按行统计输出结果

    后台异步任务

    当线上出现偶发的问题,比如需要 watch 某个条件,而这个条件一天可能才会出现一次时,异步后台任务就派上用场了,详情请参考这里

    • 使用 > 将结果重写向到日志文件,使用 & 指定命令是后台运行,session 断开不影响任务执行(生命周期默认为 1 天)
    • jobs - 列出所有 job
    • kill - 强制终止任务
    • fg - 将暂停的任务拉到前台执行
    • bg - 将暂停的任务放到后台执行

    基础命令

    • base64 - base64 编码转换,和 linux 里的 base64 命令类似
    • cat - 打印文件内容,和 linux 里的 cat 命令类似
    • cls - 清空当前屏幕区域
    • echo - 打印参数,和 linux 里的 echo 命令类似
    • grep - 匹配查找,和 linux 里的 grep 命令类似
    • help - 查看命令帮助信息
    • history - 打印命令历史
    • keymap - Arthas 快捷键列表及自定义快捷键
    • pwd - 返回当前的工作目录,和 linux 命令类似
    • quit - 退出当前 Arthas 客户端,其他 Arthas 客户端不受影响
    • reset - 重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类
    • session - 查看当前会话的信息
    • stop - 关闭 Arthas 服务端,所有 Arthas 客户端全部退出
    • tee - 复制标准输入到标准输出和指定的文件,和 linux 里的 tee 命令类似
    • version - 输出当前目标 Java 进程所加载的 Arthas 版本号
    - +
    目录

    命令列表

    jvm 相关

    • dashboard - 当前系统的实时数据面板
    • getstatic - 查看类的静态属性
    • heapdump - dump java heap, 类似 jmap 命令的 heap dump 功能
    • jvm - 查看当前 JVM 的信息
    • logger - 查看和修改 logger
    • mbean - 查看 Mbean 的信息
    • memory - 查看 JVM 的内存信息
    • ognl - 执行 ognl 表达式
    • perfcounter - 查看当前 JVM 的 Perf Counter 信息
    • sysenv - 查看 JVM 的环境变量
    • sysprop - 查看和修改 JVM 的系统属性
    • thread - 查看当前 JVM 的线程堆栈信息
    • vmoption - 查看和修改 JVM 里诊断相关的 option
    • vmtool - 从 jvm 里查询对象,执行 forceGc

    class/classloader 相关

    • classloader - 查看 classloader 的继承树,urls,类加载信息,使用 classloader 去 getResource
    • classloader-metaspace - 按 ClassLoader 实例统计 metaspace / class metadata 内存
    • dump - dump 已加载类的 byte code 到特定目录
    • jad - 反编译指定已加载类的源码
    • mc - 内存编译器,内存编译.java文件为.class文件
    • redefine - 加载外部的.class文件,redefine 到 JVM 里
    • retransform - 加载外部的.class文件,retransform 到 JVM 里
    • sc - 查看 JVM 已加载的类信息
    • sm - 查看已加载类的方法信息

    monitor/watch/trace 相关

    注意

    请注意,这些命令,都通过字节码增强技术来实现的,会在指定类的方法中插入一些切面来实现数据统计和观测,因此在线上、预发使用时,请尽量明确需要观测的类、方法以及条件,诊断结束要执行 stop 或将增强过的类执行 reset 命令。

    • monitor - 方法执行监控
    • line - 观察指定源码行的入参、局部变量和表达式结果
    • stack - 输出当前方法被调用的调用路径
    • trace - 方法内部调用路径,并输出方法路径上的每个节点上耗时
    • tt - 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测
    • watch - 方法执行数据观测

    profiler/火焰图

    鉴权

    options

    • options - 查看或设置 Arthas 全局开关

    扩展命令

    管道

    Arthas 支持使用管道对上述命令的结果进行进一步的处理,如sm java.lang.String * | grep 'index'

    • grep - 搜索满足条件的结果
    • plaintext - 将命令的结果去除 ANSI 颜色
    • wc - 按行统计输出结果

    后台异步任务

    当线上出现偶发的问题,比如需要 watch 某个条件,而这个条件一天可能才会出现一次时,异步后台任务就派上用场了,详情请参考这里

    • 使用 > 将结果重写向到日志文件,使用 & 指定命令是后台运行,session 断开不影响任务执行(生命周期默认为 1 天)
    • jobs - 列出所有 job
    • kill - 强制终止任务
    • fg - 将暂停的任务拉到前台执行
    • bg - 将暂停的任务放到后台执行

    基础命令

    • base64 - base64 编码转换,和 linux 里的 base64 命令类似
    • cat - 打印文件内容,和 linux 里的 cat 命令类似
    • cls - 清空当前屏幕区域
    • echo - 打印参数,和 linux 里的 echo 命令类似
    • grep - 匹配查找,和 linux 里的 grep 命令类似
    • help - 查看命令帮助信息
    • history - 打印命令历史
    • keymap - Arthas 快捷键列表及自定义快捷键
    • pwd - 返回当前的工作目录,和 linux 命令类似
    • quit - 退出当前 Arthas 客户端,其他 Arthas 客户端不受影响
    • reset - 重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类
    • session - 查看当前会话的信息
    • stop - 关闭 Arthas 服务端,所有 Arthas 客户端全部退出
    • tee - 复制标准输入到标准输出和指定的文件,和 linux 里的 tee 命令类似
    • version - 输出当前目标 Java 进程所加载的 Arthas 版本号
    + diff --git a/doc/contact-us.html b/doc/contact-us.html index e08bf700c..b0e0caa0a 100644 --- a/doc/contact-us.html +++ b/doc/contact-us.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); 联系我们 | arthas - + -
    目录

    联系我们

    招聘

    Issues

    使用疑问,意见可以直接在 Issues 里提出: https://github.com/alibaba/arthas/issues在新窗口打开

    微信公众号

    欢迎关注公众号,获取 Arthas 项目的信息、源码分析、案例实践。

    钉钉群

    • Arthas 开源交流钉钉群: 21965291 ,搜索群号即可加入。(如果满了无法加入,请加 4 群)

    • Arthas 开源交流钉钉群 2: 30707824 ,搜索群号即可加入。(如果满了无法加入,请加 4 群)

    • Arthas 开源交流钉钉群 3: 17605006847 ,搜索群号即可加入。(如果满了无法加入,请加 4 群)

    • Arthas 开源交流钉钉群 4: 41920010710 ,搜索群号即可加入。

    QQ 群

    Arthas 开源交流 QQ 群: 916328269 (如果满了无法加入,请加 3 群)

    Arthas 开源交流 QQ 群 2: 854625984

    Arthas 开源交流 QQ 群 3: 672077388

    - +
    目录

    联系我们

    招聘

    Issues

    使用疑问,意见可以直接在 Issues 里提出: https://github.com/alibaba/arthas/issues在新窗口打开

    微信公众号

    欢迎关注公众号,获取 Arthas 项目的信息、源码分析、案例实践。

    钉钉群

    • Arthas 开源交流钉钉群: 21965291 ,搜索群号即可加入。(如果满了无法加入,请加 4 群)

    • Arthas 开源交流钉钉群 2: 30707824 ,搜索群号即可加入。(如果满了无法加入,请加 4 群)

    • Arthas 开源交流钉钉群 3: 17605006847 ,搜索群号即可加入。(如果满了无法加入,请加 4 群)

    • Arthas 开源交流钉钉群 4: 41920010710 ,搜索群号即可加入。

    QQ 群

    Arthas 开源交流 QQ 群: 916328269 (如果满了无法加入,请加 3 群)

    Arthas 开源交流 QQ 群 2: 854625984

    Arthas 开源交流 QQ 群 3: 672077388

    + diff --git a/doc/dashboard.html b/doc/dashboard.html index 6aa99e0e6..a90aa9034 100644 --- a/doc/dashboard.html +++ b/doc/dashboard.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); dashboard | arthas - + -
    目录

    dashboard

    dashboard在线教程在新窗口打开

    提示

    当前系统的实时数据面板,按 ctrl+c 退出。

    当运行在 Ali-tomcat 时,会显示当前 tomcat 的实时信息,如 HTTP 请求的 qps, rt, 错误数, 线程池信息等等。

    参数说明

    参数名称参数说明
    [i:]刷新实时数据的时间间隔 (ms),默认 5000ms
    [n:]刷新实时数据的次数

    使用参考

    $ dashboard
    +    
    目录

    dashboard

    提示

    当前系统的实时数据面板,按 ctrl+c 退出。

    当运行在 Ali-tomcat 时,会显示当前 tomcat 的实时信息,如 HTTP 请求的 qps, rt, 错误数, 线程池信息等等。

    参数说明

    参数名称参数说明
    [i:]刷新实时数据的时间间隔 (ms),默认 5000ms
    [n:]刷新实时数据的次数

    使用参考

    $ dashboard
     ID   NAME                           GROUP           PRIORITY   STATE     %CPU      DELTA_TIME TIME      INTERRUPTE DAEMON
     -1   C2 CompilerThread0             -               -1         -         1.55      0.077      0:8.684   false      true
     53   Timer-for-arthas-dashboard-07b system          5          RUNNABLE  0.08      0.004      0:0.004   false      true
    @@ -68,6 +68,6 @@ systemload.average                                             10.68
     processors                                                     8
     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 线程

    JVM 内部线程

    Java 8 之后支持获取 JVM 内部线程 CPU 时间,这些线程只有名称和 CPU 时间,没有 ID 及状态等信息(显示 ID 为-1)。 通过内部线程可以观测到 JVM 活动,如 GC、JIT 编译等占用 CPU 情况,方便了解 JVM 整体运行状况。

    • 当 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

    截图展示

    - + diff --git a/doc/docker.html b/doc/docker.html index 34cc5ab6b..b9294fe4c 100644 --- a/doc/docker.html +++ b/doc/docker.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); Docker | arthas - + -
    目录

    Docker

    在 Docker 里使用 JDK

    很多时候,应用在 docker 里出现 arthas 无法工作的问题,是因为应用没有安装 JDK ,而是安装了 JRE 。如果只安装了 JRE,则会缺少很多 JAVA 的命令行工具和类库,Arthas 也没办法正常工作。下面介绍两种常见的在 Docker 里使用 JDK 的方式。

    使用公开的 JDK 镜像

    • https://hub.docker.com/_/openjdk/

    比如:

    FROM openjdk:8-jdk
    +    
    目录

    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
     

    通过包管理软件来安装

    比如:

    # Install OpenJDK-8
     RUN apt-get update && \
    @@ -79,12 +79,69 @@ version: 3.0.5
     pid: 9
     time: 2018-12-18 11:30:36
     
  • 诊断 Docker 里的 Java 进程

    docker exec -it  ${containerId} /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar"
    -

    诊断 k8s 里容器里的 Java 进程

    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
    +

    诊断 k8s 里容器里的 Java 进程

    如果应用容器已经包含 shell、完整 JDK 和下载工具,可以直接进入应用容器启动 Arthas。

    kubectl exec -it ${pod} --container ${containerName} -- /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar"
    +

    从临时 debug 容器 attach

    从 4.3.4在新窗口打开 开始,Arthas 可以从 kubectl debug 创建的临时容器 attach 应用容器里的 JVM。应用镜像使用 distroless,或者没有 shell、JDK 时,可以用这个方式把诊断工具临时加入正在运行的 Pod。

    使用前需要满足下面的条件。

    • Pod 运行在 Linux 上。
    • Kubernetes 集群支持临时容器,容器运行时支持 kubectl debug --target。进入临时容器后必须能看到目标 JVM 的 PID。
    • 临时容器提供完整 JDK,并使用 Arthas 4.3.4 或更高版本。
    • 临时容器与目标 JVM 的 UID 不同时,临时容器需要以 root 身份运行,并能访问目标进程的 /proc/<pid>/root。目标 HotSpot 还必须允许 UID 0 的 attach 客户端。部分旧 JDK 只接受相同 UID/GID,此时需要让两个容器使用相同 UID/GID。

    注意

    下面的 --profile=sysadmin 会创建 privileged 临时容器。请只在获得授权且集群安全策略允许时使用。应用 Pod 强制以非 root 用户运行时,需要由集群管理员提供具备相应权限的调试配置。

    先把临时容器加入正在运行的 Pod。${containerName} 是目标应用容器的名称。

    kubectl debug -it ${pod} \
    +  --target=${containerName} \
    +  --image=amazoncorretto:8-alpine-jdk \
    +  --profile=sysadmin \
    +  -- sh
    +

    --target 让临时容器进入目标容器的 PID namespace。不同 Kubernetes 版本的配置方式可以参考 Kubernetes 调试运行中的 Pod在新窗口打开。

    进入临时容器后,下载并解压完整的 Arthas 4.3.4 发行包。

    ARTHAS_VERSION=4.3.4
    +ARTHAS_HOME=/tmp/arthas-${ARTHAS_VERSION}
    +
    +wget -qO /tmp/arthas.zip \
    +  "https://repo1.maven.org/maven2/com/taobao/arthas/arthas-packaging/${ARTHAS_VERSION}/arthas-packaging-${ARTHAS_VERSION}-bin.zip"
    +mkdir -p "${ARTHAS_HOME}"
    +unzip -q /tmp/arthas.zip -d "${ARTHAS_HOME}"
    +

    用 ps 查找目标 JVM 的 PID。下面以 PID 1 为例。

    ps -ef
    +
    +TARGET_PID=1
    +java -jar "${ARTHAS_HOME}/arthas-boot.jar" "${TARGET_PID}"
    +

    Arthas 会自动比较临时容器和目标 JVM 的 mount namespace。检测到两者不同时,Arthas 会暴露目标 JVM 的 attach socket,并把完整的 Arthas Home 复制到目标容器的临时目录。整个过程不需要两个容器挂载共享目录。

    跨 mount namespace attach 成功后,目标 JVM 的 arthas.log 会记录下面的结构化日志。

    event=arthas_attach status=success mode=cross-mount-namespace targetPid=... arthasHome=... network=... telnet=... http=...
    +

    执行 stop 会停止 Arthas,并清理复制到目标容器里的临时 Arthas Home。quit 和 exit 只断开当前连接,不会停止 Arthas 或清理该目录。

    如果临时容器中的 ps 看不到目标 JVM,说明容器运行时没有按 --target 共享目标进程,当前方式无法 attach。如果 attach 后的服务启动检查失败,终端会提示查看目标 JVM 的 arthas.log,可以从临时容器中查找日志。

    find /proc/${TARGET_PID}/root -name arthas.log 2>/dev/null
    +

    从 sidecar 容器 attach

    也可以把完整 JDK 和 Arthas 预装在常驻 sidecar 容器中,再从 sidecar attach 同一个 Pod 里的应用 JVM。创建 Pod 时必须设置 shareProcessNamespace: true在新窗口打开,否则 sidecar 看不到应用容器的 PID。这个字段只共享 PID namespace。两个容器仍使用独立的 mount namespace,Arthas 4.3.4 会通过 /proc/<pid>/root 处理文件访问,不需要共享 volume。Pod 内的容器已经共享 network namespace,因此也不需要 NET_ADMIN。

    优先让 sidecar 和应用 JVM 使用相同的 Linux UID 和 GID。普通 JVM、默认 /proc 安全策略和可写临时目录下,这条路径不需要增加 Linux capability。

    spec:
    +  shareProcessNamespace: true
    +  containers:
    +    - name: app
    +      securityContext:
    +        runAsUser: 1000
    +        runAsGroup: 1000
    +    - name: arthas-sidecar
    +      image: your-registry/arthas-sidecar:4.3.4
    +      securityContext:
    +        runAsUser: 1000
    +        runAsGroup: 1000
    +        runAsNonRoot: true
    +        allowPrivilegeEscalation: false
    +        capabilities:
    +          drop: ["ALL"]
    +

    如果 sidecar 和应用 JVM 的 UID 不同,sidecar 必须以 UID 0 运行,并且目标 HotSpot 必须允许 root 客户端。较新的 OpenJDK attach listener在新窗口打开 接受相同 UID/GID 或 UID 0。上游 OpenJDK 8u 的实现在新窗口打开 仍要求 UID/GID 完全一致,部分厂商构建也可能有不同策略。这个校验发生在目标 JVM 内部,增加 Linux capability 无法绕过。目标 JVM 使用这类实现时,只能采用相同 UID/GID 的配置。

    目标 HotSpot 支持 root 客户端时,为了覆盖首次 attach、不同权限的临时目录和 stop 清理,建议显式保留下面四项 capability。

    配置或 capability用途
    shareProcessNamespace: true让 sidecar 能看到应用 JVM 的 PID 和 /proc/<pid>
    runAsUser: 0在目标 HotSpot 支持 root 客户端时通过跨 UID 校验
    SYS_PTRACE通过 ptrace access check 读取 /proc/<pid>,并访问 /proc/<pid>/root 和 mount namespace 信息
    KILLUID 不同时向尚未启动 attach listener 的 JVM 发送 SIGQUIT
    DAC_OVERRIDE连接目标用户拥有的 0600 attach socket,并写入目标容器的临时目录
    CHOWN把复制到目标容器的 Arthas Home 交给目标用户,使 stop 可以清理该目录

    下面是跨 UID 场景的 securityContext 片段。它不需要 privileged: true、SYS_ADMIN、hostPID 或 hostPath。

    spec:
    +  shareProcessNamespace: true
    +  containers:
    +    - name: arthas-sidecar
    +      image: your-registry/arthas-sidecar:4.3.4
    +      securityContext:
    +        runAsUser: 0
    +        runAsGroup: 0
    +        allowPrivilegeEscalation: false
    +        seccompProfile:
    +          type: RuntimeDefault
    +        capabilities:
    +          drop: ["ALL"]
    +          add:
    +            - SYS_PTRACE
    +            - KILL
    +            - DAC_OVERRIDE
    +            - CHOWN
    +

    容器运行时的默认 capability 集合通常已经包含 KILL、DAC_OVERRIDE 和 CHOWN,所以保留默认集合时往往只需要额外添加 SYS_PTRACE。上面的写法先 drop ALL 再逐项添加,结果不依赖运行时默认值。

    注意

    Kubernetes 的 Baseline 和 Restricted Pod Security Standards在新窗口打开 都不允许增加 SYS_PTRACE,Restricted 还禁止 UID 0。使用跨 UID 配置时,需要由集群管理员为这个受信任的工作负载提供例外或专用 namespace。共享 PID namespace 也会让 sidecar 看到同一 Pod 内其他进程的参数、环境变量和 /proc/<pid>/root,不要把这个 sidecar 开放给不受信任的用户。

    Arthas attach 本身不调用 Kubernetes API,因此 sidecar 的 ServiceAccount 不需要额外 RBAC 权限。通过 kubectl exec 进入 sidecar 的操作人员仍需对应的 pods/exec 权限。

    sidecar 镜像需要包含完整 JDK 和 Arthas 4.3.4 或更高版本。启用共享 PID namespace 后,应用进程通常不再是 PID 1,请先用 ps 查找实际 PID。

    kubectl exec -it ${pod} --container arthas-sidecar -- sh
    +
    +ps -ef
    +TARGET_PID=<java-pid>
    +java -jar /opt/arthas/arthas-boot.jar "${TARGET_PID}"
    +

    如果相同 UID/GID 的配置仍然无法 attach,检查目标 JVM 是否设置了 -XX:+DisableAttachMechanism,以及 seccomp、AppArmor、SELinux 或 /proc 挂载策略是否阻止了进程访问。目标 JVM 使用自定义 java.io.tmpdir 时,该目录也必须允许 attach 客户端写入。

    把 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在新窗口打开

- + diff --git a/doc/download.html b/doc/download.html index 7133f266f..8ec97d35d 100644 --- a/doc/download.html +++ b/doc/download.html @@ -31,15 +31,15 @@ s.parentNode.insertBefore(hm, s); })(); 下载 | arthas - + -
目录

下载

下载全量包

从 Maven 仓库下载

最新版本,点击下载:在新窗口打开

从 Github Releases 页下载

https://github.com/alibaba/arthas/releases在新窗口打开

用 as.sh 启动

解压后,在文件夹里有as.sh,直接用./as.sh的方式启动:

./as.sh
+    
目录

下载

下载全量包

从 Maven 仓库下载

最新版本,点击下载:在新窗口打开

从 Github Releases 页下载

https://github.com/alibaba/arthas/releases在新窗口打开

用 as.sh 启动

解压后,在文件夹里有as.sh,直接用./as.sh的方式启动:

./as.sh
 

打印帮助信息:

./as.sh -h
 

用 arthas-boot 启动

或者在解压后,在文件夹里有arthas-boot.jar,直接用java -jar的方式启动:

java -jar arthas-boot.jar
 

打印帮助信息:

java -jar arthas-boot.jar -h
 

下载离线文档

下载文档:在新窗口打开


注意

如需诊断 jdk 6/7 应用,请点击此处下载 arthas 3在新窗口打开。

- + diff --git a/doc/dump.html b/doc/dump.html index 06cfc97fc..151fba2db 100644 --- a/doc/dump.html +++ b/doc/dump.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); dump | arthas - + -
目录

dump

dump在线教程在新窗口打开

提示

dump 已加载类的 bytecode 到特定目录

dump 命令将 JVM 中实际运行的 class 的 byte code dump 到指定目录,适用场景批量下载指定包目录的 class 字节码;如需反编译单一类、实时查看类信息,可参考 jad。

参数说明

参数名称参数说明
class-pattern类名表达式匹配
[c:]类所属 ClassLoader 的 hashcode
[classLoaderClass:]指定执行表达式的 ClassLoader 的 class name
[d:]设置类文件的目标目录
[E]开启正则表达式匹配,默认为通配符匹配

使用参考

$ dump java.lang.String
+    
目录

dump

提示

dump 已加载类的 bytecode 到特定目录

dump 命令将 JVM 中实际运行的 class 的 byte code dump 到指定目录,适用场景批量下载指定包目录的 class 字节码;如需反编译单一类、实时查看类信息,可参考 jad。

参数说明

参数名称参数说明
class-pattern类名表达式匹配
[c:]类所属 ClassLoader 的 hashcode
[classLoaderClass:]指定执行表达式的 ClassLoader 的 class name
[d:]设置类文件的目标目录
[E]开启正则表达式匹配,默认为通配符匹配

使用参考

$ 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.
@@ -55,6 +55,6 @@ Affect(row-cnt:1$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,killercoda 目前环境是 java11。

--classLoaderClass 的值是 ClassLoader 的类名,只有匹配到唯一的 ClassLoader 实例时才能工作,目的是方便输入通用命令,而-c <hashcode>是动态变化的。

- + diff --git a/doc/echo.html b/doc/echo.html index 7ca8ddb1d..6f64a433d 100644 --- a/doc/echo.html +++ b/doc/echo.html @@ -31,12 +31,12 @@ s.parentNode.insertBefore(hm, s); })(); echo | arthas - + -
目录

echo

echo在线教程在新窗口打开

提示

打印参数,和 linux 里的 echo 命令类似。

使用参考

$ echo 'hello'
+    
-    
+    
   
 
diff --git a/doc/en/ognl-express.html b/doc/en/ognl-express.html
new file mode 100644
index 000000000..d36340cc8
--- /dev/null
+++ b/doc/en/ognl-express.html
@@ -0,0 +1,17 @@
+
+
+
+  
+  
+  
+  
+  Redirecting...
+  
+
+
+  

Redirecting...

+ + \ No newline at end of file diff --git a/doc/external-command.html b/doc/external-command.html index 61551927e..855e1afee 100644 --- a/doc/external-command.html +++ b/doc/external-command.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); 加载外部命令 | arthas - + -
目录

加载外部命令

Arthas 支持在启动时加载外部 command jar,用于把团队内部常用的诊断动作封装成新的 Arthas 命令。外部命令加载后可以像内置命令一样通过 help 查看和执行。

提示

外部命令只在 Arthas 服务端启动时加载。Arthas 已经 attach 到目标 JVM 后,再把 jar 放到目录里不会自动生效,需要重新启动 Arthas 服务端。

加载方式

通过命令行指定

arthas-boot.jar 支持 --command-locations 参数,参数值可以是 jar 文件路径,也可以是目录路径,多个路径用英文逗号分隔:

java -jar arthas-boot.jar --command-locations '/opt/arthas/ext-command.jar,/opt/arthas/ext-commands' <pid>
+    
目录

加载外部命令

Arthas 支持在启动时加载外部 command jar,用于把团队内部常用的诊断动作封装成新的 Arthas 命令。外部命令加载后可以像内置命令一样通过 help 查看和执行。

提示

外部命令只在 Arthas 服务端启动时加载。Arthas 已经 attach 到目标 JVM 后,再把 jar 放到目录里不会自动生效,需要重新启动 Arthas 服务端。

加载方式

通过命令行指定

arthas-boot.jar 支持 --command-locations 参数,参数值可以是 jar 文件路径,也可以是目录路径,多个路径用英文逗号分隔:

java -jar arthas-boot.jar --command-locations '/opt/arthas/ext-command.jar,/opt/arthas/ext-commands' <pid>
 

如果使用完整包里的 as.sh,也可以传入相同参数:

./as.sh --command-locations '/opt/arthas/ext-command.jar,/opt/arthas/ext-commands' <pid>
 

通过 arthas.properties 指定

在 arthas.properties 中配置:

arthas.commandLocations=/opt/arthas/ext-command.jar,/opt/arthas/ext-commands
 

如果通过 arthas-spring-boot-starter 启动,Spring Boot 配置文件中推荐使用 arthas.command-locations:

arthas.command-locations=/opt/arthas/ext-command.jar,/opt/arthas/ext-commands
@@ -113,6 +113,6 @@
 demo-external Codex
 

预期可以看到类似输出:

demo external command loaded: Codex
 

加载行为和冲突处理

Arthas 启动时会把外部 command jar 加入 Arthas ClassLoader,然后通过 ServiceLoader<CommandResolver> 发现命令。命令注册时遵循下面规则:

  • 外部命令不能覆盖 Arthas 内置命令;如果和内置命令重名,外部命令会被跳过并记录日志。
  • 多个外部命令重名时,只保留第一个命令,后续重名命令会被跳过并记录日志。
  • CommandResolver 加载失败不会中断其他 resolver 的加载,错误会写入 Arthas 日志。
  • 如果没有发现有效的外部命令,Arthas 会继续按正常流程启动。
- + diff --git a/doc/faq.html b/doc/faq.html index 6e2be2482..aa32d6154 100644 --- a/doc/faq.html +++ b/doc/faq.html @@ -31,17 +31,17 @@ s.parentNode.insertBefore(hm, s); })(); FAQ | arthas - + -
目录

FAQ

提示

不在本列表里的问题,请到 issue 里搜索。 https://github.com/alibaba/arthas/issues在新窗口打开

日志文件在哪里?

日志文件路径: ~/logs/arthas/arthas.log

telnet: connect to address 127.0.0.1: Connection refused

  1. 检查日志 ~/logs/arthas/arthas.log
  2. 检查as.sh/arthas-boot.jar 的启动参数,是否指定了特定的port
  3. 用netstat 检查LISTEN 3658 端口的进程,确认它是java进程,并且是想要诊断的进程
  4. 如果LISTEN 3658 端口的进程不是 java 进程,则3658端口已经被占用。需要在as.sh/arthas-boot.jar 的启动参数指定其它端口。
  5. 确认进程和端口后,尝试用telnet 127.0.0.1 3658去连接

本质上arthas会在应用java进程内启动一个tcp server,然后使用telnet去连接它。

  1. 可能端口不匹配
  2. 可能进程本身已经挂起,不能接受新连接

如果Arthas 日志里有 Arthas server already bind.

  1. 说明Arthas server曾经启动过,检查目标进程打开的文件描述符。如果是linux环境,可以去 /proc/$pid/fd 下面,使用ls -alh | grep arthas,检查进程是否已加载arthas相关的 jar 包。
  2. 如果没有,那么可能已启动arthas的是其它进程,也可能应用已经重启过了。

Arthas attach 之后对原进程性能有多大的影响

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里的方式 attach math-game。
  4. 更多情况参考: https://github.com/alibaba/arthas/issues/347在新窗口打开

trace/watch 等命令能否增强 jdk 里的类?

默认情况下会过滤掉java.开头的类和被BootStrap ClassLoader加载的类。可以通过参数开启。

options unsafe true
+    
目录

FAQ

提示

不在本列表里的问题,请到 issue 里搜索。 https://github.com/alibaba/arthas/issues在新窗口打开

日志文件在哪里?

日志文件路径: ~/logs/arthas/arthas.log

telnet: connect to address 127.0.0.1: Connection refused

  1. 检查日志 ~/logs/arthas/arthas.log
  2. 检查as.sh/arthas-boot.jar 的启动参数,是否指定了特定的port
  3. 用netstat 检查LISTEN 3658 端口的进程,确认它是java进程,并且是想要诊断的进程
  4. 如果LISTEN 3658 端口的进程不是 java 进程,则3658端口已经被占用。需要在as.sh/arthas-boot.jar 的启动参数指定其它端口。
  5. 确认进程和端口后,尝试用telnet 127.0.0.1 3658去连接

本质上arthas会在应用java进程内启动一个tcp server,然后使用telnet去连接它。

  1. 可能端口不匹配
  2. 可能进程本身已经挂起,不能接受新连接

如果Arthas 日志里有 Arthas server already bind.

  1. 说明Arthas server曾经启动过,检查目标进程打开的文件描述符。如果是linux环境,可以去 /proc/$pid/fd 下面,使用ls -alh | grep arthas,检查进程是否已加载arthas相关的 jar 包。
  2. 如果没有,那么可能已启动arthas的是其它进程,也可能应用已经重启过了。

Arthas attach 之后对原进程性能有多大的影响

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里的方式 attach math-game。
  4. 更多情况参考: https://github.com/alibaba/arthas/issues/347在新窗口打开

trace/watch 等命令能否增强 jdk 里的类?

默认情况下会过滤掉java.开头的类和被BootStrap ClassLoader加载的类。可以通过参数开启。

options unsafe true
 

更多参考 options

提示

通过 java.lang.instrument.Instrumentation#appendToBootstrapClassLoaderSearch append 到Bootstrap ClassLoader的 jar 包需要开启 unsafe。

怎么以json格式查看结果

options json-format true
 

更多参考 options

Arthas 能否跟踪 native 函数

不能。

能不能查看内存里某个变量的值

  1. 可以使用vmtool命令。
  2. 可以用一些技巧,用tt命令拦截到对象,或者从静态函数里取到对象。

方法同名过滤

同名方法过滤可以通过匹配表达式,可以使用表达式核心变量中所有变量作为已知条件,可以通过判断参数个数params.length ==1, 参数类型params[0] instanceof java.lang.Integer、返回值类型 returnObj instanceof java.util.List 等等一种或者多种组合进行过滤。

可以使用 -v 查看观察匹配表达式的执行结果 https://github.com/alibaba/arthas/issues/1348在新窗口打开

例子math-game

watch demo.MathGame primeFactors '{params,returnObj,throwExp}' 'params.length >0 && returnObj instanceof java.util.List' -v
 

怎么 watch、trace 构造函数 ?

watch demo.MathGame <init> '{params,returnObj,throwExp}' -v
 

怎样 watch、trace 内部类?

在 JVM 规范里内部类的格式是OuterClass$InnerClass。

watch OuterClass$InnerClass
 

是否支持 watch、trace lambda 类?

对于lambda生成的类,会跳过处理,因为 JVM 本身限制对 lambda 生成的类做增强。

输入中文/Unicode 字符

从 Arthas 4.3.2 开始,Terminal 支持直接输入和编辑中文及其他 Unicode 字符。

Arthas 4.3.1 及更早版本不支持直接输入中文/Unicode 字符,可以将字符转换为\u表示:

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 增强过的类在新窗口打开, V8.1.0 以上版本可以兼容使用,更多参考 skywalking 配置 skywalking compatible with other javaagent bytecode processing在新窗口打开。

class redefinition failed: attempted to change the schema (add/remove fields)

参考: https://github.com/alibaba/arthas/issues/2165在新窗口打开

Arthas 能不能离线使用

可以。下载全量包解压即可,参考: 下载。

Arthas 怎么使用指定版本,不使用自动升级版本

  1. 启动 as.sh/arthas-boot.jar时,可以用 --use-version 参数指定。
  2. 下载全量包,解压后,cd到arthas目录启动,这种情况会使用当前目录下的版本。

Attach docker/k8s 里的 pid 为 1 的进程失败

参考: https://github.com/alibaba/arthas/issues/362#issuecomment-448185416在新窗口打开

为什么下载了新版本的 Arthas,连接的却是旧版本?

比如启动的 as.sh/arthas-boot.jar 版本是 3.5._ 的,但是连接上之后,打印的 arthas 版本是 3.4._ 的。

可能是之前使用旧版本的 arthas 诊断过目标进程。可以先执行stop停止掉旧版本的 arthas,再重新使用新版本 attach。

在ognl表达式中获取到 spring bean cglib 对象,但是 field 是 null

参考:

- +

更复杂的 OGNL 写法、格式约束与排错方法参见 OGNL 复杂表达式使用技巧。

java.lang.ClassFormatError: null、skywalking arthas 兼容使用

当出现这个错误日志java.lang.ClassFormatError: null,通常情况下都是被其他字节码工具修改过与 arthas 修改字节码不兼容。

比如: 使用 skywalking V8.1.0 以下版本 无法 trace、watch 被 skywalking agent 增强过的类在新窗口打开, V8.1.0 以上版本可以兼容使用,更多参考 skywalking 配置 skywalking compatible with other javaagent bytecode processing在新窗口打开。

class redefinition failed: attempted to change the schema (add/remove fields)

参考: https://github.com/alibaba/arthas/issues/2165在新窗口打开

Arthas 能不能离线使用

可以。下载全量包解压即可,参考: 下载。

Arthas 怎么使用指定版本,不使用自动升级版本

  1. 启动 as.sh/arthas-boot.jar时,可以用 --use-version 参数指定。
  2. 下载全量包,解压后,cd到arthas目录启动,这种情况会使用当前目录下的版本。

Attach docker/k8s 里的 pid 为 1 的进程失败

参考: https://github.com/alibaba/arthas/issues/362#issuecomment-448185416在新窗口打开

为什么下载了新版本的 Arthas,连接的却是旧版本?

比如启动的 as.sh/arthas-boot.jar 版本是 3.5._ 的,但是连接上之后,打印的 arthas 版本是 3.4._ 的。

可能是之前使用旧版本的 arthas 诊断过目标进程。可以先执行stop停止掉旧版本的 arthas,再重新使用新版本 attach。

在ognl表达式中获取到 spring bean cglib 对象,但是 field 是 null

参考:

+ diff --git a/doc/getstatic.html b/doc/getstatic.html index eefa6d0e3..8d89079dc 100644 --- a/doc/getstatic.html +++ b/doc/getstatic.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); getstatic | arthas - + -
目录

getstatic

getstatic在线教程在新窗口打开

使用参考

  • 推荐直接使用ognl命令,更加灵活。

通过 getstatic 命令可以方便的查看类的静态属性。使用方法为getstatic class_name field_name

$ getstatic demo.MathGame random
+    
目录

getstatic

使用参考

  • 推荐直接使用ognl命令,更加灵活。

通过 getstatic 命令可以方便的查看类的静态属性。使用方法为getstatic class_name field_name

$ getstatic demo.MathGame random
 field: random
 @Random[
     serialVersionUID=@Long[3905348978240129619],
@@ -55,7 +55,7 @@ field: random
     seedOffset=@Long[24],
 ]
 
  • 指定 classLoader

注意 hashcode 是变化的,需要先查看当前的 ClassLoader 信息,使用sc -d <ClassName>提取对应 ClassLoader 的 hashcode。

如果你使用-c,你需要手动输入 hashcode:-c <hashcode>

$ 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,killercoda 目前环境是 java11。

--classLoaderClass 的值是 ClassLoader 的类名,只有匹配到唯一的 ClassLoader 实例时才能工作,目的是方便输入通用命令,而-c <hashcode>是动态变化的。

如果该静态属性是一个复杂对象,还可以支持在该属性上通过 ognl 表示进行遍历,过滤,访问对象的内部属性等操作。

例如,假设 n 是一个 Map,Map 的 Key 是一个 Enum,我们想过滤出 Map 中 Key 为某个 Enum 的值,可以写如下命令

$ getstatic com.alibaba.arthas.Test n 'entrySet().iterator.{? #this.key.name()=="STOP"}'
+

对于只有唯一实例的 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,killercoda 目前环境是 java11。

--classLoaderClass 的值是 ClassLoader 的类名,只有匹配到唯一的 ClassLoader 实例时才能工作,目的是方便输入通用命令,而-c <hashcode>是动态变化的。

如果该静态属性是一个复杂对象,还可以支持在该属性上通过 ognl 表示进行遍历,过滤,访问对象的内部属性等操作。

例如,假设 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],
@@ -69,6 +69,6 @@ field: m
     @Node[a=aaa],
 ]
 
- + diff --git a/doc/grep.html b/doc/grep.html index 55f23dd73..59c4dc295 100644 --- a/doc/grep.html +++ b/doc/grep.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); grep | arthas - + -
目录

grep

grep在线教程在新窗口打开

提示

类似传统的grep命令。

使用参考

 USAGE:
+    
-    
+    
   
 
diff --git a/doc/groovy.html b/doc/groovy.html
index 87cbb2103..82d90c4a1 100644
--- a/doc/groovy.html
+++ b/doc/groovy.html
@@ -31,11 +31,11 @@
       s.parentNode.insertBefore(hm, s);
     })();
     groovy | arthas
-    
+    
     
   
   
-    
目录

groovy

提示

Arthas 支持 groovy 脚本增强,允许像 BTrace 一样编写脚本来解决问题,可以在 groovy 脚本中进行 if/for/switch/while 等控制语句,不受限制,但相比 BTrace 而言拥有更多的限制范围。

限制内容

  1. 禁止改变原有逻辑,与 watch 等命令一样,重点保证的是监听和观察。
  2. 只允许在方法的 before/success/exception/finish 四个环节进行监听。

参数说明

参数名称参数说明
class-pattern类名表达式匹配
method-pattern方法名表达式匹配
script-filepathgroovy 脚本的绝对路径
[S]匹配所有的子类
[E]开启正则表达式匹配,默认为通配符匹配

需要说明的是,第三个输入参数是脚本的绝对路径,比如 /tmp/test.groovy,不建议输入相对路径,比如 ./test.groovy

五个关键函数声明

/**
+    
目录

groovy

提示

Arthas 支持 groovy 脚本增强,允许像 BTrace 一样编写脚本来解决问题,可以在 groovy 脚本中进行 if/for/switch/while 等控制语句,不受限制,但相比 BTrace 而言拥有更多的限制范围。

限制内容

  1. 禁止改变原有逻辑,与 watch 等命令一样,重点保证的是监听和观察。
  2. 只允许在方法的 before/success/exception/finish 四个环节进行监听。

参数说明

参数名称参数说明
class-pattern类名表达式匹配
method-pattern方法名表达式匹配
script-filepathgroovy 脚本的绝对路径
[S]匹配所有的子类
[E]开启正则表达式匹配,默认为通配符匹配

需要说明的是,第三个输入参数是脚本的绝对路径,比如 /tmp/test.groovy,不建议输入相对路径,比如 ./test.groovy

五个关键函数声明

/**
  * 增强脚本监听器
  */
 interface ScriptListener {
@@ -159,6 +159,6 @@ returning:class=IbatisProductDao;method=getProductById;
 before:class=IbatisProductDao;method=getProductById;paramslen=1;[Ljava.lang.Object;@5b0e2d00;
 returning:class=IbatisProductDao;method=getProductById;
 
- + diff --git a/doc/heapdump.html b/doc/heapdump.html index f7ed1dc99..cd5b34493 100644 --- a/doc/heapdump.html +++ b/doc/heapdump.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); heapdump | arthas - + -
目录

heapdump

heapdump在线教程在新窗口打开

提示

dump java heap, 类似 jmap 命令的 heap dump 功能。

使用参考

dump 到指定文件

[arthas@58205]$ heapdump arthas-output/dump.hprof
+    
目录

heapdump

提示

dump java heap, 类似 jmap 命令的 heap dump 功能。

使用参考

dump 到指定文件

[arthas@58205]$ heapdump arthas-output/dump.hprof
 Dumping heap to arthas-output/dump.hprof ...
 Heap dump file created
 

提示

生成文件在arthas-output目录,可以通过浏览器下载: http://localhost:8563/arthas-output/

只 dump live 对象

[arthas@58205]$ heapdump --live /tmp/dump.hprof
@@ -45,6 +45,6 @@ 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/doc/help.html b/doc/help.html index d8991f728..2bdde0cd2 100644 --- a/doc/help.html +++ b/doc/help.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); help | arthas - + -
目录

help

查看命令帮助信息,可以查看当前 arthas 版本支持的指令,或者查看具体指令的使用说明。

提示

[help 指令]的等同于[指令 -help],都是查看具体指令的使用说明。

参数说明

参数名称参数说明
不接参数查询当前 arthas 版本支持的指令以及指令描述
[name:]查询具体指令的使用说明

使用参考

$ help
+    
目录

help

查看命令帮助信息,可以查看当前 arthas 版本支持的指令,或者查看具体指令的使用说明。

提示

[help 指令]的等同于[指令 -help],都是查看具体指令的使用说明。

参数说明

参数名称参数说明
不接参数查询当前 arthas 版本支持的指令以及指令描述
[name:]查询具体指令的使用说明

使用参考

$ help
  NAME         DESCRIPTION
  help         Display Arthas Help
  auth         Authenticates the current session
@@ -101,6 +101,6 @@
  -i, --interval <value>                  The interval (in ms) between two executions, default is 5000 ms.
  -n, --number-of-execution <value>       The number of times this command will be executed.
 
- + diff --git a/doc/history.html b/doc/history.html index d9ebda83a..42be63256 100644 --- a/doc/history.html +++ b/doc/history.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); history | arthas - + -
目录

history

打印命令历史。

提示

历史指令会通过一个名叫 history 的文件持久化,所以 history 指令可以查看当前 arthas 服务器的所有历史命令,而不仅只是当前次会话使用过的命令。

参数说明

参数名称参数说明
[c:]清空历史指令
[n:]显示最近执行的 n 条指令

使用参考

#查看最近执行的3条指令
+    
目录

history

打印命令历史。

提示

历史指令会通过一个名叫 history 的文件持久化,所以 history 指令可以查看当前 arthas 服务器的所有历史命令,而不仅只是当前次会话使用过的命令。

参数说明

参数名称参数说明
[c:]清空历史指令
[n:]显示最近执行的 n 条指令

使用参考

#查看最近执行的3条指令
 $ history 3
   269  thread
   270  cls
@@ -45,6 +45,6 @@ $ history 3
  $ history 3
   1  history 3
 
- + diff --git a/doc/http-api.html b/doc/http-api.html index a0f9fe351..d0c0a03da 100644 --- a/doc/http-api.html +++ b/doc/http-api.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); Http API | arthas - + -
目录

Http API

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 接口。

请求数据格式

{
+    
目录

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 接口。

请求数据格式

{
   "action": "exec",
   "requestId": "req112",
   "sessionId": "94766d3c-8b39-42d3-8596-98aee3ccbefb",
@@ -136,7 +136,6 @@
         "message": "Welcome to arthas!"
       },
       {
-        "tutorials": "https://arthas.aliyun.com/doc/arthas-tutorials.html",
         "time": "2020-08-06 15:56:43",
         "type": "welcome",
         "jobId": 0,
@@ -155,7 +154,7 @@
   "consumerId": "8f7f6ad7bc2d4cb5aa57a530927a95cc_2",
   "state": "SUCCEEDED"
 }
-

异步执行命令

curl -Ss -XPOST http://localhost:8563/api -d '''
+

异步执行命令

curl -Ss -XPOST http://localhost:8563/api -d '''
 {
   "action":"async_exec",
   "command":"watch demo.MathGame primeFactors \"{params, returnObj, throwExp}\" ",
@@ -319,7 +318,7 @@
 
  • 使用json_pp/awk提取值
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 文档在新窗口打开。

提示

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 格式的值:

watch *MathGame prime* '#{ "params" : params, "returnObj" : returnObj, "throwExp": throwExp}' -x 2 -n 5
+

注意:

  • echo $json_data | tr -d '\n' : 删除换行符(line.separator的值),避免影响sed/json_pp命令处理。
  • awk -F'"' '{ print $4 }' : 使用双引号作为分隔符号

watch 命令输出 map 对象

watch 的结果值由计算watch-express ognl 表达式产生,可以通过改变 ognl 表达式来生成想要的值,请参考 OGNL 复杂表达式使用技巧。

提示

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 格式的值:

watch *MathGame prime* '#{ "params" : params, "returnObj" : returnObj, "throwExp": throwExp}' -x 2 -n 5
 

在 Telnet shell/WebConsole 中执行上面的命令,输出的结果:

ts=2020-08-06 16:57:20; [cost=0.241735ms] result=@LinkedHashMap[
     @String[params]:@Object[][
         @Integer[1],
@@ -379,6 +378,6 @@ EOF
             ...
 }
 

可以看到 watch 结果的 value 变成 map 对象,程序可以通过 key 读取结果。

- + diff --git a/doc/idea-plugin.html b/doc/idea-plugin.html index fb8c4ab4f..7995964a6 100644 --- a/doc/idea-plugin.html +++ b/doc/idea-plugin.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); IDEA Plugin | arthas - + -
目录

IDEA Plugin

Arthas-idea(部分命令可视化)

提示

插件由社区开发者提供。

Alibaba Cloud Toolkit 热部署组件(一键 retransform)

提示

热部署组件支持一键将编辑器中修改的 Java 源码快速编译,并更新到远端应用服务中,免去手动 dump、mc 的过程。此外,也可以一键还原 retransform 的类文件。

- +
目录

IDEA Plugin

Arthas-idea(部分命令可视化)

提示

插件由社区开发者提供。

Alibaba Cloud Toolkit 热部署组件(一键 retransform)

提示

热部署组件支持一键将编辑器中修改的 Java 源码快速编译,并更新到远端应用服务中,免去手动 dump、mc 的过程。此外,也可以一键还原 retransform 的类文件。

+ diff --git a/doc/index.html b/doc/index.html index fb64290d8..d1de5a429 100644 --- a/doc/index.html +++ b/doc/index.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); 简介 | arthas - + -
目录

简介

Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。

背景

通常,本地开发环境无法访问生产环境。如果在生产环境中遇到问题,则无法使用 IDE 远程调试。更糟糕的是,在生产环境中调试是不可接受的,因为它会暂停所有线程,导致服务暂停。

开发人员可以尝试在测试环境或者预发环境中复现生产环境中的问题。但是,某些问题无法在不同的环境中轻松复现,甚至在重新启动后就消失了。

如果您正在考虑在代码中添加一些日志以帮助解决问题,您将必须经历以下阶段:测试、预发,然后生产。这种方法效率低下,更糟糕的是,该问题可能无法解决,因为一旦 JVM 重新启动,它可能无法复现,如上文所述。

Arthas 旨在解决这些问题。开发人员可以在线解决生产问题。无需 JVM 重启,无需代码更改。 Arthas 作为观察者永远不会暂停正在运行的线程。

Arthas(阿尔萨斯)能为你做什么?

Arthas 是 Alibaba 开源的 Java 诊断工具,深受开发者喜爱。

当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  5. 是否有一个全局视角来查看系统的运行状况?
  6. 有什么办法可以监控到 JVM 的实时运行状态?
  7. 怎么快速定位应用的热点,生成火焰图?
  8. 怎样直接从 JVM 内查找某个类的实例?

Arthas 4.x 支持 JDK 8+,包括 JDK 17、JDK 21 和 JDK 25,支持 Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。

如果您在使用 Arthas,请让我们知道,您的使用对我们非常重要:查看在新窗口打开

Contributors

在新窗口打开

- +
目录

简介

Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。

背景

通常,本地开发环境无法访问生产环境。如果在生产环境中遇到问题,则无法使用 IDE 远程调试。更糟糕的是,在生产环境中调试是不可接受的,因为它会暂停所有线程,导致服务暂停。

开发人员可以尝试在测试环境或者预发环境中复现生产环境中的问题。但是,某些问题无法在不同的环境中轻松复现,甚至在重新启动后就消失了。

如果您正在考虑在代码中添加一些日志以帮助解决问题,您将必须经历以下阶段:测试、预发,然后生产。这种方法效率低下,更糟糕的是,该问题可能无法解决,因为一旦 JVM 重新启动,它可能无法复现,如上文所述。

Arthas 旨在解决这些问题。开发人员可以在线解决生产问题。无需 JVM 重启,无需代码更改。 Arthas 作为观察者永远不会暂停正在运行的线程。

Arthas(阿尔萨斯)能为你做什么?

Arthas 是 Alibaba 开源的 Java 诊断工具,深受开发者喜爱。

当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  5. 是否有一个全局视角来查看系统的运行状况?
  6. 有什么办法可以监控到 JVM 的实时运行状态?
  7. 怎么快速定位应用的热点,生成火焰图?
  8. 怎样直接从 JVM 内查找某个类的实例?

Arthas 4.x 支持 JDK 8+,包括 JDK 17、JDK 21 和 JDK 25,支持 Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。

如果您在使用 Arthas,请让我们知道,您的使用对我们非常重要:查看在新窗口打开

Contributors

在新窗口打开

+ diff --git a/doc/install-detail.html b/doc/install-detail.html index 9c32d244e..cdcc7ff2e 100644 --- a/doc/install-detail.html +++ b/doc/install-detail.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); Arthas Install | arthas - + -
目录

Arthas Install

快速安装

使用arthas-boot(推荐)

下载arthas-boot.jar,然后用java -jar的方式启动:

curl -O https://arthas.aliyun.com/arthas-boot.jar
+    
目录

Arthas Install

快速安装

使用arthas-boot(推荐)

下载arthas-boot.jar,然后用java -jar的方式启动:

curl -O https://arthas.aliyun.com/arthas-boot.jar
 java -jar arthas-boot.jar
 

打印帮助信息:

java -jar arthas-boot.jar -h
 
- + diff --git a/doc/jad.html b/doc/jad.html index ff2ccd179..e5b239922 100644 --- a/doc/jad.html +++ b/doc/jad.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); jad | arthas - + -
目录

jad

jad在线教程在新窗口打开

提示

反编译指定已加载类的源码

jad 命令将 JVM 中实际运行的 class 的 byte code 反编译成 java 代码,便于你理解业务逻辑;如需批量下载指定包的目录的 class 字节码可以参考 dump。

  • 在 Arthas Console 上,反编译出来的源码是带语法高亮的,阅读更方便
  • 当然,反编译出来的 java 代码可能会存在语法错误,但不影响你进行阅读理解

参数说明

参数名称参数说明
class-pattern类名表达式匹配
[c:]类所属 ClassLoader 的 hashcode
[classLoaderClass:]指定执行表达式的 ClassLoader 的 class name
[E]开启正则表达式匹配,默认为通配符匹配

使用参考

反编译java.lang.String

$ jad java.lang.String
+    
目录

jad

提示

反编译指定已加载类的源码

jad 命令将 JVM 中实际运行的 class 的 byte code 反编译成 java 代码,便于你理解业务逻辑;如需批量下载指定包的目录的 class 字节码可以参考 dump。

  • 在 Arthas Console 上,反编译出来的源码是带语法高亮的,阅读更方便
  • 当然,反编译出来的 java 代码可能会存在语法错误,但不影响你进行阅读理解

参数说明

参数名称参数说明
class-pattern类名表达式匹配
[c:]类所属 ClassLoader 的 hashcode
[classLoaderClass:]指定执行表达式的 ClassLoader 的 class name
[E]开启正则表达式匹配,默认为通配符匹配

使用参考

反编译java.lang.String

$ jad java.lang.String
 
 ClassLoader:
 
@@ -155,6 +155,6 @@ $ jad orgAffect(row-cnt:1) cost in 190 ms.
 

对于只有唯一实例的 ClassLoader 还可以通过--classLoaderClass指定 class name,使用起来更加方便:

--classLoaderClass 的值是 ClassLoader 的类名,只有匹配到唯一的 ClassLoader 实例时才能工作,目的是方便输入通用命令,而-c <hashcode>是动态变化的。

反编译时指定dump class文件目录

jad反编译需要将class dump到文件,默认会dump到logback.xml中配置的log目录下,使用-d/--directory可以将文件dump到指定目录。

$ jad demo.MathGame -d /tmp/jad/dump
 
- + diff --git a/doc/jfr.html b/doc/jfr.html index 100345f35..2da0abd31 100644 --- a/doc/jfr.html +++ b/doc/jfr.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); jfr | arthas - + -
目录

jfr

jfr在线教程在新窗口打开

提示

Java Flight Recorder (JFR) 是一种用于收集有关正在运行的 Java 应用程序的诊断和分析数据的工具。它集成到 Java 虚拟机 (JVM) 中,几乎不会造成性能开销,因此即使在负载较重的生产环境中也可以使用。

jfr 命令支持在程序动态运行过程中开启和关闭 JFR 记录。 记录收集有关 event 的数据。事件在特定时间点发生在 JVM 或 Java 应用程序中。每个事件都有一个名称、一个时间戳和一个可选的有效负载。负载是与事件相关的数据,例如 CPU 使用率、事件前后的 Java 堆大小、锁持有者的线程 ID 等。

jfr 命令基本运行结构是 jfr cmd [actionArg]

注意: JDK8 的 8u262 版本之后才支持 jfr

参数说明

参数名称参数说明
cmd要执行的操作 支持的命令【start,status,dump,stop】
actionArg属性名模式
[n:]记录名称
[r:]记录 id 值
[dumponexit:]程序退出时,是否要 dump 出 .jfr 文件,默认为 false
[d:]延迟多久后启动 JFR 记录,支持带单位配置,eg: 60s, 2m, 5h, 3d. 不带单位就是秒,默认无延迟
[duration:]JFR 记录持续时间,支持单位配置,不带单位就是秒,默认一直记录
[s:]采集 Event 的详细配置文件,默认是 default.jfc 位于 $JAVA_HOME/lib/jfr/default.jfc
[f:]将输出转储到指定路径
[maxage:]缓冲区数据最大文件记录保存时间,支持单位配置,不带单位就是秒,默认是不限制
[maxsize:]缓冲区的最大文件大小,支持单位配置, 不带单位是字节,m 或者 M 代表 MB,g 或者 G 代表 GB。
[state:]jfr 记录状态

启动 JFR 记录

$ jfr start
+    
目录

jfr

提示

Java Flight Recorder (JFR) 是一种用于收集有关正在运行的 Java 应用程序的诊断和分析数据的工具。它集成到 Java 虚拟机 (JVM) 中,几乎不会造成性能开销,因此即使在负载较重的生产环境中也可以使用。

jfr 命令支持在程序动态运行过程中开启和关闭 JFR 记录。 记录收集有关 event 的数据。事件在特定时间点发生在 JVM 或 Java 应用程序中。每个事件都有一个名称、一个时间戳和一个可选的有效负载。负载是与事件相关的数据,例如 CPU 使用率、事件前后的 Java 堆大小、锁持有者的线程 ID 等。

jfr 命令基本运行结构是 jfr cmd [actionArg]

注意: JDK8 的 8u262 版本之后才支持 jfr

参数说明

参数名称参数说明
cmd要执行的操作 支持的命令【start,status,dump,stop】
actionArg属性名模式
[n:]记录名称
[r:]记录 id 值
[dumponexit:]程序退出时,是否要 dump 出 .jfr 文件,默认为 false
[d:]延迟多久后启动 JFR 记录,支持带单位配置,eg: 60s, 2m, 5h, 3d. 不带单位就是秒,默认无延迟
[duration:]JFR 记录持续时间,支持单位配置,不带单位就是秒,默认一直记录
[s:]采集 Event 的详细配置文件,默认是 default.jfc 位于 $JAVA_HOME/lib/jfr/default.jfc
[f:]将输出转储到指定路径
[maxage:]缓冲区数据最大文件记录保存时间,支持单位配置,不带单位就是秒,默认是不限制
[maxsize:]缓冲区的最大文件大小,支持单位配置, 不带单位是字节,m 或者 M 代表 MB,g 或者 G 代表 GB。
[state:]jfr 记录状态

启动 JFR 记录

$ jfr start
 Started recording 1. No limit specified, using maxsize=250MB as default.
 

提示

默认情况下,开启的是默认参数的 jfr 记录

启动 jfr 记录,指定记录名,记录持续时间,记录文件保存路径。

$ jfr start -n myRecording --duration 60s -f /tmp/myRecording.jfr
 Started recording 2. The result will be written to:
@@ -57,6 +57,6 @@ Dump recording 1, The result will be written t
 Stop recording 1, The result will be written to:
 /tmp/test/arthas-output/20220819-202049.jfr
 

注意一条记录只能停止一次。

也可以指定记录输出路径。

通过浏览器查看 arthas-output 下面 JFR 记录的结果

默认情况下,arthas 使用 8563 端口,则可以打开: http://localhost:8563/arthas-output/在新窗口打开 查看到arthas-output目录下面的 JFR 记录结果:

生成的结果可以用支持 jfr 格式的工具来查看。比如:

  • JDK Mission Control : https://github.com/openjdk/jmc
- + diff --git a/doc/jvm.html b/doc/jvm.html index 9d1371ba1..8643d0135 100644 --- a/doc/jvm.html +++ b/doc/jvm.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); jvm | arthas - + -
目录

jvm

jvm在线教程在新窗口打开

提示

查看当前 JVM 信息

使用参考

$ jvm
+    
目录

jvm

提示

查看当前 JVM 信息

使用参考

$ jvm
 RUNTIME
 --------------------------------------------------------------------------------------------------------------
  MACHINE-NAME                   37@ff267334bb65
@@ -135,6 +135,6 @@ RUNTIME
  OPEN-FILE-DESCRIPTOR-COUNT     100
 Affect(row-cnt:0) cost in 88 ms.
 

THREAD 相关

  • COUNT: JVM 当前活跃的线程数
  • DAEMON-COUNT: JVM 当前活跃的守护线程数
  • PEAK-COUNT: 从 JVM 启动开始曾经活着的最大线程数
  • STARTED-COUNT: 从 JVM 启动开始总共启动过的线程次数
  • DEADLOCK-COUNT: JVM 当前死锁的线程数

文件描述符相关

  • MAX-FILE-DESCRIPTOR-COUNT:JVM 进程最大可以打开的文件描述符数
  • OPEN-FILE-DESCRIPTOR-COUNT:JVM 当前打开的文件描述符数
- + diff --git a/doc/keymap.html b/doc/keymap.html index e6f1793a2..48cbba7b1 100644 --- a/doc/keymap.html +++ b/doc/keymap.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); keymap | arthas - + -
目录

keymap

keymap在线教程在新窗口打开

keymap命令输出当前的快捷键映射表:

默认的快捷键如下:

快捷键快捷键说明命令名称命令说明
"\C-a"ctrl + abeginning-of-line跳到行首
"\C-e"ctrl + eend-of-line跳到行尾
"\C-f"ctrl + fforward-word向前移动一个单词
"\C-b"ctrl + bbackward-word向后移动一个单词
"\e[D"键盘左方向键backward-char光标向前移动一个字符
"\e[C"键盘右方向键forward-char光标向后移动一个字符
"\e[B"键盘下方向键next-history下翻显示下一个命令
"\e[A"键盘上方向键previous-history上翻显示上一个命令
"\C-h"ctrl + hbackward-delete-char向后删除一个字符
"\C-?"ctrl + shift + /backward-delete-char向后删除一个字符
"\C-u"ctrl + uundo撤销上一个命令,相当于清空当前行
"\C-d"ctrl + ddelete-char删除当前光标所在字符
"\C-k"ctrl + kkill-line删除当前光标到行尾的所有字符
"\C-i"ctrl + icomplete自动补全,相当于敲TAB
"\C-j"ctrl + jaccept-line结束当前行,相当于敲回车
"\C-m"ctrl + maccept-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设置为光标向前一个字符,则设置如下,首先拷贝默认配置

"\C-a": beginning-of-line
+    
目录

keymap

keymap命令输出当前的快捷键映射表:

默认的快捷键如下:

快捷键快捷键说明命令名称命令说明
"\C-a"ctrl + abeginning-of-line跳到行首
"\C-e"ctrl + eend-of-line跳到行尾
"\C-f"ctrl + fforward-word向前移动一个单词
"\C-b"ctrl + bbackward-word向后移动一个单词
"\e[D"键盘左方向键backward-char光标向前移动一个字符
"\e[C"键盘右方向键forward-char光标向后移动一个字符
"\e[B"键盘下方向键next-history下翻显示下一个命令
"\e[A"键盘上方向键previous-history上翻显示上一个命令
"\C-h"ctrl + hbackward-delete-char向后删除一个字符
"\C-?"ctrl + shift + /backward-delete-char向后删除一个字符
"\C-u"ctrl + uundo撤销上一个命令,相当于清空当前行
"\C-d"ctrl + ddelete-char删除当前光标所在字符
"\C-k"ctrl + kkill-line删除当前光标到行尾的所有字符
"\C-i"ctrl + icomplete自动补全,相当于敲TAB
"\C-j"ctrl + jaccept-line结束当前行,相当于敲回车
"\C-m"ctrl + maccept-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设置为光标向前一个字符,则设置如下,首先拷贝默认配置

"\C-a": beginning-of-line
 "\C-e": end-of-line
 "\C-f": forward-word
 "\C-b": backward-word
@@ -55,6 +55,6 @@
 "\C-x\e[3~": backward-kill-line
 "\e\C-?": backward-kill-word
 

然后把"\C-h": backward-delete-char换成"\C-h": backward-char,然后重新连接即可。

后台异步命令相关快捷键

  • ctrl + c: 终止当前命令
  • ctrl + z: 挂起当前命令,后续可以 bg/fg 重新支持此命令,或 kill 掉
  • ctrl + a: 回到行首
  • ctrl + e: 回到行尾
- + diff --git a/doc/line.html b/doc/line.html index fa5a95a36..222f1081e 100644 --- a/doc/line.html +++ b/doc/line.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); line | arthas - + -
目录

line

提示

在指定源码行观察方法入参、局部变量和表达式结果。

line 命令会在目标方法的指定源码行插入探针。当执行到该行时,Arthas 会输出当前线程、耗时、行号以及 OGNL 表达式结果。它适合排查“方法内部某一行变量值不符合预期”的问题。

注意

line 通过字节码增强实现。线上或预发环境使用时,请尽量明确 --class、--method、--desc 和 --line,并使用 -n 限制输出次数。诊断结束后可以执行 reset 或 stop 还原增强过的类。

参数说明

参数名称参数说明
--class <class-pattern>需要观察的类名,必填,默认通配符匹配
--method <method-pattern>需要观察的方法名,可选,不指定时匹配类里的所有可插桩方法
--desc <method-desc>JVM 方法描述符,可选,用于区分重载方法,比如 (I)Ljava/util/List;
--line <line>需要观察的源码行号,支持逗号分隔和重复指定,比如 --line 51,57 --line 61
--express <express>观察表达式,默认值是 {params, localVarMap}
--condition <express>条件表达式,条件成立时才输出
--list-lines只列出匹配方法的可用行号,不增强类
[E]开启正则表达式匹配,默认是通配符匹配
[x:]输出对象展开层级,默认值为 1
[M:]输出结果大小限制,默认使用 options 中的 object-size-limit
[n:]执行次数限制,默认值为 100
[c:]指定 ClassLoader hash,只增强该 ClassLoader 加载的类
[m <arg>]指定 Class 最大匹配数量,默认值为 50。长格式为 [maxMatch <arg>]
--stack命中行号时输出当前线程栈
--stack-depth <depth>--stack 的最大栈深度,默认值为 32,最大值为 256

表达式变量

line 命令复用 Arthas 的 OGNL 表达式机制。常用变量如下:

变量说明
params方法入参数组
target当前对象,静态方法为 null
clazz当前类
method当前方法信息
lineNumber当前命中的源码行号
argNames方法参数名数组,依赖目标类保留调试信息
localVars / locals当前行可见的局部变量值数组
localVarNames当前行可见的局部变量名数组
localVarMap局部变量名到变量值的映射
#cost从方法入口到当前行的耗时,单位为 ms

局部变量名和值依赖目标类编译时保留 LocalVariableTable 调试信息。如果目标类没有调试信息,localVarMap 可能为空或不完整。

使用示例

启动 Demo

启动快速入门里的 math-game。

查看可用行号

先使用 --list-lines 找到目标方法中可以插桩的源码行:

$ line --list-lines --class demo.MathGame --method primeFactors
+    
目录

line

提示

在指定源码行观察方法入参、局部变量和表达式结果。

line 命令会在目标方法的指定源码行插入探针。当执行到该行时,Arthas 会输出当前线程、耗时、行号以及 OGNL 表达式结果。它适合排查“方法内部某一行变量值不符合预期”的问题。

注意

line 通过字节码增强实现。线上或预发环境使用时,请尽量明确 --class、--method、--desc 和 --line,并使用 -n 限制输出次数。诊断结束后可以执行 reset 或 stop 还原增强过的类。

参数说明

参数名称参数说明
--class <class-pattern>需要观察的类名,必填,默认通配符匹配
--method <method-pattern>需要观察的方法名,可选,不指定时匹配类里的所有可插桩方法
--desc <method-desc>JVM 方法描述符,可选,用于区分重载方法,比如 (I)Ljava/util/List;
--line <line>需要观察的源码行号,支持逗号分隔和重复指定,比如 --line 51,57 --line 61
--express <express>观察表达式,默认值是 {params, localVarMap}
--condition <express>条件表达式,条件成立时才输出
--list-lines只列出匹配方法的可用行号,不增强类
[E]开启正则表达式匹配,默认是通配符匹配
[x:]输出对象展开层级,默认值为 1
[M:]输出结果大小限制,默认使用 options 中的 object-size-limit
[n:]执行次数限制,默认值为 100
[c:]指定 ClassLoader hash,只增强该 ClassLoader 加载的类
[m <arg>]指定 Class 最大匹配数量,默认值为 50。长格式为 [maxMatch <arg>]
--stack命中行号时输出当前线程栈
--stack-depth <depth>--stack 的最大栈深度,默认值为 32,最大值为 256

表达式变量

line 命令复用 Arthas 的 OGNL 表达式机制。常用变量如下:

变量说明
params方法入参数组
target当前对象,静态方法为 null
clazz当前类
method当前方法信息
lineNumber当前命中的源码行号
argNames方法参数名数组,依赖目标类保留调试信息
localVars / locals当前行可见的局部变量值数组
localVarNames当前行可见的局部变量名数组
localVarMap局部变量名到变量值的映射
#cost从方法入口到当前行的耗时,单位为 ms

局部变量名和值依赖目标类编译时保留 LocalVariableTable 调试信息。如果目标类没有调试信息,localVarMap 可能为空或不完整。

复杂的观察和条件表达式、空值处理及排错方法参见 OGNL 复杂表达式使用技巧。

使用示例

启动 Demo

启动快速入门里的 math-game。

查看可用行号

先使用 --list-lines 找到目标方法中可以插桩的源码行:

$ line --list-lines --class demo.MathGame --method primeFactors
 class=demo.MathGame source=MathGame.java
 method=primeFactors(I)Ljava/util/List; lines=[44, 45, 46, 49, 50, 51, 52, 53, 54, 55, 57, 61]
 

观察指定行的入参和局部变量

默认表达式为 {params, localVarMap}:

$ line --class demo.MathGame --method primeFactors --line 51 -n 2 -x 2
@@ -60,6 +60,6 @@ Command execution times exceed lim
 

指定方法描述符

当方法重载时,建议使用 --desc 精确指定 JVM 方法描述符:

line --class demo.MathGame --method primeFactors --desc '(I)Ljava/util/List;' --line 51
 

可以通过 sm -d demo.MathGame primeFactors 查看方法描述符。

输出当前线程栈

命中行号时输出当前线程栈:

line --class demo.MathGame --method primeFactors --line 57 --stack --stack-depth 8 -n 1
 

注意事项

  • --line 传入的行号必须大于 0,并且最多指定 256 个不同的行号。
  • line 会跳过构造方法、类初始化方法、native 方法和 abstract 方法。
  • 如果省略 --method,同一个类里多个包含目标行号的方法都可能被增强,建议先用 --list-lines 和 --desc 收敛目标。
  • 如果目标类没有 LineNumberTable,--list-lines 不会列出可用行号,line 也无法在源码行插入探针。
  • 重复执行同一个行号不会重复插入相同探针;新增行号时会尽量只追加缺失的行号探针。
- + diff --git a/doc/logger.html b/doc/logger.html index 5fbc5b750..bbc3ac71e 100644 --- a/doc/logger.html +++ b/doc/logger.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); logger | arthas - + -
目录

logger

logger在线教程在新窗口打开

提示

查看 logger 信息,更新 logger level

使用参考

查看所有 logger 信息

以下面的logback.xml为例:

<?xml version="1.0" encoding="UTF-8"?>
+    
目录

logger

提示

查看 logger 信息,更新 logger level

使用参考

查看所有 logger 信息

以下面的logback.xml为例:

<?xml version="1.0" encoding="UTF-8"?>
 <configuration>
     <appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <file>app.log</file>
@@ -171,6 +171,6 @@ update logger level success.
  codeSource                             file:/Users/hengyunabc/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar
 ...
 
- + diff --git a/doc/manual-install.html b/doc/manual-install.html index b19fd7bf5..96011affd 100644 --- a/doc/manual-install.html +++ b/doc/manual-install.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); 手动安装 Arthas | arthas - + -
目录

手动安装 Arthas

  1. 下载最新版本

    最新版本,点击下载:在新窗口打开

  2. 解压缩 arthas 的压缩包

    unzip arthas-packaging-bin.zip
    +    
    目录

    手动安装 Arthas

    1. 下载最新版本

      最新版本,点击下载:在新窗口打开

    2. 解压缩 arthas 的压缩包

      unzip arthas-packaging-bin.zip
       
    3. 安装 Arthas

      安装之前最好把所有老版本的 Arthas 全都删掉

      sudo su admin
       rm -rf /home/admin/.arthas/lib/*
       cd arthas
      @@ -55,6 +55,6 @@ as-service.bat -pid <pid> --interact
        -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里。

    4. attach 成功之后,使用 telnet 连接

      telnet 127.0.0.1 3658
       
    - + diff --git a/doc/mbean.html b/doc/mbean.html index a0dff5f1b..d93678a51 100644 --- a/doc/mbean.html +++ b/doc/mbean.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); mbean | arthas - + -
    目录

    mbean

    mbean在线教程在新窗口打开

    提示

    查看 Mbean 的信息

    这个命令可以便捷的查看或监控 Mbean 的属性信息。

    参数说明

    参数名称参数说明
    name-pattern名称表达式匹配
    attribute-pattern属性名表达式匹配
    [m]查看元信息
    [i:]刷新属性值的时间间隔 (ms)
    [n:]刷新属性值的次数
    [E]开启正则表达式匹配,默认为通配符匹配。仅对属性名有效

    使用参考

    列出所有 Mbean 的名称:

    mbean
    +    
    目录

    mbean

    提示

    查看 Mbean 的信息

    这个命令可以便捷的查看或监控 Mbean 的属性信息。

    参数说明

    参数名称参数说明
    name-pattern名称表达式匹配
    attribute-pattern属性名表达式匹配
    [m]查看元信息
    [i:]刷新属性值的时间间隔 (ms)
    [n:]刷新属性值的次数
    [E]开启正则表达式匹配,默认为通配符匹配。仅对属性名有效

    使用参考

    列出所有 Mbean 的名称:

    mbean
     

    查看 Mbean 的元信息:

    mbean -m java.lang:type=Threading
     

    查看 mbean 属性信息:

    mbean java.lang:type=Threading
     

    mbean 的 name 支持通配符匹配:

    mbean java.lang:type=Th*
    @@ -44,6 +44,6 @@
     

    使用-i命令实时监控:

    mbean -i 1000 java.lang:type=Threading *Count
     

    实时监控使用-i,使用-n命令执行命令的次数(默认为 100 次):

    mbean -i 1000 -n 50 java.lang:type=Threading *Count
     
    - + diff --git a/doc/mc.html b/doc/mc.html index 225855064..a8353c8f2 100644 --- a/doc/mc.html +++ b/doc/mc.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); mc | arthas - + -
    目录

    mc

    mc-retransform在线教程在新窗口打开

    使用参考

    提示

    Memory Compiler/内存编译器,编译.java文件生成.class。

    mc /tmp/Test.java
    +    
    目录

    mc

    使用参考

    提示

    Memory Compiler/内存编译器,编译.java文件生成.class。

    mc /tmp/Test.java
     

    可以通过-c参数指定 classloader:

    mc -c 327a647b /tmp/Test.java
     

    也可以通过--classLoaderClass参数指定 ClassLoader:

    $ mc --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader /tmp/UserController.java -d /tmp
     Memory compiler output:
    @@ -43,6 +43,6 @@ Memory compiler output:
     Affect(row-cnt:1) cost in 346 ms
     

    可以通过-d命令指定输出目录:

    mc -d /tmp/output /tmp/ClassA.java /tmp/ClassB.java
     

    编译生成.class文件之后,可以结合retransform命令实现热更新代码。

    注意

    注意,mc 命令有可能失败。如果编译失败可以在本地编译好.class文件,再上传到服务器。具体参考retransform命令说明。

    - + diff --git a/doc/mcp-server.html b/doc/mcp-server.html index 9abb40034..5f60f03ab 100644 --- a/doc/mcp-server.html +++ b/doc/mcp-server.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); Arthas MCP Server | arthas - + -
    目录

    Arthas MCP Server

    概览

    Arthas MCP Server 是 Arthas 的实验性模块,实现了基于 MCP(Model Context Protocol)在新窗口打开 协议的服务端。该模块通过 HTTP/Netty 提供统一的 JSON-RPC 2.0 接口,使 AI 助手能够通过工具调用的方式执行 Arthas 诊断命令。

    MCP(Model Context Protocol)是由 Anthropic 提出的一种标准化协议,用于连接 AI 助手与各种工具和数据源。通过 Arthas MCP Server,AI 助手可以自然地执行 Java 应用诊断任务,大幅提升开发和运维效率。

    主要特性

    • AI 原生集成:支持主流 AI 客户端(Claude Desktop、Cherry Studio、Cline 等)
    • 标准化协议:完整实现 MCP 协议规范(版本 2025-06-18),支持 Streamable Http 传输
    • 29 个诊断工具:涵盖 JVM 监控、类加载、方法追踪等核心功能
    • 安全认证:支持 Bearer Token 认证机制

    支持的诊断工具

    Arthas MCP Server 集成了 29 个诊断工具,按功能分类如下:

    JVM 相关工具(13 个)

    工具功能描述
    dashboard实时展示 JVM/应用面板,支持自定义刷新间隔和次数控制
    heapdump生成 JVM heap dump 文件,支持 --live 选项只导出存活对象
    jvm查看当前 JVM 的详细运行时信息
    mbean查看或监控 MBean 属性信息,支持实时刷新和模式匹配
    memory查看 JVM 的内存使用情况
    thread查看线程信息及堆栈,支持查找阻塞线程和最忙线程
    sysprop查看或修改系统属性,支持动态修改 JVM 系统属性
    sysenv查看系统环境变量
    vmoption查看或更新 VM 选项,支持动态调整 JVM 参数
    perfcounter查看 JVM Perf Counter 性能计数器信息
    vmtool虚拟机工具集合,支持强制 GC、获取实例、线程中断等
    getstatic查看类的静态字段值,支持指定 ClassLoader 和 OGNL 表达式
    ognl执行 OGNL 表达式,动态调用方法和访问字段

    Class/ClassLoader 相关工具(8 个)

    工具功能描述
    sc搜索 JVM 已加载的类,支持通配符和正则表达式匹配,可查看类详情(类加载器、接口、父类、注解等)
    sm搜索已加载类的方法信息,支持通配符和正则表达式,可查看方法签名、参数类型、注解等
    jad反编译指定已加载类的源码,将 JVM 中实际运行的 class 字节码反编译为 Java 代码
    classloaderClassLoader 诊断工具,查看类加载器统计、继承树、URLs,支持资源查找和类加载操作;搜索类优先使用 sc 工具
    mc内存编译器,将 .java 源码文件编译为 .class 字节码文件
    redefine重新加载类的字节码,允许在 JVM 运行时对已存在的类进行热更新
    retransform热加载类的字节码,对已加载的类进行字节码修改并使其生效
    dump将 JVM 中实际运行的 class 字节码导出到指定目录,适用于批量下载指定包的字节码

    监控诊断工具(6 个)

    工具功能描述
    monitor实时监控指定类的指定方法的调用情况,输出调用次数、成功率、平均 RT 等统计信息
    stack输出当前方法被调用的调用路径,帮助分析方法的调用链路
    trace追踪方法内部调用路径,输出每个节点的耗时信息,支持条件过滤
    tt方法执行数据的时空隧道,记录指定方法每次调用的入参和返回信息,支持事后查看和重放
    watch观察指定方法的调用情况,包含入参、返回值和抛出异常等信息,支持实时流式输出
    profilerAsync Profiler 诊断工具,用于采样 CPU/alloc/lock 等事件并输出火焰图、JFR 等格式

    Arthas 辅助工具(2 个)

    工具功能描述
    viewfile查看文件内容(仅允许在配置的目录白名单内查看),支持 cursor/offset 分段读取,避免一次性返回大量内容
    options查看或修改 Arthas 全局开关选项

    快速开始

    1. 配置 MCP 服务

    在 arthas.properties 配置文件中启用 MCP 服务:

    # MCP (Model Context Protocol) configuration
    +    
    目录

    Arthas MCP Server

    概览

    Arthas MCP Server 是 Arthas 的实验性模块,实现了基于 MCP(Model Context Protocol)在新窗口打开 协议的服务端。该模块通过 HTTP/Netty 提供统一的 JSON-RPC 2.0 接口,使 AI 助手能够通过工具调用的方式执行 Arthas 诊断命令。

    MCP(Model Context Protocol)是由 Anthropic 提出的一种标准化协议,用于连接 AI 助手与各种工具和数据源。通过 Arthas MCP Server,AI 助手可以自然地执行 Java 应用诊断任务,大幅提升开发和运维效率。

    主要特性

    • AI 原生集成:支持主流 AI 客户端(Claude Desktop、Cherry Studio、Cline 等)
    • 标准化协议:完整实现 MCP 协议规范(版本 2025-06-18),支持 Streamable Http 传输
    • 29 个诊断工具:涵盖 JVM 监控、类加载、方法追踪等核心功能
    • 安全认证:支持 Bearer Token 认证机制

    支持的诊断工具

    Arthas MCP Server 集成了 29 个诊断工具,按功能分类如下:

    JVM 相关工具(13 个)

    工具功能描述
    dashboard实时展示 JVM/应用面板,支持自定义刷新间隔和次数控制
    heapdump生成 JVM heap dump 文件,支持 --live 选项只导出存活对象
    jvm查看当前 JVM 的详细运行时信息
    mbean查看或监控 MBean 属性信息,支持实时刷新和模式匹配
    memory查看 JVM 的内存使用情况
    thread查看线程信息及堆栈,支持查找阻塞线程和最忙线程
    sysprop查看或修改系统属性,支持动态修改 JVM 系统属性
    sysenv查看系统环境变量
    vmoption查看或更新 VM 选项,支持动态调整 JVM 参数
    perfcounter查看 JVM Perf Counter 性能计数器信息
    vmtool虚拟机工具集合,支持强制 GC、获取实例、线程中断等
    getstatic查看类的静态字段值,支持指定 ClassLoader 和 OGNL 表达式
    ognl执行 OGNL 表达式,动态调用方法和访问字段

    Class/ClassLoader 相关工具(8 个)

    工具功能描述
    sc搜索 JVM 已加载的类,支持通配符和正则表达式匹配,可查看类详情(类加载器、接口、父类、注解等)
    sm搜索已加载类的方法信息,支持通配符和正则表达式,可查看方法签名、参数类型、注解等
    jad反编译指定已加载类的源码,将 JVM 中实际运行的 class 字节码反编译为 Java 代码
    classloaderClassLoader 诊断工具,查看类加载器统计、继承树、URLs,支持资源查找和类加载操作;搜索类优先使用 sc 工具
    mc内存编译器,将 .java 源码文件编译为 .class 字节码文件
    redefine重新加载类的字节码,允许在 JVM 运行时对已存在的类进行热更新
    retransform热加载类的字节码,对已加载的类进行字节码修改并使其生效
    dump将 JVM 中实际运行的 class 字节码导出到指定目录,适用于批量下载指定包的字节码

    监控诊断工具(6 个)

    工具功能描述
    monitor实时监控指定类的指定方法的调用情况,输出调用次数、成功率、平均 RT 等统计信息
    stack输出当前方法被调用的调用路径,帮助分析方法的调用链路
    trace追踪方法内部调用路径,输出每个节点的耗时信息,支持条件过滤
    tt方法执行数据的时空隧道,记录指定方法每次调用的入参和返回信息,支持事后查看和重放
    watch观察指定方法的调用情况,包含入参、返回值和抛出异常等信息,支持实时流式输出
    profilerAsync Profiler 诊断工具,用于采样 CPU/alloc/lock 等事件并输出火焰图、JFR 等格式

    Arthas 辅助工具(2 个)

    工具功能描述
    viewfile查看文件内容(仅允许在配置的目录白名单内查看),支持 cursor/offset 分段读取,避免一次性返回大量内容
    options查看或修改 Arthas 全局开关选项

    提示

    AI Agent 调用 ognl、getstatic、vmtool、watch、trace、monitor、stack 或 tt 的表达式参数前,建议先阅读 OGNL 复杂表达式使用技巧。其中说明了原始表达式参数与完整命令的区别、各命令可用变量以及逐步验证方法。

    快速开始

    1. 配置 MCP 服务

    在 arthas.properties 配置文件中启用 MCP 服务:

    # MCP (Model Context Protocol) configuration
     arthas.mcpEndpoint=/mcp
     

    2. 启动应用

    正常启动 Arthas 或带有 Arthas 的 Java 应用。默认情况下,MCP 服务会在 HTTP 端口 8563 上暴露。

    验证 MCP 服务是否启动:

    curl http://localhost:8563/mcp
     

    如果返回 MCP 协议信息,说明服务已成功启动。

    3. 配置 AI 客户端

    以下是几种主流 AI 客户端的配置方式:

    Cherry Studio / Cline

    在设置中添加 MCP 服务器配置:

    {
    @@ -63,6 +63,6 @@
     }
     

    注意

    注意:Authorization header 中的 token 必须与 arthas.password 配置的值完全一致。

    viewfile 工具目录白名单配置

    viewfile 工具默认只允许查看以下目录中的文件:

    • 当前工作目录下的 arthas-output 目录(若存在)
    • 用户 Home 目录下的 ~/logs/ 目录(若存在)

    可通过环境变量扩展允许目录:

    export ARTHAS_MCP_VIEWFILE_ALLOWED_DIRS=/path/to/dir1,/path/to/dir2
     

    反馈与贡献

    提示

    Arthas MCP Server 是实验性功能,欢迎提供反馈和建议!

    - + diff --git a/doc/memory.html b/doc/memory.html index 6e34b7e78..270f08146 100644 --- a/doc/memory.html +++ b/doc/memory.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); memory | arthas - + -
    目录

    memory

    查看 JVM 内存信息。

    具体字段信息,参考:

    具体代码:

    • https://github.com/alibaba/arthas/blob/master/core/src/main/java/com/taobao/arthas/core/command/monitor200/MemoryCommand.java

    使用参考

    $ memory
    +    
    目录

    memory

    查看 JVM 内存信息。

    具体字段信息,参考:

    具体代码:

    • https://github.com/alibaba/arthas/blob/master/core/src/main/java/com/taobao/arthas/core/command/monitor200/MemoryCommand.java

    使用参考

    $ memory
     Memory                           used      total      max        usage
     heap                             32M       256M       4096M      0.79%
     g1_eden_space                    11M       68M        -1         16.18%
    @@ -50,6 +50,6 @@ codeheap_'non-profiled_nmethods' 685K      2496K      120032K    0.57%
     mapped                           0K        0K         -          0.00%
     direct                           48M       48M        -          100.00%
     
    - + diff --git a/doc/monitor.html b/doc/monitor.html index 92555e78b..79f02fb59 100644 --- a/doc/monitor.html +++ b/doc/monitor.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); monitor | arthas - + -
    目录

    monitor

    monitor在线教程在新窗口打开

    提示

    方法执行监控

    对匹配 class-pattern/method-pattern/condition-express的类、方法的调用进行监控。

    monitor 命令是一个非实时返回命令.

    实时返回命令是输入之后立即返回,而非实时返回的命令,则是不断的等待目标 Java 进程返回信息,直到用户输入 Ctrl+C 为止。

    服务端是以任务的形式在后台跑任务,植入的代码随着任务的中止而不会被执行,所以任务关闭后,不会对原有性能产生太大影响,而且原则上,任何 Arthas 命令不会引起原有业务逻辑的改变。

    监控的维度说明

    监控项说明
    timestamp时间戳
    classJava 类
    method方法(构造方法、普通方法)
    total调用次数
    success成功次数
    fail失败次数
    rt平均 RT
    fail-rate失败率

    参数说明

    方法拥有一个命名参数 [c:],意思是统计周期(cycle of output),拥有一个整型的参数值

    参数名称参数说明
    class-pattern类名表达式匹配
    method-pattern方法名表达式匹配
    condition-express条件表达式
    [E]开启正则表达式匹配,默认为通配符匹配
    [c:]统计周期,默认值为 60 秒
    --classloader指定 classloader hash,只增强该 classloader 加载的类
    [b]在方法调用之前计算 condition-express
    [m <arg>]指定 Class 最大匹配数量,默认值为 50。长格式为[maxMatch <arg>]。

    使用参考

    $ monitor -c 5 demo.MathGame primeFactors
    +    
    目录

    monitor

    提示

    方法执行监控

    对匹配 class-pattern/method-pattern/condition-express的类、方法的调用进行监控。

    monitor 命令是一个非实时返回命令.

    实时返回命令是输入之后立即返回,而非实时返回的命令,则是不断的等待目标 Java 进程返回信息,直到用户输入 Ctrl+C 为止。

    服务端是以任务的形式在后台跑任务,植入的代码随着任务的中止而不会被执行,所以任务关闭后,不会对原有性能产生太大影响,而且原则上,任何 Arthas 命令不会引起原有业务逻辑的改变。

    监控的维度说明

    监控项说明
    timestamp时间戳
    classJava 类
    method方法(构造方法、普通方法)
    total调用次数
    success成功次数
    fail失败次数
    rt平均 RT
    fail-rate失败率

    参数说明

    方法拥有一个命名参数 [c:],意思是统计周期(cycle of output),拥有一个整型的参数值

    参数名称参数说明
    class-pattern类名表达式匹配
    method-pattern方法名表达式匹配
    condition-express条件表达式
    [E]开启正则表达式匹配,默认为通配符匹配
    [c:]统计周期,默认值为 60 秒
    --classloader指定 classloader hash,只增强该 classloader 加载的类
    [b]在方法调用之前计算 condition-express
    [m <arg>]指定 Class 最大匹配数量,默认值为 50。长格式为[maxMatch <arg>]。

    condition-express 使用 OGNL 语法。可用变量参见表达式核心变量,复杂条件的写法与排错方法参见 OGNL 复杂表达式使用技巧。

    使用参考

    $ monitor -c 5 demo.MathGame primeFactors
     Press Ctrl+C to abort.
     Affect(class-cnt:1 , method-cnt:1) cost in 94 ms.
      timestamp            class          method        total  success  fail  avg-rt(ms)  fail-rate
    @@ -118,6 +118,6 @@ Affect(class count: 2020-09-02 09:42:17  demo.MathGame  primeFactors    2       0        2      0.10      100.00%
     
    - + diff --git a/doc/ognl-express.html b/doc/ognl-express.html new file mode 100644 index 000000000..d2b14d7b9 --- /dev/null +++ b/doc/ognl-express.html @@ -0,0 +1,77 @@ + + + + + + + + + OGNL 复杂表达式使用技巧 | arthas + + + + +
    目录

    OGNL 复杂表达式使用技巧

    本页介绍 Arthas 中较复杂、但仍适合在线诊断的 OGNL 写法,重点说明变量、集合筛选与投影、临时结果组装、空值处理和 ClassLoader。“已验证的复杂表达式”一节中的完整命令均使用本仓库的 math-game 作为目标 JVM,通过真实 Arthas attach 会话验证;线程数、线程名、内存地址等动态结果会因环境不同而变化。

    基础命令参数请先阅读 ognl,watch 等命令提供的变量请阅读表达式核心变量。

    注意

    OGNL 在目标 JVM 内执行,调用方法可能读取或修改应用状态。生产环境默认只生成和执行只读表达式,并限制对象数量与展开深度。不要调用应用对象的 set*、add、remove、clear 等方法,也不要做文件、网络、进程、ClassLoader、反射提权或线程控制操作。本文对新建临时 Map 的 put 只修改本次表达式创建的对象。

    先确认表达式在哪个上下文执行

    语法相同不代表可用变量相同。AI Agent 最常见的错误之一,是把其他命令的上下文变量直接放进 ognl 命令。

    使用位置可直接使用的根对象或变量常见错误
    ognl 命令静态成员、构造器、字面量和自己定义的 #变量使用 params、target、returnObj 或 instances
    getstatic 的表达式被读取的静态字段值是根对象把它误当成没有根对象的独立 ognl 表达式
    watch、stack、monitor、tt 等观察或条件表达式params、target、returnObj、throwExp、isReturn 等 Advice 变量在方法进入点读取尚不存在的返回值;在异常点直接调用 returnObj
    trace 等条件表达式对应命令暴露的 Advice 变量;部分命令还提供 #cost假设每个命令都有 #cost
    line --express / --conditionAdvice 变量以及 lineNumber、localVarMap、#cost 等行级变量在其他命令中使用 localVarMap 或 lineNumber
    vmtool --expressinstances,它是 getInstances 返回的数组在普通 ognl 命令中使用 instances

    还要区分“完整 Arthas 命令”和“表达式参数”:

    # Arthas 终端需要完整命令,并用外层单引号保护表达式
    +ognl '#value=@java.lang.System@getProperty("java.version"), #value'
    +

    如果 MCP、HTTP API 或其他工具已经提供名为 expression、express 或 conditionExpress 的独立参数,只传原始表达式,不要再添加 ognl、命令选项、外层单引号或 Markdown 代码围栏:

    #value=@java.lang.System@getProperty("java.version"), #value
    +

    稳定的语法积木

    目的语法说明
    定义临时变量#name=value自定义变量必须带 #
    顺序执行并返回最后一项#a=1, #b=2, #a+#b使用逗号,不要使用分号;分号可能被 Arthas 当成命令分隔符
    访问静态方法或字段@完整类名@method()、@完整类名@FIELD两个 @ 都不能省略;优先写完整类名
    创建临时对象new java.util.LinkedHashMap()不要写 Java 泛型,如 new HashMap<String,Object>()
    创建 List{1, 2, 3}结果是一个 List,不是 Java 数组
    创建 Map#{"name":"arthas", "count":1}# 和 { 之间不要插入空格或其他字符
    创建数组new java.lang.String[]{"a", "b"}需要明确数组类型
    集合投影items.{#this.getName()}对每一项求值,返回一个新 List
    集合筛选items.{? #this != null}返回所有匹配项
    第一项/最后一项筛选items.{^ condition}、items.{$ condition}返回的仍是 List;取 [0] 前应考虑空结果
    当前遍历项#this嵌套筛选或投影时含义会随当前层级改变

    为了减少属性解析和重载选择的不确定性,复杂表达式中建议显式调用公开 getter,例如使用 #this.getName(),而不是 #this.name。访问 Map 时建议使用 get("key")、containsKey("key"),而不是依赖点号属性缩写。

    已验证的复杂表达式

    提示

    为便于在任意演示 JVM 中复现,本节部分例子使用 Thread.getAllStackTraces() 获得集合。它会抓取全部线程的栈;在线程很多的生产 JVM 中,应优先使用 thread 等专用命令,或先评估开销,不要高频执行这些示例。

    筛选、投影、第一项和最后一项

    下面的表达式先定义数字列表,再一次返回投影、筛选、第一项和最后一项的结果:

    ognl -x 3 '#numbers={1,2,3,4,5,6}, #{"projection":#numbers.{#this * 10},"selection":#numbers.{? #this % 2 == 0},"first":#numbers.{^ #this % 2 == 0}[0],"last":#numbers.{$ #this % 2 == 0}[0]}'
    +

    这里已知偶数一定存在,所以可以直接访问 [0]。对于运行期集合,应先保存筛选结果并检查是否为空:

    ognl '#matched={1,3,5}.{^ #this % 2 == 0}, #matched.isEmpty() ? null : #matched[0]'
    +

    用临时变量组装结构化结果

    长表达式不要重复执行昂贵方法。先保存中间值,最后返回一个新建的 LinkedHashMap:

    ognl -x 2 '#result=new java.util.LinkedHashMap(), #props=@java.lang.System@getProperties(), #threads=@java.lang.Thread@getAllStackTraces(), #result.put("javaVersion", #props.get("java.version")), #result.put("javaHome", #props.get("java.home")), #result.put("threadCount", #threads.size()), #result'
    +

    返回结果的键是 javaVersion、javaHome 和 threadCount。逗号连接的子表达式按顺序求值,整个表达式的值是最后的 #result。

    先筛选,再只返回需要的字段

    ognl '@java.lang.Thread@getAllStackTraces().keySet().{? #this.isAlive() && !#this.isDaemon()}.{#this.getName()}'
    +

    .{? ...} 返回筛选后的线程,后面的 .{...} 只投影线程名,避免展开整个 Thread 对象。

    分组计数

    下面按线程状态计数。#counts 是本次表达式创建的临时 Map,不会修改应用已有对象:

    ognl -x 2 '#counts=new java.util.LinkedHashMap(), @java.lang.Thread@getAllStackTraces().keySet().{#state=#this.getState().toString(), #counts.put(#state, #counts.containsKey(#state) ? #counts.get(#state) + 1 : 1)}, #counts'
    +

    实际输出类似:

    @LinkedHashMap[
    +    @String[RUNNABLE]:@Integer[10],
    +    @String[TIMED_WAITING]:@Integer[6],
    +    @String[WAITING]:@Integer[2],
    +]
    +

    不要把 Java Stream 写法 stream().filter(x -> ...)、方法引用 Type::method 或 computeIfAbsent(..., x -> ...) 填进 OGNL。OGNL 不解析 Java lambda;集合筛选和投影应使用 .{? ...} 与 .{...}。

    嵌套对象中及时保存 #this

    在 entrySet() 的投影中,#this 是当前 Map.Entry。先把 key 和 value 保存到有意义的变量,后面的表达式更不容易写错:

    ognl '#all=@java.lang.Thread@getAllStackTraces(), #all.entrySet().{? #this.getKey().getName().startsWith("arthas")}.{#thread=#this.getKey(), #stack=#this.getValue(), #thread.getName() + " | " + #thread.getState() + " | depth=" + #stack.length}'
    +

    空值使用显式分支

    OGNL 不支持 JavaScript 风格的 ?.,也不要混入 SpEL 的 T(...) 或模板语法 ${...}。先保存可能为空的值,再用三元表达式保护方法调用:

    ognl '#value=@java.lang.System@getProperty("arthas.not.exists"), #value == null ? "<missing>" : #value.trim()'
    +

    返回:

    @String[<missing>]
    +

    在 watch 中同时处理正常返回和异常

    -f 会在正常返回和抛出异常后执行表达式。必须先根据 isReturn 分支,再访问 returnObj 或 throwExp:

    watch demo.MathGame primeFactors '#result=new java.util.LinkedHashMap(), #result.put("number", params[0]), #result.put("outcome", isReturn ? "return" : "throw"), #result.put("detail", isReturn ? returnObj.size() : throwExp.getMessage()), #result' -f -n 2 -x 2
    +

    这个表达式在实际 math-game JVM 的正常返回和异常返回路径上都可求值。-n 2 限制观察次数,避免命令持续运行。

    在 vmtool 中使用 instances

    instances 只存在于 vmtool --action getInstances --express 的表达式上下文:

    vmtool --action getInstances --className java.lang.Thread --limit 100 --express 'instances.{? #this.isAlive() && #this.getName().startsWith("arthas")}.{#this.getName()}'
    +

    先用 --limit 限制实例数量,再筛选和投影。对于实例可能很多的业务类,不要无条件使用 --limit -1。

    ClassLoader 不是语法的一部分

    访问业务类之前先确认它由哪个 ClassLoader 加载:

    sc -d com.example.OrderService
    +

    从输出中取得 classLoaderHash,再把它作为命令选项传给 ognl:

    ognl -c <classLoaderHash> '@com.example.OrderService@STATIC_FIELD'
    +

    需要注意:

    • -c/--classLoaderClass 是 Arthas 命令选项,不是 OGNL 表达式的一部分。
    • 同名类可能由多个 ClassLoader 加载,不要猜测 hash;hash 在 JVM 重启后也可能变化。
    • ClassNotFoundException 通常应先检查 ClassLoader,而不是随机改写 OGNL 语法。
    • --classLoaderClass 只有在该类型的 ClassLoader 实例唯一时才适用;有多个实例时使用 hash 精确指定。

    引号和格式:实际上有两层解析器

    Arthas 先解析命令行,随后 OGNL 才解析表达式。若外面还有 Shell、JSON 或 MCP,又会多一层传输格式。

    • 在 Arthas 终端中,完整表达式外层使用单引号,OGNL 字符串内部使用双引号。
    • 最终命令保持在一个物理行内。终端的视觉自动换行没有问题,但不要在类名、.、@、#变量 或操作符中间插入真实换行。
    • 不要在 . 后插入空格,例如 #map. get("key") 是错误格式。
    • 表达式内部用逗号串联步骤,不要用分号。
    • 使用 {$ ...} 时必须保留外层单引号,否则某些 Shell 会解释 $。
    • 向 MCP 的表达式参数传值时,不要附加 Markdown 反引号、外层单引号或完整命令。
    • 通过 JSON 传输时只按 JSON 规则转义双引号;不要把 Shell 的反斜杠转义原样复制到表达式参数中。

    当调用链包含多层引号时,优先使用 Arthas 批处理文件或 API 的独立表达式字段,减少 Shell 转义层数。

    不要把所有失败都当成语法错误

    现象或异常关键词优先检查建议动作
    Malformed OGNL expression、ExpressionSyntaxException引号、括号、@类@成员、逗号、投影/筛选花括号缩减到最小表达式,再逐段添加
    NoSuchPropertyException当前命令是否真的提供该变量;属性名是否正确对照上下文变量表,改用明确的公开 getter
    MethodFailedException、NoSuchMethodException方法名、参数类型、静态/实例调用方式用 sm/jad 确认真实签名,不要猜重载
    ClassNotFoundExceptionClassLoader先执行 sc -d,再指定 -c
    中间对象为 null调用链缺少空值分支先赋给 #变量,用三元表达式保护后续调用
    stricter invocation mode方法或声明类被 OGNL 严格模式阻止不要关闭保护或尝试反射绕过;改用 jvm、thread、sysprop 等专用命令或安全的公开接口
    module ... does not exportJDK 模块边界,不一定是 OGNL 语法改用 Arthas 专用命令或可访问的公开应用接口
    超时、输出巨大或目标 JVM 抖动表达式工作量和展开范围先筛选后投影,减少重复调用,设置 --limit、-n 和合理的 -x

    例如,@java.lang.Runtime@getRuntime() 即使语法正确,在默认的 OGNL 严格调用模式下也可能被拒绝。这类错误不应该通过反复改变 @、括号或引号来“碰运气”。

    AI Agent 生成与验证协议

    建议把下面的约束加入生成 Arthas 命令的 Agent 提示词:

    你正在生成 Arthas 使用的 OGNL。生成前必须确认:
    +1. 调用方需要“完整 Arthas 命令”还是“原始 expression 参数”,只输出其中一种。
    +2. 表达式运行在 ognl、getstatic、watch/stack/monitor/tt/trace、line,还是 vmtool 上下文;只使用该上下文真实存在的变量。
    +3. 业务类先通过 sc -d 确认 ClassLoader;方法和字段不确定时先用 sm/jad 确认,不猜名称或重载。
    +4. 静态访问统一使用 @完整类名@成员,临时变量统一使用 #name,多个步骤用逗号连接。
    +5. 不生成 Java lambda/Stream、方法引用、?.、SpEL T(...)、${...}、Java 泛型构造器或分号语句。
    +6. 默认只读;禁止进程、文件、网络、ClassLoader、反射提权、线程控制和应用状态修改。只允许修改表达式内 new 出来的临时集合。
    +7. 先筛选再投影,只返回需要的字段,并设置合理的 limit、-n、-x。
    +8. 最终表达式保持一个物理行;不得在类名、点号、@...@、#变量或操作符内部断行或插入空格。
    +
    +验证时按以下顺序逐步执行,不要一次提交未经验证的长表达式:
    +A. 验证最小根对象、静态字段或上下文变量可访问。
    +B. 每次只增加一个 #变量赋值、方法调用、筛选或投影,并实际执行。
    +C. 最后再组装 Map/List 输出和限制参数。
    +D. 失败时先分类为命令/转义、语法、上下文变量、ClassLoader、空值、方法签名、访问限制或资源开销;保留已通过的最小前缀,只修改失败片段。
    +E. 只有拿到无语法异常的实际 Arthas 返回后,才能声明表达式“已验证”。
    +

    Agent 在输出前还应做一次机械检查:

    • @类名@成员 是否有成对的 @;
    • ()、[]、{} 和引号是否配对;
    • 每个自定义变量是否带 #;
    • 投影和筛选中的 #this 是否指向预期层级;
    • 可能为空的筛选结果、Map value、returnObj 或 throwExp 是否受分支保护;
    • 是否把命令选项误放进表达式,或把完整命令误放进工具的 expression 字段;
    • 是否存在被自动格式化拆开的类名、方法名或操作符。

    这种“先确认上下文,再小步执行,最后组装输出”的流程,比在失败后整条重写复杂表达式更稳定,也更容易定位真实原因。

    进一步参考

    + + + diff --git a/doc/ognl.html b/doc/ognl.html index d513a5bf4..9a1bf37e6 100644 --- a/doc/ognl.html +++ b/doc/ognl.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); ognl | arthas - + -
    目录

    ognl

    ognl在线教程在新窗口打开

    提示

    执行 ognl 表达式

    从 3.0.5 版本增加

    参数说明

    参数名称参数说明
    express执行的表达式
    [c:]执行表达式的 ClassLoader 的 hashcode,默认值是 SystemClassLoader
    [classLoaderClass:]指定执行表达式的 ClassLoader 的 class name
    [x]结果对象的展开层次,默认值 1

    使用参考

    调用静态函数:

    $ ognl '@java.lang.System@out.println("hello")'
    +    
    目录

    ognl

    提示

    执行 ognl 表达式

    从 3.0.5 版本增加

    参数说明

    参数名称参数说明
    express执行的表达式
    [c:]执行表达式的 ClassLoader 的 hashcode,默认值是 SystemClassLoader
    [classLoaderClass:]指定执行表达式的 ClassLoader 的 class name
    [x]结果对象的展开层次,默认值 1

    使用参考

    调用静态函数:

    $ ognl '@java.lang.System@out.println("hello")'
     null
     

    获取静态类的静态字段:

    $ ognl '@demo.MathGame@random'
     @Random[
    @@ -80,7 +80,7 @@ $
         @String[/opt/java/8.0.181-zulu/jre],
         @String[OpenJDK Runtime Environment],
     ]
    -
    - +
    + diff --git a/doc/options.html b/doc/options.html index ce2880312..d5f810f58 100644 --- a/doc/options.html +++ b/doc/options.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); options | arthas - + -
    目录

    options

    options在线教程在新窗口打开

    提示

    全局开关

    名称默认值描述
    unsafefalse是否支持对系统级别的类进行增强,打开该开关可能导致把 JVM 搞挂,请慎重选择!
    dumpfalse是否支持被增强了的类 dump 到外部文件中,如果打开开关,class 文件会被 dump 到/${application working dir}/arthas-class-dump/目录下,具体位置详见控制台输出
    batch-re-transformtrue是否支持批量对匹配到的类执行 retransform 操作
    json-formatfalse是否支持 json 化的输出
    object-size-limit10485760ObjectView 输出大小上限(字节),必须大于 0,默认 10 * 1024 * 1024
    disable-sub-classfalse是否禁用子类匹配,默认在匹配目标类的时候会默认匹配到其子类,如果想精确匹配,可以关闭此开关
    support-default-methodtrue是否支持匹配到 default method, 默认会查找 interface,匹配里面的 default method。参考 #1105在新窗口打开
    save-resultfalse是否打开执行结果存日志功能,打开之后所有命令的运行结果都将保存到~/logs/arthas-cache/result.log中
    job-timeout1d异步后台任务的默认超时时间,超过这个时间,任务自动停止;比如设置 1d, 2h, 3m, 25s,分别代表天、小时、分、秒
    print-parent-fieldstrue是否打印在 parent class 里的 filed
    verbosefalse是否打印更多详细信息
    stricttrue是否启用 strict 模式

    查看所有的 options

    $ options
    +    
    目录

    options

    提示

    全局开关

    名称默认值描述
    unsafefalse是否支持对系统级别的类进行增强,打开该开关可能导致把 JVM 搞挂,请慎重选择!
    dumpfalse是否支持被增强了的类 dump 到外部文件中,如果打开开关,class 文件会被 dump 到/${application working dir}/arthas-class-dump/目录下,具体位置详见控制台输出
    batch-re-transformtrue是否支持批量对匹配到的类执行 retransform 操作
    json-formatfalse是否支持 json 化的输出
    object-size-limit10485760ObjectView 输出大小上限(字节),必须大于 0,默认 10 * 1024 * 1024
    disable-sub-classfalse是否禁用子类匹配,默认在匹配目标类的时候会默认匹配到其子类,如果想精确匹配,可以关闭此开关
    support-default-methodtrue是否支持匹配到 default method, 默认会查找 interface,匹配里面的 default method。参考 #1105在新窗口打开
    save-resultfalse是否打开执行结果存日志功能,打开之后所有命令的运行结果都将保存到~/logs/arthas-cache/result.log中
    job-timeout1d异步后台任务的默认超时时间,超过这个时间,任务自动停止;比如设置 1d, 2h, 3m, 25s,分别代表天、小时、分、秒
    print-parent-fieldstrue是否打印在 parent class 里的 filed
    verbosefalse是否打印更多详细信息
    stricttrue是否启用 strict 模式

    查看所有的 options

    $ options
      LEVEL  TYPE    NAME          VALUE   SUMMARY               DESCRIPTION
     -------------------------------------------------------------------------------------------------------
      0      boolea  unsafe        false   Option to support sy  This option enables to proxy functionality
    @@ -94,11 +94,11 @@
     
    $ watch java.lang.invoke.Invokers callSiteForm
     Press Q or Ctrl+C to abort.
     Affect(class count: 1 , method count: 1) cost in 61 ms, listenerId: 1
    -

    关闭 strict 模式,允许在 ognl 表达式里设置对象属性

    提示

    since 3.6.0

    对于新用户,在编写 ognl 表达式时,可能会出现误用。

    比如对于Student,判断年龄等于 18 时,可能条件表达式会误写为target.age=18,这个表达式实际上是把当前对象的age设置为 18 了。正确的写法是target.age==18。

    为了防止出现类似上面的误用,Arthas 默认启用strict模式,在ognl表达式里,禁止更新对象的 Property 或者调用setter函数。

    以MathGame为例,会出现以下的错误提示。

    $ watch demo.MathGame primeFactors 'target' 'target.illegalArgumentCount=1'
    +

    关闭 strict 模式,允许在 ognl 表达式里设置对象属性

    提示

    since 3.6.0

    对于新用户,在编写 ognl 表达式时,可能会出现误用。

    复杂表达式的只读约束、生成检查清单和错误分类参见 OGNL 复杂表达式使用技巧。

    比如对于Student,判断年龄等于 18 时,可能条件表达式会误写为target.age=18,这个表达式实际上是把当前对象的age设置为 18 了。正确的写法是target.age==18。

    为了防止出现类似上面的误用,Arthas 默认启用strict模式,在ognl表达式里,禁止更新对象的 Property 或者调用setter函数。

    以MathGame为例,会出现以下的错误提示。

    $ watch demo.MathGame primeFactors 'target' 'target.illegalArgumentCount=1'
     Press Q or Ctrl+C to abort.
     Affect(class count: 1 , method count: 1) cost in 206 ms, listenerId: 1
     watch failed, condition is: target.illegalArgumentCount=1, express is: target, By default, strict mode is true, not allowed to set object properties. Want to set object properties, execute `options strict false`, visit /Users/admin/logs/arthas/arthas.log for more details.
    -

    用户如果确定要在ognl表达式里更新对象,可以执行options strict false,关闭strict模式。

    • 更多信息参考: https://github.com/alibaba/arthas/issues/2128
    - +

    用户如果确定要在ognl表达式里更新对象,可以执行options strict false,关闭strict模式。

    • 更多信息参考: https://github.com/alibaba/arthas/issues/2128
    + diff --git a/doc/perfcounter.html b/doc/perfcounter.html index 2e551a85c..45bf549b4 100644 --- a/doc/perfcounter.html +++ b/doc/perfcounter.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); perfcounter | arthas - + -
    目录

    perfcounter

    perfcounter在线教程在新窗口打开

    提示

    查看当前 JVM 的 Perf Counter 信息

    使用参考

    $ perfcounter
    +    
    目录

    perfcounter

    提示

    查看当前 JVM 的 Perf Counter 信息

    使用参考

    $ perfcounter
      java.ci.totalTime                            2325637411
      java.cls.loadedClasses                       3403
      java.cls.sharedLoadedClasses                 0
    @@ -55,6 +55,6 @@
      java.cls.unloadedClasses               Monotonic     Events       0
     

    jdk9 以上的应用

    如果没有打印出信息,应用在启动时,加下面的参数:

    --add-opens java.base/jdk.internal.perf=ALL-UNNAMED --add-exports java.base/jdk.internal.perf=ALL-UNNAMED --add-opens java.management/sun.management.counter.perf=ALL-UNNAMED --add-opens java.management/sun.management.counter=ALL-UNNAMED
     
    - + diff --git a/doc/profiler.html b/doc/profiler.html index ff80e4ca9..e691a69fc 100644 --- a/doc/profiler.html +++ b/doc/profiler.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); profiler | arthas - + -
    目录

    profiler

    profiler在线教程在新窗口打开

    提示

    使用async-profiler在新窗口打开生成火焰图

    profiler 命令支持生成应用热点的火焰图。本质上是通过不断的采样,然后把收集到的采样结果生成火焰图。

    profiler 命令基本运行结构是 profiler action [actionArg]

    profiler 命令的格式基本与上游项目 async-profiler在新窗口打开 保持一致,详细的使用方式可参考上游项目的 README、Github Disscussions 以及其他文档资料。

    参数说明

    参数名称参数说明
    action要执行的操作
    actionArg属性名模式
    [i:]采样间隔(单位:ns)(默认值:10'000'000,即 10 ms)
    [f:]将输出转储到指定路径
    [d:]运行评测指定秒
    [e:]要跟踪哪个事件(cpu, alloc, lock, cache-misses 等),默认是 cpu

    启动 profiler

    $ profiler start
    +    
    目录

    profiler

    提示

    使用async-profiler在新窗口打开生成火焰图

    profiler 命令支持生成应用热点的火焰图。本质上是通过不断的采样,然后把收集到的采样结果生成火焰图。

    profiler 命令基本运行结构是 profiler action [actionArg]

    profiler 命令的格式基本与上游项目 async-profiler在新窗口打开 保持一致,详细的使用方式可参考上游项目的 README、Github Disscussions 以及其他文档资料。

    参数说明

    参数名称参数说明
    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参数指定其他性能分析模式,见下文。

    获取已采集的 sample 的数量

    $ profiler getSamples
     23
    @@ -132,6 +132,6 @@ profiler start --ttsp 

    参数

    • tsc:使用 CPU 的时间戳计数器(RDTSC)。这是默认选项,提供高精度的时间戳。
    • monotonic:使用操作系统的单调时钟(CLOCK_MONOTONIC)。这有助于在多种数据源之间对齐时间戳。 可参考 async-profiler Github Issues在新窗口打开 了解更多信息。

    示例 :

    使用 CLOCK_MONOTONIC 作为时间戳源:

    profiler start --clock monotonic
     

    注意事项:

    • 当需要将 profiler 的数据与其他使用 CLOCK_MONOTONIC 的工具(例如 perf)的数据进行对齐时,使用 --clock monotonic。
    • 在使用 jfrsync 模式时,请谨慎使用 --clock 选项,因为 JVM 和 profiler 可能使用不同的时间戳源,这可能导致结果不一致。

    --norm 选项

    在 Java 20 及更早的版本中,编译器为 lambda 表达式生成的方法名称包含唯一的数字后缀。例如,同一代码位置定义的 lambda 表达式,可能会生成多个不同的帧名称,因为每个 lambda 方法的名称都会附加一个唯一的数字后缀(如 lambda$method$0、lambda$method$1 等)。这会导致逻辑上相同的堆栈无法在火焰图中合并,增加了性能分析的复杂性。

    为了解决这个问题,profiler 新增了 --norm 选项,可以在生成输出时自动规范化方法名称,去除这些数字后缀,使相同的堆栈能够正确地合并。 可参考 async-profiler Github Issues在新窗口打开 了解更多信息。

    示例:

    生成规范化的火焰图:

    profiler start --norm
     
    - + diff --git a/doc/pwd.html b/doc/pwd.html index 2a2769b07..aa8862a12 100644 --- a/doc/pwd.html +++ b/doc/pwd.html @@ -31,12 +31,12 @@ s.parentNode.insertBefore(hm, s); })(); pwd | arthas - + -
    目录

    pwd

    pwd在线教程在新窗口打开

    提示

    返回当前的工作目录,和 linux 命令类似

    使用参考

    $ pwd
    +    
    -    
    +    
       
     
    diff --git a/doc/quick-start.html b/doc/quick-start.html
    index 58b58b9f5..ab32c2cca 100644
    --- a/doc/quick-start.html
    +++ b/doc/quick-start.html
    @@ -31,11 +31,11 @@
           s.parentNode.insertBefore(hm, s);
         })();
         快速入门 | arthas
    -    
    +    
         
       
       
    -    
    目录

    快速入门

    可以通过下面的方式自己动手实践,也可以通过我们的在线教程在新窗口打开,跟随教程快速入门。

    1. 启动 math-game

    curl -O https://arthas.aliyun.com/math-game.jar
    +    
    目录

    快速入门

    可以通过下面的方式自己动手实践,快速入门。

    1. 启动 math-game

    curl -O https://arthas.aliyun.com/math-game.jar
     java -jar math-game.jar
     

    math-game是一个简单的程序,每隔一秒生成一个随机数,再执行质因数分解,并打印出分解结果。

    math-game源代码:查看在新窗口打开

    2. 启动 arthas

    在命令行下面执行(使用和目标进程一致的用户启动,否则可能 attach 失败):

    curl -O https://arthas.aliyun.com/arthas-boot.jar
     java -jar arthas-boot.jar
    @@ -199,7 +199,7 @@ Affect(class-cnt:1 , method-cnt:1[29],
         @Integer[7651739],
     ]
    -

    更多的功能可以查看进阶教程在新窗口打开。

    7. 退出 arthas

    如果只是退出当前的连接,可以用quit或者exit命令。Attach 到目标进程上的 arthas 还会继续运行,端口会保持开放,下次连接时可以直接连接上。

    如果想完全退出 arthas,可以执行stop命令。

    - +

    更多的功能可以查看进阶使用。

    7. 退出 arthas

    如果只是退出当前的连接,可以用quit或者exit命令。Attach 到目标进程上的 arthas 还会继续运行,端口会保持开放,下次连接时可以直接连接上。

    如果想完全退出 arthas,可以执行stop命令。

    + diff --git a/doc/quit.html b/doc/quit.html index 32fe90a90..1cb774d7d 100644 --- a/doc/quit.html +++ b/doc/quit.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); quit | arthas - + - - + + diff --git a/doc/redefine.html b/doc/redefine.html index 88ca9591d..814c675c2 100644 --- a/doc/redefine.html +++ b/doc/redefine.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); redefine | arthas - + -
    目录

    redefine

    提示

    推荐使用 retransform 命令

    mc-redefine在线教程在新窗口打开

    提示

    加载外部的.class文件,redefine jvm 已加载的类。

    参考:Instrumentation#redefineClasses在新窗口打开

    常见问题

    提示

    推荐使用 retransform 命令

    • 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

    使用参考

       redefine /tmp/Test.class
    +    
    目录

    redefine

    提示

    推荐使用 retransform 命令

    提示

    加载外部的.class文件,redefine jvm 已加载的类。

    参考:Instrumentation#redefineClasses在新窗口打开

    常见问题

    提示

    推荐使用 retransform 命令

    • 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

    使用参考

       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 命令使用

    jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java
    @@ -70,6 +70,6 @@ redefine /tmp/com/example/demo/arthas/user/UserController.class
         }
     }
     
    - + diff --git a/doc/release-notes.html b/doc/release-notes.html index baf294426..de1078643 100644 --- a/doc/release-notes.html +++ b/doc/release-notes.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); Release Notes | arthas - + -
    目录

    Release Notes

    v3.1.1

    v3.1.0

    v3.0.5

    v3.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

    • 支持异步后后命令
    • 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 测试版本发布!
    - +
    目录

    Release Notes

    v3.1.1

    v3.1.0

    v3.0.5

    v3.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

    • 支持异步后后命令
    • 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/doc/reset.html b/doc/reset.html index e189dd848..4ed30ffed 100644 --- a/doc/reset.html +++ b/doc/reset.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); reset | arthas - + -
    目录

    reset

    reset在线教程在新窗口打开

    提示

    重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端stop时会重置所有增强过的类

    使用参考

    $ reset -h
    +    
    -    
    +    
       
     
    diff --git a/doc/retransform.html b/doc/retransform.html
    index 94df095ba..2e27d778b 100644
    --- a/doc/retransform.html
    +++ b/doc/retransform.html
    @@ -31,11 +31,11 @@
           s.parentNode.insertBefore(hm, s);
         })();
         retransform | arthas
    -    
    +    
         
       
       
    -    
    目录

    retransform

    mc-retransform在线教程在新窗口打开

    提示

    加载外部的.class文件,retransform jvm 已加载的类。

    参考:Instrumentation#retransformClasses在新窗口打开

    使用参考

       retransform /tmp/Test.class
    +    
    目录

    retransform

    提示

    加载外部的.class文件,retransform jvm 已加载的类。

    参考:Instrumentation#retransformClasses在新窗口打开

    使用参考

       retransform /tmp/Test.class
        retransform -l
        retransform -d 1                    # delete retransform entry
        retransform --deleteAll             # delete all retransform entries
    @@ -85,6 +85,6 @@ retransform /tmp/com/example/demo/arthas/user/UserController.class
         }
     }
     
    - + diff --git a/doc/save-log.html b/doc/save-log.html index 092ebd731..20d0b275c 100644 --- a/doc/save-log.html +++ b/doc/save-log.html @@ -31,16 +31,16 @@ s.parentNode.insertBefore(hm, s); })(); 执行结果存日志 | arthas - + -
    目录

    执行结果存日志

    执行结果存日志在线教程在新窗口打开

    提示

    将命令的结果完整保存在日志文件中,便于后续进行分析

    • 默认情况下,该功能是关闭的,如果需要开启,请执行以下命令:
    $ options save-result true
    +    
    目录

    执行结果存日志

    提示

    将命令的结果完整保存在日志文件中,便于后续进行分析

    • 默认情况下,该功能是关闭的,如果需要开启,请执行以下命令:
    $ options save-result true
      NAME         BEFORE-VALUE  AFTER-VALUE
     ----------------------------------------
      save-result  false         true
     Affect(row-cnt:1) cost in 3 ms.
     

    看到上面的输出,即表示成功开启该功能;

    • 日志文件路径

    结果会异步保存在:{user.home}/logs/arthas-cache/result.log,请定期进行清理,以免占据磁盘空间

    使用 Arthas 的异步后台任务将结果存日志文件

    参考:async

    - + diff --git a/doc/sc.html b/doc/sc.html index 37bef9a7a..172e5ad9b 100644 --- a/doc/sc.html +++ b/doc/sc.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); sc | arthas - + -
    目录

    sc

    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)
    [cs <arg>]指定 class 的 ClassLoader#toString() 返回值。长格式[classLoaderStr <arg>]

    提示

    class-pattern 支持全限定名,如 com.taobao.test.AAA,也支持 com/taobao/test/AAA 这样的格式,这样,我们从异常堆栈里面把类名拷贝过来的时候,不需要在手动把/替换为.啦。

    提示

    sc 默认开启了子类匹配功能,也就是说所有当前类的子类也会被搜索出来,想要精确的匹配,请打开options disable-sub-class true开关

    使用参考

使用 -v 参数打印更多信息

提示

watch/trace/monitor/stack/tt 命令都支持 -v 参数

当命令执行之后,没有输出结果。有两种可能:

  1. 匹配到的函数没有被执行
  2. 条件表达式结果是 false

但用户区分不出是哪种情况。

使用 -v选项,则会打印Condition express的具体值和执行结果,方便确认。

- + diff --git a/doc/tt.html b/doc/tt.html index b1d67e8e4..9fb28b77b 100644 --- a/doc/tt.html +++ b/doc/tt.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); tt | arthas - + -
目录

tt

tt在线教程在新窗口打开

提示

方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测

watch 虽然很方便和灵活,但需要提前想清楚观察表达式的拼写,这对排查问题而言要求太高,因为很多时候我们并不清楚问题出自于何方,只能靠蛛丝马迹进行猜测。

这个时候如果能记录下当时方法调用的所有入参和返回值、抛出的异常会对整个问题的思考与判断非常有帮助。

于是乎,TimeTunnel 命令就诞生了。

注意事项

  • tt 命令的实现是:把函数的入参/返回值等,保存到一个Map<Integer, TimeFragment>里,默认的大小是 100。
  • tt 相关功能在使用完之后,需要手动释放内存,否则长时间可能导致OOM。退出 arthas 不会自动清除 tt 的缓存 map。

使用参考

启动 Demo

启动快速入门里的math-game。

记录调用

对于一个最基本的使用来说,就是记录下当前方法的每次调用环境现场。

$ tt -t demo.MathGame primeFactors
+    
目录

tt

提示

方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测

watch 虽然很方便和灵活,但需要提前想清楚观察表达式的拼写,这对排查问题而言要求太高,因为很多时候我们并不清楚问题出自于何方,只能靠蛛丝马迹进行猜测。

这个时候如果能记录下当时方法调用的所有入参和返回值、抛出的异常会对整个问题的思考与判断非常有帮助。

于是乎,TimeTunnel 命令就诞生了。

注意事项

  • tt 命令的实现是:把函数的入参/返回值等,保存到一个Map<Integer, TimeFragment>里,默认的大小是 100。
  • tt 相关功能在使用完之后,需要手动释放内存,否则长时间可能导致OOM。退出 arthas 不会自动清除 tt 的缓存 map。

使用参考

启动 Demo

启动快速入门里的math-game。

记录调用

对于一个最基本的使用来说,就是记录下当前方法的每次调用环境现场。

$ tt -t demo.MathGame primeFactors
 Press Ctrl+C to abort.
 Affect(class-cnt:1 , method-cnt:1) cost in 66 ms.
  INDEX   TIMESTAMP            COST(ms)  IS-RET  IS-EXP   OBJECT         CLASS                          METHOD
@@ -52,7 +52,7 @@ Affect(class count:1 , method count:11000    2022-12-25 19:41:45  2.629929  true    false    0x3bf400       MathGame                       primeFactors
  1001    2022-12-25 19:41:55  0.146161  false   true     0x3bf400       MathGame                       primeFactors
-
  • 命令参数解析

    • -t

      tt 命令有很多个主参数,-t 就是其中之一。这个参数的表明希望记录下类 demo.MathGame 的 primeFactors 方法的每次执行情况。

    • -n 3

      当你执行一个调用量不高的方法时可能你还能有足够的时间用 CTRL+C 中断 tt 命令记录的过程,但如果遇到调用量非常大的方法,瞬间就能将你的 JVM 内存撑爆。

      此时你可以通过 -n 参数指定你需要记录的次数,当达到记录次数时 Arthas 会主动中断 tt 命令的记录过程,避免人工操作无法停止的情况。

    • -m 1

      通过 -m 参数指定 Class 匹配的最大数量,防止匹配到的 Class 数量太多导致 JVM 挂起,默认值是 50。

    • -c <classloader hash>

      当同名类被多个 classloader 加载时,可以用 -c 指定只增强某个 classloader 加载的类。可以先用 sc -d className 查看具体的 classloader hash。

  • 表格字段说明

表格字段字段解释
INDEX时间片段记录编号,每一个编号代表着一次调用,后续 tt 还有很多命令都是基于此编号指定记录操作,非常重要。
TIMESTAMP方法执行的本机时间,记录了这个时间片段所发生的本机时间
COST(ms)方法执行的耗时
IS-RET方法是否以正常返回的形式结束
IS-EXP方法是否以抛异常的形式结束
OBJECT执行对象的hashCode(),注意,曾经有人误认为是对象在 JVM 中的内存地址,但很遗憾他不是。但他能帮助你简单的标记当前执行方法的类实体
CLASS执行的类名
METHOD执行的方法名
  • 条件表达式

    不知道大家是否有在使用过程中遇到以下困惑

    • 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[0].mobile=="13989838402"

  • 构成条件表达式的 Advice 对象

    前边看到了很多条件表达式中,都使用了 params[0],有关这个变量的介绍,请参考表达式核心变量

检索调用记录

当你用 tt 记录了一大片的时间片段之后,你希望能从中筛选出自己需要的时间片段,这个时候你就需要对现有记录进行检索。

假设我们有这些记录

$ tt -l
+
  • 命令参数解析

    • -t

      tt 命令有很多个主参数,-t 就是其中之一。这个参数的表明希望记录下类 demo.MathGame 的 primeFactors 方法的每次执行情况。

    • -n 3

      当你执行一个调用量不高的方法时可能你还能有足够的时间用 CTRL+C 中断 tt 命令记录的过程,但如果遇到调用量非常大的方法,瞬间就能将你的 JVM 内存撑爆。

      此时你可以通过 -n 参数指定你需要记录的次数,当达到记录次数时 Arthas 会主动中断 tt 命令的记录过程,避免人工操作无法停止的情况。

    • -m 1

      通过 -m 参数指定 Class 匹配的最大数量,防止匹配到的 Class 数量太多导致 JVM 挂起,默认值是 50。

    • -c <classloader hash>

      当同名类被多个 classloader 加载时,可以用 -c 指定只增强某个 classloader 加载的类。可以先用 sc -d className 查看具体的 classloader hash。

  • 表格字段说明

表格字段字段解释
INDEX时间片段记录编号,每一个编号代表着一次调用,后续 tt 还有很多命令都是基于此编号指定记录操作,非常重要。
TIMESTAMP方法执行的本机时间,记录了这个时间片段所发生的本机时间
COST(ms)方法执行的耗时
IS-RET方法是否以正常返回的形式结束
IS-EXP方法是否以抛异常的形式结束
OBJECT执行对象的hashCode(),注意,曾经有人误认为是对象在 JVM 中的内存地址,但很遗憾他不是。但他能帮助你简单的标记当前执行方法的类实体
CLASS执行的类名
METHOD执行的方法名
  • 条件表达式

    不知道大家是否有在使用过程中遇到以下困惑

    • 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[0].mobile=="13989838402"

  • 构成条件表达式的 Advice 对象

    前边看到了很多条件表达式中,都使用了 params[0],有关这个变量的介绍,请参考表达式核心变量

    复杂的筛选、投影、空值处理及 AI Agent 生成建议参见 OGNL 复杂表达式使用技巧。

检索调用记录

当你用 tt 记录了一大片的时间片段之后,你希望能从中筛选出自己需要的时间片段,这个时候你就需要对现有记录进行检索。

假设我们有这些记录

$ tt -l
  INDEX   TIMESTAMP            COST(ms)  IS-RET  IS-EXP   OBJECT         CLASS                          METHOD
 -------------------------------------------------------------------------------------------------------------------------------------
  1000    2018-12-04 11:15:38  1.096236  false   true     0x4b67cf4d     MathGame                       primeFactors
@@ -128,6 +128,6 @@ Affect(class count: 

注意这里使用 com.taobao.arthas.core.advisor.Advice#getLoader加载,使用精确classloader ognl更好。

高级用法 获取 spring context 调用 bean 方法在新窗口打开

  • 需要强调的点
    1. ThreadLocal 信息丢失

      很多框架偷偷的将一些环境变量信息塞到了发起调用线程的 ThreadLocal 中,由于调用线程发生了变化,这些 ThreadLocal 线程信息无法通过 Arthas 保存,所以这些信息将会丢失。

      一些常见的 CASE 比如:鹰眼的 TraceId 等。

    2. 引用的对象

      需要强调的是,tt 命令是将当前环境的对象引用保存起来,但仅仅也只能保存一个引用而已。如果方法内部对入参进行了变更,或者返回的对象经过了后续的处理,那么在 tt 查看的时候将无法看到当时最准确的值。这也是为什么 watch 命令存在的意义。

通过索引删除指定的 tt 记录

tt -d -i 1001
 

清除所有的 tt 记录

tt --delete-all
 
- + diff --git a/doc/tunnel.html b/doc/tunnel.html index 0729f098d..e0aaa9c66 100644 --- a/doc/tunnel.html +++ b/doc/tunnel.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); Arthas Tunnel | arthas - + -
目录

Arthas Tunnel

通过 Arthas Tunnel Server/Client 来远程管理/连接多个 Agent。

比如,在流式计算里,Java 进程可以是在不同的机器启动的,想要使用 Arthas 去诊断会比较麻烦,因为用户通常没有机器的权限,即使登录机器也分不清是哪个 Java 进程。

在这种情况下,可以使用 Arthas Tunnel Server/Client。

参考:

下载部署 arthas tunnel server

https://github.com/alibaba/arthas/releases在新窗口打开

Arthas tunnel server 是一个 spring boot fat jar 应用,直接java -jar启动:

java -jar  arthas-tunnel-server.jar
+    
目录

Arthas Tunnel

通过 Arthas Tunnel Server/Client 来远程管理/连接多个 Agent。

比如,在流式计算里,Java 进程可以是在不同的机器启动的,想要使用 Arthas 去诊断会比较麻烦,因为用户通常没有机器的权限,即使登录机器也分不清是哪个 Java 进程。

在这种情况下,可以使用 Arthas Tunnel Server/Client。

参考:

下载部署 arthas tunnel server

https://github.com/alibaba/arthas/releases在新窗口打开

Arthas tunnel server 是一个 spring boot fat jar 应用,直接java -jar启动:

java -jar  arthas-tunnel-server.jar
 

默认情况下,arthas tunnel server 的 web 端口是8080,arthas agent 连接的端口是7777。

启动之后,可以访问 http://127.0.0.1:8080/在新窗口打开 ,再通过agentId连接到已注册的 arthas agent 上。

通过 Spring Boot 的 Endpoint,可以查看到具体的连接信息: 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
@@ -49,12 +49,11 @@ Using generated security password: f1dca050-3777-48f4-a577-6367e55a78a2
 
 
 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:

[arthas@86183]$ session
+

如果是启动时没有连接到 tunnel server,也可以在后续自动重连成功之后,通过 session 命令来获取 agentId:

[arthas@86183]$ session
  Name           Value
 -----------------------------------------------------
  JAVA_PID       86183
@@ -74,14 +73,13 @@ Escape character is '^]'.
 
 
 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在新窗口打开

再打开详情,则可以看到连接的所有 agent 列表:

http://localhost:8080/agents.html?app=test在新窗口打开

安全和权限管理

提示

强烈建议不要把 tunnel server 直接暴露到公网上。

目前 tunnel server 没有专门的权限管理

  1. 用户需要自行开发,对 app name 鉴权。
  2. 如果开放管理页面,需要增加安全措施。

集群方式管理

如果希望部署多台 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,可以看到所有连接的应用列表:

http://localhost:8080/apps.html在新窗口打开

再打开详情,则可以看到连接的所有 agent 列表:

http://localhost:8080/agents.html?app=test在新窗口打开

安全和权限管理

提示

强烈建议不要把 tunnel server 直接暴露到公网上。

目前 tunnel server 没有专门的权限管理

  1. 用户需要自行开发,对 app name 鉴权。
  2. 如果开放管理页面,需要增加安全措施。

集群方式管理

如果希望部署多台 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在新窗口打开

- + diff --git a/doc/version.html b/doc/version.html index 9114c7602..fdf42d055 100644 --- a/doc/version.html +++ b/doc/version.html @@ -31,13 +31,13 @@ s.parentNode.insertBefore(hm, s); })(); version | arthas - + -
目录

version

输出当前目标 Java 进程所加载的 Arthas 版本号

使用参考

$ version
+    
-    
+    
   
 
diff --git a/doc/vmoption.html b/doc/vmoption.html
index aed3686df..8793425b5 100644
--- a/doc/vmoption.html
+++ b/doc/vmoption.html
@@ -31,11 +31,11 @@
       s.parentNode.insertBefore(hm, s);
     })();
     vmoption | arthas
-    
+    
     
   
   
-    
目录

vmoption

vmoption在线教程在新窗口打开

提示

查看,更新 VM 诊断相关的参数

使用参考

查看所有的 option

[arthas@56963]$ vmoption
+    
目录

vmoption

提示

查看,更新 VM 诊断相关的参数

使用参考

查看所有的 option

[arthas@56963]$ vmoption
  KEY                    VALUE                   ORIGIN                 WRITEABLE
 ---------------------------------------------------------------------------------------------
  HeapDumpBeforeFullGC   false                   DEFAULT                true
@@ -75,6 +75,6 @@ Successfully updated the vm option.
 -------------------------------------------
  PrintGCDetails  false         true
 
- + diff --git a/doc/vmtool.html b/doc/vmtool.html index 3311955fc..855ae095e 100644 --- a/doc/vmtool.html +++ b/doc/vmtool.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); vmtool | arthas - + -
目录

vmtool

提示

@since 3.5.1

vmtool在线教程在新窗口打开

vmtool 利用JVMTI接口,实现查询内存对象,强制 GC 等功能。

获取对象

$ vmtool --action getInstances --className java.lang.String --limit 10
+    
目录

vmtool

提示

@since 3.5.1

vmtool 利用JVMTI接口,实现查询内存对象,强制 GC 等功能。

获取对象

$ vmtool --action getInstances --className java.lang.String --limit 10
 @String[][
     @String[com/taobao/arthas/core/shell/session/Session],
     @String[com.taobao.arthas.core.shell.session.Session],
@@ -61,7 +61,7 @@
 

然后用-c/--classloader 参数指定:

vmtool --action getInstances -c 19469ea2 --className org.springframework.context.ApplicationContext
 

指定返回结果展开层数

提示

getInstances action 返回结果绑定到instances变量上,它是数组。

通过 -x/--expand 参数可以指定结果的展开层次,默认值是 1。

vmtool --action getInstances -c 19469ea2 --className org.springframework.context.ApplicationContext -x 2
 

执行表达式

提示

getInstances action 返回结果绑定到instances变量上,它是数组。可以通过--express参数执行指定的表达式。

vmtool --action getInstances --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader --className org.springframework.context.ApplicationContext --express 'instances[0].getBeanDefinitionNames()'
-

过滤对象

对 getInstances 返回的 instances 数组,可以继续使用 OGNL 选择表达式 .{? 条件} 做过滤,其中 #this 表示当前遍历到的对象。

下面的例子使用 java.lang.Thread,适合在任意仍在运行的 JVM 里验证过滤表达式。它会筛选出所有非 daemon 线程,并只输出线程名:

vmtool --action getInstances --className java.lang.Thread --limit -1 --express 'instances.{? #this.daemon == false}.{name}'
+

在 instances 上编写复杂筛选、投影或空值分支时,请参考 OGNL 复杂表达式使用技巧。

过滤对象

对 getInstances 返回的 instances 数组,可以继续使用 OGNL 选择表达式 .{? 条件} 做过滤,其中 #this 表示当前遍历到的对象。

下面的例子使用 java.lang.Thread,适合在任意仍在运行的 JVM 里验证过滤表达式。它会筛选出所有非 daemon 线程,并只输出线程名:

vmtool --action getInstances --className java.lang.Thread --limit -1 --express 'instances.{? #this.daemon == false}.{name}'
 

如果想直接查看过滤后的对象本身,可以去掉最后的 .{name}。

强制 GC

vmtool --action forceGc
 
  • 可以结合 vmoption 命令动态打开PrintGC开关。

分析堆内存占用

heapAnalyze 会从 GC Root 可达对象出发,统计各个类的实例数量与占用字节数,并输出占用最大的若干对象与类。

$ vmtool --action heapAnalyze --classNum 5 --objectNum 3
 

提示

通过 --classNum 参数指定展示的类数量,通过 --objectNum 参数指定展示的对象数量。

分析对象引用链

referenceAnalyze 用于分析某个类的实例对象,并输出占用最大的若干对象及其引用回溯链(从对象回溯到 GC Root),用于辅助定位对象来源。

$ vmtool --action referenceAnalyze --className java.lang.String --objectNum 5 --backtraceNum 3
@@ -77,6 +77,6 @@ in use bytes     =      74352
 max mmap regions =          0
 max mmap bytes   =          0
 
- + diff --git a/doc/watch.html b/doc/watch.html index e8c3c5e15..2ee5af683 100644 --- a/doc/watch.html +++ b/doc/watch.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); watch | arthas - + -
目录

watch

watch在线教程在新窗口打开

提示

函数执行数据观测

让你能方便的观察到指定函数的调用情况。能观察到的范围为:返回值、抛出异常、入参,通过编写 OGNL 表达式进行对应变量的查看。

参数说明

watch 的参数比较多,主要是因为它能在 4 个不同的场景观察对象

参数名称参数说明
class-pattern类名表达式匹配
method-pattern函数名表达式匹配
express观察表达式,默认值:{params, target, returnObj}
condition-express条件表达式
[b]在函数调用之前观察
[e]在函数异常之后观察
[s]在函数返回之后观察
[f]在函数结束之后(正常返回和异常返回)观察
[E]开启正则表达式匹配,默认为通配符匹配
[x:]指定输出结果的属性遍历深度,默认为 1,最大值是 4
[c:]指定 classloader hash,只增强该 classloader 加载的类
[m <arg>]指定 Class 最大匹配数量,默认值为 50。长格式为[maxMatch <arg>]。

这里重点要说明的是观察表达式,观察表达式的构成主要由 ognl 表达式组成,所以你可以这样写"{params,returnObj}",只要是一个合法的 ognl 表达式,都能被正常支持。

观察的维度也比较多,主要体现在参数 advice 的数据结构上。Advice 参数最主要是封装了通知节点的所有信息。请参考表达式核心变量中关于该节点的描述。

特别说明:

  • watch 命令定义了 4 个观察事件点,即 -b 函数调用前,-e 函数异常后,-s 函数返回后,-f 函数结束后
  • 4 个观察事件点 -b、-e、-s 默认关闭,-f 默认打开,当指定观察点被打开后,在相应事件点会对观察表达式进行求值并输出
  • 这里要注意函数入参和函数出参的区别,有可能在中间被修改导致前后不一致,除了 -b 事件点 params 代表函数入参外,其余事件都代表函数出参
  • 当使用 -b 时,由于观察事件点是在函数调用前,此时返回值或异常均不存在
  • 在 watch 命令的结果里,会打印出location信息。location有三种可能值:AtEnter,AtExit,AtExceptionExit。对应函数入口,函数正常 return,函数抛出异常。

使用参考

启动 Demo

启动快速入门里的math-game。

观察函数调用返回时的参数、this 对象和返回值

提示

观察表达式,默认值是{params, target, returnObj}

$ watch demo.MathGame primeFactors -x 2
+    
目录

watch

提示

函数执行数据观测

让你能方便的观察到指定函数的调用情况。能观察到的范围为:返回值、抛出异常、入参,通过编写 OGNL 表达式进行对应变量的查看。

参数说明

watch 的参数比较多,主要是因为它能在 4 个不同的场景观察对象

参数名称参数说明
class-pattern类名表达式匹配
method-pattern函数名表达式匹配
express观察表达式,默认值:{params, target, returnObj}
condition-express条件表达式
[b]在函数调用之前观察
[e]在函数异常之后观察
[s]在函数返回之后观察
[f]在函数结束之后(正常返回和异常返回)观察
[E]开启正则表达式匹配,默认为通配符匹配
[x:]指定输出结果的属性遍历深度,默认为 1,最大值是 4
[c:]指定 classloader hash,只增强该 classloader 加载的类
[m <arg>]指定 Class 最大匹配数量,默认值为 50。长格式为[maxMatch <arg>]。

这里重点要说明的是观察表达式,观察表达式的构成主要由 ognl 表达式组成,所以你可以这样写"{params,returnObj}",只要是一个合法的 ognl 表达式,都能被正常支持。

观察的维度也比较多,主要体现在参数 advice 的数据结构上。Advice 参数最主要是封装了通知节点的所有信息。请参考表达式核心变量中关于该节点的描述。

特别说明:

  • watch 命令定义了 4 个观察事件点,即 -b 函数调用前,-e 函数异常后,-s 函数返回后,-f 函数结束后
  • 4 个观察事件点 -b、-e、-s 默认关闭,-f 默认打开,当指定观察点被打开后,在相应事件点会对观察表达式进行求值并输出
  • 这里要注意函数入参和函数出参的区别,有可能在中间被修改导致前后不一致,除了 -b 事件点 params 代表函数入参外,其余事件都代表函数出参
  • 当使用 -b 时,由于观察事件点是在函数调用前,此时返回值或异常均不存在
  • 在 watch 命令的结果里,会打印出location信息。location有三种可能值:AtEnter,AtExit,AtExceptionExit。对应函数入口,函数正常 return,函数抛出异常。

使用参考

启动 Demo

启动快速入门里的math-game。

观察函数调用返回时的参数、this 对象和返回值

提示

观察表达式,默认值是{params, target, returnObj}

$ watch demo.MathGame primeFactors -x 2
 Press Q or Ctrl+C to abort.
 Affect(class count: 1 , method count: 1) cost in 32 ms, listenerId: 5
 method=demo.MathGame.primeFactors location=AtExceptionExit
@@ -225,6 +225,6 @@ ts=2020-12-02 22:38:57; [cost=0.052877ms] result=@Object[][
     ],
 ]
 
- + diff --git a/doc/web-console.html b/doc/web-console.html index 0e6059070..f08cebc76 100644 --- a/doc/web-console.html +++ b/doc/web-console.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); Web Console | arthas - + -
目录

Web Console

Web Console在线教程在新窗口打开

通过浏览器连接 arthas

Arthas 目前支持 Web Console,用户在 attach 成功之后,可以直接访问:http://127.0.0.1:8563/在新窗口打开。

可以填入 IP,远程连接其它机器上的 arthas。

注意

默认情况下,arthas 只 listen 127.0.0.1,所以如果想从远程连接,则可以使用 --target-ip参数指定 listen 的 IP,更多参考-h的帮助说明。 注意会有安全风险,考虑下面的 tunnel server 的方案。

提示

3.5.4 版本后,在 Web Console 可以鼠标右键复制粘贴。

scrollback URL 参数

提示

3.5.5 版本后支持

默认 Web Console 支持向上回滚的行数是 1000。可以在 URL 里用scrollback指定。比如

http://127.0.0.1:8563/?scrollback=3000在新窗口打开

使用 arthas tunnel server 连接远程 arthas

参考:Arthas Tunnel

- +
目录

Web Console

通过浏览器连接 arthas

Arthas 目前支持 Web Console,用户在 attach 成功之后,可以直接访问:http://127.0.0.1:8563/在新窗口打开。

可以填入 IP,远程连接其它机器上的 arthas。

注意

默认情况下,arthas 只 listen 127.0.0.1,所以如果想从远程连接,则可以使用 --target-ip参数指定 listen 的 IP,更多参考-h的帮助说明。 注意会有安全风险,考虑下面的 tunnel server 的方案。

提示

3.5.4 版本后,在 Web Console 可以鼠标右键复制粘贴。

scrollback URL 参数

提示

3.5.5 版本后支持

默认 Web Console 支持向上回滚的行数是 1000。可以在 URL 里用scrollback指定。比如

http://127.0.0.1:8563/?scrollback=3000在新窗口打开

使用 arthas tunnel server 连接远程 arthas

参考:Arthas Tunnel

+ diff --git a/en/doc/advanced-use.html b/en/doc/advanced-use.html index dcfd9feb5..1508b1d7c 100644 --- a/en/doc/advanced-use.html +++ b/en/doc/advanced-use.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); Other features | arthas - + -
Table of Contents

Other features

Arthas Async Jobs

If you need to investigate an issue, but you are unsure about the exact time it occurs, you can run the monitoring command in the background and save the output to a log file.

Log the output

All execution records are fully saved in the log file for subsequent analysis.

Docker

Arthas configuration reference for using in Docker containers.

Web Console

Arthas supports living inside a browser. The communication between arthas and browser is via websocket.

Arthas Tunnel

Arthas Tunnel Server/Client enables remote management/connection to Java services across multiple servers.

How to use ognl

IDEA Plugin

Build arthas commands more efficiently in the IntelliJ IDEA compiler.

Arthas Properties

Arthas supports configuration options reference.

Start as a Java Agent

Arthas Spring Boot Starter

Starting with the application.

Load External Commands

Load external command jars when Arthas starts and extend team-specific diagnostic actions as Arthas commands.

HTTP API

The Http API provides structured data and supports more complex interactive functions, making it easier to integrate Arthas into custom interfaces.

Batch Processing

It is convenient for running multiple commands in bulk with custom scripts. It can be used in conjunction with the --select parameter to specify the process name.

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.

$ jps
+    
Table of Contents

Other features

Arthas Async Jobs

If you need to investigate an issue, but you are unsure about the exact time it occurs, you can run the monitoring command in the background and save the output to a log file.

Log the output

All execution records are fully saved in the log file for subsequent analysis.

Docker

Arthas configuration reference for using in Docker containers.

Web Console

Arthas supports living inside a browser. The communication between arthas and browser is via websocket.

Arthas Tunnel

Arthas Tunnel Server/Client enables remote management/connection to Java services across multiple servers.

How to use ognl

IDEA Plugin

Build arthas commands more efficiently in the IntelliJ IDEA compiler.

Arthas Properties

Arthas supports configuration options reference.

Start as a Java Agent

Arthas Spring Boot Starter

Starting with the application.

Load External Commands

Load external command jars when Arthas starts and extend team-specific diagnostic actions as Arthas commands.

HTTP API

The Http API provides structured data and supports more complex interactive functions, making it easier to integrate Arthas into custom interfaces.

Batch Processing

It is convenient for running multiple commands in bulk with custom scripts. It can be used in conjunction with the --select parameter to specify the process name.

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.

$ jps
 58883 math-game.jar
 58884 Jps
 

The select option allows you to specify a process name, which is very convenient.

$ ./as.sh --select math-game
@@ -61,10 +61,9 @@ Escape character is '^]'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.javaopen in new window

- +

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.javaopen in new window

+ diff --git a/en/doc/advice-class.html b/en/doc/advice-class.html index cebf8cabe..49af6dc0c 100644 --- a/en/doc/advice-class.html +++ b/en/doc/advice-class.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); Fundamental Fields in Expressions | arthas - + -

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.

public class Advice {
+    

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.

public class Advice {
 
     private final ClassLoader loader;
     private final Class<?> clazz;
@@ -50,7 +50,7 @@
 
     // getter/setter
 }
-

Description for the variables in the class Advice:

NameSpecification
loaderthe class loader for the current called class
clazzthe reference to the current called class
methodthe reference to the current called method
targetthe instance of the current called class
paramsthe parameters for the current call, which is an array (when there's no parameter, it will be an empty array)
returnObjthe return value from the current call - only available when the method call returns normally (isReturn==true), and null is for void return value
throwExpthe exceptions thrown from the current call - only available when the method call throws exception (isThrow==true)
isBeforeflag 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
isThrowflag to indicate the method call ends with exception thrown
isReturnflag to indicate the method call ends normally without exception thrown

All variables listed above can be used directly in the OGNL expressionopen in new window. The command will not execute and exit if there's illegal OGNL grammar or unexpected variable in the expression.

- +

Description for the variables in the class Advice:

NameSpecification
loaderthe class loader for the current called class
clazzthe reference to the current called class
methodthe reference to the current called method
targetthe instance of the current called class
paramsthe parameters for the current call, which is an array (when there's no parameter, it will be an empty array)
returnObjthe return value from the current call - only available when the method call returns normally (isReturn==true), and null is for void return value
throwExpthe exceptions thrown from the current call - only available when the method call throws exception (isThrow==true)
isBeforeflag 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
isThrowflag to indicate the method call ends with exception thrown
isReturnflag to indicate the method call ends normally without exception thrown

All variables listed above can be used directly in the OGNL expression. The command will not execute and exit if there's illegal OGNL grammar or unexpected variable in the expression.

+ diff --git a/en/doc/agent.html b/en/doc/agent.html index df2f74383..4636cebec 100644 --- a/en/doc/agent.html +++ b/en/doc/agent.html @@ -31,12 +31,12 @@ s.parentNode.insertBefore(hm, s); })(); Start as a Java Agent | arthas - + -

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
+    

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

Reference: https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html

- + diff --git a/en/doc/ai.html b/en/doc/ai.html index 68c4608f9..3efbdc201 100644 --- a/en/doc/ai.html +++ b/en/doc/ai.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); AI Integration | arthas - + -
Table of Contents

AI Integration

Arthas can integrate with AI assistants through MCP Server, allowing AI clients to execute Arthas diagnostic commands as tool calls. This is useful for Java troubleshooting, runtime analysis, and automated diagnostics.

MCP Server

  • Arthas MCP Server: Learn how to enable the MCP service, configure AI clients, use Streamable HTTP transport, and view supported diagnostic tools.
- +
Table of Contents

AI Integration

Arthas can integrate with AI assistants through MCP Server, allowing AI clients to execute Arthas diagnostic commands as tool calls. This is useful for Java troubleshooting, runtime analysis, and automated diagnostics.

MCP Server

  • Arthas MCP Server: Learn how to enable the MCP service, configure AI clients, use Streamable HTTP transport, and view supported diagnostic tools.
+ diff --git a/en/doc/arthas-properties.html b/en/doc/arthas-properties.html index 85305fbda..91ec4a2dd 100644 --- a/en/doc/arthas-properties.html +++ b/en/doc/arthas-properties.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); Arthas Properties | arthas - + -
Table of Contents

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

Supported configuration items

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
+    
Table of Contents

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

Supported configuration items

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
 arthas.telnetPort=3658
 arthas.httpPort=8563
 arthas.ip=127.0.0.1
@@ -51,6 +51,6 @@ arthas.sessionTimeout=10800
 
  • 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.

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

TIP

since 3.5.2

Such as configuration:

arthas.disabledCommands=stop,dump
 

It can also be configured on the command line: --disabled-commands stop,dump.

TIP

By default, arthas-spring-boot-starter will disable the stop command.

Load external commands

You can load external command jars when Arthas starts:

arthas.commandLocations=/opt/arthas/ext-command.jar,/opt/arthas/ext-commands
 
  • Each entry can be a jar file path or a directory path, separated by commas.
  • Directory entries only scan *.jar in the current directory and do not recurse.
  • If ${arthas.home}/commands exists, Arthas also tries to load *.jar from that directory at startup. Explicit arthas.commandLocations are loaded first, then the default directory.
  • The external jar should expose a CommandResolver via META-INF/services/com.taobao.arthas.core.shell.command.CommandResolver.
  • Arthas keeps built-in commands first; when an external command conflicts with a built-in command name, the external command is skipped and a log is written.

It can also be configured on the command line: --command-locations '/opt/arthas/ext-command.jar,/opt/arthas/ext-commands'.

For a complete external command development and loading example, see Load External Commands.

Configured order

The order of configuration is: command line parameters > System Env > System Properties > arthas.properties.

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.

If you want arthas.properties to have the highest order, you can configure arthas.config.overrideAll=true.

- + diff --git a/en/doc/async.html b/en/doc/async.html index 2104a9bc7..1136bc72e 100644 --- a/en/doc/async.html +++ b/en/doc/async.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); Arthas Async Jobs | arthas - + -
Table of Contents

Arthas Async Jobs

Async Jobs online tutorialopen in new window

Asynchronous jobs in arthas. The idea is borrowed from linux jobsopen in new window.

1. Use & to run the command in the background

For example, execute the trace command in the background:

trace Test t &
+    
Table of Contents

Arthas Async Jobs

Asynchronous jobs in arthas. The idea is borrowed from linux jobsopen in new window.

1. Use & to run the command in the background

For example, execute the trace command in the background:

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.

2. List background jobs

If you want to list all background jobs, you can execute the jobs command and the results are as follows:

$ jobs
 [10]*
        Stopped           watch com.taobao.container.Test test "params[0].{? #this.name == null }" -x 2
@@ -49,6 +49,6 @@
 job id : 2
 cache location : /Users/admin/logs/arthas-cache/28198/2
 

At this time, the command will be executed asynchronously in the background, and the result will be asynchronously saved in the file (~/logs/arthas-cache/${PID}/${JobId});

  • At this time, the execution of the task is not affected by the session disconnection; the default timeout period of the task is 1 day, and the default timeout period can be modified through the global options command;
  • The result of this command will be output asynchronously to the file; at this time, regardless of whether save-result is true or not, the result will not be written asynchronously to ~/logs/arthas-cache/result.log.

6. Stop job

If you want to stop background job, just kill <job-id>.

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)
- + diff --git a/en/doc/auth.html b/en/doc/auth.html index b0f29d9b8..0cfc2b04d 100644 --- a/en/doc/auth.html +++ b/en/doc/auth.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); auth | arthas - + -
Table of Contents

auth

TIP

Authenticates the current session

Configure username and password

When attaching, you can specify a password on the command line. such as:

java -jar arthas-boot.jar --password ppp
+    
Table of Contents

auth

TIP

Authenticates the current session

Configure username and password

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

    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

After connecting to arthas, directly executing the command will prompt for authentication:

[arthas@37430]$ help
@@ -48,6 +48,6 @@ Authentication result: true
 

URL parameters

It supports passing username and password in parameters. such as:

curl 'http://localhost:8563/api?password=admin' \
   --data-raw '{"action":"exec","command":"version"}'
 
- + diff --git a/en/doc/base64.html b/en/doc/base64.html index 5026c8135..1083a832e 100644 --- a/en/doc/base64.html +++ b/en/doc/base64.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); base64 | arthas - + -
Table of Contents

base64

TIP

Encode and decode using Base64 representation.

Encode to base64

[arthas@70070]$ echo 'abc' > /tmp/test.txt
+    
-    
+    
   
 
diff --git a/en/doc/batch-support.html b/en/doc/batch-support.html
index 5d84fa4d6..10ec40995 100644
--- a/en/doc/batch-support.html
+++ b/en/doc/batch-support.html
@@ -31,11 +31,11 @@
       s.parentNode.insertBefore(hm, s);
     })();
     Batch Processing | arthas
-    
+    
     
   
   
-    
Table of Contents

Batch Processing

With the help of Batch Processing, you can run multiple commands in batch and get the final result at the end. The process name can be specified using the “–select” parameter.

Usage

Step 1: Create the script

Create a test.as script suffixed with as. Here as is suggested for the suffix of the filename, but in fact any suffix is acceptable.

➜  arthas git:(develop) cat /var/tmp/test.as
+    
Table of Contents

Batch Processing

With the help of Batch Processing, you can run multiple commands in batch and get the final result at the end. The process name can be specified using the “–select” parameter.

Usage

Step 1: Create the script

Create a test.as script suffixed with as. Here as is suggested for the suffix of the filename, but in fact any suffix is acceptable.

➜  arthas git:(develop) cat /var/tmp/test.as
 help
 dashboard -n 1
 session
@@ -45,6 +45,6 @@ sc -d org.apache.commons.lang.Stri
 

Use -c also can specify the commands, like this:

./as.sh -c 'sysprop; thread' 56328 > test.out
 

Step 3: Check the output

cat test.out
 
- + diff --git a/en/doc/cat.html b/en/doc/cat.html index 341e3aef9..5182d887b 100644 --- a/en/doc/cat.html +++ b/en/doc/cat.html @@ -31,12 +31,12 @@ s.parentNode.insertBefore(hm, s); })(); cat | arthas - + -
Table of Contents

cat

cat online tutorialopen in new window

TIP

Concatenate and print files

Usage

$ cat /tmp/a.txt
+    
-    
+    
   
 
diff --git a/en/doc/classloader-metaspace.html b/en/doc/classloader-metaspace.html
index caa52fa8b..562bebc0b 100644
--- a/en/doc/classloader-metaspace.html
+++ b/en/doc/classloader-metaspace.html
@@ -31,11 +31,11 @@
       s.parentNode.insertBefore(hm, s);
     })();
     classloader-metaspace | arthas
-    
+    
     
   
   
-    
Table of Contents

classloader-metaspace

TIP

Show metaspace / class metadata statistics by ClassLoader instance.

classloader-metaspace uses the JFR jdk.ClassLoaderStatistics event to collect metaspace statistics for each ClassLoaderData, then maps those rows back to Arthas ClassLoader hash, type and display name.

Note: this command reports metaspace / class metadata memory. It does not report the retained size of all Java heap objects reachable from a ClassLoader.

classloader-metaspace depends on JFR. If the current JDK does not support JFR, the command is not registered.

Options

NameSpecification
[c:]ClassLoader hashcode, same format as classloader -c
[classLoaderClass:]Filter by full ClassLoader class name
[duration:]JFR sampling duration, 2500ms by default; supports ms, s, m; a plain number means milliseconds
[period:]jdk.ClassLoaderStatistics period, 500ms by default; supports ms, s, m
[limit:]Show only the first N rows after sorting by chunkSize descending
[verbose:]Show full diagnostic columns, including classLoaderData, hiddenBlockSize and type; -v is also supported

Output

The default terminal table prioritizes core columns for daily troubleshooting. With --verbose, full diagnostic columns are shown. Long text columns, type and name, are shown on the right and may be truncated or hidden when the terminal is narrow.

FieldSpecification
hashArthas ClassLoader hash
classesJFR classCount, the number of loaded classes
chunkSizeTotal allocated metaspace chunk size for the ClassLoaderData
blockSizeTotal used metaspace block size
nameDisplay name. The command tries JFR name first, then falls back to toString()

--verbose also shows:

FieldSpecification
classLoaderDataHotSpot ClassLoaderData pointer
hiddenBlockSizeTotal metaspace block size used by hidden classes; on JDK 11 this is read from the JFR anonymousBlockSize field
typeClassLoader class name

Usage

Show all ClassLoader metaspace statistics

$ classloader-metaspace
+    
Table of Contents

classloader-metaspace

TIP

Show metaspace / class metadata statistics by ClassLoader instance.

classloader-metaspace uses the JFR jdk.ClassLoaderStatistics event to collect metaspace statistics for each ClassLoaderData, then maps those rows back to Arthas ClassLoader hash, type and display name.

Note: this command reports metaspace / class metadata memory. It does not report the retained size of all Java heap objects reachable from a ClassLoader.

classloader-metaspace depends on JFR. If the current JDK does not support JFR, the command is not registered.

Options

NameSpecification
[c:]ClassLoader hashcode, same format as classloader -c
[classLoaderClass:]Filter by full ClassLoader class name
[duration:]JFR sampling duration, 2500ms by default; supports ms, s, m; a plain number means milliseconds
[period:]jdk.ClassLoaderStatistics period, 500ms by default; supports ms, s, m
[limit:]Show only the first N rows after sorting by chunkSize descending
[verbose:]Show full diagnostic columns, including classLoaderData, hiddenBlockSize and type; -v is also supported

Output

The default terminal table prioritizes core columns for daily troubleshooting. With --verbose, full diagnostic columns are shown. Long text columns, type and name, are shown on the right and may be truncated or hidden when the terminal is narrow.

FieldSpecification
hashArthas ClassLoader hash
classesJFR classCount, the number of loaded classes
chunkSizeTotal allocated metaspace chunk size for the ClassLoaderData
blockSizeTotal used metaspace block size
nameDisplay name. The command tries JFR name first, then falls back to toString()

--verbose also shows:

FieldSpecification
classLoaderDataHotSpot ClassLoaderData pointer
hiddenBlockSizeTotal metaspace block size used by hidden classes; on JDK 11 this is read from the JFR anonymousBlockSize field
typeClassLoader class name

Usage

Show all ClassLoader metaspace statistics

$ classloader-metaspace
  hash      classes  chunkSize  blockSize  name
  68b31f0a  2115     1048576    823296     com.taobao.arthas.agent.ArthasClassloader@68b31f0a
  null      1861     524288     410624     BootstrapClassLoader
@@ -52,6 +52,6 @@ Affect(row-cnt:21        7168       1752       0                demo.TestApp$ModuleClassLoader  user-service's ModuleClassLoader
 

Limit output rows

$ classloader-metaspace --limit 20
 

Rows are sorted by chunkSize desc, blockSize desc, name asc, so --limit keeps ClassLoaders with larger metaspace chunk allocation.

- + diff --git a/en/doc/classloader.html b/en/doc/classloader.html index 54662ffca..ede4012ea 100644 --- a/en/doc/classloader.html +++ b/en/doc/classloader.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); classloader | arthas - + -
Table of Contents

classloader

classloader online tutorialopen in new window

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

NameSpecification
[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

--url-classes options

NameSpecification
--url-classesShow relationship between loaded classes and codeSource(URL/jar) in a specific ClassLoader
-d, --detailsDetails mode: list class names for each URL/jar (use -n/--limit to control output)
--jar <kw>Filter jar(URL) by keyword (contains match by default)
--class <kw>Filter classes by keyword/package (contains match by default)
-E, --regexTreat --jar/--class as regular expression (keyword match by default)
-n, --limit <N>In details mode, show at most N classes per URL/jar (100 by default)

Usage

View statistics categorized by class type

$ classloader
+    
Table of Contents

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

NameSpecification
[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

--url-classes options

NameSpecification
--url-classesShow relationship between loaded classes and codeSource(URL/jar) in a specific ClassLoader
-d, --detailsDetails mode: list class names for each URL/jar (use -n/--limit to control output)
--jar <kw>Filter jar(URL) by keyword (contains match by default)
--class <kw>Filter classes by keyword/package (contains match by default)
-E, --regexTreat --jar/--class as regular expression (keyword match by default)
-n, --limit <N>In details mode, show at most N classes per URL/jar (100 by default)

Usage

View statistics categorized by class type

$ classloader
  name                                       numberOfInstances  loadedCountTotal
  com.taobao.arthas.agent.ArthasClassloader  1                  2115
  BootstrapClassLoader                       1                  1861
@@ -130,6 +130,6 @@ Affect(row-cnt:2

Filter by jar name keyword and show details (list class names):

$ classloader -c 3d4eac69 --url-classes -d --jar math-game
 

Filter further by package/keyword (will also output matchedClassCount for statistics):

$ classloader -c 3d4eac69 --url-classes --jar spring-core --class org.springframework
 
- + diff --git a/en/doc/cls.html b/en/doc/cls.html index ba6ec58f6..f43698f8a 100644 --- a/en/doc/cls.html +++ b/en/doc/cls.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); cls | arthas - + - - + + diff --git a/en/doc/commands.html b/en/doc/commands.html index 82c59c7ce..ef82dc115 100644 --- a/en/doc/commands.html +++ b/en/doc/commands.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); All Commands | arthas - + -
Table of Contents

All Commands

  • dashboard - dashboard for the system's real-time data
  • getstatic - examine class's static properties
  • heapdump - dump java heap in hprof binary format, like jmap
  • jvm - show JVM information
  • logger - print the logger information, update the logger level
  • mbean - show Mbean information
  • memory - show JVM memory information
  • ognl - execute ognl expression
  • perfcounter - show JVM Perf Counter information
  • sysenv — view system environment variables
  • sysprop - view/modify system properties
  • thread - show java thread information
  • vmoption - view/modify the vm diagnostic options.
  • vmtool - jvm tool, getInstances in jvm, forceGc
  • classloader - 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
  • classloader-metaspace - show metaspace / class metadata memory by ClassLoader instance
  • dump - dump the loaded classes in byte code to the specified location
  • jad - decompile the specified loaded classes
  • mc - Memory compiler, compiles .java files into .class files in memory
  • redefine - load external *.class files and re-define it into JVM
  • retransform - load external *.class files and retransform it into JVM
  • sc - check the info for the classes loaded by JVM
  • sm - check methods info for the loaded classes

WARNING

Attention: commands here are taking advantage of byte-code-injection, which means we are injecting some aspectsopen in new window 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 method execution statistics
  • line - watch arguments, local variables, and expression results at specified source lines
  • stack - display the stack trace for the specified class and method
  • trace - trace the execution time of specified method invocation
  • tt - time tunnel, record the arguments and returned value for the methods and replay
  • watch - display the input/output parameter, return object, and thrown exception of specified method invocation

profiler/flame graph

authentication

  • auth - authentication

options

  • options - check/set Arthas global optionss

Extension commands

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 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

Basic Arthas Commands

  • base64 - Encode and decode using Base64 representation.
  • cat - Concatenate and print files
  • cls - clear the screen
  • echo - write arguments to the standard output
  • grep - Pattern searcher
  • help - display Arthas help
  • history - view command history
  • keymap - keymap for Arthas keyboard shortcut
  • pwd - Return working directory name
  • quit/exit - exit the current Arthas session, without effecting other sessions
  • reset - reset all the enhanced classes. All enhanced classes will also be reset when Arthas server is closed by stop
  • session - display current session information
  • stop - terminate the Arthas server, all Arthas sessions will be destroyed
  • tee - Copies standard input to standard output, making a copy in zero or more files.
  • version - print the version for the Arthas attached to the current Java process
- +
Table of Contents

All Commands

  • dashboard - dashboard for the system's real-time data
  • getstatic - examine class's static properties
  • heapdump - dump java heap in hprof binary format, like jmap
  • jvm - show JVM information
  • logger - print the logger information, update the logger level
  • mbean - show Mbean information
  • memory - show JVM memory information
  • ognl - execute ognl expression
  • perfcounter - show JVM Perf Counter information
  • sysenv — view system environment variables
  • sysprop - view/modify system properties
  • thread - show java thread information
  • vmoption - view/modify the vm diagnostic options.
  • vmtool - jvm tool, getInstances in jvm, forceGc
  • classloader - 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
  • classloader-metaspace - show metaspace / class metadata memory by ClassLoader instance
  • dump - dump the loaded classes in byte code to the specified location
  • jad - decompile the specified loaded classes
  • mc - Memory compiler, compiles .java files into .class files in memory
  • redefine - load external *.class files and re-define it into JVM
  • retransform - load external *.class files and retransform it into JVM
  • sc - check the info for the classes loaded by JVM
  • sm - check methods info for the loaded classes

WARNING

Attention: commands here are taking advantage of byte-code-injection, which means we are injecting some aspectsopen in new window 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 method execution statistics
  • line - watch arguments, local variables, and expression results at specified source lines
  • stack - display the stack trace for the specified class and method
  • trace - trace the execution time of specified method invocation
  • tt - time tunnel, record the arguments and returned value for the methods and replay
  • watch - display the input/output parameter, return object, and thrown exception of specified method invocation

profiler/flame graph

authentication

  • auth - authentication

options

  • options - check/set Arthas global optionss

Extension commands

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 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

Basic Arthas Commands

  • base64 - Encode and decode using Base64 representation.
  • cat - Concatenate and print files
  • cls - clear the screen
  • echo - write arguments to the standard output
  • grep - Pattern searcher
  • help - display Arthas help
  • history - view command history
  • keymap - keymap for Arthas keyboard shortcut
  • pwd - Return working directory name
  • quit/exit - exit the current Arthas session, without effecting other sessions
  • reset - reset all the enhanced classes. All enhanced classes will also be reset when Arthas server is closed by stop
  • session - display current session information
  • stop - terminate the Arthas server, all Arthas sessions will be destroyed
  • tee - Copies standard input to standard output, making a copy in zero or more files.
  • version - print the version for the Arthas attached to the current Java process
+ diff --git a/en/doc/contact-us.html b/en/doc/contact-us.html index 34268b070..585227a9a 100644 --- a/en/doc/contact-us.html +++ b/en/doc/contact-us.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); Contact Us | arthas - + -
Table of Contents

Contact Us

Issues

Questions about how to use Arthas and opinions can be directly raised in issues: https://github.com/alibaba/arthas/issuesopen in new window

DingDing Group

  • Arthas open source discussion Group: 21965291 ,You can join by searching for group number。

  • Arthas open source discussion Group 2: 30707824 ,You can join by searching for group number。

  • Arthas open source discussion Group 3: 17605006847 , You can join by searching for group number。

  • Arthas open source discussion Group 4: 41920010710 , You can join by searching for group number。

Instructions for Installing DingTalk

DingTalk can be downloaded from: https://www.dingtalk.com/enopen in new window

After installing you can search for group number and join it.

QQ Group

Arthas open source discussion QQ group:916328269

Arthas open source discussion QQ group2:854625984

Arthas open source discussion QQ group 3: 672077388

- +
Table of Contents

Contact Us

Issues

Questions about how to use Arthas and opinions can be directly raised in issues: https://github.com/alibaba/arthas/issuesopen in new window

DingDing Group

  • Arthas open source discussion Group: 21965291 ,You can join by searching for group number。

  • Arthas open source discussion Group 2: 30707824 ,You can join by searching for group number。

  • Arthas open source discussion Group 3: 17605006847 , You can join by searching for group number。

  • Arthas open source discussion Group 4: 41920010710 , You can join by searching for group number。

Instructions for Installing DingTalk

DingTalk can be downloaded from: https://www.dingtalk.com/enopen in new window

After installing you can search for group number and join it.

QQ Group

Arthas open source discussion QQ group:916328269

Arthas open source discussion QQ group2:854625984

Arthas open source discussion QQ group 3: 672077388

+ diff --git a/en/doc/dashboard.html b/en/doc/dashboard.html index 03e903c2b..a102c7ef9 100644 --- a/en/doc/dashboard.html +++ b/en/doc/dashboard.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); dashboard | arthas - + -
Table of Contents

dashboard

dashboard online tutorialopen in new window

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 QPSopen in new window, RT, error counts, and thread pool, etc.

Options

NameSpecification
[i:]The interval (in ms) between two executions, default is 5000 ms.
[n:]The number of times this command will be executed.

Usage

$ dashboard
+    
Table of Contents

dashboard

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 QPSopen in new window, RT, error counts, and thread pool, etc.

Options

NameSpecification
[i:]The interval (in ms) between two executions, default is 5000 ms.
[n:]The number of times this command will be executed.

Usage

$ dashboard
 ID   NAME                           GROUP           PRIORITY   STATE     %CPU      DELTA_TIME TIME      INTERRUPTE DAEMON
 -1   C2 CompilerThread0             -               -1         -         1.55      0.077      0:8.684   false      true
 53   Timer-for-arthas-dashboard-07b system          5          RUNNABLE  0.08      0.004      0:0.004   false      true
@@ -68,6 +68,6 @@ systemload.average                                             10.68
 processors                                                     8
 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

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).

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.

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 asVM Periodic Task Thread, VM Thread, Service Thread

Screenshot

- + diff --git a/en/doc/docker.html b/en/doc/docker.html index f4a551c13..b7311631a 100644 --- a/en/doc/docker.html +++ b/en/doc/docker.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); Docker | arthas - + -
Table of Contents

Docker

Use JDK in Docker

Many times, the problem that arthas can't work with the application in docker is because the docker does not install JDK, but installs JRE. If only JRE is installed, many JAVA command line tools and class libraries will be missing, and Arthas will not work properly. Here are two common ways to use JDK in Docker.

Use public JDK image

  • https://hub.docker.com/_/openjdk/

such as:

FROM openjdk:8-jdk
+    
Table of Contents

Docker

Use JDK in Docker

Many times, the problem that arthas can't work with the application in docker is because the docker does not install JDK, but installs JRE. If only JRE is installed, many JAVA command line tools and class libraries will be missing, and Arthas will not work properly. Here are two common ways to use JDK in Docker.

Use public JDK image

  • https://hub.docker.com/_/openjdk/

such as:

FROM openjdk:8-jdk
 

or:

FROM openjdk:8-jdk-alpine
 

Install via package management software

such as:

# Install OpenJDK-8
 RUN apt-get update && \
@@ -79,12 +79,69 @@ version: 3.0.5
 pid: 9
 time: 2018-12-18 11:30:36
 

Diagnose the Java process in Docker

docker exec -it  ${containerId} /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar"
-

Diagnose the Java process in the container in k8s

kubectl exec -it ${pod} --container ${containerId} -- /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar"
-

Install Arthas into the base Docker image

It's easy to install Arthas into your Docker image.

FROM openjdk:8-jdk-alpine
+

Diagnose a Java process in Kubernetes

If the application container already includes a shell, a full JDK, and a download tool, start Arthas directly inside the application container.

kubectl exec -it ${pod} --container ${containerName} -- /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar"
+

Attach from an ephemeral debug container

Starting with 4.3.4open in new window, Arthas can attach to a JVM in an application container from an ephemeral container created by kubectl debug. This is useful when the application uses a distroless image or does not include a shell or JDK.

Make sure the following requirements are met.

  • The Pod runs on Linux.
  • The Kubernetes cluster supports ephemeral containers, and the container runtime supports kubectl debug --target. The target JVM's PID must be visible from the debug container.
  • The debug container provides a full JDK and uses Arthas 4.3.4 or later.
  • If the debug container and target JVM use different UIDs, the debug container must run as root and be able to access /proc/<pid>/root for the target process. The target HotSpot must also accept an attach client with UID 0. Some older JDKs accept only the same UID/GID; those versions require matching IDs in both containers.

WARNING

The --profile=sysadmin option below creates a privileged ephemeral container. Use it only when authorized and permitted by the cluster security policy. If the application Pod enforces a non-root user, ask the cluster administrator for a debug configuration with the required permissions.

Add an ephemeral container to the running Pod. ${containerName} is the name of the target application container.

kubectl debug -it ${pod} \
+  --target=${containerName} \
+  --image=amazoncorretto:8-alpine-jdk \
+  --profile=sysadmin \
+  -- sh
+

The --target option places the ephemeral container in the target container's PID namespace. See Debug Running Podsopen in new window for configuration details that vary between Kubernetes versions.

Inside the debug container, download and extract the complete Arthas 4.3.4 distribution.

ARTHAS_VERSION=4.3.4
+ARTHAS_HOME=/tmp/arthas-${ARTHAS_VERSION}
+
+wget -qO /tmp/arthas.zip \
+  "https://repo1.maven.org/maven2/com/taobao/arthas/arthas-packaging/${ARTHAS_VERSION}/arthas-packaging-${ARTHAS_VERSION}-bin.zip"
+mkdir -p "${ARTHAS_HOME}"
+unzip -q /tmp/arthas.zip -d "${ARTHAS_HOME}"
+

Use ps to find the target JVM's PID. The following example uses PID 1.

ps -ef
+
+TARGET_PID=1
+java -jar "${ARTHAS_HOME}/arthas-boot.jar" "${TARGET_PID}"
+

Arthas automatically compares the mount namespaces of the debug container and the target JVM. When they differ, Arthas exposes the target JVM's attach socket and copies the complete Arthas Home into a temporary directory in the target container. No shared volume is required between the two containers.

After a successful cross-mount-namespace attach, the target JVM's arthas.log contains the following structured event.

event=arthas_attach status=success mode=cross-mount-namespace targetPid=... arthasHome=... network=... telnet=... http=...
+

Run stop to stop Arthas and remove the temporary Arthas Home copied into the target container. The quit and exit commands only disconnect the current session; they do not stop Arthas or remove that directory.

If ps in the debug container does not show the target JVM, the container runtime did not share the target process namespace as requested by --target, so this attach method cannot work. If the post-attach server health check fails, the terminal directs you to the target JVM's arthas.log. You can locate the log from the debug container.

find /proc/${TARGET_PID}/root -name arthas.log 2>/dev/null
+

Attach from a sidecar container

You can also preinstall a full JDK and Arthas in a long-running sidecar, then attach from the sidecar to an application JVM in the same Pod. Set shareProcessNamespace: trueopen in new window when the Pod is created. Otherwise, the sidecar cannot see the application container's PID. This setting shares only the PID namespace. The containers still have separate mount namespaces, and Arthas 4.3.4 accesses the target filesystem through /proc/<pid>/root, so no shared volume is required. Containers in a Pod already share a network namespace, so NET_ADMIN is not required either.

Prefer running the sidecar and application JVM with the same Linux UID and GID. With a normally attachable JVM, the default /proc security policy, and a writable temporary directory, this path does not require any additional Linux capabilities.

spec:
+  shareProcessNamespace: true
+  containers:
+    - name: app
+      securityContext:
+        runAsUser: 1000
+        runAsGroup: 1000
+    - name: arthas-sidecar
+      image: your-registry/arthas-sidecar:4.3.4
+      securityContext:
+        runAsUser: 1000
+        runAsGroup: 1000
+        runAsNonRoot: true
+        allowPrivilegeEscalation: false
+        capabilities:
+          drop: ["ALL"]
+

If the sidecar and application JVM use different UIDs, the sidecar must run as UID 0, and the target HotSpot must accept a root client. The current OpenJDK attach listeneropen in new window accepts either the same UID/GID or UID 0. The upstream OpenJDK 8u implementationopen in new window still requires an exact UID/GID match, and vendor builds may have different policies. This check runs inside the target JVM and cannot be bypassed by adding Linux capabilities. Use the same-UID/GID configuration for targets with this behavior.

When the target HotSpot accepts a root client, explicitly retain the following four capabilities to support the initial attach, temporary directories with restrictive permissions, and cleanup by stop.

Setting or capabilityPurpose
shareProcessNamespace: trueMakes the application JVM's PID and /proc/<pid> visible to the sidecar
runAsUser: 0Passes the cross-UID check when the target HotSpot accepts root clients
SYS_PTRACEPasses ptrace access checks for /proc/<pid>, /proc/<pid>/root, and mount namespace information
KILLSends SIGQUIT across UIDs when the target JVM's attach listener has not started
DAC_OVERRIDEConnects to the target user's 0600 attach socket and writes to the target container's temporary directory
CHOWNGives the copied Arthas Home to the target user so that stop can remove it

The following securityContext fragment is for a cross-UID sidecar. It does not require privileged: true, SYS_ADMIN, hostPID, or hostPath.

spec:
+  shareProcessNamespace: true
+  containers:
+    - name: arthas-sidecar
+      image: your-registry/arthas-sidecar:4.3.4
+      securityContext:
+        runAsUser: 0
+        runAsGroup: 0
+        allowPrivilegeEscalation: false
+        seccompProfile:
+          type: RuntimeDefault
+        capabilities:
+          drop: ["ALL"]
+          add:
+            - SYS_PTRACE
+            - KILL
+            - DAC_OVERRIDE
+            - CHOWN
+

Container runtime default capability sets usually include KILL, DAC_OVERRIDE, and CHOWN, so adding only SYS_PTRACE is often sufficient when the defaults are retained. The example above drops ALL and adds each required capability explicitly, making the result independent of runtime defaults.

WARNING

The Kubernetes Baseline and Restricted Pod Security Standardsopen in new window both disallow adding SYS_PTRACE; Restricted also disallows UID 0. A cluster administrator must provide an exemption or a dedicated namespace for this trusted cross-UID workload. A shared PID namespace also exposes process arguments, environment variables, and /proc/<pid>/root for other containers in the Pod. Do not make this sidecar available to untrusted users.

The Arthas attach process does not call the Kubernetes API, so the sidecar ServiceAccount needs no additional RBAC permissions. An operator who enters the sidecar with kubectl exec still needs the corresponding pods/exec permission.

The sidecar image must contain a full JDK and Arthas 4.3.4 or later. With a shared PID namespace, the application process is usually no longer PID 1; use ps to find its actual PID first.

kubectl exec -it ${pod} --container arthas-sidecar -- sh
+
+ps -ef
+TARGET_PID=<java-pid>
+java -jar /opt/arthas/arthas-boot.jar "${TARGET_PID}"
+

If the same-UID/GID configuration still cannot attach, check whether the target JVM uses -XX:+DisableAttachMechanism, and whether seccomp, AppArmor, SELinux, or the /proc mount policy blocks process access. If the target JVM uses a custom java.io.tmpdir, that directory must also be writable by the attach client.

Install Arthas into the base Docker image

It's easy to install Arthas into your Docker image.

FROM openjdk:8-jdk-alpine
 
 # copy arthas
 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/tagsopen in new window

- + diff --git a/en/doc/download.html b/en/doc/download.html index 721602af2..203ea8758 100644 --- a/en/doc/download.html +++ b/en/doc/download.html @@ -31,15 +31,15 @@ s.parentNode.insertBefore(hm, s); })(); Download | arthas - + -
Table of Contents

Download

Download full package

Download from maven central

Latest Version, Click To Download: open in new window

Download from Github Releases

https://github.com/alibaba/arthas/releasesopen in new window

Use as.sh

Download and unzip, find as.sh in the directory. Start it in bash:

./as.sh
+    
Table of Contents

Download

Download full package

Download from maven central

Latest Version, Click To Download: open in new window

Download from Github Releases

https://github.com/alibaba/arthas/releasesopen in new window

Use as.sh

Download and unzip, find as.sh in the directory. Start it in bash:

./as.sh
 

Print usage:

./as.sh -h
 

Use arthas-boot.jar

Download and unzip, find arthas-boot.jar in the directory. Start with java command:

java -jar arthas-boot.jar
 

Print usage:

java -jar arthas-boot.jar -h
 

Download Offline Help Documentation

Latest Version Documentation, Click To Download:open in new window


WARNING

If you need to diagnose applications running on JDK 6/7, please click here to download arthas 3open in new window.

- + diff --git a/en/doc/dump.html b/en/doc/dump.html index 91bb1eb5e..1efcff1a2 100644 --- a/en/doc/dump.html +++ b/en/doc/dump.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); dump | arthas - + -
Table of Contents

dump

dump online tutorialopen in new window

TIP

Dump the bytecode for the particular classes to the specified directory.

The dump command is used to dump the bytecode of classes actually running in the JVM to a specified directory. It is suitable for bulk downloading the bytecode of classes in a specific package directory. If you need to decompile a single class or view class information in real-time, you can refer to jad.

Options

NameSpecification
class-patternclass name pattern
[c:]hashcode of the class loader 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

$ dump java.lang.String
+    
Table of Contents

dump

TIP

Dump the bytecode for the particular classes to the specified directory.

The dump command is used to dump the bytecode of classes actually running in the JVM to a specified directory. It is suitable for bulk downloading the bytecode of classes in a specific package directory. If you need to decompile a single class or view class information in real-time, you can refer to jad.

Options

NameSpecification
class-patternclass name pattern
[c:]hashcode of the class loader 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

$ 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.
@@ -55,6 +55,6 @@ Affect(row-cnt:1$ExtClassLoader@66350f69
 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 killercoda using java 11.

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 <hashcode> is dynamic.

- + diff --git a/en/doc/echo.html b/en/doc/echo.html index 2a3445c56..c219e4eff 100644 --- a/en/doc/echo.html +++ b/en/doc/echo.html @@ -31,12 +31,12 @@ s.parentNode.insertBefore(hm, s); })(); echo | arthas - + -
Table of Contents

echo

echo online tutorialopen in new window

TIP

write arguments to the standard output.

Usage

$ echo 'hello'
+    
-    
+    
   
 
diff --git a/en/doc/external-command.html b/en/doc/external-command.html
index b4b7d3e99..213a7358c 100644
--- a/en/doc/external-command.html
+++ b/en/doc/external-command.html
@@ -31,11 +31,11 @@
       s.parentNode.insertBefore(hm, s);
     })();
     Load External Commands | arthas
-    
+    
     
   
   
-    
Table of Contents

Load External Commands

Arthas can load external command jars at startup. This is useful when you want to package team-specific diagnostic actions as Arthas commands. After an external command is loaded, you can use it like a built-in command and inspect it with help.

TIP

External commands are loaded only when the Arthas server starts. If Arthas has already attached to the target JVM, copying a jar into the command directory will not take effect until the Arthas server is restarted.

Loading methods

Command line

arthas-boot.jar supports the --command-locations option. Each entry can be a jar file path or a directory path, separated by commas:

java -jar arthas-boot.jar --command-locations '/opt/arthas/ext-command.jar,/opt/arthas/ext-commands' <pid>
+    
Table of Contents

Load External Commands

Arthas can load external command jars at startup. This is useful when you want to package team-specific diagnostic actions as Arthas commands. After an external command is loaded, you can use it like a built-in command and inspect it with help.

TIP

External commands are loaded only when the Arthas server starts. If Arthas has already attached to the target JVM, copying a jar into the command directory will not take effect until the Arthas server is restarted.

Loading methods

Command line

arthas-boot.jar supports the --command-locations option. Each entry can be a jar file path or a directory path, separated by commas:

java -jar arthas-boot.jar --command-locations '/opt/arthas/ext-command.jar,/opt/arthas/ext-commands' <pid>
 

If you use as.sh from the full distribution, you can pass the same option:

./as.sh --command-locations '/opt/arthas/ext-command.jar,/opt/arthas/ext-commands' <pid>
 

arthas.properties

Configure arthas.commandLocations in arthas.properties:

arthas.commandLocations=/opt/arthas/ext-command.jar,/opt/arthas/ext-commands
 

If you start Arthas through arthas-spring-boot-starter, use arthas.command-locations in Spring Boot configuration files:

arthas.command-locations=/opt/arthas/ext-command.jar,/opt/arthas/ext-commands
@@ -113,6 +113,6 @@
 demo-external Codex
 

Expected output:

demo external command loaded: Codex
 

Loading behavior and conflicts

At startup, Arthas appends external command jars to the Arthas ClassLoader and discovers commands with ServiceLoader<CommandResolver>. Command registration follows these rules:

  • External commands cannot override built-in commands. If an external command has the same name as a built-in command, it is skipped and a log is written.
  • If multiple external commands have the same name, only the first command is kept. Later duplicates are skipped and logged.
  • A broken CommandResolver does not stop other resolvers from loading. The error is written to the Arthas log.
  • If no valid external command is found, Arthas continues to start normally.
- + diff --git a/en/doc/faq.html b/en/doc/faq.html index 17de520ed..fcd6a4bd6 100644 --- a/en/doc/faq.html +++ b/en/doc/faq.html @@ -31,17 +31,17 @@ s.parentNode.insertBefore(hm, s); })(); FAQ | arthas - + -
Table of Contents

FAQ

TIP

For questions that are not in this list, please search in issues. https://github.com/alibaba/arthas/issuesopen in new window

Where is the log file?

Log file path: ~/logs/arthas/arthas.log

telnet: connect to address 127.0.0.1: Connection refused

  1. Check the log ~/logs/arthas/arthas.log
  2. Check the startup parameters of as.sh/arthas-boot.jar, whether a specific port is specified
  3. Use netstat to check the process of LISTEN 3658 port, confirm it is a java process, and it is the process you want to diagnose
  4. If the process of LISTEN 3658 port is not a java process, then the 3658 port is already occupied. You need to specify other ports in the startup parameters of as.sh/arthas-boot.jar.
  5. After confirming the process and port, try to connect with telnet 127.0.0.1 3658

Essentially, arthas will start a tcp server within the application java process, and then use telnet to connect to it.

  1. The port may not match
  2. The process itself may have been suspended and cannot accept new connections

If there is Arthas server already bind. in the Arthas log

  1. It means that the Arthas server has been started before, check the file descriptors opened by the target process. If it is a linux environment, you can go to /proc/$pid/fd, use ls -alh | grep arthas to check whether the process has loaded the arthas related jar package.
  2. If not, it may be that other processes have started arthas, or the application has been restarted.

How much impact does Arthas attach have on the performance of the original process?

https://github.com/alibaba/arthas/issues/44open in new window

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. 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.
  4. For more information: https://github.com/alibaba/arthas/issues/347open in new window

Can commands such as trace/watch enhance the classes in jdk?

By default, classes beginning with java. or the classes loaded by the Bootstrap ClassLoader are filtered out, but they can be turned on:

options unsafe true
+    
Table of Contents

FAQ

TIP

For questions that are not in this list, please search in issues. https://github.com/alibaba/arthas/issuesopen in new window

Where is the log file?

Log file path: ~/logs/arthas/arthas.log

telnet: connect to address 127.0.0.1: Connection refused

  1. Check the log ~/logs/arthas/arthas.log
  2. Check the startup parameters of as.sh/arthas-boot.jar, whether a specific port is specified
  3. Use netstat to check the process of LISTEN 3658 port, confirm it is a java process, and it is the process you want to diagnose
  4. If the process of LISTEN 3658 port is not a java process, then the 3658 port is already occupied. You need to specify other ports in the startup parameters of as.sh/arthas-boot.jar.
  5. After confirming the process and port, try to connect with telnet 127.0.0.1 3658

Essentially, arthas will start a tcp server within the application java process, and then use telnet to connect to it.

  1. The port may not match
  2. The process itself may have been suspended and cannot accept new connections

If there is Arthas server already bind. in the Arthas log

  1. It means that the Arthas server has been started before, check the file descriptors opened by the target process. If it is a linux environment, you can go to /proc/$pid/fd, use ls -alh | grep arthas to check whether the process has loaded the arthas related jar package.
  2. If not, it may be that other processes have started arthas, or the application has been restarted.

How much impact does Arthas attach have on the performance of the original process?

https://github.com/alibaba/arthas/issues/44open in new window

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. 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.
  4. For more information: https://github.com/alibaba/arthas/issues/347open in new window

Can commands such as trace/watch enhance the classes in jdk?

By default, classes beginning with java. or the classes loaded by the Bootstrap ClassLoader are filtered out, but they can be turned on:

options unsafe true
 

See more at options

TIP

To support the jars appended by java.lang.instrument.Instrumentation#appendToBootstrapClassLoaderSearch need to enable unsafe.

How to view the result in json format

options json-format true
 

See more at options

Can arthas trace native methods

No.

Can arthas view the value of a variable in memory?

  1. You can use vmtool command.
  2. You can use some tricks to intercept the object with the tt 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 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.

You can use -v to view the condition express result https://github.com/alibaba/arthas/issues/1348open in new window

example math-game

watch demo.MathGame primeFactors '{params,returnObj,throwExp}' 'params.length >0 && returnObj instanceof java.util.List' -v
 

How to watch or trace constructor?

watch demo.MathGame <init> '{params,returnObj,throwExp}' -v
 

How to watch or trace inner classes?

In the JVM specification the name of inner classes is OuterClass$InnerClass.

watch OuterClass$InnerClass
 

Does it support watch and trace lambda classes?

For classes generated by lambda, will be skipped because the JVM itself does not allow enhancements to classes generated by lambda.

Enter Unicode characters

Starting with Arthas 4.3.2, the terminal supports directly entering and editing Chinese and other Unicode characters.

In Arthas 4.3.1 and earlier, convert Unicode characters to the \u representation:

ognl '@java.lang.System@out.println("Hello \u4e2d\u6587")'
-

java.lang.ClassFormatError: null, skywalking arthas compatible use

When error log appear java.lang.ClassFormatError: null, it is usually modified by other bytecode tools that are not compatible with arthas modified bytecode.

For example: use skywalking V8.1.0 below cannot trace, watch classes enhanced by skywalking agentopen in new window, V8.1.0 or above is compatible, refer to skywalking configuration for more details. skywalking compatible with other javaagent bytecode processingopen in new window.

class redefinition failed: attempted to change the schema (add/remove fields)

Reference: https://github.com/alibaba/arthas/issues/2165open in new window

Can I use arthas offline?

Yes. Just download the full size package and unzip it, refer to: Download.

How to use the specified version of Arthas without using the automatic upgrade version?

  1. When starting as.sh/arthas-boot.jar, you can specify it with the --use-version parameter.
  2. Download the full package, unzip it, and cd to the arthas directory to start. In this case, the version in the current directory will be used.

Attach the process with pid 1 in docker/k8s failed

Reference: https://github.com/alibaba/arthas/issues/362#issuecomment-448185416open in new window

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..

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.

The spring bean cglib object is obtained in the ognl expression, but the field is null

Reference:

- +

See Tips for complex OGNL expressions for complex syntax, formatting constraints, and troubleshooting.

java.lang.ClassFormatError: null, skywalking arthas compatible use

When error log appear java.lang.ClassFormatError: null, it is usually modified by other bytecode tools that are not compatible with arthas modified bytecode.

For example: use skywalking V8.1.0 below cannot trace, watch classes enhanced by skywalking agentopen in new window, V8.1.0 or above is compatible, refer to skywalking configuration for more details. skywalking compatible with other javaagent bytecode processingopen in new window.

class redefinition failed: attempted to change the schema (add/remove fields)

Reference: https://github.com/alibaba/arthas/issues/2165open in new window

Can I use arthas offline?

Yes. Just download the full size package and unzip it, refer to: Download.

How to use the specified version of Arthas without using the automatic upgrade version?

  1. When starting as.sh/arthas-boot.jar, you can specify it with the --use-version parameter.
  2. Download the full package, unzip it, and cd to the arthas directory to start. In this case, the version in the current directory will be used.

Attach the process with pid 1 in docker/k8s failed

Reference: https://github.com/alibaba/arthas/issues/362#issuecomment-448185416open in new window

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..

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.

The spring bean cglib object is obtained in the ognl expression, but the field is null

Reference:

+ diff --git a/en/doc/getstatic.html b/en/doc/getstatic.html index bef1e70d4..cf4d82b8c 100644 --- a/en/doc/getstatic.html +++ b/en/doc/getstatic.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); getstatic | arthas - + -
Table of Contents

getstatic

getstatic online tutorialopen in new window

Usage

  • 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.

$ getstatic demo.MathGame random
+    
Table of Contents

getstatic

Usage

  • 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.

$ getstatic demo.MathGame random
 field: random
 @Random[
     serialVersionUID=@Long[3905348978240129619],
@@ -55,7 +55,7 @@ field: random
     seedOffset=@Long[24],
 ]
 
  • 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 <ClassName>.

if you use-c, you have to manually type hashcode by -c <hashcode>.

$ getstatic -c 3d4eac69 demo.MathGame random
-

For classloader with only one instance, it can be specified by --classLoaderClass using class name, which is more convenient to use.

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 killercoda using java 11.

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 <hashcode> is dynamic.

Tip: if the static field is a complex class, you can even use OGNLopen in new window to traverse, filter and access the inner properties of this class.

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:

$ getstatic com.alibaba.arthas.Test n 'entrySet().iterator.{? #this.key.name()=="STOP"}'
+

For classloader with only one instance, it can be specified by --classLoaderClass using class name, which is more convenient to use.

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 killercoda using java 11.

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 <hashcode> is dynamic.

Tip: if the static field is a complex class, you can even use OGNL to traverse, filter and access the inner properties of this class.

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:

$ getstatic com.alibaba.arthas.Test n 'entrySet().iterator.{? #this.key.name()=="STOP"}'
 field: n
 @ArrayList[
     @Node[STOP=bbb],
@@ -69,6 +69,6 @@ field: m
     @Node[a=aaa],
 ]
 
- + diff --git a/en/doc/grep.html b/en/doc/grep.html index 1f69fc79c..ef554a187 100644 --- a/en/doc/grep.html +++ b/en/doc/grep.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); grep | arthas - + -
Table of Contents

grep

grep online tutorialopen in new window

TIP

Similar to the traditional grep command.

Usage

 USAGE:
+    
-    
+    
   
 
diff --git a/en/doc/groovy.html b/en/doc/groovy.html
index 0434e51bb..ae2f26f5f 100644
--- a/en/doc/groovy.html
+++ b/en/doc/groovy.html
@@ -31,11 +31,11 @@
       s.parentNode.insertBefore(hm, s);
     })();
     groovy | arthas
-    
+    
     
   
   
-    
Table of Contents

groovy

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

  1. Prohibit from alternating the original logic. Like watch command, The major purpose of scripting is monitoring and observing.
  2. Only allow to monitor at the stages of before/success/exception/finish on one method.

Parameters

ParameterExplanation
class-patternclass name pattern
method-patternmethod name pattern
script-filepaththe 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

/**
+    
Table of Contents

groovy

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

  1. Prohibit from alternating the original logic. Like watch command, The major purpose of scripting is monitoring and observing.
  2. Only allow to monitor at the stages of before/success/exception/finish on one method.

Parameters

ParameterExplanation
class-patternclass name pattern
method-patternmethod name pattern
script-filepaththe 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

/**
  * Listeners for script to enhance the class
  */
 interface ScriptListener {
@@ -159,6 +159,6 @@ returning:class=IbatisProductDao=IbatisProductDao;method=getProductById;paramslen=1;[Ljava.lang.Object;@5b0e2d00;
 returning:class=IbatisProductDao;method=getProductById;
 
- + diff --git a/en/doc/heapdump.html b/en/doc/heapdump.html index 64890d1bf..4afdf2330 100644 --- a/en/doc/heapdump.html +++ b/en/doc/heapdump.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); heapdump | arthas - + -
Table of Contents

heapdump

heapdump online tutorialopen in new window

TIP

dump java heap in hprof binary format, like jmap.

Usage

Dump to file

[arthas@58205]$ heapdump arthas-output/dump.hprof
+    
Table of Contents

heapdump

TIP

dump java heap in hprof binary format, like jmap.

Usage

Dump to file

[arthas@58205]$ heapdump arthas-output/dump.hprof
 Dumping heap to arthas-output/dump.hprof ...
 Heap dump file created
 

TIP

The generated file is located in the arthas-output directory and can be downloaded through the browser at http://localhost:8563/arthas-output/

Dump only live objects

[arthas@58205]$ heapdump --live /tmp/dump.hprof
@@ -45,6 +45,6 @@ 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/en/doc/help.html b/en/doc/help.html index 165770a61..606c8af0e 100644 --- a/en/doc/help.html +++ b/en/doc/help.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); help | arthas - + -
Table of Contents

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.

TIP

[help command] equals [command -help],both is to show the detail usage of one command.

Options

NameSpecification
show all the commands that current Arthas server supports
[name:]show the detail usage of one command

Usage

$ help
+    
Table of Contents

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.

TIP

[help command] equals [command -help],both is to show the detail usage of one command.

Options

NameSpecification
show all the commands that current Arthas server supports
[name:]show the detail usage of one command

Usage

$ help
  NAME         DESCRIPTION
  help         Display Arthas Help
  auth         Authenticates the current session
@@ -101,6 +101,6 @@
  -i, --interval <value>                  The interval (in ms) between two executions, default is 5000 ms.
  -n, --number-of-execution <value>       The number of times this command will be executed.
 
- + diff --git a/en/doc/history.html b/en/doc/history.html index 16d5e8e7b..89a93d043 100644 --- a/en/doc/history.html +++ b/en/doc/history.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); history | arthas - + -
Table of Contents

history

view command history.

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

NameSpecification
[c:]clear all the history commands
[n:]view the nearest 5 commands

Usage

#view the nearest 3 commands
+    
Table of Contents

history

view command history.

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

NameSpecification
[c:]clear all the history commands
[n:]view the nearest 5 commands

Usage

#view the nearest 3 commands
 $ history 3
   269  thread
   270  cls
@@ -45,6 +45,6 @@ $ history 3history 3
   1  history 3
 
- + diff --git a/en/doc/http-api.html b/en/doc/http-api.html index 0cba7507f..1243246d9 100644 --- a/en/doc/http-api.html +++ b/en/doc/http-api.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); Http API | arthas - + -
Table of Contents

Http API

Http API online tutorialopen in new window

Overview

Http API provides a RESTful-like interactive interface, and both requests and responses data in JSON format. Compared with 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 must be submitted using POST. Such as POST http://127.0.0.1:8563/api.

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

{
+    
Table of Contents

Http API

Overview

Http API provides a RESTful-like interactive interface, and both requests and responses data in JSON format. Compared with 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 must be submitted using POST. Such as POST http://127.0.0.1:8563/api.

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

{
   "action": "exec",
   "requestId": "req112",
   "sessionId": "94766d3c-8b39-42d3-8596-98aee3ccbefb",
@@ -136,7 +136,6 @@
         "message": "Welcome to arthas!"
       },
       {
-        "tutorials": "https://arthas.aliyun.com/doc/arthas-tutorials.html",
         "time": "2020-08-06 15:56:43",
         "type": "welcome",
         "jobId": 0,
@@ -155,7 +154,7 @@
   "consumerId": "8f7f6ad7bc2d4cb5aa57a530927a95cc_2",
   "state": "SUCCEEDED"
 }
-

Execute commands asynchronously

curl -Ss -XPOST http://localhost:8563/api -d '''
+

Execute commands asynchronously

curl -Ss -XPOST http://localhost:8563/api -d '''
 {
   "action":"async_exec",
   "command":"watch demo.MathGame primeFactors \"{params, returnObj, throwExp}\" ",
@@ -319,7 +318,7 @@
 
  • Extract value with json_pp/awk:
class_path=$(echo $json_data | tr -d '\n' | json_pp | grep java.class.path | awk -F'"' '{ print $4 }')
 echo "classpath: $class_path"
 

Output:

classpath: demo-arthas-spring-boot.jar
-

NOTE:

  • 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

Make watch command output a map object

The result value of watch is generated by calculating the watch-express ognl expression. You can change the ognl expression to generate the desired value, please refer to OGNL documentopen in new window.

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:

watch *MathGame prime* '#{ "params" : params, "returnObj" : returnObj, "throwExp": throwExp}' -x 2 -n 5
+

NOTE:

  • 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

Make watch command output a map object

The result value of watch is generated by calculating the watch-express ognl expression. You can change the ognl expression to generate the desired value. See Tips for complex OGNL expressions.

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:

watch *MathGame prime* '#{ "params" : params, "returnObj" : returnObj, "throwExp": throwExp}' -x 2 -n 5
 

Execute the above command in Telnet shell/WebConsole, the output result:

ts=2020-08-06 16:57:20; [cost=0.241735ms] result=@LinkedHashMap[
     @String[params]:@Object[][
         @Integer[1],
@@ -379,6 +378,6 @@ EOF
             ...
 }
 

You can see that the value of the watch result becomes a map object, and the program can read value through a key .

- + diff --git a/en/doc/idea-plugin.html b/en/doc/idea-plugin.html index 577a1072a..25f2d1dc8 100644 --- a/en/doc/idea-plugin.html +++ b/en/doc/idea-plugin.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); IDEA Plugin | arthas - + -
- + + diff --git a/en/doc/index.html b/en/doc/index.html index f50a19524..f4cefb2e3 100644 --- a/en/doc/index.html +++ b/en/doc/index.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); Introduction | arthas - + -
Table of Contents

Introduction

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.

Background

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.

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.

Arthas is built to solve these issues. A developer can troubleshoot production issues on the fly. No JVM restart, no additional code changes. Arthas works as an observer, that is, it will never suspend your running threads.

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 8+ in version 4.x, including JDK 17, JDK 21, and JDK 25
  • Supports Linux/Mac/Windows

If you are using Arthas, please let us know. Your feedback is very important to us: Viewopen in new window

Contributors

open in new window

- +
Table of Contents

Introduction

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.

Background

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.

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.

Arthas is built to solve these issues. A developer can troubleshoot production issues on the fly. No JVM restart, no additional code changes. Arthas works as an observer, that is, it will never suspend your running threads.

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 8+ in version 4.x, including JDK 17, JDK 21, and JDK 25
  • Supports Linux/Mac/Windows

If you are using Arthas, please let us know. Your feedback is very important to us: Viewopen in new window

Contributors

open in new window

+ diff --git a/en/doc/install-detail.html b/en/doc/install-detail.html index 866d5eb9e..af2f63424 100644 --- a/en/doc/install-detail.html +++ b/en/doc/install-detail.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); Install Arthas | arthas - + -
Table of Contents

Install Arthas

Quick installation

Downloadarthas-boot.jar,Start with java command:

curl -O https://arthas.aliyun.com/arthas-boot.jar
+    
Table of Contents

Install Arthas

Quick installation

Downloadarthas-boot.jar,Start with java command:

curl -O https://arthas.aliyun.com/arthas-boot.jar
 java -jar arthas-boot.jar
 

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:

curl -L https://arthas.aliyun.com/install.sh | sh
@@ -47,6 +47,6 @@
 

Offline Help Documentation

Latest Version Documentation, Click To Download:open in new window

Uninstall

  • On Linux/Unix/Mac, delete the files with the following command:

    rm -rf ~/.arthas/
     rm -rf ~/logs/arthas/
     
  • On Windows, delete .arthas and logs/arthas directory under user home.


WARNING

If you need to diagnose applications running on JDK 6/7, please click here to install arthas 3open in new window.

- + diff --git a/en/doc/jad.html b/en/doc/jad.html index c87f3bcf8..296b1deb8 100644 --- a/en/doc/jad.html +++ b/en/doc/jad.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); jad | arthas - + -
Table of Contents

jad

jad online tutorialopen in new window

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. If you need to download the bytecode of classes in a specific package directory in bulk, you can refer to the dump tool for assistance.

  • 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

NameSpecification
class-patternpattern 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

Decompile java.lang.String

$ jad java.lang.String
+    
Table of Contents

jad

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. If you need to download the bytecode of classes in a specific package directory in bulk, you can refer to the dump tool for assistance.

  • 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

NameSpecification
class-patternpattern 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

Decompile java.lang.String

$ jad java.lang.String
 
 ClassLoader:
 
@@ -155,6 +155,6 @@ $ jad orgAffect(row-cnt:1) cost in 190 ms.
 

For classloader with only one instance, it can be specified by --classLoaderClass using class name, which is more convenient to use.

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 <hashcode> is dynamic.

Decompile with specified directory for dumpping class

Decompile class with jad need to dump corresponding classes into files. The default directory for dumpping classes is the directory of log file specified in logback.xml, we can use -d/--directory to specify the directory for dummping class.

$ jad demo.MathGame -d /tmp/jad/dump
 
- + diff --git a/en/doc/jfr.html b/en/doc/jfr.html index 181515f0f..2da3d7d25 100644 --- a/en/doc/jfr.html +++ b/en/doc/jfr.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); jfr | arthas - + -
Table of Contents

jfr

jfr online tutorialopen in new window

TIP

Java Flight Recorder (JFR) is a tool for collecting diagnostic and profiling data about a running Java application. It is integrated into the Java Virtual Machine (JVM) and causes almost no performance overhead, so it can be used even in heavily loaded production environments.

The jfr command supports starting and stopping JFR recordings during dynamic program running. Recording collects data about events. Events occur in the JVM or the Java application at a specific point in time. Each event has a name, a time stamp, and an optional payload. The payload is the data associated with an event, for example, the CPU usage, the Java heap size before and after the event, the thread ID of the lock holder, and so on.

The basic usage of the jfr command isjfr cmd [actionArg]

Note: jfr is supported only after the 8u262 version of jdk8

Supported Options

NameSpecification
cmdCommand to execute, support【start,status,dump,stop】
actionArgAttribute name pattern
[n:]Name of recording
[r:]Recording id
[dumponexit:]When the program exits, whether to dump the .jfr file. (boolean false)
[d:]Duration of recording, i.e. 60s, 2m, 5h, 3d. default no delay
[duration:]Duration of recording, default forever.
[s:]Server-side template, The default is default.jfc located at $JAVA_HOME/lib/jfr/default.jfc
[f:]Resulting recording filename
[maxage:]Maximum age of buffer data
[maxsize:]Maximum size of buffers in bytes
[state:]Recording state

Start jfr recording

$ jfr start
+    
Table of Contents

jfr

TIP

Java Flight Recorder (JFR) is a tool for collecting diagnostic and profiling data about a running Java application. It is integrated into the Java Virtual Machine (JVM) and causes almost no performance overhead, so it can be used even in heavily loaded production environments.

The jfr command supports starting and stopping JFR recordings during dynamic program running. Recording collects data about events. Events occur in the JVM or the Java application at a specific point in time. Each event has a name, a time stamp, and an optional payload. The payload is the data associated with an event, for example, the CPU usage, the Java heap size before and after the event, the thread ID of the lock holder, and so on.

The basic usage of the jfr command isjfr cmd [actionArg]

Note: jfr is supported only after the 8u262 version of jdk8

Supported Options

NameSpecification
cmdCommand to execute, support【start,status,dump,stop】
actionArgAttribute name pattern
[n:]Name of recording
[r:]Recording id
[dumponexit:]When the program exits, whether to dump the .jfr file. (boolean false)
[d:]Duration of recording, i.e. 60s, 2m, 5h, 3d. default no delay
[duration:]Duration of recording, default forever.
[s:]Server-side template, The default is default.jfc located at $JAVA_HOME/lib/jfr/default.jfc
[f:]Resulting recording filename
[maxage:]Maximum age of buffer data
[maxsize:]Maximum size of buffers in bytes
[state:]Recording state

Start jfr recording

$ jfr start
 Started recording 1. No limit specified, using maxsize=250MB as default.
 

TIP

The default JFR record is started.

Start the JFR recording, specify the recording name, duration, file saving path.

$ jfr start -n myRecording --duration 60s -f /tmp/myRecording.jfr
 Started recording 2. The result will be written to:
@@ -57,6 +57,6 @@ Dump recording 1, The result will be written t
 Stop recording 1, The result will be written to:
 /tmp/test/arthas-output/20220819-202049.jfr
 

notice: A recording can only be stopped once.

You can also specify the record output path.

View JFR recording results under arthas-output via browser

By default, arthas uses http port 8563 , which can be opened:http://localhost:8563/arthas-output/open in new window View the arthas-output directory below JFR recording results:

The resulting results can be viewed with tools that support the JFR format. Such as:

  • JDK Mission Control : https://github.com/openjdk/jmc
- + diff --git a/en/doc/jvm.html b/en/doc/jvm.html index 9a5af80a8..214600492 100644 --- a/en/doc/jvm.html +++ b/en/doc/jvm.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); jvm | arthas - + -
Table of Contents

jvm

jvm online tutorialopen in new window

TIP

Check the current JVM's info

Usage

$ jvm
+    
Table of Contents

jvm

TIP

Check the current JVM's info

Usage

$ jvm
 RUNTIME
 --------------------------------------------------------------------------------------------------------------
  MACHINE-NAME                   37@ff267334bb65
@@ -135,6 +135,6 @@ RUNTIME
  OPEN-FILE-DESCRIPTOR-COUNT     100
 Affect(row-cnt:0) cost in 88 ms.
 
  • 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
  • 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/en/doc/keymap.html b/en/doc/keymap.html index a22e6037d..76ec52ec1 100644 --- a/en/doc/keymap.html +++ b/en/doc/keymap.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); keymap | arthas - + -
Table of Contents

keymap

keymap online tutorialopen in new window

Use keymap command to print the current keymap:

The default keymap is:

ShortcutShortcut DescriptionCommand NameCommand Description
"\C-a"ctrl + abeginning-of-linego to the beginning of the line
"\C-e"ctrl + eend-of-linego to the end of the line
"\C-f"ctrl + fforward-wordforward a word
"\C-b"ctrl + bbackward-wordbackward a word
"\e[D"left arrowbackward-charbackward a character
"\e[C"right arrowforward-charforward a character
"\e[B"down arrownext-historyshow next history command
"\e[A"up arrowprevious-historyshow previous history command
"\C-h"ctrl + hbackward-delete-charbackward delete a character
"\C-?"ctrl + shift + /backward-delete-charbackward delete a character
"\C-u"ctrl + uundoclear current line
"\C-d"ctrl + ddelete-chardelete the character of the current cursor
"\C-k"ctrl + kkill-linedelete all characters from the current cursor to the end of the line
"\C-i"ctrl + icompleteAuto completion, equivalent to TAB
"\C-j"ctrl + jaccept-lineend the current line, equivalent to enter
"\C-m"ctrl + maccept-lineend 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
+    
Table of Contents

keymap

Use keymap command to print the current keymap:

The default keymap is:

ShortcutShortcut DescriptionCommand NameCommand Description
"\C-a"ctrl + abeginning-of-linego to the beginning of the line
"\C-e"ctrl + eend-of-linego to the end of the line
"\C-f"ctrl + fforward-wordforward a word
"\C-b"ctrl + bbackward-wordbackward a word
"\e[D"left arrowbackward-charbackward a character
"\e[C"right arrowforward-charforward a character
"\e[B"down arrownext-historyshow next history command
"\e[A"up arrowprevious-historyshow previous history command
"\C-h"ctrl + hbackward-delete-charbackward delete a character
"\C-?"ctrl + shift + /backward-delete-charbackward delete a character
"\C-u"ctrl + uundoclear current line
"\C-d"ctrl + ddelete-chardelete the character of the current cursor
"\C-k"ctrl + kkill-linedelete all characters from the current cursor to the end of the line
"\C-i"ctrl + icompleteAuto completion, equivalent to TAB
"\C-j"ctrl + jaccept-lineend the current line, equivalent to enter
"\C-m"ctrl + maccept-lineend 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
@@ -55,6 +55,6 @@
 "\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/en/doc/line.html b/en/doc/line.html index b4af1b2cb..19ae4760f 100644 --- a/en/doc/line.html +++ b/en/doc/line.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); line | arthas - + -
Table of Contents

line

TIP

Watch method arguments, local variables, and expression results at specified source line numbers.

The line command inserts probes at specified source line numbers in matched methods. When execution reaches one of these lines, Arthas prints the current thread, elapsed time, line number, and OGNL expression result. It is useful when a value inside a method is unexpected at a specific source line.

WARNING

line works through bytecode enhancement. In production or staging environments, specify --class, --method, --desc, and --line as precisely as possible, and use -n to limit output. Run reset or stop after diagnosis to restore enhanced classes.

Parameters

NameSpecification
--class <class-pattern>Class name to watch. Required. Wildcard matching is used by default
--method <method-pattern>Method name to watch. Optional. If omitted, all instrumentable methods in the class may match
--desc <method-desc>JVM method descriptor. Optional. Use it to select an overloaded method, for example (I)Ljava/util/List;
--line <line>Source line numbers to watch. Supports comma-separated values and repeated options, for example --line 51,57 --line 61
--express <express>Expression to evaluate. The default value is {params, localVarMap}
--condition <express>Condition expression. Output is printed only when the condition is true
--list-linesList available source line numbers without enhancing classes
[E]Enable regular expression matching. Wildcard matching is used by default
[x:]Object expansion level. The default value is 1
[M:]Result size limit. The default value comes from options object-size-limit
[n:]Execution count limit. The default value is 100
[c:]Specify the ClassLoader hash. Only classes loaded by this ClassLoader are enhanced
[m <arg>]Specify the maximum number of matched classes. The default value is 50. The long form is [maxMatch <arg>]
--stackPrint the current stack trace when the line probe hits
--stack-depth <depth>Maximum stack depth for --stack. The default value is 32, and the maximum value is 256

Expression Variables

line reuses the Arthas OGNL expression mechanism. Common variables:

VariableDescription
paramsMethod argument array
targetCurrent object. It is null for static methods
clazzCurrent class
methodCurrent method information
lineNumberMatched source line number
argNamesMethod argument name array. It depends on debug metadata in the target class
localVars / localsLocal variable value array visible at the current line
localVarNamesLocal variable name array visible at the current line
localVarMapMap from local variable name to value
#costElapsed time from method entry to the current line, in milliseconds

Local variable names and values depend on the target bytecode retaining LocalVariableTable debug metadata. If the target class has no debug metadata, localVarMap may be empty or incomplete.

Usage

Start Demo

Start math-game in Quick Start.

List Available Line Numbers

Use --list-lines first to find source lines that can be instrumented:

$ line --list-lines --class demo.MathGame --method primeFactors
+    
Table of Contents

line

TIP

Watch method arguments, local variables, and expression results at specified source line numbers.

The line command inserts probes at specified source line numbers in matched methods. When execution reaches one of these lines, Arthas prints the current thread, elapsed time, line number, and OGNL expression result. It is useful when a value inside a method is unexpected at a specific source line.

WARNING

line works through bytecode enhancement. In production or staging environments, specify --class, --method, --desc, and --line as precisely as possible, and use -n to limit output. Run reset or stop after diagnosis to restore enhanced classes.

Parameters

NameSpecification
--class <class-pattern>Class name to watch. Required. Wildcard matching is used by default
--method <method-pattern>Method name to watch. Optional. If omitted, all instrumentable methods in the class may match
--desc <method-desc>JVM method descriptor. Optional. Use it to select an overloaded method, for example (I)Ljava/util/List;
--line <line>Source line numbers to watch. Supports comma-separated values and repeated options, for example --line 51,57 --line 61
--express <express>Expression to evaluate. The default value is {params, localVarMap}
--condition <express>Condition expression. Output is printed only when the condition is true
--list-linesList available source line numbers without enhancing classes
[E]Enable regular expression matching. Wildcard matching is used by default
[x:]Object expansion level. The default value is 1
[M:]Result size limit. The default value comes from options object-size-limit
[n:]Execution count limit. The default value is 100
[c:]Specify the ClassLoader hash. Only classes loaded by this ClassLoader are enhanced
[m <arg>]Specify the maximum number of matched classes. The default value is 50. The long form is [maxMatch <arg>]
--stackPrint the current stack trace when the line probe hits
--stack-depth <depth>Maximum stack depth for --stack. The default value is 32, and the maximum value is 256

Expression Variables

line reuses the Arthas OGNL expression mechanism. Common variables:

VariableDescription
paramsMethod argument array
targetCurrent object. It is null for static methods
clazzCurrent class
methodCurrent method information
lineNumberMatched source line number
argNamesMethod argument name array. It depends on debug metadata in the target class
localVars / localsLocal variable value array visible at the current line
localVarNamesLocal variable name array visible at the current line
localVarMapMap from local variable name to value
#costElapsed time from method entry to the current line, in milliseconds

Local variable names and values depend on the target bytecode retaining LocalVariableTable debug metadata. If the target class has no debug metadata, localVarMap may be empty or incomplete.

See Tips for complex OGNL expressions for complex observation and condition expressions, null handling, and troubleshooting.

Usage

Start Demo

Start math-game in Quick Start.

List Available Line Numbers

Use --list-lines first to find source lines that can be instrumented:

$ line --list-lines --class demo.MathGame --method primeFactors
 class=demo.MathGame source=MathGame.java
 method=primeFactors(I)Ljava/util/List; lines=[44, 45, 46, 49, 50, 51, 52, 53, 54, 55, 57, 61]
 

Watch Arguments and Local Variables at a Line

The default expression is {params, localVarMap}:

$ line --class demo.MathGame --method primeFactors --line 51 -n 2 -x 2
@@ -60,6 +60,6 @@ Command execution times exceed lim
 

Specify Method Descriptor

When a method is overloaded, use --desc to select the exact JVM method descriptor:

line --class demo.MathGame --method primeFactors --desc '(I)Ljava/util/List;' --line 51
 

You can use sm -d demo.MathGame primeFactors to inspect method descriptors.

Print the current stack trace when the line probe hits:

line --class demo.MathGame --method primeFactors --line 57 --stack --stack-depth 8 -n 1
 

Notes

  • --line values must be greater than 0. At most 256 distinct line numbers can be specified.
  • line skips constructors, class initializers, native methods, and abstract methods.
  • If --method is omitted, multiple methods in the same class may be enhanced when they contain the target line number. Use --list-lines and --desc to narrow the target.
  • If the target class has no LineNumberTable, --list-lines cannot list available lines and line cannot insert probes by source line.
  • Running the same line probe repeatedly does not insert duplicate probes. When new line numbers are added, Arthas tries to append only missing line probes.
- + diff --git a/en/doc/logger.html b/en/doc/logger.html index 4b3af652e..bf7545598 100644 --- a/en/doc/logger.html +++ b/en/doc/logger.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); logger | arthas - + -
Table of Contents

logger

logger online tutorialopen in new window

TIP

Print the logger information, update the logger level

Usage

Take the following logback.xml as an example:

<?xml version="1.0" encoding="UTF-8"?>
+    
Table of Contents

logger

TIP

Print the logger information, update the logger level

Usage

Take the following logback.xml as an example:

<?xml version="1.0" encoding="UTF-8"?>
 <configuration>
     <appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <file>app.log</file>
@@ -171,6 +171,6 @@ update logger level success.
  codeSource                             file:/Users/hengyunabc/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar
 ...
 
- + diff --git a/en/doc/manual-install.html b/en/doc/manual-install.html index 8e2afeb66..9a9de14d8 100644 --- a/en/doc/manual-install.html +++ b/en/doc/manual-install.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); Manually Install Arthas | arthas - + -
Table of Contents

Manually Install Arthas

  1. Download the latest version

    Latest version, Click To Download: open in new window

  2. Unzip zip file

    unzip arthas-packaging-bin.zip
    +    
    Table of Contents

    Manually Install Arthas

    1. Download the latest version

      Latest version, Click To Download: open in new window

    2. Unzip zip file

      unzip arthas-packaging-bin.zip
       
    3. Install Arthas

      It is recommended to completely remove all old versions of Arthas before installation.

      sudo su admin
       rm -rf /home/admin/.arthas/lib/* # remove all the leftover of the old outdated Arthas
       cd arthas
      @@ -55,6 +55,6 @@ as-service.bat -pid -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.

    4. Use telnet to connect once attaching to the target JVM (in step 2) succeeds

      telnet 127.0.0.1 3658
       
    - + diff --git a/en/doc/mbean.html b/en/doc/mbean.html index 8f10a5592..5d2893fe2 100644 --- a/en/doc/mbean.html +++ b/en/doc/mbean.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); mbean | arthas - + -
    Table of Contents

    mbean

    mbean online tutorialopen in new window

    TIP

    show Mbean information

    This command can show or monitor Mbean attribute information.

    Parameters

    NameSpecification
    name-patternpattern for the Mbean name
    attribute-patternpattern 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:

    mbean
    +    
    Table of Contents

    mbean

    TIP

    show Mbean information

    This command can show or monitor Mbean attribute information.

    Parameters

    NameSpecification
    name-patternpattern for the Mbean name
    attribute-patternpattern 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:

    mbean
     

    show meta data of Mbean:

    mbean -m java.lang:type=Threading
     

    show attributes of Mbean:

    mbean java.lang:type=Threading
     

    Mbean name support wildcard matcher:

    mbean java.lang:type=Th*
    @@ -44,6 +44,6 @@
     

    Real-time monitoring using -i command:

    mbean -i 1000 java.lang:type=Threading *Count
     

    Real-time monitoring using -i with number of times the command will be executed using -n command (100 times by default):

    mbean -i 1000 -n 50 java.lang:type=Threading *Count
     
    - + diff --git a/en/doc/mc.html b/en/doc/mc.html index e288113eb..505e44abc 100644 --- a/en/doc/mc.html +++ b/en/doc/mc.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); mc | arthas - + -
    Table of Contents

    mc

    mc-retransform online tutorialopen in new window

    Usage

    TIP

    Memory compiler, compiles .java files into .class files in memory.

    mc /tmp/Test.java
    +    
    Table of Contents

    mc

    Usage

    TIP

    Memory compiler, compiles .java files into .class files in memory.

    mc /tmp/Test.java
     

    The classloader can be specified with the -c option:

    mc -c 327a647b /tmp/Test.java
     

    You can also specify the ClassLoader with the --classLoaderClass option:

    $ mc --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader /tmp/UserController.java -d /tmp
     Memory compiler output:
    @@ -43,6 +43,6 @@ Memory compiler output:
     Affect(row-cnt:1) cost in 346 ms
     

    The output directory can be specified with the -d option:

    mc -d /tmp/output /tmp/ClassA.java /tmp/ClassB.java
     

    After compiling the .class file, you can use the retransform command to re-define the loaded classes in JVM.

    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 command description for details.

    - + diff --git a/en/doc/mcp-server.html b/en/doc/mcp-server.html index de0c822fc..86250b946 100644 --- a/en/doc/mcp-server.html +++ b/en/doc/mcp-server.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); Arthas MCP Server | arthas - + -
    Table of Contents

    Arthas MCP Server

    Overview

    Arthas MCP Server is an experimental module of Arthas that implements a server based on the MCP (Model Context Protocol)open in new window. This module provides a unified JSON-RPC 2.0 interface through HTTP/Netty, enabling AI assistants to execute Arthas diagnostic commands via tool calls.

    MCP (Model Context Protocol) is a standardized protocol proposed by Anthropic for connecting AI assistants with various tools and data sources. Through Arthas MCP Server, AI assistants can naturally execute Java application diagnostic tasks, significantly improving development and operations efficiency.

    Key Features

    • AI-Native Integration: Supports mainstream AI clients (Claude Desktop, Cherry Studio, Cline, etc.)
    • Standardized Protocol: Full implementation of MCP protocol specification (version 2025-06-18), supporting Streamable Http transport
    • 29 Diagnostic Tools: Covers core functionalities including JVM monitoring, class loading, method tracing, etc.
    • Security Authentication: Supports Bearer Token authentication mechanism

    Supported Diagnostic Tools

    Arthas MCP Server integrates 29 diagnostic tools, categorized by functionality:

    ToolDescription
    dashboardReal-time JVM/application dashboard with customizable refresh interval and count control
    heapdumpGenerate JVM heap dump file, supports --live option to export only live objects
    jvmView current JVM detailed runtime information
    mbeanView or monitor MBean attributes, supports real-time refresh and pattern matching
    memoryView JVM memory usage
    threadView thread information and stack traces, supports finding blocked and busiest threads
    syspropView or modify system properties, supports dynamic JVM system property modification
    sysenvView system environment variables
    vmoptionView or update VM options, supports dynamic JVM parameter adjustment
    perfcounterView JVM Perf Counter information
    vmtoolVM tool collection, supports forced GC, instance retrieval, thread interruption, etc.
    getstaticView static field values of a class, supports specifying ClassLoader and OGNL expressions
    ognlExecute OGNL expressions, dynamically invoke methods and access fields

    Class/ClassLoader Tools (8)

    ToolDescription
    scSearch loaded classes in JVM, supports wildcard and regex matching, view class details (classloader, interfaces, superclass, annotations, etc.)
    smSearch methods of loaded classes, supports wildcard and regex matching, view method signatures, parameter types, annotations, etc.
    jadDecompile loaded class source code, converts actual running class bytecode in JVM to Java code
    classloaderClassLoader diagnostic tool, view classloader statistics, hierarchy tree, URLs, supports resource lookup and class loading; prefer sc for class search
    mcMemory compiler, compiles .java source files to .class bytecode files
    redefineReload class bytecode, allows hot-updating existing classes in the JVM at runtime
    retransformHot-load class bytecode, apply bytecode modifications to loaded classes and make them effective
    dumpDump actual running class bytecode from JVM to specified directory, suitable for batch downloading bytecode of specified packages

    Monitoring and Diagnostic Tools (6)

    ToolDescription
    monitorMonitor invocation of specified methods in real-time, outputs call count, success rate, average RT, and other statistics
    stackOutput call path of current method, helps analyze method call chains
    traceTrace internal method call paths, output time cost for each node, supports condition filtering
    ttTime tunnel for method execution data, records parameters and return values for each invocation, supports replay and inspection
    watchObserve method invocations including parameters, return values, and exceptions, supports real-time streaming output
    profilerAsync Profiler diagnostic tool, samples CPU/alloc/lock events and outputs flamegraph, JFR, and other formats

    Arthas Utility Tools (2)

    ToolDescription
    viewfileView file contents (only within configured directory whitelist), supports cursor/offset pagination to avoid returning large content all at once
    optionsView or modify Arthas global options

    Quick Start

    1. Configure MCP Service

    Enable MCP service in arthas.properties configuration file:

    # MCP (Model Context Protocol) configuration
    +    
    Table of Contents

    Arthas MCP Server

    Overview

    Arthas MCP Server is an experimental module of Arthas that implements a server based on the MCP (Model Context Protocol)open in new window. This module provides a unified JSON-RPC 2.0 interface through HTTP/Netty, enabling AI assistants to execute Arthas diagnostic commands via tool calls.

    MCP (Model Context Protocol) is a standardized protocol proposed by Anthropic for connecting AI assistants with various tools and data sources. Through Arthas MCP Server, AI assistants can naturally execute Java application diagnostic tasks, significantly improving development and operations efficiency.

    Key Features

    • AI-Native Integration: Supports mainstream AI clients (Claude Desktop, Cherry Studio, Cline, etc.)
    • Standardized Protocol: Full implementation of MCP protocol specification (version 2025-06-18), supporting Streamable Http transport
    • 29 Diagnostic Tools: Covers core functionalities including JVM monitoring, class loading, method tracing, etc.
    • Security Authentication: Supports Bearer Token authentication mechanism

    Supported Diagnostic Tools

    Arthas MCP Server integrates 29 diagnostic tools, categorized by functionality:

    ToolDescription
    dashboardReal-time JVM/application dashboard with customizable refresh interval and count control
    heapdumpGenerate JVM heap dump file, supports --live option to export only live objects
    jvmView current JVM detailed runtime information
    mbeanView or monitor MBean attributes, supports real-time refresh and pattern matching
    memoryView JVM memory usage
    threadView thread information and stack traces, supports finding blocked and busiest threads
    syspropView or modify system properties, supports dynamic JVM system property modification
    sysenvView system environment variables
    vmoptionView or update VM options, supports dynamic JVM parameter adjustment
    perfcounterView JVM Perf Counter information
    vmtoolVM tool collection, supports forced GC, instance retrieval, thread interruption, etc.
    getstaticView static field values of a class, supports specifying ClassLoader and OGNL expressions
    ognlExecute OGNL expressions, dynamically invoke methods and access fields

    Class/ClassLoader Tools (8)

    ToolDescription
    scSearch loaded classes in JVM, supports wildcard and regex matching, view class details (classloader, interfaces, superclass, annotations, etc.)
    smSearch methods of loaded classes, supports wildcard and regex matching, view method signatures, parameter types, annotations, etc.
    jadDecompile loaded class source code, converts actual running class bytecode in JVM to Java code
    classloaderClassLoader diagnostic tool, view classloader statistics, hierarchy tree, URLs, supports resource lookup and class loading; prefer sc for class search
    mcMemory compiler, compiles .java source files to .class bytecode files
    redefineReload class bytecode, allows hot-updating existing classes in the JVM at runtime
    retransformHot-load class bytecode, apply bytecode modifications to loaded classes and make them effective
    dumpDump actual running class bytecode from JVM to specified directory, suitable for batch downloading bytecode of specified packages

    Monitoring and Diagnostic Tools (6)

    ToolDescription
    monitorMonitor invocation of specified methods in real-time, outputs call count, success rate, average RT, and other statistics
    stackOutput call path of current method, helps analyze method call chains
    traceTrace internal method call paths, output time cost for each node, supports condition filtering
    ttTime tunnel for method execution data, records parameters and return values for each invocation, supports replay and inspection
    watchObserve method invocations including parameters, return values, and exceptions, supports real-time streaming output
    profilerAsync Profiler diagnostic tool, samples CPU/alloc/lock events and outputs flamegraph, JFR, and other formats

    Arthas Utility Tools (2)

    ToolDescription
    viewfileView file contents (only within configured directory whitelist), supports cursor/offset pagination to avoid returning large content all at once
    optionsView or modify Arthas global options

    TIP

    Before an AI agent supplies expression parameters to ognl, getstatic, vmtool, watch, trace, monitor, stack, or tt, read Tips for complex OGNL expressions. It explains raw expression parameters versus complete commands, variables available in each context, and incremental validation.

    Quick Start

    1. Configure MCP Service

    Enable MCP service in arthas.properties configuration file:

    # MCP (Model Context Protocol) configuration
     arthas.mcpEndpoint=/mcp
     

    2. Start Application

    Start Arthas or Java application with Arthas normally. By default, MCP service will be exposed on HTTP port 8563.

    Verify MCP service is running:

    curl http://localhost:8563/mcp
     

    If MCP protocol information is returned, the service has started successfully.

    3. Configure AI Client

    Configuration examples for mainstream AI clients:

    Cherry Studio / Cline

    Add MCP server configuration in settings:

    {
    @@ -63,6 +63,6 @@
     }
     

    WARNING

    Note: The token in the Authorization header must exactly match the value configured in arthas.password.

    viewfile Directory Whitelist Configuration

    The viewfile tool by default only allows viewing files in the following directories:

    • The arthas-output directory under the current working directory (if it exists)
    • The ~/logs/ directory under the user's home directory (if it exists)

    Additional directories can be configured via environment variable:

    export ARTHAS_MCP_VIEWFILE_ALLOWED_DIRS=/path/to/dir1,/path/to/dir2
     

    Feedback & Contribution

    TIP

    Arthas MCP Server is an experimental feature. Feedback and suggestions are welcome!

    - + diff --git a/en/doc/memory.html b/en/doc/memory.html index fb8b90b54..7674a3e4a 100644 --- a/en/doc/memory.html +++ b/en/doc/memory.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); memory | arthas - + -
    Table of Contents

    memory

    View the JVM memory information.

    For field information, refer to:

    Source code:

    • https://github.com/alibaba/arthas/blob/master/core/src/main/java/com/taobao/arthas/core/command/monitor200/MemoryCommand.java

    Usage

    $ memory
    +    
    Table of Contents

    memory

    View the JVM memory information.

    For field information, refer to:

    Source code:

    • https://github.com/alibaba/arthas/blob/master/core/src/main/java/com/taobao/arthas/core/command/monitor200/MemoryCommand.java

    Usage

    $ memory
     Memory                           used      total      max        usage
     heap                             32M       256M       4096M      0.79%
     g1_eden_space                    11M       68M        -1         16.18%
    @@ -50,6 +50,6 @@ codeheap_'non-profiled_nmethods' 685K
     mapped                           0K        0K         -          0.00%
     direct                           48M       48M        -          100.00%
     
    - + diff --git a/en/doc/monitor.html b/en/doc/monitor.html index e80b01af6..d42b707b0 100644 --- a/en/doc/monitor.html +++ b/en/doc/monitor.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); monitor | arthas - + -
    Table of Contents

    monitor

    monitor online tutorialopen in new window

    TIP

    Monitor method invocation.

    Monitor invocation for the method matched with class-pattern and method-pattern and filter by condition-expression.

    monitor is not a command returning immediately.

    A command returning immediately is a command immediately returns with the result after the command is input, while a non-immediate returning command will keep outputting the information from the target JVM process until user presses Ctrl+C.

    On Arthas's server side, the command is running as a background job, but the weaved code will not take further effect once the job is terminated, therefore, it will not impact the performance after the job quits. Furthermore, Arthas is designed to have no side effect to the business logic.

    Items to monitor

    ItemSpecification
    timestamptimestamp
    classJava class
    methodmethod (constructor and regular methods)
    totalcalling times
    successsuccess count
    failfailure count
    rtaverage RT
    fail-ratefailure ratio

    Parameters

    Parameter [c:] stands for cycles of statistics. Its value is an integer value in seconds.

    NameSpecification
    class-patternpattern for the class name
    method-patternpattern for the method name
    condition-expressioncondition expression for filtering method calls
    [E]turn on regex matching while the default is wildcard matching
    [c:]cycle of statistics, the default value: 60s
    --classloaderSpecify classloader hash, only enhance classes loaded by it
    [b]evaluate the condition-expression before method invoke
    [m <arg>]Specify the max number of matched Classes, the default value is 50. Long format is [maxMatch <arg>].

    Usage

    $ monitor -c 5 demo.MathGame primeFactors
    +    
    Table of Contents

    monitor

    TIP

    Monitor method invocation.

    Monitor invocation for the method matched with class-pattern and method-pattern and filter by condition-expression.

    monitor is not a command returning immediately.

    A command returning immediately is a command immediately returns with the result after the command is input, while a non-immediate returning command will keep outputting the information from the target JVM process until user presses Ctrl+C.

    On Arthas's server side, the command is running as a background job, but the weaved code will not take further effect once the job is terminated, therefore, it will not impact the performance after the job quits. Furthermore, Arthas is designed to have no side effect to the business logic.

    Items to monitor

    ItemSpecification
    timestamptimestamp
    classJava class
    methodmethod (constructor and regular methods)
    totalcalling times
    successsuccess count
    failfailure count
    rtaverage RT
    fail-ratefailure ratio

    Parameters

    Parameter [c:] stands for cycles of statistics. Its value is an integer value in seconds.

    NameSpecification
    class-patternpattern for the class name
    method-patternpattern for the method name
    condition-expressioncondition expression for filtering method calls
    [E]turn on regex matching while the default is wildcard matching
    [c:]cycle of statistics, the default value: 60s
    --classloaderSpecify classloader hash, only enhance classes loaded by it
    [b]evaluate the condition-expression before method invoke
    [m <arg>]Specify the max number of matched Classes, the default value is 50. Long format is [maxMatch <arg>].

    condition-expression uses OGNL syntax. See Core variables in expressions for available variables and Tips for complex OGNL expressions for complex conditions and troubleshooting.

    Usage

    $ monitor -c 5 demo.MathGame primeFactors
     Press Ctrl+C to abort.
     Affect(class-cnt:1 , method-cnt:1) cost in 94 ms.
      timestamp            class          method        total  success  fail  avg-rt(ms)  fail-rate
    @@ -118,6 +118,6 @@ Affect(class count: 2020-09-02 09:42:17  demo.MathGame  primeFactors    2       0        2      0.10      100.00%
     
    - + diff --git a/en/doc/ognl-express.html b/en/doc/ognl-express.html new file mode 100644 index 000000000..611778b5d --- /dev/null +++ b/en/doc/ognl-express.html @@ -0,0 +1,77 @@ + + + + + + + + + Tips for Complex OGNL Expressions | arthas + + + + +
    Table of Contents

    Tips for Complex OGNL Expressions

    This page covers complex but production-friendly OGNL patterns in Arthas, including variables, collection selection and projection, temporary result construction, null handling, and ClassLoaders. Every complete command in the “Verified complex expressions” section was run in a real Arthas attach session against the repository's math-game JVM. Dynamic values such as thread names, counts, and object addresses will vary by environment.

    Read the ognl command documentation for basic options and Core variables in expressions for variables exposed by commands such as watch.

    WARNING

    OGNL runs inside the target JVM. A method call can read or modify application state. In production, generate and execute read-only expressions by default, and limit both the number of objects and the expansion depth. Do not invoke application methods such as set*, add, remove, or clear, and do not perform file, network, process, ClassLoader, privilege-escalating reflection, or thread-control operations. Calls to put in this page only modify a temporary Map created by the same expression.

    Identify the expression context first

    The grammar may be the same while the available variables are different. A common AI agent mistake is to copy context variables from another command into the standalone ognl command.

    LocationAvailable root objects or variablesCommon mistake
    ognl commandStatic members, constructors, literals, and self-defined #variablesUsing params, target, returnObj, or instances
    getstatic expressionThe static field value being read is the root objectTreating it as a standalone ognl expression with no root object
    Observation or condition expressions in watch, stack, monitor, tt, and related commandsAdvice variables such as params, target, returnObj, throwExp, and isReturnReading a return value at method entry, or invoking returnObj on the exception path
    Conditions in trace and related commandsAdvice variables exposed by that command; some commands also provide #costAssuming that every command provides #cost
    line --express / --conditionAdvice variables plus line-level variables such as lineNumber, localVarMap, and #costUsing localVarMap or lineNumber in another command
    vmtool --expressinstances, the array returned by getInstancesUsing instances in the standalone ognl command

    Also distinguish a complete Arthas command from a raw expression parameter:

    # The Arthas console needs the full command and outer single quotes
    +ognl '#value=@java.lang.System@getProperty("java.version"), #value'
    +

    When an MCP tool, HTTP API, or another client already provides a dedicated parameter named expression, express, or conditionExpress, pass only the raw expression. Do not add ognl, command options, outer single quotes, or a Markdown code fence:

    #value=@java.lang.System@getProperty("java.version"), #value
    +

    Reliable syntax building blocks

    PurposeSyntaxNotes
    Define a temporary variable#name=valueA custom variable must start with #
    Evaluate in sequence and return the last item#a=1, #b=2, #a+#bUse commas, not semicolons; Arthas may treat a semicolon as a command separator
    Access a static method or field@fully.qualified.Class@method(), @fully.qualified.Class@FIELDBoth @ characters are required; prefer the fully qualified class name
    Create a temporary objectnew java.util.LinkedHashMap()Do not include Java generics such as new HashMap<String,Object>()
    Create a List{1, 2, 3}The result is a List, not a Java array
    Create a Map#{"name":"arthas", "count":1}Do not insert anything between # and {
    Create an arraynew java.lang.String[]{"a", "b"}The array type must be explicit
    Project a collectionitems.{#this.getName()}Evaluates each item and returns a new List
    Select from a collectionitems.{? #this != null}Returns every matching item
    Select the first or last matchitems.{^ condition}, items.{$ condition}The result is still a List; account for an empty result before reading [0]
    Refer to the current item#thisIts meaning changes with the current level in nested selections and projections

    For complex expressions, explicitly invoke public getters to reduce property-resolution and overload ambiguity. Prefer #this.getName() to #this.name. For maps, prefer get("key") and containsKey("key") to dotted property shorthand.

    Verified complex expressions

    TIP

    Some examples in this section use Thread.getAllStackTraces() to obtain a collection in any demo JVM. This operation captures every thread stack. On a production JVM with many threads, prefer a dedicated command such as thread, or assess the cost first, and do not run these examples frequently.

    Selection, projection, first match, and last match

    The following expression defines a list and returns projection, selection, first-match, and last-match results together:

    ognl -x 3 '#numbers={1,2,3,4,5,6}, #{"projection":#numbers.{#this * 10},"selection":#numbers.{? #this % 2 == 0},"first":#numbers.{^ #this % 2 == 0}[0],"last":#numbers.{$ #this % 2 == 0}[0]}'
    +

    Even numbers are known to exist in this literal, so [0] is safe here. For runtime collections, save the selected list and check whether it is empty:

    ognl '#matched={1,3,5}.{^ #this % 2 == 0}, #matched.isEmpty() ? null : #matched[0]'
    +

    Construct a structured result with temporary variables

    Do not repeat expensive calls in a long expression. Save intermediate values, then return a newly created LinkedHashMap:

    ognl -x 2 '#result=new java.util.LinkedHashMap(), #props=@java.lang.System@getProperties(), #threads=@java.lang.Thread@getAllStackTraces(), #result.put("javaVersion", #props.get("java.version")), #result.put("javaHome", #props.get("java.home")), #result.put("threadCount", #threads.size()), #result'
    +

    The returned keys are javaVersion, javaHome, and threadCount. Comma-separated subexpressions are evaluated in order, and the value of the whole expression is the final #result.

    Select first, then return only the required fields

    ognl '@java.lang.Thread@getAllStackTraces().keySet().{? #this.isAlive() && !#this.isDaemon()}.{#this.getName()}'
    +

    .{? ...} returns the selected threads. The following .{...} projects only thread names, avoiding expansion of complete Thread objects.

    Count by group

    The following expression counts threads by state. #counts is a temporary map created by this expression and does not modify an existing application object:

    ognl -x 2 '#counts=new java.util.LinkedHashMap(), @java.lang.Thread@getAllStackTraces().keySet().{#state=#this.getState().toString(), #counts.put(#state, #counts.containsKey(#state) ? #counts.get(#state) + 1 : 1)}, #counts'
    +

    Example output:

    @LinkedHashMap[
    +    @String[RUNNABLE]:@Integer[10],
    +    @String[TIMED_WAITING]:@Integer[6],
    +    @String[WAITING]:@Integer[2],
    +]
    +

    Do not put Java Stream syntax such as stream().filter(x -> ...), method references such as Type::method, or computeIfAbsent(..., x -> ...) into OGNL. OGNL does not parse Java lambdas. Use OGNL selection .{? ...} and projection .{...} instead.

    Bind #this early in nested objects

    Inside the projection over entrySet(), #this is the current Map.Entry. Bind its key and value to meaningful variables before using them in a longer expression:

    ognl '#all=@java.lang.Thread@getAllStackTraces(), #all.entrySet().{? #this.getKey().getName().startsWith("arthas")}.{#thread=#this.getKey(), #stack=#this.getValue(), #thread.getName() + " | " + #thread.getState() + " | depth=" + #stack.length}'
    +

    Handle null explicitly

    OGNL does not support JavaScript-style ?.. Do not mix in SpEL T(...) or template syntax ${...} either. Save a possibly null value and protect the method call with a conditional expression:

    ognl '#value=@java.lang.System@getProperty("arthas.not.exists"), #value == null ? "<missing>" : #value.trim()'
    +

    Result:

    @String[<missing>]
    +

    Handle both return and exception paths in watch

    -f evaluates the expression after both a normal return and an exception. Branch on isReturn before accessing returnObj or throwExp:

    watch demo.MathGame primeFactors '#result=new java.util.LinkedHashMap(), #result.put("number", params[0]), #result.put("outcome", isReturn ? "return" : "throw"), #result.put("detail", isReturn ? returnObj.size() : throwExp.getMessage()), #result' -f -n 2 -x 2
    +

    This expression evaluates on both paths in the real math-game JVM. -n 2 limits the number of observations so the command terminates.

    Use instances in vmtool

    instances exists only in the expression context of vmtool --action getInstances --express:

    vmtool --action getInstances --className java.lang.Thread --limit 100 --express 'instances.{? #this.isAlive() && #this.getName().startsWith("arthas")}.{#this.getName()}'
    +

    Use --limit before selection and projection. Do not use --limit -1 unconditionally for an application class that may have many instances.

    ClassLoader selection is not OGNL syntax

    Before accessing an application class, identify its ClassLoader:

    sc -d com.example.OrderService
    +

    Read classLoaderHash from the output and pass it as an ognl command option:

    ognl -c <classLoaderHash> '@com.example.OrderService@STATIC_FIELD'
    +

    Keep these points in mind:

    • -c and --classLoaderClass are Arthas command options, not parts of the OGNL expression.
    • A class name may be loaded by multiple ClassLoaders. Do not guess the hash, and remember that it may change after a JVM restart.
    • For ClassNotFoundException, inspect the ClassLoader before randomly rewriting OGNL syntax.
    • --classLoaderClass is appropriate only when exactly one ClassLoader instance has that type. Use the hash when multiple instances match.

    Quoting and formatting: there are two parsers

    Arthas parses the command line first, then OGNL parses the expression. A shell, JSON, or MCP transport adds another formatting layer.

    • In the Arthas console, wrap a complete expression in single quotes and use double quotes for OGNL string literals.
    • Keep the final command on one physical line. Visual terminal wrapping is harmless, but do not insert a real line break inside a class name, ., @, #variable, or an operator.
    • Do not insert whitespace after ., as in the invalid form #map. get("key").
    • Join expression steps with commas, not semicolons.
    • Keep outer single quotes around expressions containing {$ ...}, otherwise some shells will interpret $.
    • For an MCP expression parameter, do not include Markdown backticks, outer single quotes, or the complete command.
    • For JSON transport, escape double quotes according to JSON rules only. Do not copy shell backslash escaping verbatim into a raw expression parameter.

    When quoting becomes deeply nested, prefer an Arthas batch file or a dedicated expression field in the API to reduce shell-escaping layers.

    Do not classify every failure as a syntax error

    Symptom or exception keywordCheck firstRecommended action
    Malformed OGNL expression, ExpressionSyntaxExceptionQuotes, brackets, @class@member, commas, and projection/selection bracesReduce to a minimal expression, then add one fragment at a time
    NoSuchPropertyExceptionWhether the command exposes that variable; whether the property name is correctCheck the context-variable table and use an explicit public getter
    MethodFailedException, NoSuchMethodExceptionMethod name, argument types, and static versus instance invocationUse sm/jad to inspect the real signature instead of guessing an overload
    ClassNotFoundExceptionClassLoaderRun sc -d, then specify -c
    A null intermediate objectMissing null branch in a call chainAssign it to a #variable and guard the next call with a conditional expression
    stricter invocation modeThe method or declaring class is blocked by OGNL strict modeDo not disable the protection or bypass it with reflection; use jvm, thread, sysprop, or another dedicated command, or a safe public API
    module ... does not exportJDK module boundaries, not necessarily OGNL grammarUse a dedicated Arthas command or an accessible public application API
    Timeout, huge output, or target-JVM disturbanceExpression work and expansion scopeSelect before projecting, avoid repeated calls, and set --limit, -n, and a reasonable -x

    For example, @java.lang.Runtime@getRuntime() can be rejected by the default OGNL strict invocation mode even though its syntax is valid. Repeatedly changing @, brackets, or quotes cannot fix this category of failure.

    Generation and validation protocol for AI agents

    Consider adding the following constraints to prompts for agents that generate Arthas commands:

    You are generating OGNL for Arthas. Before generating it, you must confirm:
    +1. Whether the caller needs a complete Arthas command or a raw expression parameter. Output only the requested form.
    +2. Whether the expression runs in the ognl, getstatic, watch/stack/monitor/tt/trace, line, or vmtool context. Use only variables that actually exist in that context.
    +3. For application classes, run sc -d to identify the ClassLoader. If a method or field is uncertain, inspect it with sm/jad instead of guessing its name or overload.
    +4. Use @fully.qualified.Class@member for static access, #name for temporary variables, and commas for sequential steps.
    +5. Do not generate Java lambdas/Streams, method references, ?., SpEL T(...), ${...}, generic constructors, or semicolon statements.
    +6. Default to read-only behavior. Forbid process, file, network, ClassLoader, privilege-escalating reflection, thread-control, and application-state mutations. Mutation is allowed only on temporary collections created with new inside the expression.
    +7. Select before projecting, return only required fields, and set reasonable limit, -n, and -x values.
    +8. Keep the final expression on one physical line. Never break or insert whitespace inside a class name, dot access, @...@, #variable, or operator.
    +
    +Validate incrementally instead of submitting one untested long expression:
    +A. Verify that the minimal root object, static field, or context variable is accessible.
    +B. Add only one #variable assignment, method call, selection, or projection per attempt, and execute it.
    +C. Add Map/List output construction and limiting options last.
    +D. On failure, classify it as command/escaping, grammar, context variable, ClassLoader, null, method signature, access restriction, or resource cost. Preserve the validated prefix and change only the failing fragment.
    +E. Claim that an expression is verified only after receiving a real Arthas result without a syntax exception.
    +

    Before returning output, the agent should also perform a mechanical check:

    • Does every @class@member contain a matching pair of @ characters?
    • Are (), [], {}, and quotes balanced?
    • Does every custom variable start with #?
    • Does #this refer to the intended nesting level in each selection or projection?
    • Are possibly empty selections, map values, returnObj, and throwExp protected by a branch?
    • Was a command option incorrectly placed inside the expression, or a complete command placed in a tool's expression field?
    • Did automatic formatting split a class name, method name, or operator?

    This process—confirm context, execute incrementally, then construct the final output—is more reliable than rewriting an entire complex expression after every failure, and it preserves evidence about the actual cause.

    Further reading

    + + + diff --git a/en/doc/ognl.html b/en/doc/ognl.html index 49ea989a4..efb6edc34 100644 --- a/en/doc/ognl.html +++ b/en/doc/ognl.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); ognl | arthas - + -
    Table of Contents

    ognl

    ognl online tutorialopen in new window

    TIP

    Execute ognl expression.

    Since 3.0.5.

    Parameters

    NameSpecification
    expressexpression 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

    Call static method:

    $ ognl '@java.lang.System@out.println("hello")'
    +    
    Table of Contents

    ognl

    TIP

    Execute ognl expression.

    Since 3.0.5.

    Parameters

    NameSpecification
    expressexpression 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

    Call static method:

    $ ognl '@java.lang.System@out.println("hello")'
     null
     

    Get static field:

    $ ognl '@demo.MathGame@random'
     @Random[
    @@ -80,7 +80,7 @@ $
         @String[/opt/java/8.0.181-zulu/jre],
         @String[OpenJDK Runtime Environment],
     ]
    -
    - +
    + diff --git a/en/doc/options.html b/en/doc/options.html index d7abc4afc..7b94c0915 100644 --- a/en/doc/options.html +++ b/en/doc/options.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); options | arthas - + -
    Table of Contents

    options

    options online tutorialopen in new window

    TIP

    Global options

    NameDefault ValueDescription
    unsafefalsewhether to enhance to system-level class. Use it with caution since JVM may hang
    dumpfalsewhether 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-transformtruewhether to re-transform matched classes in batch
    json-formatfalsewhether to output in JSON format
    object-size-limit10485760upper size limit in bytes for ObjectView output (must be greater than 0, default is 10 * 1024 * 1024)
    disable-sub-classfalsewhether to enable matching child classes. The default value is true. If exact match is desire, turn off this flag
    support-default-methodtruewhether to enable matching default method in interface. The default value is true. Refer to #1105open in new window
    save-resultfalsewhether to save execution result. All execution results will be saved to ~/logs/arthas-cache/result.log when it's turned on
    job-timeout1ddefault timeout for background jobs. Background job will be terminated once it's timed out (i.e. 1d, 2h, 3m, 25s)
    print-parent-fieldstrueThis option enables print files in parent class, default value true.
    verbosefalseThis option enables print verbose information
    stricttruewhether to enable strict mode

    View all options

    $ options
    +    
    Table of Contents

    options

    TIP

    Global options

    NameDefault ValueDescription
    unsafefalsewhether to enhance to system-level class. Use it with caution since JVM may hang
    dumpfalsewhether 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-transformtruewhether to re-transform matched classes in batch
    json-formatfalsewhether to output in JSON format
    object-size-limit10485760upper size limit in bytes for ObjectView output (must be greater than 0, default is 10 * 1024 * 1024)
    disable-sub-classfalsewhether to enable matching child classes. The default value is true. If exact match is desire, turn off this flag
    support-default-methodtruewhether to enable matching default method in interface. The default value is true. Refer to #1105open in new window
    save-resultfalsewhether to save execution result. All execution results will be saved to ~/logs/arthas-cache/result.log when it's turned on
    job-timeout1ddefault timeout for background jobs. Background job will be terminated once it's timed out (i.e. 1d, 2h, 3m, 25s)
    print-parent-fieldstrueThis option enables print files in parent class, default value true.
    verbosefalseThis option enables print verbose information
    stricttruewhether to enable strict mode

    View all options

    $ options
      LEVEL  TYPE    NAME          VALUE   SUMMARY               DESCRIPTION
     -------------------------------------------------------------------------------------------------------
      0      boolea  unsafe        false   Option to support sy  This option enables to proxy functionality
    @@ -94,11 +94,11 @@
     
    $ watch java.lang.invoke.Invokers callSiteForm
     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

    TIP

    since 3.6.0

    For new users, there may be misuses when writing ognl expressions.

    For example, for Student, when judging the age is equal to 18, the conditional expression may be mistakenly written as target.age=18, which actually sets the age of the current object to 18. The correct spelling is target.age==18.

    In order to prevent misuse like the above, Arthas enables strict mode by default, in ognl expressions, it is forbidden to update the property of the object or call the setter method.

    Take MathGame as an example, the following error message will appear.

    $ watch demo.MathGame primeFactors 'target' 'target.illegalArgumentCount=1'
    +

    Turn off strict mode, allow setting object properties in ognl expressions

    TIP

    since 3.6.0

    For new users, there may be misuses when writing ognl expressions.

    See Tips for complex OGNL expressions for read-only constraints, a generation checklist, and error classification.

    For example, for Student, when judging the age is equal to 18, the conditional expression may be mistakenly written as target.age=18, which actually sets the age of the current object to 18. The correct spelling is target.age==18.

    In order to prevent misuse like the above, Arthas enables strict mode by default, in ognl expressions, it is forbidden to update the property of the object or call the setter method.

    Take MathGame as an example, the following error message will appear.

    $ watch demo.MathGame primeFactors 'target' 'target.illegalArgumentCount=1'
     Press Q or Ctrl+C to abort.
     Affect(class count: 1 , method count: 1) cost in 206 ms, listenerId: 1
     watch failed, condition is: target.illegalArgumentCount=1, express is: target, By default, strict mode is true, not allowed to set object properties. Want to set object properties, execute `options strict false`, visit /Users/admin/logs/arthas/arthas.log for more details.
    -

    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
    - +

    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
    + diff --git a/en/doc/perfcounter.html b/en/doc/perfcounter.html index df5126b7b..85dbc82a7 100644 --- a/en/doc/perfcounter.html +++ b/en/doc/perfcounter.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); perfcounter | arthas - + -
    Table of Contents

    perfcounter

    perfcounter online tutorialopen in new window

    TIP

    Check the current JVM Perf Counter information.

    Usage

    $ perfcounter
    +    
    Table of Contents

    perfcounter

    TIP

    Check the current JVM Perf Counter information.

    Usage

    $ perfcounter
      java.ci.totalTime                            2325637411
      java.cls.loadedClasses                       3403
      java.cls.sharedLoadedClasses                 0
    @@ -55,6 +55,6 @@
      java.cls.unloadedClasses               Monotonic     Events       0
     

    JVM above JDK9

    If the information is not printed, when the application starts, add the following parameters:

    --add-opens java.base/jdk.internal.perf=ALL-UNNAMED --add-exports java.base/jdk.internal.perf=ALL-UNNAMED --add-opens java.management/sun.management.counter.perf=ALL-UNNAMED --add-opens java.management/sun.management.counter=ALL-UNNAMED
     
    - + diff --git a/en/doc/profiler.html b/en/doc/profiler.html index f36cc111c..fd3c702ce 100644 --- a/en/doc/profiler.html +++ b/en/doc/profiler.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); profiler | arthas - + -
    Table of Contents

    profiler

    profiler online tutorialopen in new window

    TIP

    Generate a flame graph using async-profileropen in new window

    The profiler command supports generating flame graph for application hotspots.

    The basic usage of the profiler command is profiler action [actionArg]

    The arguments of profiler command basically keeps consistent with upstream project async-profileropen in new window, you can refer to its README, Github Discussions and other documentations for further information of usage.

    Supported Options

    NameSpecification
    actionAction to execute
    actionArgAttribute 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

    $ profiler start
    +    
    Table of Contents

    profiler

    TIP

    Generate a flame graph using async-profileropen in new window

    The profiler command supports generating flame graph for application hotspots.

    The basic usage of the profiler command is profiler action [actionArg]

    The arguments of profiler command basically keeps consistent with upstream project async-profileropen in new window, you can refer to its README, Github Discussions and other documentations for further information of usage.

    Supported Options

    NameSpecification
    actionAction to execute
    actionArgAttribute 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

    $ profiler start
     Started [cpu] profiling
     

    TIP

    By default, the sample event is cpu. Other valid profiling modes can be specified with the --event parameter, see relevant contents below.

    Get the number of samples collected

    $ profiler getSamples
     23
    @@ -132,6 +132,6 @@ profiler start --ttsp 

    Parameters

    • tsc: Use the CPU's timestamp counter (RDTSC). This is the default option and provides high-precision timestamps.

    • monotonic: Use the operating system's monotonic clock (CLOCK_MONOTONIC). This helps align timestamps between multiple data sources. See async-profiler Github Issuesopen in new window for more information.

    Example:

    Using CLOCK_MONOTONIC as timestamp source:

    profiler start --clock monotonic
     

    Notes:

    • Use --clock monotonic when you need to align profiler data with data from other tools that use CLOCK_MONOTONIC (e.g. perf).

    • Use --clock option with caution when using jfrsync mode, as the JVM and profiler may use different timestamp sources, which may lead to inconsistent results.

    --norm option

    In Java 20 and earlier, the method names generated by the compiler for lambda expressions contain a unique numeric suffix. For example, a lambda expression defined in the same code location may generate multiple different frame names, because each lambda method name is appended with a unique numeric suffix (such as lambda$method$0, lambda$method$1, etc.). This causes logically identical stacks to not be merged in the flame graph, increasing the complexity of performance analysis.

    To solve this problem, profiler has added a --norm option that automatically normalizes method names when generating output, removes these numeric suffixes, and enables identical stacks to be merged correctly. Please refer to async-profiler Github Issuesopen in new window for more information.

    Example:

    Generate a normalized flame graph:

    profiler start --norm
     
    - + diff --git a/en/doc/pwd.html b/en/doc/pwd.html index 30b9d566a..2d77924f2 100644 --- a/en/doc/pwd.html +++ b/en/doc/pwd.html @@ -31,12 +31,12 @@ s.parentNode.insertBefore(hm, s); })(); pwd | arthas - + -
    Table of Contents

    pwd

    pwd online tutorialopen in new window

    TIP

    Return working directory name

    Usage

    $ pwd
    +    
    -    
    +    
       
     
    diff --git a/en/doc/quick-start.html b/en/doc/quick-start.html
    index 0b30068be..482f54d32 100644
    --- a/en/doc/quick-start.html
    +++ b/en/doc/quick-start.html
    @@ -31,11 +31,11 @@
           s.parentNode.insertBefore(hm, s);
         })();
         Quick Start | arthas
    -    
    +    
         
       
       
    -    
    Table of Contents

    Quick Start

    You can practice it yourself by following the instructions below, or you can use our online tutorialsopen in new window to get started quickly.

    1. Start math-game

    curl -O https://arthas.aliyun.com/math-game.jar
    +    
    Table of Contents

    Quick Start

    You can follow the instructions below to practice and get started quickly.

    1. Start math-game

    curl -O https://arthas.aliyun.com/math-game.jar
     java -jar math-game.jar
     

    math-game is a simple program that generates a random number every second, then it finds all prime factors of that number.

    The source code of math-game: Viewopen in new window

    2. Start Arthas

    Linux/Unix/Mac

    Execute the following command in the command line:

    curl -O https://arthas.aliyun.com/arthas-boot.jar
     java -jar arthas-boot.jar
    @@ -199,7 +199,7 @@ Affect(class-cnt:1 , method-cnt:1[29],
         @Integer[7651739],
     ]
    -

    Pls. refer to Arthas advancedopen in new window for more information.

    7. Exit Arthas

    Use quit or exit to disconnect from the current process. The Arthas instance attached to the target process continues to live inside the process, and its port is standby for further connection.

    Use stop command to have Arthas completely quit from the target process.

    - +

    Please refer to Advanced Usage for more information.

    7. Exit Arthas

    Use quit or exit to disconnect from the current process. The Arthas instance attached to the target process continues to live inside the process, and its port is standby for further connection.

    Use stop command to have Arthas completely quit from the target process.

    + diff --git a/en/doc/quit.html b/en/doc/quit.html index e0304795a..f354e204e 100644 --- a/en/doc/quit.html +++ b/en/doc/quit.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); quit | arthas - + - - + + diff --git a/en/doc/redefine.html b/en/doc/redefine.html index 9bd5f0b3c..74e851178 100644 --- a/en/doc/redefine.html +++ b/en/doc/redefine.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); redefine | arthas - + -
    Table of Contents

    redefine

    TIP

    Recommend to use the retransform command.

    mc-redefine online tutorialopen in new window

    TIP

    Load the external *.class files to re-define the loaded classes in JVM.

    Reference: Instrumentation#redefineClassesopen in new window

    Frequently asked questions

    TIP

    Recommend to use the retransform 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

    NameSpecification
    [c:]hashcode of the class loader
    [classLoaderClass:]The class name of the ClassLoader that executes the expression.

    Usage

    redefine /tmp/Test.class
    +    
    Table of Contents

    redefine

    TIP

    Recommend to use the retransform command.

    TIP

    Load the external *.class files to re-define the loaded classes in JVM.

    Reference: Instrumentation#redefineClassesopen in new window

    Frequently asked questions

    TIP

    Recommend to use the retransform 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

    NameSpecification
    [c:]hashcode of the class loader
    [classLoaderClass:]The class name of the ClassLoader that executes the expression.

    Usage

    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

    jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java
    @@ -70,6 +70,6 @@ redefine /tmp/com/example/demo/arthas/user/UserController.class
         }
     }
     
    - + diff --git a/en/doc/release-notes.html b/en/doc/release-notes.html index f17cb81fb..2f20566c1 100644 --- a/en/doc/release-notes.html +++ b/en/doc/release-notes.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); Release Notes | arthas - + -
    Table of Contents

    Release Notes

    v3.1.1

    v3.1.0

    v3.0.5

    v3.0.4

    v2017-11-03

    • [improvement] add getstatic
    • [bug] fix Arthas class loader logs loading issues
    • [improvement] introduce OGNLopen in new window 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 OGNLopen in new window expression
    • [bug] fix pipe issues
    • [improvement] optimize command re-direct features using asynchronous log
    • [improvement] trace 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 supported
    • [improvement] optimize jad support JDK 8 and inner class
    • [bug] fix Chinese encoding issues

    v2017-05-11

    • [improvement] tt 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 🎊

    v2016-12-09

    • [feature] as.shopen in new window 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 filtering out sun.reflect.DelegatingClassLoader issue
    • [bug] [#129] fix classloader presenting structure issues
    • [improvement] [#125] make the Arthas log output more readable
    • [improvement] [#96] sc and more commands are supporting format as com/taobao/xxx/TestClass
    • [bug] [#124] fix the negative values of trace
    • [improvement] [#128] the output of tt 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
    • [bug] fix sc 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
    • [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 using flow for better UX
    • [improvement] add examples to thread
    • [improvement] auto-completion ignores character case
    • [improvement] make the UI more beautiful/friendly
    • [bug] fix trace printing too much encountering loop issues
    • [bug] fix trace 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.shopen in new window)
    • [improvement] optimize UX

    v2016-01-18

    • [improvement] optimise jad; dump memory byte array in real time; using jd-core-java to decompile; line number presented;
    • [bug] fix checking/re-producing issues when tt 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 checking internal structure issues

    v2015-12-29

    • Arthas 2.0 Beta 💥!
    - +
    Table of Contents

    Release Notes

    v3.1.1

    v3.1.0

    v3.0.5

    v3.0.4

    v2017-11-03

    • [improvement] add getstatic
    • [bug] fix Arthas class loader logs loading issues
    • [improvement] introduce OGNLopen in new window 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 OGNLopen in new window expression
    • [bug] fix pipe issues
    • [improvement] optimize command re-direct features using asynchronous log
    • [improvement] trace 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 supported
    • [improvement] optimize jad support JDK 8 and inner class
    • [bug] fix Chinese encoding issues

    v2017-05-11

    • [improvement] tt 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 🎊

    v2016-12-09

    • [feature] as.shopen in new window 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 filtering out sun.reflect.DelegatingClassLoader issue
    • [bug] [#129] fix classloader presenting structure issues
    • [improvement] [#125] make the Arthas log output more readable
    • [improvement] [#96] sc and more commands are supporting format as com/taobao/xxx/TestClass
    • [bug] [#124] fix the negative values of trace
    • [improvement] [#128] the output of tt 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
    • [bug] fix sc 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
    • [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 using flow for better UX
    • [improvement] add examples to thread
    • [improvement] auto-completion ignores character case
    • [improvement] make the UI more beautiful/friendly
    • [bug] fix trace printing too much encountering loop issues
    • [bug] fix trace 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.shopen in new window)
    • [improvement] optimize UX

    v2016-01-18

    • [improvement] optimise jad; dump memory byte array in real time; using jd-core-java to decompile; line number presented;
    • [bug] fix checking/re-producing issues when tt 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 checking internal structure issues

    v2015-12-29

    • Arthas 2.0 Beta 💥!
    + diff --git a/en/doc/reset.html b/en/doc/reset.html index 52f91bca7..326a7e905 100644 --- a/en/doc/reset.html +++ b/en/doc/reset.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); reset | arthas - + -
    Table of Contents

    reset

    reset online tutorialopen in new window

    TIP

    Reset all classes that have been enhanced by Arthas. These enhanced classes will also be reset when Arthas server is stop.

    Usage

    $ reset -h
    +    
    Table of Contents

    reset

    TIP

    Reset all classes that have been enhanced by Arthas. These enhanced classes will also be reset when Arthas server is stop.

    Usage

    $ reset -h
      USAGE:
        reset [-h] [-E] [class-pattern]
     
    @@ -71,6 +71,6 @@ Affect(class-cnt:1 , method-cnt:1) cost in 15 ms.
     $ reset
     Affect(class-cnt:1 , method-cnt:0) cost in 9 ms.
     
    - + diff --git a/en/doc/retransform.html b/en/doc/retransform.html index bb37a376a..03934e564 100644 --- a/en/doc/retransform.html +++ b/en/doc/retransform.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); retransform | arthas - + -
    Table of Contents

    retransform

    mc-retransform online tutorialopen in new window

    TIP

    Load the external *.class files to retransform the loaded classes in JVM.

    Reference: Instrumentation#retransformClassesopen in new window

    Usage

       retransform /tmp/Test.class
    +    
    Table of Contents

    retransform

    TIP

    Load the external *.class files to retransform the loaded classes in JVM.

    Reference: Instrumentation#retransformClassesopen in new window

    Usage

       retransform /tmp/Test.class
        retransform -l
        retransform -d 1                    # delete retransform entry
        retransform --deleteAll             # delete all retransform entries
    @@ -85,6 +85,6 @@ retransform /tmp/com/example/demo/arthas/user/UserController.class
         }
     }
     
    - + diff --git a/en/doc/save-log.html b/en/doc/save-log.html index b02a03b93..5f42d0299 100644 --- a/en/doc/save-log.html +++ b/en/doc/save-log.html @@ -31,16 +31,16 @@ s.parentNode.insertBefore(hm, s); })(); Log command outputs | arthas - + -
    Table of Contents

    Log command outputs

    Log command outputs online tutorialopen in new window

    TIP

    Log command outputs for later analysis

Use the -v parameter to print more information

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:

  1. The matched function is not executed
  2. The result of the conditional expression is false

But the user cannot tell which situation is.

Using the -v option, the specific value and execution result of Condition express will be printed for easy confirmation.

- + diff --git a/en/doc/tt.html b/en/doc/tt.html index f3ff52485..898b70a12 100644 --- a/en/doc/tt.html +++ b/en/doc/tt.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); tt | arthas - + -
Table of Contents

tt

tt online tutorialopen in new window

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.

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.

Precautions

  • The implementation of the tt command is to save the input parameters/return values of the function into a Map<Integer, TimeFragment>. The default size is 100.
  • After using tt related functions, you need to manually release the memory, otherwise OOM may occur for a long time. Exiting arthas will not automatically clear tt's cache map.

Usage

Start Demo

Start math-game in Quick Start.

Record method calls

$ tt -t demo.MathGame primeFactors
+    
Table of Contents

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.

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.

Precautions

  • The implementation of the tt command is to save the input parameters/return values of the function into a Map<Integer, TimeFragment>. The default size is 100.
  • After using tt related functions, you need to manually release the memory, otherwise OOM may occur for a long time. Exiting arthas will not automatically clear tt's cache map.

Usage

Start Demo

Start math-game in Quick Start.

Record method calls

$ tt -t demo.MathGame primeFactors
 Press Ctrl+C to abort.
 Affect(class-cnt:1 , method-cnt:1) cost in 66 ms.
  INDEX   TIMESTAMP            COST(ms)  IS-RET  IS-EXP   OBJECT         CLASS                          METHOD
@@ -52,7 +52,7 @@ Affect(class count:1 , method count:11000    2022-12-25 19:41:45  2.629929  true    false    0x3bf400       MathGame                       primeFactors
  1001    2022-12-25 19:41:55  0.146161  false   true     0x3bf400       MathGame                       primeFactors
-
  • -t

    record the calling context of the method demo.MathGame primeFactors

  • -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)

  • -m 1

    limit the number of matched Classes to avoid JVM suspending when too many matched Classes. The default value is 50.

  • -c <classloader hash>

    if the same class is loaded by multiple classloaders, you can use -c to enhance only the specified classloader. Use sc -d className to find the classloader hash.

  • Property

NameSpecification
INDEXthe index for each call based on time
TIMESTAMPtime to invoke the method
COST(ms)time cost of the method call
IS-RETwhether method exits with normal return
IS-EXPwhether method failed with exceptions
OBJECThashCode() of the object invoking the method
CLASSclass name of the object invoking the method
METHODmethod being invoked
  • 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:

List all records

$ tt -l
+
  • -t

    record the calling context of the method demo.MathGame primeFactors

  • -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)

  • -m 1

    limit the number of matched Classes to avoid JVM suspending when too many matched Classes. The default value is 50.

  • -c <classloader hash>

    if the same class is loaded by multiple classloaders, you can use -c to enhance only the specified classloader. Use sc -d className to find the classloader hash.

  • Property

NameSpecification
INDEXthe index for each call based on time
TIMESTAMPtime to invoke the method
COST(ms)time cost of the method call
IS-RETwhether method exits with normal return
IS-EXPwhether method failed with exceptions
OBJECThashCode() of the object invoking the method
CLASSclass name of the object invoking the method
METHODmethod being invoked
  • 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:

List all records

$ tt -l
  INDEX   TIMESTAMP            COST(ms)  IS-RET  IS-EXP   OBJECT         CLASS                          METHOD
 -------------------------------------------------------------------------------------------------------------------------------------
  1000    2018-12-04 11:15:38  1.096236  false   true     0x4b67cf4d     MathGame                       primeFactors
@@ -127,6 +127,6 @@ Affect(class count: 

Note that com.taobao.arthas.core.advisor.Advice#getLoader is used here, and that it is better to use the exact classloader ognl.

Advanced usage get spring context to call the bean methodopen in new window

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.

  2. params may be modified

    Arthas save params into an array, they are object references. The Objects may be modified by other code.

Delete the specified tt record by index

tt -d -i 1001
 

Clear all tt records

tt --delete-all
 
- + diff --git a/en/doc/tunnel.html b/en/doc/tunnel.html index b5fef2815..fecd39d66 100644 --- a/en/doc/tunnel.html +++ b/en/doc/tunnel.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); Arthas Tunnel | arthas - + -
Table of Contents

Arthas Tunnel

Manage/connect multiple Agents remotely via Arthas Tunnel Server/Client.

For example, in streaming computing, Java processes can be started on different machines, and it can be difficult to use Arthas to diagnose them, because the user usually does not have access to the machine.

In this case, Arthas Tunnel Server/Client can be used.

Reference:

Download and deploy arthas tunnel server

https://github.com/alibaba/arthas/releasesopen in new window

Arthas tunnel server is a spring boot fat jar application, start with the java -jar command:

java -jar  arthas-tunnel-server.jar
+    
Table of Contents

Arthas Tunnel

Manage/connect multiple Agents remotely via Arthas Tunnel Server/Client.

For example, in streaming computing, Java processes can be started on different machines, and it can be difficult to use Arthas to diagnose them, because the user usually does not have access to the machine.

In this case, Arthas Tunnel Server/Client can be used.

Reference:

Download and deploy arthas tunnel server

https://github.com/alibaba/arthas/releasesopen in new window

Arthas tunnel server is a spring boot fat jar application, start with the java -jar command:

java -jar  arthas-tunnel-server.jar
 

By default, the web port of the arthas tunnel server is 8080, and the port connected by the arthas agent is 7777.

Once started, you can go to http://127.0.0.1:8080/open in new window and connect to the registered arthas agent via agentId.

Through Spring Boot's Endpoint, you can view the specific connection information: http://127.0.0.1:8080/actuator/arthasopen in new window, the login user name is arthas, and the password can be found in the log of arthas tunnel server, for example:

32851 [main] INFO o.s.b.a.s.s.UserDetailsServiceAutoConfiguration
 
 Using generated security password: f1dca050-3777-48f4-a577-6367e55a78a2
@@ -49,12 +49,11 @@ Using generated security password: f1dca050-3777-48f4-a577-6367e55a78a2
 
 
 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
-

If the connection is not connected to the tunnel server at startup, you can also obtain the agentId through the session command after reconnection succeeds:

[arthas@86183]$ session
+

If the connection is not connected to the tunnel server at startup, you can also obtain the agentId through the session command after reconnection succeeds:

[arthas@86183]$ session
  Name           Value
 -----------------------------------------------------
  JAVA_PID       86183
@@ -74,14 +73,13 @@ Escape character is '^]'.
 
 
 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
-

Then visit tunnel-server, you can see a list of all connected applications:

http://localhost:8080/apps.htmlopen in new window

Then open the details, you can see a list of all connected agents:

http://localhost:8080/agents.html?app=testopen in new window

Security and Privilege Management

TIP

It is strongly recommended not to expose the tunnel server directly to the public network.

Currently tunnel server does not have special permission management

  1. Users need to develop by themselves and authenticate the app name.
  2. If the management page is opened, security measures need to be added.

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

browser <-> arthas tunnel server <-> arthas tunnel client <-> arthas agent
+

Then visit tunnel-server, you can see a list of all connected applications:

http://localhost:8080/apps.htmlopen in new window

Then open the details, you can see a list of all connected agents:

http://localhost:8080/agents.html?app=testopen in new window

Security and Privilege Management

TIP

It is strongly recommended not to expose the tunnel server directly to the public network.

Currently tunnel server does not have special permission management

  1. Users need to develop by themselves and authenticate the app name.
  2. If the management page is opened, security measures need to be added.

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

browser <-> arthas tunnel server <-> arthas tunnel client <-> arthas agent
 

tunnel-server/README.mdopen in new window

- + diff --git a/en/doc/version.html b/en/doc/version.html index 1e237bc26..62d828016 100644 --- a/en/doc/version.html +++ b/en/doc/version.html @@ -31,13 +31,13 @@ s.parentNode.insertBefore(hm, s); })(); version | arthas - + -
Table of Contents

version

prints out Arthas's version.

Usage

$ version
+    
-    
+    
   
 
diff --git a/en/doc/vmoption.html b/en/doc/vmoption.html
index 02b647cbb..dab052ebf 100644
--- a/en/doc/vmoption.html
+++ b/en/doc/vmoption.html
@@ -31,11 +31,11 @@
       s.parentNode.insertBefore(hm, s);
     })();
     vmoption | arthas
-    
+    
     
   
   
-    
Table of Contents

vmoption

vmoption online tutorialopen in new window

TIP

Display, and update the vm diagnostic options.

Usage

View all options

[arthas@56963]$ vmoption
+    
Table of Contents

vmoption

TIP

Display, and update the vm diagnostic options.

Usage

View all options

[arthas@56963]$ vmoption
  KEY                    VALUE                   ORIGIN                 WRITEABLE
 ---------------------------------------------------------------------------------------------
  HeapDumpBeforeFullGC   false                   DEFAULT                true
@@ -75,6 +75,6 @@ Successfully updated the vm option.
 -------------------------------------------
  PrintGCDetails  false         true
 
- + diff --git a/en/doc/vmtool.html b/en/doc/vmtool.html index 6961b824f..5b74b66e1 100644 --- a/en/doc/vmtool.html +++ b/en/doc/vmtool.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); vmtool | arthas - + -
Table of Contents

vmtool

TIP

@since 3.5.1

vmtool online tutorialopen in new window

vmtool uses the JVMTI to support getInstances in jvm and forceGc.

getInstances

$ vmtool --action getInstances --className java.lang.String --limit 10
+    
Table of Contents

vmtool

TIP

@since 3.5.1

vmtool uses the JVMTI to support getInstances in jvm and forceGc.

getInstances

$ vmtool --action getInstances --className java.lang.String --limit 10
 @String[][
     @String[com/taobao/arthas/core/shell/session/Session],
     @String[com.taobao.arthas.core.shell.session.Session],
@@ -61,7 +61,7 @@
 

Then use the -c/--classloader parameter to specify:

vmtool --action getInstances -c 19469ea2 --className org.springframework.context.ApplicationContext
 

Specify the number of expanded layers of returned results

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.

vmtool --action getInstances -c 19469ea2 --className org.springframework.context.ApplicationContext -x 2
 

Execute expression

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.

vmtool --action getInstances --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader --className org.springframework.context.ApplicationContext --express 'instances[0].getBeanDefinitionNames()'
-

Filter objects

For the instances array returned by getInstances, you can further filter objects with the OGNL selection expression .{? condition}. Here #this refers to the current object being evaluated.

The following example uses java.lang.Thread, which is suitable for verifying filter expressions in almost any running JVM. It filters all non-daemon threads and prints only their names:

vmtool --action getInstances --className java.lang.Thread --limit -1 --express 'instances.{? #this.daemon == false}.{name}'
+

See Tips for complex OGNL expressions when writing complex selections, projections, or null branches over instances.

Filter objects

For the instances array returned by getInstances, you can further filter objects with the OGNL selection expression .{? condition}. Here #this refers to the current object being evaluated.

The following example uses java.lang.Thread, which is suitable for verifying filter expressions in almost any running JVM. It filters all non-daemon threads and prints only their names:

vmtool --action getInstances --className java.lang.Thread --limit -1 --express 'instances.{? #this.daemon == false}.{name}'
 

If you want to inspect the filtered objects directly, remove the trailing .{name}.

Force GC

vmtool --action forceGc
 
  • Use the vmoption command to dynamically turn on the PrintGC option.

Analyze heap usage

heapAnalyze starts from objects reachable from GC Root, counts instance numbers and bytes per class, and prints the top objects/classes by heap usage.

$ vmtool --action heapAnalyze --classNum 5 --objectNum 3
 

TIP

Use --classNum to specify how many classes will be shown, and use --objectNum to specify how many objects will be shown.

Analyze reference chain

referenceAnalyze analyzes instances of a specific class and prints the largest objects and their backtrace chain (from the object back to GC Root) to help locate them.

$ vmtool --action referenceAnalyze --className java.lang.String --objectNum 5 --backtraceNum 3
@@ -77,6 +77,6 @@ in use bytes     =      74352
 max mmap regions =          0
 max mmap bytes   =          0
 
- + diff --git a/en/doc/watch.html b/en/doc/watch.html index eeb4f7d83..f47900f11 100644 --- a/en/doc/watch.html +++ b/en/doc/watch.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); watch | arthas - + -
Table of Contents

watch

watch online tutorialopen in new window

Monitor methods in data aspect including return values, exceptions and parameters.

With the help of OGNLopen in new window, you can easily check the details of variables when methods being invoked.

Parameters & Options

There are four different scenarios for watch command, which makes it rather complicated.

NameSpecification
class-patternpattern for the class name
method-patternpattern for the method name
expressionexpression to watch, default value {params, target, returnObj}
condition-expressioncondition 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
[c:]Specify classloader hash, only enhance classes loaded by it
[m <arg>]Specify the max number of matched Classes, the default value is 50. Long format is [maxMatch <arg>].

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 -bwhile 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:

Usage

Start Demo

Start math-game in Quick Start.

Check the out parameters, this and return value

TIP

The expression to watch, default value {params, target, returnObj}

$ watch demo.MathGame primeFactors -x 2
+    
Table of Contents

watch

Monitor methods in data aspect including return values, exceptions and parameters.

With the help of OGNL, you can easily check the details of variables when methods being invoked.

Parameters & Options

There are four different scenarios for watch command, which makes it rather complicated.

NameSpecification
class-patternpattern for the class name
method-patternpattern for the method name
expressionexpression to watch, default value {params, target, returnObj}
condition-expressioncondition 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
[c:]Specify classloader hash, only enhance classes loaded by it
[m <arg>]Specify the max number of matched Classes, the default value is 50. Long format is [maxMatch <arg>].

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 -bwhile 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:

Usage

Start Demo

Start math-game in Quick Start.

Check the out parameters, this and return value

TIP

The expression to watch, default value {params, target, returnObj}

$ watch demo.MathGame primeFactors -x 2
 Press Q or Ctrl+C to abort.
 Affect(class count: 1 , method count: 1) cost in 32 ms, listenerId: 5
 method=demo.MathGame.primeFactors location=AtExceptionExit
@@ -225,6 +225,6 @@ ts=2020-12-02 22:38:57; [cost=0.052877ms] result=@Object[][
     ],
 ]
 
- + diff --git a/en/doc/web-console.html b/en/doc/web-console.html index ae138d246..b1f234e8f 100644 --- a/en/doc/web-console.html +++ b/en/doc/web-console.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); Web Console | arthas - + -
Table of Contents

Web Console

Web Console online tutorialopen in new window

Connect arthas through the browser

Arthas supports the Web Console. After attach success, the user can access: http://127.0.0.1:8563/open in new window.

The user can fill in the IP and connect the remote arthas on other machines.

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/15open in new window

TIP

Since 3.5.4, you can right-click to copy and paste in the Web Console.

scrollback URL parameters

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=3000open in new window

Connect remote arthas through arthas tunnel server

Reference: Arthas Tunnel

- +
Table of Contents

Web Console

Connect arthas through the browser

Arthas supports the Web Console. After attach success, the user can access: http://127.0.0.1:8563/open in new window.

The user can fill in the IP and connect the remote arthas on other machines.

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/15open in new window

TIP

Since 3.5.4, you can right-click to copy and paste in the Web Console.

scrollback URL parameters

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=3000open in new window

Connect remote arthas through arthas tunnel server

Reference: Arthas Tunnel

+ diff --git a/en/index.html b/en/index.html index 998746342..fd795db04 100644 --- a/en/index.html +++ b/en/index.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); Home | arthas - + -

Java Diagnostic Tool

🖥

Dashboard

View the operating status of the system in real time

🔬

Parameters/Return values/Exceptions

View method parameters, return values and exceptions

🔩

Online hotswap

jad/sc/redefine online hotswap

🩺

Class conflict

Resolve the class conflict problem in seconds, locate the class loading path

⚡️

Flame Graph

Quickly locate application hotspots and generate flame graphs

📡

WebConsole

Online diagnosis

Users

Providing your info on Wanted: who's using arthas to help improving arthas better

- + diff --git a/index.html b/index.html index 21e51abdd..394534870 100644 --- a/index.html +++ b/index.html @@ -31,11 +31,11 @@ s.parentNode.insertBefore(hm, s); })(); arthas - + -

Java 应用诊断利器

🖥

Dashboard

实时查看系统的运行状况。

🔬

查看入参/返回值/异常

查看函数调用的参数,返回值和异常。

🔩

在线热更新

jad/sc/redefine 一条龙热更新代码。

🩺

类冲突

秒解类冲突问题,定位类加载路径。

⚡️

性能热点

快速定位应用的热点,生成火焰图。

📡

WebConsole

在线诊断,点开网页诊断线上应用。

用户

请在 Wanted: who's using arthas 上提供信息来帮助Arthas做的更好。

- + diff --git a/math-game.jar b/math-game.jar index ad23eb6d5d141983a0f476ac3f97472134635a97..78e215bbbc9c76ba52b2d862227b0c166b6959d8 100644 GIT binary patch delta 1503 zcmZ8hc{J1u6rP{4#4H9g)-WXDg^{vki7*l~*&0!lMz3d?M`OuSeh)>AEx)llz40tz zw8&DSGHJ7wNHQ4NmF#8djlAic`lENx`R+aEe&4z0o^#Lr($urmL1#y}Fct>ewhcy! zGIP!pWvgN=EmWey@+ytfI5ID;+C##Dn4dxJ_P($%C>_+B&Zs$_x-yFC|R9FcGy z7d~sew*4@xd!wCc*hJ}@v+*VdASd#%fn(`PP8~Uobh=*)wUMo2LHl=M+DFc{h(Ghf z?ab0EEz=-DOxi$lk6rgx@bVcM@6Dxib8UWP6u7Fko=F&ox zgiXfNgIVBdG2zQ92ZJp>=P~?l;No^C)Jd$*u}ySI1vxzrkewH5S$(Z4=EBJ=L_Ic! zF}Y$+^7IMY_?T4_OWiGEWxG3VObh2;=eh1bg=|P!ZVC+-Z zPWw0quU+ZyyRw?yTOm`WvlD3V1LKSnp)|POX{O%eDP_T3YgdIfL{VU7J^v^i2AdFv z!S+DKs6AjLEvSq#68wgMj2$`YGHgiV&X%XSX|w#HL?bH#W=xk>Ym}*ZG>b>$e=+%x z(c#^3sScXwtWK}j$_$c5ERD?Hxt8T)gDD0n6aaU5cYX!0`r+`&Bsuoo0SB(m218ae z@=Z_)qrhl_BKySTIyWyO;har_JHAJnu%l83*>bEcp9Mbm1_A(cQaDIVFXcJx$Jv;0iu=_61{O{7aX4 zeP;LOXt&~vH8@;Ze~sz))WzaOo?Y6x#ksD@zUQ|*ibGY7nT%xlmmK5Wcf!(kPE4_* z?HqrT`^P6abI()EuPnQK07}eE`;WdN>>sV174>SR!H)ZBFD9e4oKb6#NVGOj30l(h)Nvmg}1l4-1hxY+)Qn@ z^@^xsd9>0yhyHY0s?D=`S!%c(nj2a^`zbDjw3d1i^3abN&>eS2iM8Uqk!K3>qmAwE zc8(Z8Lxm#yro`#A?pV2}TI9Dg1<*I79L3Yd7iCNng>)rK`bWR=EiDJ1yq?;-5q07< zRdwy2q-r?#5mW#6fxU*Vb0c4`j`}O=d1X@iduCjyVrVA?a>r5t@mv_kP}Pi^h$wnh z-@(ItO4y=8fha{8#IIgx=kzTa%0qz)`E&s0><9>9;r}yAh=BG0+Mp|FBVZAFgx&+l zK+9-zzzWirBmk<;LXe;!oa}6!4Oty9Vnjadu}QN1H%g-28uHHx`sIFdiuHP`#So0y1532 z==r*po^|9pWFWwLp;n=M2DeJaYpv5|iegMnkLog(l^S?@Pv*LJ?^>(J!Mp80^YC`Md=kJ|jkCq_u?B%m=T3_AKzN_bol*YH9 zHJ#RZhWh)jOx>)`%=kI>t3*ci|2(-8&7+z<^O%nQ;m_yVU-ebYa@DP5FE*K0$J?!P z_Ca0d6F*2zeEga9-o6?{-~5--yGrZ(;TWs9`Ri%(bkHW$u5=%O@v z|+Kd~&9r@cqy3nf2EKlZ=SA#jAD$md!SKeu2&jO@2*QP=-;EuGNc6ew}pzu@qk zITK!G?vN0F!WV1zxI3mOw`R`Iz#9!`tsybG`5)6aHkJ_93)Pc<9b>2q34|n)n*-KvN-Po0QV|LE!ZDx^1Dwdhwzb<~_J>`Zjn~8&*hg?_t6c4Mt z6&V#9mUvX)7UE7B-%Z*1-UYWaEV^)^l368gzp*XP56n{MK!xhK}@bQJn+ zHGIqVxGiU;!xGg5x1i7;r=R!#s26e7;L>r@ca$r+sqM_}qOhJRLFG%m%x){r2hT4^ zKQOI)Q)a!zTc%9b)$rfXkKbl5mN8n$E65s~`e2sXrX_#e=T|-R^ZD3#u1QOE_qSzd zxNa&qr}(KTox0+(yuu_>;>8VHO`Z;3!_tU}ZOd+4j=E6RHFbf?(P;f1hCT0JrexP^ ztke_9&Rx3MaKrk|GyFd0=oB9Hx%-skMbe>2zoI60bMDOr=eV>?uFhP2U*p>)kEe52 zmlxc=9mneI*|b&nlE=A&#~(O9+}kbn_`&Vjt6%%yU+4VXW<$X~)yr-h_Y}|6xaD=? zZ1`7}jmHawz68wGeY%OYh`B7t$1q~%((+X@#rWnjdzZYd1RUvv>BQ=x6U|c)mN^B=wnNr&-4S?j#ZQ>@V{;4=rR(Z*aA0 zThTSk)v7sjWz#0(-1K)5&WXI{xonelxfYv0^!)WTwq{%B;y}^aT09w2A5O70#=NPfk6~V!@!cpW0UXjJ28HqEH9uY x4a&Zu%nS@qI2jm>U`l}WlE#OV69inPK@PM7@@;|G5=Fjk@&N%KHfcVPAOO;toGSnT