我正在开发一个使用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服务器。