有一个相当复杂的应用程序比运行在两个虚拟机上(在Xen上)。 两台虚拟机都运行CentOS 6.2,每个运行的应用程序都有完全相同的包和configuration(减去不同的networking)。 两者都禁用SELinux。
在机器A上,应用程序完美地构build。 在机器B上运行一些testing时,我们得到:
ruby [2010]陷阱无效操作码ip:7ff9d2944c30 sp:7fff9797e0f8错误:0在ld-2.12.so [7ff9d2930000 + 20000]
机器A挖掘更多一点,以找出机器的不同之处:
型号名称:六核AMD Opteron(tm)处理器2423 HE
和机器B:
型号名称:AMD Opteron(TM)处理器6272
我试过用grub中的cpuid_mask_cpu=fam_10_rev_c启动机器B,但是也没有帮助。
所以,如何处理这个问题,或者如何接近主机提供商以便在另一台物理机器上运行这个VM,我们将不胜感激。
显然,在支持AVX的Xen机器上的libc存在问题,可能会导致此错误。 请看厨师的这个麻烦票 ,另一个ruby应用程序,以及相关的问题 。 最后, 这个ArchLinux线程帮助我进一步理解了这个问题。
瞧,AMD Opteron(TM)处理器6272 支持AVX,而2423 HE则不支持 。
所以…你可以被要求移动到另一个处理器,或者你可以使用–disable-multi-arch来重新编译libc,这会使其忽略AVX。 我认为你也可以告诉Xen忽略AVX的支持,但是我找不到如何 – 也许有人比我更聪明可以告诉你。