BUG Memory leak when use agent
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 25/100
- Tipo di issue
- Bug
- Chiarezza
- Da chiarire
- Stato di attività
- Ferma
- Stack tecnologico
- java
- Ambito
- observability-sre
Direzione di ricerca
Inizia dalla chiamata a PyroscopeAgent.start e traccia la gestione da parte dell'agent degli snapshot ripetuti e dell'implementazione personalizzata di GalileoProfileExporter.export. Riproduci il report con la configurazione 0.12.0 fornita e monitora la memoria mentre vengono eseguiti gli upload. Il lavoro è completato quando viene identificata la fonte della crescita sostenuta della memoria e l'agent non conserva più inaspettatamente i dati di profiling completati.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
I use 0.12.0 agent upload JFR data to my backend.
<dependency>
<groupId>io.pyroscope</groupId>
<artifactId>agent</artifactId>
<version>0.12.0</version>
</dependency>
Upload code:
Config profileConfig = new Config.Builder()
.setFormat(Format.JFR)
.setLogLevel(Logger.Level.INFO)
.setProfilingEvent(EventType.ITIMER)
.setProfilingAlloc("0")
.setProfilingInterval(Duration.ofMillis(10))
.setUploadInterval(Duration.ofSeconds(5))
.build();
GalileoProfileExporter exporter = new GalileoProfileExporter(resource, DEFAULT_RETRY);
PyroscopeAgent.start(new PyroscopeAgent.Options.Builder(profileConfig).setExporter(exporter).build());
My exporter:
public class GalileoProfileExporter implements Exporter {
private static final Duration TIMEOUT = Duration.ofSeconds(10);
private static final String ENDPOINT = "https://xxxxxxxxxxxxx";
final Ocp.Resource resource;
final int ingestMaxTries;
final Logger logger = new DefaultLogger(Logger.Level.INFO, System.err);
final OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(TIMEOUT)
.readTimeout(TIMEOUT)
.callTimeout(TIMEOUT)
.build();
public GalileoProfileExporter(Ocp.Resource resource, int ingestMaxTries) {
this.resource = resource;
this.ingestMaxTries = ingestMaxTries;
}
@Override
public void export(Snapshot snapshot) {
final HttpUrl url = HttpUrl.parse(ENDPOINT);
logger.log(Logger.Level.INFO, "Upload profile. %s %s JFR: %s",
snapshot.started.toString(), snapshot.ended.toString(), snapshot.data.length);
byte[] reqBody = constructReqBody(snapshot);
byte[] compressedData = new byte[0];
try {
compressedData = Snappy.compress(reqBody);
} catch (IOException e) {
logger.log(Logger.Level.ERROR, "Error compress snapshot.");
}
MediaType type = MediaType.parse("application/octet-stream");
RequestBody jfrBody = RequestBody.create(compressedData, type);
Request.Builder request = new Request.Builder()
.post(jfrBody)
.url(url);
request.header("language", "java");
try (Response response = client.newCall(request.build()).execute()) {
int status = response.code();
if (status >= 400) {
ResponseBody body = response.body();
final String responseBody;
if (body == null) {
responseBody = "";
} else {
responseBody = body.string();
}
logger.log(Logger.Level.ERROR, "Error uploading snapshot: %s %s", status, responseBody);
}
if (status == 200) {
logger.log(Logger.Level.INFO, "Success upload jfr");
}
} catch (final IOException e) {
logger.log(Logger.Level.ERROR, "Error uploading snapshot: %s", e.getMessage());
}
}
private byte[] constructReqBody(Snapshot snapshot) {
Otp.Profile.Builder profile = Otp.Profile.newBuilder()
.setName("jfr")
.setType("cpu")
.setData(ByteString.copyFrom(snapshot.data));
Otp.ProfilesBatch profilesBatch = Otp.ProfilesBatch.newBuilder()
.setSequence(1)
.setStart(snapshot.started.toEpochMilli() / 1000)
.setEnd(snapshot.ended.toEpochMilli() / 1000)
.setResource(this.resource)
.addProfiles(profile)
.build();
return profilesBatch.toByteArray();
}
}
When I opened the agent report, I found that the memory was constantly rising, and I suspected there was a memory leak situation
Is there anyone who has encountered similar problems with me, or is there a problem with where I wrote it? Thanks
- Lingua principale
- Java
- Stelle
- 125
- Fork
- 48
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di grafana/pyroscope-java
-
Clean up dead publishing repository config and credentials in subproject build filesForse già presa @arnabnandy7 l’ha presa 27 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
grafana/pyroscope-java#294 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 54/100
grafana/pyroscope-java#371 · 2 reazioni ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
grafana/pyroscope-java#368 · 1 commento ·
-
improve asprof extractionAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
grafana/pyroscope-java#283 ·
-
libasyncProfiler-linux-x64.so dump in /tmpForse di nuovo libera @korniltsev-grafanista l’ha presa 265 giorni fa e non c’è nessuna pull request aperta. Aperta
grafana/pyroscope-java#250 · 1 commento · 1 assegnatario ·
Tutte le issue di grafana/pyroscope-java
Issue simili
-
[Bug] Lock owned by another client (e.g. Text app) cannot be unlocked from the appForse già presa @falkloewert l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
oracle/graalvm-reachability-metadata#11026 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
checkstyle/checkstyle#22050 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement Improvement
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
zowe/zowe-client-java-sdk#647 ·
-
RRX SAX: </rdf:RDF> inside rdf:parseType="Literal" ends the document ("Inconsistent parserMode:TOP")Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
apache/jena#4334 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno