[英]How to tune Java Garbage collector in AWS Lambda
在我當前的項目中,我有用Java編寫的AWS Lambda函數。 我正在尋找減少Lambda冷啟動延遲的方法。 不幸的是,此刻我無法用其他某種語言(Python或Go)重寫該函數。 除了優化功能代碼的標准操作外,我還研究了其他方法。
根據經驗,我發現增加RAM值可以提高性能。 我對在Lambda環境中使用哪種JVM配置很感興趣,但是這不是很容易獲得的信息。 因此,我嘗試使用通過RuntimeMXBean中的InputArguments進行迭代的下一個函數(我在Internet中發現了類似的調查):
Lambda參數提取
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.util.List;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
String handleRequest(Object input, Context context) {
context.getLogger().log("Input: " + input);
RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean();
List arguments = runtimeMxBean.getInputArguments();
for (String arg : arguments) {
context.getLogger().log(arg);
}
return "Call succeeded.";
}
}
我得到了這個結果:
-XX:MaxHeapSize=445645k
-XX:MaxMetaspaceSize=52429k
-XX:ReservedCodeCacheSize=26214k
-XX:+UseSerialGC
-Xshare:on
-XX:-TieredCompilation
如您所見,它配置為使用串行GC,而不使用分層編譯。 我不確定為什么AWS工程師會選擇這種配置,但是嘗試使用其他一些JVM設置會很有趣。 是否可以在AWS Lambda的JVM中調整GC或完全封閉的黑盒?
調整GC不會幫助您縮短AWS Lambda的冷啟動時間。 JVM語言的冷啟動時間比某些替代方法更長,這是因為將虛擬機實際加載到內存,然后從jar文件加載所有類所花費的時間。 一個使用反射來確定加載內容的框架會進一步降低速度。
為了改善冷啟動,請避免使用Spring Boot之類的框架,並盡量減少依賴。 您也可以嘗試胖的JAR。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.