Log Processing

· 337 words · 1 minute read

这几天需要分析一些Web服务器的日志,比如从 Apache 服务器日志中找出产生流量总数最高的10个文件。日志文件大小:21G,68044641行,其中包含了 9488596 个不同的URL。

写了个简单的C#程序,单线程,按行读。消耗内存的总量和不同URL的数目成正比。目前结果:运行时间 5'3",消耗内存1.7G。系统是i7-2600,3.4G。

最开始编译出来的32位程序会OOM,因为用户态可用虚拟内存只有2G,编译了一个64位的程序后,发现内存使用差不多是2.1G。所有的日志并不需要全部排序, 调整了一下算法后,得到目前结果。

中间曾经犯了一个错误,用了个SortedDictionary,但是又对已经插入其中的对象的值进行了修改,而该字典我又是设置为根据对象中的某个值排序的,不应该修改。

comments powered by Disqus