在客户端的旧版Rails 2.1.1应用程序中,我遇到一个错误,其中ruby崩溃并发出“非法指令”。通过调用Digest :: SHA2上的方法触发崩溃。
>> Digest::SHA2
=> Digest::SHA2
>> Digest::SHA2.new()
Illegal instruction
Rails应用程序在负载均衡器后面的两台服务器上运行。两台服务器上的堆栈非常接近,只有一个触发崩溃。它们都是REE 1.8.7,Rails 2.1和Debian 6.一个运行Linux内核版本3.9.3,另一个运行版本3.9.2 - 但我不确定如何确定它是否相关。
Digest::SHA2
似乎主要是在C中实现的。我知道很少有C并且诊断这个是我的头脑。任何正确方向的帮助/指针都将非常感谢!
非常感谢!
环境信息
以下是Digest::SHA2
的REE来源:
https://github.com/FooBarWidget/rubyenterpriseedition187-330/tree/master/ext/digest/sha2
在遇到崩溃的服务器上:
hostname@node1:~/appname$ cat /etc/issue
Debian GNU/Linux 6.0 \n \l
hostname@node1:~/appname$ uname -a
Linux node1.hostname.org 3.9.2-x86_64-[redacted] #1 SMP Tue May 14 17:16:34 EDT 2013 x86_64 GNU/Linux
hostname@node1:~/appname$ which ruby
/opt/ruby-enterprise-1.8.7-2012.02/bin/ruby
hostname@node1:~/appname$ irb
irb(main):001:0> require 'digest'
=> true
irb(main):002:0> Digest::SHA2.hexdigest('foo')
=> "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae"
irb(main):003:0> exit
hostname@node1:~/appname$ ./script/console
Loading development environment (Rails 2.1.1)
>> Digest::SHA2.hexdigest('foo')
Illegal instruction
在不崩溃的服务器上:
hostname@node2:~/appname$ cat /etc/issue
Debian GNU/Linux 6.0 \n \l
hostname@node2:~/appname$ uname -a
Linux node2.hostname.org 3.9.3-x86_64-[redacted] #1 SMP Mon May 20 10:22:57 EDT 2013 x86_64 GNU/Linux
hostname@node2:~/appname$ which ruby
/opt/ruby-enterprise-1.8.7-2012.02/bin/ruby
hostname@node2:~/appname$ irb
irb(main):001:0> require 'digest'
=> true
irb(main):002:0> Digest::SHA2.hexdigest('foo')
=> "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae"
irb(main):003:0> exit
hostname@node2:~/appname$ ./script/console
Loading development environment (Rails 2.1.1)
>> Digest::SHA2.hexdigest('foo')
=> "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae"