请在 2024 状态的 Clojure 问卷调查! 中分享你的想法。

欢迎!请访问 关于 页面,了解更多关于这个功能的信息。

+2
工具

我正在阅读这篇文章: https://mikhail.io/serverless/coldstarts/aws/languages/,并注意到即使是 Go 语言,冷启动通常也需要 250ms 到 450ms。

我的惊讶在于即使是“快速启动”的语言,在 AWS Lambda 冷启动时也是如此慢。所以我一直想知道 Clojure 实际上有多慢?由于 Lambda 的冷启动本身就带有很大的开销,如果我们从 Go 的平均 300ms 到 Clojure 的平均 600ms,实际上可能并不重要,因为用户已经能够感觉到速度的减缓。

但是当我尝试在网上搜索时,我找不到任何使用 Clojure 实际做的基准测试。我只能找到 ClojureScript 或 GraalVM 原生图像 Clojure 的基准测试。

有没有人做了关于 AWS Lambda 冷启动的 Clojure 基准测试(理想情况下越近越好,因为 AWS 在近年来极大地改善了 JVM 冷启动)。

1 个回答

+1

你好

你可以在 my blog post at dev.solita.fi 中找到一些关于 GraalVM 原生图像基准测试的比较。特别看“Clojure 运行在 JVM AWS Lambda”这一章节。

https://dev.solita.fi/2018/12/07/fast-starting-clojure-lambdas-using-graalvm.html

我还对常规JVM进行了基准测试。遗憾的是,Clojure启动非常慢,且这种启动时间随着项目规模的增大而严重扩展不良。缓慢的启动时间主要由JVM类加载引起。遗憾的是,Clojure会生成很多类,因为每个Clojure变量定义和函数都被编译成类。

使用Clojure而没有GraalVM,您将看不到低于2秒的启动时间。

by
结果很有趣。我在想,为什么这个程序在Lambda上的运行时间比在普通电脑上长那么多。我的意思是,它只是返回“Hello World”!在我的10年前的笔记本电脑上,这肯定会在1秒内完成。

那个deflambda脚本是不是有责任?
by
在Fargate上运行时,启动时间也不低于1秒。我多年来一直在AWS中构建和运行Clojure,因此这些启动时间不足为奇。

在MacBook Pro (15-inch, 2017) 上以最少的“Hello World”uberjar运行并退出需要1.3-1.5秒。Lambda环境中的CPU性能未知(只能设置内存),但据我所知,它最多只有两个线程。Clojure启动是一个CPU密集型操作,这或许可以解释为什么它在您的笔记本电脑上比在AWS Lambda上运行更快。

deflambda只是一个简单的宏,它生成Lambda运行所需的必要类。它不会给测试带来任何开销。
by
是的,但我还在想,是否还有其他情况没有发生。比如构件大小,必须拖Clojure、Spec等。

例如,我假设Python、JS、Ruby和Java库已经在Lambda运行时中捆绑。所以它们不需要下载这些语言,也不需要支付下载和解压的成本。这在Clojure中可能不成立,这也是它为什么启动时间那么长的一个可能因素。

例如,原生镜像会对整个二进制码进行tree-shaking,这也有可能在此方面减少构件大小。

并不是说数据是错误的,只是这里似乎并没有真正的根本原因,因为旧电脑上的类加载仍然不是特别慢。以我的2013年戴尔的XPS为例,我hello world clojure应用启动时间不到2秒。
在我的经验中,工件大小并不是启动延迟的原因,因为Python Lambda在工件中打包大库时并不会出现任何明显的减速。

这篇帖子是关于Clojure启动的详尽解释。
http://clojure-goes-fast.com/blog/clojures-slow-start/

如你所读——Clojure的启动至少需要一秒,这是目前无法避免的。Lambda环境在初始化时会增加几百毫秒,可以通过比较不同运行时的冷启动和热启动来测试。
我知道Clojure有一个较慢的初始化过程,但是即便是这样,Hello World的启动时间也不应该超过2秒,特别是在拥有30GB内存的Lambda上。我仍然对探究其根本原因感兴趣。正如你提供的链接所示,Clojure的初始化需要1秒钟。在我的旧笔记本电脑上,我有一个1.7GHz的双核i7处理器和4GB内存:[http://www.notebookreview.com/notebookreview/dell-xps-13-review-an-ultrabook-for-business-pros/2/](http://www.notebookreview.com/notebookreview/dell-xps-13-review-an-ultrabook-for-business-pros/2/),Clojure的Hello World应用启动时间仍然不到2秒。

可能是JVM Lambda使用的版本,或者是一些Lambda特有的怪异行为。了解这些可能会帮助我们改善这种情况。也许3GB的Lambda确实运行在一个受限的CPU上,或者磁盘I/O非常慢,或者类似的情况。

感谢您提供的所有细节和进行的基准测试。
欢迎来到Clojure Q&A,您可以在这里提出问题,并从Clojure社区的成员那里获得答案。
...