Status update.
I have updated to Julia 0.4 and added keep-alive support to HttpServer and
now ab -k works quite fine.
However when there is no keep-alive and each request is made in a separate
connection, then Julia still hangs around request #16k.
My first idea of how to profile it was this:
using HttpServer
gc_enable(false)
const Z = "HELLO WORLD"
c = 0
s = open("./prof.txt", "w")
http = HttpHandler() do req::Request, res::Response
global c
r = Response(Z)
c += 1
if c == 16000
Profile.clear()
end
if c > 16428
c = 0
Profile.print(s, C=true, cols=500)
close(s)
end
r
end
server = Server( http )
@profile run( server, 8000 )
However the output I got is 19k lines long and I have no idea how to use
it. Here's a top of it:
3 /private/tmp/julia20151012-99535-1c7kouk/src/builtins.c; jl_egal; line
: 306
1 /private/tmp/julia20151012-99535-1c7kouk/src/builtins.c; jl_f_isa;
line: 370
1 /private/tmp/julia20151012-99535-1c7kouk/src/gc.c; jl_gc_alloc_3w;
line: 2332
1 /private/tmp/julia20151012-99535-1c7kouk/src/gf.c; jl_apply_generic;
line: 1711
1 /private/tmp/julia20151012-99535-1c7kouk/src/jltypes.c; jl_is_type;
line: 69
1 /private/tmp/julia20151012-99535-1c7kouk/src/jltypes.c; jl_subtype_le;
line: 2559
1683 /private/tmp/julia20151012-99535-1c7kouk/src/task.c; jl_apply; line:
241
5 /private/tmp/julia20151012-99535-1c7kouk/src/task.c;
throw_if_exception_set; line: 230
1 /usr/lib/system/libsystem_c.dylib; strlen; (unknown line)
1 /usr/lib/system/libsystem_kernel.dylib; __accept; (unknown line)
1 /usr/lib/system/libsystem_kernel.dylib; __ioctl; (unknown line)
7 /usr/lib/system/libsystem_kernel.dylib; close; (unknown line)
26463 /usr/lib/system/libsystem_kernel.dylib; kevent; (unknown line)
4 /usr/lib/system/libsystem_kernel.dylib; mach_timebase_info; (unknown
line)
1 /usr/lib/system/libsystem_kernel.dylib; read; (unknown line)
4 /usr/lib/system/libsystem_kernel.dylib; shutdown; (unknown line)
30 /usr/lib/system/libsystem_kernel.dylib; write; (unknown line)
39 /usr/lib/system/libsystem_platform.dylib;
_platform_bzero$VARIANT$Unknown; (unknown line)
2 /usr/lib/system/libsystem_platform.dylib; _platform_memcmp; (unknown
line)
5 /usr/lib/system/libsystem_platform.dylib;
_platform_memmove$VARIANT$Unknown; (unknown line)
1 /usr/lib/system/libsystem_platform.dylib;
_platform_memset$VARIANT$Unknown; (unknown line)
2 /usr/lib/system/libsystem_platform.dylib; _setjmp; (unknown line)
1 /usr/local/Cellar/julia/0.4.0/lib/julia/libjulia.dylib;
_ZN4llvm12CallSiteBaseINS_8FunctionENS_5ValueENS_4UserENS_11InstructionENS_8CallInstENS_10InvokeInstEPNS_3UseEE3getEPS2_
; (unknown line)
1 /usr/local/Cellar/julia/0.4.0/lib/julia/libjulia.dylib;
_ZN4llvm12LeakDetector23removeGarbageObjectImplEPKNS_5ValueE; (unknown line)
1 /usr/local/Cellar/julia/0.4.0/lib/julia/libjulia.dylib;
_ZN4llvm15FoldingSetTraitINS_6MDNodeEE6EqualsERKS1_RKNS_16FoldingSetNodeIDEjRS5_
; (unknown line)
1 /usr/local/Cellar/julia/0.4.0/lib/julia/libjulia.dylib;
_ZN4llvm21llvm_is_multithreadedEv; (unknown line)
1 /usr/local/Cellar/julia/0.4.0/lib/julia/libjulia.dylib;
_ZN4llvm23SmallPtrSetIteratorImpl17AdvanceIfNotValidEv; (unknown line)
1 /usr/local/Cellar/julia/0.4.0/lib/julia/libjulia.dylib;
_ZN4llvm6iplistINS_6SDNodeENS_12ilist_traitsIS1_EEE6removeERNS_14ilist_iteratorIS1_EE
; (unknown line)
2 /usr/local/Cellar/julia/0.4.0/lib/julia/libjulia.dylib; __muloti4;
(unknown
line)
1 /usr/local/Cellar/julia/0.4.0/lib/julia/sys.dylib; anonymous; (unknown
line)
1 /usr/local/Cellar/julia/0.4.0/lib/julia/sys.dylib; getindex; (unknown
line)
1 /usr/local/Cellar/julia/0.4.0/lib/julia/sys.dylib; hash; (unknown line
)
1 /usr/local/Cellar/julia/0.4.0/lib/julia/sys.dylib; jlcall_getindex_225
; (unknown line)
18 /usr/local/bin/julia; main; (unknown line)
1 unknown function (ip: 0x000000030d2f0baa)
Any advice on how to find out what is Julia doing when it doesn't respond
to a request within dozens of seconds (mean response is 1.8ms) is really
appreciated.
On Wednesday, August 19, 2015 at 1:42:51 PM UTC+3, [email protected]
wrote:
>
> Hi there!
> I was trying to do some basic benchmark of Julia's HttpServer, however I
> have some strange behaviour.
> When I ask ab to do 20k requests in a single thread, at around request
> #16k Julia starts accepting connections quite slowly (around 20s). If I
> request two threads, then ab fails with timeout on connecting (60s).
> I thought that the problem may be with the GC so I disabled it, but that
> didn't help.
> I would be grateful for the tips on how to look into this more closely.
>
> (Julia 0.3.10 via brew on os x)
>