阿里云新服务器遇到的问题之–完结

  • 2019 年 10 月 3 日
  • 筆記

写在前面

因为原来的描述错误,内容做了更正。对于涉及T系列服务器的评论,请忽略。我们提供的是C系列计算型。因为着急,提供的错误信息请谅解。

前言

公司一直用的阿里云服务器,系统是windows server 2008。因为做技术,了解做一个云服务有多难。阿里起家早,当时的种种壮举也早已耳熟能详。本着技术人的同情与倾佩,一直很相信阿里云。结果这两天碰到了一个bug,阿里云对这个事情的处理态度让人心寒。回想去年嘲笑腾讯云因为人为失误导致用户数据丢失,结果仅仅赔付购买服务器的钱,现在觉着好打脸。是天下乌鸦一般黑呢?还是尾大不掉呢?

起因

客户反应,他游戏的阶段不对了,每个阶段非常长。我上服务器查看,错误日志没有,数据库异常语句没有,cpu正常,内存正常,磁盘正常,唯一发现内存有硬错误,并且有点多。上网查了一下,没有什么介绍为什么内存硬错误,有一点介绍是硬件读写超时导致的。找不出什么原因,就是感觉系统有点卡,看了一下配置,与我们正常的服务器没什么区别,唯一的区别是系统cpu不一样。

调查

那只能调试了。重新编译了版本,上传上去,开启远程调试,发现GetTickCount64调用异常。

这个函数参考 https://docs.microsoft.com/zh-cn/windows/win32/api/sysinfoapi/nf-sysinfoapi-gettickcount64

Retrieves the number of milliseconds that have elapsed since the system was started.

按照微软的说法,就是返回系统启动到现在经历的毫秒数。并且我们使用了这么久,没出过问题,也非常精确。

但是调试发现,GetTickCount64两次获取差值是10000,表示正好是10秒钟,结果服务器上经过了40多秒才返回。也就是10000个系统时钟的差值是40多秒,不是10秒。

好奇怪,第一次遇到这个问题。详细查了一下新系统的cpu,发现与我们原来使用的都不一样,是新一代升级过的。

 

原来我们以前的服务器是Intel Xeon CPU 8163 如图

 

新的服务器是 Intel 8269cy,如图

好吧,新产品上线,难免有问题。只好给阿里云提工单。

不爽的经历

我们不是第一次给阿里云提供工单了,公司大,需要流程,OK可以理解,但是这次没了互联网公司敏捷的感觉,多了臃肿的政治化寡头的味道。

第一天提,把问题描述清楚,说我们什么语言,调用了什么api,现在是什么现象,理论上是什么现象。

下午有人问了一遍大体问题。然后就是请等待,正在找技术调查。

第二天第二个人上线问,结果还是个客服。说是技术,随便说两句话就露馅了。让我们提供测试结果和代码。这……好我忍,写了测试代码。

int main()  {      long long stick = GetTickCount64();      long long etick = GetTickCount64();      cout << "start tick " << stick << endl;      time_t stime = time(NULL);      cout << "start time " << stime << endl;      while (etick - stick < 10000)      {          etick = GetTickCount64();      }      cout << "end tick " << etick << endl;      time_t etime = time(NULL);      cout << "end time " << stime << endl;      cout << "end tick - start tick = " << etick - stick << endl;      cout << "end time - start time = " << etime - stime << endl;      char inchar;      cin >> inchar;  }

然后在正常的服务器上跑一遍,OK,结果都是对的,时间也是10秒。

在异常的服务器上跑一遍,嗯???奇异的现象发生了,结果也是对的。

下面是结果

 

 

 这这这,完全出乎我的意料了。本来以为,GetTickCount64调用有问题,也就是每次加1,并不是1毫秒了,而是几毫秒,或是几十毫秒。但是time是正常的,那么结果就是GetTickCount64返回值10000的差值应该是time返回值差值的40多。现在都是一样。我慢慢的点开系统右下角的时间,灵异的事情发生了。如下视频

 

系统时间都变慢了!!!

这足够可以说明问题了吧,我们把视频发给阿里云。结果他们说他们测试下来正常的。给我们了他们的视频,如下

但是从阿里云自己提供的视频上面可以看出。不管是桌面还是系统时间(因为他们是在线,要求我们调查,过了几分钟立马回的),都不是我们有问题的系统。也就是他们随便找了一台正常的服务器,录了一个视频给我,然后告诉我们没问题。

退款

我们要求退款,然后买一个新的,阿里云不同意。

没办法我打杭州12315消费者协会电话,被告知,阿里云属于商业产品,他们不受理,就算是个人买来使用也不行,只能走法律途径。回到工位给同事说,感觉就是,十几公里上班的路程,觉着太远,问一下有没有公交,被告知,只有飞机,爱坐不坐,不然就走着过来。

强行扯皮

没办法,只能死磕了,因为服务器是客户账户买的,不能说上一个不能使用就让客户直接买新的。扯皮了好久,终于同意退款。但是要500多天,钱才可以到账。可以的,这很霸道。

新服务器上线

晚上买了新服务器,查看系统时间,正常。配置好,启动。打开游戏,惊呆了!!!游戏阶段变快了。也就是原来10秒钟的时钟,现在也就2、3秒。这……

正在准备调试的时候,好了?!战战兢兢等了几十分钟,没有异常。OK,回家。

问题重现

早上来到,就被告知,阶段变慢的问题又出现了。黑线~~

猜测

昨天我就猜测是不是因为我们C6的系统,用的是C5的镜像导致的。但是当时因为客户着急,先应付一下,不用镜像,配置太麻烦了。所以第二个新系统还是用的镜像。现在我们重装系统,不用镜像,再次测试,因为问题复现需要第二天……

无解

刚刚把通过镜像创建的服务器重装系统,启动,我还没配置好,又出现时间走的慢的问题了。求救哪位老哥知道解决方法

回复

很多同学建议换一个实例,实际上我们第二个新的实例,就换了一种,不过还是有问题。关键是这个问题,阿里云没有给明确的说明,他那么多实例,从几百到几千一个月,不可能作为用户帮他们一个个测试到底哪个是好用的。就他这个退款速度,实在是也不敢试啊。

对于有的同学说的,使用突发性能实例的问题。是我描述信息错误,我们购买的是计算型实例。如下图,一般都是4核8G的。根据后续要求,再提升。

 

后续

阿里云终于解决了,说是换了一个物理机,并且电话回访,做了解释。算是挽回一分。等待周六周日看看情况吧。

问题复现

还没等到周一,刚刚过了一会,问题复现。现在已经呆住……

最新进展

可以打脸某些人了。首先感谢楼下的阿里云产品经理。提醒我是C6的服务器,不是T6的实例,他们也在跟踪解决,并且有回电询问问题详细情况。等待中……

完结

周五晚上,与阿里云那边协作了好晚,感谢阿里云提供的支持。目前两个实例都是正常的。