OPcache คืออะไร: เปิดใช้งาน OPcache
จากบทความที่แล้ว เราได้พูดถึงพื้นฐานของการ Optimization และการทำความเข้าใจ Performance Bottlenecks ใน PHP Application กันไปแล้ว ในบทความนี้ เราจะมาเจาะลึกกันที่เครื่องมือสำคัญตัวหนึ่งที่ช่วยเพิ่มความเร็วให้กับ PHP Application ได้อย่างเห็นผล นั่นก็คือ OPcache ครับ
OPcache คืออะไร?
OPcache (Opcode Cache) คือกลไกการ caching ที่ถูกสร้างมาเพื่อเก็บ bytecode ของ PHP scripts ในหน่วยความจำที่ shared memory หลังจากที่ PHP scripts ถูก parse และ compile แล้ว เมื่อมีการเรียกใช้งาน script เดิมซ้ำอีกครั้ง OPcache จะดึง bytecode ที่ถูก cache ไว้มาใช้งานได้ทันที โดยไม่ต้องเสียเวลาในการ parse และ compile ใหม่ ซึ่งกระบวนการ parse และ compile นี้เองที่เป็นส่วนที่กินเวลามากที่สุดในการทำงานของ PHP
ลองนึกภาพว่าทุกครั้งที่เราสั่งอาหารจานโปรด พ่อครัวต้องเริ่มต้นตั้งแต่เตรียมวัตถุดิบ หั่นผัก ปรุงรส ซึ่งใช้เวลานาน แต่ถ้าพ่อครัวเตรียมวัตถุดิบและปรุงรสไว้ล่วงหน้า เมื่อเราสั่งอาหารจานเดิม ก็สามารถทำเสิร์ฟได้เร็วกว่าเดิมมาก OPcache ก็เหมือนกับพ่อครัวที่เตรียมวัตถุดิบ (bytecode) ไว้ล่วงหน้า ทำให้การทำงานของ PHP เร็วขึ้นอย่างเห็นได้ชัด
สรุปง่ายๆ: OPcache ช่วยลดเวลาในการ parse และ compile PHP scripts โดยการ cache bytecode ไว้ในหน่วยความจำ ทำให้ Application ทำงานเร็วขึ้น
ทำไมต้องใช้ OPcache?
การใช้ OPcache มีประโยชน์มากมาย ดังนี้:
- เพิ่มความเร็วให้กับ Application: ลดเวลาในการ load หน้าเว็บ ทำให้ผู้ใช้งานได้รับประสบการณ์ที่ดีขึ้น
- ลดการใช้ CPU: ลดภาระการทำงานของ CPU เนื่องจากไม่ต้อง parse และ compile scripts ซ้ำๆ
- รองรับการทำงานของ Frameworks: Frameworks ต่างๆ เช่น Laravel, Symfony ได้รับประโยชน์จาก OPcache อย่างมาก
- ติดตั้งและใช้งานง่าย: การเปิดใช้งาน OPcache ทำได้ง่าย เพียงแค่แก้ไข configuration file ของ PHP
การเปิดใช้งาน OPcache
การเปิดใช้งาน OPcache นั้นง่ายมาก โดยทั่วไปแล้ว OPcache จะมาพร้อมกับการติดตั้ง PHP อยู่แล้ว สิ่งที่เราต้องทำคือตรวจสอบให้แน่ใจว่า OPcache ถูกเปิดใช้งานอยู่ และปรับแต่งค่า configuration ให้เหมาะสม
- ตรวจสอบว่า OPcache ถูกติดตั้งแล้ว:
เปิด terminal หรือ command prompt แล้วพิมพ์คำสั่ง:
php -vถ้า OPcache ถูกติดตั้ง จะมีข้อมูลเกี่ยวกับ OPcache ปรากฏอยู่ใน output ตัวอย่างเช่น:
PHP 7.4.3 (cli) (built: Oct 6 2020 15:47:56) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.3, Copyright (c), by Zend Technologiesถ้าไม่พบ OPcache ให้ติดตั้ง OPcache extension เพิ่มเติม (วิธีการติดตั้งจะแตกต่างกันไปขึ้นอยู่กับระบบปฏิบัติการ)
- แก้ไข php.ini:
ค้นหาไฟล์
php.iniที่ PHP ใช้ (สามารถใช้คำสั่งphp --iniเพื่อหาตำแหน่งไฟล์ได้)เปิดไฟล์
php.iniด้วย text editor แล้วค้นหาบรรทัดที่เกี่ยวข้องกับ OPcache (มักจะเริ่มต้นด้วยzend_extension=opcacheหรือextension=opcache.so)ตรวจสอบให้แน่ใจว่า OPcache ถูกเปิดใช้งาน (uncomment) และปรับแต่งค่า configuration ดังนี้:
zend_extension=opcache.so opcache.enable=1 opcache.enable_cli=1 ; Enable OPcache for CLI scripts (optional) opcache.memory_consumption=128 ; Amount of memory to allocate for OPcache (in MB) opcache.interned_strings_buffer=8 ; Amount of memory to allocate for interned strings (in MB) opcache.max_accelerated_files=10000 ; Maximum number of files to cache opcache.validate_timestamps=1 ; Check for file updates every few seconds (1 = enabled, 0 = disabled) opcache.revalidate_freq=2 ; How often to check for file updates (in seconds) opcache.fast_shutdown=1 ; Enable fast shutdown (recommended)คำอธิบายค่า Configuration ที่สำคัญ:
opcache.enable: เปิดหรือปิดการใช้งาน OPcache (1 = เปิด, 0 = ปิด)opcache.enable_cli: เปิดหรือปิดการใช้งาน OPcache สำหรับ CLI scripts (Command Line Interface)opcache.memory_consumption: ปริมาณ memory ที่ OPcache จะใช้ (หน่วยเป็น MB) ควรปรับให้เหมาะสมกับขนาดของ Application และ RAM ที่มีopcache.interned_strings_buffer: ปริมาณ memory ที่ใช้สำหรับเก็บ strings ที่ถูก interned (หน่วยเป็น MB)opcache.max_accelerated_files: จำนวนไฟล์สูงสุดที่ OPcache จะ cacheopcache.validate_timestamps: ตรวจสอบว่าไฟล์มีการเปลี่ยนแปลงหรือไม่ ถ้ามีการเปลี่ยนแปลง OPcache จะ recompile ไฟล์ (1 = เปิด, 0 = ปิด) ใน Production environment ควรตั้งค่าเป็น 0 เพื่อประสิทธิภาพสูงสุด แต่ใน Development environment ควรตั้งค่าเป็น 1 เพื่อให้ OPcache update ทันทีเมื่อมีการแก้ไขไฟล์opcache.revalidate_freq: ความถี่ในการตรวจสอบไฟล์ว่ามีการเปลี่ยนแปลงหรือไม่ (หน่วยเป็นวินาที)opcache.fast_shutdown: เปิดใช้งาน fast shutdown เพื่อให้ PHP process สามารถ shutdown ได้อย่างรวดเร็ว (แนะนำให้เปิดใช้งาน)
- Restart Web Server:
หลังจากแก้ไข
php.iniแล้ว ต้อง restart web server (เช่น Apache หรือ Nginx) เพื่อให้ configuration ใหม่มีผลตัวอย่างการ restart Apache:
sudo service apache2 restart
การตรวจสอบสถานะ OPcache
หลังจากเปิดใช้งาน OPcache แล้ว เราควรตรวจสอบว่า OPcache ทำงานได้อย่างถูกต้องหรือไม่ มีหลายวิธีในการตรวจสอบสถานะ OPcache:
- ใช้
phpinfo():สร้างไฟล์ PHP ชื่อ
info.phpแล้วใส่ code ดังนี้:<?php phpinfo(); ?>เปิดไฟล์
info.phpผ่าน web browser แล้วค้นหาข้อมูลเกี่ยวกับ OPcache ถ้า OPcache ทำงาน จะมี section ที่ชื่อ "Zend OPcache" แสดงข้อมูล configuration และสถานะของ OPcache - ใช้ Command Line:
ใช้คำสั่ง
php -vเพื่อตรวจสอบว่า OPcache ถูก load หรือไม่ - ใช้ OPcache GUI:
มี OPcache GUI tools หลายตัวที่ช่วยให้เราสามารถ monitor และจัดการ OPcache ได้ง่ายขึ้น เช่น opcache-gui
การติดตั้งและใช้งาน OPcache GUI จะแตกต่างกันไปขึ้นอยู่กับ tool ที่เลือกใช้
กรณีใช้งานจริงและข้อผิดพลาดที่พบบ่อย
กรณีใช้งานจริง:
สมมติว่าเรามี Application ที่ใช้ Laravel framework การเปิดใช้งาน OPcache จะช่วยลดเวลาในการ load หน้าเว็บได้อย่างมาก โดยเฉพาะหน้าเว็บที่มีการเรียกใช้งาน components หรือ views จำนวนมาก OPcache จะ cache bytecode ของ Laravel framework และ components ต่างๆ ทำให้ Application ทำงานเร็วขึ้นอย่างเห็นได้ชัด
ข้อผิดพลาดที่พบบ่อย:
- OPcache ไม่ทำงาน: ตรวจสอบให้แน่ใจว่า
opcache.enableถูกตั้งค่าเป็น1ในphp.iniและ web server ได้ถูก restart แล้ว - Memory ไม่พอ: ถ้า OPcache ใช้ memory ไม่พอ จะทำให้ cache ไม่เต็มประสิทธิภาพ หรืออาจทำให้ Application ทำงานผิดพลาด ปรับเพิ่มค่า
opcache.memory_consumptionให้เหมาะสม - Cache ไม่ Update: ถ้า
opcache.validate_timestampsถูกตั้งค่าเป็น0ใน Development environment อาจทำให้ OPcache ไม่ update เมื่อมีการแก้ไขไฟล์ ตั้งค่าเป็น1ใน Development environment เพื่อให้ OPcache update ทันที - ไฟล์ไม่ถูก Cache: ตรวจสอบว่า
opcache.max_accelerated_filesมีค่าเพียงพอที่จะ cache ไฟล์ทั้งหมดใน Application
สรุป
OPcache เป็นเครื่องมือที่สำคัญมากในการเพิ่มความเร็วให้กับ PHP Application การเปิดใช้งาน OPcache นั้นง่าย และให้ผลลัพธ์ที่คุ้มค่า ในบทความนี้ เราได้เรียนรู้เกี่ยวกับ OPcache คืออะไร ทำไมต้องใช้ OPcache วิธีการเปิดใช้งาน OPcache และวิธีการตรวจสอบสถานะ OPcache หวังว่าบทความนี้จะเป็นประโยชน์กับทุกท่านในการปรับปรุงประสิทธิภาพของ PHP Application ของคุณ
ในบทความถัดไป เราจะมาเรียนรู้เกี่ยวกับอีกหนึ่งเครื่องมือที่ช่วยเพิ่มความเร็วให้กับ Application ได้ นั่นก็คือ Redis ครับ