Deployment survey

Hello Mongrels,

Building on the last messages about Fastthread, can we get a detailed
survey of the different ways people are deploying their applications?
It will help with near-future Mongrel development.

Please include the following things:

  • Framework, if any (Camping, Merb, Rails, Nitro, Ramaze, IOWA, Rack…)
  • Mongrel version
  • Mongrel handlers used (rails, dirhandler, camping, cgiwrapper…)
  • How many mongrel routes and handlers per route registered (if you
    don’t know, it’s probably <= 2)
  • Any Mongrel plugins used (mongrel_upload_progress, mongrel_gzip,
    mongrel_cow_cluster, mongrel_experimental…)
  • Mongrel runners used (mongrel_rails, mongrel::cluster,
    mongrel_service, RV, others… please be very specific about which
    options of the runner you use. For example, some people use
    mongrel::cluster but only for the --clean functionality, not for the
    clustering).
  • Number of mongrels per server per app
  • Monitoring system (runit, monit, god…)
  • Proxy or software loadbalancer, if any (apache mod_proxy_balancer,
    nginx, pen…)
  • HW loadbalancer, if any (Netscaler…)
  • Caching strategy (memcached fragments, memcached object, squid,
    rails page cache, rails page fragments, ESI)
  • Whether you serve media assets via mongrel itself, as opposed to
    through a webserver
  • Operating system including distribution or version (OS X 10.4.10,
    Ubuntu/Linux 7.10, WinXP SP2, OpenBSD 4.1…)
  • Architecture, via ‘uname -a’ preferably (x86, x86_64, Sparc, PPC,
    Arm (ha), JRuby)
  • CPU count
  • Ruby version including custom distribution patches,
    (1.8.6p110+threadhooks, 1.8.5, JRuby 1.1b1, Rubinius trunk… also
    note where you got it, in case it isn’t clear, for example, OS X 10.5
    built-in, Ubuntu apt, Instant Rails, direct compile from source)
  • Rubygems (yes/no, version)

Please mention anything else about your system that’s kind of weird,
and anything that’s been particularly troublesome regarding mongrel
deployment.

Evan

PS. You can get some of the Ruby information via the ‘tattle’ gem:

$ gem install tattle --ignore-dependencies
$ tattle report

On 3 Jan 2008, at 13:45, Evan W. wrote:

Hello Mongrels,

Building on the last messages about Fastthread, can we get a detailed
survey of the different ways people are deploying their applications?
It will help with near-future Mongrel development.

Please include the following things:

  • Framework, if any (Camping, Merb, Rails, Nitro, Ramaze, IOWA,
    Rack…)

Rails mostly, some camping, some ramaze in the works.

  • Mongrel version

Latest, after security release.

  • Mongrel handlers used (rails, dirhandler, camping, cgiwrapper…)

Standard framework handlers, and a couple of nice Racks.

  • How many mongrel routes and handlers per route registered (if you
    don’t know, it’s probably <= 2)

Indeed.

  • Any Mongrel plugins used (mongrel_upload_progress, mongrel_gzip,
    mongrel_cow_cluster, mongrel_experimental…)

None to date.

  • Mongrel runners used (mongrel_rails, mongrel::cluster,
    mongrel_service, RV, others… please be very specific about which
    options of the runner you use. For example, some people use
    mongrel::cluster but only for the --clean functionality, not for the
    clustering).

Standard development runners (script/server) are used by most of our
devs. One server uses mongrel_rails + the Swiftiply patches for
evented mongrel.

  • Number of mongrels per server per app

Windows 2003 Server we setup via Apache on a quad core, with 10
mongrels for the best performance. I had numbers somewhere, but IIRC
it reached 4-8k req/s.
On FreeBSD and Debian, we’re running nginx (and it’s great), I don’t
have performance numbers for these configurations, as we’re more
focused on static file handling direct out of nginx there.

  • Monitoring system (runit, monit, god…)

Windows Services + a custom service wrapper.
djbs daemontools.

God is no good for us as it’s not cross platform, same goes for monit.
daemontools falls in the same category, but it manages far more than
just webservers for us, and has been around for quite some time.

  • Proxy or software loadbalancer, if any (apache mod_proxy_balancer,
    nginx, pen…)

mod_proxy and nginx for the respective platforms, as noted above.

  • HW loadbalancer, if any (Netscaler…)

None required to date.

  • Caching strategy (memcached fragments, memcached object, squid,
    rails page cache, rails page fragments, ESI)

Memcached, large disk caches.

  • Whether you serve media assets via mongrel itself, as opposed to
    through a webserver

We’ve been doing very large numbers of small assets (think tiny
images), and nginx performs wonderfully at that.

  • Operating system including distribution or version (OS X 10.4.10,
    Ubuntu/Linux 7.10, WinXP SP2, OpenBSD 4.1…)

Production: Windows 2003 Server, FreeBSD, Debian, Solaris very briefly
(and no more).
Development: Debian, OS X, Windows XP SP2.

  • Architecture, via ‘uname -a’ preferably (x86, x86_64, Sparc, PPC,
    Arm (ha), JRuby)

To date, x86 across the board, although many of the machines are x64/
IA64 capable.

  • CPU count

In production, we have 7 CPUs out there. Largest is a quad core.

  • Ruby version including custom distribution patches,
    (1.8.6p110+threadhooks, 1.8.5, JRuby 1.1b1, Rubinius trunk… also
    note where you got it, in case it isn’t clear, for example, OS X 10.5
    built-in, Ubuntu apt, Instant Rails, direct compile from source)

Mostly 1.8.6p110 as far as I know. Windows devs run the OCI.

  • Rubygems (yes/no, version)

yes, 0.9.4+

Please mention anything else about your system that’s kind of weird,
and anything that’s been particularly troublesome regarding mongrel
deployment.

Honestly, Mongrel has been the easy bit, and you can quote me on
that should you so desire.

On Jan 3, 2008 12:45 PM, Evan W. [email protected] wrote:

Hello Mongrels,

Building on the last messages about Fastthread, can we get a detailed
survey of the different ways people are deploying their applications?
It will help with near-future Mongrel development.

Evan,

How would you like us to report this? To the whole mongrel list, or
just to you? Any particular format helpful?

Sean B.
[email protected]

On Jan 3, 2008 12:52 PM, Sean B. [email protected] wrote:

How would you like us to report this? To the whole mongrel list, or
just to you?

I’m not Evan, but would still love to see the responses.


Alexey V.
CruiseControl.rb [http://cruisecontrolrb.thoughtworks.com]
RubyWorks [http://rubyworks.thoughtworks.com]

Either is fine. If you’re not comfortable sending it to the list, then
just send it to me.

Just an email reply is enough.

Evan

For cruisecontrolrb.thoughtworks.com (which basically runs on
RubyWorks 1.1 RPMs with somewhat modified configuration):

  • Framework, if any (Camping, Merb, Rails, Nitro, Ramaze, IOWA, Rack…)
    Rails
  • Mongrel version
    1.0.1
  • Mongrel handlers used
    rails, dirhandler
  • How many mongrel routes and handlers per route registered
    mongrel_rails defaults
  • Any Mongrel plugins used
    none
  • Mongrel runners used
    mongrel_rails, non-detached (i.e., no --daemon option), launched from
    runit
  • Number of mongrels per server per app
  1. No reason other than it’s a sensible default number (i.e., never
    needed to optimize it).
  • Monitoring system
    monit and runit
    technically, runit is not a monitoring system
  • Proxy or software loadbalancer, if any (apache mod_proxy_balancer, nginx, pen…)
    HAProxy
  • Caching strategy
    Rails page cache
  • Whether you serve media assets via mongrel itself, as opposed to through a webserver.
    Apache via mod_rewrite URL matching
  • Operating system including distribution or version
    Linux (CentOS 5)
  • Architecture, via ‘uname -a’ preferably (x86, x86_64, Sparc, PPC, Arm (ha), JRuby)
    x86_64
  • CPU count
    4 dual core CPUs on a VM host running several virtual machines.
  • Ruby version including custom distribution patches
    1.8.6 p36, from RubyWorks RPM repo. Upgrade to p111 is planned soon-ish.

Lots of people are running 1.8.5 p35 with patches, as that is what
mainstream Linux distros (RedHat, Debian, Ubuntu) provide.

  • Rubygems (yes/no, version)
    yes, 0.9.4

anything weird
Nothing that you don’t already know about.


Alexey V.
CruiseControl.rb [http://cruisecontrolrb.thoughtworks.com]
RubyWorks [http://rubyworks.thoughtworks.com]

(I don’t have Evan’s original message, hopefully this gets threaded
into the right spot)

  • Framework : Rails (2.0)
  • Mongrel version : 1.1.3
  • Handlers : just rails
  • Plugins : Swiftiply evented Mongrel (not a plugin, per se)
  • Runners : mongrel_rails cluster::start/stop/restart --clean
  • Number : 70 mongrels (4 virtual servers, 1 app)
  • Monitoring : nagios
  • Proxy : nginx w/ fair module [1]
  • HW balancer : none
  • Caching : memcached fragments, memcached objects
  • Assets/mongrel : no
  • OS : Gentoo Linux Xen kernel 2.6.20-xen-r2
  • arch : x86_64 with 32 bit userland (64 bit kernel only)
  • CPU count : varies by VM, but ~8 cores total for mongrels
  • Ruby : ruby 1.8.6 (2007-06-07 patchlevel 36)
  • Rubygems : 0.9.4

I’m also using mongrel_proctitle, which I had to hack to get it to
work with Swiftcore’s evented Mongrel. It’s pretty cool and definitely
comes in handy since I am using the fair proxy balancer nginx module.

http://purefiction.net/mongrel_proctitle/

[1]
http://brainspl.at/articles/2007/11/09/a-fair-proxy-balancer-for-nginx-and-mongrel

Casey

On 04/01/2008, at 4:45 AM, Evan W. wrote:

  • Framework, if any (Camping, Merb, Rails, Nitro, Ramaze, IOWA,
    Rack…)

RoR 2.0.2

  • Mongrel version

1.0.1

  • Mongrel handlers used (rails, dirhandler, camping, cgiwrapper…)

Rails

  • How many mongrel routes and handlers per route registered (if you
    don’t know, it’s probably <= 2)

I guess that means <= 2

  • Any Mongrel plugins used (mongrel_upload_progress, mongrel_gzip,
    mongrel_cow_cluster, mongrel_experimental…)

mongrel_cluster

  • Mongrel runners used (mongrel_rails, mongrel::cluster,
    mongrel_service, RV, others… please be very specific about which
    options of the runner you use. For example, some people use
    mongrel::cluster but only for the --clean functionality, not for the
    clustering).

custom scripts to allow monit to restart failed mongrels with the
correct environment

  • Number of mongrels per server per app

14, split into 3 groups, handling different URL patterns

  • Monitoring system (runit, monit, god…)

Monit + cacti

  • Proxy or software loadbalancer, if any (apache mod_proxy_balancer,
    nginx, pen…)

nginx

  • HW loadbalancer, if any (Netscaler…)

Dunno, we rent time on our hosting centers LB

  • Caching strategy (memcached fragments, memcached object, squid,
    rails page cache, rails page fragments, ESI)

Memcache for the app, Varnish in front of asset hosts

  • Whether you serve media assets via mongrel itself, as opposed to
    through a webserver

Hell no, nginx + varnish

  • Operating system including distribution or version (OS X 10.4.10,
    Ubuntu/Linux 7.10, WinXP SP2, OpenBSD 4.1…)

OS X Tiger Server, moving to Leopard server ASAP

  • Architecture, via ‘uname -a’ preferably (x86, x86_64, Sparc, PPC,
    Arm (ha), JRuby)

x86_64, but under OS X ruby has 32bit bindings only

  • CPU count

8 cores in the app server cluster ATM

  • Ruby version including custom distribution patches,
    (1.8.6p110+threadhooks, 1.8.5, JRuby 1.1b1, Rubinius trunk… also
    note where you got it, in case it isn’t clear, for example, OS X 10.5
    built-in, Ubuntu apt, Instant Rails, direct compile from source)

1.8.6p110+threadhooks from macports

  • Rubygems (yes/no, version)

Dunno, latest, pretty habitual about gem update --system

On Jan 3, 2008, at 9:45 AM, Evan W. wrote:

  • Framework, if any (Camping, Merb, Rails, Nitro, Ramaze, IOWA,
    Rack…)

merb, rails, camping, nitro, rack

  • Mongrel version

1.0.1 thru 1.1.3

  • Mongrel handlers used (rails, dirhandler, camping, cgiwrapper…)

rails, dirhandler,upload_progress_handler,secure_download, many more
custoemr handlers

  • How many mongrel routes and handlers per route registered (if you
    don’t know, it’s probably <= 2)

up to 15 max. usually 2-4

  • Any Mongrel plugins used (mongrel_upload_progress, mongrel_gzip,
    mongrel_cow_cluster, mongrel_experimental…)

mongrel_upload_progress, mongrel_gzip

  • Mongrel runners used (mongrel_rails, mongrel::cluster,
    mongrel_service, RV, others… please be very specific about which
    options of the runner you use. For example, some people use
    mongrel::cluster but only for the --clean functionality, not for the
    clustering).

mongrel_cluster but only for the --clean option. woudl love to see –
clean in mongrel itself so i no longer need mongrel cluster.

  • Number of mongrels per server per app

3-25 per server, usually closer to 3-5 per cpu core

  • Monitoring system (runit, monit, god…)

monit, god , nagios

  • Proxy or software loadbalancer, if any (apache mod_proxy_balancer,
    nginx, pen…)

Nginx, swiftiply, apache, haproxy

  • HW loadbalancer, if any (Netscaler…)

coyote point equalizers, Linux LVS load balancers.

  • Caching strategy (memcached fragments, memcached object, squid,
    rails page cache, rails page fragments, ESI)

page caching, fragment caching on GFS filesystem . memcached fragments
and sessions and caches.

  • Whether you serve media assets via mongrel itself, as opposed to
    through a webserver

via nginx

  • Operating system including distribution or version (OS X 10.4.10,
    Ubuntu/Linux 7.10, WinXP SP2, OpenBSD 4.1…)

custom variant of Gentoo linux

  • Architecture, via ‘uname -a’ preferably (x86, x86_64, Sparc, PPC,
    Arm (ha), JRuby)

Linux ey00-s00141 2.6.18-xenU #1 SMP Fri Jun 15 17:50:34 PDT 2007
x86_64 Dual Core AMD Opteron™ Processor 265 AuthenticAMD GNU/Linux

and

Linux ey01-s00141 2.6.18-xenU #1 SMP Fri Jun 15 17:50:34 PDT 2007
x86_64 Intel(R) Xeon(R) CPU E5345 @ 2.33GHz GenuineIntel GNU/Linux

  • CPU count

Hmm… lets see here. somewhere around 400 ?

  • Ruby version including custom distribution patches,
    (1.8.6p110+threadhooks, 1.8.5, JRuby 1.1b1, Rubinius trunk… also
    note where you got it, in case it isn’t clear, for example, OS X 10.5
    built-in, Ubuntu apt, Instant Rails, direct compile from source)
  • Rubygems (yes/no, version)

1.8.5 from gentoo’s portage
1.8.6p111 from portage

Please mention anything else about your system that’s kind of weird,
and anything that’s been particularly troublesome regarding mongrel
deployment.

Please let’s add --clean to mongrel itself. Other then that the only
thing might be to add some additional logic to the gracefull shutdown
of a mongrel server. Say if it tries to reap old threads for more then
30 seconds, just have it terminate violently.

Cheers-

On Jan 3, 2008 10:45 AM, Evan W. [email protected] wrote:

For what it’s worth, though I am definitely a statistical outlier:

  • Framework, if any (Camping, Merb, Rails, Nitro, Ramaze, IOWA, Rack…)

IOWA for production. Dabble with all of them, though, for testing
things.

  • Mongrel version

1.1.3

  • Mongrel handlers used (rails, dirhandler, camping, cgiwrapper…)

Just whatever is appropriate for the framework. The mongrel support
is built into IOWA.

  • How many mongrel routes and handlers per route registered (if you
    don’t know, it’s probably <= 2)

Precious few.

  • Any Mongrel plugins used (mongrel_upload_progress, mongrel_gzip,
    mongrel_cow_cluster, mongrel_experimental…)

No

  • Mongrel runners used (mongrel_rails, mongrel::cluster,

None

  • Number of mongrels per server per app

Where I use it, 1.

  • Monitoring system (runit, monit, god…)

They never crash; never fail. So I don’t bother to monitor them
specifically.

  • Proxy or software loadbalancer, if any (apache mod_proxy_balancer,
    nginx, pen…)

Swiftiply.

  • HW loadbalancer, if any (Netscaler…)

None.

  • Caching strategy (memcached fragments, memcached object, squid,
    rails page cache, rails page fragments, ESI)

Static page caching handled by Swiftiply, or no caching.

  • Whether you serve media assets via mongrel itself, as opposed to
    through a webserver

No.

  • Operating system including distribution or version (OS X 10.4.10,
    Ubuntu/Linux 7.10, WinXP SP2, OpenBSD 4.1…)

RHEL 4, Ubuntu Server 6.10, CentOS 4

  • Architecture, via ‘uname -a’ preferably (x86, x86_64, Sparc, PPC,
    Arm (ha), JRuby)

Linux server2.enigo.com 2.6.9-55.0.9.ELlargesmp #1 SMP & some Linux
2.4.x kernel boxes.

  • CPU count

1, 2, and 4 cpu boxes right now.

  • Ruby version including custom distribution patches,
    (1.8.6p110+threadhooks, 1.8.5, JRuby 1.1b1, Rubinius trunk… also
    note where you got it, in case it isn’t clear, for example, OS X 10.5
    built-in, Ubuntu apt, Instant Rails, direct compile from source)

Primarily 1.8.5 in production, though I have the most recent 1.8.6
patch level, 1.9.0 and jruby around for testing.

  • Rubygems (yes/no, version)

Yes. I have not upgraded to the newest release yet. Still on 0.9.4.

As for weird stuff…honestly, I don’t really run all of Mongrel in
production except on one or two older sites. Most of my production
apps only use the Mongrel HTTP parser. So most of my mongrel usage
these days involves testing it on various versions of Ruby and in
various deployments and contortions.

Kirk H.

On Jan 3, 2008 3:45 PM, Evan W. [email protected] wrote:

Hello Mongrels,

Building on the last messages about Fastthread, can we get a detailed
survey of the different ways people are deploying their applications?
It will help with near-future Mongrel development.

Please include the following things:

  • Framework, if any (Camping, Merb, Rails, Nitro, Ramaze, IOWA, Rack…)

Rails, Merb, Small little MVC proof of concept :slight_smile:

  • Mongrel version

1.0.2 mostly.

  • Mongrel handlers used (rails, dirhandler, camping, cgiwrapper…)

Rails, DirHandler and custom made.

  • How many mongrel routes and handlers per route registered (if you
    don’t know, it’s probably <= 2)

<= 2

  • Any Mongrel plugins used (mongrel_upload_progress, mongrel_gzip,
    mongrel_cow_cluster, mongrel_experimental…)

none

  • Mongrel runners used (mongrel_rails, mongrel::cluster,
    mongrel_service, RV, others… please be very specific about which
    options of the runner you use. For example, some people use
    mongrel::cluster but only for the --clean functionality, not for the
    clustering).

mongrel_rails (development) mongrel_service (deployment)

  • Number of mongrels per server per app

3

  • Monitoring system (runit, monit, god…)

Custom made

  • Proxy or software loadbalancer, if any (apache mod_proxy_balancer,
    nginx, pen…)

Custom made TCP balancer, no proxy.

  • HW loadbalancer, if any (Netscaler…)

None

  • Caching strategy (memcached fragments, memcached object, squid,
    rails page cache, rails page fragments, ESI)

No caching

  • Whether you serve media assets via mongrel itself, as opposed to
    through a webserver

Via Mongrel

  • Operating system including distribution or version (OS X 10.4.10,
    Ubuntu/Linux 7.10, WinXP SP2, OpenBSD 4.1…)

Windows XP SP2 Professional
Windows 2003 Server
Windows XP SP2 Professional x64 Edition

  • Architecture, via ‘uname -a’ preferably (x86, x86_64, Sparc, PPC,
    Arm (ha), JRuby)

x86 and x86_64

  • CPU count

1, 2 and 4 cores, single CPU
2 cores in dual-cpu installations

  • Ruby version including custom distribution patches,
    (1.8.6p110+threadhooks, 1.8.5, JRuby 1.1b1, Rubinius trunk… also
    note where you got it, in case it isn’t clear, for example, OS X 10.5
    built-in, Ubuntu apt, Instant Rails, direct compile from source)
  • Rubygems (yes/no, version)

1.8.5-p114, i386-mswin32 build (VC6)
1.8.6-p111, i386-mingw32 build (GCC)

Both version build from scratch.

Please mention anything else about your system that’s kind of weird,
and anything that’s been particularly troublesome regarding mongrel
deployment.

Well, it’s Windows, what more weird than that could be added? :wink:

But seriously, no IIS on these installations.

All the deployment process is being distributed by Windows Installer
packages and rubygems. The distribution or deployment of updates for
the application is done through rubygems.


Luis L.
Multimedia systems

A common mistake that people make when trying to design
something completely foolproof is to underestimate
the ingenuity of complete fools.
Douglas Adams

Evan W. schrieb:

  • Framework, if any (Camping, Merb, Rails, Nitro, Ramaze, IOWA, Rack…)

Rails

  • Mongrel version

1.1.3

  • Mongrel handlers used (rails, dirhandler, camping, cgiwrapper…)

rails

  • How many mongrel routes and handlers per route registered (if you
    don’t know, it’s probably <= 2)

no extra handlers

  • Any Mongrel plugins used (mongrel_upload_progress, mongrel_gzip,
    mongrel_cow_cluster, mongrel_experimental…)

mongrel_cluster

  • Mongrel runners used (mongrel_rails, mongrel::cluster,
    mongrel_service, RV, others… please be very specific about which
    options of the runner you use. For example, some people use
    mongrel::cluster but only for the --clean functionality, not for the
    clustering).

On all servers we are using:

mongrel_rails cluster::start -C /path/to/config --clean

  • Number of mongrels per server per app

~8

  • Monitoring system (runit, monit, god…)

monit

  • Proxy or software loadbalancer, if any (apache mod_proxy_balancer,
    nginx, pen…)

mod_proxy_balancer

  • HW loadbalancer, if any (Netscaler…)

OpenBSD 4.2 PF + CARP boxes

  • Caching strategy (memcached fragments, memcached object, squid,
    rails page cache, rails page fragments, ESI)

most of the time memcached fragments.

  • Whether you serve media assets via mongrel itself, as opposed to
    through a webserver

Always through Apache

  • Operating system including distribution or version (OS X 10.4.10,
    Ubuntu/Linux 7.10, WinXP SP2, OpenBSD 4.1…)

FreeBSD 7, OpenBSD 4.2, and Debian

  • Architecture, via ‘uname -a’ preferably (x86, x86_64, Sparc, PPC,
    Arm (ha), JRuby)

i368 and AMD64

  • CPU count

Typically 2

  • Ruby version including custom distribution patches,
    (1.8.6p110+threadhooks, 1.8.5, JRuby 1.1b1, Rubinius trunk… also
    note where you got it, in case it isn’t clear, for example, OS X 10.5
    built-in, Ubuntu apt, Instant Rails, direct compile from source)

1.8.6p110

  • Rubygems (yes/no, version)

1.0.1

Jonathan

Please let’s add --clean to mongrel itself. Other then that the only
thing might be to add some additional logic to the gracefull shutdown
of a mongrel server. Say if it tries to reap old threads for more then
30 seconds, just have it terminate violently.

Those are some of our goals for an eventual new runner.

Evan

Hello,

On 3 Jan 2008, at 17:45, Evan W. wrote:

Building on the last messages about Fastthread, can we get a detailed
survey of the different ways people are deploying their applications?
It will help with near-future Mongrel development.

We have a few machines with different setups depending on when they
were deployed - some stuff from 2005 is still on Apache2/FastCGI,
which is slightly upsetting, but the most recent apps are as follows,
and new ones will be similar, though perhaps with the addition of
swiftiply.

Please include the following things:

  • Framework, if any (Camping, Merb, Rails, Nitro, Ramaze, IOWA,
    Rack…)

Rails, currently 1.2.3. Looking at Merb right now.

  • Mongrel version

1.1.3

  • Mongrel handlers used (rails, dirhandler, camping, cgiwrapper…)

rails

  • How many mongrel routes and handlers per route registered (if you
    don’t know, it’s probably <= 2)

So probably <= 2 :wink:

  • Any Mongrel plugins used (mongrel_upload_progress, mongrel_gzip,
    mongrel_cow_cluster, mongrel_experimental…)

None

  • Mongrel runners used (mongrel_rails, mongrel::cluster,
    mongrel_service, RV, others… please be very specific about which
    options of the runner you use. For example, some people use
    mongrel::cluster but only for the --clean functionality, not for the
    clustering).

mongrel::cluster for managing all mongrels.

  • Number of mongrels per server per app

This is still moot for us really; we’re trying to work out the best
profile per app, as we do a lot of short-lived campaign-based sites.
We had an app get whacked a few weeks ago with 16 mongrels running
behind nginx, and the process load was getting really high. Initial
thought was to up the number of mongrels so they could cut through the
queue quicker, but of course all this did was increase memory usage
significantly, meaning with 32 mongrels starting to eat up to 230MB of
RAM each, the system started thrashing pretty quickly. So we killed
them and cut it down to 8 and things actually seemed a lot smoother,
but by that time the load had dropped significantly, so it’s hard to
tell.

In summary, we’ll most likely start out with 8 and see how it goes.

  • Monitoring system (runit, monit, god…)

Ahem … just getting going with monit

  • Proxy or software loadbalancer, if any (apache mod_proxy_balancer,
    nginx, pen…)

latest nginx, 0.5.xx branch

  • HW loadbalancer, if any (Netscaler…)

n/a

  • Caching strategy (memcached fragments, memcached object, squid,
    rails page cache, rails page fragments, ESI)

memcached objects, rails page cache as appropriate.

  • Whether you serve media assets via mongrel itself, as opposed to
    through a webserver

Any flat files go out direct through nginx, doesn’t seem any point in
loading mongrel with this when nginx is sooo fast.

  • Operating system including distribution or version (OS X 10.4.10,
    Ubuntu/Linux 7.10, WinXP SP2, OpenBSD 4.1…)

CentOS 5

  • Architecture, via ‘uname -a’ preferably (x86, x86_64, Sparc, PPC,
    Arm (ha), JRuby)

Linux xxx.xxx.xxx 2.6.9-42.ELsmp #1 SMP Sat Aug 12 09:39:11 CDT 2006
i686 i686 i386 GNU/Linux

  • CPU count

dual-core xeon 3.0ghz

Database is on an identical separate machine in the instance I’m
getting stats from, might be on the same host for other apps.

  • Ruby version including custom distribution patches,
    (1.8.6p110+threadhooks, 1.8.5, JRuby 1.1b1, Rubinius trunk… also
    note where you got it, in case it isn’t clear, for example, OS X 10.5
    built-in, Ubuntu apt, Instant Rails, direct compile from source)

ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-linux] - compiled from
source.

After reading the recent threads this is going to move up to a later
patchlevel!

  • Rubygems (yes/no, version)

yes, recently upgraded from 0.94 to 1.0.1

Please mention anything else about your system that’s kind of weird,
and anything that’s been particularly troublesome regarding mongrel
deployment.

To be honest since mongrel_cluster came out it’s been relatively
trouble-free. Well, compared to Apache :wink:
Starting and stopping can be a bit temperamental when instances have
died or been killed outside mongrel_cluster, but I guess that’s to be
expected, and as I understand it that’s a cluster issue rather than a
mongrel issue per se.

The only real issue is memory usage. When we see 230MB mongrels as
above when most stuff is being served out of memcached, leaks spring
to mind, but we’ve so far been unsucessful in establishing whether
it’s in our code, a plug-in, the framework, whether it’s related to
the unpatched ruby, etc …

PS. You can get some of the Ruby information via the ‘tattle’ gem:

$ gem install tattle --ignore-dependencies
$ tattle report

user_key,
prefix, /poke/software/server/install/ruby-1.8.6
ruby_version, 1.8.6
host_vendor, pc
ruby_install_name, ruby
build, i686-pc-linux-gnu
target_cpu, i686
arch, i686-linux
rubygems_version, 1.0.1
SHELL, /bin/sh
host_os, linux-gnu
report_time, Fri Jan 04 09:48:29 +0000 2008
host_cpu, i686
LIBRUBY, libruby-static.a
LIBRUBY_SO, libruby.so.1.8.6
target, i686-pc-linux-gnu

Incidentally the site that got hammered is
http://www.goodthingsshouldneverend.co.uk/
It’s supposed to be a “never-ending web page” - imagine my delight
when I heard that brief for the first time!

Cheers guys, keep up the great work.
Igor


Igor C. // POKE // 10 Redchurch Street // E2 7DD // +44 (0)20 7749
5355 // www.pokelondon.com

On Jan 3, 2008 6:45 PM, Evan W. [email protected] wrote:

  • Framework, if any (Camping, Merb, Rails, Nitro, Ramaze, IOWA, Rack…)

Rails, Rack apps, Merb

playing around with random ones too from time to time

  • Mongrel version

1.0.1, 1.1.3

  • Mongrel handlers used (rails, dirhandler, camping, cgiwrapper…)

rails, some custom ones (mostly for dev/play)

  • How many mongrel routes and handlers per route registered (if you
    don’t know, it’s probably <= 2)

< 2

  • Any Mongrel plugins used (mongrel_upload_progress, mongrel_gzip,
    mongrel_cow_cluster, mongrel_experimental…)

mongrel_rails

  • Mongrel runners used (mongrel_rails, mongrel::cluster,
    mongrel_service, RV, others… please be very specific about which
    options of the runner you use. For example, some people use
    mongrel::cluster but only for the --clean functionality, not for the
    clustering).

mongrel_cluster, mongrel_rails, inhouse thing at $DAYJOB

  • Number of mongrels per server per app

generally 1 to ~15 depending on app and framework

  • Monitoring system (runit, monit, god…)

monit, god

  • Proxy or software loadbalancer, if any (apache mod_proxy_balancer,
    nginx, pen…)

nginx

  • HW loadbalancer, if any (Netscaler…)

not currently

  • Caching strategy (memcached fragments, memcached object, squid,
    rails page cache, rails page fragments, ESI)

memcached (fragments, + objects + other that fits), memory, disk (such
as
rails’ page caching), looking at varnish (with ESI)

  • Whether you serve media assets via mongrel itself, as opposed to
    through a webserver

webserver, mongrel for processed/generated images (which are then
cached)

  • Operating system including distribution or version (OS X 10.4.10,
    Ubuntu/Linux 7.10, WinXP SP2, OpenBSD 4.1…)

Debian/Ubuntu (6&7). OSX for dev

  • Architecture, via ‘uname -a’ preferably (x86, x86_64, Sparc, PPC,
    Arm (ha), JRuby)

x86_64, i386

Did actually try and make mongrel run on (nokias) ARM one evening for
fun,
but their crosscompiling env was a PITA.

  • CPU count

typically 2-4

  • Ruby version including custom distribution patches,

(1.8.6p110+threadhooks, 1.8.5, JRuby 1.1b1, Rubinius trunk… also
note where you got it, in case it isn’t clear, for example, OS X 10.5
built-in, Ubuntu apt, Instant Rails, direct compile from source)

OSX 10.5 supplied ruby (ruby 1.8.6 (2007-09-24 patchlevel 111) [
universal-darwin9.0])
ruby 1.8.6 (2007-03-13 patchlevel 0) [x86_64-linux]
ruby 1.8.6 (2007-06-07 patchlevel 36) [x86_64-linux]
ruby 1.8.6 (2007-09-24 patchlevel 111) [x86_64-linux]

  • Rubygems (yes/no, version)

yes, 1.0.1 and 0.9.x

Please mention anything else about your system that’s kind of weird,
and anything that’s been particularly troublesome regarding mongrel
deployment.

Different mongrel-groups balanced by url on some boxes
running the nginx “fair” balancer patch on some boxes (though not really
mongrel related)

JS

We had some weird issues with mongrel >=1.1, which we never understood, but after downgrading
to 1.0.4 things are going well again. Kirk H. looked into it, but I have to admit
I never understood what the reason of the problem with newer mongrel is.

He mentioned someone was having lockups. If you could gdb the process
that locked and generate a backtrace that would be a big help.

Evan

  • Framework, if any (Camping, Merb, Rails, Nitro, Ramaze, IOWA, Rack…)

rack

  • Mongrel version

1.0.4

  • Mongrel handlers used (rails, dirhandler, camping, cgiwrapper…)

rack

  • How many mongrel routes and handlers per route registered (if you
    don’t know, it’s probably <= 2)

<=2

  • Any Mongrel plugins used (mongrel_upload_progress, mongrel_gzip,
    mongrel_cow_cluster, mongrel_experimental…)

none

  • Mongrel runners used (mongrel_rails, mongrel::cluster,
    mongrel_service, RV, others… please be very specific about which
    options of the runner you use. For example, some people use
    mongrel::cluster but only for the --clean functionality, not for the
    clustering).

? none I think.

  • Number of mongrels per server per app

depends on the application 1-100

  • Monitoring system (runit, monit, god…)

simple self-written scripts

  • Proxy or software loadbalancer, if any (apache mod_proxy_balancer,
    nginx, pen…)

nginx

  • HW loadbalancer, if any (Netscaler…)

none

  • Caching strategy (memcached fragments, memcached object, squid,
    rails page cache, rails page fragments, ESI)

memcached & self-grown hacks.

  • Whether you serve media assets via mongrel itself, as opposed to
    through a webserver

no

  • Operating system including distribution or version (OS X 10.4.10,
    Ubuntu/Linux 7.10, WinXP SP2, OpenBSD 4.1…)

gentoo linux

  • Architecture, via ‘uname -a’ preferably (x86, x86_64, Sparc, PPC,
    Arm (ha), JRuby)

Linux prod8 2.6.22-gentoo-r8-a #1 SMP Wed Oct 3 06:41:23 CDT 2007 x86_64
Dual-Core AMD Opteron™ Processor 8212 AuthenticAMD GNU/Linux

  • CPU count

4 dual core

  • Ruby version including custom distribution patches,
    (1.8.6p110+threadhooks, 1.8.5, JRuby 1.1b1, Rubinius trunk… also
    note where you got it, in case it isn’t clear, for example, OS X 10.5
    built-in, Ubuntu apt, Instant Rails, direct compile from source)

ruby 1.8.6 (2007-09-24 patchlevel 111) [x86_64-linux] (direct from
emerge ruby)

  • Rubygems (yes/no, version)

y, 0.9.4

Please mention anything else about your system that’s kind of weird,
and anything that’s been particularly troublesome regarding mongrel
deployment.

We had some weird issues with mongrel >=1.1, which we never understood,
but after downgrading
to 1.0.4 things are going well again. Kirk H. looked into it, but I
have to admit
I never understood what the reason of the problem with newer mongrel is.

Thanks to all mongrel hackers for the amazing work!

Ciao,
-Armin

Might as well include myself in the survey:

  • Framework:
    Camping, Rails

  • Mongrel version:
    0.3.13.4, 1.0.5, 1.1.3

  • Mongrel handlers used:
    rails, dirhandler, camping, homebrew

  • How many mongrel routes and handlers per route registered
    <= 2

  • Any Mongrel plugins used
    none

  • Mongrel runners used
    mongrel::cluster with --clean
    RV

  • Number of mongrels per server per app
    1 to 8

  • Monitoring system
    nothing (camping), monit (rails)

  • Proxy or software loadbalance
    apache 2.2 mod_proxy_balancer
    apache 2.0 mod_proxy -> pen

  • HW loadbalancer
    Netscaler

  • Caching strategy
    memcached fragments
    camping FS page cache

  • Whether you serve media assets via mongrel itself
    no

  • Operating system including distribution or version
    ubuntu 6.0.6
    RHEL 5

  • Architecture
    Linux 2.6.9-22.0.2.ELsmp #1 SMP Thu Jan 5 17:11:56 EST 2006 x86_64
    x86_64 x86_64 GNU/Linux
    Linux 2.6.16.29-xen #1 SMP Sun Sep 30 04:00:13 UTC 2007 x86_64 GNU/Linux

  • CPU count
    2 cores per server I think… not a lot

  • Ruby version including custom distribution patches,
    ruby 1.8.4 (2005-12-24) [x86_64-linux] (from Ubuntu)
    ruby 1.8.6 (2007-03-13 patchlevel 0) [x86_64-linux] (from source with
    Bleakhouse patches)

  • Rubygems (yes/no, version)
    0.9.4, 0.9.2

On 1/3/08, Evan W. [email protected] wrote:

  • Framework, if any (Camping, Merb, Rails, Nitro, Ramaze, IOWA, Rack…)

Rails, just begun to look at Merb

  • Mongrel version

1.0.1, 1.1.3

  • Mongrel handlers used (rails, dirhandler, camping, cgiwrapper…)

Rails

  • How many mongrel routes and handlers per route registered (if you
    don’t know, it’s probably <= 2)

n/a

  • Any Mongrel plugins used (mongrel_upload_progress, mongrel_gzip,
    mongrel_cow_cluster, mongrel_experimental…)

none

  • Mongrel runners used (mongrel_rails, mongrel::cluster,
    mongrel_service, RV, others… please be very specific about which
    options of the runner you use. For example, some people use
    mongrel::cluster but only for the --clean functionality, not for the
    clustering).

mongrel_rails, mongrel::cluster (for clustering)

  • Number of mongrels per server per app

Typically three to five per app

  • Monitoring system (runit, monit, god…)

monit

  • Proxy or software loadbalancer, if any (apache mod_proxy_balancer,
    nginx, pen…)

apache mod_proxy_balancer

  • HW loadbalancer, if any (Netscaler…)

none

  • Caching strategy (memcached fragments, memcached object, squid,
    rails page cache, rails page fragments, ESI)

rails page and action/fragment caching

  • Whether you serve media assets via mongrel itself, as opposed to
    through a webserver

Media/static assets served by apache

  • Operating system including distribution or version (OS X 10.4.10,
    Ubuntu/Linux 7.10, WinXP SP2, OpenBSD 4.1…)

Red Hat Enterprise Linux ES release 4 (Nahant Update 6)

  • Architecture, via ‘uname -a’ preferably (x86, x86_64, Sparc, PPC,
    Arm (ha), JRuby)

Linux 118790-www 2.6.9-42.0.10.ELsmp #1 SMP Fri Feb 16 17:17:21 EST
2007 i686 athlon i386 GNU/Linux

  • CPU count

2

  • Ruby version including custom distribution patches,
    (1.8.6p110+threadhooks, 1.8.5, JRuby 1.1b1, Rubinius trunk… also
    note where you got it, in case it isn’t clear, for example, OS X 10.5
    built-in, Ubuntu apt, Instant Rails, direct compile from source)
  • Rubygems (yes/no, version)

ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-linux] (compiled from source)
Rubygems - yes, 0.9.2 and 1.0.1

Please mention anything else about your system that’s kind of weird,
and anything that’s been particularly troublesome regarding mongrel
deployment.

No trouble at all.

$ gem install tattle --ignore-dependencies
$ tattle report

user_key,
prefix, /usr/local
ruby_version, 1.8.6
host_vendor, pc
ruby_install_name, ruby
build, i686-pc-linux-gnu
target_cpu, i686
arch, i686-linux
rubygems_version, 1.0.1
SHELL, /bin/sh
host_os, linux-gnu
report_time, Fri Jan 04 11:17:52 -0600 2008
host_cpu, i686
LIBRUBY, libruby-static.a
LIBRUBY_SO, libruby.so.1.8.6
target, i686-pc-linux-gnu

and

user_key,
prefix, /usr/local
ruby_version, 1.8.6
host_vendor, pc
ruby_install_name, ruby
build, i686-pc-linux-gnu
target_cpu, i686
arch, i686-linux
rubygems_version, 0.9.2
SHELL, /bin/sh
host_os, linux-gnu
report_time, Fri Jan 04 11:19:52 -0600 2008
host_cpu, i686
LIBRUBY, libruby-static.a
LIBRUBY_SO, libruby.so.1.8.6
target, i686-pc-linux-gnu

Sean B.
[email protected]

Hello !

On Jan 3, 2008 6:45 PM, Evan W. [email protected] wrote:

Hello Mongrels,

Building on the last messages about Fastthread, can we get a detailed
survey of the different ways people are deploying their applications?
It will help with near-future Mongrel development.

Please include the following things:

  • Framework, if any (Camping, Merb, Rails, Nitro, Ramaze, IOWA, Rack…)

Rails, Camping

  • Mongrel version

1.1.3

  • Mongrel handlers used (rails, dirhandler, camping, cgiwrapper…)

Rails, Camping

  • How many mongrel routes and handlers per route registered (if you
    don’t know, it’s probably <= 2)

don’t know:)

  • Any Mongrel plugins used (mongrel_upload_progress, mongrel_gzip,
    mongrel_cow_cluster, mongrel_experimental…)

mongrel_upload_progress

  • Mongrel runners used (mongrel_rails, mongrel::cluster,
    mongrel_service, RV, others… please be very specific about which
    options of the runner you use. For example, some people use
    mongrel::cluster but only for the --clean functionality, not for the
    clustering).

mongrel::cluster

  • Number of mongrels per server per app

1 to 50

  • Monitoring system (runit, monit, god…)

God or Monit

  • Proxy or software loadbalancer, if any (apache mod_proxy_balancer,
    nginx, pen…)

Lighttpd

  • HW loadbalancer, if any (Netscaler…)

none

  • Caching strategy (memcached fragments, memcached object, squid,
    rails page cache, rails page fragments, ESI)

rails page cache & ESI

  • Whether you serve media assets via mongrel itself, as opposed to
    through a webserver

No, I serve the static files/assets via lighttpd

  • Operating system including distribution or version (OS X 10.4.10,
    Ubuntu/Linux 7.10, WinXP SP2, OpenBSD 4.1…)

OS X for dev, FreeBSD for prod

  • Architecture, via ‘uname -a’ preferably (x86, x86_64, Sparc, PPC,
    Arm (ha), JRuby)

x86

  • CPU count

core2duo, 2.66Ghz

  • Ruby version including custom distribution patches,
    (1.8.6p110+threadhooks, 1.8.5, JRuby 1.1b1, Rubinius trunk… also
    note where you got it, in case it isn’t clear, for example, OS X 10.5
    built-in, Ubuntu apt, Instant Rails, direct compile from source)

ruby 1.8.6; patchlevel 0, built from freebsd with oniguruma

  • Rubygems (yes/no, version)

yes, 1.0.1

$ tattle report

user_key,
prefix, /usr/local
ruby_version, 1.8.6
host_vendor, portbld
ruby_install_name, ruby18
build, i386-portbld-freebsd6
target_cpu, i386
arch, i386-freebsd6
rubygems_version, 1.0.1
SHELL, /bin/sh
host_os, freebsd6
report_time, Fri Jan 04 18:39:15 +0100 2008
host_cpu, i386
LIBRUBY, libruby18.so.18
LIBRUBY_SO, libruby18.so.18
target, i386-portbld-freebsd6