【问题标题】:File writes per second每秒文件写入次数
【发布时间】:2010-01-04 18:30:58
【问题描述】:

我想将访问率高的网站访问记录到文件中。我每秒可以对日志文件执行多少写入操作?

【问题讨论】:

  • 您能否说明您需要哪些 Google Analytics 未提供的附加功能?
  • @Ilya,您使用的是什么服务器?阿帕奇?
  • 好的,我会尽量详细解释我需要什么。我有广告网络,我想将横幅节目记录到文件中,然后每 5 分钟将它们上传到 mysql 一次。横幅显示的速率约为每秒 50 个
  • 是的,apache,8 核服务器,4 GB 内存
  • 如果您每秒有 50 个,并且每 5 分钟刷新一次我的 MySQL,那么任何时候都不应超过 15,000 个。为什么不将它们保存在内存中并从那里写入 MySQL?您不会遇到与写入磁盘几乎相同的吞吐量瓶颈。

标签: file


【解决方案1】:

如果您不能使用 Google Analytics(分析),为什么不使用您的网络服务器现有的日志系统?如果您使用的是真正的网络服务器,几乎可以肯定它是一种已针对最大吞吐量进行了优化的日志记录机制。

您的问题在所有其他方面都无法回答。可能的写入次数由硬件、操作系统和其他运行软件的争用决定。

【讨论】:

  • 我认为解析是一个艰难而漫长的过程
  • @Ilya:没有尝试优化文件写入那么难。 Perl 的存在主要是为了做日志解析之类的事情。还有其他更有针对性的选项,例如 splunk。不要疯狂地重新发明这个轮子。
  • 您可以编写自定义日志(仅针对您感兴趣的那些 URL,或者以不包含您不需要的内容的特定格式,例如用户代理),这可以保存解析时间很多。请参阅 Apache 文档中的 CustomLog 和朋友。
  • 好的,但在某些情况下我需要扣除显示的横幅,在其他情况下 - 不,但在日志中所有情况都会
  • Apache 日志记录可以是有条件的,因此您应该能够对其进行配置,以便仅在显示横幅时写入日志条目(请参阅httpd.apache.org/docs/2.2/mod/mod_log_config.html)。如何做到这一点将取决于显示横幅的条件,但如果您需要帮助,最好创建一个新问题,因为这个问题应该是关于文件写入性能的。
【解决方案2】:

不要那样做,改用Google Analytics。您最终会在尝试打开文件、写入文件、关闭文件等等时遇到许多问题。当您覆盖尚未提交的数据等时会出现问题。

如果您需要自己的本地解决方案(在专用网络等中),您可以查看像 AWStats 这样的选项,该选项通过爬取您的日志文件来运行。

【讨论】:

  • Analytics 提供的丰富信息非常棒。
  • 我知道,但我需要一些其他功能
  • 您只是认为您需要自己的日志系统。如果你真的有一个大容量的网站,你会知道你不想登录到文件系统,你想登录到另一台机器上的系统日志,我也推荐谷歌分析,比你自己做的任何东西都要好
  • 您可能需要哪些 其他 功能,而这些功能在 Analytics 中尚不可用?您以前使用过 Google Analytics(分析)吗?这是巨大的:)
  • llya,然后查看一个日志解析器,它可以通过 cron 或其他东西运行,并为您将数据插入 mysql 数据库。
【解决方案3】:

或者只是分析 Apache 访问日志文件。例如AWStats

【讨论】:

    【解决方案4】:

    在您实际将数据刷新到磁盘之前,文件写入并不昂贵。通常,您的操作系统会主动缓存内容,因此如果您不尝试手动 fsync() 数据,您可以获得非常好的写入性能(当然,如果发生崩溃,您可能会丢失最新的日志条目)。

    然而,另一个问题是文件 I/O 不一定是线程安全的,从多个线程或进程写入同一个文件(如果我们谈论的是 Web 应用程序,这可能会发生)可能会产生错误的结果: 例如,丢失、重复或混合的日志行。

    【讨论】:

    • 线程安全正是我想知道的类似问题。
    【解决方案5】:

    文件访问非常昂贵,尤其是在进行写入时。我建议将它们保存到 RAM(使用最适合您的任何缓存方法)并定期将结果写入磁盘。

    您也可以为此使用数据库。比如:

    UPDATE stats SET hits = hits + 1
    

    尝试几种不同的解决方案,对性能进行基准测试,然后以最少的资源使用速度足够快地实施。

    【讨论】:

    • 我认为为此目的使用关系数据库将是矫枉过正,可能会导致一些严重的性能下降。
    【解决方案6】:

    如果使用 Apache,我建议使用作为标准套件的一部分提供的 rotatelogs 实用程序。

    我们使用它来允许每天轮换服务器注销,而无需停止和启动服务器。注:使用新的“||”声明日志指令时的语法。

    我参与的网站是 Internet 上最大的网站之一,在很长一段时间内点击率达到每秒数百万的峰值。

    编辑:我忘了说该站点使用标准的 Apache 日志记录指令,我们根本不需要自定义 Apache 日志记录代码。

    编辑:顺便说一句,除非你真的需要它,否则不要记录提供的字节,因为这会导致午夜边界周围的各种问题。

    【讨论】:

    • @Ilya,请参阅@EarthMind 关于 awstats 的建议作为初始起点。我们每天使用自定义统计分析器对日志文件进行各种分析,该分析器在专用机器套件上运行,例如Sun5240 的。该分析器是在用 C 和 Perl 脚本编写的可执行文件的混合中实现的。这个分析过程每天至少需要十个小时才能运行!
    【解决方案7】:

    如果您的硬盘驱动器可以写入 40 MB/s 并且您的日志文件行大约为 40 MB/s。长度为 300 字节,我假设如果您保持打开状态,您每秒可以将 140000 个 HTTP 请求写入日志文件。

    无论如何,您不应该自己这样做,因为大多数 Web 服务器已经写入日志文件,并且他们非常清楚如何做到这一点,如果达到最大限制如何滚动文件以及如何格式化日志行根据一些众所周知的模式。

    【讨论】:

      【解决方案8】:

      让 Apache 来做;在后端做分析工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-21
        • 2019-06-25
        • 1970-01-01
        • 1970-01-01
        • 2016-02-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多