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

Ruby on rails 当Heroku内存不足时会发生什么?,ruby-on-rails,heroku,Ruby On Rails,Heroku,我在Ruby on Rails应用程序中发现heroku内存不足错误。如果发生这种情况,会发生什么情况?首先,您将收到R14错误,警告您超出应用程序的内存配额。您可能会看到您的应用程序开始慢慢停止 R14-超出内存配额 一个dyno需要的内存超过了它的配额(1X dynos需要512MB,2X dynos需要1024MB,PX dynos需要6GB)。如果发生此错误,dyno将分页以交换空间以继续运行,这可能会导致进程性能下降 如果您的应用程序继续消耗超过这一点的内存,您将收到一个R15错误,

我在Ruby on Rails应用程序中发现heroku内存不足错误。如果发生这种情况,会发生什么情况?

首先,您将收到R14错误,警告您超出应用程序的内存配额。您可能会看到您的应用程序开始慢慢停止

R14-超出内存配额

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

如果您的应用程序继续消耗超过这一点的内存,您将收到一个R15错误,并且您的应用程序将被终止

R15-内存配额大大超过

dyno需要的内存远远超过其配额,并且占用了过多的交换空间。如果发生此错误,平台将终止dyno


请注意,它显示为killed,这意味着您的应用程序此时很可能处于脱机状态,直到您采取进一步措施。

谢谢!这是个愚蠢的问题,但除了增加dynos的数量,我还能做些什么呢?我会首先检查您正在使用的web服务器中是否存在已知的内存泄漏问题,无论是单独使用还是与Heroku堆栈配对使用。然后,您可以继续对应用程序进行一些分析,看看是否有值得进行的优化。这里有一个之前的答案可以让你开始:喜欢这个,一定要尝试分析。内存在服务器中是如何工作的?如果一个请求占用500kb的内存并持续3秒,那么在请求结束时,我们会将内存取出,对吗?按照这个速率,300 MB的内存应该足以同时处理600个请求。为什么我会在2-3个同时请求时出错?这取决于您使用的服务器。例如,如果您使用的是Unicorn,那么您启动的每个工作进程将消耗至少两个100Mb的RAM。这是因为每个进程都是一个独立的进程,它还有其他好处,可以证明大量内存的使用是合理的。如果内存使用量过大,可以直接获取R15错误,而不必首先获取R14。R15之后,容器将被终止并自动重新启动。只试过一次,所以我不确定它是否会永远重新启动。