Topic: Need help with tuning Apache and Ruby

I am new to dealing with performance issues with RoR, so any help would be appreciated.  I have only 1 Rails app that I'm trying to run, but it does run under separate staging and production vhosts.

Here's my server config at Slicehost:

Ubuntu 7.10
Apache/2.2.4 (Ubuntu) Phusion_Passenger/1.9.1 PHP/5.2.3-1ubuntu6.4 mod_ssl/2.2.4 OpenSSL/0.9.8e Server
Rails 2.0.2
Ruby 1.8.6
memcached 1.2.1 (for sessions)
MySQL 5.0.45
Postfix 2.4.5

And here's the output of 'free':
             total       used       free     shared    buffers     cached
Mem:           256        220         36          0          4         44
-/+ buffers/cache:        170         85
Swap:          511        464         47

Here's a sample of my top listing, sorted by memory:
top - 05:30:59 up 6 days, 13:44,  2 users,  load average: 0.07, 0.34, 0.25
Tasks: 178 total,   1 running, 177 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.1%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.2%st
Mem:    262316k total,   203344k used,    58972k free,     3592k buffers
Swap:   524280k total,   477460k used,    46820k free,    30848k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                     
8051 www-data  15   0  261m  13m 3184 S    0  5.4   0:05.85 apache2                                                                     
8052 www-data  15   0  262m  13m 3020 S    0  5.2   0:05.00 apache2                                                                     
8201 www-data  15   0  258m  10m 3036 S    0  4.0   0:04.95 apache2                                                                     
8077 www-data  15   0  258m 9972 2548 S    0  3.8   0:04.98 apache2                                                                     
9716 deploy    16   0 19788 3784 1380 S    0  1.4   0:00.07 bash                                                                         
8168 mysql     15   0 75592 3056 1264 S    0  1.2   0:17.61 mysqld                                                                       
8044 root      18   0  254m 2776  292 S    0  1.1   0:00.24 apache2                                                                     
9713 root      16   0 53452 2656 2088 S    0  1.0   0:00.01 sshd                                                                         
7100 root      16   0 49752 2540  308 S    0  1.0   0:00.84 ruby1.8                                                                     
8926 deploy    16   0 19788 2264    0 S    0  0.9   0:00.05 bash                                                                         
7666 root      16   0 49760 2216   24 S    0  0.8   0:00.49 ruby1.8                                                                     
4001 root      17   0  134m 1820 1156 S    0  0.7   0:08.03 monit                                                                       
31656 root      16   0 49652 1752  376 S    0  0.7   0:01.00 ruby1.8                                                                     
7129 www-data  15   0  258m 1644   16 S    0  0.6   0:00.03 apache2                                                                     
26671 root      16   0 49652 1424  376 S    0  0.5   0:01.28 ruby1.8                                                                     
9715 deploy    15   0 53452 1408  840 S    0  0.5   0:00.00 sshd                                                                         
9735 deploy    15   0 19084 1400  968 R    0  0.5   0:00.04 top                                                                         
31733 root      16   0 49652 1220  376 S    0  0.5   0:01.32 ruby1.8                                                                     
3725 root      16   0 49752 1220  376 S    0  0.5   0:00.84 ruby1.8                                                                     
27047 root      16   0 49880 1192  376 S    0  0.5   0:01.39 ruby1.8                                                                     
32650 root      16   0 49728 1192  380 S    0  0.5   0:01.14 ruby1.8                                                                     
3026 root      16   0 49760 1184  376 S    0  0.5   0:00.91 ruby1.8                                                                     
29616 root      16   0 49716 1180  376 S    0  0.4   0:01.19 ruby1.8                                                                     
27528 root      16   0 49792 1176  376 S    0  0.4   0:01.31 ruby1.8                                                                     
1967 root      16   0 49748 1168  380 S    0  0.4   0:01.04 ruby1.8                                                                     
2033 root      16   0 49756 1164  376 S    0  0.4   0:00.97 ruby1.8                                                                     
26344 root      16   0 49804 1160  376 S    0  0.4   0:01.44 ruby1.8                                                                     
9583 postfix   15   0 38664  708  276 S    0  0.3   0:00.03 anvil                                                                       
6492 postfix   15   0 38704  628  484 S    0  0.2   0:00.01 qmgr                                                                         
8925 deploy    15   0 53452  544    4 S    0  0.2   0:00.00 sshd                                                                         
8923 root      16   0 53452  536    4 S    0  0.2   0:00.00 sshd                                                                         
7681 www-data  15   0  255m  528   12 S    0  0.2   0:00.00 apache2                                                                     
7662 root      18   0  254m  516   60 S    0  0.2   0:00.29 apache2                                                                     
7679 www-data  15   0  255m  452   12 S    0  0.2   0:00.03 apache2                                                                     
7670 www-data  15   0  254m  448   12 S    0  0.2   0:00.00 apache2                                                                     
32205 root      15   0 49724  440   24 S    0  0.2   0:01.17 ruby1.8                                                                     
29271 root      15   0 49724  384   24 S    0  0.1   0:01.57 ruby1.8                                                                     
23546 root      15   0 50392  344   24 S    0  0.1   0:01.41 ruby1.8                                                                     
6368 root      15   0 48820  288  192 S    0  0.1   0:00.08 sshd                                                                         
7127 www-data  15   0  255m  280   12 S    0  0.1   0:00.03 apache2                                                                     
6491 root      15   0 36608  260  160 S    0  0.1   0:00.09 master                                                                       
2135 syslog    15   0 12256  236  160 S    0  0.1   0:01.48 syslogd                                                                     
7663 root      18   0 14956  208  116 S    0  0.1   0:00.00 ApplicationPool                                                             
2441 root      15   0 20900  184  112 S    0  0.1   0:00.22 cron                                                                         
6231 deploy    15   0 31092  184   48 S    0  0.1   0:00.40 memcached                                                                   
9220 postfix   15   0 38664  184  120 S    0  0.1   0:00.00 pickup                                                                       
7096 root      15   0  254m  180   60 S    0  0.1   0:00.11 apache2


Why so many ruby1.8 and apache2 processes?  How can I tune this better?

Need to invoice? http://invoicethat.com

Re: Need help with tuning Apache and Ruby

Chipcastle,

I am having similar problem - did you find a solution yet

Re: Need help with tuning Apache and Ruby

Hi Rajat,

I have seen greatly improved memory consumption and process spawning after upgrading my slice to use the following software versions:

Ubuntu 8.10 \n \l
Server version: Apache/2.2.9 (Ubuntu)
Rails 2.3.2
ruby 1.8.6 (2008-08-08 patchlevel 286) [x86_64-linux]
memcached 1.2.2
mysql  Ver 14.12 Distrib 5.0.67, for debian-linux-gnu (x86_64) using readline 5.2
Postfix:  mail_version = 2.5.5
=====================================================

Also, here's what my /etc/apache2/mods-enabled/passenger.conf looks like:

# Never spawn more than two processes
PassengerMaxPoolSize 4

# Despawn a process when it has been idle for 180 seconds
PassengerPoolIdleTime 600

PassengerLogLevel 2

RailsSpawnMethod smart
=====================================================

I am not sure what you're running, but I would definitely start with tuning passenger.conf.
I hope you see the same improvements. 

Good luck,
Chip

Need to invoice? http://invoicethat.com

Re: Need help with tuning Apache and Ruby

I was totally gonna write an app called invoicethat, but I had to put it off, fail. You may also want tot look into passenger max instances per app for your configuration.

Re: Need help with tuning Apache and Ruby

I just purchased a VPS to run Django apps on. I have 2 Redmine installations and a small RoR app I am developing. My memory usage is through the roof too. I cant afford a VPS, paying for memory usage when Ruby is so high. Python/PHP are 1/10 of the memory consumption currently.