gpt4 book ai didi

ruby - 转换为 Ruby Enterprise 1.8.7 后内存大小增加

转载 作者:数据小太阳 更新时间:2023-10-29 07:35:04 26 4
gpt4 key购买 nike

从 Ruby 1.8.6 升级到 Ruby Enterprise 1.8.7 p334 时,内存大小几乎翻了一番。我们升级的五台 Fedora 8 服务器中的每一台都发生了这种情况。我们使用 Passenger 3.0.4 运行 Rails 1.2.6。

Munin 通过对 $ ps axo pid,comm,pmem,vsz,rsz 中的 vsz 和 rsz 列求和来获取每个进程的内存大小。 (虚拟内存大小和常驻内存大小都增加相同的量)

我意识到这些列通常夸大了进程实际使用的内存量,但如果将其用于测量 1.8.6 和 1.8.7 REE,它们应该同样膨胀,因此仍然具有可比性。

此外,机器的已提交内存(如/proc/memstat 中所列)现在定期过度使用,这是新的。提交的内存量显着增加,看起来我们现在进入了交换空间。

我们还没有调整垃圾回收,但我看不出这会对整体内存占用有何影响。

我已经按照 Phusion FAQ 的建议打开了 GC.copy_on_write_friendly 变量。

内存使用量增加 100% 的原因是什么?我该如何解决?任何有关如何修复或什至更好地监控/调试的想法,我们都将不胜感激。

谢谢。

---更新

为了检查性能,我将一台服务器上运行的实例数 (PassengerMaxPoolSize) 从 12 个减少到 10 个。另一方面,我已将 PassengerPoolIdleTime 提高到 15 分钟。我有三分之一用作对照。

我正在考虑在服务器上放一个非企业版1.8.7p334,看看是1.8.7还是企业版。

还有其他人遇到过此类问题吗?

查看各个 Rails 进程,如 passenger-memory-stats 所述,1.8.6 中每个进程大约 120MB,REE 1.8.7 中每个进程大约 175MB。

---更新 2

我将 MRI 1.8.7 放在服务器上以与 REE 1.8.7 进行比较。结果更糟,包括更高的内存驻留大小数和 passenger-memory-stats。当然,交换开始了。

这让我相信 1.8.7 的占用空间比 1.8.6 大。

---更新 3

我在服务器上安装了 MRI 1.8.7,它在内存使用方面比 MRI 1.8.6 差得多,所以我立即返回到 MRI 1.86。

我运行了 Rails 进程大小的平均值,如 passenger-memory-stats 所列。 REE 1.8.7 进程大了 73 MB,这看起来相当大。

这意味着我需要运行更少的进程以适应相同的内存占用。

将看到他们如何用更少的进程执行。我也开始了 GC 调优。

---更新 4

似乎 Ruby 1.8.7 不支持 Rails 1.2.6。第一个正式支持的 1.8.7 版本是 Rails 2.1。升级后我们会知道这是否是问题的根源。

最佳答案

您从 32 位版本的 Ruby 升级到 64 位版本的 Ruby。这使指针的大小加倍,其中有很多在运行时。

关于ruby - 转换为 Ruby Enterprise 1.8.7 后内存大小增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5237572/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com