سؤال

أقوم بنقل تطبيق ويب كبير إلى بيئة استضافة ويب مشتركة. تم كتابة التطبيق في PHP 4. البيئة الجديدة لديها PHP 5.2.

لسبب ما ، يتسرب التطبيق من كميات هائلة من الذاكرة عند التشغيل في PHP 5.2. يمكنني مراقبة استخدام الذاكرة حرفيًا عبر السقف باستخدام Memory_get_usage () ، حتى يصل إلى حد 64 ميغابايت (وهو سخي للغاية في بيئة مشتركة ، وهو الموقع المستخدم لتشغيله مع 12 أو 16 ميجابايت على PHP 4).

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

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

لذلك أسئلتي هي:

  • هل يعرف أي شخص PHP4 => 5 مخاطر انتقالية ، خاصة عند التعامل مع كميات كبيرة من الكائنات ، قد يكون هذا هو سبب تسربتي (S)

  • هل يعرف أي شخص نوعًا من أداة "تفريغ النطاق الرسومي" المستقلة عن تصحيح الأخطاء ، للمتغيرات التي تستخدمها PHP والتي قد تساعدني في معرفة المتغيرات التي تتناول هذه الكميات الهائلة من الذاكرة؟

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

المحلول

لحل هذه المشكلة أود:

  1. ملف تعريف البرنامج النصي مع XDebug+Wincachegrind (أو بعض profiler الأخرى) و/أو firephp.
  2. قم بتشغيل الوضع الصارم للحصول على جميع إشعارات PHP Error +.

القيام بذلك ، ستتمكن من:

  • تحسين الرمز الخاص بك. (إزالة الأخطاء/التحذير/الإشعارات يمكن أن تسرع التعليمات البرمجية الخاصة بك)
  • تنظيف الكود الخاص بك. (باستخدام بناء جملة كائن PHP5 المناسب يمكن أن يكون جيدًا فقط للأداء).

تم تغيير نموذج الكائن بالكامل من PHP4 إلى PHP5. بالتأكيد ، سيخبرك الوضع الصارم أنه يجب ألا تستخدم "تم تمريره بالرجوع إليه".

نصائح أخرى

واحد شائع وجدته في إصدار واحد من 5.2 هو أن strtotime تسربت دون الذاكرة _usage اصطياده. تغيير إلى Strptime إصلاح القضية.

هناك تقرير خطأ لهذا مقابل 5.2.8 - http://bugs.php.net/bug.php؟id=46889.

بدون تصحيح الأخطاء ، يمكنك فتح البرنامج النصي الذي تعتقد أنه يستخدم العديد من الذاكرة ووضع وظيفة الذاكرة _ usage في السكان المحليين الحرجين.

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