如何判断哪些进程在CentOS 5中大量写入磁盘?

我们的服务器开始变慢,所以我运行iostat

iostat -dx 5

Device: rrqm/s wrqm/sr/sw/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.00 89.60 108.40 5.60 880.00 763.20 14.41 2.61 22.87 8.70 99.20 sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 

所以我看到一个磁盘sda是完全饱和的。 我如何find哪个确切的进程造成这种情况? (或者是交换到那个磁盘?)

我也喜欢iotop

collectl可能是你以后的样子。 I / O统计过程 ,等等。 collectl --top io打印按IO使用sorting的顶级列表, collectl -sZ为进程子系统的collectl本机输出。 添加--procopts t开关也会显示线程。

正如理查德·萨尔特(Richard Salts)提到的那样,如果你有一个窗口pipe理器和Python,那么IOTop会为你提供更详细的I / O统计信息。 不pipe是哪种情况,如果你的内核不支持( 2.6.20或更高版本是安全的),那么这两个程序都不能工作。

很高兴知道你在做什么发行,但是这里是:
通过在“fdisk -l / dev / sda”的输出中检查“Linux swap / Solaris”,可以看到交换分区所在的磁盘。 这将显示你是否在该分区交换。

然后,您可以使用vmstat观察交换使用情况,看看您的服务器是否进行了大量交换。

很遗憾,在CentOS 5中,没有一个iostat和相关的软件包可以工作。但是我能够通过使用以下方法find罪魁祸首:

ps auxf | grep'B'

其中显示了I / O等待导致的所有等待在单位hibernate睡眠中的进程,因此很可能是正在执行大量I / O的进程。

这是由于这个ServerFault的答案: wa(等待I / O)从顶部的命令是很大的

另外,对于那些想知道I / O是否因为交换而慢的问题,请看看最高输出,看看(free + cached)列的总和。 或者更好地使用htop,它以一种不那么令人困惑的方式显示。

一个可能适用于你的选项是,如果磁盘只是爆发饱和,使用collectl抓取磁盘并处理统计信息。 然后查看数据以查看磁盘何时饱和,并收集“collectl -sZ -p filename”以回放您收集的过程数据,并查看在这些时间内哪些进程处于RUN状态。 可能工作,可能不会…标记

尝试命令btrace (或blktrace

iotop在CentOS 5.7(2.6.18-274)上正常工作。 如果您正在运行较旧的内核, dstat改为使用dstat

安装rpmforge回购:

 rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm 

然后从rpmforge-extras回购安装dstat以获得更新的版本(0.7.2):

 yum --enablerepo=rpmforge-extras install dstat 

要查看使用顶级I / O进程,您可以使用:

 dstat -d --top-io --top-bio