4

I'm running redmine (a RoR app) on my server using passenger / Apache 2.2. Passenger and ruby are using way too much memory.

Is there a more memory effective way to run redmine/ruby?

I only need to support a half dozen redmine users. I want to continue to use Apache, but I'm open to all suggestions that aren't "use nginx/lighttpd" instead.

(The following data is from a 512MB VPS, so Ruby is using more than 128MB just for redmine)

user ....... %mem   ....... process
-----------------------------------
www-data ... 13.6   0:00.65 ruby1.8
www-data ... 12.2   0:04.86 ruby1.8

www-data ...  9.4   0:04.15 apache2
www-data ...  9.0   0:13.94 apache2
www-data ...  3.2   0:00.27 apache2

root     ...  2.5   0:00.23 apache2 
root     ...  1.9   0:01.19 ruby1.8 

So, what's better for me than Passenger?

Thanks for your thoughts!!

Rich
  • 945
  • 1
  • 6
  • 15

5 Answers5

6

You can configure how many Rails processes Apache/passenger spawns. For your size (3 concurrent requests) you should be fine with 2 rails processes:

Set these in your apache config:

PassengerMaxPoolSize 2
PassengerMaxInstancesPerApp 2

The MaxPoolSize determines how many instances can be started maximally, the MaxInstancesPerApp determines how many instances each web-app can have.

You might want to play with:

PassengerPoolIdleTime 

to specify how many seconds an instance must be idle before it is unloaded. Default is 300 seconds.

I run pretty high traffic web application with 3 instances without any problems.

Oh and - the Ruby Enterprise Edition helps too.

jcfischer
  • 186
  • 2
  • Ah thanks and sorry I didn't see your answer until now. I just tried those settings and they didn't make any difference, I think I only have 2 instances running anyway (see above). – Rich Jun 02 '09 at 14:45
  • The other thing to be aware of: 512 mb isn't that much memory, and RedMine could be leaking memory. A 'regular' Rails app should consume between 30 - 60 mb per app server instance. 128 mb doesn't sound too bad for 2 instances though. – jcfischer Jun 02 '09 at 23:08
  • OK, thanks for the comparison. I know it's not fair to compare, but I'm just not used to my own apps (python) using up nearly as much memory. I guess Ruby loads everything into memory? I think I'll give this ruby enterprise a go, and probably mongrels too. – Rich Jun 03 '09 at 07:39
  • you are loading the Rails stack into memory - and that's the one that uses a lot... – jcfischer Jun 04 '09 at 07:00
  • This helped keep my memory down to a manageable size. Thanks! – Catfish Sep 06 '12 at 14:02
2

Are you using ruby enterprise? http://www.rubyenterpriseedition.com/

kbrower
  • 31
  • 2
  • Thanks - that looks like a good tip. 33% less memory isn't to be sniffed at, but I kind of feel that it's using like 10x as much memory as trac? Surely Ruby isn't that greedy with memory?? – Rich May 30 '09 at 14:41
1

Either use Ruby Enterprise Edition (recommended with Passenger), or use Ruby 1.9, which is also loads faster.

Sasha Chedygov
  • 353
  • 1
  • 5
  • 13
1

How many concurrent requests do you need to support ? I would use nginx and a small cluster of mongrels. This way you can limit the amount of resource your ruby application uses.

Dave Cheney
  • 18,307
  • 7
  • 48
  • 56
  • What's nginx got to do with it? clearly you missed that part of my question :-) – Rich May 30 '09 at 14:38
  • Regarding concurrent requests - 3 at most. This is 'teamware' for a small project. – Rich May 30 '09 at 14:42
  • Doesn't passenger spawn a ruby process inside the apache worker ? I'm not sure, but it this is true then you're talking about a huge amount of memory being pinned inside apache workers (yes, some of it will be CoW, but once the rails VM does its first garbage collect, that won't apply any more) – Dave Cheney May 30 '09 at 14:49
  • So, mongreals are an alternative to passenger? And I can use them with Apache? Sorry but I'm completely ignorant when it comes to Ruby :-) thanks very much. – Rich Jun 01 '09 at 01:25
  • > Doesn't passenger spawn a ruby process inside the apache worker ? BTW: that would explain why the Apache processes are so big. – Rich Jun 01 '09 at 01:26
0

I had more success running mongrels/mongrel_cluster with apache proxypass for redmine. It doesn't need that much performance(they're a bunch of very big/slow processes, and tend to call external processes on top of that. You might want to try it in a benchmark situation and see. It was also dead-simple for me to setup.

Perlchild
  • 114
  • 2