我在公司做的是 Java,这两天遇到一个非常奇怪的 BUG,一条简单的 SELECT 查询在我本地跑一点问题没有,但是到了测试服务器跑到查询语句就会卡着,一卡就卡 40 分钟而且没有数据库超时。查询语句简单到不能再简化:
SELECT * FROM A WHERE A.B = 1100
而且和 DBA 确认过数据库没有任何情况,所以可以确定是代码问题。
像 Java 这种需要编译的语言,我每次都要 Push 然后 Build 之后才能通过 Web 端跑,每次耗时都要快十分钟,而且测试服务器的权限很严格我都没法登陆。。真是蛋疼死了。。。
所以我很好奇,如何进行远程服务器的调试?不管是 Java 还是 Ruby。
==== 更新 ==== 前后弄了两天还是没有头绪,最后一个同事把那条数据的字段逐个删掉,发现只要把某个字段去掉就没问题。。。 因为赶着上线所以就在 SELECT 的时候不取这个字段就避过这个问题了,但是还是不知道为什么。。真是蛋疼。。。
Ruby 可以设断点单步调试,但在远程你也用不了啊。Rails 最新出来 web console,不过我还是习惯看日志。不懂 Java,用 Ruby 做网络里面暂时还没有遇到过调试不出来的情况。
#8 楼 @dddd1919 那个 SELECT 的结果只有一条数据,本地和测试环境连接的是同一个测试数据库。这是最奇怪的地方。。。 #9 楼 @jimrokliu 不是数据库的问题,我和 DBA 确认过了,没有这么长时间的查询。
Java 可以远程调式,首先你的 server 得以 debug 模式启动,然后你本地用 Eclipse 远程连接到 server debug 端口,然后在你本机上的代码打断点,就可以远程调试。
#13 楼 @sevk 正常耗时,都没有超过 1s 的 #14 楼 @boyishwei 还没尝试过远程调试,有机会得试试,学习学习。。现在我这是自动化部署的,改个配置文件还得找人。。。真实蛋疼。。。
#16 楼 @colorfulberry 用的是同一个数据库,数据都一样。。代码执行的结果不一样。。。所以怀疑是环境的问题。。。 #17 楼 @advancedxy 都不建议在服务器调试啊。。。因为我不知道测试服务器的 IP 或域名,所以 DBA 不能确认到底请求了没。。。 #18 楼 @sanivbyfish staging 是啥。。?