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

Reply via email to