2016-11-17 16 views
0

Javaアプリケーションが外部プロセスを多く実行します。アプリケーションのメモリ消費量は着実に増加しています。エラーを再現する最小限の例:Process.exec()内のJVMメモリリーク

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(); 
     } 
    } 
} 

各呼び出しProcess.exec().waitFor()は解放されることはありません64のバイトを割り当てます。これらの割り当てられたメモリはパターンが含まれています

... 
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| 
... 

私は唯一のJVMとARMのLinuxマシンでエラーを守ってください。

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) 

私は、x86のLinuxので同じことをしようとした問題は発生しません。

JVMのバグデータベースに関連するバグは見つかりませんでしたが、JVMを非難する私の以前の試みはすべて私の恥でしたので、JVMを非難したくありません。

リークを引き起こす可能性のある上記のコードに問題がありますか、それとも不明なJVMバグですか?

答えて

4

openjdkバグトラッカーの "waitFor leak"を簡単に検索すると、おそらくJDK-8054841が既に修正されていることがわかります。

最新バージョンへのアップデート。

+0

大丈夫だと思います。ありがとう! –

関連する問題