Litespeed attempts to make starting up very fast, and it does so by loading junk in a parent process, then doing the fork. That way, all that disk-scouring to find all the rails files, which takes about 6 seconds of heavy iowait, is only done once.
However it also means any connections you initialize will also be shared among child processes.
Database connections - the lsapi parent process explicitly disconnects after loading, so they'll be re-initialized for each child.
Memcache connections you need to do yourself. I do so at the bottom of my environment.rb (I'm using memcache-client, which sets a global CACHE):
CACHE.reset
Furthermore, if you want to speed things up even more you can load your controller files in the environment, rather than on demand. That way, they'll be pre-loaded for your child processes, and you'll have significantly more shared memory:
if RAILS_ENV=='production'
require_dependency 'application'
Dir.foreach( "#{RAILS_ROOT}/app/models" ) {|f| $logger.d "r #{f}"; silence_warnings{require_dependency f} if f =~ /\.rb$/}
Dir.foreach( "#{RAILS_ROOT}/app/controllers" ) {|f| $logger.d "r #{f}"; silence_warnings{require_dependency f} if f =~ /\.rb$/}
end
If you're using engines (I am), you'll want to throw in your engine directories in there too.
Thanks again to litespeed people for a great project, and for making a free version available. I hope we all consider purchasing a license at some point
However it also means any connections you initialize will also be shared among child processes.
Database connections - the lsapi parent process explicitly disconnects after loading, so they'll be re-initialized for each child.
Memcache connections you need to do yourself. I do so at the bottom of my environment.rb (I'm using memcache-client, which sets a global CACHE):
CACHE.reset
Furthermore, if you want to speed things up even more you can load your controller files in the environment, rather than on demand. That way, they'll be pre-loaded for your child processes, and you'll have significantly more shared memory:
if RAILS_ENV=='production'
require_dependency 'application'
Dir.foreach( "#{RAILS_ROOT}/app/models" ) {|f| $logger.d "r #{f}"; silence_warnings{require_dependency f} if f =~ /\.rb$/}
Dir.foreach( "#{RAILS_ROOT}/app/controllers" ) {|f| $logger.d "r #{f}"; silence_warnings{require_dependency f} if f =~ /\.rb$/}
end
If you're using engines (I am), you'll want to throw in your engine directories in there too.
Thanks again to litespeed people for a great project, and for making a free version available. I hope we all consider purchasing a license at some point