Ruby on rails Rails应用程序中对/etc/localtime的stat调用过多
我刚刚浏览了我的Rails应用程序,它产生了很多Ruby on rails Rails应用程序中对/etc/localtime的stat调用过多,ruby-on-rails,ruby,time,timezone,Ruby On Rails,Ruby,Time,Timezone,我刚刚浏览了我的Rails应用程序,它产生了很多 stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2309, ...}) = 0 电话(真的很多!)。 在其他情况下,我读到这是因为时区没有设置。 有没有办法“修复”这个问题 最好的 Tobias正如@fabio所说,您应该向Rails论坛或邮件列表报告这一点,因为这可能是一个bug 但是,要设置时区,请在config/environment.rb中: Rails::Initialize
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2309, ...}) = 0
电话(真的很多!)。
在其他情况下,我读到这是因为时区没有设置。
有没有办法“修复”这个问题
最好的
Tobias正如@fabio所说,您应该向Rails论坛或邮件列表报告这一点,因为这可能是一个bug 但是,要设置时区,请在
config/environment.rb
中:
Rails::Initializer.run do |config|
config.time_zone = "Central Time (US & Canada)"
end
您可以使用
rake time:zones:us
、rake time:zones:local
或rake time:zones:all
(取决于您在世界上的位置)获得可用的时区。这不是ruby问题,而是C/Linux问题:
设置“TZ”ENV Var将导致在etc/localtime上不再调用stat。
但它不会对性能产生重大影响:
# irb
require 'benchmark'
Benchmark.measure { 10_000_000.times { Time.now } }
=> 17.880000 0.540000 18.420000 ( 21.535307)
# same with TZ=CET irb
=> 18.040000 0.550000 18.590000 ( 20.892542)
我认为你最好向Rails论坛报告,而不是这样。也许在某些情况下它会对性能产生重大影响?我正在管理而不是开发它,但我只是浏览了一个新部署的Rails应用程序,只得到了数千行statting localtime,线程疯狂地占用了CPU。“echo'export TZ='America/Chicago'>>/etc/sysconfig/httpd”,并重新启动httpd/Rack(Passenger)进程,即使在几分钟后和一些负载恢复后,它的运行情况也会更好。我来看看效果如何。感谢TZ环境指针!