Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top