当Heroku内存不足时会发生什么?

7

我的Ruby on Rails应用程序在Heroku上出现低内存错误。如果发生这种情况,会发生什么?


1
https://devcenter.heroku.com/articles/error-codes#r14-memory-quota-exceeded - Prakash Murthy
1个回答

8

首先,您将收到一个R14错误,警告您超出了应用程序的内存配额。您可能会看到您的应用程序开始减速。

R14 - 内存配额超限

一个dyno需要超过其配额的内存(1X dynos为512MB,2X dynos为1024MB,PX dynos为6GB)。如果发生此错误,dyno将分页到交换空间以继续运行,这可能会导致进程性能下降。

https://devcenter.heroku.com/articles/error-codes#r14-memory-quota-exceeded

如果您的应用程序继续消耗更多的内存,超过此点,您将收到R15错误,并且您的应用程序将被终止。
R15 - 内存配额大量超出
一个dyno需要比它的配额更多的内存,并且正在消耗过多的交换空间。如果出现此错误,则平台将杀死dyno。

https://devcenter.heroku.com/articles/error-codes#r15-memory-quota-vastly-exceeded

请注意它说“killed”,这意味着您的应用程序此时很可能处于离线状态,直到您采取进一步行动为止。

谢谢!这个问题可能有点傻,但除了增加 dynos 数量,还有什么我可以做的吗? - Will Taylor
我会先检查一下你正在使用的Web服务器是否存在任何已知的内存泄漏问题,无论是单独使用还是与你的Heroku堆栈配对使用。然后,您可以继续对应用程序进行一些分析,以查看是否有任何值得优化的地方。这里有一个之前的答案,可能会帮助你入手:http://stackoverflow.com/questions/22101737/rails-4-memory-profiling - Drenmi
喜欢这个,一定会尝试分析。服务器内存是如何工作的?如果一个请求占用了500kb的内存并持续3秒钟,那么在请求结束时,我们会拿回内存,对吧?按照这个速率,300mb的内存应该足够支持600个同时请求。为什么我在2-3个同时请求时会出现错误? - Will Taylor
这取决于您使用的服务器。例如,如果您使用的是Unicorn,则每个启动的工作进程将消耗至少几百兆字节的RAM。这是因为每个进程都是单独的,具有其他可以证明沉重的内存使用量的好处。 - Drenmi
我尝试自己模拟了一下。如果内存使用过大,你可以直接获得R15错误,而不必先获得R14错误。在发生R15错误后,容器会被自动杀死并重新启动。我只试过一次,所以不确定它是否会一直重新启动。 - hoshiKuzu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接