PHP 5.5 को रिलीज़ कर दिया गया है और इसमें एक नया कोड कैशिंग मॉड्यूल है जिसे OPCache कहा जाता है, लेकिन इसके लिए कोई दस्तावेज नहीं दिखता है।
तो इसके लिए दस्तावेज कहां है और मैं OPcache का उपयोग कैसे करूं?
PHP 5.5 को रिलीज़ कर दिया गया है और इसमें एक नया कोड कैशिंग मॉड्यूल है जिसे OPCache कहा जाता है, लेकिन इसके लिए कोई दस्तावेज नहीं दिखता है।
तो इसके लिए दस्तावेज कहां है और मैं OPcache का उपयोग कैसे करूं?
जवाबों:
OpCache को PHP5.5 + पर डिफ़ॉल्ट रूप से संकलित किया गया है। हालाँकि यह डिफ़ॉल्ट रूप से अक्षम है। PHP5.5 में OpCache का उपयोग शुरू करने के लिए + आपको सबसे पहले इसे सक्षम करना होगा। ऐसा करने के लिए आपको निम्नलिखित कार्य करने होंगे।
निम्नलिखित पंक्ति को अपने में जोड़ें php.ini
:
zend_extension=/full/path/to/opcache.so (nix)
zend_extension=C:\path\to\php_opcache.dll (win)
ध्यान दें कि जब पथ में रिक्त स्थान होते हैं तो आपको इसे उद्धरणों में लपेटना चाहिए:
zend_extension="C:\Program Files\PHP5.5\ext\php_opcache.dll"
यह भी ध्यान दें कि आपको zend_extension
"सामान्य" निर्देश के बजाय निर्देश का उपयोग करना होगा extension
क्योंकि यह वास्तविक Zend इंजन को प्रभावित करता है (यानी वह चीज जो PHP चलाता है)।
वर्तमान में चार कार्य हैं जिनका आप उपयोग कर सकते हैं:
opcache_get_configuration()
:एक सरणी देता है जिसमें वर्तमान में उपयोग किया गया कॉन्फ़िगरेशन OpCache उपयोग करता है। इसमें सभी इनआई सेटिंग्स के साथ-साथ संस्करण की जानकारी और ब्लैक लिस्टेड फाइलें भी शामिल हैं।
var_dump(opcache_get_configuration());
opcache_get_status()
:यह कैश की वर्तमान स्थिति के बारे में जानकारी के साथ एक सरणी लौटाएगा। इस जानकारी में ऐसी चीजें शामिल होंगी जैसे: स्थिति कैश है (सक्षम, पुनः आरंभ, पूर्ण आदि), मेमोरी उपयोग, हिट, मिसेस और कुछ और उपयोगी जानकारी। इसमें कैश्ड स्क्रिप्ट भी होगी।
var_dump(opcache_get_status());
opcache_reset()
:पूरा कैश रीसेट करता है। मतलब सभी संभावित कैश्ड स्क्रिप्ट को अगली यात्रा पर फिर से भेज दिया जाएगा।
opcache_reset();
opcache_invalidate()
:एक विशिष्ट कैश्ड स्क्रिप्ट को अमान्य करता है। मतलब स्क्रिप्ट अगली यात्रा पर फिर से भेज दी जाएगी।
opcache_invalidate('/path/to/script/to/invalidate.php', true);
OpCache को बनाए रखने और उपयोगी रिपोर्ट तैयार करने में मदद करने के लिए कुछ GUI बनाए गए हैं। ये उपकरण उपरोक्त कार्यों का लाभ उठाते हैं।
OpCacheGUI
अस्वीकरण मैं इस परियोजना का लेखक हूं
विशेषताएं:
स्क्रीनशॉट:
URL: https://github.com/PeeHaa/OpCacheGUI
opcache-स्थिति
विशेषताएं:
स्क्रीनशॉट:
URL: https://github.com/rlerdorf/opcache-status
opcache-जीयूआई
विशेषताएं:
स्क्रीनशॉट:
क्योंकि OPcache को APC मॉड्यूल को बदलने के लिए डिज़ाइन किया गया है, इसलिए उन्हें PHP में समानांतर में चलाना संभव नहीं है। यह PHP opcode को कैच करने के लिए ठीक है क्योंकि इससे न ही यह प्रभावित होता है कि आप कोड कैसे लिखते हैं।
हालांकि इसका मतलब यह है कि यदि आप वर्तमान में एपीसी का उपयोग अन्य डेटा ( apc_store()
फ़ंक्शन के माध्यम से ) स्टोर करने के लिए कर रहे हैं, तो आप ऐसा नहीं कर पाएंगे, यदि आप ओपीसीच का उपयोग करने का निर्णय लेते हैं।
आपको APCu या YAC जैसी किसी अन्य लाइब्रेरी का उपयोग करने की आवश्यकता होगी, जो दोनों साझा PHP मेमोरी में डेटा संग्रहीत करते हैं, या मेमकाटेड जैसी किसी चीज़ का उपयोग करने के लिए स्विच करते हैं, जो PHP में एक अलग प्रक्रिया में मेमोरी में डेटा संग्रहीत करता है।
इसके अलावा, OPCache में APC में मौजूद अपलोड प्रगति मीटर के बराबर नहीं है। इसके बजाय आपको सत्र अपलोड प्रगति का उपयोग करना चाहिए ।
OPcache के लिए प्रलेखन यहाँ सूचीबद्ध सभी विन्यास विकल्पों के साथ पाया जा सकता है । अनुशंसित सेटिंग्स हैं:
; Sets how much memory to use
opcache.memory_consumption=128
;Sets how much memory should be used by OPcache for storing internal strings
;(e.g. classnames and the files they are contained in)
opcache.interned_strings_buffer=8
; The maximum number of files OPcache will cache
opcache.max_accelerated_files=4000
;How often (in seconds) to check file timestamps for changes to the shared
;memory storage allocation.
opcache.revalidate_freq=60
;If enabled, a fast shutdown sequence is used for the accelerated code
;The fast shutdown sequence doesn't free each allocated block, but lets
;the Zend Engine Memory Manager do the work.
opcache.fast_shutdown=1
;Enables the OPcache for the CLI version of PHP.
opcache.enable_cli=1
यदि आप किसी लाइब्रेरी या कोड का उपयोग करते हैं जो कोड एनोटेशन का उपयोग करता है, तो आपको टिप्पणियों को सहेजने में सक्षम होना चाहिए:
opcache.save_comments=1
यदि अक्षम किया गया है, तो सभी PHPDoc टिप्पणियों को कोड से अनुकूलित कोड के आकार को कम करने के लिए छोड़ दिया जाता है। "Doc Comments" को निष्क्रिय करने से कुछ मौजूदा एप्लिकेशन और फ्रेमवर्क टूट सकते हैं (जैसे Doctrine, ZF2, PHPUnit)
मैं अपने दो सेंट में ड्रॉप करने के लिए जा रहा हूं जो मैं अपाचे का उपयोग करता हूं।
मैंने बहुत सारे क्षेत्रों और सत्यापन विधियों के साथ एक व्यापक ढांचा बनाया है और अपने डेटाबेस से बात करने में सक्षम होने के लिए enums।
बिना ओपेक के
जब इस स्क्रिप्ट का उपयोग अपाचे के बिना किया जाता है और मैं Apache सर्वर पर 2.8 सेकंड में 9000 अनुरोधों को धकेलता हूं तो यह 90-100% cpu पर 70-80 सेकंड तक अधिकतम हो जाता है जब तक कि यह सभी अनुरोधों को पकड़ नहीं लेता।
Total time taken: 76085 milliseconds(76 seconds)
Opcache सक्षम होने के साथ
ओपचे के सक्षम होने के साथ यह 25-30% सीपीयू समय पर लगभग 25 सेकंड तक चलता है और कभी भी 25% सीपीयू का उपयोग नहीं करता है।
Total time taken: 26490 milliseconds(26 seconds)
मैंने फ्रेमवर्क को छोड़कर सब कुछ के कैशिंग को अक्षम करने के लिए एक opcache ब्लैकलिस्ट फ़ाइल बनाई है जो सभी स्थिर है और कार्यक्षमता की आवश्यकता नहीं है। मैं केवल फ्रेमवर्क फ़ाइलों के लिए स्पष्ट रूप से चुनता हूं ताकि कैश फ़ाइलों को पुनः लोड / मान्य करने की चिंता किए बिना मैं विकसित हो सकूं। सब कुछ कैश्ड होने से अनुरोधों के कुल पर एक सेकंड की बचत होती है25546 milliseconds
यह काफी मात्रा में डेटा / अनुरोधों को विस्तारित करता है जो मैं प्रति सेकंड सर्वर के बिना भी एक पसीने को तोड़ सकता हूं।
zend_extension=php_opcache.dll; opcache.memory_consumption=128; opcache.interned_strings_buffer=8; opcache.max_accelerated_files=4000; opcache.revalidate_freq=60; opcache.fast_shutdown=1; opcache.enable_cli=1; opcache.blacklist_filename="C:\xampp\php\cfg\opcache.blacklist;
बस की जगह; ini फ़ाइल में एक प्रविष्टि के साथ। लेकिन यह वही है जो मैंने इस्तेमाल किया। ज्यादातर डिफ़ॉल्ट सामान
opcache.revalidate_freq=60;
यह निर्धारित करता है कि कोई फ़ाइल कितने सेकंड तक मेमोरी में रह सकती है। जब समय होता है तो यह फ़ाइल को पुन: जमा करता है।
opcache.revalidate_freq
किसी स्क्रिप्ट को परिवर्तनों के लिए कितनी बार जांचा जाता है (इसके आधार पर इसका टाइमस्टैम्प बदला गया है) को नियंत्रित करता है। इसलिए अगर किसी स्क्रिप्ट का टाइमस्टैम्प पिछली बार संकलित होने के बाद भी वैसा ही रहता है, तो इसे दोबारा नहीं बनाया जाएगा। यह सब मान लिया गया है कि आपने opcache.validate_timestamps
सेटिंग नहीं बदली है , जो डिफ़ॉल्ट रूप से सक्षम है।
Amazon Linux पर PHP 5.6 के साथ (RedHat या CentOS पर समान होना चाहिए):
yum install php56-opcache
और फिर अपाचे को पुनरारंभ करें।
मिजाज सेट करते समय मुझे इसका सामना करना पड़ा। मैंने php.ini फ़ाइल में निम्न पंक्तियाँ जोड़ीं।
zend_extension=C:\xampp\php\ext\php_opcache.dll
[opcache]
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 4000
opcache.revalidate_freq = 60
; Required for Moodle
opcache.use_cwd = 1
opcache.validate_timestamps = 1
opcache.save_comments = 1
opcache.enable_file_override = 0
; If something does not work in Moodle
;opcache.revalidate_path = 1 ; May fix problems with include paths
;opcache.mmap_base = 0x20000000 ; (Windows only) fix OPcache crashes with event id 487
; Experimental for Moodle 2.6 and later
;opcache.fast_shutdown = 1
;opcache.enable_cli = 1 ; Speeds up CLI cron
;opcache.load_comments = 0 ; May lower memory use, might not be compatible with add-ons and other apps
extension=C:\xampp\php\ext\php_intl.dll
[intl]
intl.default_locale = en_utf8
intl.error_level = E_WARNING
opcache.fast_shutdown = 0
github.com/zendtech/ZendOptimizerPlus/issues/146