什么是最快的Ruby记录器实现?
发布时间:2020-12-17 02:26:14 所属栏目:百科 来源:网络整理
导读:我想找到 Ruby提供的最快的记录器.我的直觉告诉我,系统日志会赢得这场比赛.但我的直觉似乎是错误的. Syslog是我测试的三个记录器中最慢的.我正在使用我的MacBook Pro,OSX 10.6(Snow Leopard),Intel Core2 Duo,4GB内存和MacPorts构建的Ruby 1.8.7.难道我做错
我想找到
Ruby提供的最快的记录器.我的直觉告诉我,系统日志会赢得这场比赛.但我的直觉似乎是错误的. Syslog是我测试的三个记录器中最慢的.我正在使用我的MacBook Pro,OSX 10.6(Snow Leopard),Intel Core2 Duo,4GB内存和MacPorts构建的Ruby 1.8.7.难道我做错了什么?或者Ruby的syslog实现那么慢?如果他们与我的不同,请随意发布您的结果.您也可以将您喜欢的Ruby记录器添加到基准测试中.我的目标是找到最快的记录器.我只对纯粹的性能(吞吐量)感兴趣.这里不关心多目标日志记录等功能.
# loggers_bench.rb require 'rbench' require 'activesupport' require 'syslog' require 'logger' buffered = ActiveSupport::BufferedLogger.new('buffered.log') logger = Logger.new('logger.log') syslog = Syslog.open('rb_syslog') TIMES = 10_000 RBench.run(TIMES) do column :syslog,:title => 'Syslog' column :logger,:title => 'Logger' column :buffered,:title => 'ActiveSuppoort::BufferedLogger' report '#info' do syslog { 300.times do |i| syslog.info "hello #{i}" end } logger { 300.times do |i| logger.info "#{Time.now} logging_logger[Process.pid]: INFO logging_logger : hello #{i}" end } buffered { 300.times do |i| buffered.info "#{Time.now} logging_logger[Process.pid]: INFO logging_logger : hello #{i}" end } end end # > RUBYOPT=rubygems ruby loggers_bench.rb # Syslog | Logger | ActiveSuppoort::BufferedLogger| # ----------------------------------------------------------------- # #info 158.316 | 117.882 | 98.707 | 请注意,我只使用了更简单的形式:“hello#{i}”用于Syslog(理论上这应该更快,但事实并非如此).此外,我的Mac的默认syslogd似乎有一个有限的消息配额(500 /秒).系统日志中不时生成以下消息: *** process 1962 exceeded 500 log message per second limit - remaining messages this second discarded *** 解决方法
我猜测BufferedLogger名称的第一部分解释了它的速度,与其他两个相比,我希望它们在收到后立即写入消息.
权衡将是缓冲对象的吞吐量提高,其IO负载减少,以防止因存储中未刷新的消息导致批发崩溃而导致的日志信息丢失. 我想知道,为了在不损失所有消息安全性的情况下提高吞吐量并且以增加复杂性为代价,可以将两种形式结合起来:使用缓冲记录器获取有用但不需要100.0000%完成的信息(即小出于法律或诊断的目的,为了法律或诊断目的,偶尔的损失不会导致痛苦)和非缓冲的一种您选择的消息. 如果必备消息的数量相对较低(并且它应该是或者这种方法可能不必要地复杂),那么您使用的哪个非缓冲记录器并不重要. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |