”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 使用 Docker 容器映像的 Lambda 函数 - 使用 Java(运行时)部分确保 Lambda 函数的冷启动和热启动

使用 Docker 容器映像的 Lambda 函数 - 使用 Java(运行时)部分确保 Lambda 函数的冷启动和热启动

发布于2024-11-03
浏览:253

Lambda function using Docker Container Image -Part easuring cold and warm starts of Lambda function with Java ( runtime

介绍

在我们的小系列的第一篇文章中,我们探讨了如何使用 Docker 容器镜像和 Java 运行时来开发和部署 Lambda 函数。我们探索了 2 个用例:

  • AWS Lambda 基础 Docker 容器映像
  • 仅限 AWS 操作系统的基础映像

在本文中,我们将使用 AWS Lambda 基础 Docker 容器映像的方法来测量 Lambda 函数的冷启动和热启动。

使用 AWS Lambda 基础 Docker 容器映像和 Java (21) 运行时测量 Lambda 函数的冷启动和热启动

对于我们的测量,我们将使用第一部分中的示例应用程序,并为 Lambda 函数使用 Java 21 运行时。对于所有 Lambda 函数,我们提供 1024 MB 内存并使用 JAVA_TOOL_OPTIONS:“-XX: TieredCompilation -XX:TieredStopAtLevel=1”,因为此编译选项在冷启动时间和热启动时间之间提供了非常好的权衡。

下面的实验结果基于使用 Lambda 函数 GetProductByIdWithPureJava21GraalVMNativeImageLambda 在 1 小时内重现超过 100 次冷启动和大约 100.000 次热启动,该函数映射到 Java Lambda 处理程序类,负责检索产品(存储)在 DynamoDB 中)按 id。为此,我使用了负载测试工具,但是您可以使用任何您想要的工具,例如 Serverless-artillery 或 Postman。

冷 (c) 和热 (m) 启动时间(以毫秒为单位):

c p50 c p75 c p90 c p99 c p99.9 c 最大 w p50 w p75 w p90 w p99 w p99.9 w 最大值
3093.26 3219.44 3314.12 4632.16 6513.35 6517.71 5.47 6.20 7.39 17.14 43.03 1386.07

结论

在本文中,我们使用 AWS Lambda 基础 Docker 容器映像的方法测量了 Lambda 函数的冷启动和热启动时间。与使用具有 1024 MB 内存的 Lambda 和 Lambda Java 21 托管运行时的不同 Lambda 内存设置使用 Java 21 测量冷启动和热启动相比,我们经历了相当显着的冷启动和相当有竞争力的热启动时间。

AWS Lambda SnapStart 可显着缩短冷启动时间,目前仅适用于 Java Corretto 托管运行时(11、17 和 21),不适用于 Docker 容器映像。您可以探索 jlink 工具,将一组模块及其依赖项组装和优化为更小的自定义运行时映像和类数据共享 (CDS),但这有助于减少 Java 编程语言应用程序(特别是较小的应用程序)的启动时间,以及减少占地面积。使用 Docker 映像作为 Java 部署工件的优点是能够使用最新的 Java 运行时,例如 Java 22(Java 23 将于 2024 年 9 月发布)。

版本声明 本文转载于:https://dev.to/aws-builders/lambda-function-using-docker-container-image-part-2-measuring-cold-and-warm-starts-of-lambda-function-with-java-21-runtime-mof?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • Python 线程模块快速指南及示例
    Python 线程模块快速指南及示例
    介绍 Python 中的线程模块提供了一个高级接口来创建和管理线程,使您能够并发运行代码。这对于可以并行执行的任务(例如 I/O 密集型操作)特别有用。下面列出了threading模块中常用的方法和函数,并附有简要示例。 1. 线程() Thread 类是线程模块的...
    编程 发布于2024-11-08
  • ✨ 从贡献者到核心项目维护者:我的开源之旅 ✨
    ✨ 从贡献者到核心项目维护者:我的开源之旅 ✨
    这一切都始于一个简单的拉取请求...... 我记得当我第一次涉足开源世界时。我最初的目标只是解决我欣赏的项目中的一个小问题。我几乎不知道,这一小小的贡献将开始一段令人难以置信的旅程。 第 1 步:作为贡献者开始 最初,我对贡献感到紧张。我不确定我的代码是否足够好或者我的解决方案是否有效。但随着时间的...
    编程 发布于2024-11-08
  • 编程基础:C 简介
    编程基础:C 简介
    C语言基础:变量和类型: 定义变量以存储数据,类型指定存储的数据类型。输入输出: printf() 输出到屏幕,scanf() 读取用户输入。运算符: 使用算术和比较运算符进行运算和比较。控制流: if-else 和 switch-case 用于选择性执行代码,循环用于重复执行代码。函数: 定义和调...
    编程 发布于2024-11-08
  • Mixin 如何在没有传统继承的情况下增强类功能?
    Mixin 如何在没有传统继承的情况下增强类功能?
    理解 Mixins:类扩展的模块化方法mixin 是一种软件设计模式,允许组合多个类,提供一种扩展基类功能而不直接继承基类的方法。这种技术通常被称为“抽象子类”,因为它类似于继承的概念,但具有更灵活和更精细的方法。要了解 mixin 的工作原理,让我们检查以下示例:// Number class s...
    编程 发布于2024-11-08
  • PHP 中可以像 JavaScript 一样创建匿名对象吗?
    PHP 中可以像 JavaScript 一样创建匿名对象吗?
    在 PHP 中创建匿名对象在 JavaScript 中,可以轻松创建匿名对象。然而,这种技术也可以应用于 PHP 吗?术语解释在讨论对象时,术语“匿名”并不完全准确。相反,它应该被称为“匿名类型的对象”。PHP 对象创建在 PHP 中,所有对象都有一个指定的类。默认类是stdClass,该类的对象可...
    编程 发布于2024-11-08
  • 为什么我的程序仅在 Windows Vista 的发布模式下崩溃?
    为什么我的程序仅在 Windows Vista 的发布模式下崩溃?
    仅在发布版本中程序崩溃:深入研究调试晦涩之处遇到一个奇特的“薛定谔猫”错误可能会让程序员感到困惑。在这种情况下,只有在发布模式下构建并从命令行启动时,程序才会可靠地崩溃,并留下神秘的终止通知。追踪崩溃的根源通过细致的调试,罪魁祸首方法已经被识别出来,但崩溃本身驻留在最后一个可见跟踪消息之后执行的析构...
    编程 发布于2024-11-08
  • Python 循环 2
    Python 循环 2
    大家好!这是 python 循环系列的第二部分。 第 1 部分在这里: https://dev.to/coderanger08/python-loops-1-5dho 本周,我们将更多地讨论 while 和 for 循环、break 和 pass 语句、范围函数等等。让我们开始吧。 ...
    编程 发布于2024-11-08
  • Spring Boot:Java 应用程序开发的革命
    Spring Boot:Java 应用程序开发的革命
    如果你用Java开发,你可能听说过Spring Boot。但如果您还不知道,请准备好发现最强大、最实用的工具之一,它彻底改变了 Java 应用程序的创建方式! 什么是 Spring Boot? Spring Boot 是一个框架,它使 Java 应用程序的开发变得更加容易(而且更加容易!)。它消除了...
    编程 发布于2024-11-08
  • LESS CSS 伪元素选择器中与号 (&) 的作用是什么?
    LESS CSS 伪元素选择器中与号 (&) 的作用是什么?
    揭秘 CSS 伪元素选择器中的 & 符号当在 CSS 中遇到这样的代码时,很自然地想知道 & 符号 (&) 的意义) 字符:.clearfix { *zoom: 1; &:before, &:after { display: table; ...
    编程 发布于2024-11-08
  • 如何在没有子查询的情况下在 MySQL 中更新行并获取更新的 ID?
    如何在没有子查询的情况下在 MySQL 中更新行并获取更新的 ID?
    在 MySQL 中组合 SELECT 和 UPDATE 查询将 SELECT 和 UPDATE 查询组合成单个操作对于优化数据库性能非常有用。在这种情况下,用户希望组合以下查询:SELECT * FROM table WHERE group_id = 1013 and time > 100;U...
    编程 发布于2024-11-08
  • 将 SQLite 迁移到 MySQL。
    将 SQLite 迁移到 MySQL。
    我介绍一下自己,我是 Alfredo Riveros,我已经学习编程多年了,我目前正在 Río Tercero 高等商业学院学习软件开发高级技术员,下面我将描述我面临的挑战遭遇。 正如标题所说,我的目标是将 SQLite 数据库迁移到 MySQL,这是由我正在接受的数据库主题中的作业引起的。 我选择...
    编程 发布于2024-11-08
  • 在 Mageia 9 上安装 ASDF
    在 Mageia 9 上安装 ASDF
    今天我们要在 Mageia 9 上安装 ASDF。接下来的步骤是将插件安装到 PHP 和 Node.js。 要在版本 0.14.1 上安装 ASDF,我使用了 Git ZSH 版本: git克隆 https://github.com/asdf-vm/asdf.git ~/.asdf --branch...
    编程 发布于2024-11-08
  • 优化性能:为数据透视表选择最佳数据源
    优化性能:为数据透视表选择最佳数据源
    TL;DR: Syncfusion Pivot Table connects to multiple data sources, making it a versatile tool for data analysis. Selecting the right data source is cruc...
    编程 发布于2024-11-08
  • 使用 Secrets Loader 轻松管理 Laravel 和 JS 项目
    使用 Secrets Loader 轻松管理 Laravel 和 JS 项目
    跨各种环境管理 API 密钥、令牌和凭证等敏感数据可能非常棘手,尤其是在开发和部署应用程序时。确保秘密在需要时安全地存储和获取,而不是将它们硬编码到版本控制中,对于维护安全性至关重要。 这就是为什么我创建了 Secrets Loader,这是一个 Bash 脚本,可以动态地将 AWS SSM 和 C...
    编程 发布于2024-11-08
  • 如何在 Android 中正确实现 CheckBox 的侦听器?
    如何在 Android 中正确实现 CheckBox 的侦听器?
    Android 中的 CheckBox 侦听器在 Android 中实现 CheckBox 侦听器时,必须解决使用标准时面临的常见问题OnCheckedChangeListener 类。标准实现的目标是 RadioGroup 而不是 CheckBox。要解决此问题,请改用CompoundButton...
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3