
我們在專用伺服器上託管我們的網路服務。在高負載期間,伺服器經常會傳回逾時錯誤而不是頁面。我們每天約有 17 萬個請求。然而,伺服器有大量空閒內存,CPU 目前沒有載入。
我不明白為什麼伺服器運作不佳。
我已經使用 tcpdump 實用程式分析了問題案例。這些是 tcpdump 追蹤的好會話和壞會話。兩個實驗中的要求是相同的。好 - 伺服器回傳回應。不好 - 無回應,超時錯誤。
從這些數據你明白為什麼會出現問題嗎?我怎樣才能進一步接近錯誤的根源?
我已將真實 IP 位址替換為 123.45.67.890
---- Bad ----
12:23:36.366292 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:23:39.362394 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:23:45.365567 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,nop,sackOK>
--------
---- Good ----
12:27:07.632229 IP 123.45.67.890.63914 > myserver.superbservers.com.www: S 3581365570:3581365570(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:27:10.620946 IP 123.45.67.890.63914 > myserver.superbservers.com.www: S 3581365570:3581365570(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:27:10.620969 IP myserver.superbservers.com.www > 123.45.67.890.63914: S 2654770980:2654770980(0) ack 3581365571 win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 6>
12:27:10.838747 IP 123.45.67.890.63914 > myserver.superbservers.com.www: . ack 1 win 4380
12:27:10.957143 IP 123.45.67.890.63914 > myserver.superbservers.com.www: P 1:213(212) ack 1 win 4380
12:27:10.957152 IP myserver.superbservers.com.www > 123.45.67.890.63914: . ack 213 win 108
12:27:10.965543 IP myserver.superbservers.com.www > 123.45.67.890.63914: P 1:630(629) ack 213 win 108
12:27:10.965621 IP myserver.superbservers.com.www > 123.45.67.890.63914: F 630:630(0) ack 213 win 108
12:27:11.183540 IP 123.45.67.890.63914 > myserver.superbservers.com.www: . ack 631 win 4222
12:27:11.185657 IP 123.45.67.890.63914 > myserver.superbservers.com.www: F 213:213(0) ack 631 win 4222
12:27:11.185663 IP myserver.superbservers.com.www > 123.45.67.890.63914: . ack 214 win 108
--------
有關服務的詳細資訊。
這是天氣預報服務。它是用 Perl 編寫的,由 MySQL 支援。該腳本使用了多個模組(來自 CPAN 和我們自己的)。
程式碼比較簡單。該腳本從另一台伺服器下載天氣,轉換資料格式並傳回 XML 回應。天氣緩存在 MyISAM DB 中。還有一個世界位置資料庫(INNODB),也可以透過腳本請求。
這些是在高負載期間採取的指標。
平均流量:2.5MBit/秒
平均資料包數:3300包/秒
主辦單位:SuperbHosting
作業系統:Ubuntu
伺服器參數:E6300 CONROE 1.86GHZ 2 X 1MB CACHE 1066 1GB DDR2 667MHZ
這是我們使用的 apache 設定檔的鏈接 http://repkin5.snow.prohosting.com/apache.txt
這是高負載時的伺服器狀態報告 http://repkin5.snow.prohosting.com/server-status.htm 120 個子伺服器中只有 10 個正在運行,因此有足夠的空間用於新請求。
高負載期間的頂級程式快照。
------
top - 13:21:29 up 15 days, 18:36, 1 user, load average: 0.18, 0.19, 0.21
Tasks: 137 total, 1 running, 136 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.8%us, 1.2%sy, 0.0%ni, 92.8%id, 0.7%wa, 0.0%hi, 3.5%si, 0.0%st
Mem: 1033904k total, 590620k used, 443284k free, 6892k buffers
Swap: 3028212k total, 82556k used, 2945656k free, 64156k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4252 mysql 20 0 162m 48m 3352 S 1 4.8 279:01.27 mysqld
14503 www-data 20 0 43280 14m 3824 S 1 1.4 0:00.16 apache2
14577 www-data 20 0 43012 13m 3500 S 1 1.4 0:00.06 apache2
14401 www-data 20 0 45076 17m 4340 S 0 1.8 0:00.46 apache2
14414 www-data 20 0 45516 18m 4344 S 0 1.8 0:00.47 apache2
14420 www-data 20 0 45624 18m 4372 S 0 1.8 0:00.61 apache2
14421 www-data 20 0 45488 18m 4352 S 0 1.8 0:00.42 apache2
14496 www-data 20 0 44820 17m 4328 S 0 1.7 0:00.18 apache2
14510 www-data 20 0 45216 17m 4300 S 0 1.8 0:00.62 apache2
1 root 20 0 2844 456 404 S 0 0.0 0:05.24 init
2 root 15 -5 0 0 0 S 0 0.0 0:00.00 kthreadd
3 root RT -5 0 0 0 S 0 0.0 0:00.24 migration/0
4 root 15 -5 0 0 0 S 0 0.0 32:28.85 ksoftirqd/0
5 root RT -5 0 0 0 S 0 0.0 0:00.77 watchdog/0
6 root RT -5 0 0 0 S 0 0.0 0:00.15 migration/1
7 root 15 -5 0 0 0 S 0 0.0 0:03.07 ksoftirqd/1
8 root RT -5 0 0 0 S 0 0.0 0:00.63 watchdog/1
-----
答案1
由於 CPU 時間較長,您的 MySQL 伺服器有時似乎正在努力工作(但不是在您的螢幕截圖中)。透過發出SHOW PROCCESSLIST;
MySQL 提示符號來檢查執行了哪些查詢。
也可以嘗試激活伺服器狀態Apache 中的頁面。有了ExtendedStatus On
它,您將獲得有關當時正在加載哪些頁面的信息,並且您可以看到 Apache 中還剩下多少個開放「槽」。
Apache mpm-prefork 中的預設設定是最多約 250 個進程,這表示您可以同時處理 250 個檔案下載。如果您有很多訪客,特別是如果您已KeepAlive
激活,這可能會造成很多麻煩。您將在伺服器狀態頁面中看到這是否是您的問題。
答案2
答案3
上面的截圖顯示你的 MySQL 伺服器根本沒有正常運作! (對不起,艾米爾 - 但你需要更仔細地閱讀或了解更多有關 top 的資訊)。
並且只列出了 8 個 apache 進程。
平均負載為 0.2,CPU 空閒率為 93% - 這台機器什麼都不做。
發布的連結中缺少一半的配置,但它看起來像是預先分叉的。
我的第一個猜測是 MaxServers 設定為一些古怪的值,例如 10(取決於您的應用程式的外觀,它應該在 100-200 範圍內)。
您可能還想檢查是否有愚蠢的東西,例如對傳入連接的反向查找或已安裝的 mod_ident (好吧,這些不是總是愚蠢 - 但應極其謹慎使用)。
當然,安裝 mod_status 並啟用擴充狀態可以更好地了解這裡發生的情況。
C。
答案4
您可以嘗試對伺服器進行泛洪 ping (ping -f) 嗎?我猜想網路連線存在一些硬體問題,因為您的伺服器似乎沒有足夠快地回應 SYN 封包。