كيف يمكنني معرفة ما إذا كان طلبي PHP يستخدم الكثير من الذاكرة؟

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

سؤال

وأنا أعمل على تطبيق ويب PHP أن مستخدمي الشبكة دعونا مع بعضها، أحداث الكتاب، وبعضنا البعض رسالة آخرين. هناك فقط حوالي 100 مستخدم.

وأقوم بإعداد التطبيق على VPS مع أوبونتو 9.10، apache2، الخلية 5 و PHP 5. كان لي 360 ميغابايت من ذاكرة الوصول العشوائي، ولكن ترقيتها إلى 720 MB.

ومؤخرا، وتطبيق الويب الخاص بي قد تعاني انقطاع التيار بسبب الاستخدام المفرط للذاكرة. من ما استطيع ان اقول في سجلات الخطأ، يبدو أن الخادم يقتل اباتشي العمليات التي تستهلك الكثير من الذاكرة تلقائيا. ونتيجة لذلك، وأنا ترقية الذاكرة من 360 MB إلى 720 MB كإجراء لسد الفجوة.

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

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

المحلول

وليس هناك جواب بسيط لهذا، على الرغم من أنني أشك في أنه قد مشكلة في التعليمات البرمجية.

ما هو memory_limit وضع في ملف php.ini الخاص بك؟ عادة أنا أنصح على الأقل 4MB، وعادة 16. كم عدد الزيارات المتزامنة أنت ينزل؟ هو موقع به الكثير من التقارير الثقيلة احصائيات؟ أو تقديم الصور عن طريق PHP؟ هل تستخدم file_get_contents () في أي مكان؟

وأنت حقا تحتاج إلى إعداد بعض التسجيل المخصصة لتقرير لكل URL، حجم ملف السجل في الخروج. مثلا هل يمكن لصناعة السيارات في أرفقت:

<?php
register_shutdown_function('log_mem');

function log_mem()
{
   fputs(STDERR, '[' . date('c') . '] ' . memory_get_usage() . ' ' 
     . $_SERVER["REQUEST_URI"] . "\n");
}

و(ملاحظة - لا علامة إغلاق) هذا وسوف الكتابة خارج الذاكرة المستخدمة من قبل كل صفحة PHP إلى error_log حتى تتمكن من عزل المشكلة بسهولة أكبر.

وHTH

وC.

نصائح أخرى

وآخر شيء يمكنك القيام به إذا كان حجم الخاص بك هو عملية صغيرة هو رفض خوادم الغيار هتبد الإعدادات قد دقيقة 1، والخوادم الغيار ماكس 3. إذا كان لديك فقط 100 مستخدم، وهذا ينبغي أن يكون على ما يرام، كما فاز 'ر الرعاية عن النفقات العامة من بدء العمليات إلا لعدد قليل من المستخدمين.

وهنا هو الأداة التي تدعم التنميط PHP: http://xdebug.org/docs/profiler

وفقا لنسخة من هتبد ووردبريس، هتبد يمكن على عقد لشرائح الذاكرة التي لا تحتاج إليها، وينمو تشغيل حجم العملية دون داع. لدي المربع الذي يفعل هذا، ولقد حل القضية عن طريق القيام على هتبد إعادة تشغيل على أساس ليلا مثل ذلك:

30 00 * * *     /httpd/sbin/apachectl restart
31 00 * * *     /httpd/sbin/apachectl start
35 00 * * *     /httpd/sbin/apachectl start
40 00 * * *     /httpd/sbin/apachectl start

وكما ترون، أنا متابعة بلدي إعادة تشغيل مع 3 يبدأ زائدة، فقط في حالة فشل اباتشي ليعود إلى الحياة بعد بداية الشوط الثاني. 3 وربما مبالغة، ولكن من ناحية أخرى، فإنه لا شيء يصب، فلماذا لا.

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