aws的lambda优化

java代码启动时间长,spring的ioc注入也需要时间,那么怎样减少lambda的运行时间

  • 将lambda启动jvm时是不限制cpu的,所以可以把连接redis、数据库放在static中

    将容器静态化,在lambda启动类中获取容器时,静态获取

    public class GlobalContainer {
        static ApplicationContext applicationContext=null;
    
        public static ApplicationContext getApplicationContext() {
            return applicationContext;
        }
    
        public static void setApplicationContext(
                ApplicationContext applicationContext) {
            GlobalContainer.applicationContext = applicationContext;
        }
    }
    
    @Component
    @Order(value = 0)
    public class ProviderUtilHelper implements ApplicationRunner {
       private  Logger logger = LoggerFactory.getLogger(getClass());
       @Autowired
       private ApplicationContext applicationContext;
       @Override
       public void run(ApplicationArguments args) throws Exception {
          logger.info("===========注入springcontext对象================");
          GlobalContainer.setApplicationContext(applicationContext);
       }
    
    }
    
  • 将java编译分层,配置一个环境变量即可,具体可以参考https://www.jianshu.com/p/318617435789/

    这种效果最显著

    image-20220729112659407

    JAVA_TOOL_OPTIONS	-XX:+TieredCompilation -XX:TieredStopAtLevel=1
    
  • 将lambda的运行环境改成arm架构,需将使用java11

  • 采用其它的ioc容器

  • 将java代码编译成exe,有待aws支持

  • 内存设置为1.75g可以获取到全部的cpu资源