How much memory should Rails and Unicorn consume?

I just deployed the Rails 4 application to Unicorn.

He has no traffic, and it seems to me that he eats a lot.

It just works idle with two unicorn workers using 253 MB of RAM. Is this to be expected?

I use some gems that can be hungry, gemfile

gem 'rack-ssl' gem 'jquery-rails' gem 'activeadmin' gem 'american_date' gem 'paperclip' gem 'cancan' gem 'pdfkit' gem 'newrelic_rpm' gem 'select2-rails' gem 'whenever', :require => false gem 'paymill' gem 'pg' gem 'queue_classic' gem 'rails-observers' gem 'actionpack-page_caching' gem 'actionpack-action_caching' gem 'sass-rails', :github => 'rails/sass-rails' gem 'coffee-rails', :github => "rails/coffee-rails" gem 'uglifier', '>= 1.3.0' gem 'jquery-ui-rails' gem 'foreman' gem 'jquery-turbolinks' gem 'turbolinks' gem 'unicorn' gem 'capistrano' gem 'rvm-capistrano' 

For htop

  CPU[| 0.7%] Tasks: 38, 10 thr; 1 running Mem[||||||||||||||||||||||||| 253/995MB] Load average: 0.27 0.17 0.14 Swp[ 0/0MB] Uptime: 11:00:36 PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command 844 deployer 20 0 467M 109M 2560 S 0.0 11.0 0:04.00 unicorn worker[1] -D -c /home/deployer/apps/application/shared/config/unicorn.rb -E production 803 deployer 20 0 467M 109M 2560 S 0.0 11.0 0:00.00 unicorn worker[1] -D -c /home/deployer/apps/application/shared/config/unicorn.rb -E production 800 deployer 20 0 467M 109M 2560 S 0.0 11.0 0:04.33 unicorn worker[1] -D -c /home/deployer/apps/application/shared/config/unicorn.rb -E production 837 deployer 20 0 467M 109M 2560 S 0.0 11.0 0:03.48 unicorn worker[0] -D -c /home/deployer/apps/application/shared/config/unicorn.rb -E production 802 deployer 20 0 467M 109M 2560 S 0.0 11.0 0:00.03 unicorn worker[0] -D -c /home/deployer/apps/application/shared/config/unicorn.rb -E production 798 deployer 20 0 467M 109M 2560 S 0.0 11.0 0:03.85 unicorn worker[0] -D -c /home/deployer/apps/application/shared/config/unicorn.rb -E production 801 deployer 20 0 270M 107M 5992 S 0.0 10.8 0:00.00 unicorn master -D -c /home/deployer/apps/application/shared/config/unic 

Unicorn workers appear three times each. Is it correct?

from monit log

 System Status Load CPU Memory Swap server Running [0.02] [0.09] 25.4% [259492 kB] 0.0% [0 kB] Process Status Uptime CPU Total Memory Total unicorn Running 10h 48m 0.0% 32.8% [334828 kB] unicorn_worker_0 Running 10h 47m 0.0% 11.0% [112252 kB] unicorn_worker_1 Running 10h 47m 0.0% 11.0% [112300 kB] postgresql Running 10h 48m 0.0% 1.7% [18100 kB] nginx Running 10h 48m 0.0% 0.8% [8592 kB] 

Do you need more information to tell me if this is high memory consumption?

+6
source share
1 answer

This is perfectly normal, every unicorn worker is a separate process.

You see three processes because you are asking for two workers. So you have a master process that spawns workers and responds to user signals, and the other two are actual workflows.

The presence of such isolated processes consumes more memory, but it is actually very cool: this is what allows you to do a graceful restart when some workers are immediately shut down and others are saved until their processing processes their requests.

Also note that when you do a graceful restart (USR2 signal), your normal memory consumption will be doubled in a short time. This is because the new master begins to accept new requests, spawns its own workers, and the previous master will not be closed until all its workers process the requests.

Edit: answer the number of bars used by each process, which is good too. My working application consumes about 315MO per process. A pre-release project, with about the same gem as yours, is about 280 MO for each process.

+6
source

Source: https://habr.com/ru/post/954389/


All Articles