神奇的GOLANG跨平台编译错误

windows编译linux应用优化不足

作者: koangel 发表于: 2018-05-17 11:31:53

起因

前段时间,我司有一款日均处理千万级的服务产品出现CPU锁死2%的情况,8核心服务器,居然只使用了2% CPU,这简直是奇葩,我们立刻进行代码测试定位,由于部分同事使用的是WINDOWS,而我自己发布测试服务器时是OSX发布的,并未发生类似问题,而直接在WINDOWS上编译的程序也并未出现此类问题。

开始尝试解决他

我们首先尝试了以下办法:
1、全部重新编译源码并丢入测试服做压力测试
2、改用OSX交叉编译后丢入测试服务器环境

我们神奇的发现,WINDOWS编译的版本,CPU使用率,调度和性能,不如在OSX上编译的版本。

稍后我用IDA 7.0对2个平台编译的程序作出了部分汇编比较,发现一个神奇的问题:

在核心代码层 两者代码的汇编码是一样的,而在用户代码层面的编译结果,OSX编译优于WINDOWS编译结果,并具有更多的内联优化,指令集优化等。

最终解决

最终的结论,我们发现OSX更适用于LINUX服务器程序的开发以及编写,而WINDOWS适合在研发阶段使用,在发布和压力测试阶段,建议直接使用OSX或LINUX编译版本,而不是选择WINDOWS版本,这可能是由于WINDOWS自身平台所致。