Я разрабатываю java-сервер на виртуальных машинах AWS (ubuntu), который будет использоваться для онлайн-игры для Android. Я провел тест, который показал, что максимум 4080 клиент может подключиться к серверу. Я получаю «SocketException: слишком много файлов открываются», если больше клиентов хотят подключиться. Я проверил количество ограничений: «ulimit -n» дает мне 1024. Изменение его на 4096 не вносило изменений.Максимальное количество соединений TCP на Ubuntu
Новый поток создается для любого принятого сокета, и они ничего не делают в настоящее время и не живут до тех пор, пока я не остановлю сервер.
После того, как все 4080 соединений установлены, я заметил, что используется около 1 гб. У меня всего 2gb.
Как мы можем обрабатывать больше соединений tcp? Является ли мой многопоточный подход полезным, или я должен придерживаться другого подхода для тысяч клиентов?
Без просмотра кода я не могу комментировать. Хотя, похоже, вы открываете новый сокет каждый раз при каждом входящем запросе. –
@ bobs_007 Ваша догадка правильная. – user3703595
@ user3703595 Вы задаетесь вопросом о настройке вашей ОС, а не конкретном java-вопросе. Тем не менее, вы можете проверить, например, если вам нужен сокет для любого нового клиента. Вы слышали о java nio? (http://archive.oreilly.com/pub/a/onjava/2004/09/01/nio.html) – GhostCat