পিএইচপি মেমরি প্রোফাইলিং


96

কোনও পিএইচপি পৃষ্ঠার মেমরির ব্যবহারের প্রোফাইল দেওয়ার একটি ভাল উপায় কী? উদাহরণস্বরূপ, আমার ডেটা কতটা মেমোরি ব্যবহার করছে এবং / বা কোন ফাংশন কলগুলি সর্বাধিক মেমরির বরাদ্দ করছে তা দেখতে।

  • xdebug এর প্রোফাইলিং বৈশিষ্ট্যে মেমরির তথ্য সরবরাহ করে বলে মনে হচ্ছে না।

  • xdebug করে তার ট্রেসিং বৈশিষ্ট্য এটা প্রদান। এটি যা আমি চাই তার খুব কাছাকাছি, বাদে ডেটার নিছক পরিমাণ অপ্রতিরোধ্য হয়, যেহেতু এটি প্রতিটি ফাংশন কলের জন্য মেমরি ডেল্টাস দেখায়। যদি কোনও নির্দিষ্ট গভীরতার নীচে কলগুলি আড়াল করা সম্ভব হয় তবে কিছু জিইআইআই সরঞ্জাম দিয়ে এটি আমার সমস্যার সমাধান করতে পারে।

আর কিছু আছে?


আউট Rasmus Lerdorf এর আলাপ নামক (চেক "সরল কঠিন" talks.php.net/show/froscon08 স্লাইডের জন্য, youtube.com/watch?v=RWRYX5eJbG0 ভিডিওর জন্য)। তিনি "inclued" ( pecl.php.net/package/inclued ), xdebug, এবং KCacheGrind এর মতো অনেক দরকারী সরঞ্জামের উপরে চলে যান।
টিএমএল

আমি xdebug এ একটি প্যাচ পেয়েছি , যা প্রোফাইলগুলিতে মেমরির তথ্য সরবরাহ করে। এখনও পর্যন্ত এটি খুব ভাল কাজ করছে।
জেডাব্লু

4
আপনি যেমনটি বলেছেন, xdebug ফাংশন ট্রেসগুলিতে তথ্য সরবরাহ করে। ভাগ্যক্রমে, তারা এটি ব্যাখ্যা করার জন্য একটি স্ক্রিপ্টও সরবরাহ করে। derickrethans.nl/xdebug-and-tracing-mmory-usage.html মনে হচ্ছে এ পর্যন্ত আমার পক্ষে কাজ করছে ...
লুক এইচ

উত্তর:


11

Xdebug 2.6 (2018-01-29) এ রিমিম্লেটেড মেমরি ট্রেসিং যা Qcachegrind বা অনুরূপ সরঞ্জামে ব্যবহার করা যেতে পারে। শুধু মেমরি বিকল্প নির্বাচন করা নিশ্চিত করুন :)

ডক্স থেকে:

এক্সডিবাগ ২.6 থেকে, প্রোফাইলার কতটা মেমরি ব্যবহার করা হচ্ছে এবং কোন এজেন্ড পদ্ধতিতে মেমরির ব্যবহার বাড়িয়েছে সে সম্পর্কেও তথ্য সংগ্রহ করে।

আমি ফাইলটির ফর্ম্যাটটির সাথে পরিচিত নই, তবে এটি বেশ কয়েকটি স্মৃতি সমস্যার সন্ধানে কিউচেগ্রিড আমার পক্ষে দুর্দান্ত কাজ করেছে।

qcachegrind sample


4
এবং তারা এমনকি আমার টিকিট ব্যবহার। :)
জেডাব্লু

এক্সডিবাগ ২.6 রিলিজে পিএইচপি 5 এর জন্য সমর্থন বাদ দিয়েছেন।
পাওয়ারটাক

যদি এটি কাউকে সহায়তা করে ... পিএইচপি-এফপিএম ব্যবহার করার সময়, পিড বিভিন্ন অনুরোধের মধ্যে পরিবর্তন করতে পারে না। ডিফল্ট প্রোফাইলার_আউটপুট_নামের সাহায্যে এটি xdebug পূর্ববর্তী ডেটা ওভাররাইট করতে পরিচালিত করে। Xdebug.org/docs/all_settings#trace_output_name
অ্যালিগট

আমি এখন qcachegrind ব্যবহার করার চেষ্টা করছি এবং আমি কী দেখছি বুঝতে পারছি না। আমি কোথাও মেমরি নম্বর দেখতে পাচ্ছি না। প্রতিটি পরিবর্তনশীল কত স্মৃতি গ্রহণ করে? আমি এমন কিছু চাই যা এক্সিকিউশনটি সনাক্ত করতে এবং প্রতিটি বিন্দুতে মেমরিটি প্রদর্শন করতে পারে এবং কী পরিবর্তনশীলরা সেই স্মৃতিটি গ্রহণ করছে। আমি এই বিষয়ে আরও তথ্য কোথায় পেতে পারি?
জন কেটজিক

72

আপনি সম্ভবত জানেন যে এক্সডিবাগ ২. * সংস্করণ থেকে মেমরির প্রোফাইলিং সমর্থনটি বাদ দিয়েছেন। দয়া করে এখানে "সরানো ফাংশন" স্ট্রিংটি অনুসন্ধান করুন: http://www.xdebug.org/updates.php

সরানো ফাংশন

মেমরি প্রোফাইলিংয়ের জন্য সমর্থন সরানো হয়েছে কারণ এটি সঠিকভাবে কাজ করে না।

সুতরাং আমি অন্য একটি সরঞ্জাম চেষ্টা করেছি এবং এটি আমার পক্ষে ভাল কাজ করেছে।

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

এটি সক্ষম করতে আমি আমার উবুন্টু সার্ভারে এটি করেছি:

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 দিয়ে শেষ পর্যন্ত ফাইলটি খুলুন

গুগল gperftools ব্যবহার (প্রস্তাবিত!)

প্রথমে এখানে সর্বশেষতম প্যাকেজটি ডাউনলোড করে গুগল জিপারফটুলগুলি ইনস্টল করুন: 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"));

তারপরে আপনার টার্মিনালটি খুলুন এবং চালু করুন:

pprof --web /tmp/profile.heap

নীচে দেখানো জাতীয় কিছু সহ আপনার বিদ্যমান ব্রাউজার সেশনে পিআরএফ একটি নতুন উইন্ডো তৈরি করবে:

PHP memory profiling with memprof and gperftools

এক্সএইচপ্রুফ + এক্সহগুই (সিপিইউ এবং মেমরি উভয়ই প্রোফাইলে আমার মতে সেরা)

সঙ্গে Xhprof এবং Xhgui ভাল হিসাবে আপনি বা শুধু মেমোরি ব্যবহার CPU ব্যবহারের প্রোফাইলে করতে পারেন যে মুহূর্তে আপনার সমস্যা রয়েছে। এটি একটি সম্পূর্ণ সমাধান, এটি আপনাকে সম্পূর্ণ নিয়ন্ত্রণ দেয় এবং লগগুলি মঙ্গো বা ফাইল সিস্টেমে উভয়ই লেখা যায়।

আরও তথ্যের জন্য আমার উত্তর এখানে দেখুন

কালো আগুন

ব্ল্যাকফায়ার হলেন সেন্সিওল্যাবস, পিএইচপি প্রোফাইলার, সিমফনি 2 ছেলেরা https://blackfire.io/

আপনি যদি আপনার ভার্চুয়াল মেশিন সেট আপ করতে পুপ্পেট ব্যবহার করেন তবে আপনি এটি সমর্থিত তা জানতে পেরে খুশি হবেন ;-)


আপনি কিভাবে এটি কাজ করতে পারেন? আমি memprof_enableআমার পিএইচপি কোড লাগানোর চেষ্টা করেছি এবং পেয়েছি PHP Fatal error: Uncaught Error: Call to undefined function memprof_enable()। আমি তাদের বর্তমান উত্স কোড থেকে ইনস্টল করা gperftools করেছি।
আন্দ্রে পোখিলকো

আপনি এক্সটেনশনটি সঠিকভাবে লোড হচ্ছে কিনা তা দেখার php -iজন্য ক্লায় বা একটি চালান phpinfo()। আপনার যদি এটি না থাকে তবে এটি সম্ভবত আপনার *.iniফাইলগুলিতে একবার নজর দেওয়া উচিত ।
ফ্রান্সেসকো ক্যাসুলা

4
দ্রষ্টব্য: সর্বশেষতম সংস্করণটি কেবল পিএইচপি 7 সমর্থন করে। আপনি যদি পিএইচপি 5 ব্যবহার করেন তবে ইনস্টল করুন sudo pecl install memprof-1.0.0
জিজিয়াস

18

ঠিক আছে, এটি আপনি যা খুঁজছেন ঠিক তা নাও হতে পারে তবে পিএইচপি-র অন্তর্নির্মিত বেশ কয়েকটি ফাংশন রয়েছে যা মেমরির ব্যবহারকে আউটপুট করে। যদি আপনি কেবল দেখতে চান যে কোনও ফাংশন কল কতটা মেমরি ব্যবহার করছে, আপনি কল করার আগে এবং পরে মেমোরি_সেট_পিট_উসেজ () ব্যবহার করতে পারেন এবং পার্থক্য নিতে পারেন।

আপনি খুব অনুরূপ মেমোরি_জেট_সেজ () ব্যবহার করে আপনার ডেটা ঘিরে একই কৌশল ব্যবহার করেন ।

অত্যন্ত অসম্পূর্ণ পদ্ধতি, তবে কোডের একটি অংশটি চেক করার এটি একটি দ্রুত উপায়। আমি সম্মত হই যে xdebug মেম ডেল্টাস কখনও কখনও দরকারী হিসাবে কার্যকর হতে পারে, তাই আমি প্রায়শই কেবল কোডের একটি অংশে সংকীর্ণ করতে এটি ব্যবহার করি, তারপরে ম্যানুয়ালি ছোট টুকরাগুলির জন্য নির্দিষ্ট মেমরির ব্যবহার ডাম্প করে।


0

http://geek.michaelgrace.org/2012/04/tracing-php-memory-usage- using-xdebug-and-mamp-on-mac/

আমি ম্যাকে আছি তাই আপনি উইন্ডোতে থাকলে আপনার এটি পরীক্ষা করতে হবে তবে এটি আমার পক্ষে কার্যকর।

আমি আমার ট্রেসফিল-অ্যানালাইজার.এফপিপি ফাইলটি সংশোধন করেছি এবং উপরের পিএইচপি বাইনারিটিতে পাথ যুক্ত করেছি যাতে আপনি এটিকে সাধারণ ইউনিক্স স্ক্রিপ্ট হিসাবে টার্মিনালে কল করতে পারেন।

#!/Applications/MAMP/bin/php5.3/bin/php
<?php
if ( $argc <= 1 || $argc > 4 )
{

755 এ এই ফাইলটি chmod করতে ভুলবেন না।

স্ক্রিপ্টটি স্বয়ংক্রিয়ভাবে কল করার জন্য আপনি সহজেই একটি রুবি প্রহরী স্ক্রিপ্ট তৈরি করতে পারবেন যখন এটি একটি মেমরি প্রোফাইল ফাইল (* .xt) তৈরি করে। এইভাবে আপনি পরীক্ষা এবং চালিত কমান্ডটি বার বার চালিত না করে আপনার উন্নতিগুলি দেখতে পাচ্ছেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.