高工日常——记资讯民大的一次bug修复

作为一个高工,要做好随时修bug的准备。上1s是好好的,下1s就会有问题。

周六的早晨总是那么惬意,一觉睡到自然醒。用微波炉热了一杯高钙低脂纯牛奶,准备边喝边看一下《我是歌手》,上一场张靓颖排倒数第一,不知道这场会选什么歌。刚点开视频,旁边的手机震动了一下,我瞟了一眼,居然是微信的消息,难道是有妹子找我修电脑?点开一看是x凯,简短的一句话:“资讯民大不能查成绩了”。卧槽,不应该呀,这几天都还好好的。马上看了一下报警信息:

QQ截图20150125011724

靠,看来是真的挂了。作为一个要成为高级工程师的男人,不能慌张。先“淡定”的给x凯回复:“我看下”。公司里的大神就是这样回复别人的,说明这只是小case,分分钟搞定。

排查问题开始。首先怀疑是学校的教务系统挂了,毕竟好多锅都是它背的嘛。但打开一看,能访问呀,而且是流畅的访问,看来是我的代码出问题了。手动请求了下接口,返回501 - 未知错误。靠,不按常理出牌呀。看来只有慢慢调试了,接口是用php curl模拟登录来实现的,拿出我最爱的函数:curl_getinfo ( resource $ch [, int $opt = 0 ] )。打印一下curl句柄信息:

QQ截图20150125013851

啊,这结果不科学呀,怎么都是0。难道被学校服务器墙了,这也不可能呀,高老师长那么帅,是不会墙我的。

即将成为高工那种敏锐的第六感,让我觉得应该是curl执行就出错了。看来只有使用另一个法宝了:string curl_error ( resource $ch )。打印出的错误信息显示:“name lookup timed out - DNS解析超时”。作为一个“网络工程”考了96的学渣,我断定是DNS服务器出了问题。查看了下服务器的DNS配置信息:

QQ截图20150125015156

这是阿里云服务器的标准配置,应该是没问题。直接使用nslookup命令解析ssfw.scuec.edu.cn也正常:

20150125015828

直接在命令行用curl抓取http://ssfw.scuec.edu.cn/也正常。

这时我有点慌了。但我是要成为高级工程师的男人,我要镇定。突然想起来以前见鸟哥在Hi群里说过php curl有设置DNS的地方,我尝试把CURLOPT_DNS_USE_GLOBAL_CACHE项设置为false,但还是不行。

我又有点慌了。难道要放终极绝招:“重启机器”。不行,这是网吧网管的做法,而我是要成为高级工程师的男人。突然想到DNS服务器的目的是把域名解析成ip,那我把域名和ip对应写进host文件不久行了。果然,此方法奏效,资讯民大成绩查询功能恢复正常。

看来我离高工又进了一步。

Just for fun !

20150125022746

这个学期总算有惊无险的过去了。

后记:

有bug终是要定位出原因的,不然如鲠在喉。

因为报错是DNS解析超时,去掉设置的「CURLOPT_TIMEOUT」,发现时间主要消耗在「namelookup_time」,用时10s+,而恰好我的超时限制时间设置的是10s:

20150130013959

我尝试ping了一下淘宝,发现1s发一个包,发10次用了将近46s:

20150130015020

看来问题出在了DNS解析上。很可能是DNS Server有问题(阿里有前科呀),我把主DNS服务器修改为114.114.114.114后问题解决:

20150130020410

20150130020801

20150130020902

哎,阿里云真坑。

CC BY-NC-SA 4.0

扫码分享

      复制标题+网址成功,请去要分享的地方粘贴

本 Blog 不支持评论,如有疑问或建议请联系我,以完善内容,期望帮助到更多的同学