تحميل تطبيق Java Web Application - ابحث عن وقت استجابة المعاملة TPS / AVG
-
28-09-2019 - |
سؤال
أرغب في إنشاء أداة اختبار التحميل الخاصة بي في Java بهدف القدرة على تحميل تطبيق الويب الذي أقوم ببنائه طوال دورة التطوير. سيستقبل تطبيق الويب خادمًا لطلبات نشر الخادم HTTP وأرغب في العثور على معاملة البداية في الثانية (TPS) إلى جانب وقت استجابة Avgerage.
ستكون رسائل الطلب ورسائل الاستجابة في XML (لا أعتقد أن هذا ينطبق حقًا على الرغم من :)).
لقد كتبت تطبيق Java بسيط للغاية لإرسال المعاملات وحساب عدد المعاملات التي تمكنت من إرسالها في ثانية واحدة (1000 مللي ثانية) ومع ذلك لا أعتقد أن هذه هي أفضل طريقة لتحميل اختبار. حقًا ما أريده هو إرسال أي عدد من المعاملات في نفس الوقت بالضبط - أي 10 ، 50 ، 100 إلخ.
سيكون موضع تقدير أي مساعدة!
أوه ، وهنا رمز تطبيق الاختبار الحالي الخاص بي:
Thread[] t = new Thread[1];
for (int a = 0; a < t.length; a++) {
t[a] = new Thread(new MessageLoop());
}
startTime = System.currentTimeMillis();
System.out.println(startTime);
for (int a = 0; a < t.length; a++) {
t[a].start();
}
while ((System.currentTimeMillis() - startTime) < 1000 ) {
}
if ((System.currentTimeMillis() - startTime) > 1000 ) {
for (int a = 0; a < t.length; a++) {
t[a].interrupt();
}
}
long endTime = System.currentTimeMillis();
System.out.println(endTime);
System.out.println("Total time: " + (endTime - startTime));
System.out.println("Total transactions: " + count);
private static class MessageLoop implements Runnable {
public void run() {
try {
//Test Number of transactions
while ((System.currentTimeMillis() - startTime) < 1000 ) {
// SEND TRANSACTION HERE
count++;
}
}
catch (Exception e) {
}
}
}
المحلول
هناك بعض المشاكل في الكود الخاص بك. إنه خيار سيء للاستخدام System.currentTimeMillis()
لأنه يستخدم مؤقت النظام الذي لديه الاحكام من 1 ميلي ثانية ، ولكن صحة حوالي 10-20 ميلي ثانية. يجب أن تستخدم System.nanoTime()
لهذه القياسات. وأيضًا يجب أن تكون أداة اختبار التحميل قادرة على اختبار التعليمات البرمجية في بيئة متعددة مؤشرات الترابط.
لذلك ، يجب أن تستخدم أدوات مفتوحة المصدر :)