On Oct 29, 2023, at 9:43 PM, Zhihui Jiang <coboy...@gmail.com> wrote:
Hi there,
--
You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/a6b8f58f-9452-43e6-9e63-92d944dd0caan%40googlegroups.com.
I second Jason's message, and +1 to off-heap memory as a last resort.
Here are a few more details:
For a starting point on how to reduce memory allocations directly, see https://go.dev/doc/gc-guide#Optimization_guide. Note that this may require restructuring your program in places. (e.g. passing byte slices to functions to be filled instead of returning byte slices; that sort of thing.)RE: pooling memory, take a look look at sync.Pool (https://pkg.go.dev/sync#Pool). A sync.Pool can be really effective at reducing the number of memory allocations that are made in the steady-state.
On Monday, October 30, 2023 at 2:33:21 PM UTC-4 Jason E. Aten wrote:Similar to Robert's suggestion, you could just use non-GC-ed memory within the process.https://github.com/glycerine/offheap provides an example.The central idea is that the Go GC will never touch memory that you have requestedyourself from the OS. So you can make your own Arenas. https://en.wikipedia.org/wiki/Region-based_memory_managementBut I would save these as last resorts of course. Before that:a) can you reduce the objects allocated per request?b) can you allocate everything else on the stack? There are flags to see why things are escaping to the heap, use those in your analysis.(This is by far the simplest and fastest thing. Since the stack is automatically unwound when the user request finishes, typically, there is no GC to do.)
c) can you allocate a pool of objects that is just reused instead of allocating for each new user request?d) Is there anything that can be effectively cached and re-used instead of allocated?
Use the profiler pprof to figure out what is going on.
On Oct 30, 2023, at 11:56 PM, Zhihui Jiang <coboy...@gmail.com> wrote:
Hi Michael, Jason and Robert, thanks a lot for the replies and suggestions!
--
You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/2e3ac44e-923b-4b6b-88ec-743f8474c83an%40googlegroups.com.
What is the average wall time of a request?
Based on what you wrote it appears that handling a single request generates a lot of garbage - high allocation rate - and for this to be significant I suspect the runtime is also significant - which implies to me a spawn and destroy request handler is your best bet.
On Oct 31, 2023, at 12:47 AM, Zhihui Jiang <coboy...@gmail.com> wrote:
To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/29875b49-316d-4332-9854-35da4c043005n%40googlegroups.com.