Проблема с заменой приложения Rails на slicehost
-
10-10-2019 - |
Вопрос
У меня есть приложение 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 использует всю вашу доступную память. Я бы порекомендовал три вещи:
Обновите память на вашем сервере. 256 МБ не очень для приложения Rails. Переход в 512 может облегчить вашу проблему. Если это решает это, вам необходимо рассмотреть дополнительные затраты (18 долларов США/месяц) по сравнению с сколько времени потребуется для отслеживания проблем с производительностью.
Профилируйте ваше приложение, чтобы выяснить, какие запросы потребляют наибольшую память. Вероятно, это будут места, где вы найдете много записей и, возможно, включая некоторые связанные таблицы. Есть несколько инструментов, которые помогут вам сузить возможные проблемы с проблемами. Я использовал оформление Но есть определенно другие. После того, как вы выясните, где возникают проблемы, вы можете внести несколько настроек, чтобы попытаться уменьшить использование памяти.
Предполагая, что вы используете пассажир с 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 МБАЙТ.