在今天的文章中,我们将探讨如何修复Ruby中常见的内存使用问题。 Ruby最常见的问题是内存占用,在其他基于JVM的语言中也相当常见(没错,Java,我说的就是你)。实际上,Ruby的垃圾回收(简称GC)机制与Java非常接近。如果使用不当,会造成很大的问题(如下图所示)。在这种情况下,GC会停止工作,消耗服务器整体的CPU资源,甚至导致服务器重启。 Unicorn和Ruby内存泄漏导致服务器停机。 如何解决? 1.定期重启你的Ruby 如果你使用的是流行的Unicornweb服务器,内存问题可能会更严重——这是因为Unicorn使用了fork机制。在fork过程中,它会复制所有父内存内容(简称CoW)。因此,您可能希望使用“UnicornWorkerKiller”gem来监控服务器,并在内存达到新高或请求数增加到一定水平时重启服务器。由于此gem支持随机化,因此服务器本身很可能不会受到影响。 2.安装这个杀手: 3.调整内存 如果您使用的是Ruby2.X版本,通过配置Unicorn可以更好的使用CoW机制。 config/unicorn.rb 1)worker_processes:1xcomputingcore 2)timeout:作业请求超时时间,应该设置在15到30秒之间 3)preload_app:启用CoW,但需要Manageconnection/disconnectiononfork 4)认真考虑GC配置 总结:动态语言有一定的缺点,但是正确的设计可以让它一直在线,流畅运行。
