سؤال

لقد حصلت على تطبيق ويب يعمل ببطء شديد وأحيانًا معلقًا. إنه تطبيق الويكيت المتعلق بالمدرسة مع إعداد التقارير والتحرير ، وأيضًا خدمة يستخدمها العملاء الآليون للحصول على/نشر البيانات عبر HTTPS.

خلال الأوقات المزدحمة التي يحدث فيها الكثير من التحرير/التحميل/التنزيل ، يصبح التطبيق بطيئًا وغير مستجيب. أحصل على أخطاء "Pagemap لا تزال مغلقة". يبدو أن Tomcat يحتفظ بالتشويش. استخدام الذاكرة يمكن التحكم فيه ، حوالي 50 متر.

لقد قمت بإعداد YouRkit للحصول على بعض معلومات التوصيف ، وخلال فترة مزدحمة وجدت أن 81 ٪ من وقت وحدة المعالجة المركزية Tomcat يقضي هنا:

org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run()
org.apache.jk.common.ChannelSocket$SocketConnection.runIt(Object[])
org.apache.jk.common.ChannelSocket.processConnection(MsgContext)
org.apache.jk.common.ChannelSocket.receive(Msg, MsgContext)
org.apache.jk.common.ChannelSocket.read(MsgContext, byte[], int, int)
java.io.BufferedInputStream.read(byte[], int, int)
java.io.BufferedInputStream.read1(byte[], int, int)
java.io.BufferedInputStream.fill()
java.net.SocketInputStream.read(byte[], int, int)
[Wall Time]  java.net.SocketInputStream.socketRead0(FileDescriptor, byte[], int, int, int)

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

إذن ما هذا النشاط 81 ٪؟ هل يمكن لعدد قليل من العملاء الذين لديهم اتصالات بطيئة حقًا أن يقللوا من خيوط Tomcat عن طريق التسبب في انتظار جثث الطلبات الواردة؟

أي شخص يرى أي شيء من هذا القبيل ، أو لديه أي نصيحة حول كيفية اختبار/استكشاف الأخطاء وإصلاحها/إصلاح هذا؟

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

المحلول

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

نصائح أخرى

ربما يكون استخدام الذاكرة هو السبب.
يجب عليك التحقق من استخدام الذاكرة لعملية Java لمعرفة مقدار ما تحصل عليه.
إذا لم تحصل على ما يكفي ، فيجب عليك تعيين معلمة XMX JVM أينما تم تعيينها لـ Tomcat.

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