Ошибка открытия слишком большого количества файлов в Java NIO - PullRequest
0 голосов
/ 28 апреля 2009

Привет! Я создал сокет и клиентскую программу с использованием Java NIO. Мой сервер и клиент находятся на разных компьютерах, Сервер имеет ОС Linux, а КЛИЕНТ - ОС WINDOWS. Всякий раз, когда я создал 1024 сокета на клиенте, мои клиентские машины поддерживают, но на сервере я получаю слишком много ошибок открытия файлов. Итак, как открыть 15000 сокетов без каких-либо ошибок на сервере. Или есть ли другой способ подключиться к 15000 клиентам одновременно?

Спасибо Бапите

Ответы [ 3 ]

6 голосов
/ 27 марта 2012

Хорошо, вопрос, зачем ему нужны 15К розетки, это отдельная дискуссия.

Ответ заключается в том, что вы достигли предела дескриптора файла пользователя.

Войдите в систему с пользователем, которого вы будете использовать в слушателе, и выполните $ ulimit -n, чтобы увидеть текущий предел.

Скорее всего, 1024.

Используя root, отредактируйте файл /etc/security/limits.conf

и установить ->

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

65536 - это всего лишь предложение, вам нужно выяснить это из вашего приложения.

Выйдите из системы, снова войдите в систему и перепроверьте с помощью ulimit -n, чтобы убедиться, что это работает.

Вам, вероятно, понадобится более 15 fds для всего этого. Контролируйте свое приложение с помощью lsof.

Как это:

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

Кстати, вы также можете достичь системного лимита fd, поэтому вам нужно проверить его:

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

Чтобы увеличить его, добавьте эту строку в /etc/sysctl.conf

#Maximum number of open FDs
fs.file-max = 65535
3 голосов
/ 28 апреля 2009

Зачем вам нужно 15000 розеток на одной машине? В любом случае, посмотрите на ulimit -n

1 голос
/ 28 апреля 2009

Если у вас будет 15 000 клиентов, разговаривающих с вашим сервером (и, возможно, 200 000 в будущем, согласно вашим комментариям), то я подозреваю, что у вас возникнут проблемы с масштабируемостью при обслуживании этих клиентов, когда они подключатся (если они подключения).

Я думаю, что вам, возможно, придется отступить назад и посмотреть, как вы можете спроектировать свое приложение и / или развертывание, чтобы успешно достичь такого рода чисел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...