问题标签 [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.
mysql - MySQL 大量磁盘活动,即使没有运行查询
尝试解决由 MySQL 引起的神秘磁盘 io 瓶颈问题。
我正在使用以下命令来测试磁盘读/写速度:
我重新启动了机器,禁用了 cron,所以我通常的进程都没有运行查询,杀死了通常运行的 Web 服务器,并杀死了 mysqld。
当我在没有运行 mysqld 的情况下运行读取测试时,我得到1073741824 bytes (1.1 GB) copied, 2.19439 s, 489 MB/s
. 始终保持在 450-500 MB/s 左右。
当我启动备份 mysql 服务备份,然后再次运行读取测试时,我得到1073741824 bytes (1.1 GB) copied, 135.657 s, 7.9 MB/s
. 始终保持在 5MB/s 左右。
在 mysql 中运行show full processlist
不会显示任何查询(并且我禁用了所有将运行查询的东西)。在 MySQLWorkbench 的服务器状态选项卡中,我可以看到 InnoDB 读取在每秒 30-200 次读取和每秒 3-15 次写入之间波动,即使没有运行查询也是如此。
如果我运行,iotop -oPa
我可以看到 mysqld 在没有查询运行时每秒读取 1MB 磁盘。考虑到没有查询正在运行,这似乎很多,但同时这似乎不足以导致我的dd
命令花费这么长时间......执行磁盘 io 的唯一另一件事是jbd2/sda3-8
.
不确定它是否相关,但如果我尝试杀死 mysql 服务器并service mysql stop
显示“尝试停止 MySQL 超时”,并且 mysqld 进程继续运行,但我无法再连接到数据库。我必须使用kill -9
杀死mysqld进程并重新启动服务器。
这一切似乎都出乎意料。这台服务器几个月来一直在进行繁重的日志解析、大量插入和选择,直到上周末我们开始看到这个磁盘 io 瓶颈。
我怎样才能找出为什么 MySQL 在它基本上空闲时会进行如此多的磁盘读取?
windows - 是否可以修复我的 USB 甚至无法被磁盘管理读取
我不确定这是否是重复的,但每次我发现有关损坏的 USB 的线程时,磁盘管理至少仍然能够识别驱动器。我的 USB 太堵了,以至于当我尝试使用磁盘管理时,什么都没有加载。当我拔下它时,其他磁盘加载正常,但是一旦我插入并刷新程序就会挂起。当我运行 diskpart 和使用任何其他第三方磁盘管理软件时,也会发生同样的事情。这个 USB 是完全 FUBAR 还是我可以从死里复活?设备管理器识别出 USB 已插入,但这与 Windows 所能做的差不多。我正在运行 Win10 64 位版本 1809 build 17763.1217。如果我可以提供任何其他信息,请告诉我。我在这里先向您的帮助表示感谢。
c# - c#磁盘I\O效率提升一次读取多行
众所周知,磁盘 I\O 很昂贵。我通常使用 C# 从 .txt 文件中一次读取一行。我突然想到,如果 C# 给你一种一次读取 100 行的方法,它将需要更少的磁盘往返,从而减少时间。这可能吗?有没有人对如何提高效率有任何想法。我在大约一个小时内浏览了一个包含 100 万行的文件,一次读取和处理一行。我想看看我是否可以显着减少这个时间。
python - 当磁盘空间用完时会发生什么?
假设我这样做:
当我接近完全耗尽我的磁盘空间时会发生什么?这似乎是一个以前可能被问过的问题,但不幸的是我没有找到任何东西。谢谢...
万一这很重要,我在ubuntu上。
linux - 检查/输出 FIO 生成的输入数据
我在 linux 上使用 FIO 工具来运行一些 IO。我有兴趣查看作为 FIO 命令的一部分生成的数据内容。
我的命令:
我有兴趣了解如何使用 50% 压缩缓冲区选项生成数据。有没有办法查看/输出 FIO IO 输入数据?
assembly - ATA PIO 磁盘读取以奇怪的偏移量读取
我正在编写一个内核,并且遇到了一个我不理解且无法修复的错误。我正在为它开发一个文件系统,因为我想快速实现持久存储。从磁盘读取似乎不一致。从磁盘的第一次读取以 22 字节偏移量读取。我已经解决了它mov edi, InfoSector-22
。第二次读取工作正常,但第三次读取全部为 0。之前,当我在引导加载程序中预读取文件系统信息扇区时,文件描述符的读取导致 4 字节偏移。为什么会这样?
FS
PS 如果您需要完整的引导加载程序代码,我可以提供它,但它只在内存地址 0x1500 处加载磁盘的 10 个扇区,将堆栈指针设置为 0x1500 并切换到 32 位 PM。
java - 应该在主线程之外调用 getExternalCacheDir() 吗?
我正在调用getExternalCacheDir()
我的 Android 应用程序上的功能,这导致某些具有以下设备(HUAWEI P30 lite、Galaxy A40、Xperia XZ3)的 Android 10 用户出现 ANR。
我的 ANR 有以下堆栈跟踪
当我阅读开发人员参考时,我没有看到任何通知说我们需要在主线程之外进行调用:https://developer.android.com/reference/android/content/Context#getExternalCacheDir()
我应该在不同的线程上拨打电话吗?解决该 ANR 的最简单方法是什么?
bash - 合并数百万文件的最快方法
远程计算机上的一个目录中存储了 8100 万个文件 (!)。所有文件都以“.paintedHaploDiversity”结尾。我想将这些文件合并到allOutputs_3.5
父目录中调用的文件中。更具体地说,每个文件包含两行或三行。第一行是我可以忽略的标题。在剩下的一两行中,其中一行的值2
在第四列。对于每个文件,我想复制2
第二列中有 a 的整行并向其添加文件名(不包括扩展名“.paintedHaploDiversity”)。我将此文件名称为“simID”。
有关信息,远程计算机在 MAC OS X 10.11.6 (15G22010) 上运行。这是一个简单的桌面。因此不涉及网络(在我的 ssh 命令之外访问远程机器)。
我第一次尝试
但速度很慢。我估计需要几个月甚至几年的时间!然后,我尝试了
但它似乎并没有更快。就像速度测试一样,我也考虑过
但它又很慢。考虑到问题可能来自 regex 扩展*
,我尝试通过两个 C 样式循环复制它们的名称来循环每个文件。
这个过程现在快了很多,但仍然需要几个月的时间才能运行!最后,我想,我不妨删除第二列不等于的行2
(可能使用sed
命令)并执行
现在这个过程预计需要大约两周的时间。这开始是合理的。我仍然想知道是什么导致这个过程如此缓慢以及是否可以改进。
我想瓶颈可能是磁盘 IO。还是文件系统占用了大量 CPU 时间?这个过程会不会很慢,因为同一目录中有很多文件,并且需要在循环的每次迭代中搜索文件的二叉树?如何改进?我应该尝试用 C++ 编写流程吗?
如果它有帮助,top -o MEM
那么最后一个命令(使用printf
and的命令tail
)正在运行时的输出
这是输出iostat
例子:
考虑以下文件
文件_0:
文件_1:
文件_2:
文件_3:
预期的输出是
mysql - mariadb high 磁盘 IO 和 IO 等待
我们在 PR 和 DR 上有两个 mariadb 服务器 Master 和 Slave,我们观察到高磁盘 io 超过 90% 并且 iowait 一段时间超过 20,当 mariadb 备份在晚上开始时 iowait 超过 30 并且系统变得无响应导致看门狗进程超时和重启mariadb。当运行 dd 命令 sudo dd if=/dev/zero of=/data/test2.img bs=512 count=1000 oflag=dsync 它写入数据在 300 到 500 Kb/s 之间,我们也检查了存储级别,但没有问题在存储级别发现相同的存储已用于其他数据库(Oracle),并且没有此类 IO 问题。我需要帮助来确定这个问题。以下是mariadb的server.cnf
从顶部