如何确定进程或机器何时受到 IO 限制?

如何确定进程或机器何时受到 IO 限制?

我有一个 node.js 进程,它写入许多不同的 sqlite 数据库。 Sqlite 只能处理每个数据库一次并发写入,这很好,因为每个数据库一次只能进行一次写入,但会同时写入多个不同的数据库。

如何确定系统中的写入瓶颈在哪里: 1. 操作系统 (Debian Wheezy) 2. SSD 3. Node.js

我认为 sqlite 不会成为瓶颈,因为每个数据库不会并发写入,但写入会同时发生在不同的数据库上。

编辑:我正在尝试确定边界因子,以便我可以决定何时扩展到新框,或添加更多 node.js 进程等。

答案1

sar 命令为您提供各种有用的系统活动。例如,对于一般 CPU 使用情况:

sar -u 2 10

显示(注意 - 这不是 debian 系统,但应该类似):

09:31:55 AM       CPU     %user     %nice   %system   %iowait    %steal     %idle
09:31:57 AM       all      1.71      0.00      1.14      0.00      0.00     97.14
09:31:59 AM       all      1.00      0.00      0.50      0.00      0.00     98.51

显示 I/O 等待时间。system由于处理请求所需的 CPU 使用率,该数字也会受到 I/O 的影响,但iowaittime 表示归因于设备的延迟。

对于磁盘使用情况:

sar -d 2 110

给出:

09:33:03 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
09:33:05 AM    dev8-0     11.06      0.00    112.56     10.18      0.02      1.59      0.45      0.50
09:33:05 AM    dev8-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

因此,等待时间 (await) 可能有助于确定系统是否受 I/O 限制。

答案2

尝试使用 来分析您的应用程序iotop

 sudo apt-get install iotop
 sudo iotop

相关内容