mysql和redis服務在高流量時不可用

mysql和redis服務在高流量時不可用

我有一個網頁伺服器,運行一些服務,例如、Apache和一些應用程式。在高流量時,我的伺服器似乎不支援重負載。當它發生時,通常當我嘗試訪問頁面時,我會收到以下訊息:MysqlRedisNodeJSmysql

Warning: mysqli_connect(): (HY000/2003): Can't connect to MySQL server on '127.0.0.1' (99)

此訊息以間歇形式出現,在大多數情況下,如果我重新整理頁面,此訊息不會再次出現。另外,我不認為這對我的 mysql 配置有問題,因為我一直從 mysqltuner.pl 得到以下結果:

[OK] Highest usage of available connections: 74% (336/450)

同樣,Redis 伺服器顯示連接伺服器時出現問題的訊息:

Could not connect to Redis at 127.0.0.1:6379

在那段時間我正在監視我的伺服器,我發現大約有 2G 的 RAM(沒有使用任何位元組的 SWAP 來處理 Mysql、Redis 或 NodeJS。在花了一些時間進行研究之後(沒有一個北可遵循) ,我讀了一些關於Epheearal Ports 的內容,所以我嘗試調整參數 net.ipv4.ip_local_port_range來增加我的連接埠範圍(從 調整32768 6100010000 65000),結果很糟糕! 我的網路伺服器將其回應時間從平均180~200 毫秒提高到大約6000 毫秒,並且負載也增加了。

我的 NodeJS 應用程式(所有這些)使用 Socket.io 並從我的伺服器上的不同連接埠進行回應。我正在嘗試找出問題的解決方案。這是連接埠可用性問題嗎?為什麼 net.ipv4.ip_local_port_range 參數調整會減慢伺服器速度?

伺服器配置:

  • Ubuntu 伺服器 x64
  • 英特爾至強 E5520 四核
  • 8GB 記憶體
  • 2 個 1000 GB SATA 2.5 吋 5.400 rpm (RAID 1)
  • 2x 60 GB SSD 2,5" (RAID1)(資料庫內容全部放在這裡)

答案1

如果您的問題是如何在高峰時段最好地監控伺服器(這在高峰時段很難做到),我會尋找一些輕量級工具來幫助監控。 頂部、ps 和 df不要總是剪掉它。

我用過收集的捕獲我的分割區、記憶體、CPU、apache、mysql 和其他東西上的資料點。它捕獲數據並保存這些數據點,然後您需要一些其他工具來檢索數據 - 例如一些網路前端來顯示數據

然後進行故障排除,也許可以使用一個工具來存取您的伺服器並創建高使用率場景。 Apache Benchmark (ab) 或 Siege 是實現此目的的好工具。

相關內容