2011-03-01 65 views
3

对于我的erlang应用程序,我已经使用sasl logger和log4erl,并且发送给它们的事件数量大约为每秒1000次时,它们都表现不佳。 log4erl提供了更好的性能,但过了一段时间后,邮箱开始填满,从而开始膨胀虚拟机。 Erlang高容量日志记录

将使用disk_log是一个更好的选择(因为它会在1000个事件每秒负载下工作吗?)。

我试图在shell上使用disk_log ...在这个例子中,他们首先将消息转换为二进制文件(list_to_binary)并使用“博客”功能写入文件。

这样做会帮助我使用高效率的大容量记录仪吗?

还有一个疑问:: 使用disk_log:博客文本的大小只是84个字节......但disk_log:log_terms..the尺寸为970 bytes..why这么大的差别?

+2

Erlang的IO库可以处理列表和二进制文件(以及两者的混合)。您不需要转换任何将最终转到端口的内容。但是,无论出于何种原因,库API都可能需要它。 – 2011-03-01 12:59:45

+0

使用disk_log:blog的文本大小仅为84字节......但是使用disk_log:log_terms ..大小为970字节......为什么有如此大的差异? – Arunmu 2011-03-01 13:12:40

+0

问题是您可能正在使用记录器作为示踪剂。 SASL尤其有相当的开销。 – 2011-03-01 17:34:16

回答

2

自己动手破解一些东西。具有内存存储和批量转储到光盘的专用记录器是最快的解决方案。如果您无法承受丢失任何数据(在发生虚拟机崩溃的情况下),请在远程节点上执行此操作。一旦我使用了远程'解决方案',并且每查询一次5秒的目标虚拟机。我没有注意到对系统的影响。

+0

@ user425720 ::现在我正在用disk_log与“内部格式”,它将以二进制格式转储日志,我将它解析出来。 contd ... – Arunmu 2011-03-01 14:42:19

+0

我将在一个将继续运行的进程中打开disk_log,并且我会将日志的名称传递给所有需要日志记录的进程。考虑到disk_log有一些所有者和匿名概念,它是正确的方法。 – Arunmu 2011-03-01 14:44:06

+0

@ArunMu说实话,我并没有真正使用disc_log。你的情景听起来不错。有记录器守护进程并传递给它是很常见的。我没有使用disc_log,因为光盘上的二进制格式根本不方便。 – user425720 2011-03-01 15:08:50

1

在大容量日志中,我更喜欢经过测试的解决方案,如scribe或flume。检查erl_scribe

+0

cool..never听说过 – Arunmu 2011-03-01 15:39:23

+0

是真实的,但重要的照顾清单是重要的 – user425720 2011-03-01 15:48:24

+0

日志记录似乎是一件容易的工作。但凭借经验,我可以说这将成为一个沉重的负担,即使是在大批量生产时也是一个瓶颈。在分布式环境中消化日志也是一个问题(当你抛出2个erlang节点来获得更多的并发性时)。 Scribe和Flume都针对这些问题进行了调整。 – frail 2011-03-01 16:02:56