dlserv部署时发生的问题

来源:互联网 发布:java mysql怎么改密码 编辑:程序博客网 时间:2024/05/21 22:23
    天气热,人容易浮躁,n多天没有更新blog了,端午节希望家人和朋友们快乐。         最近一阵比较忙,还有一个bug未解,心中很是不爽。都是dlserv惹得祸,在温州测试时候出现了异常,接受ie,firefox,flashget,xunlei,旋风的http请求时,表现正常。但是自己的客户端发包解析时,发生了异常。         开始以为是单件模式在初始化接受大规模并发请求时,加锁的问题。后来,把端口改成8085测试,发现单进程请求也表现异常,明明是一个正常的GET请求,到了温州的FC5机器上,解析模块返回403,后来当包多了以后发生了segment fault,晕。         赶紧把程序拿到本地测试,用VC写了一个测试用client,发送一样的报文,在本地parser,绝对正常。拿到温州去debug,第一个包就403错 误。怀疑是包装thttpd的parser模块时,头文件没用用ifndef _cplusplus,编译出来的.a文件直接被c++调用。周二上班,重新make一个库文件。模拟温州的环境测试一下。            重新编译了一个.a文件,试一下还是不行, 怀疑是glibc库的版本不一样,重新查了一下linux版本,glibc版本。一模一样,没办法了,只好登录到温州,开gdb一步一步跟。最后发现parser解析时,不支持链接文件(link)只要本目录里面有link文件,且文件名和请求路径相同,就会发生错误。调了n天的bug终于水落石出了。         我在本机测试时,没有涉及到链接文件,libparser库表现完全正常,但是部署的环境里是存在同名的link文件导致库工作异常,最后segment fault。     总结:写程序要充分估计变更点(链接文件,虚拟目录...),部署时,开发机、生产机的环境尽量保持一致。出现bug异常,首先查看环境,然后gdb跟踪。很简单道理,但是有时确实引发我们意想不到的错误。