私は最近高負荷に苦しんでいるウェブアプリケーションを持っています。このアプリケーションは、 8コアのIntelCPUと4GBのRAMを搭載した単一サーバーで実行されます。ソフトウェア:Debianで実行されているDrupal 5(Apache 2、PHP5、MySQL5)。
500人の認証済みユーザーと200人の匿名ユーザー(同時)に到達した後、アプリケーションはパフォーマンスを大幅に低下させ、完全に失敗します。最大の負荷は、アクティビティを実行する認証済みユーザーから発生し、データベースで挿入/更新/削除を引き起こします。mysqlがボトルネックだと思います。そのような数のユーザーの速度を落とすのは正常ですか?
編集:私はある種のプロファイリングを行ったことに言及するのを忘れました。コマンドtop, htop
を実行すると、すべてのメモリがMySQLによって使用されていることがわかりました。しばらくすると、MySQLのパフォーマンスが非常に遅くなり、サイトがダウンします。負荷を減らすために、Apacheを再起動/停止する必要があります。管理者は、その時点で約200のアクティブなmysql接続があったと言いました。
最悪のポイントは、これをできるだけ早く解決する必要があることです。詳細なプロファイリング分析/コードリファクタリングを実行できないため、2つの方法を検討しています。
- 私のテーブルはMyIsamですが、非常に遅いテーブルレベルのロックを使用していると聞きましたが、そうですか?心配せずにInnodbに変更できますか?
- MySQLを使用して、RAMを大量に搭載した専用マシンに移動するとどうなりますか?