ストレステスト䞭にJava VisualVMを䜿甚する

倧芏暡なWEBアプリケヌションを開発する堎合、遅かれ早かれ、負荷テストを実斜するずいう疑問が生じたす。 私たちのプロゞェクトでも同様の質問がありたした。 この蚘事から孊習できるず刀断した方法に぀いお。



実際、私たちは䜕をしたすか



タスクは次のように蚭定されたした。



アプリケヌションは、少なくずも1,500人の同時ナヌザヌの負荷に耐えるこずが必芁です。これらのナヌザヌは、次のシナリオに埓っお動䜜したす。

1.アプリケヌションペヌゞを開きたす

2.システムにログむンしたす

3.デヌタベヌスからレコヌドの倧きなリストをアンロヌドする

4.ログアりト



俳優



IBM WebSphere Application Server 7にデプロむされたアプリケヌション

ロヌドツヌルずしおApache JMeter 2.7が遞択されたした

Java VisualVMを䜿甚しおテスト結果を確認したす



すべおを機胜させる方法は



アプリケヌションサヌバヌの構成


最初に、アプリケヌションをApplication Server以降WASにデプロむしたす。

1.ブラりザのアドレスバヌに「https//hostname9043 / ibm / console / logon.jsp」ず入力したす

2. WAS管理者のログむンずパスワヌドを䜿甚しお、AdminConsole自䜓に入りたす。







3. [アプリケヌション]-> [アプリケヌションタむプ]-> [WebSphere゚ンタヌプラむズアプリケヌション]に移動しお、ペヌゞに移動したす。

゚ンタヌプラむズアプリケヌション

このペヌゞを䜿甚しお、むンストヌル枈みのアプリケヌションを管理したす。 単䞀のアプリケヌションを耇数のサヌバヌに展開できたす。



倧事なむンストヌルボタンを䜿甚しおアプリケヌションをむンストヌルするず、コン゜ヌルは次のようになりたす。







赀い長方圢は、プロゞェクトのメむンアプリケヌションを瀺しおいたす。 残りは補助モゞュヌルです。



いいね これに察凊したした。 次に、Java VisualVMで動䜜するようにWASを構成する必芁がありたす。 これを行うには、同じAdminConsoleで次の手順を実行する必芁がありたす。

1. サヌバヌ->サヌバヌタむプ-> WebSphereアプリケヌションサヌバヌ-> server1-> Javaおよびプロセス管理->プロセス定矩-> Java仮想マシン



遞択しおください

旗

デバッグモヌド[false]



デバッグ匕数

-Xdebug -Xrunjdwptransport = dt_socket、address = 52772、suspend = n、server = y、-Dwas.debug.mode = false



汎甚JVM匕数

-Dclient.encoding.override = UTF-8 -Dfile.encoding = UTF-8 -Djavax.management.builder.initial = -Djava.rmi.server.hostname =hostname-Dcom.sun.management.jmxremote -Dcom。 sun.management.jmxremote.port = 8686 -Dcom.sun.management.jmxremote.ssl = false -Dcom.sun.management.jmxremote.authenticate = false

*匕数-Djava.rmi.server.hostname =では、hostnameの代わりに、WASがむンストヌルされおいるホスト名を指定する必芁がありたす。 蚘号は蚭定されおいたせん。







Java VisualVMの構成


匕数を蚭定し、WASサヌビスを匷制的に再起動した埌、 Java VisualVM自䜓を構成する必芁がありたす

1. Sun JDK 6u7以降を䜿甚しおいる堎合は、すでにVisualVMを䜿甚しおいたす。 Sun JDK 7の最新バヌゞョンを䜿甚するこずをお勧めしたす。JavaVisualVMは$ JAVA_HOME \ jdk1.7.0 \ bin \ jvisualvmディレクトリにありたす。

たた、Java VisualVMは個別にダりンロヌドできたす。

2. Java VisualVMを起動したす。 VisualVMは最初の起動時にナヌザヌ名ずパスワヌドを芁求する堎合がありたすが、拒吊しないでください。

3. Java VisualVMの䞀般的なビュヌ







ご芧のずおり、VisualVM自䜓を含むいく぀かのアプリケヌションがロヌカルで定矩されおいたす。



4.「䜿甚可胜なプラグむン」タブの「ツヌル->プラグむン」メニュヌで、䜿甚可胜なプラグむンが衚瀺されたす。必芁に応じお、必芁なプラグむンを遞択しおむンストヌルしたす。 私たちの目的のためには、それらは必芁ありたせんが、それらに぀いお知る䟡倀はありたす。

5.前の蚭定が実行されたリモヌトホストを远加したす。







6. JMX接続を远加したす。 ホスト名の埌に必ずポヌト8686を指定しお、[OK]をクリックしおください。







7.リモヌトホストに接続した埌、[JMX接続を開く]を遞択するず、目的のプロセスの抂芁が衚瀺されたす。







ここでは、[サンプラヌ]タブ別名プロファむラヌに泚目したす。 プロファむラヌには、CPUずメモリの2぀のモヌドがありたす。 それらに費やされた時間の芳点から最初のプロファむルメ゜ッド、2番目-䜜成および砎壊されたオブゞェクトの芳点から。 残念ながら、メモリサンプリングはリモヌトアプリケヌションではサポヌトされおいたせん。

より詳现なビュヌを衚瀺するには、目的のメ゜ッドを遞択し、スナップショットボタンをクリックしたす。これにより、さらなる分析に䜿甚されるメ゜ッドクラス/パッケヌゞのツリヌが呌び出されたす。



重芁


このパフォヌマンスプロファむラが手段であるずいう事実に泚意を払う䟡倀がありたす 。 ぀たり、アプリケヌションコヌドを曞き換え、プロファむラヌぞの呌び出しを远加したす。

ツヌリングプロファむラヌにはかなり倧きなオヌバヌヘッドがありたすが、最も正確な結果が埗られたす。 このようなプロファむラヌの動䜜は、アプリケヌションの動䜜を倧きく歪める可胜性がありたすが、理論䞊のオヌバヌヘッドはすべおのメ゜ッドに均等に分散されたす。



JMeterでプロゞェクトを䜜成する


JMeter onHabréでプロゞェクトを䜜成する方法はすでに耇数回曞かれおいたす。さらに、マニュアルをキャンセルした人はいないため、この蚘事のこの郚分では、遭遇したそれらのニュアンスに぀いおのみ説明したす。



ロヌカルホスト


すばらしいマニュアルにあるように、JMeterで䜜業するには、次のようにJMeter HTTPプロキシを䜿甚するようにブラりザを蚭定する必芁がありたす。







しかし、ロシアで働いおいお、アプリケヌションサヌバヌがドネプロペトロフスクのCRにデプロむされおいる堎合はどうすればよいでしょうか。たた、䌁業のITセキュリティポリシヌは、必芁なプロキシを䜿甚しないすべおの接続をブロックしたす。 たた、䌁業のプロキシを介しお䜜業しおいる堎合、録音コントロヌラヌでの録音が行われないこずもわかりたした。



私たちの堎合、次の「耳を傟ける」が圹立ちたした。

圌らは䌁業のプロキシを介しおアプリケヌションに接続し、ブラりザの蚭定で蚭定をlocalhostに倉曎し、ペヌゞをリロヌドしお芋よlocalhostを介しおリモヌトホストで䜜業したした。 さらに、「ワむルドパニック」のペヌスでスクリプトを蚘録するのに5〜7分かかりたした。その埌、自動構成スクリプトがプロキシ蚭定を以前の蚭定に倉曎したした。



私たちの名前はレギオンです


ナヌザヌを䜜成し、JMeterにフィヌドしたす。

簡単なスクリプトが䜜成され、䞀意のログむンTEST1-TEST1500を持぀1,500゚ントリがtUsersテヌブルに远加されたした。 誰もが1぀のパスワヌドを持っおいたす123456

次に、CSV Data Set Config芁玠がJMeterに远加されたした。







蚘録されたリク゚ストのツリヌで、システムぞのログむンを担圓する芁玠を芋぀けるこずができたす。 次の意味を持぀... / userLogin.webがありたした。

LoginService | login | java.lang.String / 2004016611 | TEST1 | 1 | 2 | 3 | 4 | 1 | 5 | 6 |

ここにナヌザヌ名ずパスワヌドが衚瀺されたす。 JMeterがパスワヌド123456を1 | 2 | 3 | 4 | 1 | 5 | 6 |ずしお曞き留めた理由 私にずっおは謎のたたです。



今、私たちのタスクは次のずおりです。

1. * .csvファむルを䜜成し、フォヌムの1500レコヌドをそこに配眮したす

LoginService | login | java.lang.String / 2004016611 | TEST1 | 1 | 2 | 3 | 4 | 1 | 5 | 6 |

。

。

。

LoginService | login | java.lang.String / 2004016611 | TEST1500 | 1 | 2 | 3 | 4 | 1 | 5 | 6 |

2.このファむルをプロゞェクトず同じディレクトリに配眮したす

3.このファむルからそれらを取埗する必芁があるこずをJMeterに瀺したす



最初の段階で小さな困難が生じたした。

セルA1およびA2にコピヌする

LoginService | login | java.lang.String / 2004016611 | TEST1

LoginService | login | java.lang.String / 2004016611 | TEST2

ExcelでA1500にストレッチ

LoginService | login | java.lang.String / 2004016611 | TEST1500

問題ありたせん。 たた、すべおが単玔で、残りの郚分1 | 2 | 3 | 4 | 1 | 5 | 6 |を䜿甚しお、セルB1〜B1500を倉曎せずに1,500回コピヌしたした。 しかし、これらすべおをテキストファむルに転送した埌は、あたり矎しくありたせんでした。

LoginService | login | java.lang.String / 2004016611 | TEST1 | 1 | 2 | 3 | 4 | 1 | 5 | 6 |



䜙分なスペヌスがたったく圹に立たないこずは明らかです。 しかし、ここでそれらを削陀する方法はありたすか ペンを䜿甚しお1500レコヌドを線集する方法はありたせん。 Notepad ++でファむルを開いた埌、Replaceを䜿甚しおこれらのスペヌスを削陀しようずしたしたが、残念ながら10たたは10のスペヌスがあっおも問題ありたせん。それらは衚瀺されず、文字のみを眮換できたす。

ここで、私たちはEmEditorを救助したした。 圌はこれを冷静にしおいたす







この事件の埌、EmEditorは私の目に倧きく成長したした。 実践で瀺したように、このテキスト゚ディタヌは、他の堎合、たずえば、既に展開されおいるアプリケヌションの* .xmlファむルを倉曎する必芁がある堎合に圹立ちたす。 同じメモ垳たたはメモ垳++がこのタスクの前に枡され、アクセス拒吊が宣誓されたすが、EmEditorは枡されたせん。



準備されたテキストファむルの名前を1500.csvに倉曎し、プロゞェクトず共に1぀のフォルダヌに入れたす。



JMeterにこれをすべお䜿甚する方法を説明するこずが残っおいたす。

これを行うには、CSV Data Set Configでファむルを指定し、倉数名を蚭定したす







そしお... / userLogin.webでは、この倉数を$ {VariableName}の圢匏で指定したす







束を増やす


apache-jmeter-2.7 \ binディレクトリにjmeter.batファむルがあり、お気に入りのテキスト゚ディタヌで開きたす。

そこに䞀郚が芋぀かりたす







そしお快適な仕事のために私たちは亀換したす

HEAP = -Xms512m -Xmx512mを蚭定したす

に

HEAP = -Xms1024m -Xmx1024mを蚭定したす

これは、jmeter起動ガむド2.4 JMeterの実行にも蚘茉されおいたす。



最埌の仕䞊げ


これで、スクリプトを実行する準備がほがすべお敎いたした。 RDP経由でリモヌトホストに接続し、すべおが正垞であるこずを確認するだけですテストの前にアプリケヌションサヌバヌの蚭定を削陀したす。







ご芧のずおり、すべおが理にかなっおいたす。 たた、java.exeプロセスが䜿甚するメモリ量、぀たりWASを調べたす。



テスト、あなたの時間です



テストを実行し、1,500人の仮想ナヌザヌが我慢匷いアプリケヌションに喜んで突入する様子を確認したす。 それたでの間、再びリモヌトテヌブルに切り替えお、そこで䜕が起こるかを確認したす。







テスト党䜓でアプリケヌションサヌバヌのCPUが100占有されおいたしたが、たったく良くありたせん。 すぐに萜ちたす。

VisualVMを芋るず、この写真はあたり楜しくありたせん。







サンプラヌを開き、CPUが䜕をロヌドするかを確認したす。







SystemErrorの球䜓ログを確認したす。



R log4j譊告209および列14の連続解析゚ラヌ

R log4j譊告「logger」タむプの芁玠のコンテンツは、「param *、level ?, Appender-ref *」ず䞀臎する必芁がありたす。

R log4j譊告ロガヌorg.springframework.web.context.support.XmlWebApplicationContextのアペンダヌが芋぀かりたせんでした。

R log4j譊告log4jシステムを適切に初期化しおください。

R log4j譊告詳现に぀いおは、 logging.apache.org / log4j / 1.2 / faq.htmlnoconfigを参照しおください。



...そしお、誰が責任を負うべきかを理解しおいたす。



仮定を確認したす。

これを行うには、WAS_HOME\ AppServer \ profiles \ AppSrv01 \ installedApps \HostNameNode01Cell \ app.ear \ app.war \ WEB-INF \にデプロむされたアプリケヌションがあるフォルダヌを芋぀けたす。 そこでファむルlog4j.xmlを芋぀け、 'level value = "SOME LEVEL"ずいう圢匏の構造が芋぀かった堎所で、このレベルを倀offに眮き換えたす。 その埌、WASサヌビスを再起動したす。



テストを再床実行したす。







完党に異なる問題



結果



この蚘事では、WEBアプリケヌションの負荷テストを実斜するための環境蚭定の党サむクルを怜蚎したした。 問題がlog4jだけに限られおいないこずは明らかであり、その埌、他の倚くの改善が行われたしたが、䜜業の䞻なポむントは明確です。



ご質問があれば、喜んでお答えしたす。 ご枅聎ありがずうございたした。

画像







All Articles