日期:2014-05-16  浏览次数:20609 次

Resin + Apache + Linux 版本组合问题
耗费了N个人1整天的精力,总算解决了一个resin安装的mod_caucho.so诡异陷阱。

Resin3.1.8及以上版本, 配合 Apache2.2.X, 在LinuxAS4 32bit 下,mod_caucho.so是有bug的!导致apache始终不去建立和resin后台的连接(连tcp握手都不去做)。也无法在 xxx.com/caucho-status 看到任何host列表项。
也就是说:在“Apache2.2.X, LinuxAS4 32bit”环境下,resin3.1.8不能使用于编译mod_caucho,必须替换成 resin3.1.6版本才能正常分发请求!
但在Linux AS4 64bit下,resin3.1.8+ 高版本都没问题。

我这里的组合测试结果如下:
1, Linux AS4 32bit, Apache 2.2, Resin 3.1.8+, the result mod_caucho.so compiled is BAD;
2, Linux AS4 32bit, Apache 2.2, Resin 3.1.6, the result mod_caucho.so compiled is GOOD;
3, Linux AS4 64bit, Apache 2.2, Resin 3.1.6/3.1.8+, the result mod_caucho.so compiled is GOOD;

“BAD”主要的现象是:用resin自己的web端口访问应用正常;用Apache端口访问应用全部报“503”错误。但实际上Apache的mod_caucho根本没有向后端resin发出任何tcp连接请求(tcpdump命令可验证);同时,在 xxx.com/caucho-status 上,看到的后端Cluster列表里,没有任何 Host 在位。
在google上搜索到了一些反映类似现象的文章,但都没有解决。只能换版本组合。看来caucho公司想赚钱忽视了健壮性。
1 楼 hongtium 2009-03-14  
  分析了下resin3.1.8及3.2.1的源码,在32bit系统里,/caucho-status  请求对应的 mod_caucho.c文件里的 jvm_status() 函数有异常:无法正确得到 cluster参数,函数中断的也比较怪异,能够调用 ap_rputs()想页面输出Html流,却无法用LOG/ERR函数向文件log我要的调试信息。但是我对Apache的Module编程不熟,无法深入调试。
  比较像是mod_caucho.c对多平台的兼容性问题,当然也可能是apr的兼容性问题,需要相关的高手去确认。
2 楼 tongjian 2009-03-27  
我也折腾了半天,发现同同样问题~!
3 楼 movingboy 2009-03-28  
hongtium 写道
  分析了下resin3.1.8及3.2.1的源码,在32bit系统里,/caucho-status  请求对应的 mod_caucho.c文件里的 jvm_status() 函数有异常:无法正确得到 cluster参数,函数中断的也比较怪异,能够调用 ap_rputs()想页面输出Html流,却无法用LOG/ERR函数向文件log我要的调试信息。但是我对Apache的Module编程不熟,无法深入调试。
  比较像是mod_caucho.c对多平台的兼容性问题,当然也可能是apr的兼容性问题,需要相关的高手去确认。

有没有把你发现的问题报告给Resin的开发团队,让他们去修正?
4 楼 hongtium 2009-04-11  
movingboy 写道
有没有把你发现的问题报告给Resin的开发团队,让他们去修正?

caucho.com论坛发过,也给别人回复过。不过我看那里的管理员对于“503问题”的回答,都是让他们去看log,去检查KeepAlive设置...完全不在点上。也没人理我。
5 楼 smilerain 2009-12-01  
是有这个问题,使用apache2.2 + resin的时候如果使用swfupload 上传,servlet方式
数据流就会断。