I’ve been testing RoR on a Windows server backed by MS SQL for a couple
of days. Yesterday, I was trying some automated tests, with this setup:
10 Mongrels on ports 4000-4009 on the server (Windows 2000 AS + MS
SQL 2000)
No other webserver/balancer/proxy/whathaveyou
10 concurrent timed wget scripts running on my laptop requesting 1000
pages from each of the Mongrels on the server, the pages were fetching
an item with quite a few relating tables from the db.
Observing the task manager on the server, I witnessed each of the
ruby.exe processes die one after the other, that is, an overuse of cpu
time compared to the other yet-not-dying ruby.exe processes, and what
appeared to be memory leaking.
The point at which they died varied a lot, from failing on first
request to failing after hundreds of sound responses.
I tried, then, with 10 WEBrick servers instead of the 10 Mongrels, with
the exact same result.
Have you guys tried something similar? And is there any way for me to
find out where the processes fail? I mean, whether it’s inside one of
my Rails scripts, inside the ado.rb mssql adapter, inside Rails logic,
…?
First thing I’d try, honestly, is to use odbc instad of ado. If you
can’t
find code for how to do this, let me know and I’ll rip something out of
one
of my projects. You’ll need to set up a DSN on your machine, but it
seems
to perform better (and then it’s cross-platform if you ever want to move
your app to Linux). I’ve seen the ADO stuff act flakey in our setups.
Well, I found out what was up. I was barking up the wrong tree
completely! I tried ODBC in different flavors, tried MS SQL 2005, tried
porting the app to Linux to check if it had something to do with the
OS, then finally we got it right: It was a logical error on my part in
an ActiveRecord relation: We have a many-to-many relation with an extra
relation attached to it: Books have many Authors, but the Authors take
on different Roles. I had the relation to the roles owned by the
Author, but it should have been owned by the relation itself.
This had an unfortunate effect when stumbling across a fall-back Author
named “Mr. Unknown” - which is put in for god knows what reason This
“guy” ate up over half a million roles, and the we start joining on
those… Oups. So, it wasn’t dead processes, and it wasn’t memory
leaking either, it was dumbness on my part. Thank god
Cheers!
Daniel
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.