我有一个非常大的问题。我使用Flex3 / Tomcat / BlazeDS / Spring编写了一个大型应用程序,在本地开发时运行良好,当我部署到公共开发环境时很好,但是当部署到我们的测试环境时经常失败。
当远程处理请求花费大量时间(超过20秒)时,失败似乎最常发生。在我的开发服务器上,错误发生,但仅在请求需要很长时间(超过45秒)时才会发生。但是,错误也会偶尔发生(发送请求并立即失败)。大多数错误也有HTTP状态:502(坏网关),但有些只是说HTTP失败。
除了将war文件放在webapps目录中之外,我没有对BlazeDS做过任何特别的事情。通过https访问该应用程序。远程呼叫仅通过“目的地”引用服务器。我们的DEV和TEST实例上的tomcat服务器具有相同的java参数(相同的Xms和Xmx等)。以下是我的相关文件:
服务-config.xml中
<?xml version="1.0" encoding="UTF-8"?>
<services-config>
<services>
<default-channels>
<channel ref="my-secure-amf"/>
</default-channels>
</services>
<channels>
<channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel">
<endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure" class="flex.messaging.endpoints.SecureAMFEndpoint"/>
<properties>
<add-no-cache-headers>false</add-no-cache-headers>
</properties>
</channel-definition>
</channels>
<services-config>
的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
...
<servlet>
<servlet-name>spring-flex</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/flexContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring-flex</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>
</web-app>
flexContext.xml
<!--
I have component-scan tags here to scan my class files. The Controller I'm using for flex has an annotation on it to define it as a remote destination. Here it is:
@Controller
@RemotingDestination(value = "dest", channels="my-secure-amf")
public class FlexController {
-->
<bean id="flexExceptionTranslator" class="edu.liberty.zconduct.web.FlexExceptionTranslator" />
<flex:message-broker>
<flex:exception-translator ref="flexExceptionTranslator"/>
<!-- <flex:secured /> Had this previously, but it wasn't working then, either -->
</flex:message-broker>
我快要接近绳子了。错误是app-breaker。如果可以,请帮助我。
修改 我切换到http仍然得到错误。 Tomcat现在说:
警告:发送结束数据包时出错
java.net.SocketException:Broken pipe
我在我的apache日志中查找jk_mod并查看一些看起来像我发送的请求的调试信息,然后是以下内容:
[调试] ajp_send_request :: jk_ajp_common.c (1592):重新发送请求正文(432)
[调试] jk_shutdown_socket :: jk_connect.c (681):即将关闭socket 68
[调试] jk_shutdown_socket :: jk_connect.c (732):关闭插座68并读取0 挥之不去的字节
[信息] ajp_connection_tcp_get_message :: jk_ajp_common.c (1150):( myTestServer)无法接收 来自的响应标头消息 tomcat,网络问题还是tomcat (xx.xx.xx.xx:xxxx)已关闭(errno = 11)
[error] ajp_get_reply :: jk_ajp_common.c (1962):( myTestServer)Tomcat失败了 或拒绝连接。没有回应 已被发送给客户(尚)
[info] ajp_service :: jk_ajp_common.c (2447):( myTestServer)发送请求 到tomcat失败(可恢复), (尝试= 2)
[error] ajp_service :: jk_ajp_common.c (2466):( myTestServer)连接到 tomcat失败了。
[调试] ajp_reset_endpoint :: jk_ajp_common.c (743):( myTestServer)重置 端点,sd = 4294967295(套接字 关机)
[debug] ajp_done :: jk_ajp_common.c (2905):回收连接池 对于worker myTestServer
,slot = 0[info] jk_handler :: mod_jk.c(2615): 服务错误= 0表示 工人= myTestServer
答案 0 :(得分:2)
Cornel Creanga帮我解决了这个问题。我将我的应用程序切换为http并开始在catalina.out文件中接收消息。我不知道为什么会影响它,但确实如此。消息都说套接字中有一根管子坏了。进一步调查显示jk_mod参与其中。
通过大量搜索,我发现我们的SysAdmins已经在我们的TEST服务器上将服务器上的套接字超时设置为10秒,但在我们的DEV服务器上设置了5分钟,因此大量搜索正在使其超时一次得到了测试。
SysAdmins在TEST上调整了配置,以便另一个工作人员(超时5分钟)处理此上下文路径的调用。