Linux
從 top 和 iotop 找出高負載原因
如果我想防止這種高負載,我應該怎麼做。
當負載高於 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 $$
- 優化您的數據庫架構和查詢。
- 向機器添加更多 RAM。
- 將 mySQL 伺服器拆分到另一台專用機器上。
- 將交換空間遷移到 SSD 等高速設備。$$ this kills the SSD $$