我不是此服务器的系统管理员,但我正在尝试帮助系统管理员组快速找到修复程序。因此,我无权访问所有服务器配置文件。
顺便说一句,这是我的问题:
这是关于安装了 Sun Java System Web Server 6.1 和 Sun Java System Application Server 8.1 的 Solaris 机器上的 Java EE 应用程序。Web 服务器充当发往应用程序服务器的请求的代理。我的理解是它也被设置为负载均衡器,尽管它只指向一个应用程序实例,所以似乎没有什么需要平衡的。
当通过代理向应用程序发出请求时,我们间歇性地看到一个紫色/蓝色页面,上面写着以下内容:
Due to a temporary error the request could not be serviced.
The problem could be because:
- The server is busy.
- The server is temporarily unavailable.
You may choose to resubmit the request, but be aware that the request might
have already been processed. Depending on the type of request, you may not
want it to be processed twice. Please click here to re-submit.
需要注意的几点:
- 正如我所提到的,我们间歇性地看到这个屏幕,可能每 100-500 个请求中就有一个请求。
- 当我们确实看到屏幕时,它会立即返回。换句话说,它似乎与超时无关。
- 刷新页面将导致显示请求的实际应用程序页面。换句话说,在错误页面加载、刷新和实际页面加载之间的那 1-2 秒内似乎没有出现临时服务器中断。
- 我认为网络不是问题,因为 Web 和应用程序服务器位于同一主机上。
- 出现此错误页面时,Web 服务器日志有以下错误:[02/Feb/2009:15:37:32] 警告 (19614): 报告:lb.runtime: ROUT1014: Non-idempotent request /applicationContext 无法重试。[02/Feb/2009:15:37:32] 信息(19614):报告:lb.runtime:RNTM3003:服务请求时出错:所选服务器无法服务
什么可能导致此错误页面出现?
谢谢,杰夫
更新:
这是负载均衡器配置:
<!DOCTYPE loadbalancer PUBLIC "-//Sun Microsystems Inc.//DTD Sun ONE Application Server 7.1//EN" "sun-loadbalancer _1_1.dtd"> <负载均衡器> <cluster name="cluster1"> <instance name="instance1" enabled="true" disable-timeout-in-minutes="60" listeners="http://host.domain.com:32000"/> <web-module context-root="/applicationContext" enabled="true" disable-timeout-in-minutes="60" error-url="sun-http-lberror.html" /> <health-checker url="/applicationContext" interval-in-seconds="30" timeout-in-seconds="10" /> </簇> <cluster name="other_cluster"> <instance name="other_host" enabled="true" disable-timeout-in-minutes="60" listeners="http://host2.domain.com:80000"/> <web-module context-root="/otherContext" enabled="true" disable-timeout-in-minutes="60" error-url="./sun-http-lberror.html" /> <health-checker url="/otherContext" interval-in-seconds="30" timeout-in-seconds="10" /> </簇> <property name="reload-poll-interval-in-seconds" value="60"/> <property name="response-timeout-in-seconds" value="600"/> <property name="https-routing" value="false"/> <property name="require-monitor-data" value="false"/> </负载均衡器>
看起来,如果代理设置为如您所说的负载平衡,并且它只能指向一台服务器,那么负载平衡有时会认为目标应用程序服务器太忙,并给您该错误。
您能否将您看到的错误与服务器上的任何类型的负载对应起来?有没有办法将负载平衡排除在外并进行测试?您能否配置负载均衡器设置/查看它们以查看它是否具有非常保守的阈值?
我怀疑健康检查功能正在运行并决定后端服务器不可用。也许尝试增加健康检查器配置中的超时值或完全禁用它。由于只有一个应用程序服务器可以代理,这不会真正导致任何功能丢失。