استراتيجيات التعامل مع استهلاك الذاكرة في PHP5?

StackOverflow https://stackoverflow.com/questions/231707

  •  04-07-2019
  •  | 
  •  

سؤال

لدينا مجموعة كبيرة إدارة البرامج التي يتم إنتاج كبيرة التقارير من جميع الأنواع ، بناء على العديد من الحلقات مع قاعدة بيانات الاسترجاع ، الكائنات إبداعات (كثير), وهلم جرا.

على PHP4 فإنه يمكن تشغيل بسعادة مع الحد من ذاكرة 64 ميجا بايت - الآن لدينا نقله على سيرفر جديد مع نفس قواعد البيانات في نفس رمز نفس التقارير لن تأتي دون أن أزعج من ذاكرة الحد...

وأنا أعلم أن PHP5 قد تغيرت تحت غطاء محرك السيارة الكثير جدا من الأشياء ، ولكن هل هناك طريقة لجعلها تتصرف ؟

السؤال في النهاية ، ما هي الاستراتيجيات هل تنطبق عندما كنت في حاجة إلى البرامج النصية الخاصة بك على نظام غذائي ؟

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

المحلول

وهناك مشكلة كبيرة لقد واجهت والمراجع الدائرية بين الأشياء منعهم من تحرير الذاكرة عندما تصبح خارج النطاق.

واعتمادا على بنية الخاص بك قد تكون قادرا على استخدام __destruct () وضبطه يدويا أية مراجع. لمشكلتنا انتهى بي الأمر إعادة هيكلة الطبقات وإزالة المراجع الدائرية.

نصائح أخرى

عندما كنت في حاجة لتحسين الموارد على أي نص ، وأنا أحاول دائما لتحليل الشخصية وتصحيح قانون بلدي, أنا استخدم xDebug, ، xDebug التعريف, هناك خيارات أخرى مثل APD, ، المعيار التعريف.

بالإضافة إلى ذلك فإنني أوصي لكم هذه المقالات:

ومنذ انتقاله إلى ملقم جديد، هل التحقق من أن MySQL و PHP متغيرات النظام الخاص بك متطابقة إلى الطريقة التي كانت على الخادم القديم الخاص بك؟

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

هل تعمل أيضا على نفس النسخة من طراز أباتشي أو IIS؟

وهذا يبدو وكأنه المشكلة التي من المرجح المتعلقة بالبيئة النظام الجديد الخاص بك بدلا من ترقية من PHP4 إلى 5.

وبرتراند،

إذا كنت ترغب في إعادة بيع ديون رمز القائمة ثم أود أن أوصي بأن عليك أولا مراقبة الخاص بك وحدة المعالجة المركزية واستخدام الذاكرة أثناء تنفيذ التقارير. هل حبس الخادم SQL الخاصة بك أو أنك حبس أباتشي (الذي يحدث إذا كان يتم وضع الكثير من الضغط على النظام عن طريق شفرة PHP)؟

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

واعتمادا على طبيعة التقارير التي قد تنظر denormalizing البيانات الذي يتم استخدامه للتقارير. هل يمكن أن تنظر حتى بناء قاعدة بيانات الثانية التي هي بمثابة مستودع البيانات ويتمحور حول المبادئ OLAP بدلا من مبادئ OLTP. يمكنك البدء في ويكيبيديا للحصول على شرح عام للOLAP وتخزين البيانات.

ولكن قبل أن تبدأ في النظر في إعادة بيع ديون خطيرة، هل التحقق من أن البيئات الخاصة بك متشابهة بما فيه الكفاية من خلال النظر في phpinfo ()؛ لPHP وإظهار المتغيرات. في الخلية؟

وأزعج!؟!

وحتى 64MB كبير.

وتجاهل التناقض بين البيئات، (والذي لا يبدو غريبا جدا)، يبدو وكأنه رمز قد تحتاج الى بعض إعادة العوملة.

وأي فرصة يمكنك إعادة العامل التعليمات البرمجية بحيث لا يتم تفريغ مجموعات النتائج من استعلامات قاعدة البيانات في المصفوفات. وأود أن ننصح بناء مكرر لمجموعات النتيجة. (من ثم يمكنك يعاملهم مجموعة لمعظم الأغراض) هي تمكنا فرق كبير بين التعامل مع سجل واحد في وقت واحد، والتعامل مع 10،000 السجلات في وقت واحد.

وثانيا، إلقاء نظرة على الطقس الشفرة هو خلق حالات متعددة من البيانات. يمكنك تمرير الكائنات حسب المرجع. (استخدم ال '&'). كان علينا أن نفعل شيئا مماثلا عند استخدام البديل في وقت مبكر من إطار الحشد. فإن مرفق 1 MB ضربة إلى 50MB من النداءات العديدة التي مرت مجموعة البيانات كاملة ونسخة، وليس كمرجع.

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