top命令
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18057 root 20 0 8635812 2.697g 15040 S 395.0 17.4 34:48.22 java
1445 root 10 -10 145760 26204 11556 S 2.5 0.2 1092:17 AliYunDun
14 root 20 0 0 0 0 S 0.5 0.0 4766:52 rcuos/0
15 root 20 0 0 0 0 R 0.5 0.0 2836:31 rcuos/1
6856 root 20 0 0 0 0 S 0.5 0.0 3:00.94 kworker/u8:2
1 root 20 0 41392 3568 2252 S 0.0 0.0 31:49.58 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:31.23 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 138:30.53 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 2:45.36 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/1
11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/2
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/3
13 root 20 0 0 0 0 S 0.0 0.0 8112:47 rcu_sched
16 root 20 0 0 0 0 S 0.0 0.0 2403:45 rcuos/2
[root@al-juhe-japi-1 ~]# ps aux|grep 18057
root 18057 366 17.3 8634356 2827040 ? Sl 18:02 35:19 /usr/local/java/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath/usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
root 25108 0.0 0.0 112816 960 pts/1 S+ 18:12 0:00 grep --color=auto 18057
ps -mp pid -o THREAD,tid,time
[root@al-juhe-japi-1 ~]# ps -mp 18057 -o THREAD,tid,time
USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME
root 372 - - - - - - 00:45:48
root 0.0 19 - futex_ - - 18057 00:00:00
root 43.0 19 - - - - 24116 00:01:57
root 0.0 19 - futex_ - - 24118 00:00:00
root 0.0 19 - inet_s - - 25522 00:00:00
root 0.0 19 - inet_s - - 25523 00:00:00
root 0.0 19 - inet_s - - 25524 00:00:00
将tid转化为16进制 printf “%x\n” tid
printf "%x\n" 24116
5e34
此处得到的线程id
jstack 18057 |grep tid -A 60
[root@al-juhe-japi-1 ~]# printf "%x\n" 24116
5e34
[root@al-juhe-japi-1 ~]# jstack 18057 |grep 5e34 -A 60
"catalina-exec-222" #21881 daemon prio=5 os_prio=0 tid=0x00007fb528105800 nid=0x5e34 runnable [0x00007fb4fb928000]
java.lang.Thread.State: RUNNABLE
at oilprice.QueryController.get(QueryController.java:57)
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:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:891)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:866)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
补充
ps 命令之后输出的tid是10进制的,而jstack 输出的对应的线程是16禁止的,如果要对得上,需要转换为16进制
参考了https://www.bilibili.com/video/BV1yE411Z7AP/?p=14&spm_id_from=pageDriver&vd_source=49486cef967925ff182e4229f98534f0