Giter Site home page Giter Site logo

Comments (11)

asim avatar asim commented on April 28, 2024

Do you have more info? A test case? What kind of concurrency are you pushing? What are your response times? Whats the file descriptor limit in the session you're using?

from micro.

btfak avatar btfak commented on April 28, 2024

just run the greeter example (https://github.com/micro/micro/tree/master/examples/greeter)
and change client to

for i := 0; i < 500000; i++ {
        if err := cli.Call(ctx, req, rsp); err != nil {
            log.Println(err)
            // return
        }
    }

I work on mac osx yosemite, ulimit -a show

-t: cpu time (seconds)              unlimited
-f: file size (blocks)              65536
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         0
-v: address space (kbytes)          unlimited
-l: locked-in-memory size (kbytes)  unlimited
-u: processes                       709
-n: file descriptors                65536

from micro.

asim avatar asim commented on April 28, 2024

I've just run through this on mac os x yosemite with absolutely no issues. Are you using the latest code?

Here's my ulimit -a

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 2560
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 709
virtual memory          (kbytes, -v) unlimited

from micro.

asim avatar asim commented on April 28, 2024

Found a way to replicate when using caching selector. I think the rate at which requests are made were slowed by the registry lookup in my previous attempt.

At around 16k Calls I hit the issue

$ go run client/client.go --selector=cache
16271 {"id":"go.micro.client","code":500,"detail":"Error sending request: dial tcp 192.168.1.65:51149: connect: can't assign requested address","status":"Internal Server Error"}

from micro.

asim avatar asim commented on April 28, 2024

I'm thinking more about this. It's yet unclear at what layer a connection pool would be implemented. If its done within the HTTP transport, then the benefit is only provided to that implementation of the transport. If done at the Selector level it complicates the implementation of a selector and requires every implementation to handle pooling.

This may be something that needs to be solved in the Client itself. The client selects, dials, makes the request and closes the connection. Implementing it at the Client level would ensure every Transport would get the benefit.

from micro.

asim avatar asim commented on April 28, 2024

This is the actual issue being faced. Saturation the ephemeral port limit. http://danielmendel.github.io/blog/2013/04/07/benchmarkers-beware-the-ephemeral-port-limit/

from micro.

asim avatar asim commented on April 28, 2024

Started writing some connection pooling code. Literally just an hours work as of this morning but I'll share when I have something concrete. There's probably a ton of edge cases but we have to start somewhere. Done at the RPC level so that ALL the transports will benefit.

from micro.

asim avatar asim commented on April 28, 2024

go-micro/go-micro#86

from micro.

btfak avatar btfak commented on April 28, 2024

great job,i will do some testing

from micro.

asim avatar asim commented on April 28, 2024

Any follow up? How's the testing going?

from micro.

asim avatar asim commented on April 28, 2024

I'm closing this since the work has already begun.

from micro.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.