سؤال

وفي كثير من الأحيان، وجدت OutOfMemoryException على IBM بنك الإسكان للتجارة تطبيق الخادم. أعتقد أن يحدث هذا الاستثناء لأن طلبي استرداد البيانات ضخمة من قاعدة البيانات. لذلك، وأنا لحد من كل الاستعلام لا إستعادة بيانات أكثر من 1000 السجلات ووضع JVM من WAS اتبع

+ Verbose garbage collection
+ Maximum Heap size = 1024 (RAM on my server is 16 GB and now I already change to 8192)
+ Debug arguments = -Djava.compiler=NONE -Xdebug -Xnoagent  
                    -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7777
+ Generic JVM arguments = -Dsun.rmi.dgc.server.gcInterval=60000 
                          -Dsun.rmi.dgc.client.gcInterval=60000 -Xdisableexplicitgc  
                          -Dws.log=E:\WebApp\log -Dws.log.level=debug
(ws.log and ws.log.level are my properties)

ولقد وجدت على heapdump و <قوية> javacore و <قوية> المفاجئة ملفات في مجلد الشخصية أعتقد أن هؤلاء يمكن أن تخبرني عن سبب المشكلة ولكن أنا لا ' لا أدري كيف تقرأ / استخدام heapdump، javacore والمفاجئة الملفات.

ومن فضلك قل لي كيف لمنع / تجنب / إصلاح OutOfMemoryException. بفضل

هل كانت مفيدة؟

المحلول

والجواب على هذا تعتمد على الرسالة المرتبطة OutOfMemoryException. يمكنك أيضا محاولة -XX: MaxPermSize = ... وتعيينه إلى شيء أكبر مثل 256M

وبالإضافة إلى ذلك، إذا كان لديك وظيفة متكررة في مكان ما، والتي قد تكون السبب في حدوث فيضان المكدس.

إذا كنت تستطيع، يرجى نشر الرسالة المرتبطة استثناء. تتبع مكدس الذاكرة المؤقتة قد يساعد أيضا.

نصائح أخرى

إذا كنت تريد أن ننظر إلى ملفات تفريغ كومة، IBM يقدم أدوات لتحليلها <لأ href = "http://publib.boulder.ibm.com/infocenter/tivihelp/v3r1/index.jsp؟topic=/ com.ibm.itcamwas_b.doc_6.1 / pdmst_basic56.htm "يختلط =" نوفولو noreferrer "> هنا .

<وأ href = "http://www.ibm.com/developerworks/linux/library/j-nativememory-linux/index.html؟ca=dgr-jw22Linux-JVM&S٪5FTACT=105AGX59&S٪5FCMP=grjw22" يختلط = "نوفولو noreferrer"> "شكرا لذكرى" : عبارة عن مادة جيدة حول استخدام JVMs من الذاكرة، والتي قد تساعد على تحليل هذه المشكلة ...

bwalliser للحصول على هذا الرابط

وحاول إعادة إنشاء المشكلة محليا بحيث يمكنك استخدام أداة مثل JProfiler لتصحيح ذلك. حتى لو كنت لا يمكن فرض OOM محليا، وهناك احتمالات سترى زيادة الذاكرة في JProfiler. ثم هل أخذ لقطات والبحث في الفئات التي لم يتم تجميع البيانات المهملة. انها ليست علما دقيقا، لكنه أسهل بكثير من النظر من خلال heapdump IBM. ومع ذلك، إذا كان لديك، وكانت الطريقة القديمة لدراسة تفريغ كومة مع HeapRoots. قد تعتمد على الإصدار الذي تستخدمه. أنا أعرف أن بعض إصدارات JDK IBM لديهم مشاكل مع ضغط حتى لو كان لديك الكثير من الذاكرة، يمكنك الحصول على OOM لأن هناك ليست كافية جزء كبير المتاحة.

وأفترض باستخدام السبات / JPA كمقدم استمرار؟ هل تستخدم مخبأ المستوى الثاني؟ إذا كان الأمر كذلك هل تعتبر طرد النتائج مجموعات كبيرة من ذاكرة التخزين المؤقت؟

والسؤال هو الصعب الإجابة إذا كنا لا نعرف ما <م> نوع من OutOfMemoryError هو. permgen وheapspace هما حوش مختلفة جدا.

وأنا كان يطارد بيرم جنرال لعدة أشهر على جبوس، على الرغم من أن نوع معين من المشكلة كان العام إلى أي ملقم تطبيق إعادة تحميل تطبيقات الويب على الطاير. تم توثيق الملحمة هنا .

وهذه كومة-مقالب لديك ... يمكن أن يكون التي يمكن تحليلها في الكسوف MAT .

scroll top