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)
>

Reply via email to