kerisy / archttp

A highly performant web framework written in D.
44 stars 3 forks source link

Suddenly shutdown @ high concurrency #4

Open waghanza opened 1 year ago

waghanza commented 1 year ago

Hi @zoujiaqing,

When I run archttp from https://github.com/the-benchmarker/web-frameworks/tree/master/d/archttp inside a container

FROM dlang2/ldc-ubuntu:1.26.0 AS build

WORKDIR /usr/src/app

COPY . ./

RUN dub build -b release

FROM ubuntu:focal

RUN apt-get -qq update

COPY --from=build /usr/src/app/server /usr/src/app/server

CMD /usr/src/app/server

The server suddenly shutdown after stressing it with wrk -H 'Connection: keep-alive' --connections 2 --threads 1 --duration 1 --timeout 1 http://172.17.0.2:3000

Do you have any way to add debug to see what is going on ?

Regards,

cyrusmsk commented 1 year ago

This is the error that I have when tried to run: wrk -H 'Connection: keep-alive' -d 5s -c 512 --timeout 8 -t 2 http://127.0.0.1:3000

2023-08-10 23:38:45 17C103 [WARN] isRegistered: true, isClosed: false, msg=Broken pipe detected! - ../../../.dub/packages/geario-0.1.0/geario/source/geario/net/channel/AbstractChannel.d:99 2023-08-10 23:38:45 17C103 [ERROR] Error occurred: 8 Broken pipe detected! - ../../../.dub/packages/archttp-1.1.1/archttp/source/archttp/Archttp.d:194 object.Exception@../../../.dub/packages/geario-0.1.0/geario/source/geario/net/TcpStream.d(335): The connection 127.0.0.1:62153 is closed!

../../../.dub/packages/geario-0.1.0/geario/source/geario/net/TcpStream.d:335 void geario.net.TcpStream.TcpStream.Write(const(ubyte)[]) [0x10423d04f] ../../../.dub/packages/archttp-1.1.1/archttp/source/archttp/HttpContext.d:92 void archttp.HttpContext.HttpContext.Write(immutable(char)[]) [0x1041b3673] /Users/cyrus_msk/Documents/Files/Software/ldc2-1.30.0-osx-arm64/bin/../import/std/regex/internal/thompson.d-mixin-837 void archttp.HttpResponse.HttpResponse.sendBody() [0x1041e08ab] /Users/cyrus_msk/Documents/Files/Software/ldc2-1.30.0-osx-arm64/bin/../import/std/regex/internal/thompson.d-mixin-837:840 void archttp.HttpResponse.HttpResponse.send() [0x1041e06b7] /Users/cyrus_msk/Documents/Files/Software/ldc2-1.30.0-osx-arm64/bin/../import/std/regex/internal/thompson.d-mixin-837 void archttp.HttpResponse.HttpResponse.send(immutable(char)[]) [0x1041e0647] source/app.d:9 void app.main(immutable(char)[][]).lambda3(archttp.HttpRequest.HttpRequest, archttp.HttpResponse.HttpResponse) [0x10414ad67] ../../../.dub/packages/archttp-1.1.1/archttp/source/archttp/Archttp.d:171 void archttp.Archttp.Archttp.handle(archttp.HttpContext.HttpContext) [0x10414b7cb] ../../../.dub/packages/archttp-1.1.1/archttp/source/archttp/Archttp.d:190 void archttp.Archttp.Archttp.accepted(geario.net.TcpListener.TcpListener, geario.net.TcpStream.TcpStream).lambda6(archttp.HttpRequest.HttpRequest) [0x10414bc2f] ../../../.dub/packages/geario-0.1.0/geario/source/geario/codec/Framed.d:98 void geario.codec.Framed.Framed!(archttp.HttpRequest.HttpRequest, archttp.HttpResponse.HttpResponse).Framed.Handle(archttp.HttpRequest.HttpRequest) [0x10414dba3] ../../../.dub/packages/geario-0.1.0/geario/source/geario/codec/Framed.d:69 void geario.codec.Framed.Framed!(archttp.HttpRequest.HttpRequest, archttp.HttpResponse.HttpResponse).Framed.Received(nbuff.buffer.NbuffChunk) [0x10414da43] ../../../.dub/packages/geario-0.1.0/geario/source/geario/net/channel/posix/AbstractStream.d:71 void geario.net.channel.posix.AbstractStream.AbstractStream.onDataReceived(nbuff.buffer.NbuffChunk) [0x10423f51f] ../../../.dub/packages/geario-0.1.0/geario/source/geario/net/channel/posix/AbstractStream.d:134 bool geario.net.channel.posix.AbstractStream.AbstractStream.TryRead() [0x10423f797] ../../../.dub/packages/geario-0.1.0/geario/source/geario/net/TcpStream.d:421 void geario.net.TcpStream.TcpStream.OnRead() [0x10423d793] ../../../.dub/packages/geario-0.1.0/geario/source/geario/event/selector/Kqueue.d:258 void geario.event.selector.Kqueue.AbstractSelector.ChannelEventHandle(geario.net.channel.AbstractChannel.AbstractChannel, uint) [0x104231e17] ../../../.dub/packages/geario-0.1.0/geario/source/geario/event/selector/Kqueue.d:238 int geario.event.selector.Kqueue.AbstractSelector.DoSelect(long) [0x104231cbb] ../../../.dub/packages/geario-0.1.0/geario/source/geario/event/selector/Selector.d:171 void geario.event.selector.Selector.Selector.OnLoop(long) [0x10423241f] ../../../.dub/packages/geario-0.1.0/geario/source/geario/event/selector/Selector.d:135 void geario.event.selector.Selector.Selector.DoRun(void delegate()) [0x10423222b] ../../../.dub/packages/geario-0.1.0/geario/source/geario/event/selector/Selector.d:103 void geario.event.selector.Selector.Selector.Run(long) [0x1042320b7] ../../../.dub/packages/archttp-1.1.1/archttp/source/archttp/Archttp.d:245 void archttp.Archttp.Archttp.run() [0x10414c087] ../../../.dub/packages/archttp-1.1.1/archttp/source/archttp/Archttp.d:215 void archttp.Archttp.Archttp.listen(ushort) [0x10414bf2f] source/app.d:20 _Dmain [0x10414ad23]

waghanza commented 1 year ago

Nice catch :tada: