Java 8迁移后性能急剧下降(Google App Engine)
我将我的应用程序引擎应用程序从Java 7迁移到Java 8,如所述 my App Engine应用程序中被调用的端点执行以下步骤:Java 8迁移后性能急剧下降(Google App Engine),java,google-app-engine,google-cloud-platform,Java,Google App Engine,Google Cloud Platform,我将我的应用程序引擎应用程序从Java 7迁移到Java 8,如所述 my App Engine应用程序中被调用的端点执行以下步骤: 使用java.net.HttpURLConnection执行HTTP请求 从使用de.l3s.boilerpipe.sax.BoilerpipeSAXInput.BoilerpipeSAXInput检索的网页中提取文本 创建一个json对象,其中包含一些与使用com.google.gson.JsonObject访问的网页相关的字段 返回响应中的json 我注意
- 使用java.net.HttpURLConnection执行HTTP请求
- 从使用de.l3s.boilerpipe.sax.BoilerpipeSAXInput.BoilerpipeSAXInput检索的网页中提取文本
- 创建一个json对象,其中包含一些与使用
com.google.gson.JsonObject访问的网页相关的字段
- 返回响应中的json
protoPayload.startTime: "2018-02-04T02:31:42.824065Z"
protoPayload:.endTime: "2018-02-04T02:31:43.447840Z"
latency: "0.623775s"
receiveTimestamp: "2018-02-04T02:31:43.799013964Z"
timestamp: "2018-02-04T02:31:42.824065Z"
Java8版本
startTime: "2018-02-01T14:52:07.695316Z"
endTime: "2018-02-01T14:52:09.623029Z"
latency: "1.927713s"
receiveTimestamp: "2018-02-01T14:52:09.693218406Z"
timestamp: "2018-02-01T14:52:07.695316Z"
澄清一下,在我的本地应用程序引擎环境(在我的本地机器上)上运行一些测试,我没有注意到Java 7和Java 8的执行时间有任何差异。
因此,在我看来,问题不在于Java版本,而在于运行这两个版本的应用程序引擎环境。我的假设正确吗
这是Java 7版本上的延迟图:
在Java 8版本上:
有人知道可能的原因吗?我做了相同的迁移,但没有发现任何性能下降 我注意到的是,在Java8中,它允许生成后台线程。对于某些调用,这些线程在实际请求已经完成后继续运行。这使得请求的打开时间比需要的时间长。也许你有这样的东西?(应该在日志中可见)读取 您必须将url流处理程序作为urlfetch添加到appengine-web.xml中作为
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<!-- ... -->
<url-stream-handler>urlfetch</url-stream-handler>
<!-- ... -->
</appengine-web-app>
urlfetch
这可能是由于App Engine实例类的内存/CPU限制造成的。查看此问题了解更多信息:我从日志中添加了显示java 8最高延迟的信息,以及来自测试的其他信息。在我看来,问题并不是来自java版本,而是可能来自于环境应用程序引擎,而这两个版本的runI还不能确定原因。我在Java7和Java8上分别执行了一个将流量拆分为50%和50%的测试,并附上了相应的延迟图。软件是一样的。唯一的区别是appengine-web.xml中的“java8”谢谢!根据你的建议,我解决了这个问题。但有两件事我不明白:1)在我的代码中,我使用java.net.HttpURLConnection进行HTTP(S)请求,而不是URL获取API。那么,为什么我必须在appengine-web.xml中插入要获取的标记呢?2) google文档讨论了三个“使用Java标准而不是Java8中的URL获取的优点”,但没有提到延迟的缺点。