কম্পিউটার টিউটোরিয়াল

প্রোডাকশনে রুবি পারফরম্যান্স ডিবাগিংয়ে দক্ষতা: প্রামাণিক কৌশল

आप जानते हैं कि प्रदर्शन एक फीचर है। और बहुत सारी प्रदर्शन समस्याओं को डेवलपमेंट के दौरान ढूंढा और ठीक किया जा सकता है।

लेकिन उन स्लोडाउन के बारे में क्या जो केवल प्रोडक्शन में दिखाई देते हैं? क्या आपको हर एक कोड लाइन में लॉग मैसेज जोड़ने होंगे? यह चीजों को और भी धीमा कर देगा! या आप यह देखने के लिए टन छोटे "शायद यह इसे ठीक कर देगा" कमिट शिप करते हैं कि क्या अटकता है?

आपको इसका विश्लेषण करने के लिए अपने कोड को बर्बाद करने की आवश्यकता नहीं है। इसके बजाय, इसे rbtrace-ing करने का प्रयास करें।

अपने चल रहे रूबी ऐप को ट्रेस करें

rbtrace के साथ, आप प्रदर्शन समस्याओं का पता लगा सकते हैं, दूसरे रूबी प्रोसेस के अंदर कोड चला सकते हैं, और कोई कोड जोड़े बिना मेथड कॉल्स लॉग कर सकते हैं। बस अपने Gemfile में gem "rbtrace" जोड़ें।

मैंने सैम सैफ्रॉन के रूबी में मेमोरी लीक डीबग करने के बारे में अद्भुत पोस्ट से rbtrace के बारे में सीखा (जिसे आपको वास्तव में देखना चाहिए, अगर आपने पहले से नहीं देखा है)।

उस पोस्ट में, सैम ने एक प्रोसेस द्वारा उपयोग किए गए सभी ऑब्जेक्ट्स को देखने के लिए rbtrace का उपयोग किया:

bundle exec rbtrace -p $SIDEKIQ_PID -e 'Thread.new{GC.start;require "objspace";io=File.open("/tmp/ruby-heap.dump", "w"); ObjectSpace.dump_all(output: io); io.close}'

यह बहुत बढ़िया है। लेकिन आप बहुत कुछ कर सकते हैं।

rbtrace के साथ आप क्या कर सकते हैं?

कभी प्रोडक्शन में चल रहे SQL स्टेटमेंट्स (और उन्होंने कितना समय लिया) देखना चाहते थे?

~/Source/testapps/rbtrace jweiss$ rbtrace -p $RAILS_PID --methods "ActiveRecord::ConnectionAdapters::PostgreSQLAdapter#execute_and_clear(sql)" *** attached to process 7897 ActiveRecord::ConnectionAdapters::PostgreSQLAdapter#execute_and_clear(sql="SELECT \"articles\".* FROM \"articles\" WHERE \"articles\".\"id\" = $1 LIMIT 1") <0.002631>

2 सेकंड से अधिक समय लेने वाले सभी मेथड कॉल्स?

~/Source/testapps/rbtrace jweiss$ rbtrace -p $RAILS_PID --slow 2000 *** attached to process 8154 Integer#times <2.463761> ArticlesController#create <2.558673>

क्या आप जानना चाहते हैं कि एक निश्चित मेथड हर बार कब कॉल होता है?

~/Source/testapps/rbtrace jweiss$ rbtrace -p $RAILS_PID --methods "ActiveRecord::Persistence#save" *** attached to process 8154 ActiveRecord::Persistence#save <0.010964>

आपके ऐप द्वारा चलाए जा रहे थ्रेड्स देखें?

~/Source/testapps/rbtrace jweiss$ rbtrace -p $RAILS_PID -e "Thread.list" *** attached to process 8154 >> Thread.list => [#<Thread:0x007ff4fcc9a8a8@/usr/local/lib/ruby/gems/2.2.0/gems/puma-2.6.0/lib/puma/server.rb:269 sleep>, #<Thread:0x007ff4fcc9aa10@/usr/local/lib/ruby/gems/2.2.0/gems/puma-2.6.0/lib/puma/thread_pool.rb:148 sleep>, #<Thread:0x007ff4fcc9ab50@/usr/local/lib/ruby/gems/2.2.0/gems/puma-2.6.0/lib/puma/reactor.rb:104 sleep>, #<Thread:0x007ff4f98c0410 sleep>]

हाँ, -e के साथ आप अपने सर्वर के अंदर रूबी कोड चला सकते हैं:

~/Source/testapps/rbtrace jweiss$ rbtrace -p $RAILS_PID -e "ActiveRecord::Base.connection_config" *** attached to process 8154 >> ActiveRecord::Base.connection_config => {:adapter=>"postgresql", :pool=>5, :timeout=>5000, :database=>"rbtrace_test"}

हाँ, ठीक है, अब मैं थोड़ा डरा हुआ हूँ। लेकिन यह अभी भी बहुत कूल है। (और केवल वे उपयोगकर्ता जिनके पास प्रोसेस के साथ छेड़छाड़ करने की अनुमति है, वे इसे rbtrace कर सकते हैं, तो यह शायद ठीक है)।

rbtrace आपको अपने रूबी प्रोसेस को स्टेजिंग और प्रोडक्शन में इंस्पेक्ट करने के लिए टूल्स का एक टन देता है। आप देख सकते हैं कि आपके प्रोसेस मेमोरी का उपयोग (या दुरुपयोग) कैसे कर रहे हैं, धीमे फंक्शन कॉल्स को ट्रेस करें, और यहां तक कि रूबी कोड निष्पादित करें।

आपको समस्याओं को ठीक करने के लिए टन टेस्ट कमिट और लॉग मैसेज बनाने की ज़रूरत नहीं है। आप बस सर्वर पर हॉप कर सकते हैं, कुछ डेटा प्राप्त कर सकते हैं, और वापस हॉप आउट कर सकते हैं। और यहां तक कि अगर मैं अभी तक प्रोडक्शन में इसका उपयोग करने में पूरी तरह से सहज नहीं हूँ, तो मुझे यकीन है कि यह हमारे टेस्ट एनवायरनमेंट में भी मदद करेगा।

आपका क्या ख्याल है? आप rbtrace का उपयोग किस लिए कर सकते हैं?

  1. রুবিতে এনভায়রনমেন্ট ভেরিয়েবল মাস্টার করুন: একটি প্র্যাকটিক্যাল গাইড

  2. রুবি ম্যাট্রিক্স বুঝতে: ডেফিনিশন, অ্যাপ্লিকেশন এবং কীভাবে তৈরি করবেন

  3. রুবি Struct ও OpenStruct: দক্ষ ভ্যালু অবজেক্টস

  4. রুবি ডিবাগিং মাস্টার করুন: কমন এররর দ্রুত সমাধান