pelias / wof-admin-lookup

Who's on First Admin Lookup for the Pelias Geocoder
https://pelias.io
MIT License
9 stars 24 forks source link

[Fix] Should clean responseQueue when responseCallback is used #196

Closed Joxit closed 6 years ago

Joxit commented 6 years ago

Should clean responseQueue when responseCallback is used

orangejulius commented 6 years ago

Woah. This is a good fix. I take it this can cause big problems since the response queue will grow quite large over time. Did you notice anything measurable? Perhaps the pip-service slows down, or even crashes?

Joxit commented 6 years ago

I noticed it when I wanted to debug pip-service (lat: 2.321376, lng: 48.796483 located in Paris instead of Bagneux). I do not have enough requests to have something measurable :/ but can be a big memory leak.

orangejulius commented 6 years ago

Wow yes I can confirm this fixes a HUGE memory leak.

Basically, any request for a lat/lon that does not end up intersecting with a polygon will cause a memory leak.

I added some debug output to the PIP service to demonstrate this. Here's a few seconds of printing out the total number of requests so far, and the number of elements in the request queue, once per second.

request count: 25815, response queue: 10
request count: 27593, response queue: 8
request count: 29470, response queue: 4
request count: 31430, response queue: 8
request count: 33359, response queue: 5
request count: 35307, response queue: 3
request count: 37247, response queue: 3
request count: 39178, response queue: 4
request count: 41122, response queue: 3
request count: 43082, response queue: 6
request count: 45016, response queue: 10
request count: 46974, response queue: 8
request count: 48862, response queue: 5
request count: 50705, response queue: 9
request count: 52646, response queue: 6
request count: 54577, response queue: 7
request count: 56528, response queue: 8
request count: 58467, response queue: 8
request count: 60353, response queue: 4
request count: 62241, response queue: 4
request count: 64199, response queue: 5
request count: 66165, response queue: 3
request count: 68099, response queue: 7
request count: 69904, response queue: 0
request count: 69904, response queue: 0
request count: 69904, response queue: 0
request count: 69904, response queue: 0
request count: 69904, response queue: 0
request count: 69904, response queue: 0
request count: 69904, response queue: 0
request count: 69904, response queue: 0
request count: 69904, response queue: 0
request count: 69904, response queue: 0
request count: 69904, response queue: 0
request count: 70520, response queue: 616
request count: 72096, response queue: 2192
request count: 73809, response queue: 3905
request count: 75573, response queue: 5669
request count: 77152, response queue: 7248
request count: 78919, response queue: 9015
request count: 80717, response queue: 10813

For the first few seconds I was querying a lat/lon that intersects a polygon in the PIP service. Then you can see I shut it off, as the response queue goes to zero and the count stays static.

Then I started up a new set of requests that were in the middle of the ocean somewhere. You can see the response queue gets huge!

Things slow down, and indeed after only about 20 minutes of 1500 requests/sec, the PIP service crashes after running out of memory.

Thanks so much for noticing this!

orangejulius commented 6 years ago

By the way, this morning (New York time) we had the first Pelias community call. I hadn't done this full testing yet then, but I did give you a mention in the thanks/shout out section, since I had a feeling this fix would be big! Glad I was proven right.

We will have another East Coast US/Europe/Africa timezone friendly community call in two months, would love to see you there @Joxit :)

Joxit commented 6 years ago

Yeah, that's cool! :smile: You are welcome, I like your project and I like/want to participate in it :smiley:.

Ok, thx for your invitation, I will try to be present for your next call :wink: