Я анализирую, какая самая тонкая конфигурация на сервере 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, которые нужны вашему запросу, и не более.