سؤال

لقد تم استخدام جافا خدمة المجمع في تطبيق مخصص لفترة طويلة و كانت تعمل بشكل جيد.منذ تحديث التطبيق إلى الإصدار الجديد في الأيام القليلة الماضية JVM بدأت شنقا ثم المجمع يطبع في هذا السجل:JVM يظهر معلقة:مهلة انتظار إشارة من JVM.

ثم ينتهي تلقائيا JVM ويبدأ التطبيق مرة أخرى.يحدث هذا بعد حوالي 10 ساعات من التشغيل ، مما يجعل من الصعب التصحيح.

بالطبع أنا ذاهب لننظر من خلال التغييرات التي قمنا بها, ولكن لا يكاد أن وأظن أن يسبب هذا النوع من المشاكل.

أين يمكنني أن أنظر إلى محاولة معرفة ما يحدث ؟ رسائل التصحيح من التطبيق لا تشير إلى أي شيء للاهتمام.إذا JVM فقط تعطل فإنه عادة ما خلق تفريغ التي يمكن أن تساعد في تصحيح لكنه شنقا ، لذلك ليس من خلق تفريغ.إذا كان لا يتم إعادة تشغيل الخدمة تلقائيا هل هناك أي شيء يمكنني القيام به للحصول على بعض المعلومات المفيدة من JVM قبل إعادة تشغيل ؟

يبدو لي أن JVM لا تعليق نموذجية من أخطاء البرمجة.ما قد واجهت قبل أن يمكن أن يسبب JVM إلى تعليق ؟

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

المحلول 4

لدي عدة إصدارات مختلفة من مكتبة في classpath (JBPM).مع المجمع يمكنك استخدام أحرف البدل لتشمل الجرار.كن حذرا مع هذا على الرغم من أنك قد قصد تشمل أكثر مما يجب.

هنا هو IBM المادة التي تعطي معلومات عن التصحيح معلقة في جافا.تقول في الأساس أن هناك اثنين من الأشياء التي يمكن أن تسبب توقف:

  1. حلقة لا نهائية ،
  2. طريق مسدود.

ومنذ ذلك الحين لقد كان التصحيح الأخرى معلقة القضايا.على لينكس يمكنك ارسال JVM الإقلاع إشارة إلى أن موضوع تفريغ إلى وحدة التحكم.هذا يساعد حقا في معرفة أين المشكلة.استخدم هذا الأمر للقيام بذلك:قتل الإقلاع

تحرير 6/13/2017

هذه الأيام أنا استخدم jmap المدرجة في JDK تفريغ الذاكرة كاملة من البرنامج.ثم يمكنني استخدام الكسوف الذاكرة محلل لمعرفة الحالة بالضبط من البرنامج عندما تحطمت.يمكنك إلقاء نظرة على قائمة من المواضيع التي تنشط وبعد معاينة المتغيرات في كل الإطار المكدس.

/usr/java/latest/bin/jmap -dump:file=/tmp/app-crash.hprof <PID>

حيث PID هو معرف العملية من عملية جافا.

نصائح أخرى

وتقرأ على wrapper.ping.timeout الملكية . البرنامج المجمع يتصل مع JVM الخاصة بك بين الحين والآخر للتأكد من أنه على قيد الحياة. إذا فشل ذلك الاتصال لأي سبب من الأسباب، يرى المجمع عملية معلقة ومحاولات لإعادة تشغيله.

واعتمادا على كيفية هندستها التطبيق الخاص بك، قد يكون JVM الخاص بك مشغول معالجة شيء آخر عندما يحاول المجمع إلى "بينغ" عليه.

انظر إذا كان يمكنك استخدام البصرية VM لمعرفة ما يجري.وقد البصرية VM مراقبة التطبيق طوال الوقت و عندما توقف عن العمل ربما يمكنك تحديد ما هو الخطأ.

إذا VM معلقة يمكنك الحصول على دولة من المواضيع...أعتقد البصرية VM جعله أسهل قليلا بالنظر إلى الإعداد الخاص بك من المعتاد ctrl-كسر (أو whatver مفتاح التحرير والسرد).

(تحرير استنادا إلى التعليق)

حاول هذا.آخر مرة علق عدد من المواضيع و كمية الذاكرة في استخدام منخفضة جدا ، لذا ولا من تلك التي تسبب المشكلة.للأسف بعد توقف و المجمع إنهاء أنه لا يمكنك على موضوع تفريغ.

هل هناك أي طريقة يمكنك تشغيله بدون المجمع لتصحيح ذلك ؟ أيضا إذا كنت تستخدم NetBeans التعريف قد تعطيك فرصة للتعامل معها عندما توقف (سوف تحقق في وقت لاحق اليوم ونرى ما اذا كان يمكنني معرفة ما إذا كان هذا سوف تتصرف بشكل مختلف).

وماذا بيئة أنت في؟ OS، JVM الإصدار، والأجهزة العمارة؟

وهذا لا يبدو وكأنه علة، ونظرا لأنه يأخذ ساعات طويلة، وهذا يبدو وكأنه علة الموارد الإرهاق من نوع ما.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top