我不是该服务器的系统管理员,但我正在尝试帮助系统管理员组快速找到解决方案。因此,我无法访问所有服务器配置文件。
说了这么多,我的问题是:
这是关于 Solaris 计算机上的 Java EE 应用程序,该应用程序装有 Sun Java System Web Server 6.1 和 Sun Java System Application Server 8.1。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 服务器日志包含以下错误:[02/Feb/2009:15:37:32] 警告 (19614): 报告: lb.runtime: ROUT1014: 无法重试非幂等请求 /applicationContext。[02/Feb/2009:15:37:32] 信息 (19614): 报告: lb.runtime: RNTM3003: 处理请求时出错: 所选服务器无法提供服务
什么原因导致出现该错误页面?
谢谢,杰夫
更新:
以下是负载均衡器配置:
<!DOCTYPE loadbalancer PUBLIC "-//Sun Microsystems Inc.//DTD Sun ONE 应用服务器 7.1//EN" "sun-loadbalancer _1_1.dtd"> <负载均衡器> <集群名称="cluster1"> <实例名称="instance1" 已启用="true" 禁用超时(分钟)="60" 侦听器="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" 间隔秒数="30" 超时秒数="10" /> </集群> <集群名称="其他集群"> <实例名称="other_host" 已启用="true" 禁用超时(分钟)="60" 侦听器="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" 间隔秒数="30" 超时秒数="10" /> </集群> <property name="reload-poll-interval-in-seconds" value="60"/> <property name="响应超时秒数" value="600"/> <property name="https-routing" value="false"/> <property name="require-monitor-data" value="false"/> </负载均衡器>
答案1
看起来,如果代理设置为像您所说的那样进行负载平衡,并且它只能指向一台服务器,那么有时负载平衡会认为目标应用程序服务器太忙,并给您该错误。
您能将看到的错误与服务器上的任何类型的负载对应起来吗?有没有办法将负载平衡从方程式中剔除并进行测试?您可以配置负载平衡器设置/查看它们以查看它是否具有非常保守的阈值吗?
答案2
我怀疑健康检查功能正在运行,并决定后端服务器不可用。也许可以尝试增加健康检查器配置中的超时值或完全禁用它。由于只有一个应用程序服务器可以代理,因此这实际上不会导致任何功能丢失。