2016-05-17 10 views
0

シェルで高いメモリ使用量( "-Xmx52g")のJavaプログラムを起動すると、すべてうまくいきます。しかし、CRONで同じコマンドと同じユーザーで同じプログラムを起動すると、数秒後にjava.lang.OutOfMemoryErrorが返されます。OOM CRONを使用していますが、SHELLを使用していません

さらに、ブロックされたJavaプログラムを強制終了しない限り、CRONは何もできません。どのcronjobを起動しなくても、syslogには常に「(CRON)エラー(フォークできません)」というメッセージが表示されます。 javaプログラムを終了した後、新しいcronジョブがすべて正常に機能しています。

この問題はUbuntu 16.04でのみ発生し、古いバージョンはすべてうまく機能しました。これはバグか新しいセキュリティ機能ですか?私はこの問題に関する情報は見つけられなかったので、誰もが助けてくれることを願っています。

+0

はcronのような音自体とその生まれた子供たちの間での共有メモリ制限...おそらくのcgroupの制限がありますか? – davmac

+0

私はあなたが正しいかもしれないと思います。しかし、これはバグか、私が自分自身で解決できなければならない/できないものか?私はカスタマイズしないでそのままの状態でプレーンな16.04 Ubuntuサーバイメージを使用します。 – DOB

+0

暴走するcronジョブがシステムを停止させないように制限が設定されている可能性があります。その制限をどのように設定するかに関しては、システム固有のツールや設定ファイルがあるかどうかはわかりません。おそらく、これはプログラミング上の問題ではなく、実際にはスタックエクスチェンジの話題ではないので、serverfaultについて尋ねるべきでしょう。 – davmac

答えて

0

あなたは、RAMやサイズが起動するより多くを必要とし、それ

http://javarevisited.blogspot.com/2011/09/javalangoutofmemoryerror-permgen-space.html

+0

サーバーには十分なRAM(128 GB)があり、古いUbuntuを使用していても16.04ではなくても問題ありません(ただし、CRONではなくSHELLでプログラムを起動すると正常に動作します)。それは、Javaプログラムを起動した後でCRON自体が完全にブロックされるため、どのJava設定でも解決できるものではないようです。たとえば、CRONが単純な "hello world" perlスクリプトを起動する必要がある場合、syslogの "(CRON)エラー(フォークできません)"で失敗します。 CRON自体にある種のメモリ制限があるようです。しかし、なぜ調整するのですか? – DOB

関連する問題