我意识到我需要为AWS Lambda函数分配比需要更多的内存,否则我得到:
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" class="form-inline" id="usrform" method="POST">
<textarea style="color: #3f3f3f; width: 40%;" rows="10" name="emailtxt" placeholder="Email Text" autocomplete="off" spellcheck="false" form="usrform"></textarea>
<input type="submit" class="btn btn-primary" value="Send"/>
</form>
例如,我有一个分配了128MB的Lambda函数,它会随着该错误一直崩溃,而在控制台中它会显示“最大内存使用56 MB”。
然后我分配256MB,它不再崩溃,但它总是给我一个75到85MB之间的“最大内存使用”。
为什么?感谢。
答案 0 :(得分:10)
分配给java lambda函数的内存量由堆,元和保留代码内存共享。
容器为分配256M的函数执行的java命令类似于:
java -XX:MaxHeapSize=222823k -XX:MaxMetaspaceSize=26214k -XX:ReservedCodeCacheSize=13107k -XX:+UseSerialGC -Xshare:on -XX:-TieredCompilation -jar /var/runtime/lib/LambdaJavaRTEntry-1.0.jar
222823k + 26214k + 13107k = 256M
容器为分配了384M的函数执行的java命令类似于
java -XX:MaxHeapSize=334233k -XX:MaxMetaspaceSize=39322k -XX:ReservedCodeCacheSize=39322k -XX:+UseSerialGC -Xshare:on -XX:-TieredCompilation -jar /var/runtime/lib/LambdaJavaRTEntry-1.0.jar
334233k + 39322k + 39322k = 384M
所以,公式似乎是
85%堆+ 10%meta + 5%保留代码缓存= 100%已配置的功能内存
老实说,我不知道&#34; Max Memory的使用情况&#34;计算Cloudwatch日志中报告的值。它与我所看到的任何东西都没有对齐。
答案 1 :(得分:3)
这里发生的事情可能是两件事之一:
当你占用更大的内存空间时,它会增加你的元空间分配,从而使函数能够运行。