FYI, the bug is submitted:
https://bz.apache.org/bugzilla/show_bug.cgi?id=59897

Chris and Rainer, thanks for pointing me in the right direction!

Michael

On 19 July 2016 at 11:42, Michael Diener <mdie...@mdiener.de> wrote:

> Chris,
>
> thanks a lot for explaining what could be overflowing the FD_SETSIZE of
> 1024.
>
> Just for reference, I use mpm_event mostly with SSL connections, so it
> should behave like mpm_worker. This is my configuration:
>
>         StartServers                     2
>         ServerLimit          16
>
>         MinSpareThreads          256
>         MaxSpareThreads          1280
>
>         ThreadLimit                      1024
>         ThreadsPerChild          1024
>
>         MaxRequestWorkers         16384
>         MaxConnectionsPerChild   0
>
>
> One more thing, poll() seems to be used in jk_connect.c in other places
> already, just not at the spot that matters in my case.
>
> Anyhow, I will submit a bug report later this week with all the
> information and will post a link over here as well.
>
> Thank you,
> Michael
>
>
>
>
> On 18 July 2016 at 16:56, Christopher Schultz <
> ch...@christopherschultz.net> wrote:
>
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA256
>>
>> Michael,
>>
>> On 7/18/16 10:10 AM, Christopher Schultz wrote:
>> > Michael,
>> >
>> > On 7/18/16 8:53 AM, Michael Diener wrote:
>> >> On 6 July 2016 at 00:09, Christopher Schultz
>> >> <ch...@christopherschultz.net> wrote:
>> >
>> >>>> From what I understand a buffer overflow would only happen
>> >>>> for FD_SET if the fd_set gets over 1024 descriptors. I made
>> >>>> sure that my ulimit for open files is set and applied large
>> >>>> enough, so that's not it.
>> >>>
>> >>> There's nothing magic about the ulimit. An fd_set should size
>> >>> appropriately for your OS. On my Linux system, FD_SETSIZE
>> >>> happens to be set to 1024. Reading through the byzantine
>> >>> labyrinth of includes, it appears that FD_SET has zero
>> >>> boundary-checking, so it's therefore possible that overflow
>> >>> will occur.
>> >
>> >
>> >> Regarding the FD_SETSIZE, it is also set for me to 1024 although
>> >> the ulimit is set higher.
>> >
>> > Well, the FD_SETSIZE is just the maximum size of the fd set that
>> > can be passed-into select() specifically. That doesn't limit the
>> > number of file descriptors your processes can open. The ulimit
>> > settings are the limits on those.
>> >
>> >> I'm a bit lost now on what I should do now. What makes me wonder
>> >> is, that nobody else seems to hit this limitation of FD_SET and
>> >> this makes me think something on my Linux machine is not right.
>> >
>> > Well, not everyone is using the same setup. For example, using NIO
>> > through Java is likely to get you the poll() call under the hood,
>> > so supporting more than e.g. 1024 file descriptors is not an issue
>> > there. That's just a guess, but I think it's a reasonable guess.
>> >
>> > I think tcnative+APR is not widely deployed. I have no numbers to
>> > back that up, but we don't get a huge volume of questions in the
>> > list about it.
>>
>> Of course, the above statement makes no sense whatsoever. This is
>> about mod_jk and not tcnative. Sorry for the confusion.
>>
>> But I was thinking, the case above would require a single httpd thread
>> to accumulate more than 1024 connections, and that would require some
>> very specific circumstances.
>>
>> First, you'd have to be using an MPM that allowed more than one
>> connection per process/thread, so that means no pre-fork, leaving
>> basically event or worker available.
>>
>> Then, you'd have to have enough traffic to cause one thread to grow to
>> more than 1024 connections. The default for httpd's worker MPM has 64
>> threads per child and 16 server processes.
>>
>> For one process to exceed the 1024 fd limit, you'd have to be handling
>> roughly 16 simultaneous connections per thread PER PROCESS. I'm not
>> sure how httpd auto-scales-out its child processes, so you could
>> conceivably get 1024 simultaneous connections in a burst of requests
>> to a single child process, but it seems likely that load would be
>> roughly-split between 16 child processes, keeping those 1024
>> connections down to a mild 64-jk-connections per-process.
>>
>> Assuming you have 16 child processes and a perfectly uniform
>> load-distribution between them, you'd have to get a burst of 16k
>> simultaneous requests in order to max-out that fd array on a single
>> server. That's probably why it's quite rare.
>>
>> - -chris
>> -----BEGIN PGP SIGNATURE-----
>> Comment: GPGTools - http://gpgtools.org
>> Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/
>>
>> iQIcBAEBCAAGBQJXjO4tAAoJEBzwKT+lPKRYb9wP/j2i6FW7gOGf/G4/CTundEMY
>> WcKKPfNXAOU270KyiBkuSLw06Cjw8mk3vsjpg5i5JkPC4TUNy1jyhaI5cs0RvisV
>> pzqFgZCuyz4gPtg4TRCXw5RrmLwe7unBldTETjK54P9/Nd6Vuj34mUV8OLcnYZh6
>> UMCe0ULbBV5IoGhLmGQ5yy7MfHGdq1vwmxR41i4A4rc4J9fOC1UI4pIOvJRM1cnT
>> 5cfLEavT3tbqxaxLCs5V/pQkkuwQMKITSW+JGdDPxN3oXL7b1QCw8RGBqhpDgjE/
>> FIIIBGfbMGHDXstmSBRXGlxkASKKdYlK9qoYU3f7G0PK053zx5TD+2vOfb0u0Vi/
>> lwIkk3lhL7Azw9hYKFr1R+PW3ewUqXI7Nh05HldNWlJ48I91cTGLF2mC7uRo6uQ2
>> M9pUCuyCtL1ajgG6eUmBlo2soIAaHPkorCmCdUAiv/zWfHKSSEGTwr3l81DtSapE
>> iORRoCyLVIhxKQprvBlTHp2uDIa7lzXOI83RcMb6ZqdxiNe3LscTRsVl/Ll8cVHj
>> Fw7klJgbPrRPmMn02hANdalDE96CvagPlEmgCGhp9h3TPD7fV28a3vY154IYxLBW
>> C2ksoMNv12ha+kiTvrYLc7j85drtZg7V0C/5TfRdBRSxxJ0KF/ye7ed2SN/8RRKC
>> QgyoIkZ2oSBIoHc/ss26
>> =f33p
>> -----END PGP SIGNATURE-----
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>
>>
>
>
> --
>
> ______________________________
> NEW GAME! http://www.dig-pig.com
>
> Michael Diener - Software e.K.
>
> mdie...@mdiener.de
> +49 178 501 601 8
> www.mdiener.de
>
> @mdienersoftware
>
> Grünberger Str. 62,
> 10245 Berlin, Germany
>
> Sitz Berlin, Amtsgericht Charlottenburg, HRA 46760 B
> USt-IdNr. DE233968393
>



-- 

______________________________
NEW GAME! http://www.dig-pig.com

Michael Diener - Software e.K.

mdie...@mdiener.de
+49 178 501 601 8
www.mdiener.de

@mdienersoftware

Grünberger Str. 62,
10245 Berlin, Germany

Sitz Berlin, Amtsgericht Charlottenburg, HRA 46760 B
USt-IdNr. DE233968393

Reply via email to