Arthas 基本使用

Arthas 基本使用

安装

在线安装

curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar --repo-mirror aliyun --use-http

启动

java -jar arthas-boot.jar

docker 或 k8s 部署时建议交互式进入容器,在容器里操作

# docker 进入容器
docker exec -it 容器id bash

# docker-compose 进入容器
docker-compose exec 容器名 bash

# k8s 进入容器
kubectl exec -it [-n 命名空间]  pod名 -c 容器名 bash

例:

[root@master1 micro]# kubectl exec -it -n micro user-7dc67c7856-4rd2c -c user bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
bash-4.4# 
bash-4.4# 
bash-4.4# pwd
/app
bash-4.4# java -jar arthas-boot.jar 
Picked up JAVA_TOOL_OPTIONS: -XX:MaxRAMPercentage=75.0
[INFO] JAVA_HOME: /usr/java/openjdk-17
[INFO] arthas-boot version: 3.6.7
[INFO] JAVA_TOOL_OPTIONS: -XX:MaxRAMPercentage=75.0
[INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.
* [1]: 8 user.jar
1
[INFO] arthas home: /root/.arthas/lib/3.6.7/arthas
[INFO] Try to attach process 8
Picked up JAVA_TOOL_OPTIONS: 
[INFO] Attach process 8 success.
[INFO] arthas-client connect 127.0.0.1 3658
  ,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---.                           
 /  O  \ |  .--. ''--.  .--'|  '--'  | /  O  \ '   .-'                          
|  .-.  ||  '--'.'   |  |   |  .--.  ||  .-.  |`.  `-.                          
|  | |  ||  |\  \    |  |   |  |  |  ||  | |  |.-'    |                         
`--' `--'`--' '--'   `--'   `--'  `--'`--' `--'`-----'                          

wiki       https://arthas.aliyun.com/doc                                        
tutorials  https://arthas.aliyun.com/doc/arthas-tutorials.html                  
version    3.6.7                                                                
main_class                                                                      
pid        8                                                                    
time       2023-01-06 13:35:09                                                  

[arthas@8]$ 

arthas 命令

help查看arthas所有命令,命令文档 https://arthas.aliyun.com/doc/commands.html

[arthas@8]$ help
 NAME         DESCRIPTION                                                                                                                                                                              
 help         Display Arthas Help                                                                                                                                                                      
 auth         Authenticates the current session                                                                                                                                                        
 keymap       Display all the available keymap for the specified connection.                                                                                                                           
 sc           Search all the classes loaded by JVM                                                                                                                                                     
 sm           Search the method of classes loaded by JVM                                                                                                                                               
 classloader  Show classloader info                                                                                                                                                                    
 jad          Decompile class                                                                                                                                                                          
 getstatic    Show the static field of a class                                                                                                                                                         
 monitor      Monitor method execution statistics, e.g. total/success/failure count, average rt, fail rate, etc.                                                                                       
 stack        Display the stack trace for the specified class and method                                                                                                                               
 thread       Display thread info, thread stack                                                                                                                                                        
 trace        Trace the execution time of specified method invocation.                                                                                                                                 
 watch        Display the input/output parameter, return object, and thrown exception of specified method invocation                                                                                   
 tt           Time Tunnel                                                                                                                                                                              
 jvm          Display the target JVM information                                                                                                                                                       
 memory       Display jvm memory info.                                                                                                                                                                 
 perfcounter  Display the perf counter information.                                                                                                                                                    
 ognl         Execute ognl expression.                                                                                                                                                                 
 mc           Memory compiler, compiles java files into bytecode and class files in memory.                                                                                                            
 redefine     Redefine classes. @see Instrumentation#redefineClasses(ClassDefinition...)                                                                                                               
 retransform  Retransform classes. @see Instrumentation#retransformClasses(Class...)                                                                                                                   
 dashboard    Overview of target jvm's thread, memory, gc, vm, tomcat info.                                                                                                                            
 dump         Dump class byte array from JVM                                                                                                                                                           
 heapdump     Heap dump                                                                                                                                                                                
 options      View and change various Arthas options                                                                                                                                                   
 cls          Clear the screen                                                                                                                                                                         
 reset        Reset all the enhanced classes                                                                                                                                                           
 version      Display Arthas version                                                                                                                                                                   
 session      Display current session information                                                                                                                                                      
 sysprop      Display and change the system properties.                                                                                                                                                
 sysenv       Display the system env.                                                                                                                                                                  
 vmoption     Display, and update the vm diagnostic options.                                                                                                                                           
 logger       Print logger info, and update the logger level                                                                                                                                           
 history      Display command history                                                                                                                                                                  
 cat          Concatenate and print files                                                                                                                                                              
 base64       Encode and decode using Base64 representation                                                                                                                                            
 echo         write arguments to the standard output                                                                                                                                                   
 pwd          Return working directory name                                                                                                                                                            
 mbean        Display the mbean information                                                                                                                                                            
 grep         grep command for pipes.                                                                                                                                                                  
 tee          tee command for pipes.                                                                                                                                                                   
 profiler     Async Profiler. https://github.com/jvm-profiling-tools/async-profiler                                                                                                                    
 vmtool       jvm tool                                                                                                                                                                                 
 stop         Stop/Shutdown Arthas server and exit the console.                                                                                                                                        
 jfr          Java Flight Recorder Command                                                                                                                                                             
[arthas@8]$

idea 插件

安装插件

在这里插入图片描述

在idea里可以生成对应命令

在这里插入图片描述

常用命令

  1. 查看源码

    [arthas@8]$ jad --source-only com.wunding.learn.user.service.service.impl.UserServiceImpl getUserByLoginNameAndPassword
            public User getUserByLoginNameAndPassword(String loginName, String password) {
                LambdaQueryWrapper wrapper = new LambdaQueryWrapper();
    /*198*/     wrapper.eq(User::getLoginName, (Object)loginName);
    /*199*/     wrapper.eq(User::getPassword, (Object)password);
    /*200*/     wrapper.eq(User::getIsDel, (Object)DelEnum.NOT_DELETE.getValue());
    /*201*/     return (User)((UserMapper)this.baseMapper).selectOne((Wrapper)wrapper);
            }
    
    [arthas@8]$ session (b944e73a-0ca7-4532-9d4f-974318c76a19) is closed because session is inactive for 30 min(s).
    bash-4.4# 
    
    
  2. 查看调用耗时分布

    [arthas@8]$ trace com.wunding.learn.user.service.service.impl.UserServiceImpl getUserByLoginNameAndPassword  -n 5 --skipJDKMethod false 
    Press Q or Ctrl+C to abort.
    Affect(class count: 2 , method count: 2) cost in 341 ms, listenerId: 1
    `---ts=2023-01-06 17:59:37;thread_name=http-nio-8080-exec-8;id=162;is_daemon=true;priority=5;TCCL=org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader@3caafa67
        `---[27.183135ms] com.wunding.learn.user.service.service.impl.UserServiceImpl$$EnhancerBySpringCGLIB$$d033173a:getUserByLoginNameAndPassword()
            `---[98.32% 26.727494ms ] org.springframework.cglib.proxy.MethodInterceptor:intercept()
                `---[20.54% 5.488777ms ] com.wunding.learn.user.service.service.impl.UserServiceImpl:getUserByLoginNameAndPassword()
                    +---[0.81% 0.044699ms ] com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper:<init>() #197
                    +---[0.83% 0.045517ms ] com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper:eq() #198
                    +---[0.44% 0.024034ms ] com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper:eq() #199
                    +---[0.39% 0.021651ms ] com.wunding.learn.common.base.constant.DelEnum:getValue() #200
                    +---[0.33% 0.018046ms ] com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper:eq() #200
                    `---[63.83% 3.503642ms ] com.wunding.learn.user.service.mapper.UserMapper:selectOne() #201
    
    `---ts=2023-01-06 17:59:49;thread_name=http-nio-8080-exec-13;id=2a5;is_daemon=true;priority=5;TCCL=org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader@3caafa67
        `---[4.668849ms] com.wunding.learn.user.service.service.impl.UserServiceImpl$$EnhancerBySpringCGLIB$$d033173a:getUserByLoginNameAndPassword()
            `---[98.66% 4.606316ms ] org.springframework.cglib.proxy.MethodInterceptor:intercept()
                `---[74.27% 3.420964ms ] com.wunding.learn.user.service.service.impl.UserServiceImpl:getUserByLoginNameAndPassword()
                    +---[2.45% 0.083727ms ] com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper:<init>() #197
                    +---[0.47% 0.016086ms ] com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper:eq() #198
                    +---[0.33% 0.011285ms ] com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper:eq() #199
                    +---[0.30% 0.010234ms ] com.wunding.learn.common.base.constant.DelEnum:getValue() #200
                    +---[0.33% 0.011153ms ] com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper:eq() #200
                    `---[91.65% 3.135338ms ] com.wunding.learn.user.service.mapper.UserMapper:selectOne() #201
    
    `---ts=2023-01-06 18:00:12;thread_name=http-nio-8080-exec-5;id=15f;is_daemon=true;priority=5;TCCL=org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader@3caafa67
        `---[5.964689ms] com.wunding.learn.user.service.service.impl.UserServiceImpl$$EnhancerBySpringCGLIB$$d033173a:getUserByLoginNameAndPassword()
            `---[98.33% 5.864863ms ] org.springframework.cglib.proxy.MethodInterceptor:intercept()
                `---[76.34% 4.477307ms ] com.wunding.learn.user.service.service.impl.UserServiceImpl:getUserByLoginNameAndPassword()
                    +---[0.40% 0.017783ms ] com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper:<init>() #197
                    +---[0.39% 0.017306ms ] com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper:eq() #198
                    +---[0.38% 0.017194ms ] com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper:eq() #199
                    +---[0.25% 0.011403ms ] com.wunding.learn.common.base.constant.DelEnum:getValue() #200
                    +---[0.29% 0.013166ms ] com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper:eq() #200
                    `---[73.42% 3.287341ms ] com.wunding.learn.user.service.mapper.UserMapper:selectOne() #201
    
    `---ts=2023-01-06 18:00:31;thread_name=http-nio-8080-exec-4;id=15e;is_daemon=true;priority=5;TCCL=org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader@3caafa67
        `---[3.456161ms] com.wunding.learn.user.service.service.impl.UserServiceImpl$$EnhancerBySpringCGLIB$$d033173a:getUserByLoginNameAndPassword()
            `---[97.91% 3.383819ms ] org.springframework.cglib.proxy.MethodInterceptor:intercept()
                `---[70.26% 2.377376ms ] com.wunding.learn.user.service.service.impl.UserServiceImpl:getUserByLoginNameAndPassword()
                    +---[0.54% 0.012773ms ] com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper:<init>() #197
                    +---[0.63% 0.014931ms ] com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper:eq() #198
                    +---[0.48% 0.011487ms ] com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper:eq() #199
                    +---[0.33% 0.007945ms ] com.wunding.learn.common.base.constant.DelEnum:getValue() #200
                    +---[0.50% 0.011856ms ] com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper:eq() #200
                    `---[92.80% 2.206257ms ] com.wunding.learn.user.service.mapper.UserMapper:selectOne() #201
    
    `---ts=2023-01-06 18:00:33;thread_name=http-nio-8080-exec-12;id=1b2;is_daemon=true;priority=5;TCCL=org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader@3caafa67
        `---[4.069687ms] com.wunding.learn.user.service.service.impl.UserServiceImpl$$EnhancerBySpringCGLIB$$d033173a:getUserByLoginNameAndPassword()
            `---[95.82% 3.899633ms ] org.springframework.cglib.proxy.MethodInterceptor:intercept()
                `---[69.13% 2.695713ms ] com.wunding.learn.user.service.service.impl.UserServiceImpl:getUserByLoginNameAndPassword()
                    +---[0.77% 0.020648ms ] com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper:<init>() #197
                    +---[0.57% 0.015428ms ] com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper:eq() #198
                    +---[0.42% 0.011455ms ] com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper:eq() #199
                    +---[0.38% 0.010299ms ] com.wunding.learn.common.base.constant.DelEnum:getValue() #200
                    +---[0.45% 0.012229ms ] com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper:eq() #200
                    `---[91.05% 2.45443ms ] com.wunding.learn.user.service.mapper.UserMapper:selectOne() #201
    
    Command execution times exceed limit: 5, so command will exit. You can set it with -n option.
    [arthas@8]$ 
    
    
  3. 查看方法入参,出参,异常

    [arthas@8]$ 
    [arthas@8]$ watch com.wunding.learn.user.service.service.impl.UserServiceImpl getUserByLoginNameAndPassword '{params,returnObj,throwExp}'  -n 5  -x 3 
    Press Q or Ctrl+C to abort.
    Affect(class count: 2 , method count: 2) cost in 244 ms, listenerId: 2
    method=com.wunding.learn.user.service.service.impl.UserServiceImpl.getUserByLoginNameAndPassword location=AtExit
    ts=2023-01-06 18:02:18; [cost=6.587646ms] result=@ArrayList[
        @Object[][
            @String[admin],
            @String[10ADC3949BA59ABBE56E057F20F883],
        ],
        @User[
            serialVersionUID=@Long[1],
            id=@String[admin],
            employeeNo=@String[],
            loginName=@String[admin],
            fullName=@String[管理员],
            nikeName=@String[管理员],
            password=@String[10ADC3949BA59ABBE56E057F20F883],
            orgId=@String[0],
            workingArea=@String[深圳市华东43],
            firstName=@String[],
            lastName=@String[],
            pinyin=@String[admin],
            sex=@Integer[1],
            workPhone=@String[],
            telephone=@String[13511331221],
            shortMobile=@String[],
            email=@String[21212111@qq.com],
            isLock=@Integer[0],
            isAvailable=@Integer[1],
            isDel=@Integer[0],
            createBy=@String[admin],
            createTime=@Date[2022-11-29 15:49:22,000],
            updateBy=@String[20221129195832f864e3b9643ccd0c9bc9f8],
            updateTime=@Date[2022-12-01 14:45:38,000],
            isSuper=@Integer[1],
            userLevelId=@String[],
            isExpert=@Integer[0],
            liveUserId=@BigDecimal[
            lsDepartAdmin=@Integer[0],
            birthday=@Date[2022-05-02 01:07:57,000],
            joinDate=@Date[2022-05-02 01:07:57,000],
        ],
        null,
    ]
    method=com.wunding.learn.user.service.service.impl.UserServiceImpl$$EnhancerBySpringCGLIB$$d033173a.getUserByLoginNameAndPassword location=AtExit
    ts=2023-01-06 18:02:18; [cost=85.490147ms] result=@ArrayList[
        @Object[][
            @String[admin],
            @String[10ADC3949BA59ABBE56E057F20F883],
        ],
        @User[
            serialVersionUID=@Long[1],
            id=@String[admin],
            employeeNo=@String[],
            loginName=@String[admin],
            fullName=@String[管理员],
            nikeName=@String[管理员],
            password=@String[10ADC3949BA59ABBE56E057F20F883],
            orgId=@String[0],
            workingArea=@String[深圳市华东43],
            firstName=@String[],
            lastName=@String[],
            pinyin=@String[admin],
            sex=@Integer[1],
            workPhone=@String[],
            telephone=@String[13511331221],
            shortMobile=@String[],
            email=@String[21212111@qq.com],
            isLock=@Integer[0],
            isAvailable=@Integer[1],
            isDel=@Integer[0],
            createBy=@String[admin],
            createTime=@Date[2022-11-29 15:49:22,000],
            updateBy=@String[20221129195832f864e3b9643ccd0c9bc9f8],
            updateTime=@Date[2022-12-01 14:45:38,000],
            isSuper=@Integer[1],
            userLevelId=@String[],
            isExpert=@Integer[0],
            liveUserId=@BigDecimal[
            lsDepartAdmin=@Integer[0],
            birthday=@Date[2022-05-02 01:07:57,000],
            joinDate=@Date[2022-05-02 01:07:57,000],
        ],
        null,
    ]
    method=com.wunding.learn.user.service.service.impl.UserServiceImpl.getUserByLoginNameAndPassword location=AtExit
    ts=2023-01-06 18:02:34; [cost=2.542827ms] result=@ArrayList[
        @Object[][
            @String[admin],
            @String[27CCB0EEA8A706C4C34A16891F84E7],
        ],
        null,
        null,
    ]
    method=com.wunding.learn.user.service.service.impl.UserServiceImpl$$EnhancerBySpringCGLIB$$d033173a.getUserByLoginNameAndPassword location=AtExit
    ts=2023-01-06 18:02:34; [cost=5.046508ms] result=@ArrayList[
        @Object[][
            @String[admin],
            @String[27CCB0EEA8A706C4C34A16891F84E7],
        ],
        null,
        null,
    ]
    method=com.wunding.learn.user.service.service.impl.UserServiceImpl.getUserByLoginNameAndPassword location=AtExit
    ts=2023-01-06 18:02:37; [cost=2.758137ms] result=@ArrayList[
        @Object[][
            @String[admin],
            @String[10ADC3949BA59ABBE56E057F20F883],
        ],
        @User[
            serialVersionUID=@Long[1],
            id=@String[admin],
            employeeNo=@String[],
            loginName=@String[admin],
            fullName=@String[管理员],
            nikeName=@String[管理员],
            password=@String[10ADC3949BA59ABBE56E057F20F883],
            orgId=@String[0],
            workingArea=@String[深圳市华东43],
            firstName=@String[],
            lastName=@String[],
            pinyin=@String[admin],
            sex=@Integer[1],
            workPhone=@String[],
            telephone=@String[13511331221],
            shortMobile=@String[],
            email=@String[21212111@qq.com],
            isLock=@Integer[0],
            isAvailable=@Integer[1],
            isDel=@Integer[0],
            createBy=@String[admin],
            createTime=@Date[2022-11-29 15:49:22,000],
            updateBy=@String[20221129195832f864e3b9643ccd0c9bc9f8],
            updateTime=@Date[2022-12-01 14:45:38,000],
            isSuper=@Integer[1],
            userLevelId=@String[],
            isExpert=@Integer[0],
            liveUserId=@BigDecimal[
            lsDepartAdmin=@Integer[0],
            birthday=@Date[2022-05-02 01:07:57,000],
            joinDate=@Date[2022-05-02 01:07:57,000],
        ],
        null,
    ]
    Command execution times exceed limit: 5, so command will exit. You can set it with -n option.
    [arthas@8]$ 
    
    
  4. 查看方法调用栈

    [arthas@8]$ 
    [arthas@8]$ stack com.wunding.learn.user.service.service.impl.UserServiceImpl getUserByLoginNameAndPassword  -n 1
    Press Q or Ctrl+C to abort.
    Affect(class count: 2 , method count: 2) cost in 197 ms, listenerId: 4
    ts=2023-01-06 18:26:33;thread_name=http-nio-8080-exec-5;id=15f;is_daemon=true;priority=5;TCCL=org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader@3caafa67
        @com.wunding.learn.user.service.service.impl.UserServiceImpl.getUserByLoginNameAndPassword()
            at com.wunding.learn.user.service.service.impl.UserServiceImpl$$FastClassBySpringCGLIB$$4b87ebfa.invoke(<generated>:-1)
            at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
            at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783)
            at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
            at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)
            at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)
            at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)
            at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)
            at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
            at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)
            at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)
            at com.wunding.learn.user.service.service.impl.UserServiceImpl$$EnhancerBySpringCGLIB$$d033173a.getUserByLoginNameAndPassword(<generated>:-1)
            at com.wunding.learn.user.service.feign.UserFeignImpl.getUserByLoginNameAndPassword(UserFeignImpl.java:93)
            at jdk.internal.reflect.GeneratedMethodAccessor1632.invoke(null:-1)
            at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:568)
            at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
            at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
            at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
            at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
            at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
            at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
            at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)
            at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
            at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
            at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:497)
            at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:584)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
            at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)
            at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
            at org.springframework.web.servlet.resource.ResourceUrlEncodingFilter.doFilter(ResourceUrlEncodingFilter.java:67)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
            at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
            at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
            at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
            at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
            at org.springframework.cloud.sleuth.instrument.web.servlet.TracingFilter.doFilter(TracingFilter.java:68)
            at org.springframework.cloud.sleuth.autoconfig.instrument.web.TraceWebServletConfiguration$LazyTracingFilter.doFilter(TraceWebServletConfiguration.java:129)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
            at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)
            at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
            at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
            at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
            at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
            at org.springframework.cloud.sleuth.instrument.web.tomcat.TraceValve.invoke(TraceValve.java:74)
            at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:769)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)
            at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
            at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
            at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)
            at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743)
            at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
            at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
            at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
            at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
            at java.lang.Thread.run(Thread.java:833)
    
    Command execution times exceed limit: 1, so command will exit. You can set it with -n option.
    [arthas@8]$ 
    
    
  5. 查看占用CPU最高的N个线程信息

    [arthas@8]$ 
    [arthas@8]$ thread -n 2
    "arthas-command-execute" Id=650 cpuUsage=0.75% deltaTime=1ms time=1895ms RUNNABLE
        at java.management@17.0.1/sun.management.ThreadImpl.dumpThreads0(Native Method)
        at java.management@17.0.1/sun.management.ThreadImpl.getThreadInfo(ThreadImpl.java:485)
        at com.taobao.arthas.core.command.monitor200.ThreadCommand.processTopBusyThreads(ThreadCommand.java:206)
        at com.taobao.arthas.core.command.monitor200.ThreadCommand.process(ThreadCommand.java:122)
        at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.process(AnnotatedCommandImpl.java:82)
        at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.access$100(AnnotatedCommandImpl.java:18)
        at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl$ProcessHandler.handle(AnnotatedCommandImpl.java:111)
        at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl$ProcessHandler.handle(AnnotatedCommandImpl.java:108)
        at com.taobao.arthas.core.shell.system.impl.ProcessImpl$CommandProcessTask.run(ProcessImpl.java:385)
        at java.base@17.0.1/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
        at java.base@17.0.1/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base@17.0.1/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
        at java.base@17.0.1/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at java.base@17.0.1/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at java.base@17.0.1/java.lang.Thread.run(Thread.java:833)
    
    
    "JFR Periodic Tasks" Id=22 cpuUsage=0.19% deltaTime=0ms time=191266ms TIMED_WAITING on java.lang.Object@737f076c
        at java.base@17.0.1/java.lang.Object.wait(Native Method)
        -  waiting on java.lang.Object@737f076c
        at jdk.jfr@17.0.1/jdk.jfr.internal.PlatformRecorder.takeNap(PlatformRecorder.java:527)
        at jdk.jfr@17.0.1/jdk.jfr.internal.PlatformRecorder.periodicTask(PlatformRecorder.java:508)
        at jdk.jfr@17.0.1/jdk.jfr.internal.PlatformRecorder.lambda$startDiskMonitor$1(PlatformRecorder.java:448)
        at jdk.jfr@17.0.1/jdk.jfr.internal.PlatformRecorder$$Lambda$62/0x0000000800c42938.run(Unknown Source)
        at java.base@17.0.1/java.lang.Thread.run(Thread.java:833)
    
    
    [arthas@8]$ 
    
  6. 查看和修改日志级别

    [arthas@8]$ 
    [arthas@8]$ logger
     name                             ROOT                                                                                                                                                                 
     class                            ch.qos.logback.classic.Logger                                                                                                                                        
     classLoader                      org.springframework.boot.loader.LaunchedURLClassLoader@4386f16                                                                                                       
     classLoaderHash                  4386f16                                                                                                                                                              
     level                            INFO                                                                                                                                                                 
     effectiveLevel                   INFO                                                                                                                                                                 
     additivity                       true                                                                                                                                                                 
     codeSource                       jar:file:/app/user.jar!/BOOT-INF/lib/logback-classic-1.2.11.jar!/                                                                                                    
     appenders                        name            console                                                                                                                                              
                                      class           ch.qos.logback.core.ConsoleAppender                                                                                                                  
                                      classLoader     org.springframework.boot.loader.LaunchedURLClassLoader@4386f16                                                                                       
                                      classLoaderHash 4386f16                                                                                                                                              
                                      target          System.out                                                                                                                                           
                                      name            file                                                                                                                                                 
                                      class           ch.qos.logback.core.rolling.RollingFileAppender                                                                                                      
                                      classLoader     org.springframework.boot.loader.LaunchedURLClassLoader@4386f16                                                                                       
                                      classLoaderHash 4386f16                                                                                                                                              
                                      file            /data/logs/user/user.log                                                                                                                             
    
    [arthas@8]$ logger --name com.wunding.learn.user.service.mapper
     name                             com.wunding.learn.user.service.mapper                                                                                                                                
     class                            ch.qos.logback.classic.Logger                                                                                                                                        
     classLoader                      org.springframework.boot.loader.LaunchedURLClassLoader@4386f16                                                                                                       
     classLoaderHash                  4386f16                                                                                                                                                              
     level                            DEBUG                                                                                                                                                                
     effectiveLevel                   DEBUG                                                                                                                                                                
     additivity                       true                                                                                                                                                                 
     codeSource                       jar:file:/app/user.jar!/BOOT-INF/lib/logback-classic-1.2.11.jar!/                                                                                                    
    
    [arthas@8]$ 
    [arthas@8]$ 
    [arthas@8]$ logger --name com.wunding.learn.user.service.mapper --level INFO -c 4386f16
    Update logger level success.
    [arthas@8]$ logger --name com.wunding.learn.user.service.mapper
     name                             com.wunding.learn.user.service.mapper                                                                                                                                
     class                            ch.qos.logback.classic.Logger                                                                                                                                        
     classLoader                      org.springframework.boot.loader.LaunchedURLClassLoader@4386f16                                                                                                       
     classLoaderHash                  4386f16                                                                                                                                                              
     level                            INFO                                                                                                                                                                 
     effectiveLevel                   INFO                                                                                                                                                                 
     additivity                       true                                                                                                                                                                 
     codeSource                       jar:file:/app/user.jar!/BOOT-INF/lib/logback-classic-1.2.11.jar!/                                                                                                    
    
    [arthas@8]$ 
    
    
  7. 查看环境变量

    [arthas@8]$ 
    [arthas@8]$ sysenv learn.service.learn-file-service
     KEY                                     VALUE                                                                                                                                                         
    --------------------------------------------------------------------------------------------------------------------------------
     learn.service.learn-file-service        http://file:8080                                                                                                                                              
    [arthas@8]$ 
    [arthas@8]$ sysenv spring.datasource.url
     KEY                                     VALUE                                                                                                                                                         
    --------------------------------------------------------------------------------------------------------------------------------
     spring.datasource.url                   jdbc:mysql://${USER_DB_HOST}:${USER_DB_PORT}/${USER_DB_NAME}?allowMultiQueries=true&serverTimezone=Asia/Shanghai                                              
    [arthas@8]$ sysenv USER_DB_HOST
     KEY                                     VALUE                                                                                                                                                         
    --------------------------------------------------------------------------------------------------------------------------------
     USER_DB_HOST                            mysql                                                                                                                                                         
    [arthas@8]$ sysenv USER_DB_PORT
     KEY                                     VALUE                                                                                                                                                         
    --------------------------------------------------------------------------------------------------------------------------------
     USER_DB_PORT                            3306                                                                                                                                                          
    [arthas@8]$ sysenv USER_DB_NAME
     KEY                                     VALUE                                                                                                                                                         
    --------------------------------------------------------------------------------------------------------------------------------
     USER_DB_NAME                            user                                                                                                                                                          
    [arthas@8]$ sysenv 
     KEY                                     VALUE                                                                                                                                                         
    --------------------------------------------------------------------------------------------------------------------------------
     PATH                                    /usr/java/openjdk-17/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin                                                                         
     FILE_PORT                               tcp://10.233.29.70:80                                                                                                                                         
     COMMENT_PORT_8080_TCP                   tcp://10.233.60.221:8080                                                                                                                                      
     EXCITATION_PORT_8080_TCP_PORT           8080                                                                                                                                                          
     EXAM_PORT_80_TCP_ADDR                   10.233.16.178                                                                                                                                                 
     JAVA_WEB_BWT_SERVICE_PORT               8080                                                                                                                                                          
     EXAMPLE_SERVICE_PORT                    80                                                                                                                                                            
     READING_SERVICE_PORT                    80                                                                                                                                                            
     FILE_PORT_8080_TCP                      tcp://10.233.29.70:8080                                                                                                                                       
     LIVE_PORT                               tcp://10.233.61.203:80                                                                                                                                        
     USER_SERVICE_PORT                       80                                                                                                                                                            
     SURVEY_PORT_8080_TCP_ADDR               10.233.52.105                       
     
     ...
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值