У меня есть сервер сокетов Java, который принимает соединение от флэш-клиента и отправляет сообщения другим флэш-клиентам, подключенным к игре, а также записывает некоторые биты в базу данных MySQL. Сервер работает нормально, пока количество клиентов не превысит ~ 100, затем он внезапно перестанет отвечать на все подключения. Он также не принимает новые подключения и только перезапуск заставляет его работать снова. Сервер использует многопоточность, поэтому он создает новый поток для каждого клиента. Текущий физический сервер имеет 16 процессоров и ~ 4 ГБ ОЗУ (даже если он не использует так много). Я попытался запустить сервер с атрибутами командной строки -Xms -Xmx -server / etc, но ничего не помогает.
jstack не показывает ничего необычного (или не того, что я вижу, я также могу опубликовать его при необходимости), за исключением того, что он застревает в следующем readByte () в части кода потока сервера (строка 59):
while(((cr = streamIn.readByte()) != EOF))
{
if(amount < 100)
{
a+=(char)cr;
amount++;
}
else
break;
}
РЕДАКТИРОВАТЬ: Очевидно, нет необходимости иметь весь код - его readByte (), который активно блокирует, когда он получает исключение EOF. Теперь задам другой вопрос, как это исправить.