天气热,人容易浮躁,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跟踪。很简单道理,但是有时确实引发我们意想不到的错误。
dlserv部署时发生的问题
最新推荐文章于 2025-12-13 15:10:39 发布
本文记录了一次解决HTTP请求返回403错误及后续segment fault的技术过程。作者通过排查发现,问题根源在于请求路径指向的链接文件(link file),而非原先猜测的并发或编译问题。
146

被折叠的 条评论
为什么被折叠?



