Amazon EC2 微實例大量 IO 請求
我試圖了解為什麼我的 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 設置可能會在主機級別完成,然後作為磁碟公開給在主機上執行的任何虛擬機。
參考