coocood/freecache

why `Get` sometimes become slow

sanyfan opened this issue · 4 comments

I allocate 3G memory for cache. The size of cached data is about 10m terms and the cache memory is almost full.
When I use cache.Get(), I found sometimes it will cost much time in getting some items.

image

The flame graph shows cache.Get() spent a lot of time in lookup() and entryPtrIdx()

However, after I restart the server and rebuild the cache with the same data(maybe not in the same order), the performance issue disappears. The CPU time of the whole process decreases from more than 10 seconds to 0.X second.

Is there any factor that will affect this performance? The position of data? The data is evicted?

it use Lock in get。
easy way is you can new more cache object for performance。

What's the hardware and OS environment?
Are there other processes running on the same machine?

What's the hardware and OS environment? Are there other processes running on the same machine?

we have 3 pods, each pod has 2 CPUs and 6G memory. the OS environment is Alpine. According to the log, there is no other request at our test time.

it use Lock in get。 easy way is you can new more cache object for performance。

according to the flame graph, it seems spent little time on Lock