Сервер Java Socket перестает отвечать на все соединения - PullRequest
0 голосов
/ 28 января 2011

У меня есть сервер сокетов 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. Теперь задам другой вопрос, как это исправить.

1 Ответ

0 голосов
/ 28 января 2011

Быстрое предположение:

Быстрый выстрел будет означать, что вы достигли предела в 100 подключений к БД.Подробнее - http://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html

Некоторые общие советы:

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