[erlang-questions] Slow when using chained gen_server:call's, redesign or optimize?

Gianfranco Alongi <>
Sat Jan 28 09:09:20 CET 2012


Could you put common memory-related operations into one single gen_server?
Does this need to be gen_server at all?

You could use the synchronized serialization to generate push-back
behaviour from your system,
so that you do not handle a new request before it's possible - maybe
you are already doing this,
or not.

If you really want to find the bottlenecks, you could try with fprof
http://www.erlang.org/doc/man/fprof.html

/G

> / Sat, Jan 28, 2012 at 1:06 AM, God Dang <> wrote:
> I'm creating a system where I've ended up with alot of gen_servers that
> provides a clean interface. When I run this under load I see that the
> gen_server:call's is becoming a bottleneck.
> For instance, In a handle_request I might ask an other gen_server to get me
> a cached object, then ask the database something, then etc...
> and in some cases I have
> my-gen_server->cache-gen_server->memcache-client-gen_server as you see it
> stacks up to alot of steps. I've tried to optimize with deferring gen_server
> responses and that has given a slight performance improvement but not as
> drastical as if I for instance bypass one gen_server instance.
>
> Is there a better way to go about this or some smart optimization to do? And
> FYI, I use gen_server when I need to keep a state of a connection or
> something so if the answer is to scrap  or reduce the number of gen_servers
> I will need to keep those connections somewhere else.
>
> Thanks, Dang
>
>
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions
>



More information about the erlang-questions mailing list