问题标签 [disk-io]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1935 浏览

mysql - I/O 延迟会导致简单的 UPDATE 在 MySQL 中花费几秒钟吗?

我的 MySQL 应用程序在运行一些,和查询时遇到性能下降的问题。在这个问题中,我将只讨论一个特定的 ,因为它足以证明问题:UPDATEINSERTDELETEUPDATE

UPDATE通常足够快,大约 0.2 毫秒,但时不时地(足以成为问题)需要几秒钟。这是日志的摘录(查看第 4 行):

projects是一个 InnoDB 表,有 6 列类型INTVARCHAR17 行和一个索引id。它也发生在其他桌子上,但在这里我专注于这张桌子。在尝试解决问题时,我确保查询都是顺序的,所以这不是锁定问题UPDATE以上是在事务的上下文中执行的。服务器上的其他信息

  • 具有 4GB RAM(原为 1GB)、12GB 可用磁盘空间的 VPS
  • CentOS 5.8(原为 5.7)
  • MySQL 5.5.10(原为 5.0.x)

上面的“是”位表示它在升级之前或之后都不起作用。

到目前为止我已经尝试过,但无济于事

  • 设置innodb_flush_log_at_trx_commit为 0、1 或 2
  • 设置innodb_locks_unsafe_for_binlog开启或关闭
  • 设置timed_mutexes开启或关闭
  • innodb_flush_method从默认更改为O_DSYNCO_DIRECT
  • 从默认增加到600Minnodb_buffer_pool_size再增加到 3000M
  • innodb_log_file_size从默认增加到128M
  • 从源代码编译 MySQL
  • Running SHOW PROCESSLIST,它告诉我状态正在“更新”
  • Running SHOW PROFILE ALL,表示几乎所有时间都花在“更新”上,并且在该步骤中,没有太多时间花在 CPU 周期上,并且有很多自愿的上下文切换(比如 30 次)
  • 监控. SHOW STATUS_ Innodb_buffer_pool_pages_dirty被刷新的脏页和慢查询之间可能存在一些关系,但相关性并不清楚。

然后我决定用 . 检查系统的 I/O 延迟ioping。这是我的第一个 VPS,所以看到这个结果我很惊讶

相当不稳定,我会说。

说了这么多,我问:

  1. I/O 延迟是否会偶尔影响 MySQL 的性能?我一直认为,当您运行 时UPDATE,处理该连接的线程不会将数据刷新到磁盘或等待这样的刷新;它会立即返回,并且刷新将由另一个线程在另一个时间完成。

  2. 如果它不能是磁盘 I/O,除了租用专用服务器之外,我还有什么可以尝试的吗?

0 投票
4 回答
290 浏览

c# - 优化输出字典

我有 4 个字典,其中包含 800k 字符串,包含 200 到 6000 个字符。当我将它加载到内存中时,它会占用大约 11 GB 的内存。解析数据需要 2 分钟,输出数据需要 2 分钟。有没有比我在下面使用的更快地输出数据?我每秒只能获得 20-31 MB 的磁盘 IO,而且我知道硬盘驱动器可以做 800ish

0 投票
2 回答
4749 浏览

c# - 最终 System.UnauthorizedAccessException:访问路径...被拒绝

我有一个简单的 C# 控制台程序,它调用如下所示的函数:

在某些 Win 7 机器上,此函数最终会引发异常(当 i 超过 100,000 时):

这些机器安装了 McAfee 代理和 Cisco 安全代理以及许多其他软件。Windows Defender 被禁用。该程序正在管理员控制台中运行。该程序是为 .net 3.5 编译的。这是我在 W2k3 或 XP 机器上没有看到的。

如果我使用 procmon 来监视正在访问创建和删除“Temp\sample.txt”文件夹的所有事件和进程,我看到除了测试应用程序之外没有其他进程正在访问该路径。即使出现异常,procmon 中也没有列出其他进程。所以我不能证明这是杀毒软件的错。

有人知道可能出了什么问题吗?我是否在 Win7 上的 .net 中发现了一个错误;)

谢谢!

0 投票
1 回答
657 浏览

filesystems - 是否有可用的开源云文件系统?

我当前的项目需要一个云文件系统(确切地说是一个云 FTP)。

有没有可用的开源实现?如果是的话,请你给我一些参考。如果有一些与实施相关的技术报告,那就再好不过了:)

由于我还没有找到一个,我正在考虑从头开始实施一个。然后我又出现了一个问题:类似于本地文件系统,block我认为最好引入基本存储单元的概念,以减少Internet上小对象传输的开销。那么如何在传输成本和云存储使用量之间做出折衷,在本地 fs 场景下,如果块大小太大,磁盘使用量会急剧下降?我应该设置多大的块大小?

我向一位资深人士寻求上述权衡,他建议可以使用可变块大小。然后我很好奇为什么像 minix 或 ext3 这样的经典文件系统不采用这种策略(如果我犯了错误,请纠正我)?

0 投票
1 回答
19248 浏览

c# - UNC 路径不适用于 .NET?

我正在运行一个非常简单的程序,它试图在同一台机器上的一个文件夹中列出文件,该文件使用 UNC 格式指定(如http://msdn.microsoft.com/en-us/library/windows/中所述桌面/aa365247%28v=vs.85%29.aspx):

但是 Directory.GetFiles() 不起作用并抛出 ArgumentException(当 - path 是零长度字符串、仅包含空格或包含一个或多个由 InvalidPathChars 定义的无效字符时抛出)。Console.Writeline() 不打印任何内容,这确认路径中没有无效字符。当我使用“\\UNC\?\d:\share\input”或“\\UNC\?\machinename\share\input”或“\\?\machinename\share\input”时,我得到了同样的异常。

"d:\share\input" 确实是一个共享文件夹。

有谁知道可能出了什么问题?

谢谢!

0 投票
2 回答
2645 浏览

java - 如何在没有缓存的情况下测量文件读取速度?

我的 java 程序大部分时间都花在读取一些文件上,我想优化它,例如,通过使用并发、预取、内存映射文件等。

没有基准的优化是无意义的,所以我进行基准测试。然而,在基准测试期间,整个文件内容被缓存在 RAM 中,这与实际运行不同。因此,基准测试的运行时间要小得多,而且很可能与现实无关。

我需要以某种方式告诉操作系统(Linux)不要缓存文件内容,或者最好在每次基准测试运行之前清除缓存。或者可能会消耗大部分可用 RAM (32 GB),因此只有一小部分文件内容适合。怎么做?

我正在使用卡尺进行基准测试,但在这种情况下,我认为没有必要(它绝不是微基准),我不确定这是一个好主意。

0 投票
1 回答
343 浏览

linux - 如何在 Linux 上安全且事务性地替换文件?

我能想到的最天真、最糟糕的替换文件内容的方法是:

显然,如果该操作在关闭前的某个时间点失败,则您会丢失原始文件的内容,而不必完成新内容。

那么,什么是完全正确的方法(如果有的话)。我想它是这样的:

但这完全是原子的和安全的吗?实际执行移动的正确命令是什么。如果我有另一个打开连接的进程,file.txt我假设它会保留指向原始文件的指针,直到关闭。如果另一个进程试图file.txt在移动过程中打开怎么办?

我真的不在乎我的进程得到什么版本的文件,只要它们得到一个完整的、未损坏的版本。

0 投票
4 回答
1565 浏览

c - 是否可以从多个线程写入同一文件的不同部分?

我可以从多个线程(在典型的 PC 上)同时写入同一文件的不同部分吗?我的意思是只有一个磁头,所以写入只能以某种顺序执行,即不能并行,对吧?

编辑:

我正在编写一个对大型二进制文件进行排序的程序,但大部分时间仍然花在磁盘 I/O 上,所以我只是想知道通过并行执行 I/O 是否会获得额外的速度。

0 投票
4 回答
487 浏览

c# - TextWriter 没有写入磁盘,没有错误

我有以下代码片段,它从列表中获取行并将它们写入磁盘:

但是......结果文件不是在磁盘上创建的,也没有抛出任何异常。就像要写入磁盘的文本消失在空气中一样。此代码在另一个程序集中工作,而不是在我将其移植到的服务中。我不知道为什么在这种情况下文本不会写入磁盘,非常感谢您为解决此问题提供的任何帮助。

0 投票
2 回答
15556 浏览

java - 性能:BufferedOutputStream 与 FileWriter

我一直使用 aFileWriter在 Java 中将文本写入文件。显然你也可以使用 a BufferedOutputStream。在仔细阅读了两个 javadocs 之后,我似乎无法分辨哪个更快/更有效。

所以我问:这两种文件 I/O 方法之间是否存在性能差异(即使是最小的)?如果是这样,它们是什么,为什么?如果不是,为什么它们实际上是相同的?

是否存在其中一种优于另一种的情况?提前致谢!