scp /Users/sunww/Desktop/demo-0.0.1-SNAPSHOT.jar root@10.50.15.60:/httx/packjar
二. 启动Jar包java -jar demo-0.0.1-SNAPSHOT.jar
三. 前端发起请求curl http://localhost:8080/admin/test?a=1
应用日志显示在循环打印数据:
此时本地电脑的风扇在拼命旋转,笔记本很烫。
四. 利用top命令查看通过上面可以看到pid=5046这个进程占用cpu达到94%,所以这个进程出现问题了。
五. 利用top -p pid -H 查找该进程占用cpu高的线程信息我们进一步通过下面的命令,可以查看5046进程里占用cpu高的线程,如下:
top -p 5046 -H
上图清楚的显示pid=5092这个线程占用cpu达到92%,走的是8080端口的http请求。
六.利用jstack锁定有问题的代码类先将上面的pid=5092转化成16进制
printf "%x n" 5092
方法一:直接通过grep命令查找13e4
然后用 jstack 5046 | grep 13e4 -A 30 查找问题代码【专门查找13e4这个线程信息】,如下图:
上图:可看出是HomeController类的第31行出现问题
方法二:输出5046所有信息后,ctrl + f 去查找13e4这个线程信息
我们也可以将5046这个进程信息全部打印出来,通过ctrl + f 去查找13e4这个线程信息,然后分析
[root@192 ~]# jstack 5046 2021-09-26 07:26:02 Full thread dump OpenJDK 64-Bit Server VM (25.242-b08 mixed mode): "Attach Listener" #23 daemon prio=9 os_prio=0 tid=0x00007fa798001000 nid=0x1446 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE "http-nio-8080-exec-1" #22 daemon prio=5 os_prio=0 tid=0x00007fa774030000 nid=0x13e4 runnable [0x00007fa7b019b000] java.lang.Thread.State: RUNNABLE at java.io.FileOutputStream.writeBytes(Native Method) at java.io.FileOutputStream.write(FileOutputStream.java:326) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140) - locked <0x00000000e34422f8> (a java.io.BufferedOutputStream) at java.io.PrintStream.write(PrintStream.java:482) - locked <0x00000000e34422d8> (a java.io.PrintStream) at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221) at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291) at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:104) - locked <0x00000000e3442418> (a java.io.OutputStreamWriter) at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:185) at java.io.PrintStream.write(PrintStream.java:527) - locked <0x00000000e34422d8> (a java.io.PrintStream) at java.io.PrintStream.print(PrintStream.java:611) at java.io.PrintStream.println(PrintStream.java:750) - locked <0x00000000e34422d8> (a java.io.PrintStream) at com.example.demo.HomeController.test(HomeController.java:31) 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:205) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) at org.springframework.web.servlet.frameworkServlet.processRequest(frameworkServlet.java:970) at org.springframework.web.servlet.frameworkServlet.doGet(frameworkServlet.java:861) at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) at org.springframework.web.servlet.frameworkServlet.service(frameworkServlet.java:846) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.Authenticatorbase.invoke(Authenticatorbase.java:474) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.core.StandardEnginevalve.invoke(StandardEnginevalve.java:87) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:798) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1434) at org.apache.tomcat.util.net.SocketProcessorbase.run(SocketProcessorbase.java:49) - locked <0x00000000e45d7d70> (a org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) "DestroyJavaVM" #21 prio=5 os_prio=0 tid=0x00007fa7c004b800 nid=0x13b7 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE "http-nio-8080-AsyncTimeout" #19 daemon prio=5 os_prio=0 tid=0x00007fa7c1a98800 nid=0x13cc waiting on condition [0x00007fa7aa6f7000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at org.apache.coyote.AbstractProtocol$AsyncTimeout.run(AbstractProtocol.java:1138) at java.lang.Thread.run(Thread.java:748) "http-nio-8080-Acceptor-0" #18 daemon prio=5 os_prio=0 tid=0x00007fa7c0a28800 nid=0x13cb runnable [0x00007fa7aa7f8000] java.lang.Thread.State: RUNNABLE at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method) at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:419) at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:247) - locked <0x00000000e45f1b78> (a java.lang.Object) at org.apache.tomcat.util.net.NioEndpoint$Acceptor.run(NioEndpoint.java:443) at java.lang.Thread.run(Thread.java:748) "http-nio-8080-ClientPoller-1" #17 daemon prio=5 os_prio=0 tid=0x00007fa7c0a26800 nid=0x13ca runnable [0x00007fa7aa8f9000] java.lang.Thread.State: RUNNABLE at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269) at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93) at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86) - locked <0x00000000e45dc1e8> (a sun.nio.ch.Util$3) - locked <0x00000000e45dc1d8> (a java.util.Collections$UnmodifiableSet) - locked <0x00000000e45dbfd0> (a sun.nio.ch.EPollSelectorImpl) at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97) at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:775) at java.lang.Thread.run(Thread.java:748) "http-nio-8080-ClientPoller-0" #16 daemon prio=5 os_prio=0 tid=0x00007fa7c0b93800 nid=0x13c9 runnable [0x00007fa7aa9fa000] java.lang.Thread.State: RUNNABLE at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269) at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93) at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86) - locked <0x00000000e45f93b0> (a sun.nio.ch.Util$3) - locked <0x00000000e45f93a0> (a java.util.Collections$UnmodifiableSet) - locked <0x00000000e45f9268> (a sun.nio.ch.EPollSelectorImpl) at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97) at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:775) at java.lang.Thread.run(Thread.java:748) "NioBlockingSelector.BlockPoller-1" #15 daemon prio=5 os_prio=0 tid=0x00007fa7c129e800 nid=0x13c8 runnable [0x00007fa7aaafb000] java.lang.Thread.State: RUNNABLE at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269) at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93) at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86) - locked <0x00000000e45d64f0> (a sun.nio.ch.Util$3) - locked <0x00000000e45d64e0> (a java.util.Collections$UnmodifiableSet) - locked <0x00000000e45d63a8> (a sun.nio.ch.EPollSelectorImpl) at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97) at org.apache.tomcat.util.net.NioBlockingSelector$BlockPoller.run(NioBlockingSelector.java:339) "container-0" #14 prio=5 os_prio=0 tid=0x00007fa7c1997000 nid=0x13c7 waiting on condition [0x00007fa7aadfc000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at org.apache.catalina.core.StandardServer.await(StandardServer.java:427) at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer$1.run(TomcatEmbeddedServletContainer.java:174) "ContainerBackgroundProcessor[StandardEngine[Tomcat]]" #13 daemon prio=5 os_prio=0 tid=0x00007fa7c0a15000 nid=0x13c6 waiting on condition [0x00007fa7aaefd000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at org.apache.catalina.core.Containerbase$ContainerBackgroundProcessor.run(Containerbase.java:1355) at java.lang.Thread.run(Thread.java:748) "Service Thread" #7 daemon prio=9 os_prio=0 tid=0x00007fa7c01ad000 nid=0x13c0 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE "C1 CompilerThread1" #6 daemon prio=9 os_prio=0 tid=0x00007fa7c01a2800 nid=0x13bf waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE "C2 CompilerThread0" #5 daemon prio=9 os_prio=0 tid=0x00007fa7c0193000 nid=0x13be waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE "Signal Dispatcher" #4 daemon prio=9 os_prio=0 tid=0x00007fa7c0191000 nid=0x13bd runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE "Finalizer" #3 daemon prio=8 os_prio=0 tid=0x00007fa7c0166800 nid=0x13bc in Object.wait() [0x00007fa7b0ffe000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000000e35cbd10> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:144) - locked <0x00000000e35cbd10> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:165) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:216) "Reference Handler" #2 daemon prio=10 os_prio=0 tid=0x00007fa7c0162000 nid=0x13bb in Object.wait() [0x00007fa7c4105000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000000e35cb908> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:502) at java.lang.ref.Reference.tryHandlePending(Reference.java:191) - locked <0x00000000e35cb908> (a java.lang.ref.Reference$Lock) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153) "VM Thread" os_prio=0 tid=0x00007fa7c0158000 nid=0x13ba runnable "GC task thread#0 (ParallelGC)" os_prio=0 tid=0x00007fa7c005e000 nid=0x13b8 runnable "GC task thread#1 (ParallelGC)" os_prio=0 tid=0x00007fa7c0060000 nid=0x13b9 runnable "VM Periodic Task Thread" os_prio=0 tid=0x00007fa7c01af800 nid=0x13c1 waiting on condition JNI global references: 246七. 修改问题代码
通过上面可以锁定HomeController类的println方法(System.out.println)有问题,查看代码确实这里有个死循环打印的问题,修改代码后问题解决。



