2016-11-17 5 views
0

Meine Java-Anwendung führt viele externe Prozesse aus. Der Speicherverbrauch der Anwendung wächst stetig. Ein minimales Beispiel Reproduzieren der Fehler:JVM-Speicherverlust in Process.exec()

import java.io.IOException; 
public class JSpawnTest { 
    public static void main(String[] args) { 
    while(true) { 
     try { 
      Process p = Runtime.getRuntime().exec("ls"); 
      p.waitFor(); 
      p.getOutputStream().close(); 
      p.getInputStream().close(); 
      p.getErrorStream().close(); 
     } catch (InterruptedException | IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Jeder Anruf Process.exec().waitFor() zuordnet 64 Bytes, die nie freigegeben werden. Diese zugewiesenen Speicher enthält das Muster:

... 
00 00 00 00 45 00 00 00 2f 75 73 72 2f 6c 69 62 |....E.../usr/lib| 
2f 6a 76 6d 2f 6a 61 76 61 2d 37 2d 6f 70 65 6e |/jvm/java-7-open| 
6a 64 6b 2f 6a 72 65 2f 6c 69 62 2f 61 72 6d 2f |jdk/jre/lib/arm/| 
6a 73 70 61 77 6e 68 65 6c 70 65 72 00 8b 52 39 |jspawnhelper..R9| 
00 00 00 00 45 00 00 00 2f 75 73 72 2f 6c 69 62 |....E.../usr/lib| 
2f 6a 76 6d 2f 6a 61 76 61 2d 37 2d 6f 70 65 6e |/jvm/java-7-open| 
... 

ich den Fehler beobachten nur auf einem ARM-Linux-Rechner mit JVM:

java version "1.7.0_75" 
OpenJDK Runtime Environment (IcedTea 2.5.4) (75b13-2.5.4) 
OpenJDK Zero VM (build 24.80-b07, mixed mode) 

habe ich versucht, das gleiche bei x86 Linux und das Problem tritt nicht auf.

Ich habe keinen verwandten Fehler in der JVM-Fehlerdatenbank gefunden, aber ich möchte JVM nicht beschuldigen, weil alle meine früheren Versuche, JVM zu beschuldigen, mit meiner Schande geendet haben.

Gibt es etwas Schlechtes mit dem obigen Code, das ein Leck verursachen könnte oder ist es ein unbekannter/bekannter JVM-Fehler?

Antwort

4

Eine einfache Suche nach "waitFor leak" auf dem Openjdk Bug Tracker zeigt, dass dies wahrscheinlich JDK-8054841 ist, die bereits behoben ist.

Aktualisierung auf eine aktuelle Version.

+0

ok, Sie haben wahrscheinlich den Punkt getroffen. Vielen Dank! –