使用JMeter进行负载测试时,Google App Engine中的502服务器错误是灵活的

时间:2017-08-16 16:55:28

标签: performance google-app-engine spring-boot jmeter

我在Google App Engine Flexible中部署了一个简单的Spring启动应用程序。该应用程序。有两个API,一个用于将用户数据添加到DB(xxx.appspot.com/add),另一个用于从DB获取所有用户数据(xxx.appspot.com/all)。

我想知道GAE如何为负载进行扩展,因此使用JMeter创建一个负载,在10秒内增加了100个用户并发,并在半秒内延迟调用这两个API。虽然它运行良好一段时间(只有一个实例),但它在30秒左右开始失败,使用" java.net.SocketException"或"服务器响应状态为502"。

发生此错误后,当我尝试从浏览器访问同一API时,会显示

  

错误:服务器错误

     

服务器遇到临时错误,无法完成您的操作   请求。请在30秒后再试一次。

服务在30分钟左右恢复正常,并且每当负载测试发生时,它重复与上述相同的行为。我希望GAE能够根据负载进行自动扩展来处理它而不会有任何停机时间(使用多个实例),而只是崩溃或阻塞服务(日志中没有任何信息)。我的app.yaml配置是,

runtime: java
env: flex
service: hello-service
automatic_scaling:
  min_num_instances: 1
  max_num_instances: 10

我对这个有点困惑,任何帮助都会非常感激。提前谢谢。

1 个答案:

答案 0 :(得分:3)

解决方案是增加资源配置,详情如下。

  

鉴于我没有设置资源参数,它默认为CPU和内存的预定义值。在这种情况下,默认   内存设置为0.6GB。 App Engine Flex实例使用大约0.4GB   用于开销流程。鉴于Java已知消耗更高的内存,因此有一个   开销进程消耗的可能性很大   约0.4GB的价值。现在,App Engine中的实例将重新启动   出于各种原因,包括由于内存使用而进行的优化。这个   解释了为什么你的实例出现了,它表明Tomcat正在启动   up(他们重新启动)并因为nginx而导致502错误   无法完成请求。如果不能完全消除502s,修复上述内容可能会减少。

在我指定了resources属性并增加app.yaml 502中的配置后,错误似乎消失了。