Я поддерживаю определенное веб-приложение, которое поддерживает длинные опросы (сервлет CometProcessor) и традиционные запросы сразу через один порт, и я сталкиваюсь с проблемой, когда число запросов в секунду растет (> 10).Таким образом, когда загрузка довольно высока, CometEvent.setTimeout () для события BEGIN, похоже, не устанавливается или что-то в этом роде, потому что событие ERROR / TIMEOUT не запускается до тех пор, пока загрузка не уменьшится.
Время ожидания устанавливается во время обработки события BEGIN
try {
if (sendResponse != null) {
LOGGER.debug("Already has response. Sending...");
client.onSend();
event.getHttpServletResponse().setContentType("text/plain; charset=" + VirdConstants.DEFAULT_ENCODING);
PrintWriter writer = event.getHttpServletResponse().getWriter();
writer.write(sendResponse);
writer.flush();
LOGGER.debug("Sent to " + event.getHttpServletRequest().getRemoteAddr() + ":\n" + sendResponse);
event.close();
} else {
event.setTimeout(getTimeout(isVisualizer(client.getId())));
}
} catch (Throwable e) {
throw new RuntimeException(e);
}
Приложение является устаревшим, поэтому его реорганизация связи затруднена.Я пытался играть с разными вариантами настройки, но безуспешно.
Есть ли способ улучшить это?Возможно, у кого-то возникла такая же проблема, или он может просто указать направление для исследования.
Конфигурация Tomcat:
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.core.AprLifecycleListener"
SSLEngine="on"/>
<Listener className="org.apache.catalina.core.JasperListener"/>
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
<Listener
className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>
<Service name="Catalina">
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="200" minSpareThreads="50" maxIdleTime="300000"
prestartminSpareThreads="true"/>
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
enableLookups="false"
acceptCount="50"
acceptorThreadCount="2"
compression="off"
connectionTimeout="5000"
executor="tomcatThreadPool"
keepAliveTimeout="120000"
maxKeepAliveRequests="512"
maxConnections="2500"
server="Apache"
URIEncoding="UTF-8"
/>
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps" autoDeploy="true"/>
</Engine>
</Service>
web.xml (part)
<servlet-mapping>
<servlet-name>ReverseAjaxServlet</servlet-name>
<url-pattern>/async/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ReverseAjaxServlet</servlet-name>
<servlet-class>org.company.reverseajax.web.Tomcat7CometReverseAjaxServlet</servlet-class>
<init-param>
<param-name>timeout</param-name>
<param-value>60000</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>