首页 > 解决方案 > 套接字写入与磁盘写入的性能

问题描述

我的 java 应用程序将大量信息记录到磁盘上的日志文件中。其中一些记录的信息比其他信息更重要;除了在极少数情况下,需要不太重要的信息来向最终用户解释为什么生产中的代码会做出某个决定。

我想知道将不太重要的信息记录到套接字而不是磁盘上的文件是否是个好主意。套接字写入是否比磁盘写入快得多?

更新:基本上,我想登录到同一子网甚至同一台机器中的套接字,假设它比写入磁盘更快。然后,另一个进程(不是我的应用程序的一部分)将在方便时从该套接字读取。我在想这将是从套接字拉出的logstash。使用另一个线程异步记录到磁盘是另一种选择,但我想首先考虑套接字选项,如果这是一个对性能影响最小的简单解决方案。

标签: javaperformancesocketslogging

解决方案


你有几个选择:

如果您正在快速写入某个地方,并且从那里以较慢的方式转发(logstash 通过网络记录到某个 Elastic 实例),缓冲发生在哪里?如果日志记录长时间以高速率发生,这样的设置将产生越来越多的尚未发送的消息积压。


在上述情况下,缓冲将(分别)发生:

  • 直接同步写入磁盘:磁盘上的最终日志文件是缓冲区
  • 异步日志框架:缓冲区可能会占用您的堆或进程内存(当在堆之外,或在某些内核区域中,因此在RAM中)
  • unix 域套接字:在内核空间中缓冲,因此再次使用RAM

在最后两个选项中,在恒定的高容量情况下,事情会变得越来越摇摆不定。

测试和配置文件......或者只是登录到本地磁盘并旋转文件,删除旧文件。


推荐阅读