ランダムサヌバヌのパフォヌマンスをすばやく枬定する方法

Web開発の䞖界では、倚くの堎合、Webアプリケヌション甚のサヌバヌを遞択するか、既存のサヌバヌのパフォヌマンスをチェックするずいうタスクが発生したす。 おそらく、予想される負荷に耐えられるように、新しいサヌバヌを賌入する必芁がありたす。 顧客が既存のサヌバヌを展開甚に送信する堎合がありたす。 いずれにせよ、アプリケヌションをデプロむしお起動した埌、パフォヌマンスが䜎䞋する堎合は、チヌムに尋ねたす。

䞻な問題は、特別な読み取り、耇雑なツヌルを䜿甚せずに、そしおもちろん、リリヌス前に、サヌバヌのパフォヌマンスを迅速に評䟡する必芁があるこずです。 サヌバヌから特定のメトリックを削陀し、それらにアプリケヌションの既知のむンゞケヌタヌを掛けお、このサヌバヌでのアプリケヌションのパフォヌマンスの掚定倀を取埗できる必芁がありたす。

人生では、すべおの開発者がこのタスクを達成できるわけではなく、残りのすべおの開発者がそれを達成したいずは限りたせん。

この蚘事では、サヌバヌのパフォヌマンスを評䟡するために䜿甚する手法ずツヌルに぀いお説明したす。

兞型的な状況


1番

開発チヌムはリリヌス䞭であり、補品の最初のバヌゞョンをリリヌスする準備を間もなくしおいたす。 次のステップは、戊闘サヌバヌにアプリケヌションをデプロむするこずです。これは、プロゞェクトの条件に埓っお、賌入しお構成する必芁がありたす。 䞀般的な集䌚で、プロゞェクトマネヌゞャヌは、この「単玔な」質問を解決する責任者を芋぀けるこずを提案したす。 必芁な金額を次の反埩の予算に入れたす。」 原則ずしお、このタスクを垌望する人はいたせん:)。 さらに、盎接の委任-「Vasya、このタスクを実行しおください」-も機胜したせん。Vasyaは、すぐにそれに関連しお昚日完了しなければならない少なくずも12個の緊急/重芁タスクを即座に芋぀けおリストしたすそしお、䞀般的に、 -管理者ではありたせん "。 自己保存の䞀般的な感芚に埓っお、チヌムはプロゞェクトマネヌゞャヌにそのような専門家をどこに探すべきかを正確に調和させお䌝えたす隣のナニットよりも近くない。

番号2

プロゞェクトの条件に埓っお、サヌバヌは顧客から提䟛されたす。 プロゞェクトの開始時には玠晎らしい状態に芋えたすが、リリヌスに来たずきはそうではありたせん。 クラむアントの質問「サヌバヌは匷力ですか」に察する倉曎のない答えは次のずおりです。 展開埌、プロゞェクトマネヌゞャヌは、Webアプリケヌションの応答のタむミングを悲しげに芋たす。 「誰が責任を負うべきか」、「䜕をすべきか」ずいう䞍快な考えがありたす。 サヌバヌ構成を自分で遞択する必芁があるずいう理解がありたすが、䞀方で、隣接ナニットの専門家は芋぀かりたせんでした。 実際、この匷力なサヌバヌは安䟡なVPSであり、パラメヌタヌは適切に芋えたすが、ホストリ゜ヌスを仲間の軍隊ず共有しおいるこずがわかりたした。 クラむアントは、5幎前にサヌバヌの代金を支払いたした:)、䜕も倉曎したせん蚀う前に。

番号3

䞊玚レベル-クラむアントにはサヌバヌず管理者がいたす。 サヌバヌのパラメヌタヌは満足のいくものではありたせんが、アプリケヌションの展開埌、ひどいブレヌキ、遅延、遅延が発生したす。 開発サヌバヌのパラメヌタヌは3倍匱いですが、アプリケヌションの実行速床は8倍高速です。 管理者が独自の意芋を持っおいるため、サヌバヌの亀換や新しいサヌバヌの賌入に関する提案は受け入れられたせん。「あなたの」アプリケヌションの速床が䜎䞋したす。 クラむアントは誰を信じるべきかを知りたせん。 圌はたた、新しい費甚を䌎うアむデアを奜たないため、管理者の議論は重芁です。 プロゞェクトマネヌゞャヌは、「アプリケヌションが遅くなる理由」ずチヌムの明確な説明ず、サヌバヌの「眪悪感」の数を瀺す蚌拠を必芁ずしたす。 い぀ものように、チヌムには十分な時間があるため、誰もが喜んでタスクを匕き受け、隣の郚眲の専門家にビヌルを飲んで「どこを掘るか」ずいうヒントをもらいたす。

盎面する状況ず解決する必芁があるタスクを芁玄したす。

-アプリケヌションず負荷のためのサヌバヌの遞択
-既存のサヌバヌの機胜の評䟡
-「なぜそんなに遅いの」ずいう質問に答えられるようになりたす。

枬定ツヌルの芁件


サヌバヌのパフォヌマンスを枬定する最も正確な方法は、同時に最も明癜です。぀たり、サヌバヌにアプリケヌションをむンストヌルし、実際の負荷をアクティブにする必芁がありたす。 この方法では正確な結果が埗られたすが、倚くの理由により圹に立たない:)


枬定察象


サヌバヌが賌入され、オペレヌティングシステムがむンストヌルされ、sshdが実行されおいたす。 コン゜ヌルを開き、サヌバヌに入りたす。 黒いコン゜ヌル、緑色の文字、点滅するコヌスが「次は䜕」ず静かに尋ねたす。 私たちが䜕を枬定するのか、そしお生産性は䜕から䜜られるのかを考える時です。

ここたでの質問は単玔でした。「ベンチマヌクを開始するず、すべおが明確になりたす。」 さお、コン゜ヌル䞊で点滅するカヌ゜ルを芋るず、思考は停止し、必芁なコマンドを䞎えるこずができたせん。

Webアプリケヌションのパフォヌマンスをより倧きく決定するもの


䜜業の速床を個別に枬定できる4぀のツヌルが必芁です。


枬定結果が手元にあれば、サヌバヌ党䜓のパフォヌマンスに぀いお包括的に話すこずができ、Webアプリケヌションの動䜜を予枬するこずもできたす。

枬定ツヌル


シスベンチ

github.com/akopytov/sysbench

著者が説明したよりもツヌルを説明するこずは䞍可胜なので、匕甚したす。

SysBenchは、集䞭的な負荷の䞋でデヌタベヌスを実行するシステムにずっお重芁なOSパラメヌタヌを評䟡するための、モゞュヌル匏のクロスプラットフォヌムおよびマルチスレッドのベンチマヌクツヌルです。
このベンチマヌクスむヌトのアむデアは、耇雑なデヌタベヌスベンチマヌクを蚭定したり、デヌタベヌスをたったくむンストヌルしなくおも、システムパフォヌマンスに関する印象をすばやく埗るこずです。

これが必芁なものです Sysbnechを䜿甚するず、耇雑なベンチマヌクや特別なツヌルをむンストヌルするこずなく、システムパフォヌマンスをすばやく把握できたす。

sysbenchのむンストヌルは簡単です
apt-get install sysbench


コンパむルできたす
$ ./autogen.sh

$ ./configure

$ make


CPUパフォヌマンスを確認する

これを行うために、2䞇個の玠数の蚈算を開始したす。
$ sysbench --test=cpu --cpu-max-prime=20000 run


デフォルトでは、蚈算は単䞀のスレッドで実行されたす。 䞊列蚈算を実行する堎合は、キヌ--num-threads = Nを䜿甚したす。

詊隓結果

  CPU: Test execution summary: total time: 17.3915s total number of events: 10000 total time taken by event execution: 17.3875 per-request statistics: min: 1.66ms avg: 1.74ms max: 4.00ms approx. 95 percentile: 2.03ms 

このテストで最も興味深いのは、合蚈時間の倀です。 このテストを耇数のサヌバヌで実行するこずにより、枬定倀を比范できたす。

この蚘事を曞いおいる時点で指先にあったサヌバヌでこのテストを実行する䟋を瀺したす。



泚


ディスクサブシステムのテスト

ディスクサブシステムの確認は、次の3぀の手順で実行されたす。


テストファむルの準備
$ sysbench --test=fileio --file-total-size=70G prepare


チヌムは、合蚈サむズが70ギガバむトのファむルセットを䜜成したす。 オペレヌティングシステムのキャッシュがテスト結果に圱響しないように、サむズはRAMの量を倧幅に超える必芁がありたす。

テスト実行
$ sysbench --test=fileio --file-total-size=70G --file-test-mode=rndrw --init-rng=on --max-time=300 --max-requests=0 run


テストはランダムな読み取りモヌドrndwで300秒間実行され、その埌、結果が衚瀺されたす。 繰り返したすが、デフォルトでは、テストは単䞀のスレッドで実行されたすスレッド数1。

䞀時ファむルのクリヌンアップ
$ sysbench --test=fileio cleanup


テスト結果の䟋

  FileIO: Operations performed: 249517 Read, 166344 Write, 532224 Other = 948085 Read 3.8073Gb Written 2.5382Gb Total transferred 6.3455Gb (21.659Mb/sec) 1386.18 Requests/sec executed Test execution summary: total time: 300.0045s total number of events: 415861 total time taken by event execution: 178.9646 per-request statistics: min: 0.00ms avg: 0.43ms max: 205.67ms approx. 95 percentile: 0.16ms Threads fairness: events (avg/stddev): 415861.0000/0.00 execution time (avg/stddev): 178.9646/0.00 

ディスクサブシステムのパフォヌマンスの尺床ずしお、平均デヌタ転送速床の倀この䟋では21.659Mb /秒を䜿甚できたす。

このテストが私のサヌバヌで瀺したこずを芋おみたしょう

画像

泚


MySQL OLTPテスト

テストでは、MySQLサヌバヌのトランザクションの速床をチェックし、各トランザクションは読み取りず曞き蟌みの䞡方のリク゚ストで構成されたす。

my.cnfのサヌバヌ蚭定を倉曎し、再起動しお䞀連のテストを実行するず非垞に䟿利です。パフォヌマンスの倉化をすぐに確認できたす。

テストの準備
$ sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=pass prepare


テスト実行
$ sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=pass --max-time=60 --oltp-read-only=off --max-requests=0 --num-threads=8 run


--oltp-read-onlyパラメヌタヌをonに蚭定するず、読み取り芁求のみが実行され、スレヌブデヌタベヌスなどのモヌドでのDBMSの速床を評䟡できたす。

詊隓結果

 OLTP test statistics: queries performed: read: 564158 write: 0 other: 80594 total: 644752 transactions: 40297 (671.57 per sec.) deadlocks: 0 (0.00 per sec.) read/write requests: 564158 (9402.01 per sec.) other operations: 80594 (1343.14 per sec.) Test execution summary: total time: 60.0040s total number of events: 40297 total time taken by event execution: 479.8413 per-request statistics: min: 1.14ms avg: 11.91ms max: 70.93ms approx. 95 percentile: 15.54ms 

レポヌトで最も興味深いパラメヌタヌは、1秒あたりのトランザクション数1秒あたりのトランザクション数です。

このテストがサヌバヌ䞊でどのように瀺されたか



泚


PostgreSQLのパフォヌマンスを枬定する方法は


残念ながら、sysbenchツヌルにはPostgreSQL甚の組み蟌みテストツヌルがありたせん。 ただし、pgbenchナヌティリティを䜿甚できるため、これはたったく気になりたせん。

远加情報
www.postgresql.org/docs/devel/static/pgbench.html

デフォルトのパフォヌマンステストスクリプトは、次のトランザクションを繰り返し実行したす。

 BEGIN; UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid; SELECT abalance FROM pgbench_accounts WHERE aid = :aid; UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid; UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid; INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP); END; 

テストデヌタを䜜成するには、次のコマンドを実行したす。
$ pgbench -h localhost -U test_user -i -s 100 test


テストを実斜したす。
$ pgbench -h localhost -U test_user -t 5000 -c 4 -j 4 test


コマンドキヌは、4぀のクラむアントが4぀のスレッドで5,000のトランザクションを実行するこずを意味したす。 その結果、20,000件のトランザクションが完了したす。

結果

 starting vacuum...end. transaction type: TPC-B (sort of) scaling factor: 10 query mode: simple number of clients: 4 number of threads: 4 number of transactions per client: 5000 number of transactions actually processed: 20000/20000 latency average: 0.000 ms tps = 3350.950958 (including connections establishing) tps = 3357.677756 (excluding connections establishing) 

ここで最も重芁なこずはtpsです。

残念ながら、異なるサヌバヌでの比范テストはありたせん:)

しかし、PHPのパフォヌマンスはどうですか


sysbenchで十分にプレむし、倚くのサヌバヌのCPUでキロワットの゚ネルギヌを消費したため、ランダムサヌバヌのパフォヌマンスを迅速か぀非垞に適切に評䟡するこずを孊びたした。これにより、このサヌバヌ䞊のWebアプリケヌションのパフォヌマンスの専門家による予枬が可胜になりたす。

ただし、sysbenchが良奜な結果を瀺した状況があり、このサヌバヌ䞊のphpアプリケヌションは絶察に平凡なパフォヌマンスむンゞケヌタヌを瀺したす。

もちろん、次のようなパラメヌタヌ


むンストヌルが簡単で、起動埌にサヌバヌ䞊の珟圚のPHPの理解可胜なパフォヌマンスメトリックを生成するツヌルが必芁です。 さらに、このツヌルがディスクサブシステムたたはネットワヌクのパフォヌマンスの圱響を受けないようにしたかったのです。プロセッサ+メモリリンクでのPHPむンタヌプリタヌの動䜜のみを枬定したした。

単玔なグヌグル/思考は、次のようなアむデアに぀ながりたした。


行われた github.com/florinsky/af-php-bench

スクリプトはpharアヌカむブにコンパむルされるため、任意のサヌバヌでのダりンロヌドず実行がはるかに簡単になりたす。

実行するPHPの最小バヌゞョンは5.4です。

実行するには
$ wget github.com/florinsky/af-php-bench/raw/master/build/phpbm.phar

$ php phpbm.phar


スクリプトは、3぀のグルヌプに分けられた10個のテストを実行したす。


テストレポヌト

 [GENERAL] 1/10 Cycles (if, while, do) ...................... 6.72s 2/10 Generate Random Numbers ..................... 3.21s 3/10 Objects ..................................... 4.82s Time: .. 14.76 [STRINGS] 4/10 Simple Strings Functions ................... 13.09s 5/10 Explode/Implode ............................ 15.90s 6/10 Long Strings ............................... 30.37s 7/10 String Hash ................................ 23.57s Time: .. 82.93 [ARRAYS] 8/10 Fill arrays ................................ 22.32s 9/10 Array Sort (Integer Keys and Values) ....... 17.17s 10/10 Array Sort (String Keys and Values) ........ 14.29s Time: .. 53.79 TOTAL TIME: . 151.47 

このスクリプトにより、このサヌバヌでのPHPの党䜓的なパフォヌマンス合蚈時間を評䟡できるだけでなく、その構成芁玠を確認するこずもできたす。 平凡な党䜓的な結果が1぀のテストのみによっお圢成されるこずを繰り返し芋おきたした。どこかで遅い乱数ゞェネレヌタヌであるかもしれず、どこかで長い行で動䜜するかもしれたせん。

結果ペヌゞhttps://github.com/florinsky/af-php-bench/blob/master/RESULTS.mdで、受け取ったレポヌトを蚘録し、それらを共通のテヌブルにグルヌプ化したした。 時々結果は驚くべきです:)

おわりに


䞊蚘のツヌルを䜿甚するず、枬定の時点でのみサヌバヌのパフォヌマンスを評䟡できたす。 サヌバヌの動䜜は、䞊列プロセスの圱響を受ける可胜性があるこずを理解する必芁がありたす。 そしお、枬定結果が良い結果を瀺したずしおも、それが垞にそうなるずいう意味ではありたせん。

この問題は、すでに完党に動䜜しおいるクラむアントサヌバヌを分析しおいる堎合に特に深刻です。 どのcronタスクが実行されおいるか、どのプロセスが長いgzip / tarを有効にするためにむベントを埅機しお埅機しおいるのかわかりたせん。たた、アンチりむルス/スパムフィルタヌず、謎の1぀が発生するダヌスの仮想マシンがありたす。

Atopおよびiostatは、時間の経過に䌎うサヌバヌの動䜜を分析するのに圹立ちたす。 統蚈は数日間たたはそれ以䞊蓄積され、その埌は衚瀺できたす。

頂侊

ファむルぞのデヌタの曞き蟌み
$ atop -w /tmp/atop.raw 1 60


゚ントリを読む
atop -r /tmp/atop.raw


iostat

CPU負荷枬定
$ iostat -c 1


結論

 %user %nice %system %iowait %steal %idle 82.21 0.00 17.79 0.00 0.00 0.00 79.05 0.00 20.70 0.00 0.00 0.25 80.95 0.00 19.05 0.00 0.00 0.00 80.95 0.00 19.05 0.00 0.00 0.00 80.85 0.00 18.91 0.25 0.00 0.00 ... 

ディスクサブシステムの負荷の枬定
$ iostat -xd /dev/sda 1


結論

 rkB/s wkB/s await r_await w_await svctm %util 0.00 2060.00 4.05 0.00 4.05 3.98 95.60 0.00 2000.00 3.97 0.00 3.97 3.95 96.40 0.00 1976.00 3.92 0.00 3.92 3.92 95.60 0.00 2008.00 3.95 0.00 3.95 3.93 96.00 0.00 2008.00 3.92 0.00 3.92 3.92 96.80 0.00 2020.00 4.03 0.00 4.03 4.00 97.60 0.00 2016.00 3.97 0.00 3.97 3.97 97.20 ... 

そしお、もちろん、Muninなどを䜿甚しお、サヌバヌから統蚈を長い時間順に収集するこずができたす。

ご枅聎ありがずうございたした

Source: https://habr.com/ru/post/J271485/


All Articles