diff --git a/en/_sources/stack.md.txt b/en/_sources/stack.md.txt new file mode 100644 index 000000000..bfc5243a2 --- /dev/null +++ b/en/_sources/stack.md.txt @@ -0,0 +1,114 @@ +stack +===== + +Print out the full call stack trace containing the current method. + +Most of the time, we know the method being invoked but not always we know **HOW being invoked**; `stack` can be a great help to locate the *source* for you. + +### Parameters + +|Name|Specification| +|---:|:---| +|*class-pattern*|pattern for the class name| +|*method-pattern*|pattern for the method name| +|*condition-express*|condition expression| +|[E]|turn on regx matching while the default is wildcards matching| +|`[n:]`|calling times| + +F.Y.I +1. any valid OGNL expression as `"{params,returnObj}"` supported; +2. filter by time cost as `trace *StringUtils isBlank '$cost>100'`; calling stack with only time cost higher than `100ms` will be printed. + +Attention: +1. `$cost` can be used in `watch/stack/trace`; +2. using `#cost` in Arthas 3.0 instead of `$cost`. + + +Advanced: +* [Critical fields in expression](advice-class.md) +* [Special usage](https://github.com/alibaba/arthas/issues/71) +* [OGNL official guide](https://commons.apache.org/proper/commons-ognl/language-guide.html) + + +### Usage + +The quoting rules: if there are quotes within the expression, use another type of quotes to quote the whole expression. + +``` +$ stack com.alibaba.sample.petstore.dal.dao.ProductDao getProductById 'params[0]=="K9-BD-01"' +Press Ctrl+C to abort. +Affect(class-cnt:1 , method-cnt:1) cost in 51 ms. +thread_name="http-bio-8080-exec-4" thread_id=0x4a;is_daemon=true;priority=5; + @com.alibaba.sample.petstore.dal.dao.ibatis.IbatisProductDao.getProductById() + at com.alibaba.sample.petstore.web.store.module.screen.ItemList.execute(ItemList.java:50) + at com.alibaba.sample.petstore.web.store.module.screen.ItemList$$FastClassByCGLIB$$40b2f45f.invoke(:-1) + at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53) + at com.alibaba.citrus.service.moduleloader.impl.adapter.MethodInvoker.invoke(MethodInvoker.java:70) + at com.alibaba.citrus.service.moduleloader.impl.adapter.DataBindingAdapter.executeAndReturn(DataBindingAdapter.java:41) + at com.alibaba.citrus.turbine.pipeline.valve.PerformScreenValve.performScreenModule(PerformScreenValve.java:111) + at com.alibaba.citrus.turbine.pipeline.valve.PerformScreenValve.invoke(PerformScreenValve.java:74) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157) + at com.alibaba.citrus.turbine.pipeline.valve.PerformActionValve.invoke(PerformActionValve.java:73) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invoke(PipelineImpl.java:210) +...... + +thread_name="http-bio-8080-exec-2" thread_id=0x48;is_daemon=true;priority=5; + @com.alibaba.sample.petstore.dal.dao.ibatis.IbatisProductDao.getProductById() + at com.alibaba.sample.petstore.web.store.module.screen.ItemList.execute(ItemList.java:50) + at com.alibaba.sample.petstore.web.store.module.screen.ItemList$$FastClassByCGLIB$$40b2f45f.invoke(:-1) + at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53) + at com.alibaba.citrus.service.moduleloader.impl.adapter.MethodInvoker.invoke(MethodInvoker.java:70) + at com.alibaba.citrus.service.moduleloader.impl.adapter.DataBindingAdapter.executeAndReturn(DataBindingAdapter.java:41) + at com.alibaba.citrus.turbine.pipeline.valve.PerformScreenValve.performScreenModule(PerformScreenValve.java:111) + at com.alibaba.citrus.turbine.pipeline.valve.PerformScreenValve.invoke(PerformScreenValve.java:74) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157) + at com.alibaba.citrus.turbine.pipeline.valve.PerformActionValve.invoke(PerformActionValve.java:73) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invoke(PipelineImpl.java:210) + at com.alibaba.citrus.service.pipeline.impl.valve.ChooseValve.invoke(ChooseValve.java:98) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157) +...... +``` + +Filtering by time cost: + +``` +$ stack com.alibaba.sample.petstore.web.store.module.screen.ItemList execute #cost>30 +Press Ctrl+C to abort. +Affect(class-cnt:1 , method-cnt:1) cost in 123 ms. +stack com.alibaba.sample.petstore.web.store.module.screen.ItemList execute #cost>30 +thread_name=http-nio-8080-exec-10;id=31;is_daemon=true;priority=5;TCCL=com.taobao.pandora.boot.embedded.tomcat.TomcatEmbeddedWebappClassLoader + @com.alibaba.sample.petstore.web.store.module.screen.ItemList.execute() + at com.alibaba.sample.petstore.web.store.module.screen.ItemList$$FastClassByCGLIB$$40b2f45f.invoke(:-1) + at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53) + at com.alibaba.citrus.service.moduleloader.impl.adapter.MethodInvoker.invoke(MethodInvoker.java:70) + at com.alibaba.citrus.service.moduleloader.impl.adapter.DataBindingAdapter.executeAndReturn(DataBindingAdapter.java:41) + at com.alibaba.citrus.turbine.pipeline.valve.PerformScreenValve.performScreenModule(PerformScreenValve.java:111) + at com.alibaba.citrus.turbine.pipeline.valve.PerformScreenValve.invoke(PerformScreenValve.java:74) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157) + at com.alibaba.citrus.turbine.pipeline.valve.PerformActionValve.invoke(PerformActionValve.java:73) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invoke(PipelineImpl.java:210) + at com.alibaba.citrus.service.pipeline.impl.valve.ChooseValve.invoke(ChooseValve.java:98) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invoke(PipelineImpl.java:210) + at com.alibaba.citrus.service.pipeline.impl.valve.LoopValve.invokeBody(LoopValve.java:105) + at com.alibaba.citrus.service.pipeline.impl.valve.LoopValve.invoke(LoopValve.java:83) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157) + at com.alibaba.citrus.turbine.pipeline.valve.PageAuthorizationValve.invoke(PageAuthorizationValve.java:105) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157) + at com.alibaba.citrus.turbine.pipeline.valve.CheckCsrfTokenValve.invoke(CheckCsrfTokenValve.java:123) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157) + at com.alibaba.citrus.turbine.pipeline.valve.AnalyzeURLValve.invoke(AnalyzeURLValve.java:126) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157) + at com.alibaba.citrus.turbine.pipeline.valve.SetLoggingContextValve.invoke(SetLoggingContextValve.java:66) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157) + at com.alibaba.citrus.turbine.pipeline.valve.PrepareForTurbineValve.invoke(PrepareForTurbineValve.java:52) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invoke(PipelineImpl.java:210) + at com.alibaba.citrus.webx.impl.WebxControllerImpl.service(WebxControllerImpl.java:43) + at com.alibaba.citrus.webx.impl.WebxRootControllerImpl.handleRequest(WebxRootControllerImpl.java:53) + at com.alibaba.citrus.webx.support.AbstractWebxRootController.service(AbstractWebxRootController.java:165) +......... +``` diff --git a/en/_sources/start-arthas.md.txt b/en/_sources/start-arthas.md.txt new file mode 100644 index 000000000..0dd5b6f07 --- /dev/null +++ b/en/_sources/start-arthas.md.txt @@ -0,0 +1,76 @@ +Start Arthas +===== + +## Interactive Mode + +```bash +./as.sh +``` + +```sh +➜ bin git:(develop) ✗ ./as.sh +Found existing java process, please choose one and hit RETURN. + [1]: 3088 org.jetbrains.idea.maven.server.RemoteMavenServer +* [2]: 12872 org.apache.catalina.startup.Bootstrap + [3]: 2455 +Attaching to 12872... + ,---. ,------. ,--------.,--. ,--. ,---. ,---. + / O \ | .--. ''--. .--'| '--' | / O \ ' .-' +| .-. || '--'.' | | | .--. || .-. |`. `-. +| | | || |\ \ | | | | | || | | |.-' | +`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----' +$ +``` + +## Non-Interactive Mode + +Startup script is as follows: + +```bash +./as.sh [@IP:PORT] +``` + + + +### Parameter Description + +* PID: Target Java process ID(Make sure that the user executing the command has sufficient permissions to operate the target Java process.) + +* IP: The address that Arthas Server listens on, the default value is `127.0.0.1`. Arthas allows multiple users to access simultaneously without interfering with each other. + +* PORT: Arthas Server port,the default value is 3658 + +### Sample + +* If you do not specify IP and PORT, the default is 127.0.0.1 and 3658 + + > ./as.sh 12345 + + Equivalent to: + + > ./as.sh 12356@127.0.0.1:3658 + +### Remote Diagnosis + +After starting Arthas Server, users can use `telnet` connect to the remote Arthas Server, for example: + +```bash +telnet 192.168.1.119 3658 +``` + +### sudo Support + +If you need to switch users, such as `admin`, you need to add the -H parameter. + +```bash +sudo -u admin -H ./as.sh 12345 +``` + + +### Windows Support + +`as.bat` script only supports one parameter: pid + +```bash +as.bat +``` \ No newline at end of file diff --git a/en/_sources/trace.md.txt b/en/_sources/trace.md.txt new file mode 100644 index 000000000..cb25cd2f6 --- /dev/null +++ b/en/_sources/trace.md.txt @@ -0,0 +1,108 @@ +trace +===== + +Track the `class-pattern` & `method-pattern` matched method calling trace and print the time cost in each call. + +### Parameters + +|Name|Specification| +|---:|:---| +|*class-pattern*|pattern for the class name| +|*method-pattern*|pattern for the method name| +|*condition-express*|condition expression| +|[E]|turn on regx matching while the default is wildcards matching| +|`[n:]`|calling times| +|`#cost`|time cost| + +F.Y.I +1. any valid OGNL expression as `"{params,returnObj}"` supported; +2. filter by time cost as `trace *StringUtils isBlank '$cost>100'`; calling stack with only time cost higher than `100ms` will be printed. + +Attention: +1. `$cost` can be used in `watch/stack/trace`; +2. using `#cost` in Arthas 3.0 instead of `$cost`. +3. `trace` can help to locate the performance lurking issue but only `level-one` method invoking considered. + + +Advanced: +* [Critical fields in expression](advice-class.md) +* [Special usage](https://github.com/alibaba/arthas/issues/71) +* [OGNL official guide](https://commons.apache.org/proper/commons-ognl/language-guide.html) + +### Usage + +A demo: + +```java + public static void main(String[] args) { + List list = new ArrayList(); + list.add("a"); + list.add("b"); + + List list2 = new ArrayList(); + list2.add("c"); + list2.add("d"); + + int len = add(list, list2); + } + + private static int add(List list, List list2) { + int i = 10; + while (i >= 0) { + try { + hehe(i); + } catch (Throwable t) { + t.printStackTrace(); + } + i--; + } + + list.addAll(list2); + return list.size(); + } + + private static void hehe(int i) { + if (i == 0) { + throw new RuntimeException("ZERO"); + } + } +``` + +Tracing down method `add`: + +```shell +$ trace com.alibaba.sample.petstore.web.store.module.screen.ItemList add params.length==2 +Press Ctrl+C to abort. +Affect(class-cnt:1 , method-cnt:1) cost in 144 ms. +`---Tracing... + `---[2ms]com.alibaba.sample.petstore.web.store.module.screen.ItemList:add() + +---[0,0,0ms,11]com.alibaba.sample.petstore.web.store.module.screen.ItemList:hehe() [throws Exception] + +---[1ms]java.lang.Throwable:printStackTrace() + +---[0ms]java.util.List:addAll() + `---[0ms]java.util.List:size() +``` + +Filtering by time cost: + +```shell +$ trace com.alibaba.sample.petstore.web.store.module.screen.ItemList execute #cost>4 +Press Ctrl+C to abort. +Affect(class-cnt:1 , method-cnt:1) cost in 159 ms. +trace com.alibaba.sample.petstore.web.store.module.screen.ItemList execute #cost>4 +`---thread_name=http-nio-8080-exec-5;id=2c;is_daemon=true;priority=5;TCCL=com.taobao.pandora.boot.embedded.tomcat.TomcatEmbeddedWebappClassLoader + `---[8.866586ms] com.alibaba.sample.petstore.web.store.module.screen.ItemList:execute() + +---[2.847106ms] com.alibaba.sample.petstore.biz.StoreManager:getAllProductItems() + +---[0.765544ms] com.alibaba.sample.petstore.dal.dao.ProductDao:getProductById() + +---[0.021204ms] com.alibaba.sample.petstore.dal.dataobject.Product:getCategoryId() + +---[1.341532ms] com.alibaba.sample.petstore.dal.dao.CategoryDao:getCategoryById() + `---[min=0.005428ms,max=0.094064ms,total=0.105228ms,count=3] com.alibaba.citrus.turbine.Context:put() +``` + +Only the calling trace of the time cost higher than `4ms`presented now. + +F.Y.I +1. just like JProfile and the like commercial software, you can `trace` down the specified method calling in Arthas; +2. there will be some overhead using `trace` but not much; +3. the time cost is an instructive clue for troubleshooting, which means it's not that accurate ignoring the cost it itself causes; the deeper or more the call is, the accuracy is becoming worse; +4. `[0,0,0ms,11]xxx:yyy() [throws Exception]`,the same method calling aggregated into one line here while `throws Exception` indicates there is an exception. + diff --git a/en/_sources/tt.md.txt b/en/_sources/tt.md.txt new file mode 100644 index 000000000..f1cca71f8 --- /dev/null +++ b/en/_sources/tt.md.txt @@ -0,0 +1,194 @@ +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` (abbreviated from *TimeTunnel*), you can check the contexts of the methods at different times. + +### Usage + +Let's record the whole calling contexts: + + ```java + $ tt -t -n 3 *Test print + Press Ctrl+D or Ctrl+X to abort. + Affect(class-cnt:1 , method-cnt:1) cost in 115 ms. + +----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ + | INDEX | TIMESTAMP | COST(ms) | IS-RET | IS-EXP | OBJECT | CLASS | METHOD | + +----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ + | 1007 | 2015-07-26 12:23:21 | 138 | true | false | 0x42cc13a0 | GaOgnlUtilsTest | print | + +----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ + | 1008 | 2015-07-26 12:23:22 | 143 | true | false | 0x42cc13a0 | GaOgnlUtilsTest | print | + +----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ + | 1009 | 2015-07-26 12:23:23 | 130 | true | false | 0x42cc13a0 | GaOgnlUtilsTest | print | + +----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ + $ + ``` + +#### F.Y.I + + - `-t` + + record the calling context of the method `*Test.print` + + - `-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 limit) + +#### Property + +|Name|Specification| +|---|---| +|INDEX|the index for each call based on time| +|TIMESTAMP|time to invoke the method| +|COST(ms)|time cost of the method call| +|IS-RET|end with normal return| +|IS-EXP|end with exceptions| +|OBJECT|`hashCode()` of the object invoking the method| +|CLASS|class name of the object invoking the method| +|METHOD|method being invoked| + +#### Condition expression + +Tips: +1. `tt -t *Test print params[0].length==1` with different amount of parameters; +2. `tt -t *Test print 'params[1] instanceof Integer'` with different types of parameters; +3. `tt -t *Test print params[0].mobile=="13989838402"` with specified parameter. + +Advanced: +* [Critical fields in expression](advice-class.md) +* [Special usage](https://github.com/alibaba/arthas/issues/71) +* [OGNL official guide](https://commons.apache.org/proper/commons-ognl/language-guide.html) + + +### Searching for records + +#### A specified time range + +``` +$ tt -l ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ +| INDEX | TIMESTAMP | COST(ms) | IS-RET | IS-EXP | OBJECT | CLASS | METHOD | ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ +| 1000 | 2015-07-26 01:16:27 | 130 | true | false | 0x42cc13a0 | GaOgnlUtilsTest | print | ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ +| 1001 | 2015-07-26 01:16:27 | 0 | false | true | 0x42cc13a0 | GaOgnlUtilsTest | printAddress | ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ +| 1002 | 2015-07-26 01:16:28 | 119 | true | false | 0x42cc13a0 | GaOgnlUtilsTest | print | ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ +| 1003 | 2015-07-26 01:16:28 | 0 | false | true | 0x42cc13a0 | GaOgnlUtilsTest | printAddress | ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ +| 1004 | 2015-07-26 12:21:56 | 130 | true | false | 0x42cc13a0 | GaOgnlUtilsTest | print | ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ +| 1005 | 2015-07-26 12:21:57 | 138 | true | false | 0x42cc13a0 | GaOgnlUtilsTest | print | ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ +| 1006 | 2015-07-26 12:21:58 | 130 | true | false | 0x42cc13a0 | GaOgnlUtilsTest | print | ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ +Affect(row-cnt:7) cost in 2 ms. +$ +``` + +#### A specified method + +``` +$ tt -s method.name=="printAddress" ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ +| INDEX | TIMESTAMP | COST(ms) | IS-RET | IS-EXP | OBJECT | CLASS | METHOD | ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ +| 1001 | 2015-07-26 01:16:27 | 0 | false | true | 0x42cc13a0 | GaOgnlUtilsTest | printAddress | ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ +| 1003 | 2015-07-26 01:16:28 | 0 | false | true | 0x42cc13a0 | GaOgnlUtilsTest | printAddress | ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ +Affect(row-cnt:2) cost in 55 ms. +$ +``` + +Advanced: +* [Critical fields in expression](advice-class.md) + +### Check context of the call + +Using `tt -i ` to check a specific record. + +``` +$ +$ tt -i 1003 ++-----------------+------------------------------------------------------------------------------------------------------+ +| INDEX | 1003 | ++-----------------+------------------------------------------------------------------------------------------------------+ +| GMT-CREATE | 2015-07-26 01:16:28 | ++-----------------+------------------------------------------------------------------------------------------------------+ +| COST(ms) | 0 | ++-----------------+------------------------------------------------------------------------------------------------------+ +| OBJECT | 0x42cc13a0 | ++-----------------+------------------------------------------------------------------------------------------------------+ +| CLASS | GaOgnlUtilsTest | ++-----------------+------------------------------------------------------------------------------------------------------+ +| METHOD | printAddress | ++-----------------+------------------------------------------------------------------------------------------------------+ +| IS-RETURN | false | ++-----------------+------------------------------------------------------------------------------------------------------+ +| IS-EXCEPTION | true | ++-----------------+------------------------------------------------------------------------------------------------------+ +| PARAMETERS[0] | Address@53448f87 | ++-----------------+------------------------------------------------------------------------------------------------------+ +| THROW-EXCEPTION | java.lang.RuntimeException: test | +| | at GaOgnlUtilsTest.printAddress(Unknown Source) | +| | at GaOgnlUtilsTest.(Unknown Source) | +| | at GaOgnlUtilsTest.main(Unknown Source) | ++-----------------+------------------------------------------------------------------------------------------------------+ +Affect(row-cnt:1) cost in 1 ms. +$ +``` + +### Re-produce + +Since Arthas stores the context of the call, you can even re-produce the method calling after some modifications with extra option `-p`. + +``` +$ tt -i 1003 -p ++-----------------+---------------------------------------------------------------------------------------------------------+ +| RE-INDEX | 1003 | ++-----------------+---------------------------------------------------------------------------------------------------------+ +| GMT-REPLAY | 2015-07-26 17:29:51 | ++-----------------+---------------------------------------------------------------------------------------------------------+ +| OBJECT | 0x42cc13a0 | ++-----------------+---------------------------------------------------------------------------------------------------------+ +| CLASS | GaOgnlUtilsTest | ++-----------------+---------------------------------------------------------------------------------------------------------+ +| METHOD | printAddress | ++-----------------+---------------------------------------------------------------------------------------------------------+ +| PARAMETERS[0] | Address@53448f87 | ++-----------------+---------------------------------------------------------------------------------------------------------+ +| IS-RETURN | false | ++-----------------+---------------------------------------------------------------------------------------------------------+ +| IS-EXCEPTION | true | ++-----------------+---------------------------------------------------------------------------------------------------------+ +| THROW-EXCEPTION | java.lang.RuntimeException: test | +| | at GaOgnlUtilsTest.printAddress(GaOgnlUtilsTest.java:78) | +| | at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) | +| | at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) | +| | at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) | +| | at java.lang.reflect.Method.invoke(Method.java:483) | +| | at com.github.ompc.Arthas.util.GaMethod.invoke(GaMethod.java:81) | +| | at com.github.ompc.Arthas.command.TimeTunnelCommand$6.action(TimeTunnelCommand.java:592) | +| | at com.github.ompc.Arthas.server.DefaultCommandHandler.execute(DefaultCommandHandler.java:175) | +| | at com.github.ompc.Arthas.server.DefaultCommandHandler.executeCommand(DefaultCommandHandler.java:83) | +| | at com.github.ompc.Arthas.server.GaServer$4.run(GaServer.java:329) | +| | at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) | +| | at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) | +| | at java.lang.Thread.run(Thread.java:745) | ++-----------------+---------------------------------------------------------------------------------------------------------+ +replay time fragment[1003] success. +Affect(row-cnt:1) cost in 3 ms. +$ +``` + +F.Y.I +1. the calling stack is little different using Arthas now instead of the original method; +2. **Loss** of the thread local variables will be a fact since there is no way for Arthas to record the thread local info. +3. **Potential** modifications of objects can happen since only a reference will be recorded by Arthas while later process might modify objects without Arthas's watch. diff --git a/en/_sources/watch.md.txt b/en/_sources/watch.md.txt new file mode 100644 index 000000000..c6bc990f5 --- /dev/null +++ b/en/_sources/watch.md.txt @@ -0,0 +1,300 @@ +watch +===== + +Monitor the methods in data aspect including `return value`, `exceptions` and `parameters`. + +With the help of [OGNL](https://en.wikipedia.org/wiki/OGNL), you can easily check the details of the variables. + +### Parameters & Options + +There are four different usage scenarios for `watch` command, which makes it the most complicated command in Arthas. + +|Name|Specification| +|---:|:---| +|*class-pattern*|pattern for the class name| +|*method-pattern*|pattern for the method name| +|*express*|expression to monitor| +|*condition-express*|condition expression| +|[b]|before invoking| +|[e]|encountering exceptions| +|[s]|returned normally| +|[f]|returned normally and abnormally| +|[E]|turn on regx matching while the default is wildcards matching| +|[x:]|the depth to print the specified property with default value: 1| + +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 calculate the values and print them out; +4. `in-parameters` and `out-parameters` are different since they can be modified; `params` stands for `in-parameters` in `-b`while `out-parameters` in other *watching* points; +5. there is no `return value` and `exceptions` when using `-b`. + + +Advanced: +* [Critical fields in expression](advice-class.md) +* [Special usage](https://github.com/alibaba/arthas/issues/71) +* [OGNL official guide](https://commons.apache.org/proper/commons-ognl/language-guide.html) + +### Usage + +A demo: + +```java + public void execute() { + List list = new ArrayList(); + list.add("a"); + list.add("b"); + + List list2 = new ArrayList(); + list2.add("c"); + list2.add("d"); + + int len = add(list, list2); + } + + private static int add(List list, List list2) { + list.addAll(list2); + return list.size(); + } +``` +#### Check the `out-parameters`and `return value` + +```shell +$ watch com.alibaba.sample.petstore.web.store.module.screen.ItemList add "{params,returnObj}" -x 2 +Press Ctrl+C to abort. +Affect(class-cnt:1 , method-cnt:1) cost in 44 ms. +@ArrayList[ + @Object[][ + @ArrayList[isEmpty=false;size=4], + @ArrayList[isEmpty=false;size=2], + ], + + @Integer[4], +] +``` + +#### Check `in-parameters` + +```shell +$ watch com.alibaba.sample.petstore.web.store.module.screen.ItemList add "{params,returnObj}" -x 2 -b +Press Ctrl+C to abort. +Affect(class-cnt:1 , method-cnt:1) cost in 48 ms. +@ArrayList[ + @Object[][ + @ArrayList[isEmpty=false;size=2], + @ArrayList[isEmpty=false;size=2], + ], + + null, +] +``` + +Compared to the previous *check*: +1. size of `params[0]` is `2` instead of `4`; +2. `return value` is `null` since it's `-b`. + + +#### Check *before* and *after* at the same time + +```shell +$ watch com.alibaba.sample.petstore.web.store.module.screen.ItemList add "{params,returnObj}" -x 2 -b -s +Press Ctrl+C to abort. +Affect(class-cnt:1 , method-cnt:1) cost in 59 ms. +@ArrayList[ + @Object[][ + @ArrayList[isEmpty=false;size=2], + @ArrayList[isEmpty=false;size=2], + ], + + null, +] +@ArrayList[ + @Object[][ + @ArrayList[isEmpty=false;size=4], + @ArrayList[isEmpty=false;size=2], + ], + + @Integer[4], +] +``` + +F.Y.I +1. the first block of output is the *before watching* point; +2. the order of the output determined by the *watching* order itself (nothing to do with the order of the options `-b -s`). + +#### Using `-x` to check more details + +```shell +$ watch com.alibaba.sample.petstore.web.store.module.screen.ItemList add "{params,returnObj}" -x 3 +Press Ctrl+C to abort. +Affect(class-cnt:1 , method-cnt:1) cost in 59 ms. +@ArrayList[ + @Object[][ + @ArrayList[ + @String[a], + + @String[b], + + @String[c], + + @String[d], + ], + @ArrayList[ + @String[c], + + @String[d], + ], + ], + + @Integer[4], +] +``` + +#### Using condition expressions to locate specific call + +```shell +$ watch com.alibaba.sample.petstore.biz.impl.UserManagerImpl testAdd "{params, returnObj}" "params[0].equals('aaa')" -x 2 +Press Ctrl+C to abort. +Affect(class-cnt:1 , method-cnt:1) cost in 29 ms. +@ArrayList[ + @Object[][ + @String[aaa], + @String[bbb], + ], + + @Integer[6], +] +``` + +#### Check `exceptions` + +```shell +$ watch com.alibaba.sample.petstore.biz.impl.UserManagerImpl testAdd "{params, throwExp}" -e -x 2 +Press Ctrl+C to abort. +Affect(class-cnt:1 , method-cnt:1) cost in 29 ms. +@ArrayList[ + @Object[][ + @String[aaa], + @String[bbb], + ], + + java.lang.NullPointerException + at com.alibaba.sample.petstore.biz.impl.UserManagerImpl.testAdd(UserManagerImpl.java:75) + at com.alibaba.sample.petstore.biz.impl.UserManagerImpl.register(UserManagerImpl.java:60) + at com.alibaba.sample.petstore.web.user.module.action.RegisterAction.doRegister(RegisterAction.java:45) + at com.alibaba.sample.petstore.web.user.module.action.RegisterAction$$FastClassByCGLIB$$ad5428f1.invoke() + at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53) + at com.alibaba.citrus.service.moduleloader.impl.adapter.MethodInvoker.invoke(MethodInvoker.java:70) + at com.alibaba.citrus.service.moduleloader.impl.adapter.AbstractModuleEventAdapter.executeAndReturn(AbstractModuleEventAdapter.java:100) + at com.alibaba.citrus.service.moduleloader.impl.adapter.AbstractModuleEventAdapter.execute(AbstractModuleEventAdapter.java:58) + at com.alibaba.citrus.turbine.pipeline.valve.PerformActionValve.invoke(PerformActionValve.java:63) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invoke(PipelineImpl.java:210) + at com.alibaba.citrus.service.pipeline.impl.valve.ChooseValve.invoke(ChooseValve.java:98) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invoke(PipelineImpl.java:210) + at com.alibaba.citrus.service.pipeline.impl.valve.LoopValve.invokeBody(LoopValve.java:105) + at com.alibaba.citrus.service.pipeline.impl.valve.LoopValve.invoke(LoopValve.java:83) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157) + at com.alibaba.citrus.turbine.pipeline.valve.PageAuthorizationValve.invoke(PageAuthorizationValve.java:105) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157) + at com.alibaba.citrus.turbine.pipeline.valve.CheckCsrfTokenValve.invoke(CheckCsrfTokenValve.java:123) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157) + at com.alibaba.citrus.turbine.pipeline.valve.AnalyzeURLValve.invoke(AnalyzeURLValve.java:126) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157) + at com.alibaba.citrus.turbine.pipeline.valve.SetLoggingContextValve.invoke(SetLoggingContextValve.java:66) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157) + at com.alibaba.citrus.turbine.pipeline.valve.PrepareForTurbineValve.invoke(PrepareForTurbineValve.java:52) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157) + at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invoke(PipelineImpl.java:210) + at com.alibaba.citrus.webx.impl.WebxControllerImpl.service(WebxControllerImpl.java:43) + at com.alibaba.citrus.webx.impl.WebxRootControllerImpl.handleRequest(WebxRootControllerImpl.java:53) + at com.alibaba.citrus.webx.support.AbstractWebxRootController.service(AbstractWebxRootController.java:165) + at com.alibaba.citrus.webx.servlet.WebxFrameworkFilter.doFilter(WebxFrameworkFilter.java:152) + at com.alibaba.citrus.webx.servlet.FilterBean.doFilter(FilterBean.java:148) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) + at com.alibaba.citrus.webx.servlet.SetLoggingContextFilter.doFilter(SetLoggingContextFilter.java:61) + at com.alibaba.citrus.webx.servlet.FilterBean.doFilter(FilterBean.java:148) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) + at com.taobao.tomcat.valves.ContextLoadFilterValve.invoke(ContextLoadFilterValve.java:152) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:429) + at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085) + at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1760) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1719) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.lang.Thread.run(Thread.java:745), +] +``` + +#### Filter based on time cost + +```shell +$ watch com.alibaba.sample.petstore.web.store.module.screen.ItemList add "{params,returnObj}" #cost>200 -x 3 +Press Ctrl+C to abort. +Affect(class-cnt:1 , method-cnt:1) cost in 59 ms. +@ArrayList[ + @Object[][ + @ArrayList[ + @String[a], + + @String[b], + + @String[c], + + @String[d], + ], + @ArrayList[ + @String[c], + + @String[d], + ], + ], + + @Integer[4], +] +``` + +F.Y.I +`#cost>200` (`ms`) filter out all invokings that take less than `200ms`. + + +#### Check the global properties of the target object + +`target` stands for the current object. + +``` +$ watch com.taobao.container.web.arthas.rest.MyAppsController myFavoriteApps 'target' +Press Ctrl+C to abort. +Affect(class-cnt:1 , method-cnt:1) cost in 128 ms. +ts=2017-10-31 18:45:55;result=@MyAppsController[ + myFavAppsMapper=@$Proxy131[org.apache.ibatis.binding.MapperProxy@563e97f3], + getAppNameAndIdByEmpId=@$Proxy135[HardCodedTarget(type=GetAppNameAndIdByEmpId, url=http://hello.com)], + enableWebConsoleAppsMapper=@$Proxy132[org.apache.ibatis.binding.MapperProxy@7d51e4a8], +] +``` + +`target.field_name` stands for a global property of the current object. + +``` +$ watch com.taobao.container.web.arthas.rest.MyAppsController myFavoriteApps 'target.myFavAppsMapper' +Press Ctrl+C to abort. +Affect(class-cnt:1 , method-cnt:1) cost in 126 ms. +ts=2017-10-31 18:46:17;result=@$Proxy131[ + m1=@Method[public boolean java.lang.Object.equals(java.lang.Object)], + m2=@Method[public java.lang.String java.lang.Object.toString()], + m5=@Method[public abstract java.util.List com.taobao.container.dal.arthas.mapper.MyFavAppsMapper.listFavApps(java.util.Map)], + m3=@Method[public abstract int com.taobao.container.dal.arthas.mapper.MyFavAppsMapper.delete(java.lang.String,java.lang.String,java.lang.String)], + m4=@Method[public abstract long com.taobao.container.dal.arthas.mapper.MyFavAppsMapper.insert(com.taobao.container.dal.arthas.domain.MyFavAppsDO)], + m0=@Method[public native int java.lang.Object.hashCode()], +] +``` diff --git a/en/advanced-use.html b/en/advanced-use.html index f6c7f5b13..e715161c6 100644 --- a/en/advanced-use.html +++ b/en/advanced-use.html @@ -224,10 +224,10 @@
Attention: commands here are taking advantage of byte code injection, which means we are using AOP to monitor and analyze the classes. So when using it for online troubleshooting, you’d better explicitly specifically specify the classes and also remember to remove the injected code by shutdown or reset (for specific classes).
  • monitor
  • -
  • watch
  • -
  • trace - track the call stack trace and collect the time cost for each method call
  • -
  • stack - print the call stack trace of the current method
  • -
  • tt - record the arguments and returned value for the methods, history included
  • +
  • watch
  • +
  • trace - track the call stack trace and collect the time cost for each method call
  • +
  • stack - print the call stack trace of the current method
  • +
  • tt - record the arguments and returned value for the methods, history included
diff --git a/en/classloader.html b/en/classloader.html index 6b564440b..655001928 100644 --- a/en/classloader.html +++ b/en/classloader.html @@ -109,10 +109,10 @@
  • redefine
  • monitor
  • -
  • watch
  • -
  • trace
  • -
  • stack
  • -
  • tt
  • +
  • watch
  • +
  • trace
  • +
  • stack
  • +
  • tt
  • options
  • Arthas Basic Commands
  • diff --git a/en/commands.html b/en/commands.html index cb2a18e32..c7c7ba102 100644 --- a/en/commands.html +++ b/en/commands.html @@ -105,10 +105,10 @@
  • classloader
  • redefine
  • monitor
  • -
  • watch
  • -
  • trace
  • -
  • stack
  • -
  • tt
  • +
  • watch
  • +
  • trace
  • +
  • stack
  • +
  • tt
  • options
  • Arthas Basic Commands
  • @@ -200,10 +200,10 @@
  • classloader
  • redefine
  • monitor
  • -
  • watch
  • -
  • trace
  • -
  • stack
  • -
  • tt
  • +
  • watch
  • +
  • trace
  • +
  • stack
  • +
  • tt
  • options
  • diff --git a/en/dashboard.html b/en/dashboard.html index 2904416ba..187f8c38a 100644 --- a/en/dashboard.html +++ b/en/dashboard.html @@ -110,10 +110,10 @@
  • classloader
  • redefine
  • monitor
  • -
  • watch
  • -
  • trace
  • -
  • stack
  • -
  • tt
  • +
  • watch
  • +
  • trace
  • +
  • stack
  • +
  • tt
  • options
  • Arthas Basic Commands
  • diff --git a/en/dump.html b/en/dump.html index 286e48ecb..d69144134 100644 --- a/en/dump.html +++ b/en/dump.html @@ -109,10 +109,10 @@
  • classloader
  • redefine
  • monitor
  • -
  • watch
  • -
  • trace
  • -
  • stack
  • -
  • tt
  • +
  • watch
  • +
  • trace
  • +
  • stack
  • +
  • tt
  • options
  • Arthas Basic Commands
  • diff --git a/en/getstatic.html b/en/getstatic.html index ee71a48e7..9f60abd10 100644 --- a/en/getstatic.html +++ b/en/getstatic.html @@ -105,10 +105,10 @@
  • classloader
  • redefine
  • monitor
  • -
  • watch
  • -
  • trace
  • -
  • stack
  • -
  • tt
  • +
  • watch
  • +
  • trace
  • +
  • stack
  • +
  • tt
  • options
  • Arthas Basic Commands
  • diff --git a/en/jad.html b/en/jad.html index 66ada0eb5..b6fc53b64 100644 --- a/en/jad.html +++ b/en/jad.html @@ -109,10 +109,10 @@
  • classloader
  • redefine
  • monitor
  • -
  • watch
  • -
  • trace
  • -
  • stack
  • -
  • tt
  • +
  • watch
  • +
  • trace
  • +
  • stack
  • +
  • tt
  • options
  • Arthas Basic Commands
  • diff --git a/en/jvm.html b/en/jvm.html index cce90d3ca..8a27d724c 100644 --- a/en/jvm.html +++ b/en/jvm.html @@ -109,10 +109,10 @@
  • classloader
  • redefine
  • monitor
  • -
  • watch
  • -
  • trace
  • -
  • stack
  • -
  • tt
  • +
  • watch
  • +
  • trace
  • +
  • stack
  • +
  • tt
  • options
  • Arthas Basic Commands
  • diff --git a/en/monitor.html b/en/monitor.html index eea293d95..2006bd86e 100644 --- a/en/monitor.html +++ b/en/monitor.html @@ -31,7 +31,7 @@ - + @@ -110,10 +110,10 @@
  • Usage
  • -
  • watch
  • -
  • trace
  • -
  • stack
  • -
  • tt
  • +
  • watch
  • +
  • trace
  • +
  • stack
  • +
  • tt
  • options
  • Arthas Basic Commands
  • @@ -302,7 +302,7 @@ Affect(class-cnt:1 , method-cnt:1) -
  • For more details of the booting script, please refer to starting arthas.

    +
  • For more details of the booting script, please refer to starting arthas.

  • If you cannot attach the target process, please check the logs under ~/logs/arthas for troubleshooting.

  • @@ -308,7 +308,7 @@ java.home /Library/Java/JavaVir

    4. watch

    -

    Input watch to check the returned value of Counter.value():

    +

    Input watch to check the returned value of Counter.value():

    $ watch Demo$Counter value returnObj
     Press Ctrl+C to abort.
     Affect(class-cnt:1 , method-cnt:1) cost in 29 ms.
    diff --git a/en/redefine.html b/en/redefine.html
    index 12f4cc329..2c4164efa 100644
    --- a/en/redefine.html
    +++ b/en/redefine.html
    @@ -109,10 +109,10 @@
     
     
     
  • monitor
  • -
  • watch
  • -
  • trace
  • -
  • stack
  • -
  • tt
  • +
  • watch
  • +
  • trace
  • +
  • stack
  • +
  • tt
  • options
  • Arthas Basic Commands
  • diff --git a/en/sc.html b/en/sc.html index 1b69ca44a..57eae0e57 100644 --- a/en/sc.html +++ b/en/sc.html @@ -112,10 +112,10 @@
  • classloader
  • redefine
  • monitor
  • -
  • watch
  • -
  • trace
  • -
  • stack
  • -
  • tt
  • +
  • watch
  • +
  • trace
  • +
  • stack
  • +
  • tt
  • options
  • Arthas Basic Commands
  • diff --git a/en/searchindex.js b/en/searchindex.js index 1dc1132ac..7ab1696ef 100644 --- a/en/searchindex.js +++ b/en/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["README","advanced-use","classloader","commands","dashboard","dump","getstatic","index","install-detail","jad","jvm","monitor","options","quick-start","redefine","sc","sm","sysprop","thread"],envversion:55,filenames:["README.md","advanced-use.md","classloader.md","commands.md","dashboard.md","dump.md","getstatic.md","index.md","install-detail.md","jad.md","jvm.md","monitor.md","options.md","quick-start.md","redefine.md","sc.md","sm.md","sysprop.md","thread.md"],objects:{},objnames:{},objtypes:{},terms:{"0_162":13,"0_51":17,"0_60":[2,4,10],"100m":4,"103m":4,"10d307f1":2,"114m":4,"1201f221":2,"12m":13,"131ef10":2,"1365m":[4,13],"13b6aecc":2,"14dad5dc":[2,9],"14m":[4,13],"155m":13,"16020s":4,"167m":4,"172m":4,"1817d444":[2,9],"1820m":[4,13],"1b6d3586":2,"1ba9117":2,"1d44eef3":15,"1f57f96d":2,"2002fc1d":2,"20m":13,"223m":4,"226b143b":2,"22880c2b":5,"22fcf7ab":2,"2302e984":5,"23348b5d":2,"234m":4,"23m":13,"240m":[4,13],"24313fcc":2,"247bddad":2,"25s":12,"2833cc44":2,"29505d69":5,"29fafb28":18,"2bdd9114":[5,9],"2f8dad04":2,"31a6493":18,"3232a28a":2,"327a647b":14,"328b3a05":2,"32m":13,"334e6bb8":2,"39m":4,"3bbaa1b8":2,"3d5c822d":2,"4009e306":2,"41a2befb":2,"41e1e210":2,"429bffaa":2,"46m":4,"47m":4,"4944252c":2,"4988d8b8":2,"4b8ee4d":2,"4c0df5f8":9,"4d0f2471":2,"4fa2d7e6":2,"522400c2":2,"53f65459":2,"544dc9ba":5,"546aeec1":18,"548a102f":2,"57a462c9":15,"59m":4,"5e255d0b":2,"5ffe9775":2,"609cd4d8":2,"65m":13,"668m":4,"672m":13,"6913c1fb":2,"6951a712":[5,9,15],"696da30b":2,"69ba0f27":18,"69dcaba4":9,"6cd0b6f8":18,"6e51ad67":[5,9],"6fafc4c2":[5,9],"7127ee12":18,"725be470":18,"72cda8e":2,"73f44f24":2,"79d8407f":2,"7a419da4":2,"7c9d8e2":2,"7e5afaa6":2,"7ec7ffd3":2,"85m":13,"\u4e2d\u6587\u6587\u6863":7,"boolean":[9,16],"byte":[1,9],"case":7,"class":[0,2,3,5,6,7,9,10,11,12,13,14,15,16,17],"default":[1,5,9,11,12,15,16,18],"enum":6,"final":[9,10,13,15,18],"function":13,"import":[9,13],"int":[13,15],"new":[1,9,13,14,18],"null":[2,9],"public":[9,13,15,16],"return":[0,1,7,9,11,13,16],"static":[1,6,9,13,15],"super":[9,15],"switch":[2,12],"throw":13,"true":[4,9,12,13,15,17,18],"try":[0,8,13],"var":17,"void":[9,13],"while":[5,9,11,13,15,16],And:7,But:8,DOS:13,For:[8,12,13],IDE:7,QPS:4,That:7,The:8,Useful:7,Using:[1,2,18],With:0,_162:13,a38d7a3:[2,9],aaa:[6,15],abbrevi:[15,16],abort:[11,13],abov:[7,8],absolut:[8,14],abstractcommandhandl:18,abstractconnectionhandl:18,abstracthttp11processor:18,abstractprotocol:18,abstractqueuedsynchron:18,acceptor:4,access:[6,18],achiev:6,acl:2,acquiresharedinterrupt:18,action:18,activ:10,adataarrai:9,add:8,adding:[7,14],addit:7,admin:[12,13],advanc:[7,13],advantag:1,affect:[1,2,3,5,6,9,10,11,13],after:[12,18],agent:[2,8],agentlaunch:2,aging:10,air:10,ali:4,alibaba:[2,6,7,8,11,13,17],alimonitor:2,aliwebappclassload:[5,15],all:[0,1,2,3,7,8,10,12,15,16],along:15,also:[1,3,8],analyz:[0,1],ancestor:16,ani:[8,11,14],annot:[2,15,16],annotatedcommandimpl:18,anoth:[8,18],answer:7,aop:1,apach:[1,5,9,15,16,18],apart:0,api:[2,17],appclassload:[2,5,9,15],applic:[7,12],applicationfilterchain:18,arch:[10,17],area:3,arg:13,argument:[0,1,8,10],arrai:9,arraylist:6,artha:[0,1,2,4,6,9,11,12,17,18],arthas_histori:8,arthasclassload:2,arthasserv:18,ash:10,asia:17,ask:8,asm:12,asmclassload:2,assist:[0,3,9],asyncappend:13,asynctimeout:4,atom:13,atomicinteg:13,attach:[1,8,13,18],attent:[1,18],authent:18,authenticatorbas:18,auto:[7,17],automat:11,aux:8,avail:8,averag:[4,10,11],await:18,awt:17,b03:17,b16:17,b23:10,back:[1,12],background:11,base:2,basic:18,bat:[8,13],batch:[1,12],bbb:6,bcpkix:10,bcprov:10,becaus:7,becom:11,befor:[0,12],behavior:11,behind:9,being:11,besid:7,better:[1,8,9,18],bin:[5,8,10],bio:[4,18],bit:[10,17],booleanvalu:9,boot:[2,9,10,13,17],bootstrapclassload:2,born:7,both:7,brari:10,bring:1,browser:7,buc:2,bug:17,buglevel:17,bugreport:17,build:5,busi:[0,4,7,18],bytecod:5,cach:10,call:[1,7,11],can:[0,2,3,6,7,8,12,13,14,15,16,18],cannot:[8,13,14],catalina:[5,15,16,18],categor:2,categori:[9,10],categoris:2,caution:[2,12],cdi:2,ces:17,cgraphicsenviron:17,chang:[7,11,17],charact:13,charset:[10,17],check:[0,1,2,3,6,7,8,10,15,16,18],checkthread:4,child:12,chines:7,choos:13,citru:15,class_nam:6,classdump:5,classload:[3,5,7,9],clazz:9,clear:[1,3],cli:10,client:[1,2,3,5],cloader:1,close:3,cls:[1,3],cmdline:13,cnt:[2,5,6,9,11,13],code:[0,1,3,7,9,10,11,13,15],code_cach:[4,13],codecachemanag:10,collect:[1,9],collector:[9,10],color:[1,8],com:[2,5,6,9,11,15,17,18],command:[1,2,7,8,11,12,13,15,17,18],commandprocesstask:18,commit:10,common:[2,5,15],compar:18,compil:[1,9,10,17],complet:[7,13,17],composit:6,compress:10,comput:18,concaten:8,concurr:[13,18],conemu:8,conf:10,config:[2,10],conflict:7,connect:[1,4,8,13],connector:[4,10,16,18],consol:[9,12,13],constructor:[11,16],cont:17,contain:[2,5,9,15],containerbackgroundprocessor:4,containskei:9,content:[2,10,13,17],context:[5,15],contextloadfiltervalv:18,contribut:7,conveni:6,core:[2,8,18],corpor:[10,17],cost:[0,1,2,5,6,9,10,11,13,18],count:[2,4,10,11,13],countdownlatch:18,counter:13,countri:17,coyot:18,coyoteadapt:18,cprinterjob:17,cpu:[4,7,13,17,18],cpuusag:18,cra:10,crash:[10,12],creat:10,createrequest:16,critic:8,ctrl:[4,11,13],curl:8,current:[1,3,4,8,13,15,16],cycl:11,dae:13,daemon:[4,10,13,18],dai:[1,12],dalon:10,dashb:13,dashboard:[1,3],data:[9,17,18],dataarrai:9,debug:[7,12],declar:[15,16],decompil:7,decreas:18,defaultcommandhandl:18,defaultsessionmanag:18,defin:[1,3,14],definit:14,delegatingclassload:2,delet:8,deploi:2,depth:15,describ:7,descript:12,destroyintern:16,detail:[1,7,8,13,15,16],develop:7,diagnos:8,diagnost:[0,7],diamond:2,differ:[4,7],dir:[12,17],directli:[8,15],directmetr:9,directori:[5,8],disabl:[12,15],disappear:7,disconnect:[1,13],dispatch:[13,18],displai:17,djava:10,doacquiresharedinterrupt:18,doc:[7,8],document:14,dofilt:18,doget:18,download:[8,9],dump:[1,3,4,12],dumpthreads0:18,dure:12,each:1,eagleey:[2,18],eagleeyefilt:18,easier:0,easili:0,eden:10,effect:18,either:7,empow:1,empti:15,enabl:[7,12],encod:17,encount:7,endian:17,endor:17,endors:17,english:7,enhanc:12,ensur:7,enter:13,enterpris:2,entri:8,entryset:6,environ:[7,17],error:[4,9],errorreportvalv:18,escap:13,etc:7,even:[0,6,7],ever:0,exact:12,exampl:[12,13,17],exce:12,except:[0,7,16],exec:18,exectur:13,execut:[11,13,18],exist:[7,13],exit:[1,3,4],expand:18,expect:[7,8],expert:8,expir:18,explicitli:1,ext:17,extclassload:[2,5,9,15],extend:9,extens:[10,17],extern:[1,12,14],extra:18,factori:9,fail:[11,14],failur:11,fals:[4,9,10,12,13,15,17,18],fastjson:2,fba92d3:2,field:[6,14,15],field_nam:6,file:[1,2,7,8,10,12,14,15,17],filesync:2,filter:[6,18],filterchainadapt:18,find:[7,8],findsslhostconfig:16,fly:7,folder:[13,17],follow:[8,12,13],forcedlog:9,forcibl:1,fork:7,format:[4,12,17],found:[9,13],fqcn:9,framework:[2,9],from:[0,3,4,7,15,16,18],front:1,frozen:18,full:15,garbag:10,gen:10,get:[2,6,8,9,13,18],getallowtrac:16,getasynctimeout:16,getattribut:16,getboolean:9,getcont:9,getdomainintern:16,geteffectivelevel:9,getenablelookup:16,getjsonarrai:9,getlocalport:16,getlogg:9,getmaxcookiecount:16,getnam:9,getobjectnamekeyproperti:16,getport:16,getproperti:16,getprotocol:16,getprotocolhandl:16,getresourc:[1,2],getrootlogg:9,getschem:16,getsecur:16,getservic:16,getstat:[1,3],getstr:9,getthreadcputim:18,getthreadinfo:18,github:[7,8,13,17],global:[1,8,12],gopherproxyset:17,grammar:9,grammat:9,graphicsenv:17,grasp:0,great:[1,2,12],grep:[1,8],groovi:10,group:[4,13,18],gyunabc:10,handl:18,handlecommand:18,handler:[13,18],hardli:7,hash:2,hashcod:[2,5,9,14],hashmap:9,have:[0,7,9,13,18],heap:[4,10,13],heart:8,heartbeat:4,hello:[2,10],hellodemacbook:10,help:[0,1,2,3,7,9,15,17,18],hen:10,hengyuna:10,here:[1,7],hide:15,hierarchi:7,higher:4,highlight:9,histori:1,hit:13,hk2:2,hold:18,hom:13,home:[2,4,10,12,13,17],hotspot:[10,17],hour:12,how:[1,7,18],howev:7,hsf:[2,9],http11:18,http:[4,8,9,13,17,18],httpclientutil:9,httpservlet:18,huge:2,ibrari:10,impl:18,importantli:7,imposs:7,incid:1,includ:[1,4,15],increment:13,incrementandget:13,index_not_found:15,ineffici:7,inf:[2,15],influenc:1,info:[1,3,8,10,15,17],inform:14,ing:1,inherit:[1,2],init:[1,10,16],initintern:16,inject:[1,3,11],inner:14,input:[10,13],instal:7,instanc:2,instrument:14,integ:13,interact:7,interfac:15,intern:[2,6],internaldofilt:18,interru:13,interrupt:[4,18],interruptedexcept:13,invalid:11,invcat:7,invoc:7,invok:[11,15,18],isalist:17,isannot:15,isanonymousclass:15,isarrai:15,isdis:9,isenum:15,isgreaterorequ:9,isinterfac:15,islocalclass:15,ismemberclass:15,isprimit:15,issu:[0,7],issuccess:9,issynthet:15,istraceen:9,itemlist:11,iter:6,ivi:10,jad:[1,3],jar:[2,7,8,9,10,15,17],java:[2,4,5,7,8,9,10,11,13,15,16,17,18],javac:13,javavir:13,javavirtualmachin:[2,10,17],javax:[2,18],jce:[10,17],jdk15on:10,jdk1:[2,8,10,13,17],jdk:[2,8,10,13,14,17],jenv:10,jetbrain:13,jfr:[10,17],jioendpoint:18,jmonitor:2,jmonitorcli:4,jmx:4,jnu:17,job:[1,12,13],join:9,jps:13,jre:[2,10,13,17],json:[9,12],jsonarrai:9,jsonobject:9,jsr250:2,jsse:[10,17],jul:18,just:[13,15],jvm:[3,4,7,8,9,12,14,15,17,18],jvnet:2,kei:[6,17],keymap:3,kill:1,kind:18,know:7,lang:[2,5,15,16,18],languag:17,latest:8,launcher:[2,5,9,13,15,17],lead:7,leak:7,leav:7,less:18,let:8,level:[9,12,17],lib:[2,8,9,10,15,17],libra:17,librari:[2,10,13,17],life:1,like:[4,7,14,15,18],line:[7,8,17],list:[1,2],listen:[13,18],littl:17,live:[2,10],load:[0,1,2,5,7,9,10,14,15,16],loadedcount:2,loadedcounttot:2,loader:[2,5,9,14,15],local:[7,8,10],localhost:8,locat:[1,5,8,9,12],lock:18,locksupport:18,log4j:[1,2,9],log:[1,7,8,10,12,13],logger:[1,2,9],loggerfactori:9,logic:9,logmanag:9,look:2,lot:7,lwawt:17,lwctoolkit:17,mac:[4,10,17],machin:[8,10,17],macosx:17,mai:7,main:[4,8,13,18],make:8,manag:[2,10,13,17,18],mani:7,manifest:2,manual:11,map:[6,9],marksweep:10,match:[5,9,11,12,15,16],max:[4,10,13],maximum:10,mean:[1,8],memori:[0,4,10,13],messag:[7,9,12],meta:2,metaq:2,metaspac:[4,10],method:[0,1,7,9,11,13,15,16,18],methodutil:2,metric:[2,7,9],metricmap:9,metricscontrol:9,metricurl:9,middlewar:[5,9,15],might:[9,12],minut:[4,12],misc:[2,5,9,15,18],mix:17,mock:2,mode:[7,15,16,17],model:17,modifi:[0,1,7,15,16],modul:11,moduleclassload:[2,5,9],monei:7,monitor200:18,monitor:[0,2,3,7,8,9],more:[7,8,9,13,14],mtop:2,much:0,multipl:14,name:[2,4,5,6,9,10,11,12,13,14,15,16,17,18],nativ:18,nativeid:4,natur:18,need:8,net:[2,5,9,18],network:[7,10,17],never:[7,11],nio:17,nioeventloopgroup:13,nocallstackclassload:2,node:6,nonblockinginputstreamthread:18,nonheap:[4,13],note:7,notifi:2,now:[0,8,18],nts:17,number:[4,18],numberofinst:2,oader:5,obj:9,object:[6,7,9,15,18],observ:7,occur:1,off:[12,15],ognl:[1,6],old:10,ome:17,onc:[7,11],one:[8,9,13],onli:[8,16,18],onlin:[0,1],ons:2,open:[7,8,13],oper:[10,18],opt:8,option:[3,8,17],oracl:[10,17],org:[1,2,5,9,13,15,16,18],origin:11,other:[3,18],our:13,out:[1,3,12,13,15,16],output:[1,2,5,11,12],overhead:18,overview:0,own:3,owner:13,pack:10,packag:[8,9,10],pad_limit:15,pandolet:2,pandora:[2,4,5,9],paramet:[7,16],parent:2,park:18,parkandcheckinterrupt:18,parseobject:9,pass:8,patch:17,path:[8,10,14,17],patten:15,pattern:[5,9,11,15,16],paus:[1,16],pend:10,per:7,perform:18,persist:11,petstor:[11,15],picocontain:2,pid:[8,13],pkg:17,plaintext:1,platform:17,pleas:[7,9,12,13,14,15],plugin:[2,9],pool:[4,13,18],por:8,port:8,possibl:7,postbodi:9,present:[4,16],press:[4,11,13],print:[1,2,8,12,15,16],printerjob:17,println:13,priori:13,prioriti:[4,18],privat:[9,13,15,17],privileg:13,process:[1,8,13,18],processhandl:18,processimpl:18,processor:[4,10],processtopbusythread:18,product:[0,7,17],profil:[0,1,2,3,4,10,15,16],properti:[1,6,10],protect:9,ps_eden_spac:[4,13],ps_marksweep:[4,13],ps_old_gen:[4,13],ps_scaveng:[4,13],ps_survivor_spac:[4,13],put:[1,9],qos:[2,4,5,9],qps:7,qualifi:15,question:7,quick:7,quit:[1,3,13],rate:[7,11],ratio:[4,11,18],readabl:9,readerthread:4,real:[1,2],realtim:4,receiv:4,record:1,redefin:[1,3],redefineclass:14,redirect:1,ref:18,refer:[13,14,18],referencehandl:18,reflect:2,regex:16,regular:11,regx:[5,9,11,15],relat:12,relaunchurlclassload:[2,9],releas:7,rememb:1,remot:[2,7],remov:1,report:4,repositori:[2,9],repres:12,reproduc:7,reset:[1,3],resour:17,resourc:[2,10],resourcenotfoundexcept:2,resp:9,respons:9,rest:9,restart:7,restat:7,restor:14,result:[9,12,13,18],resum:16,returnobj:13,rmi:[2,4],rocketmq:2,row:[2,5,6,9],run:[4,7,11,13,18],runnab:13,runnabl:[4,18],runtim:[4,10,13,17],runwork:18,same:[7,9,13],sampl:[11,15,18],sar:[2,9],save:[12,13],scaveng:10,screen:[1,3,11],script:[8,13],sdk:2,search:[2,8,15,16],second:[4,12,13],see:[12,13],seldom:1,select:13,selector:[4,18],sendpostrequest:9,sent:4,separ:17,server:[1,3,4,7,8,10,11,13,17,18],servic:[2,5,9,18],servlet:18,session:[1,3,18],set:1,setallowtrac:16,setasynctimeout:16,setattribut:16,setenablelookup:16,setport:16,setproperti:16,setprotocol:16,setschem:16,setsecur:16,setservic:16,seturiencod:16,sever:[9,15],shanghai:17,shell:[10,13,18],shoot:7,shortcut:3,should:[8,13,15],show:[16,18],shutdown:[1,3,13],signal:[13,18],simpl:[13,15],sinc:[2,10],singl:8,sleep:[13,18],slow:7,small:8,snapshot:[2,10,13],socketprocessor:18,socketwrapp:18,soft:2,solv:7,some:[1,7,9],sometim:7,sourc:[7,9,15],spa:2,space:10,spec:10,specif:[1,2,5,6,9,10,11,12,14,16,17,18],specifi:[1,2,5,7,8,9],spi:9,ssh:10,sso:2,stack:[1,3,7],stage:[7,12],stan:[4,10],standalon:10,standardclassload:[5,15],standardcontextvalv:18,standardenginevalv:18,standardhostvalv:18,standardwrappervalv:18,start:[7,8,10,18],startintern:16,state:[4,7,13,18],statist:[4,7],step:8,still:13,stop:[6,11,12,13],stopintern:16,store:11,stream:9,string:[2,5,9,13,15,16],stringutil:[5,15],structur:[1,2],sub:[7,12,15],success:[7,9,11],successfulli:[8,17],sudo:13,summari:17,sun:[2,5,9,15,17,18],sun_standard:17,sunrsasign:[10,17],support:[1,7,12,14,15,17,18],suppos:[6,8],survivor:10,suspend:7,sync:18,synchron:18,sysprop:[1,3],system:[1,4,7,10,12,13,17,18],systemload:4,tab:17,tair:2,take:[1,8,18],taobao:[2,5,9,15,18],target:[1,8,9,10,12,13,15],task:[11,12],taskthread:18,tbsession:2,tbxwzs4s4sbcvh7frbcc7n000000gn:17,tcp:4,tddl:[2,5],telnet:[7,8,10],termin:[1,3,11,13,18],test:[6,7,14,15,17,18],testdurexfilt:18,testthreadblock:18,than:[0,9],theori:11,thi:[4,6,7,8,12,15,17,18],think:7,thirdcontain:2,those:0,thread:[0,1,3,4,7,13],threadcommand:18,threadimpl:18,threadmxbean:18,threadpool:4,threadpoolexecutor:18,through:7,throwabl:9,thrown:7,tier:[10,17],time:[0,1,4,7,10,11,12,13,15,18],timed_:13,timed_wa:4,timed_wait:18,timeout:[4,12,13],timer:[4,13],timestamp:[11,13],timeunit:13,timezon:17,tip:[1,6,8,15,17],tmp:[8,14,17],tmpdir:17,tomcat:[2,4,5,9,15,18],tool:[7,8,10],toolkit:17,tostr:[15,16],total:[4,10,11,13,18],trace:[3,7,9,11],track:1,transform:12,travers:6,tree:2,tricki:7,trivial:9,troubl:7,troubleshoot:[0,1,13],tualmachin:13,turn:[5,9,11,12,15,16],type:[13,15],unaccept:7,unavail:7,uncent:2,under:13,understand:9,unicod:17,unicodebig:17,unitrout:2,unknown:17,unload:10,unreach:7,unsaf:[12,18],until:11,unzip:[8,13],uptim:4,url:[1,2,17],urlclassl:5,urlclassload:[2,5,9],usag:[4,7,13],use:[1,2,6,7,8,9,12],used:[4,10,13,15],useful:7,user:[2,5,7,9,10,13,15,17],using:[1,2,8,15,18],usr:[10,17],utf:17,util:[2,5,10,13,18],valid:2,valu:[0,1,6,9,11,12,13,15,17,18],valv:18,vendor:[10,17],verbos:10,veri:18,version:[1,3,4,7,8,10,13,17],via:[0,8,15],view:7,vipserv:2,virtual:[10,17],wai:[7,8],wait:18,waitin:13,wangtao:17,want:[6,15],watch:3,web:[9,11,15],websocket:[1,7,18],welcom:8,well:0,what:7,when:[1,2,3,4,7,8,9,12],whether:7,which:[0,1,7,8,15,16,18],who:7,whose:15,wiki:[13,17],wildcard:[5,9,11,15,16],wish:12,within:[4,18],without:[0,1,3,7],won:9,work:[3,7,8],worker:[13,18],would:7,wrappingrunn:18,writerthread:4,wsfilter:18,x86_64:[10,17],xbootclasspath:[8,10],yet:18,you:[0,1,2,3,6,7,8,9,12,13,15,16,18],your:[3,7],zhuyong:[5,9,15],zip:8},titles:["<no title>","Advanced Usage","classloader","Commands List","dashboard","dump","getstatic","Arthas Documentation","Arthas Install","jad","jvm","monitor","options","Quick Start","redefine","sc","sm","sysprop","thread"],titleterms:{"class":1,advanc:[1,8],all:[17,18],artha:[3,7,8,13],async:1,background:[1,7],basic:[1,3],block:18,boot:8,busiest:18,check:[13,17],classload:[1,2],collect:18,command:3,consol:1,content:7,dashboard:[4,13],demo:[4,13],detail:18,document:[7,8],dump:5,exit:13,featur:7,getstat:6,help:8,info:18,instal:8,interv:18,jad:9,jvm:[1,10],kei:7,linux:[8,13],list:[3,18],locat:18,mac:[8,13],manual:8,modifi:17,monitor:[1,11],offlin:8,option:[1,2,5,9,12,14,15,16,18],other:1,paramet:[11,18],pipe:1,present:18,profil:18,properti:[11,17],provid:18,quick:13,redefin:14,relat:[1,10],screenshot:4,singl:17,specif:[4,15],specifi:18,stack:18,start:13,sysprop:17,thread:[10,18],thread_id:18,top:18,trace:[1,18],uninstal:8,unix:[8,13],usag:[1,2,5,9,10,11,12,14,15,16,17,18],watch:[1,13],web:1,when:18,window:[8,13]}}) \ No newline at end of file +Search.setIndex({docnames:["README","advanced-use","classloader","commands","dashboard","dump","getstatic","index","install-detail","jad","jvm","monitor","options","quick-start","redefine","sc","sm","stack","start-arthas","sysprop","thread","trace","tt","watch"],envversion:55,filenames:["README.md","advanced-use.md","classloader.md","commands.md","dashboard.md","dump.md","getstatic.md","index.md","install-detail.md","jad.md","jvm.md","monitor.md","options.md","quick-start.md","redefine.md","sc.md","sm.md","stack.md","start-arthas.md","sysprop.md","thread.md","trace.md","tt.md","watch.md"],objects:{},objnames:{},objtypes:{},terms:{"005428m":21,"021204m":21,"094064m":21,"0_162":13,"0_51":19,"0_60":[2,4,10],"0ms":21,"0x42cc13a0":22,"0x48":17,"0x4a":17,"100m":[4,17,21],"103m":4,"105228m":21,"10d307f1":2,"114m":4,"1201f221":2,"12m":13,"131ef10":2,"1365m":[4,13],"13b6aecc":2,"14dad5dc":[2,9],"14m":[4,13],"155m":13,"16020s":4,"167m":4,"172m":4,"1817d444":[2,9],"1820m":[4,13],"1b6d3586":2,"1ba9117":2,"1d44eef3":15,"1f57f96d":2,"1ms":21,"2002fc1d":2,"200m":23,"20m":13,"223m":4,"226b143b":2,"22880c2b":5,"22fcf7ab":2,"2302e984":5,"23348b5d":2,"234m":4,"23m":13,"240m":[4,13],"24313fcc":2,"247bddad":2,"25s":12,"2833cc44":2,"29505d69":5,"29fafb28":20,"2bdd9114":[5,9],"2f8dad04":2,"2ms":21,"31a6493":20,"3232a28a":2,"327a647b":14,"328b3a05":2,"32m":13,"334e6bb8":2,"341532m":21,"39m":4,"3bbaa1b8":2,"3d5c822d":2,"4009e306":2,"40b2f45f":17,"41a2befb":2,"41e1e210":2,"429bffaa":2,"46m":4,"47m":4,"4944252c":2,"4988d8b8":2,"4b8ee4d":2,"4c0df5f8":9,"4d0f2471":2,"4fa2d7e6":2,"4ms":21,"522400c2":2,"53448f87":22,"53f65459":2,"544dc9ba":5,"546aeec1":20,"548a102f":2,"563e97f3":23,"57a462c9":15,"59m":4,"5e255d0b":2,"5ffe9775":2,"609cd4d8":2,"65m":13,"668m":4,"672m":13,"6913c1fb":2,"6951a712":[5,9,15],"696da30b":2,"69ba0f27":20,"69dcaba4":9,"6cd0b6f8":20,"6e51ad67":[5,9],"6fafc4c2":[5,9],"7127ee12":20,"725be470":20,"72cda8e":2,"73f44f24":2,"765544m":21,"79d8407f":2,"7a419da4":2,"7c9d8e2":2,"7d51e4a8":23,"7e5afaa6":2,"7ec7ffd3":2,"847106m":21,"85m":13,"866586m":21,"\u4e2d\u6587\u6587\u6863":7,"abstract":23,"boolean":[9,16,23],"byte":[1,9],"case":7,"catch":21,"class":[0,2,3,5,6,7,9,10,11,12,13,14,15,16,17,19,21,22,23],"default":[1,5,9,11,12,15,16,17,18,20,21,23],"enum":6,"final":[9,10,13,15,20],"function":13,"import":[9,13],"instanceof":22,"int":[13,15,21,23],"long":23,"new":[1,9,13,14,20,21,23],"null":[2,9,23],"public":[9,13,15,16,21,23],"return":[0,1,7,9,11,13,16,18,21,22],"static":[1,6,9,13,15,21,23],"super":[9,15],"switch":[2,12,18],"throw":[13,21,22],"true":[4,9,12,13,15,17,19,20,21,22],"try":[0,8,13,21],"var":19,"void":[9,13,21,23],"while":[5,9,11,13,15,16,17,21,22,23],And:7,But:8,DOS:13,For:[8,12,13],IDE:7,QPS:4,That:7,The:[8,17,18],There:23,Useful:7,Using:[1,2,20,22],With:[0,22,23],_162:13,a38d7a3:[2,9],aaa:[6,15,23],abbrevi:[15,16,22],abnorm:23,abort:[11,13,17,21,22,23],abov:[7,8],absolut:[8,14],abstractcommandhandl:20,abstractconnectionhandl:[20,23],abstracthttp11processor:[20,23],abstractmoduleeventadapt:23,abstractprotocol:[20,23],abstractqueuedsynchron:20,abstractwebxrootcontrol:[17,23],acceptor:4,access:[6,18,20],accur:21,accuraci:21,achiev:6,acl:2,acquiresharedinterrupt:20,action:[20,22,23],activ:10,ad5428f1:23,adapt:[17,23],adataarrai:9,add:[8,18,21,23],addal:[21,23],adding:[7,14],addit:7,address:[18,22],admin:[12,13,18],advanc:[7,13,17,21,22,23],advantag:1,affect:[1,2,3,5,6,9,10,11,13,17,21,22,23],after:[12,18,20,22],agent:[2,8],agentlaunch:2,aggreg:21,aging:10,air:10,ali:4,alibaba:[2,6,7,8,11,13,17,19,21,23],alimonitor:2,aliwebappclassload:[5,15],all:[0,1,2,3,7,8,10,12,15,16,23],allow:18,along:15,also:[1,3,8],alwai:17,amount:22,analyz:[0,1],analyzeurlvalv:[17,23],ancestor:16,ani:[8,11,14,17,21,23],annot:[2,15,16],annotatedcommandimpl:20,anoth:[8,17,20],answer:7,aop:1,apach:[1,5,9,15,16,18,20,23],apart:0,api:[2,19],appclassload:[2,5,9,15],applic:[7,12],applicationfilterchain:[20,23],arch:[10,19],area:3,arg:[13,21],argument:[0,1,8,10],arrai:9,arraylist:[6,21,23],artha:[0,1,2,4,6,9,11,12,17,19,20,21,22,23],arthas_histori:8,arthasclassload:2,arthasserv:20,ash:10,asia:19,ask:8,asm:12,asmclassload:2,aspect:23,assist:[0,3,9],asyncappend:13,asynctimeout:4,atom:13,atomicinteg:13,attach:[1,8,13,18,20],attent:[1,17,20,21],authent:20,authenticatorbas:20,auto:[7,19],automat:[11,22],aux:8,avail:8,averag:[4,10,11],avoid:22,await:20,awt:19,b03:19,b16:19,b23:10,back:[1,12],background:11,base:[2,22],basic:20,bat:[8,13,18],batch:[1,12],bbb:[6,23],bcpkix:10,bcprov:10,becaus:7,becom:[11,21],befor:[0,12],behavior:11,behind:9,being:[11,17,22],besid:7,better:[1,8,9,20],bin:[5,8,10,18],bind:23,bio:[4,17,20],bit:[10,19],biz:[21,23],block:23,booleanvalu:9,boot:[2,9,10,13,17,19,21],bootstrap:18,bootstrapclassload:2,born:7,both:7,brari:10,bring:1,browser:7,buc:2,bug:19,buglevel:19,bugreport:19,build:5,busi:[0,4,7,20],bytecod:5,cach:10,calcul:23,call:[1,7,11,17,21],can:[0,2,3,6,7,8,12,13,14,15,16,17,18,20,21,22,23],cannot:[8,13,14],catalina:[5,15,16,18,20,23],categor:2,categori:[9,10],categoris:2,categorydao:21,caus:21,caution:[2,12],cdi:2,ces:19,cglib:[17,23],cgraphicsenviron:19,chang:[7,11,19],charact:13,charset:[10,19],check:[0,1,2,3,6,7,8,10,15,16,20],checkcsrftokenvalv:[17,23],checkthread:4,child:12,chines:7,choos:[13,18],choosevalv:[17,23],citru:[15,17,21,23],class_nam:6,classdump:5,classload:[3,5,7,9],clazz:9,clear:[1,3],cli:10,client:[1,2,3,5],cloader:1,close:3,cls:[1,3],clue:21,cmdline:13,cnt:[2,5,6,9,11,13,17,21,22,23],code:[0,1,3,7,9,10,11,13,15],code_cach:[4,13],codecachemanag:10,collect:[1,9],collector:[9,10],color:[1,8],com:[2,5,6,9,11,15,17,19,20,21,22,23],come:22,command:[1,2,7,8,11,12,13,15,18,19,20,22,23],commandprocesstask:20,commerci:21,commit:10,common:[2,5,15],compar:[20,23],compil:[1,9,10,19],complet:[7,13,19],complex:22,complic:23,composit:6,compress:10,comput:20,concaten:8,concurr:[13,20,22,23],condit:[17,21],conemu:8,conf:10,config:[2,10],conflict:7,connect:[1,4,8,13,18],connector:[4,10,16,20,23],consid:21,consol:[9,12,13],constructor:[11,16],cont:19,contain:[2,5,9,15,17,23],containerbackgroundprocessor:4,containskei:9,content:[2,10,13,19],context:[5,15,21],contextloadfiltervalv:[20,23],contribut:7,conveni:6,core:[2,8,20,23],corpor:[10,19],cost:[0,1,2,5,6,9,10,11,13,17,20,21,22],count:[2,4,10,11,13,21],countdownlatch:20,counter:13,countri:19,coyot:[20,23],coyoteadapt:[20,23],cprinterjob:19,cpu:[4,7,13,19,20],cpuusag:20,cra:10,crash:[10,12],creat:[10,22],createrequest:16,critic:[8,17,21,22,23],ctrl:[4,11,13,17,21,22,23],curl:8,current:[1,3,4,8,13,15,16,17,23],cycl:11,dae:13,daemon:[4,10,13,20],dai:[1,12],dal:[17,21,23],dalon:10,dao:[17,21],dashb:13,dashboard:[1,3],data:[9,19,20,23],dataarrai:9,databindingadapt:17,dataobject:21,debug:[7,12],declar:[15,16],decompil:7,decreas:20,deeper:21,defaultcommandhandl:[20,22],defaultsessionmanag:20,defin:[1,3,14],definit:14,delegatingclassload:2,delegatingmethodaccessorimpl:22,delet:[8,23],demo:[21,23],deploi:2,depth:[15,23],describ:7,descript:12,destroyintern:16,detail:[1,7,8,13,15,16],determin:23,develop:[7,18],diagnos:8,diagnost:[0,7],diamond:2,differ:[4,7,22,23],difficulti:22,dir:[12,19],directli:[8,15],directmetr:9,directori:[5,8],disabl:[12,15],disappear:7,disconnect:[1,13],dispatch:[13,20],displai:19,djava:10,doacquiresharedinterrupt:20,doc:[7,8],document:14,dofilt:[20,23],doget:20,domain:23,doregist:23,dorun:23,down:21,download:[8,9],due:22,dump:[1,3,4,12],dumpthreads0:20,dure:12,each:[1,18,21,22],eagleey:[2,20],eagleeyefilt:20,easier:0,easili:[0,23],eden:10,effect:[20,22],either:7,embed:[17,21],empow:1,empti:15,enabl:[7,12],enablewebconsoleappsmapp:23,encod:19,encount:[7,23],end:22,endian:19,endor:19,endors:19,english:7,enhanc:12,ensur:7,enter:13,enterpris:2,entri:8,entryset:6,environ:[7,19],equal:23,equival:18,error:[4,9],errorreportvalv:[20,23],escap:13,etc:7,even:[0,6,7,22],ever:0,exact:12,exampl:[12,13,18,19],exce:12,except:[0,7,16,21,22],exec:[17,20,21],exectur:13,execut:[11,13,17,18,20,21,22,23],executeandreturn:[17,23],executecommand:22,exist:[7,13,18],exit:[1,3,4],exp:22,expand:20,expect:[7,8],expert:8,expir:20,explicitli:1,express:[17,21],ext:19,extclassload:[2,5,9,15],extend:9,extens:[10,19],extern:[1,12,14],extra:[20,22],fact:22,factori:9,fail:[11,14],failur:11,fals:[4,9,10,12,13,15,19,20,22,23],fastclassbycglib:[17,23],fastjson:2,fastmethod:[17,23],fba92d3:2,feasibl:22,field:[6,14,15,17,21,22,23],field_nam:[6,23],file:[1,2,7,8,10,12,14,15,19],filesync:2,filter:[6,17,20,21],filterbean:23,filterchainadapt:20,find:[7,8],findsslhostconfig:16,first:23,fly:7,folder:[13,19],follow:[8,12,13,18],forcedlog:9,forcibl:1,fork:7,format:[4,12,19],found:[9,13,18],four:23,fqcn:9,fragment:22,framework:[2,9],from:[0,3,4,7,15,16,20,22],front:1,frozen:20,full:[15,17],gamethod:22,gaognlutilstest:22,garbag:10,gaserv:22,gen:10,gener:[17,23],get:[2,6,8,9,13,20],getallowtrac:16,getallproductitem:21,getappnameandidbyempid:23,getasynctimeout:16,getattribut:16,getboolean:9,getcategorybyid:21,getcategoryid:21,getcont:9,getdomainintern:16,geteffectivelevel:9,getenablelookup:16,getjsonarrai:9,getlocalport:16,getlogg:9,getmaxcookiecount:16,getnam:9,getobjectnamekeyproperti:16,getport:16,getproductbyid:[17,21],getproperti:16,getprotocol:16,getprotocolhandl:16,getresourc:[1,2],getrootlogg:9,getschem:16,getsecur:16,getservic:16,getstat:[1,3],getstr:9,getthreadcputim:20,getthreadinfo:20,git:18,github:[7,8,13,19,22],global:[1,8,12],gmt:22,gopherproxyset:19,grammar:9,grammat:9,graphicsenv:19,grasp:0,great:[1,2,12,17],grep:[1,8],groovi:10,group:[4,13,20],guid:[17,21,22,23],gyunabc:10,handl:20,handlecommand:20,handler:[13,20],handlerequest:[17,23],happen:22,hard:22,hardcodedtarget:23,hardli:7,has:18,hash:2,hashcod:[2,5,9,14,22,23],hashmap:9,have:[0,7,9,13,20],heap:[4,10,13],heart:8,heartbeat:4,hehe:21,hello:[2,10,23],hellodemacbook:10,help:[0,1,2,3,7,9,15,17,19,20,21,22,23],hen:10,hengyuna:10,here:[1,7,21],hide:15,hierarchi:7,higher:[4,17,21],highlight:9,histori:1,hit:[13,18],hk2:2,hold:20,hom:13,home:[2,4,10,12,13,19],hotspot:[10,19],hour:12,how:[1,7,17,20],howev:7,hsf:[2,9],http11:[20,23],http:[4,8,9,13,17,19,20,21,23],httpclientutil:9,httpservlet:20,huge:2,ibati:[17,23],ibatisproductdao:17,ibrari:10,idea:18,ignor:21,impl:[17,20,23],importantli:7,imposs:7,incid:1,includ:[1,4,15,23],increment:13,incrementandget:13,index:22,index_not_found:15,indic:21,ineffici:7,inf:[2,15],influenc:1,info:[1,3,8,10,15,19,22],inform:14,ing:1,inherit:[1,2],init:[1,10,16,22],initintern:16,inject:[1,3,11],inner:14,input:[10,13],insert:23,instal:7,instanc:2,instead:[17,21,22,23],instruct:21,instrument:14,integ:[13,22,23],interact:7,interf:18,interfac:15,intern:[2,6],internaldofilt:[20,23],interru:13,interrupt:[4,20],interruptedexcept:13,invalid:11,invcat:7,invoc:7,invok:[11,15,17,20,21,22,23],invoke0:22,invokebodi:[17,23],invokenext:[17,23],is_daemon:[17,21],isalist:19,isannot:15,isanonymousclass:15,isarrai:15,isblank:[17,21],isdis:9,isempti:23,isenum:15,isgreaterorequ:9,isinterfac:15,islocalclass:15,ismemberclass:15,isprimit:15,issu:[0,7,21,22],issuccess:9,issynthet:15,istraceen:9,itemlist:[11,17,21,23],iter:6,its:22,itself:[21,23],ivi:10,jad:[1,3],jar:[2,7,8,9,10,15,19],java:[2,4,5,7,8,9,10,11,13,15,16,17,18,19,20,21,22,23],javac:13,javavir:13,javavirtualmachin:[2,10,19],javax:[2,20],jce:[10,19],jdk15on:10,jdk1:[2,8,10,13,19],jdk:[2,8,10,13,14,19],jenv:10,jetbrain:[13,18],jfr:[10,19],jioendpoint:20,jmonitor:2,jmonitorcli:4,jmx:4,jnu:19,job:[1,12,13],join:9,jprofil:21,jps:13,jre:[2,10,13,19],json:[9,12],jsonarrai:9,jsonobject:9,jsr250:2,jsse:[10,19],jul:20,just:[13,15,21],jvm:[3,4,7,8,9,12,14,15,19,20],jvnet:2,kei:[6,19],keymap:3,kill:1,kind:20,know:[7,17],lang:[2,5,15,16,20,21,22,23],languag:19,later:22,latest:8,launcher:[2,5,9,13,15,19],lead:7,leak:7,leav:7,len:[21,23],length:[21,22],less:[20,23],let:[8,22],level:[9,12,19,21],lib:[2,8,9,10,15,19],libra:19,librari:[2,10,13,19],life:1,like:[4,7,14,15,20,21],limit:22,line:[7,8,19,21],list2:[21,23],list:[1,2,21,23],listen:[13,18,20],listfavapp:23,littl:[19,22],live:[2,10],load:[0,1,2,5,7,9,10,14,15,16],loadedcount:2,loadedcounttot:2,loader:[2,5,9,14,15],local:[7,8,10,22],localhost:8,locat:[1,5,8,9,12,17,21,22],lock:20,locksupport:20,log4j:[1,2,9],log:[1,7,8,10,12,13],logger:[1,2,9],loggerfactori:9,logic:9,logmanag:9,look:2,loopvalv:[17,23],loss:22,lot:7,lurk:21,lwawt:19,lwctoolkit:19,mac:[4,10,19],machin:[8,10,19],macosx:19,mai:7,main:[4,8,13,20,21,22],make:[8,18,23],manag:[2,10,13,19,20],mani:[7,22],manifest:2,manual:11,map:[6,9,23],mapper:23,mapperproxi:23,marksweep:10,match:[5,9,11,12,15,16,17,21,23],maven:18,max:[4,10,13,21],maximum:10,mean:[1,8,21],memori:[0,4,10,13],messag:[7,9,12],meta:2,metaq:2,metaspac:[4,10],method:[0,1,7,9,11,13,15,16,17,20,21,23],methodinvok:[17,23],methodutil:2,metric:[2,7,9],metricmap:9,metricscontrol:9,metricurl:9,middlewar:[5,9,15],might:[9,12,22],min:21,minut:[4,12],misc:[2,5,9,15,20],mix:19,mobil:22,mock:2,mode:[7,15,16,19],model:19,modif:22,modifi:[0,1,7,15,16,22,23],modul:[11,17,21,23],moduleclassload:[2,5,9],moduleload:[17,23],monei:7,monitor200:20,monitor:[0,2,3,7,8,9,23],more:[7,8,9,13,14,21],most:[17,23],mtop:2,much:[0,21],multipl:[14,18],myappscontrol:23,myfavappsdo:23,myfavappsmapp:23,myfavoriteapp:23,name:[2,4,5,6,9,10,11,12,13,14,15,16,17,19,20,21,22,23],nativ:[20,22,23],nativeid:4,nativemethodaccessorimpl:22,natur:20,need:[8,18],net:[2,5,9,17,20,23],network:[7,10,19],never:[7,11],nio:[17,19,21],nioendpoint:23,nioeventloopgroup:13,nocallstackclassload:2,node:6,nonblockinginputstreamthread:20,nonheap:[4,13],normal:[22,23],note:7,noth:23,notifi:2,now:[0,8,20,21,22],nts:19,nullpointerexcept:23,number:[4,20,22],numberofinst:2,oader:5,obj:9,object:[6,7,9,15,20,22],observ:7,occur:1,off:[12,15,23],offici:[17,21,22,23],ognl:[1,6,17,21,22,23],old:10,ome:19,ompc:22,onc:[7,11,22],one:[8,9,13,18,21],onli:[8,16,17,18,20,21,22],onlin:[0,1],ons:2,open:[7,8,13],oper:[10,18,20],opt:8,option:[3,8,19,22],oracl:[10,19],order:23,org:[1,2,5,9,13,15,16,18,20,23],origin:[11,22],other:[3,18,20,23],our:13,out:[1,3,12,13,15,16,17],output:[1,2,5,11,12,23],overflow:22,overhead:[20,21],overview:0,own:3,owner:13,pack:10,packag:[8,9,10],pad_limit:15,pageauthorizationvalv:[17,23],pandolet:2,pandora:[2,4,5,9,17,21],param:[17,21,22,23],paramet:[7,16,22],parent:2,park:20,parkandcheckinterrupt:20,parseobject:9,pass:8,patch:19,path:[8,10,14,19],patten:15,pattern:[5,9,11,15,16,17,21,23],paus:[1,16],pend:10,per:7,perform:[20,21],performactionvalv:[17,23],performscreenmodul:17,performscreenvalv:17,permiss:18,persist:11,petstor:[11,15,17,21,23],picocontain:2,pid:[8,13,18],pipelin:[17,23],pipelinecontextimpl:[17,23],pipelineimpl:[17,23],pkg:19,plai:22,plaintext:1,platform:19,pleas:[7,9,12,13,14,15,18],plugin:[2,9],point:23,pool:[4,13,20],por:8,port:[8,18],possibl:7,postbodi:9,potenti:22,power:22,prepareforturbinevalv:[17,23],present:[4,16,21],press:[4,11,13,17,21,22,23],previou:23,print:[1,2,8,12,15,16,17,21,22,23],printaddress:22,printerjob:19,println:13,printstacktrac:21,priori:13,prioriti:[4,17,20,21],privat:[9,13,15,19,21,23],privileg:13,process:[1,8,13,18,20,22,23],processhandl:20,processimpl:20,processor:[4,10],processtopbusythread:20,product:[0,7,19,21],productdao:[17,21],profil:[0,1,2,3,4,10,15,16],properti:[1,6,10],protect:9,proxy131:23,proxy132:23,proxy135:23,ps_eden_spac:[4,13],ps_marksweep:[4,13],ps_old_gen:[4,13],ps_scaveng:[4,13],ps_survivor_spac:[4,13],put:[1,9,21],qos:[2,4,5,9],qps:7,qualifi:15,question:7,quick:7,quit:[1,3,13,22],quot:17,rate:[7,11],ratio:[4,11,20],reach:22,readabl:9,readerthread:4,real:[1,2],realtim:4,receiv:4,record:1,redefin:[1,3],redefineclass:14,redirect:1,ref:20,refer:[13,14,20,22],referencehandl:20,reflect:[2,17,22,23],regex:16,regist:23,registeract:23,regular:11,regx:[5,9,11,15,17,21,23],relat:12,relaunchurlclassload:[2,9],releas:7,rememb:1,remot:[2,7],remotemavenserv:18,remov:1,replai:22,report:4,repositori:[2,9],repres:12,reproduc:7,reset:[1,3],resour:19,resourc:[2,10],resourcenotfoundexcept:2,resp:9,respons:9,rest:[9,23],restart:7,restat:7,restor:14,result:[9,12,13,20,23],resum:16,ret:22,returnobj:[13,17,21,23],rmi:[2,4],rocketmq:2,row:[2,5,6,9,22],rule:17,run:[4,7,11,13,20,22,23],runnab:13,runnabl:[4,20],runtim:[4,10,13,19],runtimeexcept:[21,22],runwork:[20,22,23],same:[7,9,13,21],sampl:[11,15,17,20,21,23],sar:[2,9],save:[12,13],scaveng:10,scenario:23,screen:[1,3,11,17,21,23],script:[8,13,18],sdk:2,search:[2,8,15,16],second:[4,12,13],see:[12,13],seldom:1,select:13,selector:[4,20],sendpostrequest:9,sent:4,separ:19,server:[1,3,4,7,8,10,11,13,18,19,20,22],servic:[2,5,9,17,20,23],servlet:[20,23],session:[1,3,20],set:1,setallowtrac:16,setasynctimeout:16,setattribut:16,setenablelookup:16,setloggingcontextfilt:23,setloggingcontextvalv:[17,23],setport:16,setproperti:16,setprotocol:16,setschem:16,setsecur:16,setservic:16,seturiencod:16,sever:[9,15],shanghai:19,shell:[10,13,20],shoot:7,shortcut:3,should:[8,13,15],show:[16,20],shutdown:[1,3,13],signal:[13,20],simpl:[13,15],simultan:18,sinc:[2,10,22,23],singl:8,size:[21,23],sleep:[13,20],slow:7,small:8,snapshot:[2,10,13],socketprocessor:[20,23],socketwrapp:20,soft:2,softwar:21,solv:7,some:[1,7,9,21,22],sometim:7,sourc:[7,9,15,17,22],spa:2,space:10,spec:10,special:[17,21,22,23],specif:[1,2,5,6,9,10,11,12,14,16,17,19,20,21,22],specifi:[1,2,5,7,8,9,18,21,23],spi:9,ssh:10,sso:2,stack:[1,3,7,21,22],stage:[7,12],stan:[4,10],stand:23,standalon:10,standardclassload:[5,15],standardcontextvalv:[20,23],standardenginevalv:[20,23],standardhostvalv:[20,23],standardwrappervalv:[20,23],start:[7,8,10,20],startintern:16,startup:18,state:[4,7,13,20],statist:[4,7],step:8,still:13,stop:[6,11,12,13,22],stopintern:16,store:[11,17,21,22,23],storemanag:21,stream:9,string:[2,5,9,13,15,16,21,23],stringutil:[5,15,17,21],structur:[1,2],sub:[7,12,15],success:[7,9,11,22],successfulli:[8,19],sudo:13,suffici:18,summari:19,sun:[2,5,9,15,19,20,22],sun_standard:19,sunrsasign:[10,19],support:[1,7,12,14,15,17,19,20,21,23],suppos:[6,8],sure:18,survivor:10,suspend:7,sync:20,synchron:20,sysprop:[1,3],system:[1,4,7,10,12,13,19,20],systemload:4,tab:19,tair:2,take:[1,8,20,23],taobao:[2,5,9,15,17,20,21,23],target:[1,8,9,10,12,13,15,18],task:[11,12],taskthread:[20,23],tbsession:2,tbxwzs4s4sbcvh7frbcc7n000000gn:19,tccl:[17,21],tcp:4,tddl:[2,5],telnet:[7,8,10,18],termin:[1,3,11,13,20],test:[6,7,14,15,19,20,22],testadd:23,testdurexfilt:20,testthreadblock:20,than:[0,9,17,21,23],thei:23,them:23,theori:11,thi:[4,6,7,8,12,15,19,20],think:7,thirdcontain:2,those:0,thread:[0,1,3,4,7,13,22,23],thread_id:17,thread_nam:[17,21],threadcommand:20,threadimpl:20,threadmxbean:20,threadpool:4,threadpoolexecutor:[20,22,23],three:23,through:7,throwabl:[9,21],throwexp:23,thrown:7,tier:[10,19],time:[0,1,4,7,10,11,12,13,15,17,20,21],timed_:13,timed_wa:4,timed_wait:20,timeout:[4,12,13],timer:[4,13],timestamp:[11,13,22],timetunnel:22,timetunnelcommand:22,timeunit:13,timezon:19,tip:[1,6,8,15,19,22],tmp:[8,14,19],tmpdir:19,tomcat:[2,4,5,9,15,17,20,21,23],tomcatembeddedwebappclassload:[17,21],too:22,tool:[7,8,10],toolkit:19,tostr:[15,16,23],total:[4,10,11,13,20,21],trace:[3,7,9,11,17],track:[1,21],transform:12,travers:6,tree:2,tricki:7,trivial:9,troubl:7,troubleshoot:[0,1,13,21],tualmachin:13,turbin:[17,21,23],turn:[5,9,11,12,15,16,17,21,23],type:[13,15,17,22,23],unaccept:7,unavail:7,uncent:2,under:13,understand:9,unicod:19,unicodebig:19,unitrout:2,unknown:[19,22],unload:10,unreach:7,unsaf:[12,20],until:11,unzip:[8,13],uptim:4,url:[1,2,19,23],urlclassl:5,urlclassload:[2,5,9],usag:[4,7,13],use:[1,2,6,7,8,9,12,17,18,23],used:[4,10,13,15,17,21],useful:7,user:[2,5,7,9,10,13,15,18,19,23],usermanagerimpl:23,using:[1,2,8,15,17,20,21,22,23],usr:[10,19],utf:19,util:[2,5,10,13,20,21,22,23],valid:[2,17,21,23],valu:[0,1,6,9,11,12,13,15,18,19,20,22],valv:[17,20,23],variabl:[22,23],vendor:[10,19],verbos:10,veri:20,version:[1,3,4,7,8,10,13,19],via:[0,8,15],view:7,vipserv:2,virtual:[10,19],wai:[7,8,22],wait:20,waitin:13,wangtao:19,want:[6,15],watch:[3,17,21,22],web:[9,11,15,17,21,23],websocket:[1,7,20],webx:[17,23],webxcontrollerimpl:[17,23],webxframeworkfilt:23,webxrootcontrollerimpl:[17,23],welcom:8,well:0,what:7,when:[1,2,3,4,7,8,9,12,23],whether:7,which:[0,1,7,8,15,16,20,21,23],who:7,whole:[17,22],whose:15,wiki:[13,19],wildcard:[5,9,11,15,16,17,21,23],wish:12,within:[4,17,20],without:[0,1,3,7,18,22],won:9,work:[3,7,8],worker:[13,20,22,23],wors:21,would:7,wrappingrunn:[20,23],writerthread:4,wsfilter:20,x86_64:[10,19],xbootclasspath:[8,10],xxx:21,yet:20,you:[0,1,2,3,6,7,8,9,12,13,15,16,17,18,20,21,22,23],your:[3,7],yyi:21,zero:21,zhuyong:[5,9,15],zip:8},titles:["<no title>","Advanced Usage","classloader","Commands List","dashboard","dump","getstatic","Arthas Documentation","Arthas Install","jad","jvm","monitor","options","Quick Start","redefine","sc","sm","stack","Start Arthas","sysprop","thread","trace","tt","watch"],titleterms:{"class":1,"return":23,Using:23,advanc:[1,8],after:23,all:[19,20],artha:[3,7,8,13,18],async:1,background:[1,7],base:23,basic:[1,3],befor:23,block:20,boot:8,busiest:20,call:[22,23],check:[13,19,22,23],classload:[1,2],collect:20,command:3,condit:[22,23],consol:1,content:7,context:22,cost:23,dashboard:[4,13],demo:[4,13],descript:18,detail:[20,23],diagnosi:18,document:[7,8],dump:5,except:23,exit:13,express:[22,23],featur:7,filter:23,getstat:6,global:23,help:8,info:20,instal:8,interact:18,interv:20,jad:9,jvm:[1,10],kei:7,linux:[8,13],list:[3,20],locat:[20,23],mac:[8,13],manual:8,method:22,mode:18,modifi:19,monitor:[1,11],more:23,non:18,object:23,offlin:8,option:[1,2,5,9,12,14,15,16,20,23],other:1,out:23,paramet:[11,17,18,20,21,23],parametersand:23,pipe:1,present:20,produc:22,profil:20,properti:[11,19,22,23],provid:20,quick:13,rang:22,record:22,redefin:14,relat:[1,10],remot:18,same:23,sampl:18,screenshot:4,search:22,singl:19,specif:[4,15,23],specifi:[20,22],stack:[17,20],start:[13,18],sudo:18,support:18,sysprop:19,target:23,thread:[10,20],thread_id:20,time:[22,23],top:20,trace:[1,20,21],uninstal:8,unix:[8,13],usag:[1,2,5,9,10,11,12,14,15,16,17,19,20,21,22,23],valu:23,watch:[1,13,23],web:1,when:20,window:[8,13,18]}}) \ No newline at end of file diff --git a/en/sm.html b/en/sm.html index a82ea2c64..ef03edcc5 100644 --- a/en/sm.html +++ b/en/sm.html @@ -109,10 +109,10 @@
  • classloader
  • redefine
  • monitor
  • -
  • watch
  • -
  • trace
  • -
  • stack
  • -
  • tt
  • +
  • watch
  • +
  • trace
  • +
  • stack
  • +
  • tt
  • options
  • Arthas Basic Commands
  • diff --git a/en/stack.html b/en/stack.html new file mode 100644 index 000000000..75decf51a --- /dev/null +++ b/en/stack.html @@ -0,0 +1,419 @@ + + + + + + + + + + + stack — Arthas 3.0.5-SNAPSHOT documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    stack

    +

    Print out the full call stack trace containing the current method.

    +

    Most of the time, we know the method being invoked but not always we know HOW being invoked; stack can be a great help to locate the source for you.

    +
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameSpecification
    class-patternpattern for the class name
    method-patternpattern for the method name
    condition-expresscondition expression
    [E]turn on regx matching while the default is wildcards matching
    [n:]calling times

    F.Y.I

    +
      +
    1. any valid OGNL expression as "{params,returnObj}" supported;
    2. +
    3. filter by time cost as trace *StringUtils isBlank '$cost>100'; calling stack with only time cost higher than 100ms will be printed.
    4. +
    +

    Attention:

    +
      +
    1. $cost can be used in watch/stack/trace;
    2. +
    3. using #cost in Arthas 3.0 instead of $cost.
    4. +
    +

    Advanced:

    + +
    +
    +

    Usage

    +

    The quoting rules: if there are quotes within the expression, use another type of quotes to quote the whole expression.

    +
    $ stack com.alibaba.sample.petstore.dal.dao.ProductDao getProductById 'params[0]=="K9-BD-01"'
    +Press Ctrl+C to abort.
    +Affect(class-cnt:1 , method-cnt:1) cost in 51 ms.
    +thread_name="http-bio-8080-exec-4" thread_id=0x4a;is_daemon=true;priority=5;
    +    @com.alibaba.sample.petstore.dal.dao.ibatis.IbatisProductDao.getProductById()
    +        at com.alibaba.sample.petstore.web.store.module.screen.ItemList.execute(ItemList.java:50)
    +        at com.alibaba.sample.petstore.web.store.module.screen.ItemList$$FastClassByCGLIB$$40b2f45f.invoke(<generated>:-1)
    +        at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
    +        at com.alibaba.citrus.service.moduleloader.impl.adapter.MethodInvoker.invoke(MethodInvoker.java:70)
    +        at com.alibaba.citrus.service.moduleloader.impl.adapter.DataBindingAdapter.executeAndReturn(DataBindingAdapter.java:41)
    +        at com.alibaba.citrus.turbine.pipeline.valve.PerformScreenValve.performScreenModule(PerformScreenValve.java:111)
    +        at com.alibaba.citrus.turbine.pipeline.valve.PerformScreenValve.invoke(PerformScreenValve.java:74)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157)
    +        at com.alibaba.citrus.turbine.pipeline.valve.PerformActionValve.invoke(PerformActionValve.java:73)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invoke(PipelineImpl.java:210)
    +......
    +
    +thread_name="http-bio-8080-exec-2" thread_id=0x48;is_daemon=true;priority=5;
    +    @com.alibaba.sample.petstore.dal.dao.ibatis.IbatisProductDao.getProductById()
    +        at com.alibaba.sample.petstore.web.store.module.screen.ItemList.execute(ItemList.java:50)
    +        at com.alibaba.sample.petstore.web.store.module.screen.ItemList$$FastClassByCGLIB$$40b2f45f.invoke(<generated>:-1)
    +        at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
    +        at com.alibaba.citrus.service.moduleloader.impl.adapter.MethodInvoker.invoke(MethodInvoker.java:70)
    +        at com.alibaba.citrus.service.moduleloader.impl.adapter.DataBindingAdapter.executeAndReturn(DataBindingAdapter.java:41)
    +        at com.alibaba.citrus.turbine.pipeline.valve.PerformScreenValve.performScreenModule(PerformScreenValve.java:111)
    +        at com.alibaba.citrus.turbine.pipeline.valve.PerformScreenValve.invoke(PerformScreenValve.java:74)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157)
    +        at com.alibaba.citrus.turbine.pipeline.valve.PerformActionValve.invoke(PerformActionValve.java:73)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invoke(PipelineImpl.java:210)
    +        at com.alibaba.citrus.service.pipeline.impl.valve.ChooseValve.invoke(ChooseValve.java:98)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157)
    +......
    +
    +
    +

    Filtering by time cost:

    +
    $ stack com.alibaba.sample.petstore.web.store.module.screen.ItemList execute #cost>30
    +Press Ctrl+C to abort.
    +Affect(class-cnt:1 , method-cnt:1) cost in 123 ms.
    +stack com.alibaba.sample.petstore.web.store.module.screen.ItemList execute #cost>30
    +thread_name=http-nio-8080-exec-10;id=31;is_daemon=true;priority=5;TCCL=com.taobao.pandora.boot.embedded.tomcat.TomcatEmbeddedWebappClassLoader
    +    @com.alibaba.sample.petstore.web.store.module.screen.ItemList.execute()
    +        at com.alibaba.sample.petstore.web.store.module.screen.ItemList$$FastClassByCGLIB$$40b2f45f.invoke(<generated>:-1)
    +        at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
    +        at com.alibaba.citrus.service.moduleloader.impl.adapter.MethodInvoker.invoke(MethodInvoker.java:70)
    +        at com.alibaba.citrus.service.moduleloader.impl.adapter.DataBindingAdapter.executeAndReturn(DataBindingAdapter.java:41)
    +        at com.alibaba.citrus.turbine.pipeline.valve.PerformScreenValve.performScreenModule(PerformScreenValve.java:111)
    +        at com.alibaba.citrus.turbine.pipeline.valve.PerformScreenValve.invoke(PerformScreenValve.java:74)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157)
    +        at com.alibaba.citrus.turbine.pipeline.valve.PerformActionValve.invoke(PerformActionValve.java:73)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invoke(PipelineImpl.java:210)
    +        at com.alibaba.citrus.service.pipeline.impl.valve.ChooseValve.invoke(ChooseValve.java:98)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invoke(PipelineImpl.java:210)
    +        at com.alibaba.citrus.service.pipeline.impl.valve.LoopValve.invokeBody(LoopValve.java:105)
    +        at com.alibaba.citrus.service.pipeline.impl.valve.LoopValve.invoke(LoopValve.java:83)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157)
    +        at com.alibaba.citrus.turbine.pipeline.valve.PageAuthorizationValve.invoke(PageAuthorizationValve.java:105)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157)
    +        at com.alibaba.citrus.turbine.pipeline.valve.CheckCsrfTokenValve.invoke(CheckCsrfTokenValve.java:123)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157)
    +        at com.alibaba.citrus.turbine.pipeline.valve.AnalyzeURLValve.invoke(AnalyzeURLValve.java:126)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157)
    +        at com.alibaba.citrus.turbine.pipeline.valve.SetLoggingContextValve.invoke(SetLoggingContextValve.java:66)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157)
    +        at com.alibaba.citrus.turbine.pipeline.valve.PrepareForTurbineValve.invoke(PrepareForTurbineValve.java:52)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invoke(PipelineImpl.java:210)
    +        at com.alibaba.citrus.webx.impl.WebxControllerImpl.service(WebxControllerImpl.java:43)
    +        at com.alibaba.citrus.webx.impl.WebxRootControllerImpl.handleRequest(WebxRootControllerImpl.java:53)
    +        at com.alibaba.citrus.webx.support.AbstractWebxRootController.service(AbstractWebxRootController.java:165)
    +.........   
    +
    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/start-arthas.html b/en/start-arthas.html new file mode 100644 index 000000000..4f0c33e21 --- /dev/null +++ b/en/start-arthas.html @@ -0,0 +1,315 @@ + + + + + + + + + + + Start Arthas — Arthas 3.0.5-SNAPSHOT documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    Start Arthas

    +
    +

    Interactive Mode

    +
    ./as.sh
    +
    +
    +
    ➜  bin git:(develop) ✗ ./as.sh
    +Found existing java process, please choose one and hit RETURN.
    +  [1]: 3088 org.jetbrains.idea.maven.server.RemoteMavenServer
    +* [2]: 12872 org.apache.catalina.startup.Bootstrap
    +  [3]: 2455
    +Attaching to 12872...
    +  ,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---.
    + /  O  \ |  .--. ''--.  .--'|  '--'  | /  O  \ '   .-'
    +|  .-.  ||  '--'.'   |  |   |  .--.  ||  .-.  |`.  `-.
    +|  | |  ||  |\  \    |  |   |  |  |  ||  | |  |.-'    |
    +`--' `--'`--' '--'   `--'   `--'  `--'`--' `--'`-----'
    +$
    +
    +
    +
    +
    +

    Non-Interactive Mode

    +

    Startup script is as follows:

    +
    ./as.sh <PID>[@IP:PORT]
    +
    +
    +
    +

    Parameter Description

    +
      +
    • PID: Target Java process ID(Make sure that the user executing the command has sufficient permissions to operate the target Java process.)
    • +
    • IP: The address that Arthas Server listens on, the default value is 127.0.0.1. Arthas allows multiple users to access simultaneously without interfering with each other.
    • +
    • PORT: Arthas Server port,the default value is 3658
    • +
    +
    +
    +

    Sample

    +
      +
    • If you do not specify IP and PORT, the default is 127.0.0.1 and 3658

      +
      +

      ./as.sh 12345

      +
      +

      Equivalent to:

      +
      +

      ./as.sh 12356@127.0.0.1:3658

      +
      +
    • +
    +
    +
    +

    Remote Diagnosis

    +

    After starting Arthas Server, users can use telnet connect to the remote Arthas Server, for example:

    +
    telnet 192.168.1.119 3658
    +
    +
    +
    +
    +

    sudo Support

    +

    If you need to switch users, such as admin, you need to add the -H parameter.

    +
    sudo -u admin -H ./as.sh 12345
    +
    +
    +
    +
    +

    Windows Support

    +

    as.bat script only supports one parameter: pid

    +
    as.bat <pid>
    +
    +
    +
    +
    +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2018, Alibaba Middleware Group, and contributors. + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/sysprop.html b/en/sysprop.html index 3b00489a0..77557d6f0 100644 --- a/en/sysprop.html +++ b/en/sysprop.html @@ -113,10 +113,10 @@
  • classloader
  • redefine
  • monitor
  • -
  • watch
  • -
  • trace
  • -
  • stack
  • -
  • tt
  • +
  • watch
  • +
  • trace
  • +
  • stack
  • +
  • tt
  • options
  • Arthas Basic Commands
  • diff --git a/en/thread.html b/en/thread.html index 2a4eaedb1..34812ed4f 100644 --- a/en/thread.html +++ b/en/thread.html @@ -116,10 +116,10 @@
  • classloader
  • redefine
  • monitor
  • -
  • watch
  • -
  • trace
  • -
  • stack
  • -
  • tt
  • +
  • watch
  • +
  • trace
  • +
  • stack
  • +
  • tt
  • options
  • Arthas Basic Commands
  • diff --git a/en/trace.html b/en/trace.html new file mode 100644 index 000000000..944155446 --- /dev/null +++ b/en/trace.html @@ -0,0 +1,415 @@ + + + + + + + + + + + trace — Arthas 3.0.5-SNAPSHOT documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    trace

    +

    Track the class-pattern & method-pattern matched method calling trace and print the time cost in each call.

    +
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameSpecification
    class-patternpattern for the class name
    method-patternpattern for the method name
    condition-expresscondition expression
    [E]turn on regx matching while the default is wildcards matching
    [n:]calling times
    #costtime cost

    F.Y.I

    +
      +
    1. any valid OGNL expression as "{params,returnObj}" supported;
    2. +
    3. filter by time cost as trace *StringUtils isBlank '$cost>100'; calling stack with only time cost higher than 100ms will be printed.
    4. +
    +

    Attention:

    +
      +
    1. $cost can be used in watch/stack/trace;
    2. +
    3. using #cost in Arthas 3.0 instead of $cost.
    4. +
    5. trace can help to locate the performance lurking issue but only level-one method invoking considered.
    6. +
    +

    Advanced:

    + +
    +
    +

    Usage

    +

    A demo:

    +
        public static void main(String[] args) {
    +        List<String> list = new ArrayList<String>();
    +        list.add("a");
    +        list.add("b");
    +
    +        List<String> list2 = new ArrayList<String>();
    +        list2.add("c");
    +        list2.add("d");
    +
    +        int len = add(list, list2);
    +    }
    +
    +    private static int add(List<String> list, List<String> list2) {
    +        int i = 10;
    +        while (i >= 0) {
    +            try {
    +                hehe(i);
    +            } catch (Throwable t) {
    +                t.printStackTrace();
    +            }
    +            i--;
    +        }
    +
    +        list.addAll(list2);
    +        return list.size();
    +    }
    +
    +    private static void hehe(int i) {
    +        if (i == 0) {
    +            throw new RuntimeException("ZERO");
    +        }
    +    }
    +
    +
    +

    Tracing down method add:

    +
    $ trace com.alibaba.sample.petstore.web.store.module.screen.ItemList add params.length==2
    +Press Ctrl+C to abort.
    +Affect(class-cnt:1 , method-cnt:1) cost in 144 ms.
    +`---Tracing...
    +    `---[2ms]com.alibaba.sample.petstore.web.store.module.screen.ItemList:add()
    +        +---[0,0,0ms,11]com.alibaba.sample.petstore.web.store.module.screen.ItemList:hehe() [throws Exception]
    +        +---[1ms]java.lang.Throwable:printStackTrace()
    +        +---[0ms]java.util.List:addAll()
    +        `---[0ms]java.util.List:size()
    +
    +
    +

    Filtering by time cost:

    +
    $ trace com.alibaba.sample.petstore.web.store.module.screen.ItemList execute #cost>4
    +Press Ctrl+C to abort.
    +Affect(class-cnt:1 , method-cnt:1) cost in 159 ms.
    +trace com.alibaba.sample.petstore.web.store.module.screen.ItemList execute #cost>4
    +`---thread_name=http-nio-8080-exec-5;id=2c;is_daemon=true;priority=5;TCCL=com.taobao.pandora.boot.embedded.tomcat.TomcatEmbeddedWebappClassLoader
    +    `---[8.866586ms] com.alibaba.sample.petstore.web.store.module.screen.ItemList:execute()
    +        +---[2.847106ms] com.alibaba.sample.petstore.biz.StoreManager:getAllProductItems()
    +        +---[0.765544ms] com.alibaba.sample.petstore.dal.dao.ProductDao:getProductById()
    +        +---[0.021204ms] com.alibaba.sample.petstore.dal.dataobject.Product:getCategoryId()
    +        +---[1.341532ms] com.alibaba.sample.petstore.dal.dao.CategoryDao:getCategoryById()
    +        `---[min=0.005428ms,max=0.094064ms,total=0.105228ms,count=3] com.alibaba.citrus.turbine.Context:put()
    +
    +
    +

    Only the calling trace of the time cost higher than 4mspresented now.

    +

    F.Y.I

    +
      +
    1. just like JProfile and the like commercial software, you can trace down the specified method calling in Arthas;
    2. +
    3. there will be some overhead using trace but not much;
    4. +
    5. the time cost is an instructive clue for troubleshooting, which means it’s not that accurate ignoring the cost it itself causes; the deeper or more the call is, the accuracy is becoming worse;
    6. +
    7. [0,0,0ms,11]xxx:yyy() [throws Exception],the same method calling aggregated into one line here while throws Exception indicates there is an exception.
    8. +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/tt.html b/en/tt.html new file mode 100644 index 000000000..6f432e2d1 --- /dev/null +++ b/en/tt.html @@ -0,0 +1,519 @@ + + + + + + + + + + + tt — Arthas 3.0.5-SNAPSHOT documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    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 (abbreviated from TimeTunnel), you can check the contexts of the methods at different times.

    +
    +

    Usage

    +

    Let’s record the whole calling contexts:

    +
    $ tt -t -n 3 *Test print
    +Press Ctrl+D or Ctrl+X to abort.
    +Affect(class-cnt:1 , method-cnt:1) cost in 115 ms.
    ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
    +|    INDEX |            TIMESTAMP |   COST(ms) |   IS-RET |   IS-EXP |          OBJECT |                          CLASS |                         METHOD |
    ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
    +|     1007 |  2015-07-26 12:23:21 |        138 |     true |    false |      0x42cc13a0 |                GaOgnlUtilsTest |                          print |
    ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
    +|     1008 |  2015-07-26 12:23:22 |        143 |     true |    false |      0x42cc13a0 |                GaOgnlUtilsTest |                          print |
    ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
    +|     1009 |  2015-07-26 12:23:23 |        130 |     true |    false |      0x42cc13a0 |                GaOgnlUtilsTest |                          print |
    ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
    +$ 
    +
    +
    +
    +

    F.Y.I

    +
      +
    • -t

      +

      record the calling context of the method *Test.print

      +
    • +
    • -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 limit)

      +
    • +
    +
    +
    +

    Property

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameSpecification
    INDEXthe index for each call based on time
    TIMESTAMPtime to invoke the method
    COST(ms)time cost of the method call
    IS-RETend with normal return
    IS-EXPend 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[0].length==1 with different amount of parameters;
    2. +
    3. tt -t *Test print 'params[1] instanceof Integer' with different types of parameters;
    4. +
    5. tt -t *Test print params[0].mobile=="13989838402" with specified parameter.
    6. +
    +

    Advanced:

    + +
    +
    +
    +

    Searching for records

    +
    +

    A specified time range

    +
    $ tt -l
    ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
    +|    INDEX |            TIMESTAMP |   COST(ms) |   IS-RET |   IS-EXP |          OBJECT |                          CLASS |                         METHOD |
    ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
    +|     1000 |  2015-07-26 01:16:27 |        130 |     true |    false |      0x42cc13a0 |                GaOgnlUtilsTest |                          print |
    ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
    +|     1001 |  2015-07-26 01:16:27 |          0 |    false |     true |      0x42cc13a0 |                GaOgnlUtilsTest |                   printAddress |
    ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
    +|     1002 |  2015-07-26 01:16:28 |        119 |     true |    false |      0x42cc13a0 |                GaOgnlUtilsTest |                          print |
    ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
    +|     1003 |  2015-07-26 01:16:28 |          0 |    false |     true |      0x42cc13a0 |                GaOgnlUtilsTest |                   printAddress |
    ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
    +|     1004 |  2015-07-26 12:21:56 |        130 |     true |    false |      0x42cc13a0 |                GaOgnlUtilsTest |                          print |
    ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
    +|     1005 |  2015-07-26 12:21:57 |        138 |     true |    false |      0x42cc13a0 |                GaOgnlUtilsTest |                          print |
    ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
    +|     1006 |  2015-07-26 12:21:58 |        130 |     true |    false |      0x42cc13a0 |                GaOgnlUtilsTest |                          print |
    ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
    +Affect(row-cnt:7) cost in 2 ms.
    +$ 
    +
    +
    +
    +
    +

    A specified method

    +
    $ tt -s method.name=="printAddress"
    ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
    +|    INDEX |            TIMESTAMP |   COST(ms) |   IS-RET |   IS-EXP |          OBJECT |                          CLASS |                         METHOD |
    ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
    +|     1001 |  2015-07-26 01:16:27 |          0 |    false |     true |      0x42cc13a0 |                GaOgnlUtilsTest |                   printAddress |
    ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
    +|     1003 |  2015-07-26 01:16:28 |          0 |    false |     true |      0x42cc13a0 |                GaOgnlUtilsTest |                   printAddress |
    ++----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+
    +Affect(row-cnt:2) cost in 55 ms.
    +$ 
    +
    +
    +

    Advanced:

    + +
    +
    +
    +

    Check context of the call

    +

    Using tt -i <index> to check a specific record.

    +
    $ 
    +$ tt -i 1003
    ++-----------------+------------------------------------------------------------------------------------------------------+
    +|           INDEX | 1003                                                                                                 |
    ++-----------------+------------------------------------------------------------------------------------------------------+
    +|      GMT-CREATE | 2015-07-26 01:16:28                                                                                  |
    ++-----------------+------------------------------------------------------------------------------------------------------+
    +|        COST(ms) | 0                                                                                                    |
    ++-----------------+------------------------------------------------------------------------------------------------------+
    +|          OBJECT | 0x42cc13a0                                                                                           |
    ++-----------------+------------------------------------------------------------------------------------------------------+
    +|           CLASS | GaOgnlUtilsTest                                                                                      |
    ++-----------------+------------------------------------------------------------------------------------------------------+
    +|          METHOD | printAddress                                                                                         |
    ++-----------------+------------------------------------------------------------------------------------------------------+
    +|       IS-RETURN | false                                                                                                |
    ++-----------------+------------------------------------------------------------------------------------------------------+
    +|    IS-EXCEPTION | true                                                                                                 |
    ++-----------------+------------------------------------------------------------------------------------------------------+
    +|   PARAMETERS[0] | Address@53448f87                                                                                     |
    ++-----------------+------------------------------------------------------------------------------------------------------+
    +| THROW-EXCEPTION | java.lang.RuntimeException: test                                                                     |
    +|                 |     at GaOgnlUtilsTest.printAddress(Unknown Source)                                                  |
    +|                 |     at GaOgnlUtilsTest.<init>(Unknown Source)                                                        |
    +|                 |     at GaOgnlUtilsTest.main(Unknown Source)                                                          |
    ++-----------------+------------------------------------------------------------------------------------------------------+
    +Affect(row-cnt:1) cost in 1 ms.
    +$ 
    +
    +
    +
    +
    +

    Re-produce

    +

    Since Arthas stores the context of the call, you can even re-produce the method calling after some modifications with extra option -p.

    +
    $ tt -i 1003 -p
    ++-----------------+---------------------------------------------------------------------------------------------------------+
    +|        RE-INDEX | 1003                                                                                                    |
    ++-----------------+---------------------------------------------------------------------------------------------------------+
    +|      GMT-REPLAY | 2015-07-26 17:29:51                                                                                     |
    ++-----------------+---------------------------------------------------------------------------------------------------------+
    +|          OBJECT | 0x42cc13a0                                                                                              |
    ++-----------------+---------------------------------------------------------------------------------------------------------+
    +|           CLASS | GaOgnlUtilsTest                                                                                         |
    ++-----------------+---------------------------------------------------------------------------------------------------------+
    +|          METHOD | printAddress                                                                                            |
    ++-----------------+---------------------------------------------------------------------------------------------------------+
    +|   PARAMETERS[0] | Address@53448f87                                                                                        |
    ++-----------------+---------------------------------------------------------------------------------------------------------+
    +|       IS-RETURN | false                                                                                                   |
    ++-----------------+---------------------------------------------------------------------------------------------------------+
    +|    IS-EXCEPTION | true                                                                                                    |
    ++-----------------+---------------------------------------------------------------------------------------------------------+
    +| THROW-EXCEPTION | java.lang.RuntimeException: test                                                                        |
    +|                 |     at GaOgnlUtilsTest.printAddress(GaOgnlUtilsTest.java:78)                                            |
    +|                 |     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)                                      |
    +|                 |     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)                    |
    +|                 |     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)            |
    +|                 |     at java.lang.reflect.Method.invoke(Method.java:483)                                                 |
    +|                 |     at com.github.ompc.Arthas.util.GaMethod.invoke(GaMethod.java:81)                                     |
    +|                 |     at com.github.ompc.Arthas.command.TimeTunnelCommand$6.action(TimeTunnelCommand.java:592)             |
    +|                 |     at com.github.ompc.Arthas.server.DefaultCommandHandler.execute(DefaultCommandHandler.java:175)       |
    +|                 |     at com.github.ompc.Arthas.server.DefaultCommandHandler.executeCommand(DefaultCommandHandler.java:83) |
    +|                 |     at com.github.ompc.Arthas.server.GaServer$4.run(GaServer.java:329)                                   |
    +|                 |     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)                  |
    +|                 |     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)                  |
    +|                 |     at java.lang.Thread.run(Thread.java:745)                                                            |
    ++-----------------+---------------------------------------------------------------------------------------------------------+
    +replay time fragment[1003] success.
    +Affect(row-cnt:1) cost in 3 ms.
    +$ 
    +
    +
    +

    F.Y.I

    +
      +
    1. the calling stack is little different using Arthas now instead of the original method;
    2. +
    3. Loss of the thread local variables will be a fact since there is no way for Arthas to record the thread local info.
    4. +
    5. Potential modifications of objects can happen since only a reference will be recorded by Arthas while later process might modify objects without Arthas’s watch.
    6. +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/watch.html b/en/watch.html new file mode 100644 index 000000000..194ed7f08 --- /dev/null +++ b/en/watch.html @@ -0,0 +1,628 @@ + + + + + + + + + + + watch — Arthas 3.0.5-SNAPSHOT documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    watch

    +

    Monitor the methods in data aspect including return value, exceptions and parameters.

    +

    With the help of OGNL, you can easily check the details of the variables.

    +
    +

    Parameters & Options

    +

    There are four different usage scenarios for watch command, which makes it the most complicated command in Arthas.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameSpecification
    class-patternpattern for the class name
    method-patternpattern for the method name
    expressexpression to monitor
    condition-expresscondition expression
    [b]before invoking
    [e]encountering exceptions
    [s]returned normally
    [f]returned normally and abnormally
    [E]turn on regx matching while the default is wildcards matching
    [x:]the depth to print the specified property with default value: 1

    F.Y.I

    +
      +
    1. any valid OGNL expression as "{params,returnObj}" supported
    2. +
    3. there are four watching points: -b, -e, -s and -f (the first three are off in default while -f on);
    4. +
    5. at the watching point, Arthas will use the expression to calculate the values and print them out;
    6. +
    7. in-parameters and out-parameters are different since they can be modified; params stands for in-parameters in -bwhile out-parameters in other watching points;
    8. +
    9. there is no return value and exceptions when using -b.
    10. +
    +

    Advanced:

    + +
    +
    +

    Usage

    +

    A demo:

    +
        public void execute() {
    +        List<String> list = new ArrayList<String>();
    +        list.add("a");
    +        list.add("b");
    +
    +        List<String> list2 = new ArrayList<String>();
    +        list2.add("c");
    +        list2.add("d");
    +
    +        int len = add(list, list2);
    +    }
    +
    +    private static int add(List<String> list, List<String> list2) {
    +        list.addAll(list2);
    +        return list.size();
    +    }
    +
    +
    +
    +

    Check the out-parametersand return value

    +
    $ watch com.alibaba.sample.petstore.web.store.module.screen.ItemList add "{params,returnObj}" -x 2
    +Press Ctrl+C to abort.
    +Affect(class-cnt:1 , method-cnt:1) cost in 44 ms.
    +@ArrayList[
    +    @Object[][
    +        @ArrayList[isEmpty=false;size=4],
    +        @ArrayList[isEmpty=false;size=2],
    +    ],
    +
    +    @Integer[4],
    +]
    +
    +
    +
    +
    +

    Check in-parameters

    +
    $ watch com.alibaba.sample.petstore.web.store.module.screen.ItemList add "{params,returnObj}" -x 2 -b
    +Press Ctrl+C to abort.
    +Affect(class-cnt:1 , method-cnt:1) cost in 48 ms.  
    +@ArrayList[
    +    @Object[][
    +        @ArrayList[isEmpty=false;size=2],
    +        @ArrayList[isEmpty=false;size=2],
    +    ],
    +
    +    null,
    +]
    +
    +
    +

    Compared to the previous check:

    +
      +
    1. size of params[0] is 2 instead of 4;
    2. +
    3. return value is null since it’s -b.
    4. +
    +
    +
    +

    Check before and after at the same time

    +
    $ watch com.alibaba.sample.petstore.web.store.module.screen.ItemList add "{params,returnObj}" -x 2 -b -s 
    +Press Ctrl+C to abort.
    +Affect(class-cnt:1 , method-cnt:1) cost in 59 ms.  
    +@ArrayList[
    +    @Object[][
    +        @ArrayList[isEmpty=false;size=2],
    +        @ArrayList[isEmpty=false;size=2],
    +    ],
    +
    +    null,
    +]
    +@ArrayList[
    +    @Object[][
    +        @ArrayList[isEmpty=false;size=4],
    +        @ArrayList[isEmpty=false;size=2],
    +    ],
    +
    +    @Integer[4],
    +]
    +
    +
    +

    F.Y.I

    +
      +
    1. the first block of output is the before watching point;
    2. +
    3. the order of the output determined by the watching order itself (nothing to do with the order of the options -b -s).
    4. +
    +
    +
    +

    Using -x to check more details

    +
    $ watch com.alibaba.sample.petstore.web.store.module.screen.ItemList add "{params,returnObj}" -x 3 
    +Press Ctrl+C to abort.
    +Affect(class-cnt:1 , method-cnt:1) cost in 59 ms.  
    +@ArrayList[
    +    @Object[][
    +        @ArrayList[
    +            @String[a],
    +
    +            @String[b],
    +
    +            @String[c],
    +
    +            @String[d],
    +        ],
    +        @ArrayList[
    +            @String[c],
    +
    +            @String[d],
    +        ],
    +    ],
    +
    +    @Integer[4],
    +]
    +
    +
    +
    +
    +

    Using condition expressions to locate specific call

    +
    $ watch com.alibaba.sample.petstore.biz.impl.UserManagerImpl testAdd "{params, returnObj}" "params[0].equals('aaa')" -x 2 
    +Press Ctrl+C to abort.
    +Affect(class-cnt:1 , method-cnt:1) cost in 29 ms.  
    +@ArrayList[
    +    @Object[][
    +        @String[aaa],
    +        @String[bbb],
    +    ],
    +
    +    @Integer[6],
    +]
    +
    +
    +
    +
    +

    Check exceptions

    +
    $ watch com.alibaba.sample.petstore.biz.impl.UserManagerImpl testAdd "{params, throwExp}"  -e -x 2 
    +Press Ctrl+C to abort.
    +Affect(class-cnt:1 , method-cnt:1) cost in 29 ms.  
    +@ArrayList[
    +    @Object[][
    +        @String[aaa],
    +        @String[bbb],
    +    ],
    +
    +    java.lang.NullPointerException
    +        at com.alibaba.sample.petstore.biz.impl.UserManagerImpl.testAdd(UserManagerImpl.java:75)
    +        at com.alibaba.sample.petstore.biz.impl.UserManagerImpl.register(UserManagerImpl.java:60)
    +        at com.alibaba.sample.petstore.web.user.module.action.RegisterAction.doRegister(RegisterAction.java:45)
    +        at com.alibaba.sample.petstore.web.user.module.action.RegisterAction$$FastClassByCGLIB$$ad5428f1.invoke(<generated>)
    +        at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
    +        at com.alibaba.citrus.service.moduleloader.impl.adapter.MethodInvoker.invoke(MethodInvoker.java:70)
    +        at com.alibaba.citrus.service.moduleloader.impl.adapter.AbstractModuleEventAdapter.executeAndReturn(AbstractModuleEventAdapter.java:100)
    +        at com.alibaba.citrus.service.moduleloader.impl.adapter.AbstractModuleEventAdapter.execute(AbstractModuleEventAdapter.java:58)
    +        at com.alibaba.citrus.turbine.pipeline.valve.PerformActionValve.invoke(PerformActionValve.java:63)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invoke(PipelineImpl.java:210)
    +        at com.alibaba.citrus.service.pipeline.impl.valve.ChooseValve.invoke(ChooseValve.java:98)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invoke(PipelineImpl.java:210)
    +        at com.alibaba.citrus.service.pipeline.impl.valve.LoopValve.invokeBody(LoopValve.java:105)
    +        at com.alibaba.citrus.service.pipeline.impl.valve.LoopValve.invoke(LoopValve.java:83)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157)
    +        at com.alibaba.citrus.turbine.pipeline.valve.PageAuthorizationValve.invoke(PageAuthorizationValve.java:105)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157)
    +        at com.alibaba.citrus.turbine.pipeline.valve.CheckCsrfTokenValve.invoke(CheckCsrfTokenValve.java:123)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157)
    +        at com.alibaba.citrus.turbine.pipeline.valve.AnalyzeURLValve.invoke(AnalyzeURLValve.java:126)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157)
    +        at com.alibaba.citrus.turbine.pipeline.valve.SetLoggingContextValve.invoke(SetLoggingContextValve.java:66)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157)
    +        at com.alibaba.citrus.turbine.pipeline.valve.PrepareForTurbineValve.invoke(PrepareForTurbineValve.java:52)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invokeNext(PipelineImpl.java:157)
    +        at com.alibaba.citrus.service.pipeline.impl.PipelineImpl$PipelineContextImpl.invoke(PipelineImpl.java:210)
    +        at com.alibaba.citrus.webx.impl.WebxControllerImpl.service(WebxControllerImpl.java:43)
    +        at com.alibaba.citrus.webx.impl.WebxRootControllerImpl.handleRequest(WebxRootControllerImpl.java:53)
    +        at com.alibaba.citrus.webx.support.AbstractWebxRootController.service(AbstractWebxRootController.java:165)
    +        at com.alibaba.citrus.webx.servlet.WebxFrameworkFilter.doFilter(WebxFrameworkFilter.java:152)
    +        at com.alibaba.citrus.webx.servlet.FilterBean.doFilter(FilterBean.java:148)
    +        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    +        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    +        at com.alibaba.citrus.webx.servlet.SetLoggingContextFilter.doFilter(SetLoggingContextFilter.java:61)
    +        at com.alibaba.citrus.webx.servlet.FilterBean.doFilter(FilterBean.java:148)
    +        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    +        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    +        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    +        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    +        at com.taobao.tomcat.valves.ContextLoadFilterValve.invoke(ContextLoadFilterValve.java:152)
    +        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    +        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    +        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    +        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:429)
    +        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085)
    +        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
    +        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1760)
    +        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1719)
    +        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    +        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    +        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    +        at java.lang.Thread.run(Thread.java:745),
    +]
    +
    +
    +
    +
    +

    Filter based on time cost

    +
    $ watch com.alibaba.sample.petstore.web.store.module.screen.ItemList add "{params,returnObj}" #cost>200 -x 3 
    +Press Ctrl+C to abort.
    +Affect(class-cnt:1 , method-cnt:1) cost in 59 ms.  
    +@ArrayList[
    +    @Object[][
    +        @ArrayList[
    +            @String[a],
    +
    +            @String[b],
    +
    +            @String[c],
    +
    +            @String[d],
    +        ],
    +        @ArrayList[
    +            @String[c],
    +
    +            @String[d],
    +        ],
    +    ],
    +
    +    @Integer[4],
    +]
    +
    +
    +

    F.Y.I +#cost>200 (ms) filter out all invokings that take less than 200ms.

    +
    +
    +

    Check the global properties of the target object

    +

    target stands for the current object.

    +
    $ watch com.taobao.container.web.arthas.rest.MyAppsController myFavoriteApps 'target'
    +Press Ctrl+C to abort.
    +Affect(class-cnt:1 , method-cnt:1) cost in 128 ms.
    +ts=2017-10-31 18:45:55;result=@MyAppsController[
    +    myFavAppsMapper=@$Proxy131[org.apache.ibatis.binding.MapperProxy@563e97f3],
    +    getAppNameAndIdByEmpId=@$Proxy135[HardCodedTarget(type=GetAppNameAndIdByEmpId, url=http://hello.com)],
    +    enableWebConsoleAppsMapper=@$Proxy132[org.apache.ibatis.binding.MapperProxy@7d51e4a8],
    +]
    +
    +
    +

    target.field_name stands for a global property of the current object.

    +
    $ watch com.taobao.container.web.arthas.rest.MyAppsController myFavoriteApps 'target.myFavAppsMapper'
    +Press Ctrl+C to abort.
    +Affect(class-cnt:1 , method-cnt:1) cost in 126 ms.
    +ts=2017-10-31 18:46:17;result=@$Proxy131[
    +    m1=@Method[public boolean java.lang.Object.equals(java.lang.Object)],
    +    m2=@Method[public java.lang.String java.lang.Object.toString()],
    +    m5=@Method[public abstract java.util.List com.taobao.container.dal.arthas.mapper.MyFavAppsMapper.listFavApps(java.util.Map)],
    +    m3=@Method[public abstract int com.taobao.container.dal.arthas.mapper.MyFavAppsMapper.delete(java.lang.String,java.lang.String,java.lang.String)],
    +    m4=@Method[public abstract long com.taobao.container.dal.arthas.mapper.MyFavAppsMapper.insert(com.taobao.container.dal.arthas.domain.MyFavAppsDO)],
    +    m0=@Method[public native int java.lang.Object.hashCode()],
    +]
    +
    +
    +
    +
    +
    + + +
    + +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file