簡體   English   中英

如何在AWS Lambda中調整Java垃圾收集器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM