Ruby已死——必须关注的内存问题

译文
运维 服务器运维
如果大家使用的是高人气Unicorn Web服务器,那么内存问题可能会更加严重——这是因为Unicorn采用fork机制。在fork过程中,其会对全部父内存内容进行复制(简称CoW)。

   在今天的文章中,我们将探讨如何解决Ruby当中常见的内存使用问题。

  Ruby语言当中最为常见的就是内存使用问题,这一点在其它基于JVM的语言中亦颇为普遍(是的,Java,说的就是你)。事实上,Ruby的垃圾回收(简称GC)机制与Java非常接近。如果使用不当,其会带来巨大的麻烦(正如下图所示)。在这类情况下,GC会停止运作,同时消耗服务器的整体CPU资源,甚至导致服务器重启。

  Unicorn与Ruby内存泄露导致服务器宕机。

  如何解决?

  一、定期重启您的Ruby

  如果大家使用的是高人气Unicorn Web服务器,那么内存问题可能会更加严重——这是因为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配置

  总结:动态语言存在着一定短板,然而正确的设计却能帮助其始终在线且顺畅运行。

责任编辑:张诚 来源: 51CTO
相关推荐

2011-05-11 09:01:29

面向对象技术函数式语言

2011-01-07 10:18:28

RSSWeb

2023-02-06 07:37:29

Java编程语言

2022-09-15 10:44:42

SidecarIstioeBPFizer

2015-08-31 10:59:22

2014-01-06 09:36:53

IT部门BYODBYOA

2012-02-20 10:12:09

Java

2011-12-07 10:20:19

Email新闻

2021-01-19 10:58:15

漏洞管理漏洞数据泄露

2023-03-29 08:13:17

2010-05-13 16:14:15

云计算

2021-04-19 08:17:42

MesosKubernetesLinux

2020-02-29 15:18:10

DevOpsNoOps运维

2013-01-31 17:23:20

RIM黑莓BB10

2024-09-03 09:31:59

2020-02-19 11:35:21

iPhone越获PP助手

2019-12-10 13:01:08

安全网络风险数据

2023-11-15 15:37:21

大模型人工智能

2020-12-15 10:40:14

CentOSRockyLinux

2021-04-27 06:32:23

ERP中台代码
点赞
收藏

51CTO技术栈公众号