Skip to content

Stress test results locally on a mac in single-server mode with synchronous function calls #571

Open
@matthewmueller

Description

@matthewmueller

Hey folks,

First of all, I love what you guys are doing here and I think the approach to start as a single server and provide a smooth transition to a load-balanced architecture is the way to go.

One thing I wanted to evaluate before diving further was the performance of the single-server solution. I just ran the hello world example against a stress test on a local single-server setup and it started failing pretty quickly.

Here's the command I'm running:

echo "GET http://localhost:8080/r/myapp/hello" | vegeta attack -duration=20s | tee results.bin | vegeta report
Requests      [total, rate]            1000, 50.05
Duration      [total, attack, wait]    38.884186888s, 19.979999914s, 18.904186974s
Latencies     [mean, 50, 95, 99, max]  13.353667945s, 5.123431ms, 30.007355986s, 30.008892365s, 30.011017934s
Bytes In      [total, mean]            0, 0.00
Bytes Out     [total, mean]            0, 0.00
Success       [ratio]                  0.00%
Status Codes  [code:count]             0:1000
Error Set:
Get http://localhost:8080/r/myapp/hello: EOF
Get http://localhost:8080/r/myapp/hello: read tcp [::1]:49504->[::1]:8080: read: connection reset by peer
Get http://localhost:8080/r/myapp/hello: http: server closed idle connection
Get http://localhost:8080/r/myapp/hello: net/http: timeout awaiting response headers

It was working swimmingly and then it reached a point where it halted, then spit out a bunch of warnings:

WARN[1088] docker temporary error, retrying              error="context deadline exceeded"
WARN[1088] retrying on docker errors timed out, restart docker or rotate this instance?  error="context deadline exceeded"

Followed by errors:

ERRO[1147] Failed to run task                            action="server.handleRunnerRequest)-fm" app=myapp call_id=4d0decd6-3777-5d36-913f-f74b21e8249c error="context deadline exceeded" image="mattmueller/hello:0.0.1" route="/hello"

I was running this under the synchronous option, I was hoping that the requests would be held by the message queue until there were resources available, but it seems like that's only with the asynchronous option?

Any ideas? I'd love to see this become a more robust solution in the future. Keep up the good work!

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions