web-dev-qa-db-ja.com

ボトルネックを見つけるためのテクニックは何ですか?

DigitalOceanにwordpressを設定して、数か月間最小のドロップレットを作成しました。

最近、私のブログがバイラルになり(1000以上のFacebook共有)、サーバーが応答するのに50秒以上かかります(Google Analyticsによると、今日のほぼ1日、私のブログには約40人が同時に参加しています)。

Digital Oceanサポートチームに聞いたところ、512 mb RAMが小さすぎると言われました。

しかし、私は「free -m」を使用して、

             total       used       free     shared    buffers     cached
Mem:           490        465         24         64         94        136
-/+ buffers/cache:        234        256
Swap:          999          0        999

だから私は256MBのメモリが利用可能だと思いますか?

私は彼らに言った、そして彼らは「それはおそらくそれがメモリを節約するためにいくつかのサービスを殺した後にのみ100MBのメモリ空きを示すかもしれないが」と言います。

しかし、私は「トップ」を使用して見ます

%Cpu(s):  0.3 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

CPUが92〜100%idのままであることがわかったので、CPUがビジーではないと思います。

では、どうすればボトルネックを見つけることができますか?

アップグレードに追加料金を支払う前に、ボトルネックが何であるかを知りたいです。

3
尤川豪

パフォーマンスの問題を調べるときは、'big 4':を覚えておくことが重要です。
-CPU
-メモリ
-ディスク
-通信網

私はCPUとメモリの使用率にatop、ディスクの使用量にiotop、ネットワークトラフィックにiftopを使用するのが大好きです。これらのメトリックは、サーバーに負荷がかかっていてこの問題が発生している場合にのみリアルタイムで役立つことに注意してください。

上記の大きな4のいずれかは、ページが要求されたときに処理の大幅な遅延を引き起こす可能性があります。このサイトはブログだとおっしゃいましたが、コンテンツが動的に生成されるかどうかについては触れていませんでした。これにより、この方程式に別のレイヤー、つまりデータベースが追加されます。クエリの応答時間が長いと、トリクルダウン効果が発生し、ページの読み込みが長くなる可能性があります。

4
Noobixide

確実にテストできる唯一の方法は、「ab」のようなベンチマークを実行して、サイトが維持できる訪問者の数をテストし、その間にサーバーで何が起こっているかをトラブルシューティングすることです。次のようなものを実行します。

$ ab -n 10000 -c 50 http://yoursite.com/

あなたのPCまたは他のサーバーから。

これにより、サーバーに10,000件のリクエストが発生しますが、同時に50件を超えることはありません。テストを開始する前に、Webサーバーでhtopを実行し、新しいプロセスが生成され、メモリとCPUの負荷が変化するのを監視します。

Webサーバーのセットアップについて説明しなかったため(Apache/mod_php、nginx/php-fpm、またはその他の組み合わせを使用していますか)、ユーザーごとのメモリ消費量をリモートで推測することさえできません。

私の印象では、ユーザー数が増えると、サーバーは実際にハードディスク上にある追加の1GBの仮想メモリを交換して使用し始めます。過度のスワッピングは、メモリがディスク上にあるプロセスによってユーザーがサービスを受けるのを待っていることを意味します。これは、観察している速度の低下を説明できます。しかし、追加情報がなければ、私たちはあまり役に立ちません。

3
Jakov Sosic