প্রোফাইলিং জ্যাঙ্গো


101

আমার জাজানো অ্যাপ্লিকেশনটি উত্পাদনের জন্য বেদনাদায়কভাবে ধীর হয়ে গেছে। সম্ভবত এটি কিছু জটিল বা আন-ইনডেক্সযুক্ত প্রশ্নের জন্য।

আমার অ্যাপ্লিকেশনটি প্রোফাইল দেওয়ার কোনও জ্যাঙ্গো-ইশ উপায় আছে?

উত্তর:


82

ব্যবহার করে দেখুন জ্যাঙ্গো ডিবাগ টুলবার । এটি আপনাকে দেখাবে যে প্রতিটি পৃষ্ঠায় কোন প্রশ্নগুলি কার্যকর করা হয় এবং তারা কত সময় নেয়। এটি সত্যই কার্যকর, শক্তিশালী এবং সহজেই ব্যবহারযোগ্য সরঞ্জাম।

এছাড়াও, ডকুমেন্টেশন থেকে ডেটাবেস অ্যাক্সেস অপ্টিমাইজেশনে জ্যাঙ্গো পারফরম্যান্স সম্পর্কে প্রস্তাবনাগুলি পড়ুন ।

আর জ্যাঙ্গো কর্মক্ষমতা টিপস জ্যাকব কাপলান-মস দ্বারা।


14
জ্যাঙ্গো ডিবাগ সরঞ্জামদণ্ডটি দেখুন - আমি বিকাশের সময় এটিকে বন্ধ করে দিয়েছিলাম এবং আমার (স্বীকারোক্তি কম শক্তি) ল্যাপটপের উপর পৃষ্ঠার রেন্ডারিং উল্লেখযোগ্যভাবে দ্রুততর হয়েছিল - আপনি কতটা ডেটা ডাউনলোড করছেন তা দেখতে সার্ভারে দেখুন look
ডোমিনিক রজার

4
জ্যাঙ্গো-ডিবাগ-সরঞ্জামদ্বার জঞ্জো-ওআরএম ডিবি-কে কয়টি ক্যারি করে তা দেখতে আমাকে সহায়তা করে এবং আমরা দেখতে পাচ্ছি যে সিলেক্ট_ রিলেটেড () ফাংশনটি কীভাবে কম আঘাত করে।
পাঁচচিকর

12
@ প্রভাবশালী-রজার আমি বুঝতে পারিনি যে ডিবাগ সরঞ্জামদণ্ড জিনিসগুলি প্রক্রিয়াটি কত ধীরে ধীরে তৈরি করেছে। আমার বর্গ কোয়েরিগুলি ছোট (30 মিমি) তবে সিপিইউর সময় খুব বেশি ছিল (800 মিমি)। আমি যে টিউনটি করছিলাম তার অন্য পৃষ্ঠাটি 300 মিলিমিটারের বর্গ বার এবং 8000ms সিপিইউর সময় ছিল - তাই আমি সমস্যার উত্সটি খুঁজতে চেষ্টা করে চলেছি। জাজানো সরঞ্জামদণ্ডটি স্পিডের জিনিসগুলি বন্ধ করে দেওয়া। 3 বছর পরে, এখনও প্রাসঙ্গিক।
এস্তেবান

4
@ ইস্তেবান, এই মন্তব্যের জন্য আপনাকে অনেক ধন্যবাদ, আমি আক্ষরিক অর্থেই হাস্যকরভাবে বেশি পরিমাণে সিপিইউয়ের সময় বাদ দিয়ে চলেছি, goংগো সরঞ্জামদণ্ডটি গ্রহণ করেছে। জ্যাঙ্গো সিপিইউ প্রোফাইলিংয়ের সময়টি 30 সেকেন্ডের কাছাকাছি ছিল, আমি একবার এটি সরিয়ে ফেললে তা 1.5 সেকেন্ডে নেমে এসেছিল !!
নুব মামা

28

গুগলে কেবল "জ্যাঙ্গো-প্রোফাইলিং" টাইপ করুন, আপনি এই লিঙ্কগুলি (এবং আরও অনেক কিছু) পাবেন:

http://code.djangoproject.com/wiki/ProfilingDjango

http://code.google.com/p/django-profiling/

http://www.rkblog.rk.edu.pl/w/p/django-profiling-hotshot-and-kcachegrind/

ব্যক্তিগতভাবে আমি মিডওয়্যার পদ্ধতির ব্যবহার করছি - অর্থাত্ প্রতিটি ব্যবহারকারী একটি অধিবেশন সঞ্চিত "প্রোফাইলিং" পতাকাটি টগল করতে পারে এবং যদি আমার প্রোফাইলিং মিডলওয়্যার লক্ষ্য করে যে একটি পতাকা সেট করা আছে, এটি পাইথনের হটশট মডিউলটি এর মতো ব্যবহার করে :

def process_view(self, request, view_func, view_args, view_kwargs):

     # setup things here, along with: settings.DEBUG=True 
     # to get a SQL dump in connection.queries

     profiler = hotshot.Profile(fname)
     response = profiler.runcall(view_func, request, *view_args, **view_kwargs)
     profiler.close()

     # process results

     return response

সম্পাদনা: কনস্ট্যান্টিন দ্বারা উল্লিখিত এসকিউএল কোয়েরিগুলি http://github.com/robhudson/django-debug-toolbar প্রোফাইলিংয়ের জন্য একটি দুর্দান্ত জিনিস - তবে যদি আপনার প্রশ্নগুলি সত্যিই ধীর হয় (সম্ভবত এটিতে শত বা হাজার হাজার রয়েছে) তবে আপনি এটি কোনও ব্রাউজারে লোড না হওয়া পর্যন্ত পাগল পরিমাণের জন্য অপেক্ষা করবে - এবং তারপরে স্বচ্ছলতার কারণে ব্রাউজ করা শক্ত হবে। এছাড়াও, জ্যাঙ্গো-ডিবাগ-টুলবার ডিজাইন দ্বারা এজেএক্স অনুরোধগুলির অভ্যন্তরীণগুলিতে দরকারী অন্তর্দৃষ্টি দিতে অক্ষম।

সম্পাদনা 2: -এক্সটেনশনের একটি দুর্দান্ত প্রোফাইলিং কমান্ড অন্তর্নির্মিত রয়েছে:

https://github.com/django-extensions/django-extensions/blob/master/docs/runprofileserver.rst

শুধু এটি করুন এবং ভয়েলা:

$ mkdir /tmp/my-profile-data
$ ./manage.py runprofileserver --kcachegrind --prof-path=/tmp/my-profile-data

7
কোড.google.com/p/django-profile একটি ব্যবহারকারী প্রোফাইল django অ্যাপ্লিকেশন। এটি প্রোফাইল
জাজানো

4
@ ডিজেন: হাহ, ভাল কথা, এটি বোঝানো হয়েছিল: কোড. google.com/p/django- প্রোফিলিং :-)
টমাসজ

4
আপনি যদি ভাবছেন যে কীভাবে প্রোফাইলার ডাম্পগুলি চালানোর পরে পড়তে হয় তবে python manage.py runprofileserver --prof-path=/path/to/dirএই ব্লগটি অনুসরণ করুন: ডার্ককোডিং . नेट / সোফওয়্যার / প্রোফিলিং -ডজ্যাঙ্গো-ফর -সিপিইউ-বাউন্ড- অ্যাপস
নায়ারা

আহা হ্যাঁ, আমার প্রিয়, আমার প্রশ্নের উত্তরগুলির মধ্যে একটি শীর্ষস্থানীয় উত্তর খুঁজতে গুগল ব্যবহার করা হ'ল "আপনি এখানে যে জিনিসটি গুগল করেছেন কেবল তা গুগল"
আন্না

দ্রষ্টব্য যে hotshotপাইথন 3- ProfilingDjangoতে অবহেলা ও অপসারণ করা হয়েছে, সুতরাং এই উত্তরটি এবং উইকির পৃষ্ঠা 20202
প্যাট্রিক

16

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

এই স্ক্রিনশটটি দেখুন


20
1.6 এবং তদূর্ধ্বকে সমর্থন করে না, এক বছরের বেশি সময় ধরে কোনও ক্রিয়াকলাপ নেই।
হান তিনি

14

এখানে নির্লজ্জ প্লাগ, তবে আমি সম্প্রতি এই উদ্দেশ্যে https://github.com/django-silk/silk তৈরি করেছি । এটি কিছুটা জাঙ্গো টুলবারের মতো তবে ইতিহাস, কোড প্রোফাইলিং এবং সমস্ত কিছুর উপর আরও সূক্ষ্ম দানাদার নিয়ন্ত্রণের সাথে।


মিডলওয়্যার ইস্যুটি পাওয়া 'লগার "সিল্ক.মিলডওয়ার" এর জন্য কোনও হ্যান্ডলারের সন্ধান পাওয়া যায়নি
নবীন আগরওয়াল


5

আপনার কে কেচেগ্রিন্ড ভক্তদের জন্য, আমি দেখতে পেয়েছিলাম যে জ্যাঙ্গোর দুর্দান্ত পরীক্ষা দিয়ে শেলটি খুব সহজেই ব্যবহার করা যায় with Client বিশেষ করে উত্পাদনে ফ্লাইটে লগ তৈরির জন্য । আমি এই প্রযুক্তিটি এখন বেশ কয়েকটি অনুষ্ঠানে ব্যবহার করেছি কারণ এটির হালকা স্পর্শ রয়েছে - কোনও পেস্কি মিডলওয়্যার বা তৃতীয় পক্ষের জ্যাঙ্গো অ্যাপ্লিকেশনগুলির প্রয়োজন নেই!

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

from django.test import Client
import hotshot

c = Client()
profiler = hotshot.Profile("yourprofile.prof")  # saves a logfile to your pwd
profiler.runcall(c.get, "/pattern/matching/your/view/")
profiler.close()

ফলাফলের লগটি ভিজ্যুয়ালাইজ করতে, আমি হটশট 2 ক্যাচেগ্রিন্ড ব্যবহার করেছি:

তবে অন্যান্য বিকল্পগুলিও রয়েছে:


3

যখন ভিউগুলি এইচটিএমএল নয়, উদাহরণস্বরূপ জেএসওএন, প্রোফাইলের জন্য সাধারণ মিডলওয়্যার পদ্ধতি ব্যবহার করুন।

এখানে কয়েকটি উদাহরণ দেওয়া হল:

https://gist.github.com/1229685 - সমস্ত স্কোর কল ক্যাপচার দেখুন into

https://gist.github.com/1229681 - ভিউ তৈরি করতে ব্যবহৃত সমস্ত পদ্ধতি কল প্রোফাইল profile


0

আমার সম্প্রতি একটি জ্যাঙ্গো অ্যাপ্লিকেশনটি প্রোফাইল করা দরকার এবং এর মধ্যে অনেকগুলি পরামর্শ চেষ্টা করেছিলাম। আমি এর পরিবর্তে পাইয়েনস্রামেন্ট ব্যবহার করে শেষ করেছি , যা মিডওয়্যার তালিকার একক আপডেট ব্যবহার করে একটি জ্যাঙ্গো অ্যাপে যুক্ত করা যেতে পারে এবং সময়গুলির স্ট্যাক-ভিত্তিক ভিউ সরবরাহ করে provides

কিছু অন্যান্য সরঞ্জামের সাথে আমার অভিজ্ঞতার দ্রুত সংক্ষিপ্তসার:

  • জাজানো ডিবাগ সরঞ্জামদণ্ডটি দুর্দান্ত যদি আপনি সমস্যাটি এসকিউএল প্রশ্নের কারণে হয় এবং এর সাথে একত্রে ভাল কাজ করেpyinstrument
  • জ্যাঙ্গো-সিল্ক ভাল কাজ করে তবে স্ট্যাকের প্রতিটি অংশে যেখানে আপনি সাব-অনুরোধের সময় চান তার জন্য একটি প্রসঙ্গ পরিচালক বা ডেকরেটার যুক্ত করা দরকার। এটি cProfileসময় অ্যাক্সেসের একটি সহজ উপায়ও সরবরাহ করে এবং স্বয়ংক্রিয়ভাবে এজাক্সের সময়গুলি প্রদর্শন করে, যা উভয়ই সত্যই সহায়ক হতে পারে।
  • ডিজেডিটি-ফ্লেমগ্রাফটি আশাব্যঞ্জক লাগছিল তবে পৃষ্ঠাটি আসলে আমার সিস্টেমে কখনও রেন্ডার হয়নি।

অন্যান্য চেষ্টা করা সরঞ্জামগুলির সাথে তুলনা করা, pyinstrumentইনস্টল করা এবং ব্যবহার করা নাটকীয়ভাবে সহজ easier

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