Ich habe eine Java-Anwendung, die eine native Funktion aufruft. Diese native Funktion enthält eine Schleife und startet in jeder Iteration 10 Threads und wartet auf deren Abschluss. Jeder Thread führt eine Reihe zufälliger Speicherzuweisungen durch, die dann im selben Thread wieder freigegeben werden. Nach jeder Iteration verfolge ich Speicherberichte von /proc/PID/status (VmRSS) und Felder von /proc/$PID/statm.
Wenn ich AttachCurrentThread() nicht in den Threads aufrufe, bleibt der Speicherverbrauch wie erwartet flach. Wenn ich jedoch AttachCurrentThread() am Anfang jedes Threads und DetachCurrentThread() am Ende aufrufe, scheint es einen Speicherverlust zu geben: Die für VmRSS und die „residente“ Spalte in /proc/$PID/statm gemeldeten Zahlen nehmen ständig zu.
Muss ich irgendetwas tun, um den Thread ordnungsgemäß von der JVM zu trennen? Behält die JVM aus irgendeinem Grund Speicher? Meine tatsächliche Anwendung ist viel größer als der hier bereitgestellte Beispielcode und hat irgendwann nicht mehr genügend Speicher, offenbar aufgrund des in diesem Test beobachteten Lecks.
Meine JVM ist:
Ich habe eine Java-Anwendung, die eine native Funktion aufruft. Diese native Funktion enthält eine Schleife und startet in jeder Iteration 10 Threads und wartet auf deren Abschluss. Jeder Thread führt eine Reihe zufälliger Speicherzuweisungen durch, die dann im selben Thread wieder freigegeben werden. Nach jeder Iteration verfolge ich Speicherberichte von /proc/PID/status (VmRSS) und Felder von /proc/$PID/statm. Wenn ich AttachCurrentThread() nicht in den Threads aufrufe, bleibt der Speicherverbrauch wie erwartet flach. Wenn ich jedoch AttachCurrentThread() am Anfang jedes Threads und DetachCurrentThread() am Ende aufrufe, scheint es einen Speicherverlust zu geben: Die für VmRSS und die „residente“ Spalte in /proc/$PID/statm gemeldeten Zahlen nehmen ständig zu. Muss ich irgendetwas tun, um den Thread ordnungsgemäß von der JVM zu trennen? Behält die JVM aus irgendeinem Grund Speicher? Meine tatsächliche Anwendung ist viel größer als der hier bereitgestellte Beispielcode und hat irgendwann nicht mehr genügend Speicher, offenbar aufgrund des in diesem Test beobachteten Lecks. Meine JVM ist: [code]$ java -version openjdk version "21.0.9" 2025-10-21 OpenJDK Runtime [url=viewtopic.php?t=25360]Environment[/url] (build 21.0.9+10-Ubuntu-124.04) OpenJDK 64-Bit Server VM (build 21.0.9+10-Ubuntu-124.04, mixed mode, sharing) [/code] Mit dem folgenden Code habe ich Folgendes ausgeführt: [code]make run make run ARGS=--no-attach [/code] um diesen Bericht zu erstellen: [img]https://i.sstatic.net/GPXy0HwQ.png[/img]
[b]Java-Code:[/b] [code]public final class Leak { static { System.loadLibrary("library"); } public static native void randomAllocations(boolean attach);
public static void main(String[] args) { boolean attach = true; for (String arg : args) { if (arg.equals("--no-attach")) attach = false; else throw new RuntimeException("Unknown argument " + arg); } randomAllocations(attach); } } [/code]
#define threads 10 /* Number of threads to use. */ #define count 10000 /* Number of memory allocations in each thread. */ #define repeats 60 /* Number of repetitions of main loop. */ static JavaVM *jvm = NULL; /* Java virtual machine (set in native function). */
/* Dump statistics read from /proc to CSV file. */ static void dumpStats(FILE *out) { long long const pid = getpid(); char filename[64]; char line[256]; char *endptr; FILE *f; long VmRSS, VmHWM; long size, resident, shared, text, lib, data, dt;
Dies ist ein spezifisches Problem, das ich beim Erstellen der MRE für meine frühere Frage festgestellt habe. Es ist nicht klar, ob es sich um dasselbe Problem handelt, auch wenn es verwandt zu sein...
Ich habe ein „Speicherleck“-Problem mit Pandas Dataframe. Anscheinend handelt es sich hierbei um ein bekanntes Problem: Speicherverlust bei Pandas-Datenrahmen
Die in der Antwort verwendeten Tricks...
Ich habe eine Laravel 11-Anwendung, auf der PHP 8.3 und Redis 7 ausgeführt werden. Ich habe hier einen einfachen Handwerkerbefehl, der die Speichernutzung innerhalb einer while--Schleife...
Ich weiß nicht, warum oder was undicht ist, aber es funktioniert nicht richtig. Leider hätte kein Chatbot diese Frage lösen können. Irgendwelche Ideen. Stattdessen werden zufällige Werte ausgegeben....
Ich verwende Django + Celery für Daten-Crawling-Aufgaben, aber die Speichernutzung des Celery-Workers steigt mit der Zeit immer weiter an und sinkt nie, nachdem jede Aufgabe abgeschlossen ist.
Ich...