alibaba / alibaba/one-java-agent

One Java Agent本身是否支持重新加载

オープン
#2 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Java
スター
579
フォーク
128
PR マージ指標
30日以内にマージされた PR はありません

説明

One Java Agent本身是一个Java Agent,它要支持两种Java Agent的工作方式:

* premain
* agentmain

但如果按普通的方式实现,java agent jar会被加到 SystemClassLoader里,那么这个Agent本身是没办法实现更新的。

如果要支持动态更新,那么就要像arthas那样,再包装一层,引用一个自定义的ClassLoader,再来启动。

但这样子会带来复杂性:

1. Agent wrapper这一层代码,它本身是要有日志输出到哪/怎么加载配置项等问题的
1. Agent core这一层,它能否加载到SystemClassLoader的类?
1. plugin 的ClassLoader,它的parent是否应该是 Agent core的ClassLoader?
1. plugin 里的代码,能否加载到 SystemClassLoader里的类?

---

考虑到复杂性,是否简单起见,One Java Agent本身即一个传统的Java Agent,它自身不考虑可以更新?

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

調査の方向性

まず、Java Agent が premain と agentmain でどのように起動されるかを追跡し、次に issue で提案されている wrapper、agent core、plugin ClassLoader の境界を確認してください。issue にはソースファイル、テスト、エントリーポイントが示されていないため、最初にそれらの領域を特定し、実装前に動的な再読み込みが必要かどうかを明確にしてください。合意されたローディング設計があり、クラスのロード動作が文書化されていれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
java
領域
devtools
issue の種類
機能追加
難易度
5/5
見積もり時間
1週間以上
活発さ
停滞
明瞭さ
説明が足りない
初心者へのやさしさ
20/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。