我有一个Rails 2.3.8应用程序在Slicehost(256m)上托管并运行。我对后端根本不熟悉,我基本上遵循Slicehost教程的步骤安装Apache。内存使用率很高,然后我更改了Apache Conf文件,以将最大数字降低到10 ...但是我的切片仍在交换。

这是我网站上只需单击几下后获得的内存使用量:

    top - 23:57:12 up 28 min,  2 users,  load average: 0.43, 0.54, 0.30
Tasks:  79 total,   1 running,  78 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.1%us,  0.1%sy,  0.0%ni, 97.8%id,  0.1%wa,  0.0%hi,  0.0%si,  2.0%st
Mem:    262364k total,   258656k used,     3708k free,      260k buffers
Swap:   524280k total,   262772k used,   261508k free,     6328k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                       
 4004 web-app   20   0  178m  72m 1888 S    0 28.4   0:04.38 ruby1.8                                        
 4001 web-app   20   0  172m  61m 1932 S    0 24.2   0:02.72 ruby1.8                                        
 3941 root      20   0  164m  57m 1672 S    0 22.5   0:21.44 ruby                                           
 3990 web-app   20   0  209m  21m 1696 S    0  8.4   0:18.00 ruby1.8                                        
 3950 web-app   20   0  165m 7464 1548 S    0  2.8   0:20.40 ruby1.8                                        
 3684 mysql     20   0  224m 6504 2084 S    0  2.5   0:14.34 mysqld                                         
 3938 root      20   0 53632 3048 1036 S    1  1.2   0:01.50 starling                                       
 3839 root      20   0  243m 1456 1248 S    0  0.6   0:00.34 apache2                                        
 3897 www-data  20   0  243m 1452 1072 S    0  0.6   0:00.04 apache2                                        
 3894 www-data  20   0  243m 1368 1008 S    0  0.5   0:00.04 apache2                                        
 3895 www-data  20   0  243m 1220  960 S    0  0.5   0:00.02 apache2                                        
 3888 root      20   0 46520 1204 1100 S    0  0.5   0:02.29 ruby1.8                                        
 3866 root      20   0 17648 1184  896 S    0  0.5   0:00.08 bash                                           
 3896 www-data  20   0  243m 1180  952 S    0  0.4   0:00.00 apache2                                        
 3964 www-data  20   0  243m 1164  956 S    0  0.4   0:00.02 apache2                                        
 3892 www-data  20   0  243m 1132  956 S    0  0.4   0:00.00 apache2                                        
 3948 www-data  20   0  243m 1132  956 S    0  0.4   0:00.00 apache2                                        
 3962 www-data  20   0  243m 1132  956 S    0  0.4   0:00.02 apache2                                        
 3963 www-data  20   0  243m 1132  956 S    0  0.4   0:00.00 apache2                                        
 3965 www-data  20   0  243m 1080  888 S    0  0.4   0:00.00 apache2                                        
 3887 root      20   0 89008  960  796 S    0  0.4   0:00.00 ApplicationPool                                

我不确定下一步该怎么做...我可以升级到更大的切片,但是现在我几乎没有此应用程序的流量,所以我认为我的配置或代码可能更有问题?

欢迎任何具体建议!谢谢

有帮助吗?

解决方案

看起来您的Rails应用程序正在使用所有可用的内存。我会推荐三件事:

  1. 升级服务器上的内存。对于Rails应用程序,256MB并不多。到512可能会减轻您的问题。如果解决问题,那么您需要考虑额外的成本($ 18/mo),而要花多少时间来追踪性能问题。

  2. 配置您的应用程序,以找出哪些请求消耗最多的内存。在这里,您可能会发现很多记录,也可能包括一些相关表。那里有几个工具可以帮助您缩小可能的麻烦区域。我用过了 Oink 但是肯定还有其他。一旦弄清楚问题的位置,就可以进行一些调整以尝试减少内存使用量。

  3. 假设您使用的是带有Apache的乘客,则可以减少乘客配置文件中的并发请求数量。这可能对此有用 https://serverfault.com/questions/15350/running-ruby-on-rails-rails-app-on-apache-passenger-passenger-to-memory

其他提示

简而言之,256MB用于铁轨应用程序。您并没有真正提供有关如何运行导轨的任何细节,但我认为您正在使用Apache与乘客模块一起使用。可以在其持续运行的数量上配置乘客模块。您有4个Ruby实例在Web应用帐户下运行。我想那些来自乘客。在配置中,您可以限制乘客启动多少实例。这将减少内存要求。

另一方面,仅使用256MB工作时,当您仅托管1个Rails应用程序时,最好选择其他设置。我以前使用过的设置是NGINX Web服务器,还有一个带有2个杂种的杂种群集(在192MB上,应用仅用于测试目的)。基本上,这意味着您可以并行处理2(和2)导轨请求。设置可能比Apache+乘客要难一些,但绝对不难。我认为,当您坚持使用256MB时,这是一种更具性能的解决方案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top