私はホームページのパフォーマンスを微調整しています。現在、3.14.byで毎秒約200のリクエストを処理して6つのSQLクエリを処理し、3.14.by/forumでphpBBフォーラムである毎秒20リクエストを処理しています。
奇妙なことに、一部のVPSと専用のAtom 330サーバーでは、数値はほぼ同じです。
サーバーソフトウェアは次のとおりです。Apache2+ mod_php prefork 4子(ここでは別の数を試してみました)、php5、APC、nginx、memcached for PHPセッションストレージ。
MySQLは、利用可能な容量の約30%を消費するように構成されていますRAM(VPSでは150Mb、専用サーバーでは700Mb)
これはどこかにボトルネックがあり、私が上がれないように見えます、何か提案はありますか? (つまり、6つ未満のSQLを実行すると処理が速くなることを知っていますが、sqldはクエリのキャッシュにより数%を超えないため、これは制限要因のようには見えません)
PreforkされたApache2をキックしてnginx + phpだけを残す方がはるかに速いことを誰かがテストしましたか?
いくつかのベンチマーク
Small 40-byte static file: 1484 r/s via nginx+Apache2, 2452 if we talk to Apache2 directly.
Small "Hello world" php script: 458 r/s via ngin+Apache2.
pdate:キャッシュされたデータに対するMySQLのパフォーマンスがボトルネックになっているようです。 1つのSQLを含むページは354リクエスト/秒を示し、6つのSQLは180リクエスト/秒を示します。ここで何を調整できると思いますか? (MySQLでは100-200Mbをフォークできます)
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
Nice = 0
[mysqld]
default-character-set=cp1251
collation-server=cp1251_general_cs
skip-character-set-client-handshake
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
skip-external-locking
bind-address = 127.0.0.1
key_buffer = 16M
max_allowed_packet = 8M
thread_stack = 64K
thread_cache_size = 16
sort_buffer_size = 8M
read_buffer_size = 1M
myisam-recover = BACKUP
max_connections = 650
table_cache = 256
thread_concurrency = 10
query_cache_limit = 1M
query_cache_size = 16M
expire_logs_days = 10
max_binlog_size = 100M
[mysqldump]
quick
quote-names
max_allowed_packet = 8M
[mysql]
[isamchk]
key_buffer = 8M
!includedir /etc/mysql/conf.d/
もちろん、試すことができることはたくさんあります。最善の策は、インデックスを使用しないクエリ(それらのログを有効にする)や他の最適化されていないクエリのログを追跡することです。長年にわたってパフォーマンス関連のオプションの膨大なリストをまとめてきたので、参考のためにここに小さなサブセットを含めました。以下は、試すことができる一般的な注意事項です(まだ行っていない場合)。
MySQL
Apache
[〜#〜] php [〜#〜]
OS調整
ボトルネックがCPUでない場合は、IO-ネットワークまたはディスクのいずれかです。つまり、IOがどれだけ進んでいるかを確認する必要があります。そのネットワークを考えたことはありません(10 Mbpsの半二重リンクを使用している場合を除きますが、自動検出が適切に機能していない場合に備えてスイッチを確認する価値はあります)。
これにより、ディスクIOが残ります。これは、特にVPSで大きな要因になる可能性があります。 sarまたはiostatを使用してディスクを確認し、次に、ディスクが頻繁に使用されている場合に詳細を確認する方法をググる。
サーバーには問題がないように見えるので、おそらく負荷ジェネレーターに問題があります。複数のマシンで実行してみてください。
Apacheが許可する最大接続数に達しているように思えます。Apacheの設定を見てください。 I/Oやメモリのような他の制限に縛られていない場合は、サーバー制限と最大クライアント数を増やすと効果的です。 mpm_prefork_moduleまたはmpm_worker_moduleの値を確認し、必要に応じて調整してください。
ServerLimit 512 MaxClients 512
この負荷はツールまたは実際の負荷によって生成されたものですか?
Memcachedを確認してください。接続速度が高いと、アプリケーションで遅延が発生する問題が発生しました。
Load Generatorを使用している場合、小さな静的ページにアクセスすると何が得られますか?
ロード中に、ネットワークスタックでTIME_WAIT状態を確認することができます。おそらく、接続キューがいっぱいになっています。
あなたが見ることができる約100の理由と項目がありますが、これ以上の情報なしで、私はこの時点で推測を捨てています。