2013-09-24 1 views
0

Я разрабатываю проект struts2 на сервере Tomcat.Как принять много запросов от клиента

Я пытаюсь отправить запрос 6000 от клиента к API-интерфейсу сервера. но мой API-интерфейс API принимает только более 2000 запросов. 4000 других неудач.

я получил сообщение от клиента, как показано ниже:

java.net.ConnectException: Connection refused 

моего server.xml имеет конфигурации:

<Connector port="8080" protocol="HTTP/1.1" 
      connectionTimeout="1000000" maxThreads="50000" keepAliveTimeout="3200000"  minSpareThreads="10000" acceptCount="13000" maxIdleTime="1000000" 
      redirectPort="8443" /> 

Есть ли одна есть решение, чтобы мой сервер API может получить все запросы клиентов?

Пожалуйста, помогите! Спасибо

+0

Какую версию tomcat вы используете? У вас есть tcnative dll в вашей PATH? – greyfairer

+0

Вы пытаетесь подключиться 6000 раз подряд (т. Е. Пытаетесь ли вы одновременно создать 6000 соединений) или 6000 раз по одному соединению? –

ответ

2

Я не знаю, вызвала ли это вашу проблему, но ваши значения конфигурации слишком высоки!

  • maxThreads = 50000 означает более 15 ГБ памяти (win32), когда используются все потоки!
  • minSpareThreads = 10000 означает потребление памяти 3 ГБ при запуске (win32)!
  • keepAliveTimeout = 3200000 означает, что соединение остается открытым в течение> 53 часов, если клиент не будет использован/закрыт!
  • maxIdleTime = 1000000 означает, что неиспользуемые потоки продолжают существовать до 16 часов, прежде чем они будут уничтожены!
+1

С Tomcat7 у вас также есть acceptCount. Он принимает соединения, но ожидает, что потоки станут доступными. Таким образом, вы можете уменьшить потоки далее, например, 100, все еще принимая 6000 соединений. – greyfairer

0

Возможно, это связано с некоторой ошибкой на сервере, которую вы можете видеть при просмотре журнала ошибок сервера.

Одной из простых причин может быть база данных: если вы создаете одну транзакцию базы данных для каждого потока, то вам нужно настроить пул соединений (и, возможно, сама база данных), чтобы разрешить 6000 одновременных транзакций.