PHP 5.5 ได้เปิดตัวและมีโมดูลการแคชรหัสใหม่ที่เรียกว่า OPCache แต่ดูเหมือนจะไม่มีเอกสารใด ๆ
ดังนั้นเอกสารสำหรับมันอยู่ที่ไหนและฉันจะใช้ OPcache ได้อย่างไร
PHP 5.5 ได้เปิดตัวและมีโมดูลการแคชรหัสใหม่ที่เรียกว่า OPCache แต่ดูเหมือนจะไม่มีเอกสารใด ๆ
ดังนั้นเอกสารสำหรับมันอยู่ที่ไหนและฉันจะใช้ OPcache ได้อย่างไร
คำตอบ:
OpCache รวบรวมโดยค่าเริ่มต้นใน PHP5.5 + อย่างไรก็ตามมันจะปิดการใช้งานโดยค่าเริ่มต้น ในการเริ่มใช้ OpCache ใน PHP5.5 + คุณต้องเปิดใช้งานก่อน ในการทำเช่นนี้คุณต้องทำดังต่อไปนี้
เพิ่มบรรทัดต่อไปนี้ใน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 ใช้ ซึ่งรวมถึงการตั้งค่า ini ทั้งหมดรวมถึงข้อมูลรุ่นและไฟล์ที่อยู่ในบัญชีดำ
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);
มี GUI บางส่วนที่สร้างขึ้นเพื่อช่วยรักษา OpCache และสร้างรายงานที่เป็นประโยชน์ เครื่องมือเหล่านี้ใช้ประโยชน์จากฟังก์ชั่นด้านบน
OpCacheGUI
ขอสงวนสิทธิ์ฉันเป็นผู้เขียนโครงการนี้
คุณสมบัติ:
ภาพหน้าจอ:
URL: https://github.com/PeeHaa/OpCacheGUI
opcache สถานะ
คุณสมบัติ:
ภาพหน้าจอ:
URL: https://github.com/rlerdorf/opcache-status
opcache-GUI
คุณสมบัติ:
ภาพหน้าจอ:
เนื่องจาก OPcache ถูกออกแบบมาเพื่อแทนที่โมดูล APC จึงไม่สามารถเรียกใช้โมดูลเหล่านี้ขนานใน PHP สิ่งนี้เป็นสิ่งที่ดีสำหรับการแคช PHP opcode เนื่องจากไม่มีผลต่อการเขียนโค้ด
อย่างไรก็ตามหมายความว่าหากคุณกำลังใช้ APC เพื่อจัดเก็บข้อมูลอื่น ๆ (ผ่านapc_store()
ฟังก์ชั่น) คุณจะไม่สามารถทำได้หากคุณตัดสินใจใช้ OPCache
คุณจะต้องใช้ไลบรารีอื่นเช่นAPCuหรือYacซึ่งทั้งสองเก็บข้อมูลในหน่วยความจำ PHP ที่ใช้ร่วมกันหรือสลับไปใช้สิ่งที่ต้องการ memcached ซึ่งเก็บข้อมูลในหน่วยความจำในกระบวนการแยกเป็น 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" อาจทำให้แอปพลิเคชันและกรอบงานบางอย่างที่มีอยู่ (เช่น Doctrine, ZF2, PHPUnit)
ฉันจะลดลงในสองเซ็นต์ของฉันสำหรับสิ่งที่ฉันใช้ opcache
ฉันได้ทำเฟรมเวิร์กที่กว้างขวางพร้อมฟิลด์จำนวนมากและวิธีการตรวจสอบและ enums เพื่อให้สามารถพูดคุยกับฐานข้อมูลของฉัน
ไม่มี opcache
เมื่อใช้สคริปต์นี้โดยไม่ใช้ opcache และฉันกด 9000 คำขอใน 2.8 วินาทีไปยังเซิร์ฟเวอร์ apache มันจะออกมาสูงสุดที่ 90-100% cpu เป็นเวลา 70-80 วินาทีจนกระทั่งมันจับกับคำขอทั้งหมด
Total time taken: 76085 milliseconds(76 seconds)
ด้วยการเปิดใช้งาน opcache
ด้วยการเปิดใช้งาน opcache จะทำงานที่เวลา 25-30% cpu เป็นเวลาประมาณ 25 วินาทีและไม่เคยผ่านการใช้งาน cpu 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
ตั้งค่าซึ่งเปิดใช้งานโดยค่าเริ่มต้น
ด้วย PHP 5.6 บน Amazon Linux (ควรเหมือนกันบน RedHat หรือ CentOS):
yum install php56-opcache
จากนั้นรีสตาร์ท apache
ฉันพบสิ่งนี้เมื่อตั้งค่า moodle ฉันเพิ่มบรรทัดต่อไปนี้ในไฟล์ 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