PHP OPCache का उपयोग कैसे करें?


249

PHP 5.5 को रिलीज़ कर दिया गया है और इसमें एक नया कोड कैशिंग मॉड्यूल है जिसे OPCache कहा जाता है, लेकिन इसके लिए कोई दस्तावेज नहीं दिखता है।

तो इसके लिए दस्तावेज कहां है और मैं OPcache का उपयोग कैसे करूं?



4
दस्तावेज़ीकरण: php.net/manual/en/book.opcache.php
डेविड ओलिवर

बहुत बुरा है कि दस्तावेज़ीकरण हमें यह नहीं बताता है कि opcache को सही तरीके से कैसे संकलित किया जाए / इसे निष्क्रिय कर दिया जाए और न ही PHP 5.6.24+ स्रोत के ऑटोकॉन्फ़ को व्यवस्थित किया जाए, ताकि PHP संकलन हो सके! :-(
फिलिप ओवर्टोनिंगर रिंग्लो सेप

@ फ्रेड- ii- "बहुत सारी सेटिंग्स हैं जिन्हें समायोजित करने की आवश्यकता हो सकती है। यह समझना कि यह कैसे काम करता है और PHP 5.5 रिलीज प्रक्रिया के स्थिरीकरण चरण के दौरान मुद्दों की पहचान करने में बहुत मदद मिलेगी।" ... वह ब्लॉग पोस्ट बहुत उपयोगी नहीं है। यह नहीं समझाता है कि यह समझने के लिए कि यह कैसे काम करता है या सेटिंग्स को समायोजित करने के लिए कितना अच्छा है :(
icc97

जवाबों:


371

स्थापना

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

अस्वीकरण मैं इस परियोजना का लेखक हूं

विशेषताएं:

  • OpCache स्थिति
  • OpCache कॉन्फ़िगरेशन
  • OpCache आँकड़े
  • OpCache रीसेट करें
  • कैश्ड स्क्रिप्ट ओवरव्यू
  • कैश्ड स्क्रिप्ट अमान्य है
  • बहुभाषी
  • मोबाइल डिवाइस का समर्थन
  • चमकदार रेखांकन

स्क्रीनशॉट:

स्थिति

कैश्ड-लिपियों

रेखांकन

mobilr

URL: https://github.com/PeeHaa/OpCacheGUI

opcache-स्थिति

विशेषताएं:

  • OpCache स्थिति
  • OpCache कॉन्फ़िगरेशन
  • OpCache आँकड़े
  • कैश्ड स्क्रिप्ट ओवरव्यू
  • एक दस्तावेज

स्क्रीनशॉट:

स्थिति

URL: https://github.com/rlerdorf/opcache-status

opcache-जीयूआई

विशेषताएं:

  • OpCache स्थिति
  • OpCache कॉन्फ़िगरेशन
  • OpCache आँकड़े
  • OpCache रीसेट करें
  • कैश्ड स्क्रिप्ट ओवरव्यू
  • कैश्ड स्क्रिप्ट अमान्य है
  • स्वचालित ताज़ा

स्क्रीनशॉट:

opcache-जीयूआई-सिंहावलोकन

URL: https://github.com/amnuts/opcache-gui


6
PHP-CLI के संबंध में कुछ भी? सीएलआई इसका उपयोग कैसे करता है? जब FPM पुनः आरंभ होता है, तो OPCache रीसेट करता है - क्या यह CLI के OPCache को भी प्रभावित करता है? क्या CLI का OPCache अलग है या यह FPM के साथ समान कैश पूल साझा करता है? धन्यवाद!
शाहरियार इमानोव

3
Ubuntu 14.04, Apache 2.4.7, php 5.5.9 पर मेरे सबसे हालिया इंस्टॉलेशन पर मेरे लिए OpCache को डिफ़ॉल्ट रूप से सक्षम किया गया था।
20'14

नमस्ते, आपके तीसरे स्क्रीनशॉट में, cache_full गलत है, मैं पूर्ण पृष्ठ कैशिंग से संबंधित मान रहा हूं, क्या आप कृपया मुझे बता सकते हैं कि इसे कैसे चालू किया जाए? (इसे सच करें)
brucekaushik

मैं गलत हूं, जो पूर्ण पृष्ठ को कैशिंग करने के लिए नहीं है, लेकिन यह सच के रूप में दिखाई देगा यदि कैश का उपयोग करने वाली मेमोरी भरी हुई है। फिर भी धन्यवाद!
ब्रुसकॉशिक

zend_extension = C: \ path \ to \ php_opcache.dll (जीत) - php.ini में इस लाइन को जोड़ना ठीक काम करता है।
कलिदासन

152

OPCache APC की जगह लेता है

क्योंकि 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)


4
क्या वे उत्पादन वातावरण के लिए, विकास के लिए, या दोनों के लिए अनुशंसित सेटिंग्स हैं?
marcvangend

1
शायद मेरे हिस्से में गलतफहमी है कि वास्तव में अपाचे क्या है और इसका क्या उपयोग किया जाता है, लेकिन मैंने इसे कॉन्फ़िगर किया है और नीचे PeeHaa स्थिति स्क्रिप्ट के साथ परीक्षण किया है। सब काम कर रहा है। लेकिन मैं अभी भी ओपी सवाल पूछ रहा हूं। "इसे कैसे उपयोग करे?" यह विचारों और चीजों को कैशिंग करने के लिए नहीं है?
इस्मॉन

3
@isimmons "OPcache साझा मेमोरी में प्री-कम्पाइल की गई स्क्रिप्ट बाइटकोड को संग्रहीत करके PHP के प्रदर्शन को बेहतर बनाता है, जिससे प्रत्येक अनुरोध पर स्क्रिप्ट लोड और पार्स करने के लिए PHP की आवश्यकता को हटा दिया जाता है।"
Danack

1
@marcvangend अच्छी बात! मुझे लगता है कि कैशिंग उत्पादन में केवल वास्तविक अर्थ रखता है, इसलिए ये कॉन्फ़िगरेशन संभवतः उत्पादन सेटिंग्स हैं।
स्लीक

3
क्या कोई समझा सकता है कि अनुशंसित सेटिंग्स का प्रदर्शन डिफ़ॉल्ट से बदतर क्यों है या उन्हें कब प्रभाव देना शुरू करना चाहिए?
आरपी

19

मैं अपने दो सेंट में ड्रॉप करने के लिए जा रहा हूं जो मैं अपाचे का उपयोग करता हूं।

मैंने बहुत सारे क्षेत्रों और सत्यापन विधियों के साथ एक व्यापक ढांचा बनाया है और अपने डेटाबेस से बात करने में सक्षम होने के लिए 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

यह काफी मात्रा में डेटा / अनुरोधों को विस्तारित करता है जो मैं प्रति सेकंड सर्वर के बिना भी एक पसीने को तोड़ सकता हूं।


3
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 फ़ाइल में एक प्रविष्टि के साथ। लेकिन यह वही है जो मैंने इस्तेमाल किया। ज्यादातर डिफ़ॉल्ट सामान
Tschallacka

1
btw, मुझे 2100 डेटाबेस करने वाले मेमेचे के साथ यह चलाने का अनुरोध किया गया है, एक सेकंड मैं स्क्रिप्ट का उपयोग करता हूं जिसे मैं 150 माइक्रोसेकंड (लगभग 1/6 मिलीसेकंड के भीतर) का उपयोग करता
हूं

1
Opcache मेमोरी में php फाइलों को संकलित रूप में कैश करता है। तो आपके पास अब डिस्क से पढ़ने और php पार्सर द्वारा फ़ाइलों के संकलन और अनुकूलन का कोई विकल्प नहीं है। Memcache एक ऐसी चीज है जिसका उपयोग आप सत्रों के बीच चर को संग्रहीत करने के लिए कर सकते हैं। उदाहरण के लिए Sayt में एक उपयोगकर्ता के पास एक अद्यतन स्क्रिप्ट होती है, जो 10 सेकंड के लिए समान मापदंडों का अनुरोध करती है जबकि उपयोगकर्ता स्क्रीन पर देखता है। आप क्वेरी को एक बार संकलित करने के लिए मेम कैश का उपयोग कर सकते हैं, और फिर इसे पुनर्जीवित करने की मेमोरी से संकलित क्वेरी का अनुरोध करते रहें।
त्चलाकेका

2
यह नहीं है। opcache.revalidate_freq=60;यह निर्धारित करता है कि कोई फ़ाइल कितने सेकंड तक मेमोरी में रह सकती है। जब समय होता है तो यह फ़ाइल को पुन: जमा करता है।
१२:५० पर सस्चलैक

3
दरअसल, opcache.revalidate_freqकिसी स्क्रिप्ट को परिवर्तनों के लिए कितनी बार जांचा जाता है (इसके आधार पर इसका टाइमस्टैम्प बदला गया है) को नियंत्रित करता है। इसलिए अगर किसी स्क्रिप्ट का टाइमस्टैम्प पिछली बार संकलित होने के बाद भी वैसा ही रहता है, तो इसे दोबारा नहीं बनाया जाएगा। यह सब मान लिया गया है कि आपने opcache.validate_timestampsसेटिंग नहीं बदली है , जो डिफ़ॉल्ट रूप से सक्षम है।
jjlin

4

Amazon Linux पर PHP 5.6 के साथ (RedHat या CentOS पर समान होना चाहिए):

yum install php56-opcache

और फिर अपाचे को पुनरारंभ करें।


2

मिजाज सेट करते समय मुझे इसका सामना करना पड़ा। मैंने 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

intl -> http://php.net/manual/en/book.intl.php


1
ध्यान देने योग्य बात यह हो सकती है कि इस सेटिंग्स को यहाँ दस्तावेज़ित किया गया है: docs.moodle.org/30/en/OPcache
sierrasdetandil

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.