Experimental feature in GraalVM

部署 TruffleRuby

如果您正尝试将 TruffleRuby 部署到生产环境进行试验,我们鼓励您联系我们,以便我们帮助您了解当前的可能性并解决您可能遇到的任何问题。

本文档详细介绍了 TruffleRuby 的不同运行时配置。

TruffleRuby 运行时配置 #

TruffleRuby 主要有两种配置:原生JVM。了解 TruffleRuby 的不同配置非常重要,因为每种配置都具有不同的功能和性能特点。您应该选择适合您应用程序的执行模式。

原生配置 #

在原生独立模式下,TruffleRuby 以原生配置运行。在此配置中,TruffleRuby 被预编译成一个独立的本机可执行文件。这意味着您的系统上不需要安装 JVM 即可使用它。

原生配置的优势在于它启动速度与 MRI 相近,内存使用可能更少,并且比 JVM 配置更快达到高性能。缺点是您无法使用 VisualVM 等 Java 工具,Java 互操作性不如 JVM 配置方便(详情请参阅此处),并且峰值性能可能低于 JVM

默认使用原生配置,但您也可以通过使用 --native 来请求它。要在原生配置下使用多语言编程,您需要传递 --polyglot 标志。

JVM 配置 #

TruffleRuby 也可以在 JVM 配置下使用(通过使用 JVM 独立模式或通过嵌入),在这种模式下,它作为正常的 Java 应用程序在 JVM 上运行。JVM 配置的优势在于您可以轻松使用 Java 互操作性,并且峰值性能可能高于原生配置。缺点是它启动和达到高性能所需时间更长,并且可能使用更多内存。您可以通过传递 --jvm 来选择 JVM 配置。

选择最佳配置 #

如果您运行的是短时运行的程序,您可能希望使用默认的原生配置。如果您运行的是长时间运行的程序并希望获得尽可能高的性能,您可能希望通过使用 --jvm 来选择 JVM 配置。

获得最佳启动时间性能 #

在大多数情况下,为了获得最佳启动时间,您会希望使用默认的原生配置。

获得最低内存占用 #

为了获得最低内存占用,您最初可能希望使用原生配置,但随着您获得更大的工作对象集,您可能会发现更简单的垃圾收集器和目前缺乏压缩的普通对象指针 (OOPS) 实际上会增加您的内存占用,此时使用 --jvm 的 JVM 配置来减少内存使用会更好。

从 TruffleRuby 获得最佳峰值性能 #

对于长时间运行的应用程序,为了从 TruffleRuby 获得最佳峰值性能,我们通常会推荐使用 --jvm 的 JVM 配置。

然而,要达到这种峰值性能,您需要对 TruffleRuby 进行预热,就像您对大多数重度优化型虚拟机所做的那样。这可以通过在负载下运行应用程序一段时间来完成。如果您监控性能(通过测量操作时间或响应时间),您会看到它随着时间的推移而降低,然后可能趋于稳定。

日志记录 #

Ruby 应用程序的日志记录和警告功能与 Ruby 的标准实现相同。

对于 TruffleRuby 内部组件的日志记录,使用标准 Java 日志。日志级别可以通过 --log.level=INFO=FINEST 等进行设置。

联系我们