2011-02-10 16 views
2

私はJavaを初めて使用しており、バグを修正するためのタスクが与えられており、この問題は次のとおりです。それはあなたが提案/アイデアを与えるならば、この問題は何ですか、本当に素晴らしいことだとどのように私はこの問題を解決することができます。:Javaの根本原因java.lang.OutOfMemoryErrorエラー

HTTP Status 500 - 

-------------------------------------------------------------------------------- 

type Exception report 

message 

description The server encountered an internal error() that prevented it from fulfilling this request. 

exception 

org.apache.jasper.JasperException 
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:453) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368) 


root cause 

javax.servlet.ServletException 
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858) 
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791) 
    org.apache.jsp.CustMaint.Jsp.ProfProfileDetails_jsp._jspService(ProfProfileDetails_jsp.java:4016) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368) 


root cause 

java.lang.OutOfMemoryError 


note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs. 


-------------------------------------------------------------------------------- 

Apache Tomcat/5.5.17 
+1

Welcome to Stackoverflow!あなたが気付かなかった場合は、メッセージエディタの中にいるときはいつでも、メッセージエディタの下のプレビューエリアでメッセージフォーマットを確認することができます。今後これに少し注意を払ってください:) – BalusC

+0

Tomcatのログから根本原因のスタックトレースを見て、コメントすることができるようにする必要があります。 – trojanfoe

+0

参照:http://stackoverflow.com/questions/37335/how-to-deal-with-java-lang-outofmemoryerror-java-heap-space-error-64mb-heap-s –

答えて

7

ここではTomcatの人が言っているものだ:メモリーの

アン・アウトすることができます

  • メモリにいくつかの ギガバイトのファイルをロードしようとしているサーブレットが確実に サーバーを殺す: いくつかの原因によってスローされます。この種のエラー は、 プログラムの単純なバグとみなされる必要があります。

  • データを補正するために サーブレットをロードしようと が を作成する必要があるスレッドのスタックサイズ を作成するための余地がないように、あなたは、ヒープサイズを増やす 。各 スレッドが必要とするメモリはOSによって異なりますが、既定では が2Mと高く、一部のOSでは (Debian Sargeなど)は の-Xssパラメータでは縮小できません。 1のルール Thumbは、32ビットWebアプリケーションのヒープ数が の場合は1Gを超えないようにしてください。

  • 深い再帰アルゴリズムも はメモリ不足の問題につながります。 この場合、スレッドスタックサイズを (-Xss)に増やすか、またはアルゴリズムをリファクタリングして深さを減らすか、ローカルデータの をコールごとにリファクタリングすることが唯一の修正プログラムです( )。

  • 、多くの依存関係を持つライブラリの多く を使用していますか Webアプリケーションの多くを維持し、サーバがJVM PermGen スペースをexhauste可能性がWebアプリケーション。この空間は、VM がクラスとメソッドのデータを格納する場所です。 このような場合、このサイズを大きくする修正があります。 SunのVMは、そのサイズを設定することを可能にするフラグ -XX:MaxPermSize ClassLoaderが破棄されたときにクラスへ

  • ハード参照は、それらに割り当てられ メモリを再利用から ガベージコレクタを防止することができる(デフォルト値は64Mである)を有します。これにより、JSP再コンパイル時に が発生し、 Webアプリケーションがリロードされます。これらの操作 がこれらの 種類の問題を持つWebアプリケーションで一般的な場合は、PermGenのスペースが になり、Out of Memoryがスローされるまで、時間は になります。

出典:Tomcat Wiki: OutOfMemory

+0

今日の解答!! – Barry

+0

'深い再帰アルゴリズムは、メモリ不足問題​​にもつながります。この場合、唯一の修正点は、スレッドスタックサイズ(-Xss)を増やしたり、深さを減らすためにアルゴリズムをリファクタリングしたり、呼び出しごとにローカルデータサイズを増やしたりすることです。**原因** StackOverflow ** Error、どちらもVirtualMachineErrorですが、ポイントを超えて – bestsss

+0

直接バッファを使用すると、OOMが発生する可能性があります。 – bestsss

0

この種の問題は、単にスタックトレースをもとに見極めることは容易ではありません。少なくともあなたのアプリケーションでメモリリークが発生している(コードが(不必要に)メモリ内に(不必要に)長い時間、オブジェクトが余分に保存されている)か、サーバーがメモリが不足しているwebappを実行できるようにするためです(単に多くのメモリを必要とするように設計されているからです)。

メモリリークを検出して修正するには、Javaプロファイラを使用します。メモリリークがない、つまりメモリ使用量は安定していますが、実際にはそのメモリに多量のメモリが必要な場合は、サーバにメモリを増やすだけです。しかし、プロファイラはWebappのメモリホールを見つけ出し、それに応じてコードを最適化するのにも役立ちます。

Eclipseを使用している場合はTPTP profilerを使用するか、Netbeansを使用している場合はVisualVM profilerビルトインを使用してください。また、スタンドアロンのVisualVMを使用している場合は、this blogでTomcatを監視する方法をチェックしてください。

0

Eclipseマットhttp://www.eclipse.org/mat/でJavaヒープ解析ツール(JHAT)を使用して、JVM内で何が起こっているのかを分析します。どのくらいのメモリを食べている。プロファイルを参照して、それを引き起こすコードを見てください。

JConsoleを使用することもできます。セットアップが簡単ではありません。そして、あなたはものが「生きている」ことを見ることができます。 TPTPも良い選択ですが、残念ながら設定が難しいです。

2

まあ... who 本当にがメモリ不足エラーを起こしましたか?

あなたがピザの8スライスを食べて、あなたがいっぱいであれば、それは胃のエラーの原因となった最後のスライスですか?

+1

笑!本当に上告することはできません。しかし、「好きな」ボタンがある場合は、必ずこの回答をクリックします。 – Nishant

関連する問題