سؤال

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

ملاحظة للقارئ ذو الحساسيات اللطيفة:

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

أسئلة:

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

  • ما هي تكاليف أداء التنميط؟
  • هل هناك أي أسباب أخرى تجعل من فكرة سيئة الاتصال بتطبيق ويب وملف تعريفه عن بعد في الإنتاج (أوضاع الفشل الغريبة، ومشكلات الأمان، وما إلى ذلك)؟
  • ما مدى تأثير التنميط على بصمة الذاكرة؟
  • على وجه التحديد، هل توجد أدوات ملفات تعريف جافا ذات تكاليف أداء منخفضة جدًا؟
  • أي أدوات ملفات تعريف جافا مصممة لملفات تعريف تطبيقات الويب؟
  • هل لدى أي شخص معايير حول تكاليف أداء التوصيف باستخدام visualVM؟
  • ما حجم التطبيقات ومجموعات البيانات التي يمكن لـ visualVM قياسها؟
هل كانت مفيدة؟

المحلول

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

للإجابة على أسئلتكم:

  1. تكاليف غير مباشرة: هؤلاء هم أخذ عينات ملفات التعريف، أي أنها تولد مؤقتًا أو عداد الأداء المقاطعات في فترة زمنية منتظمة، ويقومون بإلقاء نظرة على التعليمات البرمجية التي يتم تنفيذها حاليًا.إنهم يستخدمون ذلك لإنشاء رسم بياني للمكان الذي تقضي فيه وقتك، والنفقات العامة منخفضة جدًا (1-8% هو ما يزعمون) لفترات أخذ العينات معقولة.

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

  2. الاستخدام في الإنتاج: التحذير الوحيد لاستخدام OProfile هو أنك ستحتاج إلى تثبيته على جهاز الإنتاج الخاص بك.أعتقد أن هناك دعمًا للنواة في Red Hat منذ RHEL3، وأنا متأكد من أن التوزيعات الأخرى تدعمه.

  3. ذاكرة: لست متأكدًا من حجم الذاكرة الدقيق لـ OProfile، لكنني أعتقد أنه يحتفظ بمخازن مؤقتة صغيرة نسبيًا ويتخلص منها لتسجيل الملفات من حين لآخر.

  4. جافا: يتضمن OProfile وكلاء ملفات التعريف الذين يدعمون Java ويكونون على دراية بالتعليمات البرمجية التي يتم تشغيلها في JITs.لذلك ستتمكن من رؤية مكالمات Java، وليس فقط مكالمات C في المترجم الفوري وJIT.

  5. تطبيقات الويب: OProfile عبارة عن ملف تعريف على مستوى النظام، لذا فهو ليس على علم بأشياء مثل الجلسات والمعاملات وما إلى ذلك.أن تطبيق الويب سيكون.

    وقيل: إنه أ نظام كامل ملف التعريف، لذلك إذا كانت مشكلة الأداء لديك ناجمة عن تفاعلات سيئة بين نظام التشغيل وJIT، أو إذا كانت موجودة في بعض مكتبات الطرف الثالث، فستتمكن من رؤية ذلك، لأن OProfile يقوم بتكوين ملفات تعريف للنواة والمكتبات.تعد هذه ميزة لأنظمة الإنتاج، حيث يمكنك اكتشاف المشكلات الناتجة عن التكوينات الخاطئة أو تفاصيل بيئة الإنتاج التي قد لا تكون موجودة في بيئة الاختبار الخاصة بك.

  6. فيسوالVM: لست متأكدًا من هذا، حيث ليس لدي خبرة في VisualVM

هنا برنامج تعليمي على استخدام OProfile للعثور على اختناقات الأداء.

نصائح أخرى

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

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

لا حرج في تحديد ملفات تعريف تطبيقات الإنتاج.إذا كنت تعمل على تطبيقات موزعة، فهناك أوقات يحدث فيها استثناء خارج الذاكرة في سيناريو احتمالي فريد جدًا يصعب إعادة إنتاجه في بيئة dev/stage/uat.

يمكنك محاولة استخدام ملفات التعريف المخصصة ولكن إذا كنت في عجلة من أمرك وسيستغرق توصيل/إعداد ملف تعريف upa على صندوق الإنتاج وقتًا، فيمكنك أيضًا استخدام jvm لأخذ تفريغ ذاكرة (يوفر لك تفريغ ذاكرة jvms أيضًا تفريغ مؤشر الترابط)

  1. يمكنك تفعيل الإنشاء التلقائي في سطر أوامر JVM، باستخدام الخيار التالي:-XX:+HeapDumpOnOutOfMemoryError

  2. يحتوي مشروع Eclipse Memory Analyzer على ميزة قوية جدًا تسمى "التجميع حسب القيمة"، والتي تجعل من الممكن إنشاء استعلام كائن وإعادة تجميع المثيلات حسب قيمة الحقل.يعد هذا مفيدًا في الحالة التي يكون لديك فيها الكثير من المثيلات التي تحتوي على مجموعة أصغر من القيم المحتملة، ويمكنك معرفة القيم الأكثر استخدامًا.لقد ساعدني هذا حقًا في فهم بعض عمليات تفريغ الذاكرة المعقدة، لذا أوصيك بتجربتها.

قد تفكر أيضًا في استخدام أحد برامج HotSpot JVM الحديثة - Java Flight Recorder و التحكم في مهمة جافا.إنها مجموعة من الأدوات التي تسمح لك بجمع معلومات وقت التشغيل ذات المستوى المنخفض مع حمل وحدة المعالجة المركزية حوالي 5٪ (لا أستطيع إثبات العبارة الأخيرة بأي حال من الأحوال، هذا هو بيان مهندس أوراكل الذي قدم الميزة والعرض التوضيحي المباشر).

يمكنك استخدام هذه الأداة طالما أن التطبيق الخاص بك قيد التشغيل 1_7u40 JVM أو أعلى.لتمكين جمع معلومات وقت التشغيل، تحتاج إلى تشغيل JVM بعلامات معينة:

بشكل افتراضي، يتم تعطيل JFR في JVM.لتمكين JFR، يجب عليك تشغيل تطبيق Java الخاص بك باستخدام ملحق -XX:+مسجل الطيران خيار.نظرًا لأن JFR هي ميزة تجارية، ولا تتوفر إلا في الحزم التجارية المستندة إلى Java Platform، Standard Edition (Oracle Java SE Advanced وOracle Java SE Suite)، يتعين عليك أيضًا تمكين الميزات التجارية باستخدام -XX: + فتح الميزات التجارية خيارات.

(نقلا عن http://docs.Oracle.com/javase/8/docs/technotes/guides/jfr/about.html#sthref7)

لقد أضفت هذه الإجابة لأن هذا خيار قابل للتطبيق للتوصيف في إنتاج IMO.

كما يوجد أيضًا الكسوف البرنامج المساعد يدعم JFR وJMC وقادر على عرض المعلومات بسهولة الاستخدام.

لقد تحسنت الأدوات بشكل كبير على مر السنين.في هذه الأيام، يستخدم معظم الأشخاص الذين لديهم مثل هذه الاحتياجات أداة ترتبط بواجهة برمجة تطبيقات أدوات Java بدلاً من واجهة برمجة تطبيقات التوصيف.بالتأكيد هناك المزيد من الأمثلة، ولكن NewRelic و ديناميكيات التطبيق تتبادر إلى الذهن.عادةً ما تعمل الحلول القائمة على الأجهزة كوكيل في JVM وتجمع البيانات باستمرار.يقومون بالإبلاغ عن البيانات على مستوى أعلى (المعاملات التجارية، معاملات الويب، معاملات قاعدة البيانات) من نهج التنميط القديم ويسمحون لك بالحفر بشكل أعمق (وصولاً إلى الطريقة أو الخط) إذا لزم الأمر.يمكنك أيضًا إعداد المراقبة والتنبيهات، حتى تتمكن من التتبع/التنبيه بشأن المقاييس مثل أوقات تحميل الصفحة والأداء مقابل اتفاقيات مستوى الخدمة.باستخدام هذه الأدوات الرائعة، لن يكون لديك أي سبب لتشغيل ملف التعريف في الإنتاج بعد الآن.تكلفة تشغيلها لا تذكر.

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