(Xen上の)2つのVMで実行するよりもかなり複雑なアプリケーションがあります。両方のVMは、実行中のすべてのアプリケーションに対してまったく同じパッケージと構成でCentOS 6.2を実行します(異なるネットワークを除く)。 SELinuxは両方で無効になっています。
マシンAでは、アプリケーションは完全にビルドされます。マシンBでいくつかのテストを実行すると、次のようになります。
Ruby [2010]トラップ無効なオペコードip:7ff9d2944c30 sp:7fff9797e0f8 error:0 in ld-2.12.so [7ff9d2930000 + 20000]
マシンの違いを見つけるためにもう少し掘り下げて、マシンAには次のものがあります。
モデル名:6コアAMD Opteron(tm)プロセッサー2423 HE
およびマシンB:
モデル名:AMD Opteron(TM)プロセッサー6272
Grubでcpuid_mask_cpu=fam_10_rev_c
を使用してマシンBを起動しようとしましたが、どちらも役に立ちませんでした。
したがって、これに対処する方法、または別の物理マシンでこのVMを実行するためにホスティングプロバイダーにアプローチする方法に関するアドバイスをいただければ幸いです。
どうやら、このエラーを引き起こす可能性のあるAVXサポートを備えたXenマシンのlibcに問題があります。 Chefからのこのトラブルチケット 、別のRubyアプリケーション、および volkの関連問題 )を参照してください。最後に、 このArchLinux thread 問題をさらに理解するのに役立ちました。
見よ、AMD Opteron(TM)プロセッサ6272 AVXをサポート 、 2423 HEはサポートしない 。
つまり...別のプロセッサに移動するように求められるか、-disable-multi-Archを使用してlibcを再コンパイルすると、AVXが無視されます。 XenにAVXサポートを無視するように指示することもできると思いますが、その方法がわかりません。おそらく、私より賢い人が教えてくれます。