「Java開発者はプロファむラヌの問題を認識しおいたせん」Javaプロファむリングに関するAndrei PanginずNitsan Wakart





プロファむリングから倧きなニュヌスを期埅すべきではないず考えるのは簡単です。開発者は䜕十幎もプロファむリングしおきたので、そこに぀いおどう思いたすか しかし、Javaプロファむリングでは、セヌフポむントバむアスのような重倧な萜ずし穎があり、そのような問題を解決するための新しいツヌルが登堎しおいたす。



Andrey apangin Pangin Odnoklassnikiは最近これらのツヌルの1぀を䜜成したした。4月のJPointカンファレンスで、圌はセヌフポむントバむアスを恐れないオヌプン゜ヌスプロゞェクトasync-profilerを発衚したした。 このトピックに関する別の専門家はNitsan Wakartです。倚くの人が、圌のブログ投皿 「なぜほずんどサンプリングJavaプロファむラヌがひどいのか」のおかげで、セヌフポむントで同じ問題に぀いお孊びたした。



私たちはすぐに䞡方ず話し、非同期プロファむラヌに関する最新ニュヌスずの䌚話を開始し、埌でJavaプロファむリングの䞀般的な状態に進むこずにしたした。



JUG.ru最近、async-profilerは、 「jvm-profiling-tools」の Andreyの個人リポゞトリからGitHubに移動したした。jvm-profiling-toolsずは䜕ですか。



Nitsanこれは、同様の目暙を持぀耇数のリポゞトリの組み合わせです。 アむデアは、それらを1か所に集め、コミュニティを刺激しお、より積極的に開発するこずです。



アンドリュヌそのずおり 。 非同期プロファむラがJavaコミュニティにずっお興味深いこずが明らかになったずき、サヌドパヌティの開発者がそれを他の人の個人リポゞトリに密茞するこずは時々䞍快なので、䞭立の堎所に移動するこずにしたした。



Nitsan jvm-profiling-toolsにはHonest Profiler 、async-profilerおよびperf-map-agentがあり、異なる芳点から同じトピックにアプロヌチしたすperf-map-agentはLinux perfを䜿甚しおプロファむリング機胜を開き、Honest ProfilerはAsyncGetCallTraceを䜿甚したす、セヌフポむントバむアスを回避し、非同期プロファむラヌは非垞に快適な方法で䞡方を組み合わせたす。



アンドリュヌはい。 実際、䞡方のアプロヌチを組み合わせるずいうアむデアには宇宙的なものは䜕もありたせんが、䜕らかの理由でこれたで誰にも起こらなかったものです。



Nitsan実際には、Solaris Studioにありたしたが、Solaris Studioの問題は、䞖界䞭で玄20人がそれを䜿甚しおいるこずです。



Andrewしかし、私の知る限り、カヌネル呌び出しは衚瀺されたせんよね



Nitsanネむティブコヌドを衚瀺したすが、カヌネルは衚瀺したせん。



JUG.ruHonest Profilerずasync-profilerには「セヌフポむントバむアスの欠劂」ずいう共通の利点があるため、珟圚jvm-profiling-toolsを芋るず、プロファむリングの初心者は次のように尋ねる堎合がありたす。あなたは圌らに䜕を䌝えるこずができたすか



アンドリュヌ非同期プロファむラヌは、プロファむリングの正確性ず情報の完党性の点ではるかに優れおいるず思いたす。 実際、HotSpotのAsyncGetCallTraceでさえ垞に機胜するわけではありたせん。䞀郚の境界線の堎合、JVMはスタックトレヌスを埩元できたせんが、async-profilerはそのような状況にも察凊したす。 さらに、Honest Profilerはネむティブスタックトレヌスをたったく衚瀺したせん。 しかし、その優れたむンフラストラクチャの利点は、デヌタの提瀺に関するものです。 圌は結果を矎しく衚瀺する方法を知っおおり、UIを持ち、非同期プロファむラヌはコン゜ヌルから起動されたJava゚ヌゞェントにすぎたせん。



日産未来は非同期プロファむラヌだず思いたす。 そしお、正盎なプロファむラヌの機胜のいく぀かを非同期プロファむラヌに入れたいです。 Honest ProfilerはmacOS䞊で動䜜し、async-profilerはただ存圚しないずいう事実にはただ違いがありたす。私たちの業界でヒップスタヌの倧きなコミュニティを維持するこずは重芁です。







JUG.ruOdnoklassnikiのVadim Tseskoが既にmacOSで非同期プロファむラヌを可胜にしたようですか



Andrew perf eventsサポヌトを远加する前のこずです。 Linux固有の呌び出しがmacOSサポヌトを䞭断したした。 しかし、良いニュヌスがありたす。先日、AppleNettyの著者のNorman Maurerず話しおいたずき、圌は非同期プロファむラヌにも興味があり、Macの移怍を快く受け入れおくれたした。



JUG.ruヒッププロファむラヌは7月に非同期プロファむラヌに登堎したした。これに぀いお話しおいただけたすか



Andrew Javaのメモリプロファむリングには、䞻に2぀のアプロヌチがありたす。 1぀目はバむトコヌドむンストルメンテヌションです。 しかし、実皌働システムの堎合、パフォヌマンスに嘆かわしい圱響があるため、ひどいです。 倚くのコンパむラヌ最適化が機胜しなくなりたす。たず、Escape Analysisはヒヌプ内の割り振りを回避するのに圹立ちたせん。



別のアプロヌチはDTraceプロヌブの䜿甚です。これも非垞に高䟡であり、JVMの起動時にのみ有効にできたす。



しかし、それだけではありたせん。 TLABThread Local Allocation Bufferサンプリングに基づいたはるかに効率的なアプロヌチがありたす。 Java Mission Control / Java Flight Recorderに実装されおいたすが、垂販のOracle JDK機胜を含める必芁があり、OpenJDKではたったく機胜したせん。 同様の方法が Googleによっお内郚的に䜿甚されおいたすが、JVMの修正バヌゞョンのアセンブリが必芁です。



OpenJDKなど、有料機胜を接続せずにこのアプロヌチを䜿甚する方法を芋぀けたした。 詳现に぀いおは詳しく説明したせんが、別のレポヌトで必ず説明したす。



日産これは重芁だず思いたす。 珟圚、Java Mission Controlはおそらく割り圓おのプロファむリング甚の唯䞀のツヌルであり、JMCで同様のプロセスを操䜜するこずは非垞に独特な方法で実装されおいるため、倚くの人は単にそのようなプロファむリングを行いたせん。 これがプロファむリングの割り圓おを䞻流にするのに圹立぀こずを願っおいたす。



JUG.ru䜕幎も前に有甚だった2017幎にプロファむリングの顕著な倉化が起こるのは奇劙に思えるかもしれたせん。 この遅延の理由は䜕ですか



アンドレむ Javaはすべおの悪の根源です:)それは人生を良くも悪くもしたす。 䞀方では、JVMの性質により、暙準的なアプロヌチは適甚できたせんが、他方では、JVMは独自のプロファむリングAPIを提䟛したす。



日産 Javaの䞖界はWindowsのようなものだず思いたす。 WindowsはひどいOSでしたおそらく今ではずっず良くなっおいたすが、倚くの欠点に悩たされながら、同時に倧きな成功を収めたした。 Javaず同じ話。 プロファむリングツヌルの堎合、Javaはうたく機胜したせんでした。 なぜそうなのかはよくわかりたせん。



JVM開発者は䌝統的にSolaris Studioを䜿甚しおいるず思うので、すべおは倚かれ少なかれ正垞に機胜したしたが、それは圌らのためだけです。 専門家は専甚ツヌルを䜿甚したした。 そしお、ほずんどのJava開発者は、持っおいるものに満足しおいたした。



しかし今、Javaは珟実に盎面しなければなりたせんでした。 Solaris Studioで機胜しおいたが、ニッチな゜リュヌションだったネむティブプロファむリングは、たすたす䞀般的になり぀぀ありたす。



Andrew JavaはHotSpotず同等ではなく、他のJVMはプロファむラヌにずっおより䜿いやすいず付け加える必芁があるず思いたす。



日産䜕か芋逃したかもしれたせんが、どんな皮類のJVMに぀いお話しおいるのでしょうか 私はZingに぀いお倚くのこずを知っおおり、IBM J9の経隓がありたす...



Andrei今、Excelsior JETシャツを着おいるので、このプロゞェクトを思い出したした。 圌はJavaをネむティブコヌドにプリコンパむルする方法を知っおおり、私の知る限り、セヌフポむントバむアスに悩たされおいたせん。



日産あ、 だいたい 決しお䜿甚したせんでした。 この堎合、ネむティブプロファむラヌをすぐに䜿甚できるず思いたす。







JUG.ruasync-profilerおよびHonest Profilerで䜿甚されるAsyncGetCallTraceは、公匏のAPIではありたせん。 その䜿甚は「ハック」ずしお認識されたすか 将来、機胜しなくなるこずを心配しおいたすか プロファむリングのより正匏なサポヌトはオラクルを助けたすか



Nitsan AsyncGetCallTraceはOpenJDK 6のリリヌス以来機胜しおおり、垞に機胜しおいるように芋えたす。 これは「違法な子䟛」ですが、私は圌らがそれを奪っお捚おるこずができるずは思いたせん。 䜕かがJVMオプションになるず、䜕らかの圢で公匏のサポヌトを受けたす。 ですから、これに぀いおあたり心配するべきではないず思いたす。 AsyncGetCallTraceが新しいGraalコンパむラヌずどの皋床うたくいっおいるのかず思いたすが。



もちろん、より正匏なサポヌトが圹立ちたす。 Oracleは珟圚、JMCを有料オプションずしお提䟛しおおり、残りのJavaの䞖界にはVisualVMのようなものが残っおいたす。 これが今のお金です。 Oracleは利益盞反に盎面しおいるず思いたす。䞀方ではJavaの利益であり、他方ではJavaの利益です。 他のJVMプロファむラヌの改善に貢献するこずは、圌ら自身の状況を悪化させるこずになるず蚀えたす。



私は圌らがこれに぀いお積極的に心配しおいるずは䞻匵したせん。 圌らが今䜕を望んでいるかわからない。 おそらく圌らはJMCのようなものを誰もが利甚できるようにするでしょう。 ゞグ゜ヌパズルの仕事が終わったので、圌らは別の時間をたくさん持っおいたす。



Andrew AsyncGetCallTraceが郚分的に「ハッカヌ」APIであるこずに同意したす。 さらに、理想からはほど遠いです。私自身がバグを報告したした。 しかし、これたでのずころ、これはHotSpot JVMで最高です。



JUG.ruAsyncGetCallTraceのような既存のものに加えお、プロファむラヌの䜜成者の生掻を楜にする䜕か他のものを衚瀺できたすか



アンドリュヌはい。 HotSpotは最近、割り圓おプロファむリングに぀いお議論したした。 最埌に、ヒヌプサンプリング甚の新しい暙準化されたAPIを提䟛するJEPプロゞェクトもありたした。 メヌリングリストでそのようなトピックを取り䞊げ、JEPを提䟛するのが正しい方法だず思いたす。 だから、い぀かJava 11で...



JUG.ruOracleに関係なく、Javaプロファむリングの将来に぀いおどう思いたすか プロファむラヌは珟圚よりもはるかに良くなりたすか



アンドリュヌ本圓にそう願っおいたす。 私のレポヌトでは、珟圚䜿甚しおいるプロファむラヌには倧きな萜ずし穎があるずいう考えを開発者に䌝えようずしおいたす。 それらの䜿甚をやめるか、それらの欠点ずトラップを適切に理解する必芁がありたす。 そしお、より倚くの人々が問題の芏暡を認識するず、これらのツヌルの開発者はそれらを改善し始めるず思いたす。



日産倚くの問題で成長する䜙地がありたす。 perf-map-agentを䜿甚するず、プロファむリング䞭にむンラむン化を远跡する機胜が埗られたしたが、非同期プロファむラヌに移行するず、再び倱われたす。 圌女が再び䜓珟されるのを楜しみにしおいたす。



別の領域は芖芚化です。 マルチスレッドアプリケヌションで䜜業するずきにasync-profilerを䜿甚するず、1぀のスレッドがCPUの100を䜿甚し、他のすべおのスレッドが保留状態になるず、プロファむリング時に混乱する状況を把握できたす。 私はデヌタ衚瀺の問題に興味があり、倚くの同様の問題があるず確信しおいたす。



アンドリュヌはい。 今日、FlameGraphはビゞュアラむれヌションずしお非垞に人気がありたすが、完璧ずはほど遠いず蚀えたす。



JUG.ruあなたは䞡方ずもレポヌトずブログ投皿でプロファむラヌが歪んだ画像を䜜成できるず蚀いたした。 業界は、この歪んだ画像を䜿甚するこずで人々を傷぀けおいるず思いたすか プロファむラヌからの産業は、善よりも害を及がす可胜性がありたすか



日産はい、業界に害を及がすず思いたす。 Javaのパフォヌマンスに぀いお議論するためにむンタヌネットを芋るず、たくさんの話題があるこずがわかりたす。 そしお、それが非垞に倚いのは、情報を怜蚌するのが難しいからです。



䞀郚の人々は、問題がHashMapに決しお終らないず私に蚀った。 そしお、圌らがHashMapが問題になるずは思わなかった理由は、通垞のプロファむラヌがそれを決しお芋せないからです。 問題がそこにあるのは圌らの堎合だず蚀っおいるのではありたせんが、たぶん圌らはそれに぀いお決しお知らないでしょう。 たた、CPUタむムラむンを芋るず、GCに費やされた時間を芋るこずができたせん。 ぀たり、「ボトルネック」GCがあった堎合、これを远跡するこずはできたせん。



アンドリュヌ私は日産に同意したすが、少なくずも悪いツヌルを持っおいる方が、持っおいないよりは良いず付け加えたす。 䞻な問題は、プロファむラヌが䞍正行為を行っおいる堎合ではなく、たったく䜿甚されおいない堎合です。 倚くの開発者はたったくプロファむルしたせんが、倚くの堎合、パフォヌマンスの問題は非効率的なアルゎリズムにあり、サンプリングプロファむラヌはそれを簡単に識別したす。



日産私は倚くの人がプロファむリングしないこずに同意したす。これは問題です。 しかし、悪いプロファむラヌがあなたの唯䞀のツヌルであるこずが刀明した堎合...あなたはそれを芋お、それが䜕らかのナンセンスを䞎えおいるこずを芋お、他の人に蚀っおください「タむムスタンプを眮くだけの方が良い」プロファむラヌを䜿甚しないようにしたす。



JUG.ruそれで、Javaプロファむリングで状況を改善するには、ツヌルを改善するだけでなく、コミュニティに぀いおも知る必芁がありたすか



日産はい。 Javaの䞖界での倧芏暡なサクセスストヌリヌは、Java Microbenchmarking HarnessであるJMHです。 その理由は、この゜リュヌションは技術的な芳点からだけでなく、ナヌザヌを教育するずいう点でも非垞に成功しおおり、ナヌザヌにこの分野をよりよく知る機䌚を䞎えたからです。



Andrewはツヌルを䜜成し、人々に非垞に重芁だず䌝えおいるず思いたす。



Andrew䜿い方がわからなければ、最も匷力なツヌルでも圹に立たないでしょう。 同じJMHを䜿甚しお、JMHで人々がナンセンスを曞いた方法を䜕床も芋た埌、完党に間違った結論を出したした。 孊習は成功の䞍可欠な郚分です。



JUG.ru䞡方の方が最寄りのゞョヌカヌでレポヌトを䜿甚しおこのトレヌニングを支揎し、䞡方の他の䌚議で以前に提瀺されたレポヌトの新しいバヌゞョンを提瀺したす。 目新しさは䜕ですか



日産 QConで「プロファむラヌは嘘を぀いおいるホビット」を発衚した埌、私はそれが名前だず思いたした。 したがっお、タむトルを保持するこずにしたしたが、レポヌト自䜓は倧きく異なりたす。 プロファむラヌず、圌らがどのように私たちを誀解させるこずができるかに぀いお再び話したすが、私は最も暗いずころから始めお、それから出お行く方法を瀺したす。 過去には、レポヌトは「䜕も機胜しない」ずいう結論に至る䞀連の驚きでした。 今回は次のようになりたす。「䜕も機胜したせんが、これに察凊する方法を芋おみたしょう。」



Andrei最初は、JPoint 2017で始たった非同期プロファむラヌストヌリヌの続きを芋せるこずを蚈画しおいたした。しかし、その埌、プログラム委員䌚ず私はレポヌトず日産レポヌトの倚くの類䌌点を発芋したので、新しいトピックを取り䞊げるこずにしたした。 これたでのずころ、これが正確に䜕であるかを蚀う準備はできおいたせんが、近い将来、Joker 2017プログラムで私の新しいレポヌトが衚瀺されたす どうぞお楜しみに。






NitsanずAndreyが講挔するJoker Java䌚議は、11月3〜4日にサンクトペテルブルクで開催されたす。 い぀ものように、レポヌトの埌、ゞョヌカヌのスピヌカヌは議論の堎にいるので、個人的にプロファむリングに぀いお尋ねるこずができたす。 AndreiずNitsanの他にも、他にも数十人の講挔者がいたす- 䌚議のWebサむトでは、プログラムを芋るこずができたすチケットを賌入できたす。



All Articles