Linux

從 top 和 iotop 找出高負載原因

  • March 14, 2016

如果我想防止這種高負載,我應該怎麼做。

當負載高於 8 時,我的網站變慢。

請參閱 iotop 結果。

頂部 - 20:23:10 上升 127 天,3:22,1 個使用者,平均負載:9.92、9.87、9.81
任務:共 1031 個,執行 3 個,睡眠 1027 個,停止 0 個,殭屍 1 個
Cpu (s): 14.7% us, 0.7% sy, 0.1% ni, 79.6% id, 4.7% wa, 0.0% hi, 0.2% si, 0.0% st
記憶體:總共 16413676k,已使用 16312548k,空閒 101128k,緩衝區 110836k
交換:總計 10190840k,已使用 3182468k,免費 7008372k,記憶體 2033604k

PID 使用者 PR NI VIRT RES SHR S %CPU %MEM TIME+ 命令
2776 mysql 15 0 14.6g 10g 5220 S 405.7 67.4 21710:40 mysqld
6201 阿帕奇 15 0 369m 16m 5356 S 3.7 0.1 0:00.40 httpd
8447 阿帕奇 15 0 368m 15m 5364 S 3.7 0.1 0:00.27 httpd
10807 阿帕奇 16 0 368m 14m 4640 S 3.7 0.1 0:00.04 httpd
11074 根 15 0 11548 1668 676 R 3.7 0.0 0:00.04 頂部
2088 阿帕奇 15 0 368m 15m 5972 S 1.8 0.1 0:00.93 httpd
2737 根 15 0 3824 392 336 S 1.8 0.0 433:37.40 klogd
6879 阿帕奇 15 0 367m 15m 5652 S 1.8 0.1 0:00.39 httpd
8457 阿帕奇 15 0 367m 15m 5744 S 1.8 0.1 0:00.54 httpd
8866 阿帕奇 15 0 369m 15m 4832 S 1.8 0.1 0:00.18 httpd
9147 阿帕奇 15 0 368m 14m 4960 S 1.8 0.1 0:00.15 httpd
9884 阿帕奇 16 0 368m 16m 6508 S 1.8 0.1 0:03.97 httpd
10583 阿帕奇 16 0 368m 15m 5148 S 1.8 0.1 0:00.10 httpd
10731 阿帕奇 15 0 367m 13m 3484 S 1.8 0.1 0:00.16 httpd
10782 阿帕奇 16 0 367m 12m 3544 S 1.8 0.1 0:00.04 httpd
14618 阿帕奇 15 0 367m 16m 6736 S 1.8 0.1 0:03.24 httpd
18697 阿帕奇 15 0 368m 16m 6744 S 1.8 0.1 0:02.47 httpd
vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu ------
rb swpd 免費 buff 記憶體 si so bi bo in cs us sy id wa st
2 1 3182636 468436 111776 2012016 0 0 94 274 0 0 15 1 80 5 0
iostat
Linux 2.6.18-274.12.1.el5 () 12/31/2012

平均 CPU:%user %nice %system %iowait %steal %idle
14.66 0.12 0.93 4.73 0.00 79.56

設備:tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 122.97 1504.32 4383.82 16525670026 48158254126
sda1 0.00 0.04 0.00 435456 230
sda2 122.97 1504.28 4383.82 16525231218 48158253896
DM-0 570.94 1502.31 4381.94 16503546226 48137527328
dm-1 0.48 1.97 1.89 21684608 20727136
我頂
總磁碟讀取:126.48 K/s | 總磁碟寫入:6.79 M/s(這不是太高了嗎?)
TID PRIO 使用者磁碟讀磁碟寫 SWAPIN IO> 命令
15610 be/4 mysql 0.00 B/s 0.00 B/s 99.99 % 25.76 % mysqld --basedi~mysql/mysql.sock
15622 be/4 mysql 0.00 B/s 0.00 B/s -7.28 % 24.92 % mysqld --basedi~mysql/mysql.sock
3659 be/4 mysql 7.44 K/s 5.88 M/s 0.00 % 13.71 % mysqld --basedi~mysql/mysql.sock
2822 be/4 mysql 0.00 B/s 0.00 B/s 2.88 % 10.22 % mysqld --basedi~mysql/mysql.sock
2819 be/4 mysql 0.00 B/s 0.00 B/s 0.00 % 9.71 % mysqld --basedi~mysql/mysql.sock
15635 be/4 mysql 0.00 B/s 0.00 B/s -3.72 % 8.09 % mysqld --basedi~mysql/mysql.sock
15629 be/4 mysql 0.00 B/s 0.00 B/s -2.42 % 5.58 % mysqld --basedi~mysql/mysql.sock
801 be/3 根 0.00 B/s 208.31 K/s 0.00 % 3.97 % [kjournald]
2842 be/4 根 0.00 B/s 0.00 B/s 8.09 % 3.81 % irqbalance
2820 be/4 mysql 0.00 B/s 0.00 B/s 0.00 % 2.88 % mysqld --basedi~mysql/mysql.sock
7001 be/4 Apache 0.00 B/s 0.00 B/s 0.00 % 2.70 % httpd
15636 be/4 mysql 0.00 B/s 0.00 B/s 10.32 % 2.51 % mysqld --basedi~mysql/mysql.sock
8034 be/4 Apache 0.00 B/s 0.00 B/s 0.00 % 2.42 % httpd
2140 be/4 阿帕奇 0.00 B/s 0.00 B/s 0.00 % 2.32 % httpd

您的特定問題肯定與 I/O 相關,因為 mySQL 將您推到了交換空間的深度。理想情況下,您應該在絕大多數時間使用***零交換,因為從作業系統開始將記憶體交換到磁碟的那一刻,您的性能將隨著程序等待 I/O 而急劇下降。*可以將其想像Performance = 1 / N ^ swap為作業系統使用更多交換空間時,性能通常會呈指數級下降。您的交換空間似乎有 3 GB深,這對我來說簡直是可怕的。

如果在您調整了您提到的 mySQL 設置之後,您的平均交換空間仍然超過幾兆字節,您應該考慮:

$$ best to worst idea, 2&3 are roughly tied $$

  1. 優化您的數據庫架構和查詢。
  2. 向機器添加更多 RAM。
  3. 將 mySQL 伺服器拆分到另一台專用機器上。
  4. 將交換空間遷移到 SSD 等高速設備。$$ this kills the SSD $$

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