パフォーマンステストを使用して、オンラインサービスでの高メモリ使用量のトラブルシューティングを行います

問題:サーバーのメモリ使用量が高いままです。
手がかり:ImportCheckFailedEntityに多数の存続インスタンス(インポートファイルで使用)があり、TreeMapとReentrantLockに多数の存続インスタンス(Excelインポートコンポーネントで使用)があります。
理由:1。ThreadLocal
がスレッドプールデータメモリリーク。スレッドプール内のスレッドの寿命は非常に長いため、スレッドプールのスレッドでThreadLocalを使用するには、clearメソッドを呼び出してTreadLocal内のデータをクリアし、メモリを解放
する必要があります。2.ExcelインポートコンポーネントのOPCPackageが使い切ったら、closeメソッドを呼び出して読み取り/書き込みロックを解放する必要がありますロックされたデータ
スコープ:1。poi
を使用してexcelファイルをインポートする機能(リアルタイムまたは非同期を含む)
2。TreadLocalを使用してファイルをインポートする機能(バッチ非同期インポートの処理が使用されます)
。修復後の圧力テスト効果:はいインターフェイス圧力テストをインポートしてから10分後、ヒープメモリ情報分析を取得します。優れたデータオブジェクト情報はありません。ストレステスト中、メモリの増加は非常に小さく、増加傾向はスムーズでゆっくりでした(ygcで回復できることを示しています)
テスト用のインポート関数を選択しましたが、他のインポート関数の最適化方法は同じです。

jstate -gcutil pid 1000 100 #jstat抓取gc信息,每隔1秒打印一次,打印100次
jstack pid jstack #抓取进程线程信息
jmap -heap pid #查看堆内存分配信息

おすすめ

転載: blog.csdn.net/feifeixiongxiong/article/details/110123321
おすすめ