我有一台 Synology RS812RP+,我用它来进行一些部门测试。我在里面塞了一堆SSD磁盘,我很好奇监控磁盘IO。
iostat 未预装在 Synology 上,也没有构建它的工具。有人对在这种环境中运行 iostat 有什么建议吗?
我有一台运行 Ubuntu 服务器 10.04 的 24 核机器,内存为 94.6GiB。该机器正在经历高 %iowait,这与我们拥有(4 个内核)运行相同类型和数量的进程的另一台服务器不同。两台机器都连接到 VNX Raid 文件服务器,24 核机器通过 4 个 FC 卡连接,另一台通过 2 个千兆以太网卡连接。4 核机器目前优于 24 核机器,具有更高的 CPU 使用率和更低的 %iowait。
在 9 天的正常运行时间中,%iowait 平均为 16%,通常高于 30%。大多数时候 CPU 使用率非常低,大约为 5%(由于 iowait 高)。有充足的空闲内存。
我不明白的一件事是为什么所有数据似乎都通过设备 sdc 而不是直接通过数据移动器:
avg-cpu: %user %nice %system %iowait %steal %idle
6.11 0.39 0.75 16.01 0.00 76.74
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.00 0.00 0.00 1232 0
sdb 0.00 0.00 0.00 2960 0
sdc 1.53 43.71 44.54 36726612 37425026
dm-0 0.43 27.69 …Run Code Online (Sandbox Code Playgroud) 我有一个 LAMP 集群,它通过 NFS 共享文件,当神秘的刷新进程开始出现时,其中一个偶尔会被攻击一段时间。
谁能帮我?解决这个问题的唯一方法是重新启动 - 杀死进程只会产生新的进程。
top - 19:43:43 up 104 days, 4:52, 1 user, load average: 27.15, 56.72, 33.31
Tasks: 301 total, 9 running, 292 sleeping, 0 stopped, 0 zombie
Cpu(s): 15.6%us, 77.0%sy, 0.0%ni, 4.2%id, 2.0%wa, 0.0%hi, 1.2%si, 0.0%st
Mem: 8049708k total, 7060492k used, 989216k free, 157156k buffers
Swap: 4194296k total, 483228k used, 3711068k free, 928768k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
840 root 20 0 0 0 0 R …Run Code Online (Sandbox Code Playgroud) 是否可以为 I/O 操作设置任意延迟?
我想了解 iowait 和磁盘 %util 如何影响性能。有很多工具可以对磁盘施加压力(bonnie++ 等),但我正在寻找一种方法来引入延迟,就像 tc(流量控制)工具对网络所做的那样。可以使用 hdparm 工具禁用一些优化,例如将 AAM 设置为安静或禁用 DMA 并切换到 PIO 模式 - 这只是减少 I/O 的间接方法。
我们有一个非常大(多 GB)的 Nginx 缓存目录用于繁忙的站点,我们偶尔需要一次清除所有目录。我过去解决了这个问题,方法是将缓存文件夹移动到新路径,在旧路径上创建一个新的缓存文件夹,然后rm -rfing 旧的缓存文件夹。
然而,最近,当我在忙碌的早晨需要清除缓存时,来自的 I/Orm -rf使我的服务器进程无法访问磁盘,因为 Nginx 及其面向的服务器都是读取密集型的。当 CPU 处于空闲状态并rm -rf占用iotop.
我ionice -c 3在调用 时尝试过rm,但它似乎对观察到的行为没有明显影响。
有没有办法驯服rm -rf更多地共享磁盘?我是否需要使用不同的技术来获取线索ionice?
更新:
有问题的文件系统是 AWS EC2 实例存储(主磁盘是 EBS)。该/etc/fstab条目如下所示:
/dev/xvdb /mnt auto defaults,nobootwait,comment=cloudconfig 0 2
Run Code Online (Sandbox Code Playgroud) 我们有一个 4 核 CPU 生产系统,它执行大量 cronjobs,具有恒定的 proc 队列和~1.5 的通常负载。
在夜间,我们用 postgres 做一些 IO 密集型的事情。我们生成一个图表,显示负载/内存使用情况 (rrd-updates.sh) 这有时会在高 IO 负载情况下“失败”。几乎每晚都会发生这种情况,但并非在所有高 IO 情况下都会发生。
我的“正常”解决方案是对 postgres 内容进行优化和离子化,并增加图形生成的优先级。然而这仍然失败。图生成是使用 flock 进行半线程证明的。我确实记录了执行时间,并且在高 IO 负载期间生成图形最多需要 5 分钟,这似乎导致图形丢失长达 4 分钟。
时间范围与 postgres 活动完全匹配(这有时也发生在白天,虽然不是那么频繁)离子化到实时 prio(C1 N6 graph_cron vs C2 N3 postgres),在 postgres 之上(-5 graph_cron vs 10 postgres)很好) 没有解决问题。
假设没有收集数据,额外的问题是 ionice/nice 不知何故仍然无法正常工作。
即使有 90% 的 IOwait 和 100 的负载,我仍然能够免费使用数据生成命令,而没有超过 5 秒的延迟(至少在测试中)。
遗憾的是,我无法在测试中完全重现这一点(只有一个虚拟化的开发系统)
版本:
内核2.6.32-5-686-bigmem
Debian Squeeze rrdtool1.4.3
硬件:SAS 15K RPM HDD,硬件 RAID1
挂载选项中的LVM :ext3 with rw,errors=remount-ro
调度程序:CFQ …
我有一些运行基于 Ubuntu 云的映像 14.04-1 LTS 版本的虚拟机。我想在 VM 上查看不同 IO 调度程序的 IO 性能,因此我/sys/block/<drive>/queue/scheduler在来宾操作系统上更改了 IO 调度程序。通常,应该有cfq、deadline、 或noop可供选择。但我看到的是none. 是不是说Canonical在云端镜像中去掉了I/O调度器,或者none这里的调度器是重命名的noop调度器?如果系统中没有 I/O 调度程序会发生什么?所有的io请求都是按FIFO顺序直接发送给主机的?
感谢您的启发!
我最近一直在阅读有关磁盘的信息,这让我产生了 3 个不同的疑问。而且我无法将它们链接在一起。我混淆的三个不同术语是block size,IO和Performance。
当我遇到该语句时,我正在slashroot 上阅读有关超级块的信息
如果您的文件系统具有较大的块大小,则将执行较少的 IOPS。
由此我明白,如果我想读取 1024 KB 的数据,块大小为 4KB/4096B 的磁盘(比如 A)将比块大小为 64KB 的磁盘(比如 B)需要更多的 IO。
现在我的问题是磁盘 A 需要多少 IO?
据我了解,读取此数据所需的 IO 请求数量也取决于每个 IO 请求的大小。
So who is deciding what is the size of the IO request? Is it equal to the block size? 有人说您的应用程序决定了 IO 请求的大小,这似乎很公平,但是操作系统如何将单个请求划分为多个 IO。 There must be a limit after which the request splits in more then one IO. How to find that limit ? …假设我有一个名为 jobs.csv 的文件,我希望由 Foo 完成前 50k 项工作
我可以这样做:
# cat jobs.csv | sort -u | head -n 50000 > /tmp/jobs.csv
# cat /tmp/jobs.csv | while read line; do Foo --job=$line; done
Run Code Online (Sandbox Code Playgroud)
或者
# cat jobs.csv | sort -u | head -n 50000 | while read line; do Foo --job=$line; done
Run Code Online (Sandbox Code Playgroud)
在系统的 IO/内存效率方面,谁能说出哪个更好?
或者更好的是,可以为此提出更好的解决方案吗?
我的新服务器的 I/O 性能非常低。我用谷歌搜索并尝试了我能想象到的一切。首先,这是硬件组件:
目前它运行在软件 RAID5 上。
主机的吞吐量:
# dd if=/dev/zero of=testfile bs=64k count=16k conv=fdatasync
16384+0 records in
16384+0 records out
1073741824 bytes (1.1 GB) copied, 4.44095 s, 242 MB/s
Run Code Online (Sandbox Code Playgroud)
访客系统上的当前吞吐量:
# dd if=/dev/zero of=testfile bs=64k count=16k conv=fdatasync
16384+0 records in
16384+0 records out
1073741824 bytes (1.1 GB) copied, 94.8643 s, 11.3 MB/s
Run Code Online (Sandbox Code Playgroud)
我使用的是自编译的 QEMU + LIBVIRT,加上自编译的 Linux 内核(3.10.32-lns-opteron-kvmhost)。我可以提供内核配置之外的部分。
我在另一个系统(相同的处理器,但其他硬盘)上运行两个内核,该系统正在以完整的 I/O 性能运行。
我没有安装其他系统,所以我无法可靠地重现该问题。
来宾的硬盘配置:
<disk type='block' device='disk'> …Run Code Online (Sandbox Code Playgroud) io ×10
linux ×6
hard-drive ×3
performance ×3
bottleneck ×2
ionice ×2
centos ×1
cloud ×1
debian ×1
filesystems ×1
nfs ×1
pipe ×1
rm ×1
rrdtool ×1
scheduler ×1
synology ×1
ubuntu-10.04 ×1
ubuntu-14.04 ×1
unix ×1