Io

如何檢查具有大量 io 使用的程序是否正常執行

  • May 5, 2015

我現在正在管理一個用於科學計算的電腦集群。集群中的一些程序需要大量的 io 使用。現在我找到了這樣一個過程:

  1. 它的狀態在 DOWN 和 RUN 之間快速變化,其 cpu 使用率在 1% 和 100% 之間快速變化。
  2. top輸出中,iowait 為 0%,idle 約為 90%

我認為這個程序可能有一些問題,但是程序所有者聲稱它正在正常執行,因為它仍在將數據寫入磁碟。

更多資訊:

  1. 該程序正在將數據寫入安裝在 /home 上的遠端磁碟
  2. 該過程基於略微修改的程式碼。原始軟體能夠進行多執行緒處理,但需要大量記憶體。修改後的程式碼使用更多的磁碟和更少的記憶體,但修改程式碼的人對多執行緒一無所知。
  3. 小測試表明程式碼可以給出正確的結果

問題:

  1. 為什麼程序沒有使用 100% 的 cpu,如果那是因為等待 io,為什麼 iowait 是 0%?
  2. 如何判斷流程是否有問題,是什麼類型的問題?
The process is writing data to a remote disk mounted on /home

應該是你的答案。程序狀態D不是DOWN,它是不間斷的睡眠,通常意味著要完成一些 I/O。由於您有一個網路共享,根據條件,它可能不會顯示為 I/O 等待您,並且可能不會在您的系統等待時消耗太多 CPU。

但是,對於您和您的應用程序來說,如果由於應用程序的寫入方式、網路或文件伺服器性能而導致網路共享速度很慢,那麼事情就會非常緩慢。

如何找出是您的應用程序或網路共享的原因?簡單——使用其他工具和其他使用模式測試網路共享性能。將大量數據從 /home 來回複製到其他位置並返回,執行一些基準測試,例如iozone測試原始網路性能iperf,諸如此類。

如果這些給你合理的結果,那麼去看看你的應用程序在做什麼。

很多時候,原因在於其他地方。在不了解您的系統的情況下,我猜您需要調整 NFS 掛載設置。但是,現在它仍然只是一個猜測,因為我不知道你是否使用了 NFS。

引用自:https://serverfault.com/questions/688624