Что определяет использование памяти в Ubuntu с Rails и MySQL - PullRequest
3 голосов
/ 03 октября 2009

Простите за вопрос типа новичка, но что определяет объем оперативной памяти, используемой rails и MySQL (мой сервер - Ubuntu)? Похоже, что на сервере почти нет запросов, которые колеблются около 1,5 из 2 ГБ. В MySQL хранится около 100 МБ данных. На сайте зарегистрировано около 3500 пользователей, а при высоком трафике объем памяти достигает 1,8 ГБ. Когда трафик низкий или отсутствует, он не сильно падает.

Каковы основные факторы потребления оперативной памяти при развертывании RoR? Я бы предположил размер БД, но размер моей БД далеко не соответствует потреблению ОЗУ (но, может быть, это неправильный способ думать об этом?).

Может кто-нибудь указать мне хороший ресурс по этому поводу или объяснить мне здесь?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 29 августа 2012

Я анализирую, какая самая тонкая конфигурация на сервере Ubuntu для запуска моего приложения Rails 3.2.6 с наименьшим объемом памяти в конфигурации Nginx + Unicorn. И используя локальную базу данных postgres.

После удаления многих сервисов, таких как whoopsie и apparmor, в Ubuntu, и предоставив только самые базовые процессы, я могу создать экземпляры своих рабочих с обеих сторон, nginx и единорога, всего на 500 МБ.

Это чисто ванильный запуск приложения. с одним подключением к базе данных. Это результат команд, выполненных до базовой линии с первым пользователем:

$ free -mt
             total       used       free     shared    buffers     cached
Mem:          3001        550       2450          0         16        178
-/+ buffers/cache:        355       2646
Swap:          952          0        952
Total:        3954        550       3403

$ ps -ef | grep nginx
root      1232     1  0 12:54 ?        00:00:00 nginx: master process /usr/sbin/nginx
www-data  1233  1232  0 12:54 ?        00:00:00 nginx: worker process
www-data  1234  1232  0 12:54 ?        00:00:00 nginx: worker process
www-data  1235  1232  0 12:54 ?        00:00:00 nginx: worker process
www-data  1236  1232  0 12:54 ?        00:00:00 nginx: worker process
herminio  5292  1078  0 13:24 pts/1    00:00:00 grep nginx

$ ps -ef | grep unicorn
herminio  4863     1  0 13:01 ?        00:00:00 unicorn_rails master -c unicorn.rb -D -E production                                                          
herminio  4866  4863  2 13:01 ?        00:00:34 unicorn_rails worker[0] -c unicorn.rb -D -E production                                                                                                         
herminio  5296  1078  0 13:24 pts/1    00:00:00 grep unicorn

$ ps -ef | grep postg
postgres   935     1  0 12:54 ?        00:00:00 /usr/lib/postgresql/9.1/bin/postgres -D /var/lib/postgresql/9.1/main -c config_file=/etc/postgresql/9.1/main/postgresql.conf
postgres   940   935  0 12:54 ?        00:00:00 postgres: writer process                                                                                                    
postgres   941   935  0 12:54 ?        00:00:00 postgres: wal writer process                                                                                                
postgres   942   935  0 12:54 ?        00:00:00 postgres: autovacuum launcher process                                                                                       
postgres   943   935  0 12:54 ?        00:00:00 postgres: stats collector process                                                                                           
postgres  5215   935  0 13:12 ?        00:00:00 postgres: user_db pto_db_prod 127.0.0.1(47118) idle                                                                       
herminio  5300  1078  0 13:24 pts/1    00:00:00 grep postg

С помощью этой информации я могу определить, что моя ОС использует 92 процесса для размещения моего приложения с 1 соединением, так как из Nginx и Unicorn появляется больше процессов, число процессов увеличивается на +1, а также соединения с базой данных.

Анализ использования памяти каждым процессом также может помочь определить объем потребления памяти вашим приложением.

Я использую старый ноутбук для базового уровня моего приложения, и он имеет только 3 ГБ памяти. В будущем я планирую выпустить это приложение в распределенной среде с серверами с низкой спецификацией, поэтому я хочу точно знать, как все в моем приложении rails.

Некоторые вещи, которые я узнаю по пути:

пакетная установка - без тестирования разработки # Чтобы убедиться, что ваше приложение использует и загружает Gems, которые используются только в производственной среде и не более.

Убедитесь, что вы загружаете только те модели ActiveRecord, которые нужны вашему запросу, и не более.

1 голос
/ 03 октября 2009

EngineYard имеет хорошее сообщение в блоге , в котором обсуждаются некоторые потенциальные источники проблем с памятью в Rails. Как вы обслуживаете свой сайт? (Пассажир? Дворняга?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...