故障现象:
linux 32位机器, tomcat5.5.23提供系统服务 , Apache2.0.63 提供转发和负载均衡,配置如下:
worker.list = controller,tomcat1,tomcat2
#========tomcat1========
worker.tomcat1.port=8009
worker.tomcat1.host=172.20.249.8
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1
#========tomcat2========
worker.tomcat2.port=8009
worker.tomcat2.host=172.20.249.9
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
#========controller========
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2
worker.controller.sticky_session=true
在apache上做上传文件操作, 上传文件用的是struts2提供的文件上传功能,发现有一定的概率(大约10分之1或者20分之1)会出现socket read fail,导致文件上传失败。
在apache上再增加了ssl服务器以后,发现100%都会出现socket read fail。
这个问题从开始分析tomcat日志入手,一无所获。
解决方法:
后来通过更换tomcat版本后解决,将tomcat版本从 5.5.23 升级到 5.5.27后问题解决。
奇怪的是linux 64位和 windows版本的tomcat 5.5.23 ,始终不会出现socket read fail 问题,这应该只是linux 32位 5.5.23 自己的bug吧。
PS:
刚开始在升级到5.5.27以后,登录页面的验证码不能显示,在 catalina.sh 中增加下面语句后解决
CATALINA_OPTS="$CATALINA_OPTS -Xms512m -Xmx1024m"
JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true"