如何检查一个具有沉重的IO使用情况的进程是否正常运行

我现在正在pipe理计算机集群进行科学计算。 群集中的一些进程需要大量的io使用。 现在我find了这样一个过程:

  1. 其状态在DOWN和RUN之间快速变化,其CPU使用率在1%和100%之间迅速变化。
  2. top产出中,爱荷华州为0%,闲置约为90%

我认为这个过程可能有一些问题,但是过程所有者声称它正在正确运行,因为它仍然在向磁盘写入数据。

更多信息:

  1. 该过程正在将数据写入安装在/ home上的远程磁盘
  2. 该过程基于稍微修改的代码。 原来的软件能够multithreading,但需要大量的内存。 修改的代码使用更多的磁盘和更less的内存,但修改代码的人不知道有关multithreading的任何内容。
  3. 小testing显示代码可以给出正确的结果

问题:

  1. 为什么这个过程没有使用cpu的100%,如果这是因为等待io为什么iowait是0%?
  2. 如何判断这个过程是否有问题,是什么types的问题呢?

  The process is writing data to a remote disk mounted on /home 

有可能你的答案。 过程状态D不是DOWN ,它是不可中断的睡眠 ,通常意味着一些I / O完成。 由于您拥有networking共享,因此根据条件的不同,它可能不会在I / O等待您时显示,并且在系统等待时可能不会消耗太多CPU。

但是,对于您和您的应用程序来说,如果由于应用程序的写入方式,networking共享速度缓慢,由于networking或文件服务器性能的原因,networking共享速度会很慢。

如何找出你的应用程序或networking共享是什么原因? 简单 – 使用其他工具和其他使用模式testingnetworking共享性能。 将大量数据从/ home复制到其他位置,然后运行一些基准testing(如iozone ,使用iperftesting原始networking性能iozone

如果那些给你合理的结果,然后去看看你的应用程序正在做什么。

虽然很多时候这个原因在于其他地方, 不知道你的系统,我猜你需要调整NFS挂载设置。 但是,现在它只是一个猜测,因为我不知道你是否有使用NFS。

如果CPU不忙,那么你的过程大概是在等待外部的东西。 我想通过查看哪些系统调用时间最长可以了解一下这个问题。

下降了,尝试使用一个分析器来找出代码在做什么。

你的代码是否使用mmap'd IO? 我在想,可能不会像iowait时间那样报告你的进程,但是当把页面刷新到磁盘时,会变成一个使用大量磁盘的系统进程。