Ruby on rails Rails应用程序中对/etc/localtime的stat调用过多

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

我刚刚浏览了我的Rails应用程序,它产生了很多

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环境指针!