请分享您的想法在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

你好

您可以在solita.fi的博客文章中找到一些关于比较GraalVM原生图像的基准测试。特别是请看“Clojure在JVM AWS Lambdas中运行”这一章。

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

我还对常规JVM进行了基准测试。遗憾的是,Clojure的启动速度非常慢,并且这种启动速度随着项目规模的增大而急剧下降。慢速启动的主要原因通常是JVM类加载导致的。遗憾的是,Clojure会生成大量的类,因为每个Clojure变量的定义和函数都会编译成类。

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

这是个有趣的结果。我想知道为什么这个程序在Lambda上的运行时间比在普通电脑上更长。我的意思是,它只是返回Hello World!。在我的十年老笔记本电脑上,这肯定会在1秒内启动。

那使用deflambda会造成影响吗?
在Fargate上运行时,启动时间也不会低于1秒。我有很多年使用和构建Clojure在AWS上的经验,因此这些启动时间并不令人意外。

使用我的15英寸2017年款MacBook Pro在同一时间运行最小化后的Hello World uberjar可以得到,运行并退出在1.3 - 1.5秒之间。Lambda环境中的CPU性能未知(只能设置内存),但据我所知,最多只有两个线程。Clojure的启动是CPU密集型操作,这可能是为什么它在您的笔记本电脑上比在AWS Lambda上更快。

deflambda只是一个简单的宏,它为Lambda生成运行必要的类。它不会给测试带来额外的开销。
是的,但我仍在想是否还有其他原因。比如工件大小,需要下载Clojure,Spec等。

例如,我会假设Python、JS、Ruby和Java库在Lambda运行时中已经预先打包。因此它们不需要下载这些库并支付下载和 解压的成本。这可能不适用于Clojure,也许这就是它增加了这么多启动时间的原因。

native image对整个字节码做tree-shaking,可能也会在这里减少工件的大小。

没有说数据是错误的,只是这里似乎没有找到真正的根本原因,因为在旧电脑上加载类还是没有那么慢。例如,在我的2013款戴尔XPS笔记本电脑上,hello world clojure应用启动时间不到2秒。
by
在我的经验中,工件大小不是启动延迟的原因,因为Python Lambda在工件中捆绑大型库时不会出现任何明显的减速。

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

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

这可能是Lambda使用的JVM,或者是Lambda特有的某些怪癖。了解这一点可能有助于改善状况。也许3GB的Lambda正在运行非常受限的CPU,或者拥有非常慢的磁盘IO,或者类似的东西。

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