libmicrohttpd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [libmicrohttpd] Problem with Keep-Alive and MHD_OPTION_CONNECTION_TI


From: silvioprog
Subject: Re: [libmicrohttpd] Problem with Keep-Alive and MHD_OPTION_CONNECTION_TIMEOUT in MHD_USE_THREAD_PER_CONNECTION mode
Date: Tue, 8 Dec 2015 15:33:29 -0300

Evg,

I love open source, you definitely K.I.L.L.E.D the problem! :-D

I did many tests comparing MHD with NodeJS and now MHD is working fine on Windows. In my tests I used the MHD 32 bits and NodeJS 64 bits (5.1.1), and it was proposital, but MHD even in 32 bits worked like a charm and has a nice performance as NodeJS. I'm sending the result on bottom of this e-mail.

And Evg, sorry if I'm being boring, but, can you send me the compiled 32 and 64 binaries? I can compile that, but I don't know if my environment is the better to compile MHD. The 32 bit binary that I compiled has 499KB, it isn't a problem, but I think that the size can be less.

Thank you, and count on me in any help too! (y)

=== begin JMeter Thread Group Config ===

Number of Threads (Users): 1000
Ramp-Up Period (in seconds): 1
Loop Count (forvever unchecked): 100

=== end JMeter Thread Group Config ===

=== begin NodeJS 5.1.1 64 bits result ===

Samples: 100000
Average: 83
Median: 85
90% line: 93
95% line: 99
99% line: 113
Min: 0
Max: 126
Error: 0,00%
Throughput: 5094,8/sec
KB/sec: 910,5

=== end NodeJS 5.1.1 64 bits result ===

=== begin MHD 0x00094701 (with Evg and Christ fixes) 32 bits result ===

Samples: 100000
Average: 57
Median: 58
90% line: 63
95% line: 65
99% line: 78
Min: 0
Max: 515
Error: 0,00%
Throughput: 4835,1/sec
KB/sec: 769,7

=== begin MHD 0x00094701 (with Evg and Christ fixes) 32 bits result ===

ps. I don't know what `Max: 515` column means, but the more important column is `Error`, and it is 0,00% to MHD too! :-)

On Tue, Dec 8, 2015 at 9:05 AM, Evgeny Grin <address@hidden> wrote:
 
07.12.2015, 22:58, "silvioprog" <address@hidden>:
Hello, I have good news in the test 2, however in test 3 ...
 
@Evg, do I need to change the `FD_SETSIZE` and the MHD source before compiling or in the `CMakeLists.txt` of my example?
Define FD_SETSIZE to some large value (real limit is about 32k) before including any headers. You can define it in command line parameters.
Or get latest SVN - how MHD really redefine FD_SETSIZE with WinSock (old code for redefinition was non-working).
 
 
But, make this small change in your JMeter config:
 
https://dl.dropboxusercontent.com/u/135304375/snip1.png (I can send a new jmx file if you prefer)
 
and in the MHD example:
 
  MHD_OPTION_CONNECTION_LIMIT, (unsigned int) 16000 * 2,
 
1,84% erros. And a lot of: `Failed to create a thread: Not enough space`. OK, so I disabled the "thread per connection":
Seems that you are using 32-bit version which limit number of threads because of lack of address space.
 
 
MHD_start_daemon(MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG, PORT, NULL, NULL,
  &answer_to_connection, NULL,
  MHD_OPTION_CONNECTION_TIMEOUT, (unsigned int) 240,
  MHD_OPTION_CONNECTION_LIMIT, (unsigned int) 16000 * 2,
  MHD_OPTION_END);
 
Samples: 27255.
Error: 99,61%. LOL
 
And it locks the last requests.
 
Sorry for my ignorance, but MHD_USE_SELECT_INTERNALLY should be the more fast MHD option, then or I did something wrong in my test, or this MHD option has a small bug on Windows. :-/
This is an expected behavior with FD_SETSIZE equals 64 and 1000 keep-alive clients. First 62 clients occupied all handled by select() connections and the rest of clients are failed. If you change connection to "close", number of errors will be significantly lower.

--
Silvio Clécio

reply via email to

[Prev in Thread] Current Thread [Next in Thread]