আমার একটি সাইটে drush cc all
চালাতে 4 মিনিটেরও বেশি সময় লাগে। সাইট ডিবি কয়েক জিবি। তবে কেন এটি খুব বেশি সময় নেয় তার স্পষ্ট কারণ আমি দেখতে পাচ্ছি না। বোতল ঘাড় সনাক্ত করতে আমি কি করতে পারি?
আমার একটি সাইটে drush cc all
চালাতে 4 মিনিটেরও বেশি সময় লাগে। সাইট ডিবি কয়েক জিবি। তবে কেন এটি খুব বেশি সময় নেয় তার স্পষ্ট কারণ আমি দেখতে পাচ্ছি না। বোতল ঘাড় সনাক্ত করতে আমি কি করতে পারি?
উত্তর:
এটি স্ব-স্বচ্ছ সাফ করার ক্যাশে খুব বেশি সময় নেয় না, যেহেতু এটি কেবল ক্যাশে টেবিলগুলি কাটা হচ্ছে। সবচেয়ে বেশি সময় লাগে কী তার পরে ক্যাশে রেজিস্ট্রি পুনর্নির্মাণ। সাধারণত এটি থিম রেজিস্ট্রি যা নতুন নতুন টেম্পলেট ফাইলগুলির জন্য আপনার সমস্ত হুক এবং আপনার সমস্ত ড্রুপাল ফোল্ডারগুলির জন্য স্ক্যান করে, এমন সিস্টেম যা নতুন মডিউল এবং শ্রেণি ফাইলগুলির জন্য ফাইলগুলি স্ক্যান করে, এবং অনুরূপ।
আপনি সর্বদা নির্দিষ্ট drush cc theme-registry
বা অন্য কোনও নির্দিষ্ট করে ক্যাশে সাফ করতে পারেন ।
প্রসেসিংয়ে গতি বাড়ানোর জন্য আপনি পিএইচপি ক্যাচিং মেকানিজম (যেমন ওপিসিচ, এক্সক্যাস ইত্যাদি) ব্যবহার করার পরামর্শ দেওয়া হচ্ছে। এবং এসকিউএল টেবিলগুলিতে ভারী ব্যবহারের প্রতিস্থাপনের জন্য মেমরি-বেস ক্যাশে (উদাহরণস্বরূপ মেমক্যাচড বা রেডিস), সুতরাং ক্যাশে ক্লিয়ারিংয়ের কোনও সময় লাগবে না, কেবল ক্যাশে ফ্লাশ করে (যেমন echo flush_all > /dev/tcp/127.0.0.1/11211
বাশে)।
বিকল্পভাবে আপনি সর্বদা ম্যানুয়ালি ক্যাশে সাফ করতে পারেন , উদাহরণস্বরূপ:
echo "SHOW TABLES LIKE 'cache%'" | $(drush sql-connect) | tail -n +2 | xargs -L1 -I% echo "DELETE FROM %;" | $(drush sql-connect) -v
বিশেষত সর্বাধিক সময় কী নিচ্ছে তা যাচাই করার জন্য আপনাকে এটি ডিবাগ / প্রোফাইল করতে হবে (যেমন এক্সডিবেগ, এক্সএইচপিপ্রফ, পিএইচপিডিবিজি, ডিট্রেস)।
ওএস এক্স / ইউনিক্সে এটি dtrace
(চলার পরে drush
) দ্বারা অর্জন করা যায় :
sudo dtrace -qn 'php*:::function-entry { printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }'
লিনাক্সে strace
, যেমন , ব্যবহার করুন
strace -e trace=sendto,recvfrom -s1000 -p $(pgrep php)
কিছু নির্দিষ্ট জিনিস সন্ধান করতে, উদাহরণস্বরূপ: যুক্ত করার চেষ্টা করুন strace ... 2>&1 | grep -C5 UPDATE
।
আপনার যদি সত্যিই বড় ডেটাবেস থাকে এবং আপনি যখন ক্যাশে সাফ না করেন তখন আপনার সিস্টেমটি ঠিকঠাক চলতে থাকে, সম্ভবত আপনার সেটআপটিকে পুরোপুরি সমর্থন করার মতো পর্যাপ্ত মেমরি আপনার কাছে নেই।
যদি আপনার সাইটটি একটি লিনাক্স বাক্সে চলমান থাকে তবে 'শীর্ষ' চালান (আপনার শেল থেকে) এবং ব্যবহারের মেমরির সাহায্যে প্রক্রিয়া তালিকাটিকে সাজানোর জন্য শিফট-এম টিপুন। তারপরে, অন্য টার্মিনাল থেকে আপনার ক্যাশে-ক্লিয়ার অপারেশন চালান। আপনি তালিকার শীর্ষে mysql এবং অ্যাপাচি দেখতে পাবেন। আপনি দেখতে পাবেন যে এই প্রক্রিয়াগুলির প্রতিটি মোট মেমরির কত শতাংশ ব্যবহার করছে এবং কতটা নিখরচায় র্যাম ব্যবহৃত হয়। আপনার যদি ভার্চুয়াল স্পেসের বিশাল পরিমাণ থাকে তবে আপনার সমস্ত দৈহিক র্যাম নিঃশেষ হয়ে যায়, এই অপারেশনটি ভিএম মেমরিটিকে ছিন্ন করতে পারে, যা আপনার মৃত্যুদন্ডের সময়টিকে সাধারণত যা হয় তার একটি ছোট ভগ্নাংশে নিয়ে যেতে পারে।
একবার, আমি একটি বাক্সে মাঝারি ট্রাফিক ড্রুপাল সাইট চালাচ্ছিলাম W / আউট-যথেষ্ট- সেটআপটি সমর্থন করার জন্য পর্যাপ্ত মেমরি। আমি যখন কোনও অপ্রাসঙ্গিক লো ট্রাফিক সাইটটিতে একটি ক্যাশে-ক্লিয়ার চালিয়েছি তখন ক্যাশে পুনর্নির্মাণটি সিস্টেমটিকে তার সীমা ছাড়িয়ে যায় এবং সমস্ত কিছুই লক-আপ হয়ে যায়। সুতরাং, মোট সিস্টেমের আচরণ এখানে গুরুত্বপূর্ণ; এই কারণেই 'শীর্ষ' এর মতো সাধারণ সরঞ্জামগুলি শুরু করার জন্য একটি সুবিধাজনক জায়গা।
আমি এখানে @ গ্রেগ_1_অ্যান্ডারসনের সাথে (কিছুটা) একমত হতে যাচ্ছি না।
যদি সিস্টেমটি সম্পূর্ণরূপে কোনও ক্রাশ না হয়ে থাকে cc all
তবে আমি মনে করি না যে আপনার কাছে সাধারণ মেমরির সমস্যা আছে। যখন কোনও এলএএমপি সার্ভার মেমরির বাইরে চলে যায় তখন তা অদলবদল করে। একটি সক্রিয় সার্ভার হিট অদলবদূন্যতার ভারসাম্য সৃষ্টি করবে। সিস্টেমের ধীরগতির কারণে httpd প্রসেসগুলি স্ট্যাক আপ শুরু হবে (অদলবদল একটি সিস্টেমকে খুব ধীর করে তোলে) যার ফলে আরও বেশি অদলবস্তু ব্যবহার করা হবে ইত্যাদি sites এবং প্রচুর সক্রিয় httpd প্রক্রিয়া।
যদি আপনার সিস্টেমটি শেষ পর্যন্ত ফিরে আসে তবে আমি মনে করি আপনি খারাপভাবে সুর করেছেন। drush cc all
অনেকগুলি ডাটাবেস অ্যাক্সেসের ফলস্বরূপ হবে, সুতরাং আমি মনে করি এটি আরও বেশি সমস্যা দেখায়। আমার পরামর্শটি সাইটটিতে মাইএসকিএলটিউনার চালানো হবে। আপনার যদি কোনও মাল্টি জিবি ডাটাবেস থাকে তবে আমার ধারণাটি হ'ল আপনার innodb_buffer_pool_size
দূরবর্তী অবস্থানগুলিও সঠিকভাবে আকারের নয়, এবং আপনার মাইএসকিউএল উদাহরণটি ছাঁটাই করছে। ডাটাবেস পাদদেশকে আরও ছোট রাখার চেষ্টা করার জন্য আমি একটি বিকল্প ক্যাশে ব্যাকএন্ডও তদন্ত করব।
এটি আপনার ওয়েব হোস্টিং পরিবেশ হতে পারে। আপনি কি কোনও স্থানীয় সেটআপ, বা ভাগ করা হোস্টিং বা ভিপিএস / সার্ভারে হোস্টিংয়ের বিষয়ে উল্লেখ করছেন?
max_execution_time
। drush php-eval "print ini_get('max_execution_time');"
যদিও আপনি ডাবল চেক করতে পারেন ।
এটি সম্পূর্ণ সমাধান নয়, আপনার বিলম্বের উত্স সনাক্ত করতে আরও একটি সরঞ্জাম।
top
প্রক্রিয়াগুলি নিরীক্ষণের জন্য ব্যবহার করার পাশাপাশি আপনি mytop
তথ্যমূলক ফলাফল খুঁজে পেতে পারেন । (উপরের অন্যান্য উত্তরগুলি মাইএসকিউএল অনুমান করে তবে আপনি যদি অন্য ডিবি ব্যাকএন্ড ব্যবহার করেন তবে আপনাকে একটি সমতুল্য সরঞ্জামের জন্য মাইটোপ অদলবদল করতে হবে))
mytop
কেবলমাত্র SHOW FULL PROCESSLIST
একটি লুপে মাইএসকিউএল সম্পাদন করে এবং আপনাকে দেখায় যে কোয়েরিগুলি কার্যকর করা হচ্ছে (যাতে এতে অনেক সময় লাগে)। যদি ক্যাশে ক্লিয়ারটি এই বা সেই টেবিলটি পরিষ্কার করতে দীর্ঘ সময় নিচ্ছে, আপনি এখানে জিনিসগুলি ঠিক কীভাবে ধরে আছেন তা দেখতে পাবেন। আপনার যদি ইনস্টল করার অ্যাক্সেস না থাকে তবে mytop
কেবল আপনার শেলটিতে একটি অশোধিত সংস্করণ করুন -
while true; do mysql -e 'SHOW FULL PROCESSLIST' && sleep 5 && clear ; done
যদি দেরিটি মাইএসকিউএল কোয়েরিগুলি থেকে উদ্ভূত হয় না, তবে এই সরঞ্জামটি আপনার পক্ষে অন্তত তা নিশ্চিত করতে পারে।
ক্যাশ ক্লিয়ার প্রক্রিয়াটির কোন অংশটি ধীর করে দিচ্ছিল তা সুনির্দিষ্টভাবে সংকীর্ণ করতে খুব সাহায্যকারী হিসাবে আমি স্প্রেড আপ ক্যাশে ক্লিয়ারিং অন ড্রুপাল entitled শিরোনামে একটি ব্লগ পোস্ট পেয়েছি । বৈশিষ্ট্যগুলি মডিউল এবং সত্তা এপিআই মডিউলটিতে এটি যে বিষয়গুলি চিহ্নিত করে তা আমার সাইটে প্রভাব ফেলছিল , তবে পোস্টটিতে বিশদ প্রক্রিয়াটি আমাকে ড্রুপাল কোর এবং ব্রেকপয়েন্ট মডিউলটিতে যে সমস্যাগুলির মুখোমুখি হয়েছিল তা সন্ধান করতে সহায়তা করেছে ।
প্রক্রিয়াটির মাধ্যমে কাজ করতে কিছুটা সময় লাগে, তবে এটি ক্যাশে ক্লিয়ারগুলি একাধিক মিনিট থেকে এক মিনিটের মধ্যে হ্রাস করতে আমাকে সহায়তা করেছে।