应用程序引擎和Firestore的内存问题



我正在开发一个使用Kotlin和Micronaut访问Firestore数据库的MS。当我在本地运行这个MS时,我可以让它与128M一起工作,因为它非常简单,只需向Firestore读取和写入数据,而不是大量数据,而是像这样的非常小的数据:

{
"project": "DUMMY",
"columns": [
{
"name": "TODO",
"taskStatus": "TODO"
},
{
"name": "IN_PROGRESS",
"taskStatus": "IN_PROGRESS"
},
{
"name": "DONE",
"taskStatus": "DONE"
}
],
"tasks": {}
}

我正在F1实例(256 MB 600 MHz(中的应用程序引擎标准中运行此程序,在我的App.yaml 中具有此属性

runtime: java11
instance_class: F1 # 256 MB     600 MHz
entrypoint: java -Xmx200m -jar MY_JAR.jar
service: data-connector
env_variables:
JAVA_TOOL_OPTIONS: "-Xmx230m"
GAE_MEMORY_MB: 128M
automatic_scaling:
max_instances: 1
max_idle_instances: 1

我知道处理内存的所有属性都是不必要的,但我不顾一切地试图让它发挥作用,只是尝试了很多解决方案,因为我的第一条错误消息是:

Exceeded soft memory limit of 256 MB with 263 MB after servicing 1 requests total. Consider setting a larger instance class in app.yaml.

下面的错误没有用app.yaml中的属性修复,但现在每次我打电话返回JSON时,我都会得到这个错误

2020-04-10 12:09:15.953 CEST
While handling this request, the process that handled this request was found to be using too much memory and was terminated. This is likely to cause a new process to be used for the next request to your application. If you see this message frequently, you may have a memory leak in your application or may be using an instance with insufficient memory. Consider setting a larger instance class in app.yaml.

我想,由于Firestore的一些配置,它在第一个请求中总是持续更长的时间,但问题是我无法做到这一点,总是收到同样的错误。

你知道我可能做错了什么吗?或者我需要什么来解决这个问题?

TL;DR问题是,我试图将一个非常小的实例用于一个简单的应用程序,但即使这样,我也需要更多的内存。

好的,一个朋友帮了我。我使用的是一个非常小的实例,即使我没有得到内存限制的错误,这也是内存问题。

将我的实例更新为F2(512 MB 1.2 GHz(解决了这个问题,并用围攻测试了我的应用程序,结果获得了非常好的性能:

Transactions:               5012 hits
Availability:             100.00 %
Elapsed time:              59.47 secs
Data transferred:           0.45 MB
Response time:              0.30 secs
Transaction rate:          84.28 trans/sec
Throughput:             0.01 MB/sec
Concurrency:               24.95
Successful transactions:        3946
Failed transactions:               0
Longest transaction:            1.08
Shortest transaction:           0.09

我的sysops朋友告诉我,这些实例更多地用于python脚本代码和类似的东西,而不是JVM REST服务器。

最新更新