Skip to main content

เนื้อหาภาษาไทย / Thai content

System guide Content reviewed

OPcache คืออะไร: เปิดใช้งาน OPcache

บทความนี้แนะนำ OPcache ซึ่งเป็นกลไก caching สำหรับ PHP ที่ช่วยลดเวลาในการ parse และ compile scripts โดยการเก็บ bytecode ไว้ในหน่วยความจำ ทำให้ Application ทำงาน...

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 ให้เหมาะสม

  1. ตรวจสอบว่า 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 เพิ่มเติม (วิธีการติดตั้งจะแตกต่างกันไปขึ้นอยู่กับระบบปฏิบัติการ)

  2. แก้ไข 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 จะ cache
    • opcache.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 ได้อย่างรวดเร็ว (แนะนำให้เปิดใช้งาน)
  3. 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 ครับ

Office.in.th Custom Service

Want to build or adapt a system from this structure?

Office.in.th designs and develops enterprise web applications, API integrations, and public- and private-sector management systems, with long-term support.

See our software development service