Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringBoot应用程序:CPU使用率有时达到最大值_Java_Spring_Spring Boot_Rest_Devops - Fatal编程技术网

Java SpringBoot应用程序:CPU使用率有时达到最大值

Java SpringBoot应用程序:CPU使用率有时达到最大值,java,spring,spring-boot,rest,devops,Java,Spring,Spring Boot,Rest,Devops,如何对Springboot应用程序中的CPU使用进行故障排除/优化。对于一个用户总数约为300k的应用程序,分配的资源是否足够?这个应用程序一点也不重。它只调用第三方API,进行必要的检查并给出响应。 如何确定可能使用了比正常需要更多资源的确切代码?我在某个地方发现,从top命令跟踪进程id,到达线程转储,并查找对应的processid的十六进制值(该值可能会占用更多CPU),这是一种解决方法。这是不容易实现的,因为建议的一些命令不起作用。如果有任何帮助或建议,我将不胜感激 提前谢谢 对于sp

如何对Springboot应用程序中的CPU使用进行故障排除/优化。对于一个用户总数约为300k的应用程序,分配的资源是否足够?这个应用程序一点也不重。它只调用第三方API,进行必要的检查并给出响应。 如何确定可能使用了比正常需要更多资源的确切代码?我在某个地方发现,从top命令跟踪进程id,到达线程转储,并查找对应的processid的十六进制值(该值可能会占用更多CPU),这是一种解决方法。这是不容易实现的,因为建议的一些命令不起作用。如果有任何帮助或建议,我将不胜感激

提前谢谢


对于spring boot应用程序,线程堆栈的收集过程没有什么不同。在引导应用程序被容器化之前,它仍然是一个Jar。如果您怀疑是您的应用程序导致了高CPU,那么运行您的jar并在其上附加一个探查器,并跟踪导致高CPU负载的代码。如果您不能做到这一点,那么就使用正在运行的jar/java进程的线程转储,并使用任何免费或开源工具来分析跟踪。解释的第二个逻辑也适用于集装箱化应用程序

按照以下步骤执行docker容器中运行的java应用程序/引导应用程序的线程转储:-

docker exec -it <containerName> jstack > someFile.txt
docker exec-it jstack>someFile.txt

为它拍摄多个快照以获得更好的可视性和比较性。

如果尚未将JMX启用选项添加到JVM命令行,请从以下开始:

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=10000
-Dcom.sun.management.jmxremote.rmi.port=10000
-Dcom.sun.management.jmxremote.local.only=false 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false
然后在本地机器上,从JDK bin文件夹启动“jmc”,并连接到spring引导服务器。 然后,您将能够看到所有线程,并在所有活动线程上启用CPU负载和线程锁

请注意,上述操作会为未经验证的条目打开JVM,因此请确保端口安全

接下来,如果JVM死机,发送一个“kill-3”SIGHUP,它将告诉JVM转储内核。然后可以通过EclipseMat插件读取这些数据,以便分析JVM的内部行为


另一种方法是将jolokia安装到服务器中,以便以其他方式检索相同的信息。

Hi Sarjib,我认为JVM探查器工具可能会帮助您找到资源或性能问题的原因。JDK附带了一个免费的分析器。此网站可以帮助您了解有关探查器工具的更多信息。祝你好运