Проблема подкачки для приложения Rails на slicehost - PullRequest
1 голос
/ 09 декабря 2010

У меня есть приложение Rails 2.3.8, размещенное и работающее на slicehost (256M). Я совсем не знаком с бэкэндом, я в основном следовал инструкциям из учебников по slicehost для установки Apache. Использование памяти было очень высоким, затем я изменил свой файл конфигурации Apache, чтобы уменьшить число MaxClient до 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                                

Я не уверен, что делать дальше ... Я мог бы перейти на более крупный фрагмент, но на данный момент у меня почти нет трафика в этом приложении, поэтому я думаю, что это больше проблема с моей конфигурацией или, возможно, моим кодом?

Любые конкретные рекомендации приветствуются! Спасибо

Ответы [ 2 ]

1 голос
/ 09 декабря 2010

Короче говоря, 256 Мбайт жестко для приложения Rails.Вы на самом деле не дали никаких подробностей о том, как вы используете rails, но я предполагаю, что вы используете Apache с модулем Passenger.Пассажирский модуль может быть настроен на то, сколько экземпляров он продолжает работать.У вас есть 4 экземпляра ruby, запущенных под учетной записью веб-приложения.Я полагаю, это от Пассажира.В конфигурации вы можете ограничить, сколько экземпляров запускается Passenger.Это уменьшит требования к памяти.

С другой стороны, при работе только с 256 МБ и при размещении только одного приложения на рельсы может быть лучше перейти к другой настройке.Установка, которую я использовал раньше, была веб-сервером Nginx и кластером монгрел с 2 монгрелами (на 192 МБ, и приложение предназначалось только для тестирования).По сути, это означает, что в любой момент вы можете обрабатывать 2 (и только 2) запроса рельсов параллельно.Настройка может быть немного сложнее, чем Apache + Passenger, но определенно не сложная.Я думаю, что это более производительное решение, когда вы используете 256 МБ.

1 голос
/ 09 декабря 2010

Похоже, ваше приложение rails использует всю доступную память.Я бы порекомендовал три вещи:

  1. Обновление памяти на вашем сервере.256 МБ не очень много для приложения Rails.Переход на 512 может облегчить вашу проблему.Если это решит проблему, вам нужно будет учесть дополнительные расходы (18 долл. / Мес.) В сравнении с тем, сколько времени потребуется для отслеживания проблем с производительностью.

  2. Профилируйте ваше приложение, чтобы выяснить, какиезапросы занимают больше всего памяти.Скорее всего, это будут места, где вы найдете много записей и, возможно, в том числе некоторые связанные таблицы.Есть несколько инструментов, которые помогут вам сузить область возможных проблем.Я использовал oink , но определенно есть и другие.Как только вы выясните, где проблемы, вы можете внести некоторые изменения, чтобы попытаться уменьшить использование памяти.

  3. Предполагая, что вы используете Passenger с Apache, вы можете уменьшить количество одновременныхзапросы в конфигурационном файле Passenger.Это может быть полезно для этого https://serverfault.com/questions/15350/running-ruby-on-rails-app-on-apache-passenger-to-much-memory

...