首页 > 解决方案 > spring boot api rest webservice中的性能问题

问题描述

在我们的组织中,我们已经开始通过 web 服务与 api rest 进行集成,但我们遇到了一个罕见的性能问题。

数据:我们有一个虚拟机 (VMWare) 4 核/8Gb 内存。足够的远程存储。Ubuntu 服务器 18.04 openjdk 11.0.7 2020-04-14 JAVA_OPTS='-Djava.awt.headless=true -Xms512m -Xmx2048m -XX:MaxPermSize=256m'

mysql:见 5.7.30-0ubuntu0.18.04.1(它在本地运行,但应用程序通过主机名连接)。

APP:Spring boot 2.1.3 (tomcat & spring data jpa & hikari & hibernate) 所有参数默认。

top - 15:09:15 up 2 days, 14:21, 1 user, load average: 0.03, 0.01, 0.00
Tasks: 189 total, 1 running, 100 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.2 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8168140 total, 148740 free, 7590936 used, 428464 buff/cache
KiB Swap: 2097148 total, 1352428 free, 744720 used.   332048 avail Mem
  PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
 2383 app 20 0 41920 3944 3220 R 0.7 0.0 0:00.53 top
 2698 app 20 0 5835612 402424 15312 S 0.7 4.9 23:13.92 java
 1786 mysql 20 0 2680528 321892 8108 S 0.3 3.9 20:38.32 mysqld
 2677 app 20 0 5850152 441440 15824 S 0.3 5.4 28:01.41 java <------
 2769 app 20 0 5868308 977.2m 16868 S 0.3 12.3 49:25.72 java
ps -eaf | grep java
app 2677 2676 0 Jul07 ? 00:28:01 java -Dserver.port=4560 -jar app-ws-1.0.0-SNAPSHOT.jar <------
app 2698 2696 0 Jul07 ? 00:23:14 java -Dserver.port=4561 -jar app-ws-1.0.0-SNAPSHOT.jar
app 2769 2768 1 Jul07 ? 00:49:26 java -jar app-gui-1.0.0-SNAPSHOT.jar

我们有 2 个 web 服务,一个是功能性的 (2677),另一个在测试中 (2698) 和一个 web 应用程序 (2768)。

我们第一个有问题。处理调用时,第一个调用需要>30s,导致调用系统超时,但后续调用处理正常<5s。

通话次数最少,最多 10 次。每天,从不并发。如果几个小时没有调用 (>5h),也会发生超时。

我们检查了代码,我们检查了 WMware/Ubuntu(暂停选项),但在监控中我们没有看到任何东西。

我们被告知这可能是 JVM 和 GC 问题,但我个人不太了解,而且我还没有看到内存分析器的任何内容。

后来,我们在应用程序本身中实现了每 10 分钟一次的虚拟调用 (localhost) 以“预热机器”,但即便如此,第一次调用仍然需要 30 秒以上,其余的则不需要。虚拟呼叫只回答正常。

我们不知道原因可能是什么,也不知道如何放弃选择,因为它是一个高效的环境,它不允许很多变化。

标签: performancespring-bootubuntuvmware

解决方案


推荐阅读