2008-11-01 25 views
23

मेमोरी उपयोग का दृश्य रूप से विश्लेषण करने के लिए उपकरण क्या वहां कोई फ्रीवेयर या वाणिज्यिक है जो PHP अनुप्रयोग द्वारा स्मृति उपयोग के विश्लेषण की सुविधा प्रदान कर सकता है? मुझे पता है कि xdebug ट्रेस फ़ाइलों का उत्पादन कर सकता है जो फ़ंक्शन कॉल द्वारा मेमोरी उपयोग दिखाता है लेकिन ग्राफिकल टूल के बिना डेटा को समझना मुश्किल होता है।एक PHP एप

आदर्श रूप में मैं न केवल कुल मेमोरी उपयोग को देखने में सक्षम होना चाहता हूं बल्कि ढेर पर कौन सी वस्तुएं हैं और जो उन्हें Jprofiler के समान संदर्भित करने में सक्षम होना चाहेंगे।

+1

[PHP मेमोरी प्रोफाइलिंग] का संभावित डुप्लिकेट (http://stackoverflow.com/questions/880458/php-memory-profiling) –

उत्तर

0

xdebug आउटपुट के लिए एक ग्राफिकल उपकरण KCacheGrind है।

+2

मुझे केकेचेग्रिंड और विनकैचग्रिंड के बारे में पता है। जहां तक ​​मैं बता सकता हूं कि कोई भी उपकरण मेमोरी उपयोग के विश्लेषण की अनुमति नहीं देता है। –

0

webgrind आज़माएं। यह आपको पढ़ने के लिए आसान, ब्राउज़र आधारित प्रारूप में कैशग्रिंडर की प्रोफाइलिंग देता है। मैं मैक पर हूं और उसने हवा को प्रोफाइल बना दिया है।

+4

दुर्भाग्य से वेबग्रैंड स्मृति उपयोग की रिपोर्ट नहीं करता है - बस निष्पादन गति। –

0

phpDesigner 2008 xdebug और KCacheGrind का उपयोग कर वेबसाइटों को डीबग और बेंचमार्क कर सकता है। इसमें एक अंतर्निर्मित मॉनीटर भी है।

+0

क्या यह मेमोरी उपयोग प्रोफाइलिंग या सिर्फ प्रदर्शन प्रोफाइलिंग को संभालता है? अपनी वेबसाइट से मैंने केवल प्रदर्शन प्रोफाइलिंग देखी। –

+0

आपको नहीं बता सका। इस कार्यक्रम के प्रोग्रामर एक बहुत अच्छा लड़का है। उसे एक ईमेल शूट करने और खुद से पूछने के लिए चोट नहीं पहुंचीगी! – user29772

8

मैं हाल ही में एक ही मुद्दे पर आया, दुर्भाग्य से किसी भी विशिष्ट उपकरण नहीं मिला।

लेकिन कुछ ऐसा जो मदद करता है, एमएम डेलटास सक्षम (एक आईएनआई सेटिंग, xdebug.show_mem_deltas या कुछ मुझे लगता है) के साथ मानव पठनीय प्रारूप में xdebug ट्रेस आउटपुट करने में मदद मिली थी। तो फिर उत्पादन पर तरह चलाने (यदि आप * nix पर हैं):

sort -bgrk 3 -o sorted.txt mytracefile.xt 

कि तीसरे स्तंभ, मेम डेल्टा पर क्रमबद्ध करता है। आप दूसरे कॉलम को भी सॉर्ट कर सकते हैं, इस मामले में आप उस लाइन को पा सकते हैं जिस पर आपका ऐप कुल मेमोरी का उपयोग करता है।

बेशक, यह पता नहीं लगा सकता है कि जब किसी ऑब्जेक्ट का मेमोरी उपयोग केवल छोटे वेतन में बढ़ता है लेकिन कुल मिलाकर बहुत सारी मेमोरी का उपयोग करता है। मेरे पास एक काफी गूंगा विधि है जो वस्तु पुनरावृत्ति और क्रमबद्धता के संयोजन का उपयोग करके ऐसा करने का प्रयास करती है। यह शायद स्मृति उपयोग के लिए बिल्कुल समान नहीं है, लेकिन उम्मीद है कि कहां देखना शुरू करना है। ध्यान रखें यह स्मृति ही का उपयोग करेगा, और भी बड़े पैमाने पर परीक्षण नहीं किया गया है, तो खरीदार सावधान रहना:

function analyzeMem($obj, $deep=false) 
{ 
    if (!is_scalar($obj)) 
    { 
     $usage = array('Total'=>strlen(serialize($obj))); 
     while (list($prop, $propVal) = each($obj)) 
     { 
      if ($deep && (is_object($propVal) || is_array($propVal))) 
      { 
       $usage['Children'][$prop] = analyzeMem($propVal); 
      } 
      else 
      { 
       $usage['Children'][$prop] = strlen(serialize($propVal)); 
      } 
     } 
     return $usage; 
    } 
    else 
    { 
     return strlen(serialize($obj)); 
    } 
} 

print_r(analyzeMem(get_defined_vars())); 

इसके अलावा, बस एक सहयोगी द्वारा इस विधि का सुझाव दिया गया (चियर्स डेनिस ;-) यह चरणों छुपाता है कि खरोज के 2 स्तर से नीचे हैं, तो आप काफी आसानी से अंक देख सकते हैं जहां समग्र स्मृति उपयोग कूदता है, और खरोज में वृद्धि से चीजों को कम कर सकते हैं:

egrep '[0-9]+ (){1,2}-> ' mytracefile.xt 
6

Xdebug के लिए http://www.xdebug.org/updates.php पर 2.0.4 वे खंड में लिखना "हटाए गए फ़ंक्शंस": "... मेमोरी प्रोफाइलिंग के लिए हटाया गया समर्थन क्योंकि यह ठीक से काम नहीं करता ..."। इसलिए xdebug एक विकल्प नहीं होगा

10

जैसा कि आप शायद जानते हैं, Xdebug ने 2. * संस्करण के बाद मेमोरी प्रोफाइलिंग समर्थन को छोड़ दिया। "हटा कार्यों" स्ट्रिंग यहाँ के लिए खोज करें: http://www.xdebug.org/updates.php

Removed functions

Removed support for Memory profiling as that didn't work properly.

तो मैं एक और उपकरण की कोशिश की है और यह मेरे लिए अच्छी तरह से काम किया।

https://github.com/arnaud-lb/php-memory-profiler

यह वह जगह है मैं अपने Ubuntu सर्वर पर क्या किया है इसे सक्षम करने के:

sudo apt-get install libjudy-dev libjudydebian1 
sudo pecl install memprof 
echo "extension=memprof.so" > /etc/php5/mods-available/memprof.ini 
sudo php5enmod memprof 
service apache2 restart 

और फिर मेरी कोड में:

<?php 

memprof_enable(); 

// do your stuff 

memprof_dump_callgrind(fopen("/tmp/callgrind.out", "w")); 

अंत के साथ callgrind.out फ़ाइल को खोलने के KCachegrind

Google gperf का उपयोग करना (! अनुशंसित): https://code.google.com/p/gperftools/

फिर हमेशा की तरह:

sudo apt-get update 
sudo apt-get install libunwind-dev -y 
./configure 
make 
make install 

अब अपने कोड में:

memprof_enable(); 

// do your magic 

memprof_dump_pprof(fopen("/tmp/profile.heap", "w")); 
उपकरण

सबसे पहले गूगल यहां नवीनतम पैकेज को डाउनलोड करके gperftools स्थापित

फिर अपना टर्मिनल खोलें और लॉन्च करें:

pprof --web /tmp/profile.heap 

pprof कुछ के साथ अपने मौजूदा ब्राउज़र सत्र में एक नई विंडो पैदा करेगा नीचे दिखाया गया है जैसे:

PHP memory profiling with memprof and gperftools

Xhprof + Xhgui (मेरी राय में सबसे अच्छा दोनों CPU और स्मृति प्रोफ़ाइल)

साथ Xhprof और Xhgui तुम भी या सिर्फ स्मृति उपयोग cpu उपयोग प्रोफ़ाइल सकते हैं कि अगर टी पर अपने मुद्दा है वह पल यह एक बहुत ही संपूर्ण समाधान है, यह आपको पूर्ण नियंत्रण देता है और लॉग दोनों को मोंगो या फाइल सिस्टम में लिखा जा सकता है।

अधिक जानकारी के लिए see my answer here

Blackfire

Blackfire SensioLabs द्वारा एक PHP प्रोफाइलर है, Symfony2 लोग https://blackfire.io/

आप puphpet का उपयोग करते हैं अपने आभासी मशीन स्थापित करने के लिए आप जानते हैं करने में प्रसन्नता होगी समर्थित है ;-)

+0

'सुडो pecl इंस्टॉल मेमोप्रोफ' पास 'मेक' चरण नहीं मिलता है। त्रुटि देता है: 'मेकफ़ाइल: 1 9 4: लक्ष्य' memprof.lo 'के लिए नुस्खा विफल रहा –

+0

यह ध्यान रखना महत्वपूर्ण है कि php-memory-profiler php7 का समर्थन नहीं करता है। –

+0

उत्तर स्वीकार किया जाना चाहिए ... जानकारी के लिए धन्यवाद।ध्यान दें कि हालांकि ccachegrind/qcachegrind को CPU विश्लेषण के लिए डिज़ाइन किया गया है, जब आप php-memory-profiler द्वारा कैशग्रंड फ़ाइल थूकते हैं, तो आप पाएंगे कि मान और फ़ील्ड को स्मृति विश्लेषण के लिए correpsond नाम दिया गया है। –

संबंधित मुद्दे