سؤال

كتبت تطبيقًا يجب مقارنته بأخرى تقوم بنفس الوظيفة .. لي في OCAML بينما يوجد آخر في Java.

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

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

تحرير: نظام التشغيل المثالي هو Mac OS X أو Just Unix

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

المحلول

أستخدم حلًا مماثل لـ Ygrek's. إنه عالمي تمامًا من حيث لغة التنفيذ ، طالما أنك تستخدم UNIX. قضية صغيرة هي أن الأوامر top و ps يمكن استخدام كلاهما لهذا الغرض بشكل مختلف على BSD UNIX (أن Mac OS X مستمد من) و Linux. أعتقد أن سطر القيادة الخاص به هو Linux.

لنظام التشغيل Mac OS X ، اعتدت:

top -s 10 -l 10000 | grep <PID or process name>

وللنوكس:

top -d 10 -n 10000 | grep <PID or process name>

10 هي فترة أخذ العينات في ثوان.

إذا كنت ترغب في الحصول على معلوماتك من GC من OCAML ، فيمكنك استخدامها وحدة GC OCAML, ، لكن هذا لا يمكن مقارنته مباشرة بسلوك برنامج Java.

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

نصائح أخرى

while : ; do ps --no-header -o %cpu,vsz,rss -p PID; sleep 1 ; done

يمكنك مراقبة استخدام Java مع/usr/bin/jviSualVM

يمكن أن يمنحك برنامج مراقبة النشاط تقديرًا تقريبيًا لاستخدام الموارد لأي برنامج معتاد UNIX.

فالغريند Massif يمكن للأداة القيام بذلك للرمز الأصلي.

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