共计 849 个字符,预计需要花费 3 分钟才能阅读完成。
这篇文章主要讲解了“如何解决 Ruby 当中常见的内存使用问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“如何解决 Ruby 当中常见的内存使用问题”吧!
Ruby 语言当中最为常见的就是内存使用问题,这一点在其它基于 JVM 的语言中亦颇为普遍 (是的,Java,说的就是你)。事实上,Ruby 的垃圾回收(简称 GC) 机制与 Java 非常接近。如果使用不当,其会带来巨大的麻烦(正如下图所示)。在这类情况下,GC 会停止运作,同时消耗服务器的整体 CPU 资源,甚至导致服务器重启。
Unicorn 与 Ruby 内存泄露导致服务器宕机。
如何解决?
一、定期重启您的 Ruby
如果大家使用的是高人气 Unicorn Web 服务器,那么内存问题可能会更加严重 mdash; mdash; 这是因为 Unicorn 采用 fork 机制。在 fork 过程中,其会对全部父内存内容进行复制(简称 CoW)。因此,大家可能需要使用“Unicorn Worker Killer” gem 以监控服务器并在内存达到新高点或者请求数量增加至一定水平时进行重启。由于该 gem 支持随机化,因此服务器本身很可能并不会受到影响。
二、安装此 killer:
三、调整内存
如果大家使用的是 Ruby 2.X 版本,则可通过配置 Unicorn 更好地使用 CoW 机制。
config/unicorn.rb
1)worker_processes: 1x 计算核心
2)timeout: 工作请求超时,应设定在 15 到 30 秒区间
3)preload_app: 启用 CoW,但要求在 fork 上管理连接 / 断开
四)认真考虑 GC 配置
动态语言存在着一定短板,然而正确的设计却能帮助其始终在线且顺畅运行。
感谢各位的阅读,以上就是“如何解决 Ruby 当中常见的内存使用问题”的内容了,经过本文的学习后,相信大家对如何解决 Ruby 当中常见的内存使用问题这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!