我想在Rails项目上启用YJIT。我已经将代码库移到了Ruby 3.2,并试图通过在一个接收50%流量的金丝雀版本中将RUBY_YJIT_ENABLE
设置为1
来启用YJIT,这样我就可以并排看到两者。在canary版本中,设置了env var,当我SSH进入生产环境时,我得到:
~/app $ env | grep YJIT
RUBY_YJIT_ENABLE=1
~/app $ ruby -v
ruby 3.2.2 (2023-03-30 revision e51014f9c0) +YJIT [x86_64-linux-musl]
不幸的是,我没有看到others are reporting的性能优势。下面您可以看到两个图表,一个是内存使用情况,另一个是请求的平均请求时间。在这两个图中,蓝色是启用YJIT的金丝雀版本,黄色是禁用YJIT的版本(都是ruby 3.2)。
所以我想问一下,我还需要做什么吗?ruby -v
输出是否意味着启用了YJIT?rustc
是YJIT工作的运行时依赖项吗?因为我现在的系统不包括它。
1条答案
按热度按时间at0kjp5o1#
我的理解是,
+YJIT
表示启用了YJIT。我找不到任何官方文档可以参考,但看起来rustc
是Ruby 3.2的编译时依赖项,而不是运行时依赖项。我使用的docker镜像ruby:3.2.2-alpine3.18
只有33MB,因为它使用C编译Ruby,使用Rust编译YJIT。然后它只复制Ruby二进制文件和依赖项,其中包括YJIT。您可以使用以下命令验证YJIT是否实际运行。此外,查看您的图表(尽管它们缺少图例,所以我假设浅蓝色是使用YJIT的金丝雀),RAM使用率更高,这是预期的权衡(RAM与CPU),虽然并不总是更快,但响应时间看起来往往更快。