أفضل طريقة لاستخدام ذاكرة الملف الشخصي في تطبيق Java؟

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

سؤال

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

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

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

هل قام أحد هنا بعمل أي شيء مثل هذا؟

شكرا مقدما.

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

المحلول

مع شيء مثل JProfiler، كل ما عليك فعله هو إضافة معايير معينة إلى JVM. يستخدم jvmti.

أعتقد أنك يجب أن تكون تقرأ عن ملامح المواقع والضبط ما يمكنهم القيام به من أجلك. أقترح أيضا القراءة على JVMTI.

واجهة أداة JVMTM (JVM TI) هي واجهة برمجة أصلية جديدة للاستخدام حسب الأدوات. يوفر طريقة لفحص الدولة والتحكم في تنفيذ التطبيقات التي تعمل في الجهاز الظاهري Java (JVM). يدعم JVM TI الاتساع الكامل للأدوات التي تحتاج إلى الوصول إلى حالة JVM، بما في ذلك على سبيل المثال لا الحصر: التنميط، تصحيح الأخطاء، المراقبة، تحليل الخيط، وأدوات تحليل التغطية.

ملاحظة: يحل JVM TI محل واجهة Profiler Java Virtual Machine (JVMPI) واجهة تصحيح الجهاز الظاهري Java (JVMDI). سيتم إزالة JVMPI و JVMDI في الإصدار الرئيسي التالي من J2Setm.

نصائح أخرى

yourkit. لديها أيضا profiler جيدة جدا

هل تحققت

visualvm. و eclipse-callisto.?

مكان جيد للبدء هو معرفة ما إذا كان JVM يدعم "Java -xrunhprof" لأن هذا يمكن أن ينشئ معلومات تنميط الكومة دون إجراء السيناريو الخاص بك أكثر تعقيدا.

يرى http://docs.oracle.com/javase/7/docs/technotes/samples/hprof.html.

قد تجد أنه بما يكفي بالنسبة لك للبدء.

العديد من المواطن التعريفي مثل yourkit. لديك API لتتبع تخصيصات الذاكرة. خيار آخر هنا هي أدوات مراقبة مثل jxinsight.أو صندوق زجاجي أو جامون

لتحليل كومة مقالبEclipse Memory Analyzer. هي أفضل أداة يمكنك الحصول عليها. إنه مصدر مجاني ومفتوح، حتى تتمكن من أتمتة تحليل مقالب كومة الكومة بقدر ما تريد.

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

يمكنك استخدام jrcmd. وهو أداة مساعدة لسطر الأوامر تأتي مع JRockit JVM. إذا كنت تعرف PID من عملية Java، يمكنك فقط القيام:

JROCKIt_HOME\bin\jrcmd <pid> print_object_summary

وسوف يعطيك:

31.8% 3198k    41907   -137k [C
11.9% 1196k      300     +0k [B
11.4% 1151k    49118     +6k java/lang/String
 6.1% 612k     5604     +0k java/lang/Class
 4.3% 431k     2388     +0k [I
 3.5% 353k    15097     +0k java/util/HashMap$Entry
 ...

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

أوصي بطبعة إنتاج DynaTrace. أداة مذهلة لتطبيق ذاكرة الملف الشخصي. انخفاض النفقات العامة و 100٪ من المعاملات المنفذة.

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