2017-09-29 7 views
0

私は多くのユーザー(〜50k)とオンラインでたくさんのREST Webserviceを持っています。最近、問題に直面してそれを修正しました。 Webサービスは、 !MySQLとPHPは問題ありませんが、Webサービスは遅いです

郵便配達員と確認すると1〜4秒かかる! (すべての要求は、同様の100ms以内に行われた) 私はスローログ消化してMySQLをチェックし、それが正常に働いていた私はまたしてPHPを確認:

$time = microtime(TRUE); 
$mem = memory_get_usage(); 
//code here 
print_r(array(
    'memory' => (memory_get_usage() - $mem)/(1024 * 1024), 
    'seconds' => microtime(TRUE) - $time 
)); 

、それは、本当に速かった私の目のPHPでそうDBは正常ですが、Webサービス全体が本当に遅くなっています!

6ギガバイトのRAM(私はそれを設定してMySQLが半分を取って〜、他の半分はバフ/キャッチです)

6コア(MySQLユーザー: は

NOTESを特定し、問題を解決する方法がわかりません〜100から150パーセント= 1-1.5コアに)HDDが満杯でない

:)

CentOSの7 - nginxの - PLESK - PHP 7

+0

1つのクエリは高速ですが、Webサービスが要求ごとに多数のクエリを実行することがあります。また、到着したリクエストが多すぎると、サーバーはそれらをキューに入れるだけで、同時に多くのリクエストを処理します。 – GolezTrol

+0

サーバーの応答時間も確認できます。 –

+0

@GolezTrol DB接続がなくても簡単なコードでチェックしましたが、まだ遅いです。キューイングについては可能だと思いますが、チェックして確認する方法がわからない、攻撃の可能性もありますか?私はちょうどこれ、チェック、確認し、修正する方法については未経験であるかわからない? –

答えて

0

の持続的な負荷毎秒500要求は軽負荷ではありません。これらのリクエストのうちの1つ、またはごく一部がタイムアウトしていない場合は、Webサーバーの設定を適切に調整していると思われます。どうして? LinuxベースのWebサーバーがlisten(2)要求を発行すると、要求を受信するために2つのキューが設定されます。これらの要求は、サーバー内の一部の作業者が応答するためにaccept(2)を使用するまで待機します。

リッスンキューのうちの1つでおそらく応答するのに1.4秒が費やされます。

負荷の大きいnginixをチューニングできます。受け入れる接続数などを調整することで、パフォーマンスを向上させることができます。

Webサービスが実行するコードを調べて、不要なものが含まれているかどうかを調べる必要があります。ファイルシステムからファイルを読み込みますか?あなたの目的はこれです:あなたのPHPコードがリクエストの処理を開始したら、できるだけ共有リソース(MySQLのクエリやファイルの読み込みなど)を少なくして終了する必要があります。処理要求を処理するPHPインスタンスがお互いに多く待たなければならない場合、システムは遅くなります。

php-mysql接続スキームは接続プールを使用していますか?必ず使用してください。 mysqli_PDOはどちらも接続プールを提供しますが、(誤って)接続プーリングを無効にすることもできます。

多くの人がこのような状況になると、より多くのWebサーバーマシンを追加することによって、サーバー構成をにスケールアウトします()。ラウンドロビンDNSを使用するか、nginxの負荷分散機能について学ぶことができます。

関連する問題