有一个相当复杂的应用程序在两台虚拟机上运行(在 Xen 上)。两台虚拟机都运行 CentOS 6.2,每个运行的应用程序的软件包和配置完全相同(除了网络不同)。两台虚拟机上的 SELinux 均已禁用。
在机器 A 上,应用程序构建完美。在机器 B 上运行一些测试时,我们得到:
ruby[2010] 陷阱无效操作码 ip:7ff9d2944c30 sp:7fff9797e0f8 错误:0 在 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,但也没有帮助。
因此,如果您能提供关于如何处理该问题或如何联系托管服务提供商以便在另一台物理机器上运行该虚拟机的建议,我们将不胜感激。
答案1
显然,支持 AVX 的 Xen 机器上的 libc 存在问题,可能会导致此错误。请参阅来自 Chef 的这张故障单另一个 Ruby 应用程序,以及volk 的相关问题。 最后,这个 ArchLinux 线程帮助我进一步理解了这个问题。
瞧瞧,AMD Opteron(TM) 处理器 6272支持 AVX而2423 他不。
因此...您可以要求转移到另一个处理器,或者您可以使用 --disable-multi-arch 重新编译 libc,这将使其忽略 AVX。我认为您也可以告诉 Xen 忽略 AVX 支持,但我找不到如何操作 - 也许比我聪明的人可以告诉您。