Io

Amazon EC2 微實例大量 IO 請求

  • March 9, 2019

我試圖了解為什麼我的 Amazon EC2 微型實例上有大量 EBS IO 請求。我大約在 6 天前啟動了該實例,到目前為止已經累積了超過 400 萬個 IO 請求。該實例預裝了 LAMP 堆棧(Virtualmin、PHP、Apache、MySQL)。我安裝了一個 Wordpress 站點,只在瀏覽器中載入了幾次以進行一些測試。

如何確定可能使用iotop或其他 Linux 實用程序生成所有這些 IO 請求的原因是什麼?

我還將以下 3 個工具添加到組合中。假設您已安裝它們,如果沒有,您應該能夠通過提供給您的 ec2 實例的任何儲存庫來安裝它們。

高負載可能是由磁碟或網路 I/O 引起的,因此我將重點關注這兩個方面。

網豬

網路將是我的第一個懷疑,為了進一步診斷,我會用nethogs它來查看導致它的程序。

例子

確定您的網路介面,以便您知道nethogs要觀看哪一個。

$ ip link show up | awk '/UP/ {print $2}'
lo:
em1:
wlp3s0:
virbr0:

就我而言,我將觀看我的無線設備,wlp3s0.

$ sudo nethogs wlp3s0
NetHogs version 0.8.0

 PID USER     PROGRAM                      DEV        SENT      RECEIVED       
2151  saml     /opt/google/chrome/chrome    wlp3s0     2.117       2.715 KB/sec
3569  saml     ..4/thunderbird/thunderbird  wlp3s0     0.441       1.496 KB/sec
3144  saml     ..aml/.dropbox-dist/dropbox  wlp3s0     0.081       0.061 KB/sec
3383  saml     pidgin                       wlp3s0     0.026       0.056 KB/sec
4025  saml     ssh                          wlp3s0     0.000       0.000 KB/sec
?     root     unknown TCP                             0.000       0.000 KB/sec

 TOTAL                                                2.665       4.327 KB/sec 

查看輸出,我們可以看到它chrome佔用了我的大部分頻寬。

如果頂

您可以查看流量​​是否來自使用iftop.

               195kb           391kb           586kb           781kb      977kb
└───────────────┴───────────────┴───────────────┴───────────────┴───────────────
greeneggs.bubba.net        => stackoverflow.com          4.68kb  10.2kb  8.24kb
                          <=                            33.5kb  14.7kb  21.4kb
greeneggs.bubba.net        => ord08s12-in-f8.1e100.net      0b   3.90kb  3.99kb
                          <=                               0b   3.61kb  3.72kb
greeneggs.bubba.net        => ord08s10-in-f16.1e100.net  5.05kb  4.10kb  5.83kb
                          <=                            2.43kb  2.39kb  2.79kb
greeneggs.bubba.net        => stackoverflow.com          1.32kb  3.34kb  4.73kb
                          <=                            1.30kb  1.60kb  2.30kb
greeneggs.bubba.net        => cpe-67-253-170-83.rochest     0b   2.19kb   760b
                          <=                               0b   2.60kb   862b
greeneggs.bubba.net        => pop1.biz.mail.vip.ne1.yah  5.87kb  1.17kb   301b
                          <=                            17.4kb  3.47kb   889b
greeneggs.bubba.net        => 190.93.247.58               480b   2.04kb  2.66kb
                          <=                               0b   1.34kb  1.80kb
greeneggs.bubba.net        => ig-in-f95.1e100.net         448b   1.02kb  1.27kb
                          <=                             240b    437b    534b
greeneggs.bubba.net        => ord08s12-in-f2.1e100.net    896b    346b    218b
                          <=                             480b    221b    124b
────────────────────────────────────────────────────────────────────────────────
TX:             cum:    652kB   peak:   85.2kb  rates:   20.6kb  29.3kb  30.1kb
RX:                     883kB            161kb           57.9kb  31.4kb  40.6kb
TOTAL:                 1.50MB            241kb           78.5kb  60.7kb  70.7kb

脂肪酶

您可以使用該工具fatrace查看導致訪問 HDD 的程序。

$ sudo fatrace
pickup(4910): O /var/spool/postfix/maildrop
pickup(4910): C /var/spool/postfix/maildrop
sshd(4927): CO /etc/group
sshd(4927): CO /etc/passwd
sshd(4927): RCO /var/log/lastlog
sshd(4927): CWO /var/log/wtmp
sshd(4927): CWO /var/log/lastlog
sshd(6808): RO /bin/dash
sshd(6808): RO /lib/x86_64-linux-gnu/ld-2.15.so
sh(6808): R /lib/x86_64-linux-gnu/ld-2.15.so
sh(6808): O /etc/ld.so.cache
sh(6808): O /lib/x86_64-linux-gnu/libc-2.15.so

還有什麼?

我會看一下我不久前回答的這個 Unix & Linux Q&A 以獲得更多工具來嘗試。它的標題是:確定負責高 I/O 的特定文件

跟進評論中的問題

Q1:nethogs 顯示的頻寬是否計入 AWS 中的 IO 請求?我認為這將屬於“數據傳輸”,這是一個單獨的類別。在 iotop 中,最大百分比的使用是 root 和一個名為“kswapd0”的命令。mysqld 的磁碟寫入使用量最大,httpd 的磁碟讀取量最大

我不知道亞馬遜實際上是如何跟踪的。這些值是從虛擬機主機的角度來看的,因此它們甚至可能與亞馬遜從他們的角度跟踪您的虛擬機使用情況遠端相關。

順便說一句,這kswapd0很可能是您的高 IO 請求的來源。這很糟糕,因為您的 VM 很可能沒有足夠的 RAM 來滿足您在 VM 中執行的應用程序的大小/使用情況。因此,為了嘗試滿足您的系統的需求,您需要使用交換。

free您可以通過命令進一步確認這一點。

例子

$ free -ht
            total       used       free     shared    buffers     cached
Mem:          7.6G       5.5G       2.1G         0B       446M       2.5G
-/+ buffers/cache:       2.6G       5.0G
Swap:         7.6G        40K       7.6G
Total:         15G       5.5G       9.7G

這顯示了您的系統正在使用多少 RAM 和交換。

Q2:哦,還有一個後續問題。iotop 中磁碟讀/寫的 MB 或 KB 與 IO 請求數有何關係?例如,如果 mysqld 將 20 M 寫入磁碟,有沒有簡單的方法可以知道生成了多少 IO 請求?

關於 IO 讀/寫次數和讀/寫到磁碟的數據總量,我並沒有真正意識到任何相關性。

鑑於您使用的是 AWS,您的實際磁碟讀/寫可能甚至不是本地磁碟,它們可能是通過網路儲存(例如,SoE - aka. SCSI over Ethernet)。

您的虛擬機將完全忽略這一點,因為 SoE 設置可能會在主機級別完成,然後作為磁碟公開給在主機上執行的任何虛擬機。

參考

引用自:https://unix.stackexchange.com/questions/104461