إذا كان لديك جافا التطبيقات التي تستهلك CPU عندما لا تفعل أي شيء ، كيف يمكنك تحديد ما هو فاعل ؟

StackOverflow https://stackoverflow.com/questions/12927

  •  08-06-2019
  •  | 
  •  

سؤال

انا اتصل بائع جافا API على بعض ملقمات يبدو أن JVM يذهب إلى أولوية منخفضة الاقتراع حلقة بعد تسجيل الدخول إلى API (وحدة المعالجة المركزية بنسبة 100% الاستخدام).نفس التطبيق على خوادم أخرى لا يحمل هذا السلوك.يحدث هذا على WebSphere و هر.البيئة هي صعبة لإعداد لذا فمن الصعب أن تحاول أن تفعل شيئا مثل التنميط في الكسوف.

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


تحديث:

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

شكرا جزيلا, يشوع, الإجابة.JConsole كان من السهل جدا أن الإعداد والاستخدام لمراقبة تطبيق موجود.

@ارتد فعلت بعض التجارب مع بعض من الخيارات المقترحة.كان لدي بعض المشاكل في الحصول على JProfiler ، تبدو جيدة (ولكن الثمن).تسير إلى الأمام ذهبت إلى الأمام و أضاف الكسوف التعريف المساعد عن مختلف مفتوحة المصدر المحللون مقارنة الأداء الوظيفي.

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

المحلول

إذا كنت تستخدم جافا 5 أو في وقت لاحق, يمكنك الاتصال إلى التطبيق الخاص بك باستخدام jconsole لعرض كافة مؤشرات الترابط قيد التشغيل.jstack أيضا سوف تفعل تفريغ المكدس.وأعتقد أن هذا يجب أن لا تزال تعمل حتى داخل حاوية مثل القط.

كل من هذه الأدوات المضمنة مع JDK5 وما بعدها (أفترض أن هذه العملية يجب أن تكون على الأقل جافا 5 ، على الرغم من أنني يمكن أن تكون خاطئة)

تحديث:كما انه من الجدير بالذكر أن تبدأ مع JDK 1.6 تحديث 7 هناك الآن المجمعة التعريف يسمى VisualVM التي يمكن إطلاقها مع 'jvisualvm'.يبدو أنه هو java.net المشروع, لذا معلومات إضافية قد تكون متاحة في هذه الصفحة.أنا لم تستخدم هذا بعد ولكن يبدو مفيدا أكثر خطورة التحليل.

على أمل أن يساعد

نصائح أخرى

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

وهناك طريقة أخرى للكشف عن تحميل وحدة المعالجة المركزية (طريق JNI ، لذلك كنت بحاجة خارجي المكتبة لهذا) في "الوكالة الدولية للطاقة" الموضوع مع أعلى الأولويات والبدء في تسجيل جميع المواضيع عندما وحدة المعالجة المركزية عالية بما فيه الكفاية لفترة طويلة ما يكفي من الوقت.قد تجد هذه المادة enlightining.

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

جديد(?) المشروع من الكسوف المشروع في حد ذاته هو متاح أيضا: http://www.eclipse.org/tptp/ (انظر هذه المادة).لن تستخدمها أبدا لذا لا أستطيع أن أقول إذا كان الأمر يستحق الجهد.

هناك أيضا جيدة جدا قائمة مفتوحة المصدر المحللون المتاحة في http://www.manageability.org/blog/stuff/open-source-profilers-for-java

JRockit بعثة مراقبة الكمون محلل.

الكمون محلل الذي يأتي مع JRockit يظهر لك ما JVM هو "فعل" عندما لا تفعل أي شيء.في أحدث إصدار ترون الإختفاء عن:

  • جافا الانتظار/المحظورة/النوم/متوقفة.
  • ملف I/O
  • شبكة I/O
  • تخصيص الذاكرة
  • GC مؤقتا
  • JVM الإختفاء, e.رمز g الجيل والطبقة التحميل
  • موضوع التعليق

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

الكمون محلل http://blogs.oracle.com/hirt/WindowsLiveWriter/The.0LatencyAnalyserMigratedfromtheoldBE_7246/latency_graph_2.png

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

انها حرة في استخدام للتنمية!

إذا JConsole لا يمكن أن تستخدم يمكنك

  • اضغط CTRL+كسر تحت ويندوز
  • إرسال kill -3 <process id> تحت لينكس

الحصول على عرض كامل الموضوع تفريغ.هذا لا يؤثر على الأداء يمكن أن يكون دائما تشغيل في الإنتاج.

استخدام منشئ ملفات التعريف. نعم أنها تكلف المال ، ويمكن استخدامها أحيانا يكون محرجا بعض الشيء, لكنها لا توفر لك قدرا أكبر دليل حقيقي بدلا من التخمين.

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

كما ذكر سواء JProfiler و YourKit على حد سواء جيدة إلى حد ما و ليس مكلفا.آخر مرة نظرت كلاهما حر العروض أيضا.

لأجل اكتمال:على الرغم من بلدي الشركة أكثر أو أقل توحد على الكسوف نستخدم Netbeans (6 وما فوق) مع وشملت مجانا التعريف على أساس يومي.أنه يعمل بشكل أفضل من الكسوف TPTP المساعد (آخر فحص 3 أشهر) كما يزيل أي حاجة التجارية التعريف مثل JProfiler التي ممتاز ، ولكن سرعان ما أصبحت ضرورية.

VisualVM يجب أن يكون التعريف من netbeans بذاتها.حاولت TPTP عن الكسوف ولكن visualVm يبدو أجمل بكثير الخيار!

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