web-dev-qa-db-ja.com

共有ホスティングで個々のウェブサイトのリソース使用量を追跡する

ISPconfigを備えたCentos6 Webサーバー(Apache-itk、PHP、MySQL)があります。このウェブサーバーには約100のウェブサイトがあり、それらはすべて私のものです。各サイトが消費するリソース(トラフィック、CPU、RAM)の量を追跡でき、場合によってはリソース内の一部のサイトを制限したり、他のサイトを優先したりできる必要があります。仮想化を使用せずにそれを行うための最良の方法は何ですか?共有ウェブホストはどのようにリソースを管理しますか?

編集:

トラフィック:ISPconfigはトラフィックの使用状況を表示します(サイト-> Webトラフィック)。私にはそれで充分です。

ApacheによるCPU&RAM:各Apache仮想ホストは異なるユーザー(MPM-itk)で実行されるため、各ユーザーが時間の経過とともにリソースをどれだけ消費するかを知る必要があります。 (私は上で試しましたが、まだそれを使用する方法を取得していません)

mysqlによるCPU&RAM:これは最も難しい部分です!すべてのmysqlインスタンスはmysqlユーザーの下で実行されます。各mysqlユーザーによるmysqlリソースの使用状況を追跡するにはどうすればよいですか?

CloudLinuxとBetterLinuxは非常に興味深いようですが、それに代わる無料の方法はありますか?

2
Dmitri

CPUとメモリのアカウンティング

特に cgroupscpuacctmemory コントローラーを利用します。それらは、リソース使用量に関する詳細な統計を提供します。ただし、プロセスが関連するコントロールグループにバインドされていることを確認して、セットアップを調整する必要がある場合があります(サイトは異なるシステムアカウントで実行されているため、実装は難しくありません)。

Cgroupsを使用しない場合は、 psacct パッケージをインストールし、sa -mコマンドを使用することもできます(事前にacctonでアカウンティングを有効にします)。ただし、この方法では、完了したプロセスのみが考慮されます。明るい面としては、パッケージのセットアップとアカウンティングの有効化を除いて、システムを変更する必要はありません。

MySQLアカウンティング

これは難しいものです。すべてのサイトは1つのMySQLインスタンスから提供されるため(私が正しく理解している場合)、上記のようにプロセスごと/ユーザーごとの統計に依存することはできません。それにもかかわらず、いくつかの解決策が存在します。 MariaDBPercona Server の両方を、従来のMySQLのドロップイン代替として使用できます。どちらの製品にもユーザー統計が含まれています: MariaDB内 および Perconaサーバー内 。この統計は、データベースがさまざまなユーザーによってどのように利用されているかについての簡単な概要を提供します。

また、従来のアプローチを無視してはなりません。

  • データベースのパフォーマンスが混雑していることに気付いたときのSQLプロセスのサンプリング(show full processlist)。
  • 遅いクエリを無視しないでください: 遅いクエリログ を有効にし、mysqldumpslowスクリプト(MySQLディストリビューションに含まれています)を定期的に使用します。
1
artyom