有一个比在两个虚拟机(Xen 上)上运行更复杂的应用程序。两个 VM 都运行 CentOS 6.2,每个运行的应用程序都使用完全相同的软件包和配置(减去不同的网络)。SELinux 在两者上都被禁用。
在机器 A 上,应用程序构建完美。在机器 B 上运行一些测试时,我们得到:
ruby[2010] 陷阱无效操作码 ip:7ff9d2944c30 sp:7fff9797e0f8 error:0 in ld-2.12.so[7ff9d2930000+20000]
进一步挖掘以找出机器的不同之处,机器 A 具有:
型号名称:六核 AMD Opteron(tm) 处理器 2423 HE
和机器B:
型号名称:AMD Opteron(TM) 处理器 6272
我试过cpuid_mask_cpu=fam_10_rev_c
在 grub 中启动机器 B,但它也没有帮助。
因此,对于如何处理此问题或如何联系托管服务提供商以便在另一台物理机器上运行该 VM 的任何建议,我们将不胜感激。
显然,支持 AVX 的 Xen 机器上的 libc 存在问题,可能会导致此错误。请查看来自 Chef 的故障单、另一个 ruby 应用程序和volk 的相关问题。最后,这个 ArchLinux 线程帮助我进一步理解了这个问题。
你瞧,AMD Opteron(TM) 处理器 6272支持 AVX,而2423 HE 则不支持。
所以...您可能会被要求转移到另一个处理器,或者您可以使用 --disable-multi-arch 重新编译 libc,这将使其忽略 AVX。我想你也可以告诉 Xen 忽略 AVX 支持,但我找不到如何 - 也许比我聪明的人可以告诉你。