الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

لماذا تحتاج الجافا إلى ذاكرة محددة على الخادم أما الphp فلا تحتاج

بدأه rohaili في 24 يناير 2011 · 16 رد · 1,542 مشاهدة · في JavaEE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

أنهيت قبل فترة مشروع موقع بالjsf وأكثر ما أرقني هو الرام فعند دخول مجموعة كبيرة في نفس الوقت تحصل مشاكل عند حفظهم للبيانات وقد يتوقف الموقع فاعيد تشغيله عن طريق عمل restart ، وقد لاحظت في الخوادم عند استظافتها للphp لا تحدد حجم الذاكرة أما عند استظافة java فإنها تحدد حجم الذاكرة ، وأنا الآن بصدد عمل مشروع جديد وأفكر للانتقال الى php فما رأيكم ؟

1

300_130.gif

#2

ال web container مكتوب بلغة الجافا، فهو يحتاج إلى ال JVM، يعني أضف الذاكرة المستهلكة من طرف ال JVM للذاكرة المستهلكة من طرف كود ال web application

الخادم apache أو nginx مكتوب ب C، وبالتالي قيمة الذاكرة اللازمة أقل

ربما هذا أحد الأسباب

تم تعديل هذه المشاركة بواسطة herch في 24 يناير 2011 في 13:12

#3

كما تفضل الأخ عصام

كما أن جافا لغة مدارة بشكل كامل Managed وتستخدم الكومة Heap لتخزين كل شيء بالذاكرة

ربما امتلاء الذاكرة لم يكن سببه امتلاء الذاكرة الفيزيائية، إنما إمتلاء الذاكرة المخصصة للـ JVM

ويمكنك زيادته بتمرير الوسطاء (Parameters) التالية لجافا (مثلاً):

java -Xms512m -Xmx2g

حيث يحدد Xmx الحد الأقصى من للكومة Heap التي يمكن استخدامها

ويحدد Xms الحجم الابتدائي المحجوز للكومة

للاستزادة:

http://avricot.com/blog/index.php?post/2010/05/03/Get-started-with-java-JVM-memory-(heap,-stack,-xss-xms-xmx-xmn...)

1
#4

أعتقد أن الخادم يحدد المساحة ويشغل الخادم

ولا تستطيع تشغيل الخادم على ذاكرة أكبر

الصراحة هذه النقطة اعتمادية بشكل مهول على الموقع الخاص بك

ماهي الحزم المستخدمة بالضبط؟

ما الذي تقوم به بالضبط؟

هل تتخلص من session variables؟

هل تغلق الاتصالات؟

وأسئلة كثيرة

إن كان يمكننا أن نطلع على الموقع ضعه وأعدك بأن افصله تفصيل

واتأكد ما الحاصل بالضبط

احتمال أن يكون الخادم الذي تعمل عليه متخلف عقلياً احتمال قائم بذاته (Tomcat :) )

تحياتي

1
حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#5

جزاكم الله خيرا

أما الحزم فلا أستطيع عمل شئ لها .

أما session variables فهي كثيرة وربما تكون سبب المشكلة وسأحاول تقسيمها (أي اجعل الصفحة التي يدخل بها العميل بياناته ثلاث صفحات مثلا ، كل صفحة لها جلسة مستقلة ) .

أما الاتصالات فأغلقها عند الانتهاء مباشرة .

أعتذر عن رفع الموقع لاحتواءه على بيانات خاصة .

300_130.gif

#6

الصراحة أنه يصعب عليه إعطاءك حلول دقيقة

لكن ما هي الحزم التي تستخدمها بالتفصيل

استخدم sessionListerner للتأكد من إزالة كل المتغيرات من الذاكرة قبل إغلاق الجلسة

تأكد أن إغلاق الاتصالات يتم في finally

استخدم connection pool لضمان موارد أقل في الذاكرة

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#7

جزاك الله خيرا

الصورة التالية تبين الحزم

post-63809-079052300 1295954621_thumb.jp

أما sessionListerner فلا أعرف كيف استخدمه

أما اغلاق الاتصال فيتم في finally

واستخدم أيضا connection pool

المرفقات
1.jpg

300_130.gif

#8

أرني الشيفرة الخاصة بالـ connection pool

وهذا مثال على SessionListerner ليست صعبة بالمرة http://www.java2s.com/Code/Java/Servlets/Servletsessionlistener.htm

يجب عليك أن تضيف الـ SessionListener إلى ملف web.xml (في eclipse يقوم الـ IDE بإضافته مباشرة وأظن نفس الشيء في Netbeans) لكن لو استخدمت الـ IDE في إنشائها

هل يمكنك الإطلاع على الحزمة joda time داخلياً ومتابعة العمليات التي تقوم بها؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#9

مر علي مثل هذا المشكله ولكن على JBoss

يبدوا ان الذاكره المستخدمة قد استهلكت ( وهذا ما اشار اليه الزملاء قبل)

وكان يعطيني الاستثناء التاللي

 java.lang.OutOfMemoryError: PermGen space failure

تم حل المشكله باستخدام الامر التالي

في JBoss

في الملف run.dat اسبدل السطر

set JAVA_OPTS=%JAVA_OPTS% -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000

بالسطر

set JAVA_OPTS=%JAVA_OPTS% -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -XX:+CMSPermGenSweepingEnabled -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=128m

اما في tomcat

في الملف التشغيل tomcat6w.exe

افتح الملف اذهب الى java في خانة "java options"

اضف الامرين التاليين

-XX:+CMSClassUnloadingEnabled
 -XX:+CMSPermGenSweepingEnabled

post-82434-020766300 1296014392_thumb.gi

المرفقات
u_14.gif

تم تعديل هذه المشاركة بواسطة العيافـي في 26 يناير 2011 في 07:02

#10

لو اردت التوسع في الموضوع ابحث في قوقل عن OutOfMemoryError PermGen

#11

مرت عليه نفس المشكلة أخي العيافي

وكانت تحصل معي بسبب deploy و undoply بكثرة

لكن في الوضع الطبيعي يفترض أن لا تحصل لأنها تحدث بسبب سوء إدارة في إنشاء الكائنات من نوع class (هذه المعلومة من ملاحظتي ولم أقرأ كثيراً عن المشكلة لأنها لا تحدث بالنسبة لي في بيئة العمل الرسمية فهل أنا مخطئ؟)

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#12

(تحدث بسبب سوء إدارة في إنشاء الكائنات من نوع class) هذا ما اعتقده عزيزي علاء .. خاصة اذا لم يتم تحرير الذاكره بالتخلص منها.

عند كثره deploy و undoply تظهر المشكله بوضوح.

#13

جزاكم الله خيرا

مرفق ملف connectionpool

لا اعتقد ان بامكاني متابعة العمليات داخل joda time اعتقد ان ذلك صعب ومعقد

عند تشغيل الملف tomcat6w.exe على جهازي تظهر الرسالة التالية : الخدمة المحددة غير موجودة كخدمة مثبتة ، ثم هل يمكن تطبيق هذا الحل على الخادم

post-63809-033607300 1296537392_thumb.jp

الحل الذي افكر فيه حاليا : هل يمكنني تحديد عدد الجلسات الحالية في الموقع بحيث تكون 10 فقط ولا اسمح للعميل الذي يريد الدخول بافتتاح جلسة الا عند انتهاء جلسة من الجلسات العشرة وتظهر له صفحة انتظار حتى يتم ادخاله للصفحة المطلوبة ؟

وجزاكم الله خيرا

connectionpool.txt

المرفقات
2.jpg

تم تعديل هذه المشاركة بواسطة rohaili في 1 فبراير 2011 في 08:18

300_130.gif

#14

عزيزي رحيلي

أعتقد ان المشكله في الشفره وليس في حزمة joda انا استخدم الحزمة في عمل حقيقي ولم تحدث معي مثل هذه المشاكل

* - هل ممكن ارفق ملفات .java .

* - (في الملف faces-config.xml i ) هل تحفظ java bean في request او في session

#15

يهيألي أن لا مشاكل في connection pool

بالنسبة لموضوع تحديد عدد الـ session

يمكنك عمل كل شيء في JavaEE

لم تمر عليه حالات استعصت بالمطلق

لكن هذه خطوة قد تكون عدائية نوعاً ما لذا أجلها بعض الشيء

ملفات الجافا هل هي متاحة؟

إن لم تكن متاحة فما رأيك أن توصف لنا النظام كاملاً

ما الموجود فيه بالضبط

هل تستخدم الـ session كثيراً؟

ما نوعية الكائنات المخزنة هناك

قلل من استخدام العملية + بقدر المستطاع فهي مصاصة دماء (خصوصاً في التكرارت)

هل تقوم بتوليد أي شيء بشكل ديناميكي؟ ابحث في شيفرته اعرضها لنا لو أمكن

لا تستخدم الخيوط Thread بقدر المستطاع فغالبية أي طلب يأتي لك يكون في خيط خاص به يمكنك استغلال هذا الخيط

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#16

جزاكم الله خيرا

أعتذر عن ارفاق ملفات الجافا

احفظ كل شئ في session

لا استخدم العملية + ابدا

استخدم sesssion منذ دخول العميل حتى خروجه

لا استخدم thread

كنت اقوم بتوليد ارقام ايام الشهر وكان الموقع يتوقف كثيرا فأضفتها يدويا وخفت المشكلة كثيرا ولا تحدث الا عند دخول عدة مستخدمين في نفس الوقت وتنتهي بعمل restart للموقع

وجزاكم الله خيرا

ساقوم بإعادة هيكلة الموقع وسأخبركم بالنتيجة إن شاء الله

وسأحاول حساب عدد الجلسات الذي تحدث عنده المشكلة

وسأحاول معرفة الذاكرة المستهلكة لكل عميل

ولكني الآن بدأت في مشروع آخر وعند الإنتهاء منه إن شاء الله سأعود لهذا المشروع وافعل ما قلت لكم إن شاء الله

وجزاكم الله خيرا

300_130.gif

#17

بشكل أو بآخر يصعب علينا الوصول إلى عين الحقيقة بدون أن نرى الشيفرة

أتفهم الإحراجات التي تنتج عن نشر الشيفرة على الملأ

لكن بشكل أو بآخر يجب أن تستعين بالخبرات في بدلك

فبذلك يمكن إطلاعه على الشيفرة دون أن يحصل هو عليها

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…