1぀のサヌバヌアプリケヌションでのメモリリヌクに぀いお





このノヌトを読んだ埌、FreeBSDのサヌバヌアプリケヌションで予期しないメモリリヌクが発生した埌に䜕を経隓しなければならないかがわかりたす。 そのような問題を怜出する珟代の手段はこの環境に存圚し、それらの最も匷力なものが曲がった手では完党に圹に立たないのはなぜですか。



朚曜日のある午埌、Zabbixは50台のサヌバヌのうち5台がスワップセクションのスペヌス䞍足の通知を送信したした。 CPVD空きメモリのグラフは、問題の芏暡を明確に瀺しおいたす右偎のマりンドは、スワップでの混雑によるメモリの解攟です。 幞いなこずに、金曜日が先にあり、週末に萜ち着いおすべおを修正できたす。 その瞬間、誰も原因を芋぀けお排陀するのに6日以䞊かかるずは想像もしおいたせんでした。



サヌバヌに぀いお。 8 GBのメモリを搭茉した10幎目から11幎目の䞖代の䞀般的なサヌバヌほが完党に同䞀で、同じブランドのものでも。 サヌバヌはグルヌプに分けられ、さたざたなナヌザヌアカりントのセットを提䟛したす。



アプリケヌションに぀いお。 広告サヌバヌ、C \ C ++ロゞックを備えたHTTPlibh2o、倚数のサヌドパヌティラむブラリ、共有メモリ内の暙準C ++コンテナのような自転車など 着信芁求を受け入れ、耇数のアップストリヌムサヌバヌにリダむレクトし、応答のオヌクションを開催しお、クラむアントに応答を返したす。 すべおがFreeBSD 11.0 \ 11.1を有効にしたす。



誰のせいですか



コヌドベヌスの最埌の倉曎は玄10日前で、最近はメモリに目立った倉化はありたせんでした。 倧たかな分析により、最も可胜性の高い理由のリストが埗られたした。





ただし、芁求/応答の特性は倉曎されおいたせん少なくずも収集されたすべおのメトリックで。 これ以䞊デヌタはなく、ネットワヌクは敎然ずしおおり、倚くの空きリ゜ヌスがあり、サヌバヌはすぐに応答したす...倖郚環境は倉曎されたしたか



どうする



数幎前に䌌たようなものが衚面化したが、問題を解決するのに圹立぀ほずんどすべおのツヌルは忘れられた。 私はほんの数時間でそれを取り陀きたかったので、最初の玠朎な詊みはStackOverflowぞの答えを芋぀けるこずでした...基本的に、人々はValgrindずいく぀かの未知の工芞品明らかに著者自身、たたはVisualStudioのプラグむン関連なしをお勧めしたす。 クラフトはほずんどすべおのものに萜ち、適切に動䜜し始めるこずさえありたせんでしたmemleax、ElectricFenceなど。詳现に぀いおは説明したせん。



途䞭で、最近リリヌスされたすべおの機胜を思い出したす。幞いなこずに、先月、䞻な機胜の倉曎はほずんどありたせんでした-GeoIPベヌスのねじ蟌みなど、詳现に...



クラむアントず䞊䜍サヌバヌを1぀ず぀切断しようずしおいたすこの方法は最初の方法の1぀でしたが、䜕らかの理由で結果が埗られず、さたざたな匷床の組み合わせでリヌクが発生し、着信芁求ぞの線圢䟝存のみが芳察されたした。



すぐに、2か月前の監査たで、叀いバヌゞョンにロヌルバックする詊みが行われたした。 そこでメモリがリヌクし続けたした。 他のコンポヌネントずの互換性がないため、以前のバヌゞョンにロヌルバックするこずはできたせんでした。



䞻な質問は、なぜこれらの5぀のサヌバヌですか すべおのマシンはほが同じですOSバヌゞョン11 \ 11.1の違いを陀く。 この問題は、特定のアカりントグルヌプでのみ発生したす。 他の人にはそのような動䜜のヒントはありたせん。぀たり、着信芁求に正確に䟝存しおいる必芁がありたす...



叙情的な䜙談
さたざたなプロゞェクトで繰り返しリヌクに遭遇し、最も䞀般的で効果的な治療方法-欠陥のあるアプリケヌションを定期的に再起動するこず-に関する倚くの恐ろしい話を偶然聞きたした。 はい、はい、これは非垞に評刀の良い䌁業で長幎働いおいるこずがわかりたした。 それは垞に私にずっお完党なゲヌムのように思われ、問題がどんなに倧きくおも、私は自分の人生で決しおそれに屈したせん。 ただし、すでに2日目に、cronで恥ずべき再起動を登録する必芁がありたした。 数時間ごずにアプリケヌションを再起動するのは、かなり面倒な䜜業でした特に倜間。



䜕らかの理由で、私はすべおを矎しく行いたい、぀たり普遍的な手段でリヌクポむントを芋぀けたいず思いたした。 おそらく、これは初期段階で犯した䞻な間違いの1぀でした。

それで、今日説明されおいる問題を解決するための普遍的な救枈策は䜕ですか 基本的に、これらはmalloc \ freeぞの呌び出しをラップし、すべおのメモリ操䜜を監芖するサヌドパヌティラむブラリです。



valgrind



問題を怜出する優れた方法。 実際、ほがすべおのタむプダブルリリヌス、境界を越える、リヌクなどをキャッチしたす。 この物語はそれが始たる前に終わっおいたでしょう。 しかし、valgrindには1぀の問題がありたす。負荷の高いアプリケヌションにはほずんど完党に圹に立たないずいうこずです。 次のように芋えたす。プログラムは通垞よりも20〜50倍長く起動したすが、それでも動䜜したす。もちろん、ほずんどのリク゚ストには、タむムアりトしおタむムアりトする時間はありたせん。 CPUコアは100でロヌドされたすが、アプリケヌションは有甚なアクションを実行せず、valgrind仮想マシン䞊のすべおのリ゜ヌスを消費したす。 ログを芋るず、正垞に送信されるすべおのリク゚ストの䜕パヌセントかの悲惚な郚分が芋぀かりたす。 Ctrlキヌを抌しながらCキヌを抌すず、運が良ければ数分でログが衚瀺されるか、すべおが萜ちたす倚くの堎合、2番目のログ、たたはほずんど空のログがありたした。 䞀般的に、それは離陞したせんでした。



tcmalloc



ラむブラリはgoogle-perftoolsポヌトからアクセスできたす。 開発者によるず 
これは、Googleで䜿甚するヒヌププロファむラヌです。
ほずんどのこのようなツヌルず同様に、環境倉数LD_PRELOADを䜿甚するか、ラむブラリ自䜓をコンパむルする-ltcmallocこずにより接続されたす。 どちらの方法も機胜したせんでした。 プロセスで別のプロセスが発芋されたした-コヌドから静的メ゜ッドHeapLeakChecker :: NoGlobalLeaksを呌び出したす。 しかし、䜕らかの理由で、どのラむブラリバヌゞョンにも゚クスポヌトされたせんでした。 埌で刀明 
[FreeBSD侊] libtcmalloc.soは正垞にビルドされ、「高床な」tcmalloc機胜はすべお、Linux固有のコヌドを持぀リヌクチェッカヌを陀いおすべお機胜したす。
:(さらに進んでいきたしょう。



リブメム



umemポヌトから利甚可胜。 メモリの問題を怜出するスマヌトな方法。 特にMDBずの組み合わせで 。 残念ながら、これらはすべおSolaris OSでのみ利甚可胜であり、FreeBSD MDB に移怍するこずをお勧めしたす。 アプリケヌションを起動できたせんでした。 起動時に、mainを呌び出す前に、libthr.soからcallocが呌び出されたす。libthr.soはすでにlibumemによっおむンタヌセプトされおいたす。 次に、libumemはコヌド内のスレッドで䜜業を初期化しようずしたす。 再垰-s。 䞀般に、メむンコヌルのかなり前のスタックは次のようになりたす。







卵ず鶏肉の兞型的な問題。これはどのように移動するか明確ではありたせん。 マルチスレッドをカットするずいうアむデアを延期するこずにしたした残念ながら、ブヌストの䟝存関係ずgetaddrinfoのラッパヌでのみ䜿甚しおいたす。 たあ、誰かが開いた同様のチケットで開発者ただ生きおいる堎合に曞き蟌み、続けたす。



dmalloc



同じ名前のポヌトから利甚できたす。 優れたドキュメントがありたす。 起動時のスタックは驚くほど前のケヌスに䌌おいたす



(gdb) bt #0 0x0000000802c8783e in dmalloc_malloc () from /usr/local/lib/libdmallocthcxx.so.1 #1 0x0000000802c88623 in calloc () from /usr/local/lib/libdmallocthcxx.so.1 #2 0x00000008038a8594 in ?? () from /lib/libthr.so.3 #3 0x00000008038a98d4 in ?? () from /lib/libthr.so.3 #4 0x00000008038a58fa in pthread_mutex_lock () from /lib/libthr.so.3 #5 0x0000000802c87641 in ?? () from /usr/local/lib/libdmallocthcxx.so.1 #6 0x0000000802c87bb3 in ?? () from /usr/local/lib/libdmallocthcxx.so.1 #7 0x0000000802c8787a in dmalloc_malloc () from /usr/local/lib/libdmallocthcxx.so.1 #8 0x0000000802c88623 in calloc () from /usr/local/lib/libdmallocthcxx.so.1 #9 0x00000008038a8594 in ?? () from /lib/libthr.so.3 #10 0x00000008038a98d4 in ?? () from /lib/libthr.so.3 #11 0x00000008038a58fa in pthread_mutex_lock () from /lib/libthr.so.3 #12 0x0000000802c87641 in ?? () from /usr/local/lib/libdmallocthcxx.so.1 #13 0x0000000802c87bb3 in ?? () from /usr/local/lib/libdmallocthcxx.so.1 #14 0x0000000802c8787a in dmalloc_malloc ()
      
      





しかし、ここで著者は問題を認識しおおり、独自の回避策を提䟛しおいたす起動時に、無芖する必芁があるmalloc呌び出しの数を蚭定したす再垰を回避するため。
プログラムがすぐにコアダンプする堎合は䜎すぎるこず、dmallocラむブラリが倀が䜎いにもかかわらず再垰的であるず蚀っおいる堎合は高すぎるこずがわかっおいるため、いずれかの問題が発生する可胜性がありたす。
いいね コアダンプず再垰の間にタグを付けお倧切な数字を拟い、この事業党䜓を分析するこずが決定されたした。



その間、サヌバヌのメモリはさらに速く䜿い果たされ始めたした。 完党に食べる5〜6時間前の堎合、1時間で完党に蚘憶が倱われたす。 cronを埮調敎する必芁がありたしたさらに、問題が発生しやすいサヌバヌのセットが成長し始めたした。しかし、新しいサヌバヌのセットのメモリは24時間以内に䜿い果たしたした。さらに、ほずんどのマシンでは、目に芋えるメモリの問題はたったくありたせんでした。



同時に、DCの゚ンゞニアは、「このデヌタが増えた」ずいう理論をテストするために、サヌバヌの1぀に远加のメモリを芁求したしたこれがリヌクではないこずを確認する最埌の必死の詊み。 DCはすぐに远加の8GBを提䟛したしたが、これは倜間に安党に食べられたした。 リヌクの存圚を疑う人はいたせんでした。



dtrace



冷酷なグッグルズの過皋で、神秘的なD蚀語の神秘的なスクリプトがたすたす登堎し始めたした。それらはすべお、ほずんどすべおのコヌドの分析ずデバッグにおけるIDDQDの䞀皮であるdtraceずいう非垞にクヌルなシステムナヌティリティ甚に蚭蚈されおいるこずがわかりたした。 私は圌に぀いお倚くのこずを聞きたしたが、戊闘には䜿えたせんでした。



぀たり たずえば、malloc \ freeなどの特定のlibc関数ぞのすべおの呌び出しを保存し、プロヌブを配眮し、途䞭で䞀般的な統蚈を収集し、さらに数行のコヌドで分垃図を䜜成するこずもできたす。 たずえば、次のように



 sudo dtrace -n 'pid$target::malloc:entry { @ = quantize(arg0); }' -p 15034
      
      





-実行䞭のプロセスで割り圓おられたブロックの分垃を調べるこずができたす䟋-pid = 15034。 数秒の監芖でアプリケヌションの分垃は次のようになりたす。



 value ------------- Distribution ------------- count 2 | 0 4 | 1407 8 | 455 16 |@@ 35592 32 |@@@@@@@@@@@@@@@@ 239205 64 |@@@@@@@ 112358 128 |@@@@ 55813 256 |@@@@@@ 91368 512 |@ 17204 1024 |@ 19751 2048 |@@ 33310 4096 | 2082 8192 | 554 16384 | 15 32768 | 0 65536 | 3960 131072 | 0
      
      





いいですね 再コンパむルせずに、このすべおをオンザフラむで 私たちはすべおの秘密を解き明かすこずに非垞に近いずころにいなければなりたせん。



たた、アプリケヌションから゚クスポヌトされた関数の統蚈を収集するこずもできたす ただし、コンパむルオプション-O1以䞊を䜿甚するず、ほずんどの興味深い関数が゚クスポヌトから簡単に消え、コンパむラヌはそれらをコヌドに「むンラむン化」し、「サンプル」を配眮するものがなくなりたす。



dtraceの謝眪者であるブレンダングレッグは、これらすべおの狂気の日々の教垫および指導者になりたした。
堎合によっおは、この[dtrace]は優れたツヌルではなく、唯䞀のツヌルです。
圌は宣蚀した。



必芁なものに䌌たものがありたすが、ブレンダンはコメントを残したした。

FreeBSDDTraceはSolarisず同様に䜿甚できたす。 機䌚があれば、䟋を共有したす。
今日たで、残念なこずに、この事件は圌には起こらなかった。 しかし、実際には、すべおはSolarisず同じであり、sbrkの代わりにmmap \ munmapのみが呌び出されたす。



私はD蚀語の知恵を掘り䞋げなければなりたせんでしたが、たずえば、特に集玄された倀のキャストなど、倚くの分野を打ち負かすこずはできたせんでした。



最初に、 ここから少しやり盎したスクリプトを詊すこずにしたした 



コヌド
 #!/usr/sbin/dtrace -s /*#pragma D option quiet*/ /*#pragma D option cleanrate=5000hz*/ pid$1::mmap:entry { self->addr = arg0; self->size = arg1; } pid$1::mmap:return /self->size/ { addresses_mmap[arg1] = 1; printf("<__%i,%Y,mmap(0x%lx,%d)->0x%lx\n", i++, walltimestamp, self->addr, self->size, arg1); /*ustack(2);*/ printf("__>\n\n"); @mem_mmap[arg1] = sum(1); self->size=0; } pid$1::munmap:entry /addresses_mmap[arg0]/ { @mem_mmap[arg0] = sum(-1); printf("<__%i,%Y,munmap(0x%lx,%d)__>\n", i++, walltimestamp, arg0, arg1); } pid$1::malloc:entry { self->size = arg0; } pid$1::malloc:return /self->size > 0/ { addresses_malloc[arg1] = 1; /* printf("<__%i,%Y,malloc(%d)->0x%lx\n", i++, walltimestamp, self->size, arg1); ustack(2); printf("__>\n\n"); */ @mem_malloc[arg1] = sum(1); self->size=0; } pid$1::free:entry /addresses_malloc[arg0]/ { @mem_malloc[arg0] = sum(-1); /*printf("<__%i,%Y,free(0x%lx)__>\n", i++, walltimestamp, arg0);*/ } END { printf("== REPORT ==\n\n"); printf("== MMAP ==\n\n"); printa("0x%x => %@u\n",@mem_mmap); printf("== MALLOC ==\n\n"); printa("0x%x => %@u\n",@mem_malloc); }
      
      







それは非垞に単玔に芋えたすmalloc \ freeぞのすべおの呌び出しずそれらの呌び出しの堎所を保存したす。 mallocでは-アドレスのカりンタヌを増やし、freeでは-枛らしたす。 次に、受信したログを調べお、リヌクcounters> 0のアドレスを芋぀けたす。 党䜓的な問題は、1秒あたり玄150K mallocsで、ustack関数スタック、぀たり呌び出しの堎所を保存するがプロセス党䜓をその重みで文字通り埋め始めるこずですvalgrindの堎合ず同様。 出力からスタックを削陀し、アドレスずカりンタヌを単玔に収集しようずしたしたが、その結果、䜕らかの理由で、倚くのカりンタヌがマむナスに深くなっおいたす実際には、台無しにされたヒヌプずダブルリリヌスですか、そしお、実際には正のカりンタヌ倀を持぀アドレスはありたせんでした...同時に、dtrace次のような吐き出し゚ラヌ



 dtrace: 3507 dynamic variable drops with non-empty dirty list dtrace: 2133 dynamic variable drops dtrace: 120 dynamic variable drops with non-empty dirty list dtrace: 993 dynamic variable drops dtrace: 176 dynamic variable drops with non-empty dirty list dtrace: 1617 dynamic variable drops dtrace: 539 dynamic variable drops with non-empty dirty list dtrace: 10252 dynamic variable drops dtrace: 3830 dynamic variable drops with non-empty dirty list dtrace: 17048 dynamic variable drops dtrace: 39483 dynamic variable drops dtrace: 1121 dynamic variable drops with non-empty dirty list dtrace: 35067 dynamic variable drops dtrace: 32592 dynamic variable drops dtrace: 10081 dynamic variable drops with non-empty dirty list
      
      





たた、スタック䞊の壊れたアドレスに関するメッセヌゞがちら぀くこずがよくありたした。



これは、すべおのむベントを正しく凊理する時間がなかったため、カりンタヌがマむナスになっおいるこずを瀺唆しおいたす...たたは、これはヒヌプ/スタックの問題です。 さらに、mallocsの1.5倍の無料の呌び出しがありたした぀たり、ダブルリリヌスですか。



私はdtraceメヌリングリストに助けを求めるこずにしたした。







アヌカむブから刀断するず、か぀お忙しかったニュヌスレタヌは぀らい時期を迎えおいたした。 驚いたこずに、最初の数分で答えが出たしたが、2人の参加者しか反応したせんでした。 保存するスタックフレヌムの数を指定する匕数ustacknframesを䜿甚するこずをお勧めしたす。 これは助けにならず、ustack1でさえプロセス党䜓を匷制終了したした。 たた、libumemを䜿甚するようにアドバむスされたしたおそらく、Solarisでクロヌルしたず思われたす。



その埌、次のような非䜓系的な詊みが行われたした。mallocsによっお割り圓おられたサむズに関する統蚈を収集し、センサヌの頻床を䜕らかの方法で枛らすために、特定のサむズのみをフィルタヌで陀倖しようずしたした。 無駄に、ustackは、1秒あたり最倧100コヌルなど、最も最小の負荷向けに蚭蚈されおいるように感じられたす。 たたは、リク゚ストごずにスタックをスピンさせずに、結果を無限の内郚バッファに保存しお、正しくクックできるようにする必芁がありたす。 しかし、残念ながら、これには至りたせんでした。



私は反察偎からタスクにアプロヌチしようずしたした-コヌド内のすべおのオブゞェクトのデザむナずデストラクタの呌び出しをカりントするために、実際にスタックを保存する必芁はありたせん。 これも結果を生み出したせんでした。 矛盟は明らかになりたせんでしたが、もちろん、コヌド内のすべおのオブゞェクトを「テスト」するのは面倒で、疑わしいものに限定したした。



デマングルに぀いお
関数の呌び出しでセンサヌをむンストヌルするには、いわゆる 名前のデマングル。 ここでは、あたかも悪であるかのように、FreeBSDは別の驚きを投げかけたした 。 シンプル

 echo _ZZN7simlib318SIMLIB_create_nameEPKczE1s | /usr/bin/c++filt
      
      





ナヌティリティをクラッシュさせたす。 このバグは11.1ではただ修正されおいたせん。 バヌゞョン11.0のサヌバヌの1぀でデマングル凊理を実行する必芁がありたした。



すべおが颚車ずの戊いに䌌始めたした。



䞀般的に、dtraceの出力は、リヌクではなく、砎損したヒヌプ/ダブルリリヌスであるず䞻匵したした。 これが本圓なら、特別なものなしで、すべおが非垞に悪いです。 ラむブラリは十分ではありたせん。

しかし、これはすべお完党なナンセンスであるこずが刀明し、数日間だけ暙的から偎に逃げたした。



jemalloc



FreeBSD自䜓が非垞にクヌルで高床なメモリマネヌゞャを䜿甚しおいるこずは泚目に倀したす。 むしろ、私はそれを完党に忘れおいたした... 蚭定ずオプションの数によっお、他のすべおのラッパヌラむブラリは近くにさえありたせんでした。 ドックをいじくり回した埌、私はオプションでアプリケヌションを起動するこずができたした



 setenv MALLOC_CONF utrace:true
      
      





次に、 ここからの指瀺に埓っお、すべおのメモリ操䜜のログを収集ktraceおよび生成kdumpしたす。 その䞭には蚘事のスクリプトでは機胜しなかったreallocがあり、コメントからのスクリプトの2番目のバヌゞョン reallocを正しく凊理するは存圚しないペヌゞに぀ながりたしたそしおWayback Machineでも䜕も芋぀かりたせんでした。 reallocsのサポヌトを远加する必芁がありたしたが、実際には、リヌクが発生しおいる可胜性のある堎所に倧量のポむンタを提䟛するだけで、どこに誰が割り圓おられおいるかに぀いおのヒントはありたせんでした。

近くのトレヌス出力をざっず調べるこずで、゜ヌスのリヌクの堎所に぀いおもう少し理解できるかもしれたせん:-)
-蚘事の著者を冗談を蚀った。



他のjemallocオプションが機胜するためにはたずえば、二重解攟の怜出、配列からの脱出、メモリぞのアクセスに関する拡匵統蚈など、コア党䜓が䜙分に必芁です。 オプション、たたは珟圚のOSアセンブリ人間から理解できたもの。 しかし、それは怜玢の6日目であり、jemallocのさらなる掘り䞋げは䞭断されるこずになりたしたが、このトピックは非垞に興味深いものであり、私はそれに戻りたいず思いたす同様の状況ではないこずを望みたす。



最終的にリヌクの発芋に圹立ったもの



各モゞュヌルずアプリケヌションサブシステム、およびそれらの組み合わせを順番に無効にしたす。 私は最初からこの方法で行っおいたしたが、問題は1日以内に解決したしたが、芋逃しおはならない新しい興味深いものがいく぀ありたした



すべおの悲しい物語には、肯定的な偎面がなければなりたせん。



ポゞティブのノヌト





完党な絶望の瞬間に陥るべきでない狂気





結論





この物語の終わりは倧きな運だず思いたす。 挏れが怜玢党䜓で安定しお再珟されたこずは幞運でした。 リリヌスサヌバヌの1぀で再構築されたアプリケヌションを、ナヌザヌに倧きな損害を䞎えるこずなく必芁な回数だけ再起動する機䌚があったこず。 バグがリリヌスされおから問題が発生するたでに、問題を芋぀ける可胜性がれロになるず半幎ではなく、わずか数日しかかかりたせんでした...



質疑応答



結局のずころ、挏れの原因は䜕だったのでしょうか

前述のように、サヌバヌは䞊䜍サヌバヌの応答間でオヌクションを開催したす。 回答が最倧倀を超える堎合、それらは「クリッピング」されたす䞊䜍N個の結果が取埗されたす。

䞊郚はstd :: listに栌玍されたす。ここで、芁玠はbidオブゞェクトぞのポむンタヌです。 コミットの1぀で、トップをトリミングするためのすばらしいコヌドlist.resizemax_resultsが導入されたした。 ご想像のずおり、list.resizeはポむンタヌ芁玠でdeleteを呌び出したせん。 resizeを呌び出す前に、ハンドルを䜿甚しおすべおの䜙分なポむンタヌのメモリを解攟する必芁がありたす。



バグバヌゞョンのリリヌス埌、なぜそんなに長い間リヌクが感じられなかったのですか

サヌバヌの応答は垞に䞊䜍Nの結果になり、䜕も切り捚おられたせんでした。 ある時点で特定のナヌザヌがより倚くの回答を持ち、トップずの干枉をやめたずいうこずです。



以前のバヌゞョンにロヌルバックしなかったため、問題をすぐに特定できなかったのはなぜですか

ここで挔じられたのはヒュヌマンファクタヌです。 実際には、アプリケヌションは開始時にメモリを積極的に消費し始め、数時間匷床を䜎䞋させたす。 恐らく、怜玢の最䞭に、これは継続的なリヌクずしお認識され、問題箇所を特定できたせんでした。



サヌバヌの特定の郚分でのみ問題が発生したのはなぜですか

このサヌバヌグルヌプでサヌビスを提䟛するアカりントのため。 オヌクションに参加した䞀郚の䌁業は、䞊䜍に収たらない倧量の入札を返し始めたした。 他のサヌバヌが提䟛する他のアカりントに぀いおは、すべおの応答がトップオヌクションに含たれおいたか、最倧倀を超えるこずはほずんどありたせんでした。 リストサむズ。



特にJavaで、リヌクに察凊するストヌリヌを教えおください。 「N分ごずにアプリケヌションを再起動する」方法は、普遍的な゜リュヌションずしお非垞に人気がありたすか Linuxや「tcmalloc and co」ではずおも悲しいのですか。



UPD1 このテキストの準備䞭に、 clangを䜿甚しおリヌクを怜出できる可胜性に偶然出くわしたした。



最埌たで読んでくれたみんなに感謝したす



All Articles