Вы не дали понять, откуда возникло ваше сомнение.
Plurk Comet: обработка 100 000+ параллельных соединений с Netty (2009)
В 1999 году я развернул веб-сервер Java, который обрабатывал 40000 запросов поиска желтых страниц в час (на серверах было 400 МГц ЦП), а в 2004 году я разработал приложение Java, которое обрабатывало 8000 одновременных подключений на сервер (на двойной частоте 1,2 ГГц Sparc). серверы) Было шесть серверов шлюзов и один главный сервер для управления ими и централизации событий.
Вероятно, ваш профиль будет другим, но я могу сказать, что Java поддерживала большие объемы веб-серверов до выпуска C #.
Лично у меня не было бы более 10 000 одновременных подключений на сервер, но это практическое правило, которое может больше не выполняться. Вы можете иметь 32 000 потоков в одной JVM. В Linux это не намного больше. Однако для минимизации времени полного сбора мусора на одном сервере необходимо иметь несколько шлюзов JVM (лучший способ минимизировать время полного сбора мусора - это избавиться от меньшего количества мусора, но для этого может потребоваться больше усилий)
Новые серверы имеют 16 ГБ ОЗУ и процессоры i7-2600K Sandy Bridge 3,4 ГГц: какие параметры доступны в конфигурации, чтобы максимально использовать это преимущество? Моя цель - 1200 онлайн-клиентов сразу на сервер (2400 потоков).
Я не могу себе представить, почему это будет проблемой.
С какими неожиданными подводными камнями и проблемами я должен быть связан?
Считая, что вам нужно включить все возможные параметры командной строки, когда есть вероятность, что вы можете убрать их все. Если у вас есть 4 шлюза JVM с 300 подключениями каждый, это может использовать всю память, и вам даже не нужно будет указывать параметр -Xmx.
Кажется, что Java не предназначена для задач такого типа. Стоит ли подумать о переносе сервера на другой язык?
Вам лучше спросить себя, почему вы в это верите. У вас есть проблема, которую нужно решить, или сомнение, которое может быть или не быть необоснованным.
Это моя конфигурация Eclipse .ini:
То, как вы настраиваете eclipse, не запрещает устанавливать любую программу, запускаемую из eclipse.
BufferedOutputStream подходит для большинства приложений и может работать до 1000 соединений в JVM. Однако Java 1.4 (2002) добавила NIO, который является более легким для масштабирования вашей системы до 10 000 подключений и более.
Кстати: сервер, который я разработал в 2003 году, был основан на диспетчере NIO, но он довольно сложный, если вы не используете стандартную библиотеку, такую как Netty.
С тех пор я использую один поток для каждой модели подключения для успешной блокировки NIO. Я считаю, что это проще в управлении, чем при использовании диспетчера, и может иметь более низкие характеристики задержки. У меня есть поток монитора, который периодически проверяет соединения, не блокирующие записи, и закрывает их, если они есть. Я не верю, что вам нужно два потока на соединение, но я не верю, что это изменит вашу ситуацию, потому что у вас не будет достаточно соединений на сервер, чтобы иметь значение.
Как подсвечивает кодер, рассматривали ли вы возможность использования UDP для менее важной широковещательной информации?