Deepak
Deepak

Reputation: 437

Too Many Files Open error in java NIO

Hi I have created a socket and client program using java NIO. My server and client are on different computers ,Server have LINUX OS and CLIENT have WINDOWS OS. Whenever I have created 1024 sockets on client my client machines supports but in server I got too many files open error. So How to open 15000 sockets without any error in server. Or is there any other way to connect with 15000 clients at the same time?

Thanks Bapi

Upvotes: 0

Views: 5221

Answers (3)

Alex Vaz
Alex Vaz

Reputation: 516

Ok, questioning why he needs 15K sockets is a separate discussion.

The answer is that you are hitting the user's file descriptor limit.

Log with the user you will use in the listener and do $ulimit -n to see the current limit.

Most likely 1024.

Using root edit the file /etc/security/limits.conf

and set ->

{username} soft nofile 65536
{username} hard nofile 65536

65536 is just a suggestion, you will need to figure that out from your app.

Log off, log in again and recheck with ulimit -n, to see it worked.

Your are probably going to need more than 15 fds for all that. Monitor your app with lsof.

Like this:

$lsof -p {pid}   <- lists all file descriptors
$lsof -p {pid}  | wc -l    <- count them

By the way, you might also hit the system wide fd limit, so you need to check it:

$cat /proc/sys/fs/file-max

To increase that one, add this line to the /etc/sysctl.conf

#Maximum number of open FDs
fs.file-max = 65535

Upvotes: 6

Brian Agnew
Brian Agnew

Reputation: 272257

If you're going to have 15,000 clients talking to your server (and possibly 200,000 in the future according to your comments) then I suspect you're going to have scalability problems servicing those clients once they're connected (if they connect).

I think you may need to step back and look at how you can architect your application and/or deployment to successfully achieve these sort of numbers.

Upvotes: 1

Matthew Flaschen
Matthew Flaschen

Reputation: 284796

Why do you need to have 15000 sockets on one machine? Anyway, look at ulimit -n

Upvotes: 3

Related Questions