我有个很大的问题。我使用Flex3/Tomcat/BlazeDS/Spring编写了一个大型应用程序,它在本地开发时运行得很好,当我部署到公共dev环境时很好,但在部署到我们的测试环境时却经常失败。
当远程处理请求花费大量时间(超过20秒)时,故障似乎发生得最多。在我的dev服务器上,错误会发生,但只有在请求花费很长时间(超过45秒)时才会发生。但是,该错误有时似乎也会立即发生(发送请求并立即失败)。大多数错误也有HTTP状态: 502 (坏网关),但有些人只是说HTTP失败了。
除了将war文件放在webapp目录之外,我在BlazeDS中没有做任何特别的事情。应用程序是通过https访问的。远程处理调用仅通过“目的”引用服务器。我们的DEV和测试实例上的tomcat服务器具有相同的java参数(相同的Xms和Xmx等)。以下是我的相关档案:
services-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>我的绳子快到尽头了。这个错误是应用程序的破坏者。拜托,如果可以的话请帮帮我。
编辑我切换到http,但仍然得到错误。Tomcat现在说:
警告:发送端包时出错
java.net.SocketException:断管
我查看Apache日志中的jk_mod,并看到一些与我发送的请求类似的调试信息,然后如下所示:
调试ajp_send_request::jk_ajp_common.c (1592):重置请求主体(432)
调试jk_shutdown_socket::jk_connect.c (681):即将关闭套接字68
调试jk_shutdown_socket::jk_connect.c (732):关闭套接字68并读取0个挥之不去的字节
info ajp_connection_tcp_get_message::jk_ajp_common.c (1150):(myTestServer)无法接收来自tomcat的响应头消息,网络问题或tomcat (xx.xx:xxxx)关闭(errno=11)
错误ajp_get_reply::jk_ajp_common.c (1962年):(myTestServer) Tomcat关闭或拒绝连接。尚未向客户端发送任何响应(尚未)
info ajp_service::jk_ajp_common.c (2447):(myTestServer)向tomcat发送请求失败(可恢复),(attempt=2)
错误ajp_service::jk_ajp_common.c (2466):(myTestServer)连接到tomcat失败。
调试ajp_reset_endpoint::jk_ajp_common.c (743):(myTestServer)用sd = 4294967295重置端点(套接字关闭)
调试ajp_done::jk_ajp_common.c (2905):为工作人员myTestServer回收连接池slot=0
info jk_handler::mod_jk.c (2615):worker=myTestServer的服务error=0
发布于 2010-07-07 20:12:23
Cornel Creanga帮我找到了这个解决方案。我将我的应用程序切换到http,并开始在catalina.out文件中接收消息。我不知道为什么这会影响到它,但它确实影响了它。所有的信息都说插座里有一根坏了的管子。进一步的调查表明,参与了jk_mod。
通过大量搜索,我发现我们的SysAdmins在我们的测试服务器上将服务器上的套接字超时设置为10秒,而在我们的DEV服务器上设置了5分钟,因此正在执行的大量搜索导致它在测试后超时。
SysAdmins在测试中调整了配置,以便另一个工作人员(超时5分钟)处理这个上下文路径的调用。
https://stackoverflow.com/questions/3145065
复制相似问题