tomcat - ColdFusion 10 实例/Tomcat 以可预测的时间间隔死亡(死亡白屏)

标签 tomcat coldfusion coldfusion-10

在过去的几天里,团队一直在努力解决一个持续存在的问题,即在非常可预测的时间间隔内,一个 ColdFusion 实例出现白屏死机。

网站每三个小时就会开始为任何 URL 返回一个空白页面。然后我们会重新启动实例,一切都会很好......再过三个小时,几乎是分钟。当然,这发生在星期五,所以所有周末的人都轮流在实例死机时重新启动它。

据我所知,在此之前没有人对 ColdFusion 或我们的服务器环境进行任何更改。在此之前,实例运行良好。

从那时起,我们发现此实例的 isapi_redirect.log 文件中充满了 Tomcat/连接错误。

我们按照 http://www.webtrenches.com/post.cfm/resolve-stability-problems-and-speed-up-coldfusion-10 上的出色说明进行操作并按照建议调整我们的连接器设置。虽然这可能对总体性能有很好的帮助,并将崩溃之间的时间范围从 3 小时更改为 3.5 小时,但它并没有解决这个问题。

在此之前,我们甚至尝试将站点从我们的一个虚拟服务器移动到另一个,但没有成功。

我们尝试重新启动 IIS,甚至在一个晚上重新启动整个服务器,看看是否有帮助,但仍然没有。

以下是我根据我们在日志和配置中看到的信息所能提供的尽可能多的信息。非常感谢任何帮助,请让我知道我可以提供哪些有用的其他详细信息。


我们正在运行 IIS v7.5.7600.16385

这是绑定(bind)到此实例的唯一网站/IIS 记录,并且是专门绑定(bind)到它的,而不是“所有网站”。

当问题发生时,我认为没有任何请求到达实例...IIS 日志显示连接仍在发生,但实例的 http.log 文件只是停止。

我不确定与 tomcat 相关的错误是问题还是症状。

出现问题时服务器运行正常,我们有几个其他 CF 实例与这个实例一起运行,没有问题。

相关实例的 CF 管理员加载并在问题期间完全响应(对我来说,过去的其他实例问题并不经常出现这种情况)。

同样,据我们所知,在这个问题开始之前,没有人直接更改我们的代码、CF 实例配置或服务器配置。


Server Product: ColdFusion
Version: 10,0,13,287689
Tomcat Version: 7.0.23.0
Edition: Enterprise
Operating System: Windows Server 2008 R2
OS Version:  6.1
Update Level: chf10000013.jar
Adobe Driver Version: 4.1 (Build 0001)

workers.properties:

worker.list=Instance_Codebase
worker.Instance_Codebase.type=ajp13
worker.Instance_Codebase.host=localhost
worker.Instance_Codebase.port=8014
worker.Instance_Codebase.max_reuse_connections=250
worker.Instance_Codebase.connection_pool_size=250
worker.Instance_Codebase.connection_pool_timeout=60

服务器.xml

<Server port="8009" shutdown="SHUTDOWN">
    <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on"></Listener>
    <Listener className="org.apache.catalina.core.JasperListener"></Listener>
    <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"></Listener>
    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"></Listener>
    <GlobalNamingResources>
        <Resource description="User database that can be updated and saved" name="UserDatabase" pathname="conf/tomcat-users.xml" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" type="org.apache.catalina.UserDatabase" auth="Container"></Resource>
    </GlobalNamingResources>
    <Service name="Catalina">
        <Executor name="tomcatThreadPool" minSpareThreads="4" maxThreads="150" namePrefix="catalina-exec-"></Executor>
        <Connector port="8014" protocol="AJP/1.3" redirectPort="8447" tomcatAuthentication="false" maxThreads="250" connectionTimeout="60000"></Connector>
        <Engine jvmRoute="Instance_Codebase" name="Catalina" defaultHost="localhost">
            <Realm className="org.apache.catalina.realm.LockOutRealm">
                <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"></Realm>
            </Realm>
            <Host name="localhost" autoDeploy="false" unpackWARs="true" appBase="webapps">
                <!--<Valve pattern="%h %l %u %t &quot;%r&quot; %s %b" directory="logs" prefix="localhost_access_log." className="org.apache.catalina.valves.AccessLogValve" suffix=".txt" resolveHosts="false"></Valve>-->
            </Host>
        </Engine>
        <Connector port="8501" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" executor="tomcatThreadPool"></Connector>
    </Service>
</Server>

我们的 isapi_redirect.log 示例。可以在 http://trasper.com/files/isapi_redirect.log.txt 查看全部内容.

据我们所知,问题(在此示例中)发生在晚上 11:41 左右。

[Wed Jun 25 23:40:34.503 2014] [10012:912] [info] ajp_send_request::jk_ajp_common.c (1658): (Instance_Codebase) all endpoints are disconnected, detected by connect check (27), cping (0), send (0)

[Wed Jun 25 23:40:34.504 2014] [10012:1396] [info] ajp_connection_tcp_get_message::jk_ajp_common.c (1313): (Instance_Codebase) can't receive the response header message from tomcat, network problems or tomcat (127.0.0.1:8014) is down (errno=54)
[Wed Jun 25 23:40:34.820 2014] [10012:1396] [error] ajp_get_reply::jk_ajp_common.c (2190): (Instance_Codebase) Tomcat is down or refused connection. No response has been sent to the client (yet)
[Wed Jun 25 23:40:34.823 2014] [10012:1396] [info] ajp_service::jk_ajp_common.c (2692): (Instance_Codebase) sending request to tomcat failed (recoverable),  (attempt=1)

[Wed Jun 25 23:40:34.708 2014] [10012:7880] [error] ajp_get_reply::jk_ajp_common.c (2190): (Instance_Codebase) Tomcat is down or refused connection. No response has been sent to the client (yet)

[Wed Jun 25 23:40:40.477 2014] [10012:2296] [info] ajp_connect_to_endpoint::jk_ajp_common.c (1047): Failed opening socket to (127.0.0.1:8014) (errno=61)

[Wed Jun 25 23:40:40.364 2014] [10012:8256] [error] ajp_service::jk_ajp_common.c (2711): (Instance_Codebase) connecting to tomcat failed.

[Wed Jun 25 23:40:40.825 2014] [10012:7060] [error] HttpExtensionProc::jk_isapi_plugin.c (2309): service() failed with http error 503

[Wed Jun 25 23:40:40.877 2014] [10012:10364] [error] ajp_send_request::jk_ajp_common.c (1669): (Instance_Codebase) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=61)
[Wed Jun 25 23:40:40.965 2014] [10012:10364] [info] ajp_service::jk_ajp_common.c (2692): (Instance_Codebase) sending request to tomcat failed (recoverable), because of error during request sending (attempt=1)

[Wed Jun 25 23:40:40.857 2014] [10012:1020] [error] HttpExtensionProc::jk_isapi_plugin.c (2309): service() failed with http error 503

最佳答案

感谢大家的投入和帮助。截至今天,我们已经免费运行 WSOD 超过 4 天,而且还在增加。

我们仍然不确定是什么引发了这个问题,它可能只是网络流量的一个临界点,但我非常有信心我们现在已经控制住了它。

在很大程度上,我认为这是连接器调整的问题。

默认情况下,当使用 Web 服务配置工具 (wsconfig.exe) 创建连接器时,连接池设置为 250 个连接,但这在默认情况下也不会反射(reflect)在 server.xml 配置中。我们更改了 AJP/1.3 连接器以指定匹配的最大线程值,并添加了 60 秒的连接超时,否则它们是不确定的。

我们还调整了 workers.properties 文件以指定 connection_pool_size 和 connection_pool_timeout 以匹配。

以前的默认设置似乎与 isapi_redirect.log 匹配,我们会在其中看到每次我们正确连接到 200 个连接时,tomcat 就会停止。匹配所有这些设置似乎有帮助。

配置更改后,我们从实例中删除并重新创建了连接器本身。通过这种方式,我们可以 100% 确定连接器与所有服务器更新的最新更改保持同步。

然后我们还在 IIS 中重新启动了网站,但我们必须确保该实例的 w3wp.exe 进程也已重置(我们终止了该进程并让它重新启动)。

然后我们恢复了所有内容,此后没有出现任何问题。


再次感谢您在这里和在 Adobe forums 上的帮助;它帮助我们专注于我们的一些问题。如果发现任何其他信息,我一定会更新这篇文章。我很确定这些步骤会对遇到连接器/tomcat 性能问题的任何人有所帮助。

以下是我们能够找到的一些对我们有很大帮助的重要资源:


最后,这里总结了我们为解决问题所做的更改和步骤:


1.) server.xml

改变

<Connector port="8014" protocol="AJP/1.3" redirectPort="8446" tomcatAuthentication="false">

<Connector port="8014" protocol="AJP/1.3" redirectPort="8447" tomcatAuthentication="false" maxThreads="250" connectionTimeout="60000">

2.) workers.properties

设置(以确保它与我们的连接数匹配)

worker.Instance_Codebase.max_reuse_connections=250

添加的行

worker.Instance_Codebase.connection_pool_size=250
worker.Instance_Codebase.connection_pool_timeout=60

3.) 删除了现有的连接器,然后使用实例的 Web 服务器配置工具 (wsconfig.exe) 重新创建它(一定要以管理员身份运行!)。

另请注意,重建连接器可能需要您将上述更改重新输入到您的 workers.properties 文件中。


4.) 重新启动 IIS 站点,其中包括确保站点的 w3wp.exe 进程已停止/终止并重新启动。


5.) 启动实例和 IIS 站点备份。

关于tomcat - ColdFusion 10 实例/Tomcat 以可预测的时间间隔死亡(死亡白屏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24434896/

相关文章:

java - tomcat 端口 URL 限制

ColdFusion 不维护跨 cfhttp 调用的 session

java - Coldfusion 服务器运行良好,但一个站点仅在两分钟左右就出现故障

coldfusion - onRequestStart 用户授权不能正常工作 coldfusion

tomcat - UTF-8 编码的 j_security_check 用户名在 Tomcat 领域中被错误地解码为 Latin-1

mysql - tomcat jdbc连接池中缺少连接

apache - JIRA 和 Confluence 都使用 AJP 协议(protocol)运行 - 如何?

javascript - 如何让 cfdiv 显示在每一行下面?

javascript - 如何将 2 个不同 .htm 文件中的两个表单提交到同一位置

coldfusion - 使用 cfhttp 的 addParam 方法向 HTTP 请求添加 header