My app makes use of a 3rd party webservice to lookup company
information. However, there seems to be a major memory leak with
WSDLDriverFactory.
I do:
class MyService
@@auth_hash = { :username => ‘username’, :password => ‘password’ }
@@wsdl = ‘http://mywsdlurl’
@@driver = SOAP::WSDLDriverFactory.new(@@wsdl).create_rpc_driver
Call this several times
def self.search_firms(name, state = ‘’)
results = @@driver.Firms_Info({ :name => name, :state =>
state}.merge(@@auth_hash))
Process the results
end
end
Every call to driver.Firms_Info grabs memory that I can never get
back. My app will process hundreds (sometimes 1000’s) of companies at
a time, but the process ends up sucking up all my memory and things
slow to a crawl. No matter what I do I can’t get the memory back. I
tried sprinkling GC.start calls around and make sure to set things to
nil when done. In the end, I commented out everything but the
driver.Firms_Info call, and I still lost 100’s of megs very quickly.
I saw several mentions of a memory leak in Hash, but they are old. I
know WSDLDriverFactory converts everything to Hash, so maybe that
isn’t fixed yet.
Anyone else see this? Any work-arounds?
I’m using Ruby 1.8.6 and Rails 2.0.2.