Zach
Zach
-verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails
These settings are designed to be run in production settings so shouldn't significantly impact performance.
I suspect you'll see a full gc cycle at some point (probably about oh 6-7 seconds long).
Yesterday's version (up to "forgot an argument" commit) gave ~3.4K req/
seq on my machine. Big performance boost compared to previous version,
but node.js is still twice as fast.
With the last commit ("clean up optimizations") it gives ~1.9K req/
seq.
Also, every other time I run
ab -n 5000 -c 5 http://127.0.0.1:8080/
I get terrible result like this:
Percentage of the requests served within a certain time (ms)
50% 2
66% 2
75% 3
80% 3
90% 4
95% 8
98% 11
99% 12
100% 6979 (longest request)
So basically it freezes for several seconds on some requests. Any
ideas what could be causing this?
Thank you for the tip about ephemeral port setting. I got this fixed
now.
I think it's pretty important to match or be at least very close to
node.js on the hello world benchmark. I understand that it is not
realistic, but it is very easy to reproduce and it gives you a general
impression about the performance of a platform, a base line so to
speak. I am a newcomer to both platforms and I am still trying to
decide which one I would like to invest more time in. Basic hello
world benchmark can be one of the factor that will affect my decision.
So if aleph community wants to grow matching (or beating) competitors
in basic benchmark may help.
With respect to the general question of performance, I'm of two minds.
I agree speed is important, and ignoring performance issues that are
trivial to fix isn't constructive. I'm glad that the regression in
performance was reported, and I should probably have some automated
benchmarks so that I'm not just testing correctness before committing
changes.
On the other hand, I don't know how meaningful the 'Hello World'
benchmark is when evaluating a library for real-world use. As the
amount of work per request increases, the communication overhead
measured by the benchmark becomes increasingly insignificant. I'd put
more weight on how simple it is to write the evented application
logic, as long as there aren't serious performance concerns.
I'll also note that Clojure code has a lot of variables, few of which
are well understood. I'm told, but have not tested, that
-XX:MaxInlineSize=100 can greatly improve performance. I suspect, but
have not confirmed, that 1.3 will improve performance quite a bit.
There are a hundred other JVM knobs to tweak, none of which I have any
expertise in. Once this becomes more than just a theoretical issue, I
think that the community will adopt some best practices.
Hopefully that answers everyone's questions. Let me know if it doesn't.
Zach