トラフィックが多い時間帯には、mysql および redis サービスが利用できなくなります。

トラフィックが多い時間帯には、mysql および redis サービスが利用できなくなります。

Apache私は、、、などのサービスMysqlRedisアプリを実行するウェブサーバーを持っていますNodeJS。トラフィックが多いときには、サーバーが高負荷をサポートできないようです。この問題が発生すると、ページにアクセスしようとすると、 から次のメッセージを受け取ることがよくありますmysql

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

このメッセージは断続的に表示されますが、ほとんどの場合、ページを更新するとこのメッセージは再び表示されません。また、mysqltuner.pl から常に次の結果が得られるため、これは mysql の構成の問題ではないと思います。

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

同様に、Redis サーバーはサーバーへの接続に問題があることを示すメッセージを表示します。

Could not connect to Redis at 127.0.0.1:6379

その間サーバーを監視していたところ、Mysql、Redis、NodeJS のプロセスに SWAP バイトを使用しないで約 2G の RAM が必要であることがわかりました。しばらく調査した後 (追跡すべき北がないまま)、Ephemearal Ports について読みました。そこで、パラメーターを調整して net.ipv4.ip_local_port_rangeポート範囲を拡大してみました (から に調整32768 61000) 10000 65000。結果はひどいものでした。Web サーバーの応答時間が平均 180 ~ 200 ミリ秒から約 6000 ミリ秒に増加し、サーバーの負荷平均も大幅に増加しました (ただし、エラー メッセージは消えます)。

私の NodeJS アプリ (すべて) は Socket.io を使用しており、サーバー上の別のポートから応答します。この問題の解決策を見つけようとしています。これはポートの可用性の問題ですか? net.ipv4.ip_local_port_range パラメータの調整によってサーバーの速度が低下するのはなぜですか?

サーバー構成:

  • Ubuntu サーバー x64
  • インテル Xeon E5520 クアッドコア
  • 8GBのRAM
  • 2x 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 は、この目的に適したツールです。

関連情報