كم من زبون يتحمله indyserver
#1
السلام عليكم

عندي لما يصل 1900 زبون متصل يحدث مشكل وهو virtual size يصير كبير حوالي 1.98 جيقا وبالتالي ما يزيد اي متصل اخر ويخرج ميساج يقول out of memory

المهم نبشت قوقل بحثا عن المشكلة ولم اجد حل

لاحضت ان كل متصل ياكل تقريبا 1 ميقا من الميموري :eek:

الاسئلة
- هل يمكن التحكم في ثريد كل زبون واعطائه مثلا 100 كيلوا كحد اقصى من الميموريBig Grin
- هل مكون indy يحتمل مثلا اتصال 60000 متصل دفعة واحدة
-هل يوجد مكونات اخرى اقوى من indy ولا تاكل من الميموري بكثرة الزبائن بدي مثلا اوصل 30000 زبون هل يمكن لهذا المكون التعامل مع الامر ام فيه شيئ اخر

أتمنى ان لا اكون اثقلت عليكم بالاسئلة Big Grin
الرد
#2
و عليكم السلام و رحمة الله

ليس لدي الخبرة للإجابة على أسئلتك, لذالك سأضيف سؤالا آخر :d
أليس لعتاد السرفر دخل بذلك (كمية الرام مثلا ) ؟
من قال حاد عن أصله أو قال مات فقد كذب
الرد
#3
h-farid كتب :و عليكم السلام و رحمة الله

ليس لدي الخبرة للإجابة على أسئلتك, لذالك سأضيف سؤالا آخر :d
أليس لعتاد السرفر دخل بذلك (كمية الرام مثلا ) ؟



يا اخي لما استعملت مكونات ServerSocket لم ياكل شيئ من الميموري لاكن تحدث مشاكل اخرى لم احاول حلها لاني كنت مهتم بحجم ما ياكله البرنامج كذلك جربت برنامج بالدوت نت ما اكل شيئ ايضا لاكني اطرح السؤال حول المكون الذي يقولون انه لا يوجد مثله الا وهو indy
:confused::confused::confused::confused:
الرد
#4
اعتقد الرام عندك 2 غيغا
كل زبون ياخذ 1 ميغا
وعندك 1900 زبون
وباقي مساحه 100 ميغا فقط للجهاز

وبلنسبه لمكون اخر لااعتقد يوجد مكون افضل من اندي
والحل ان تبرمج مكون بنفسك


بلنسبه لاسئلتك
1-لست متاكد لاكن اعتقد لايمكنك هذا
2- نعم في حال كان الميموري عندك كبير
3-لااعتقد يوجد مكون افضل


ارجع الى ServerSocket وحاول تحل المشكله
او اشتري ميموري بحجم اكبر مثلا اذا عندك 2 غيغا اشتري 4 غيغا
لن يفشل ابداا انسان يحاول ثم..... يحاول
الرد
#5
تطبيقات 32 بت لن تستطيع استخدام أكبر من 2 جيجا رام حتى ولو كانت الرام 4 جيجا !
أمامك حلان :
أن تستخدم وينداوز نسخة 64 /32 بت و تشغل عليها تطبيقك 32 بت مع استخدام IMAGE_FILE_LARGE_ADDRESS_AWARE flag
ألق نظرة على هذا الرابط :
Olaf Hess كتب مقالة + مثال رائع لاستخدام 4 جيجا من الرام لتطبيقات 32 بت
كود :
http://cc.embarcadero.com/Item/24309
الحل الثاني أن تستخدم وينداوز 64 بت و تشغل عليه تطبيقك 64 بت :
الحل الثاني هو الأفضل .. لكون نسخ 64 تسمج باستعمال أكبر من 190 جيجا .
Open Your Source .. Open Your Mind
الرد
#6
يعني الحل ارفع الرامة واغير النضام يعني ليس هناك حل برمجي؟
عندي تطبيق بالدوت نت يتحمل 8000 متصل على بيئة 32 بيت Rolleyes
الدلفي يحتاج الرامة والدوت نت لا :confused:
تطبيق دوت نت في حوزتي تمكن من استقبال 8000 زبون واكل 350 ميقا من الميموري Rolleyes
اضن الخلل كله في فكرة كل زبون له ثريد منفصل والله اعلم
الرد
#7
إقتباس :يعني الحل ارفع الرامة واغير النضام يعني ليس هناك حل برمجي؟؟؟؟؟؟؟؟؟؟؟؟
كما ذكرت سابقا ليس شرطا أن تغير النظام يمكن استخدام 3 جيجا على نظام 32 بت بتحديد
IMAGE_FILE_LARGE_ADDRESS_AWARE flag
لكن سيكون من الأفضل أن تقوم بتحويل النظام و التطبيق الى 64 بت (لن تواجه أي مشاكل و يمكن استيعاب أكبر من 190 جيجا )


إقتباس :عندي تطبيق بالدوت نت يتحمل 8000 متصل على بيئة 32 بيت
هناك عدة عوامل : نوع قاعدة البيانات و نوع البيانات في حد ذاتها (string , char, integer)
العوامل مختلفة : بالتأكيد ستجد تطبيق دلفي يستوعب 9000 في حين تجد تطبيق آخر يستوعب 1000 فقط على نفس الجهاز
السبب : يعود السبب الى اختلاف نوع البيانات و اختلاف حجمها :
مثلا في تطبيق الذي يستوعب 9000 ممكن تكون طبيعة المتغيرات كلها integer (هذا أمر بعيد عن الواقع لكنه مثال فقط)
أما التطبيق الثاني فكل البيانات عبارة عن string ..
باختصار : النوع string يستهلك الكثير من الرام مقارنة مع النوع integer الذي يستهلك 4 بايت فقط .
يعني يمكن يكون التطبيق الذي يحمل 8000 متصل يستخدم عدد قليل من النوع string في الجداول .
بعض النصائح :
يجب عليك أن تقوم بمراقبة ال MemoryLeaks : قم بتحرير أي مؤشر أو مكون لم تعد بحاجة له حتى تتمكت من استخدام
مساجة الذاكرة الخاصة به .
راقب دائما MemoryLeaks :
كود :
ReportMemoryLeaksOnShutdown:=True;
ستتلقى رسالة خطأ عند غلق البرنامج ان لم تقم بتحرير أي مكونات و مؤشرات ..
-استخدم ال Heap بدل ال Stack لحجز المؤشرات الكبيرة .
Open Your Source .. Open Your Mind
[-] كل من 1 user says قال شكرا ل SMP3 على المشاركة المفيدة
  • haniid
الرد
#8
نعم المتغيرات من نوع string
هل يوجد بديل يعني اعطيني متغيرات اخرى لا تاكل من الميموري Big Grin
الرد
#9
القيمة المحجوزة في الذاكرة من النوع string = طول النص (عدد بايتات النص)
في اليونيكود = (عدد بايتات النص) * 2 : (كل محرف ب 2 بايت)
ان كنت تستخدم نسخ دلفي تدعم اليونيكود فاستعمل النمط AnsiString (كل محرف ببايت)
Open Your Source .. Open Your Mind
الرد
#10
بارك الله فيك على الافادة يا غالي هل سبق ان برمجت برامج مثل هيك بمكون indy وكم وصل معك عدد الزبائن؟
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم