سؤال

في يوم من الأيام ، يرتفع استخدام تطبيق الويب جافا الخاص بنا بنسبة 100٪ لوحدة المعالجة المركزية. إعادة التشغيل تحل الحادث ولكن ليس المشكلة لأنه بعد ساعات قليلة من عودة المشكلة. لقد اشتبهنا في وجود حلقة لا نهائية تم تقديمها بواسطة إصدار جديد ولكننا لم نجري أي تغيير على الشفرة أو على الخادم.

تمكنا من العثور على المشكلة عن طريق إجراء العديد من عمليات تفريغ سلاسل الرسائل باستخدام kill -QUIT ومن خلال البحث عن تفاصيل كل سلسلة محادثات ومقارنتها. وجدنا أن مكدس استدعاءات مؤشر ترابط واحد يظهر في جميع عمليات تفريغ سلاسل الرسائل. بعد التحليل ، كان هناك شرط حلقة while loop التي لا تصبح خاطئة مطلقًا بالنسبة لبعض البيانات التي تم تحديثها بانتظام في قاعدة البيانات.

يعد تحليل العديد من عمليات تفريغ سلاسل الرسائل لتطبيق الويب أمرًا مملًا حقًا.

هل تعرف إذن طريقة أو أدوات أفضل للعثور على مثل هذه المشكلة في بيئة الإنتاج؟

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

المحلول

بعد بعض الاستفسارات ، وجدت إجابة في مراقبة وإدارة جافا تطبيقات منصة SE 6 :

يمكنك تشخيص تكرار سلسلة الرسائل باستخدام الأداة المتوفرة من JDK والتي تسمى JTop والتي ستعرض وقت وحدة المعالجة المركزية التي يستخدمها كل مؤشر ترابط:  أدخل وصف الصورة هنا

باستخدام اسم سلسلة الرسائل ، يمكنك العثور على تتبع المكدس لهذا الموضوع في علامة تبويب "الخيوط" من خلال إجراء تفريغ للخيط باستخدام إنهاء QUIT.

يمكنك الآن التركيز على الكود الذي يسبب الحلقة اللانهائية.

ملاحظة: يبدو أنه من الجيد الإجابة على سؤالي وفقًا لـ http: / /blog.stackoverflow.com/2008/07/stack-overflow-private-beta-begins/ : [...] "نعم ، لا بأس ، بل إننا نشجعك على الإجابة عن أسئلتك ، إذا وجدت إجابة جيدة قبل أي شخص آخر." [...]

ملاحظة: في حالة عدم وجود مجال sun.com: يمكنك تشغيل JTop كواجهة مستخدم رسومية قائمة بذاتها: Genacodicetagpre

بالتناوب ، يمكنك تشغيله كمكوِّن إضافي لـ JConsole:

Genacodicetagpre

نصائح أخرى

أصلح المشكلة قبل حدوثها!استخدم أداة تحليل ثابتة مثل FindBugs أو PMD كجزء من نظام الإنشاء لديك.لن تجد كل شيء ، لكنها خطوة أولى جيدة.

فكر في استخدام أدوات التغطية مثل Cobertura. كان سيظهر لك أنك لم تختبر مسارات الرموز هذه.

اختبار شيء.يمكن أن يصبح مثل هذا أمرًا مرهقًا حقًا ، لذا حاول تجنب ذلك من خلال إدخال مقاييس الجودة.

على أي حال ، ستمنحك أدوات مثل VisualVM نظرة عامة لطيفة على جميع سلاسل الرسائل ، لذلك يصبح من السهل نسبيًا تحديد السلاسل التي تعمل لفترة طويلة بشكل غير متوقع.

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