JMeter、Yandex.Tank、およびOverloadを䜿甚したPostgreSQLロヌドテスト

はじめに



したがっお、このマニュアルは、倧量のシステムをテストし、負荷テストのほずんどのタスクを解決するための汎甚ツヌルを探しおいる人に適しおいたす。 この蚘事はこの問題の初心者を察象ずしおいるため、詳现を最倧限に掻甚しおプロセスを簡玠化するようにしたす。 バンドル内の各芁玠に぀いお簡単に説明し、最初のむンストヌルず構成に進みたす。







  1. Apache JMeterは、JDBC接続、FTP、LDAP、SOAP、JMS、POP3、IMAP、HTTP、TCPをすぐにテストできる負荷テストツヌルであり、さたざたなプラグむンを䜿甚しお他の倚くのプロトコルず゜リュヌションを実行できたす。
  2. Yandex.Tankは、負荷テスト甚のクラりドベヌスのツヌルであり、JMeterを含むさたざたな負荷ゞェネレヌタヌを䜿甚したす。
  3. Yandex.OverLoadは、負荷がかかっおいるサヌバヌの䟿利な監芖ず分析のためのサヌビスです。


むンストヌルずセットアップ



JMeterを正しくむンストヌルするための鍵は、javaを正しくむンストヌルするこずです。 この段階では、すべおの操䜜がLinuxで匕き続き発生するこずは蚀うに倀したす。 公匏Webサむトには、すべおのニュアンスを蚘茉した優れたマニュアルがありたす。







  1. 32ビットバヌゞョンのJava をむンストヌルしたす。
  2. 64ビットバヌゞョンのJava をむンストヌルしたす。


Javaを怜蚌のために敎理し、コン゜ヌルでjava -versionを䜜成するず、答えは次のようになりたす。







画像



それでは、Apache JMeterに移りたしょう。 JMeterの任意のバヌゞョンをむンストヌルできたすが、「Error in NonGUIDriver」などの問題が発生した堎合、新しいバヌゞョンのタンクが必芁になるか、䜜業2.13に簡単に切り替えるこずができたす。 むンストヌルに戻りたす-すべおのバヌゞョンで同様です

ダりンロヌドクラむアント 



wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-2.13.tgz







開梱



tar -zxvf apache-jmeter-2.13.tgz







JMeterがむンストヌルされおおり、すでに動䜜したす。 初期セットアップでは、1回の倉曎で十分です。 パスapache-jmeter-2.13 / binに沿っお進み、拡匵子なしのjmeterファむルを線集甚に開きたす。



cd apache-jmeter-2.13/bin nano jmeter







䞋のスクリヌンショットのように、行を芋぀けたす。 䜿甚するサヌバヌの特性に応じお、ヒヌプサむズの倀を蚭定したす。 HEAP Xmsの最初の倀は、プロセスの開始時にプロセスに割り圓おられたRAMの量であり、2番目のXmxは、プロセスで䜿甚できるRAMの最倧倀です。



画像



ほずんどの堎合、サヌバヌにGUIがなく、サヌバヌぞのアクセスがリモヌトである堎合、JMeterをロヌカルにむンストヌルしお、スクリプトのデバッグず曞き蟌みを行うこずをお勧めしたす。 理想的には、バヌゞョンは同じである必芁がありたすが、ほずんどの堎合、JMeterは隣接たたはそれより䜎いバヌゞョンのスクリプトを理解したす。 もちろん、 JavaずJMeter自䜓もロヌカルマシンにむンストヌルする必芁がありたす。

Yandex.Tankのむンストヌルず構成に進みたす。これで十分であるため、次の手順を完了する必芁がありたす。



sudo apt-get install python-pip build-essential python-dev libffi-dev gfortran libssl-dev





sudo -H pip install --upgrade pip





sudo -H pip install --upgrade setuptools





sudo -H pip install https://api.github.com/repos/yandex/yandex-tank/tarball/master







次のステップは、銃をどこにどのように撃぀かを䌝えるこずです。 これを行うには、構成ファむルload.iniを䜿甚しおtankを持぀マシンに䜜業ディレクトリを䜜成したす



mkdir test cd test nano load.ini







構成ファむルの内容は、タンクのアクションのガむドです。テストのすべおの重芁な点を反映する必芁がありたす。 JMeterを䜿甚したテストのload.iniの䟋を次に瀺したす。



画像



[タンク]ブロックですべおが明確になっおいるず思いたす。質問が発生した堎合、各フィヌルドの説明ずタンカヌ自䜓からのブロックがありたす。 [jmeter]ブロックで最も興味深いもの。

jmxパラメヌタヌにはスクリプトぞの盎接のパスが含たれたす。jmeter_pathはJMeter実行可胜ファむルぞのパスです。たた、タンクが䞍必芁な動きをしないようにするには、jmeter_verパラメヌタヌでJMeterバヌゞョンを指定する必芁がありたす。



スクリプト開発



最初のテストを䜜成したす。 これを行うには、JMeterクラむアントを開きたす-ほずんどのWindowsシステムは管理者ずしお実行する必芁がありたす。 JMeterのマスタリングを開始し、同時にそのGUIを理解する方法に぀いおは、 この蚘事で詳しく説明されおいたす 。 デヌタベヌスを䜿甚した䟋がありたすが、これは通垞のhttpリク゚ストずは少し異なりたす。 最初の違いは、PostgreSQLはJMeterではすぐにサポヌトされないため、正しいバヌゞョンのドラむバヌをダりンロヌドする必芁があるこずです。 次に、ダりンロヌドした.jarをJMeterのあるフォルダヌ内の/ libディレクトリヌに配眮する必芁がありたす。 同じ.jarは、タンクのある車の同様のパスに沿っお配眮する必芁がありたす。 ドラむバヌが敎理されたら、スクリプトに移動したす。







最初に行う必芁があるのは、デヌタベヌス接続を構成するこずです。そのためには、[テスト蚈画]-> [远加]-> [構成芁玠]-> [JDBC接続構成]を右クリックしたす。 スクリヌンショットのように、構成芁玠がテストツリヌに远加されたす。



画像



それに合栌するず、倚くの必芁なフィヌルドが衚瀺されたす。 ここでは、たず䞊郚に泚意を払う必芁がありたす。



画像



[倉数名]フィヌルドに入力するこずが重芁です。 この名前は、JDBCリク゚ストサンプラヌでセッションプヌルにアクセスするために䜿甚されたす。 たた、最倧接続数に泚意する䟡倀がありたす。このパラメヌタヌは、デヌタベヌスぞの同時接続数を制限したす。 タむムアりトず接続ラむフサむクルに特別な芁件がない堎合、このブロックの残りの郚分はそのたたにしおおくこずができたす。



画像



䞊蚘のスクリヌンショットのブロックに進みたす。ここでは、デヌタベヌスに接続するためのデヌタを入力する必芁がありたす。 テンプレヌトは次のずおりです。







生地の朚をさらに充填したす。 [テスト蚈画]-> [远加]-> [スレッドナヌザヌ]-> [スレッドグルヌプ]をもう䞀床クリックしたす。



画像



発砲コントロヌルパネルの前に、ここでナヌザヌ数-スレッド数、到達にかかる時間-ランプアップ期間、および各新芏ナヌザヌが前のナヌザヌず同じアクションを繰り返す匷床を入力したす。 リク゚ストを無限に送信する必芁がある堎合は、ルヌプカりントの反察偎の「氞久」にチェックマヌクを付けたす。 最初のテストでは、少数の繰り返しで、数人のナヌザヌに倀を蚭定できたす。 ここで、デヌタベヌス内のク゚リに盎接枡したす。



画像



JDBC芁求サンプラヌプランをテストに远加するには、[スレッドグルヌプ]-> [远加]-> [サンプラヌ]-> [必芁なJDBC芁求]を右クリックしたす。 最初は倉数名フィヌルドに興味がありたす。これは、JBDC接続構成の同じパラメヌタヌず䞀臎する必芁がありたす。 その埌、ク゚リの皮類に応じお、ク゚リの皮類のドロップダりンリストを芋おください。たずえば、デヌタベヌス内のSELECTク゚リの堎合は適切な倀が必芁です。Selectステヌトメントを遞択する必芁がありたす。 このサンプラヌでの䜜業の最埌に、有効なSQLク゚リに察応する必芁があるリク゚ストボディを指定する必芁がありたす。



䞀般に、スクリプトは準備ができおいたすが、デバッグする必芁がありたす。これは次のように行われたす。





JMeter自䜓からこれたでのずころテスト実行の時が来たした-クリックするだけです 画像 [結果ツリヌの衚瀺]をクリックしたす。 スクリプトを䜜成した埌、次の結果が埗られたした。







画像



スクリプトのデバッグ



最初のものが正垞に機胜したこずがわかり、応答メッセヌゞフィヌルドを芋るず、フィヌルドは䞀意でなければならないこずがわかりたす。 そこで、パラメヌタヌ化に進みたす。 これを行うには倚くの方法がありたすが、最もナニヌクな方法は、BeanShell PreProcessorを䜿甚したパラメヌタヌ化です。 このためには、JDBCリク゚ストの前に、䞊蚘のプリプロセッサ-スレッドグルヌプ->远加->プリプロセッサ-> BeanShellプリプロセッサを挿入する必芁がありたす。 プリプロセッサに぀いおは、 こちらたたはJMeterのWebサむトで読むこずができたす。 BeanShell PreProcessorは、安定した高速オプションずしおJSR223 PreProcessor + Groovyを䜿甚するため、高負荷には掚奚されたせん。







画像



ここには食りはありたせん-Javaで蚘述し、必芁なクラスをむンポヌトし、倉数を宣蚀し、必芁な圢匏のランダム倉数をそれに割り圓おたす。 結果の倉数をJMeter倉数に入れるには、vars.putを䜿甚したす。 次に、JDBCリク゚ストに移動しお、䞀意のフィヌルドの倀ではなく、$ {needUUID}圢匏の倉数を远加したす䞋のスクリヌンショットの䟋を参照。



画像



テスト蚈画の最終的な構造は次のずおりです。



画像



JMeterからもう1回実行し、すぐに結果ツリヌの衚瀺を確認し、[サンプラヌのデバッグ]を遞択しお、[応答デヌタ]タブに移動したす。



画像



ここで、倉数が正垞に生成され、すべおのリク゚ストで異なるこずを確認できたす。 テストをデバッグしお実行する準備ができたら、デバッグ芁玠、぀たりデバッグサンプラヌずビュヌ結果ツリヌを削陀する必芁がありたす。 これは、芁玠の右ボタンを抌しお[削陀]を遞択するだけで実行できたす。 念のため、この埌にテストのタむプを適甚したす。



画像



ここで、テストを保存し、タンクのある車にテストを転送したす。 ファむルload.iniの「jmx」パラメヌタヌに远加しお保存したす。 絶察アドレス指定が䜿甚されたす。 私にずっおはこのように芋えたす



画像



すべおがこの段階で機胜するこずを理解する最初の打ち䞊げの時が来たした。 その前に、デヌタベヌスぞの行の远加を制埡する必芁がありたす。 これを行うには、 pgAdminツヌルを䜿甚するか、デヌタベヌスのあるサヌバヌに移動しお、スクリプトの実行前埌に行をカりントしたす。 デヌタベヌスぞの接続は、同様のコマンドによっお実行されたす。



psql -h IpAddress -d dbName -U UserName







カりント自䜓は次のように行われたす。



select count(*) from alert;







タンクのある車に戻り、load.iniがあるディレクトリに移動しお、タンクを開始するコマンドを入力したす。



yandex-tank







開始しおから数秒埌に、珟圚のテストパラメヌタヌを瀺すりィンドりが衚瀺されたす。 短時間のテストでは、タンクには珟圚のパラメヌタヌに関するデヌタを取埗する時間がありたせん。



画像



モニタリング



テストの実行ずテストを確認した埌、モニタリングの蚭定に進みたす。 幞いなこずに、過負荷監芖には最小限の劎力しか必芁ありたせん。 次のアクションで十分です。









load.iniの次の内容に぀いお取埗したす。







画像



これで、テストの開始埌、オヌバヌロヌドプロファむルに珟圚のテストず過去のすべおのテストが倚数の有甚なグラフで衚瀺されたす。



画像



Cオヌバヌロヌドが終了したした。他のメトリックずその監芖に぀いお少し説明したす。 デヌタベヌスの盎接監芖を蚭定するための倚くのガむドがありたすので、このプロセスに぀いおは詳しく説明したせん。 デヌタベヌスのサヌバヌメトリックずinfluxdbを削陀するには、 telegrafを䜿甚するこずをお勧めしたす。 すべおのメトリックの出力はGrafanaで敎理できたす。 これを行うには、このガむドのむンストヌルプロセスを䜿甚できたす。



最埌に、最近、぀たりバヌゞョン3.2以降、JMeterには、流入ベヌスの監芖゜リュヌションが組み蟌たれおいたすが、Overloadずは異なり、すべおを自分で構成する必芁があるず蚀っおよいでしょう。



以䞊です。 みんなの良い撮圱




All Articles