Sử dụng APC hoặc APCu từ lâu đã là một phương pháp opcode cache được sử dụng rộng rãi để tối ưu hoạt động của VPS. Tuy nhiên APC không được cập nhật, nâng cấp thường xuyên (phiên bản stable mới nhất 3.1.9 ra ngày 2011-05-14) và thỉnh thoảng vẫn xuất hiện một số lỗi vặt.

Với sự xuất hiện của Zend OPcache mặc định đi kèm từ phiên bản PHP 5.5 trở về sau, chắc chắn APC hoặc các opcode cache khác sẽ không có cửa để phát triển nữa.

Trong bài viết này, mình sẽ hướng dẫn các bạn cách cài đặt Zend OPcache với phiên bản PHP 5.5 và 5.6. Các phiên bản PHP 5.4 hoặc 5.3 sẽ có cách cài đặt khác, mình không đề cập trong bài viết này vì phiên bản PHP quá cũ rồi.

Để xem phiên bản PHP hiện tại bạn hãy sử dụng lệnh php -v hoặc php-fpm -v

Các bạn có thể sử dụng tham số --enable-opcache khi compile PHP, tuy nhiên cách này hơi khó thực hiện với đa số người dùng, do đó hãy dùng cách cài đặt thêm extension cho PHP. Lưu ý cần cài đặt PHP trước khi bắt đầu.

HocVPS Script mặc định tích hợp Zend Opcache rồi, các bạn đang dùng không cần cài thêm nữa nhé.

Plugin Duplicator, BackWPUp hay UpDraftPlus của WordPress bị lỗi 502 Bad Gateway không tương thích với Zend OPCache, để khắc phục các bạn hãy tham khảo hướng dẫn sau.

1. Thêm repo epel, remi

## CentOS 7 ##
yum install epel-release
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

## CentOS 6 ##
yum install epel-release
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

Bước này có thể bỏ qua nếu bạn đã làm theo hướng dẫn cài đặt LEMP trên CentOS.

2. Cài đặt PHP’s Zend Opcache

## PHP 7.0 ##
yum --enablerepo=remi,remi-php70 install php-opcache
service php-fpm restart

## PHP 5.6 ##
yum --enablerepo=remi,remi-php56 install php-opcache
service php-fpm restart

## PHP 5.5 ##
yum --enablerepo=remi,remi-php55 install php-opcache
service php-fpm restart

Với PHP 5.4, 5.3 xem comment bên dưới.

Sau khi cài đặt xong, bạn hãy xem thông tin phpinfo(), nếu có Zend OPcache xuất hiện như bên dưới là đã thành công.

Zend OPcache

3. Cấu hình PHP’s Zend Opcache

Mặc định, OPcache sử dụng 128MB bộ nhớ và cache tối đa 4.000 files. Nếu bạn muốn thay đổi tham số này thì chỉ cần chỉnh sửa trong file cấu hình /etc/php.d/10-opcache.ini hoặc /etc/php.d/opcache.ini

nano /etc/php.d/10-opcache.ini

Các thông tin cần chỉnh

; The OPcache shared memory storage size.
opcache.memory_consumption=128

; The maximum number of keys (scripts) in the OPcache hash table.
; Only numbers between 200 and 100000 are allowed.
opcache.max_accelerated_files=4000

4. Web Viewer

Để theo dõi được tình trạng sử dụng Zend Opcache, các bạn có thể sử dụng Web Viewer opcache-gui by amnuts (hoặc cài đặt plugin OPcache Dashboard nếu dùng WordPress).

Ưu điểm có giao diện responsive, nhiều tính năng và có thể reset/flush opcache.

Cài đặt

wget https://raw.github.com/amnuts/opcache-gui/master/index.php -O op.php

Hình ảnh

opcache gui

5. Gỡ bỏ Zend Opcache

Để tạm thời tắt tính năng cache, bạn hãy edit file cấu hình /etc/php.d/10-opcache.ini hoặc /etc/php.d/opcache.ini

nano /etc/php.d/10-opcache.ini

Chỉnh tham số opcache.enable=1 thành opcache.enable=0, sau đó restart lại php-fpm

service php-fpm restart

Sau khi chỉnh sửa code xong, hãy kích hoạt lại opcache.enable=1.

Để gỡ hẳn Zend Opcache khỏi server (không nên nhé), bạn hãy chạy lệnh:

yum -y remove php-opcache
service php-fpm restart

Comment của bạn

Lưu ý: tất cả comment đều được kiểm duyệt cẩn thận! Nếu có code bạn hãy up lên pastebin.com rồi để lại link trong comment.

173 Comments

  1. Kien Nguyen 32 comment

    Luân ơi,

    No package php-opcache avaiable nghĩa là mình cài đặt sai ở đâu nhỉ?

    Đang tập tành vps

    1. Luân Trần Admin

      Bạn kiểm tra lại repository đang dùng nhé, repo đang ko có php-opcache.

      1. Kien Nguyen 32 comment

        Mình cài xong hocvps script, và nó xuất được ra file hocvps-script.txt.
        Mình dựa vào các liên kết trong file này và mở trong trình duyệt thì nó bị lỗi
        http://tranggiadung.vn:2313/vpsinfo/

        Ngay bước này mình đã ko xử lý được, mình bị thiếu ở đâu bạn?

        1. Luân Trần Admin

          Domain của bạn đã trỏ đến IP VPS chưa thế? Với lại VPS Việt Nam cài script hay bị lỗi lắm bạn.

          1. Kien Nguyen 32 comment

            Domain của mình trỏ đến IP của VPS rồi.
            VPS này mình thử nghiệm của Nhân Hòa.
            Lúc đầu họ cài directadmin mình đã cho chạy được website rồi.
            Nhưng khi đọc hocvps mình vào cài thử

            Nếu lỗi thì xử lý thế nào vậy Luân?

          2. Luân Trần Admin

            Khả năng cài đặt bị lỗi rồi, giờ bạn reinstall VPS cài đặt lại từ đầu thôi, dùng DirectAdmin nhé.

          3. Kien Nguyen 32 comment

            sau khi cài hocvps, mình không vào lại được directadmin.
            Cho mình hỏi thêm, Mình mới mua một vps khác, chưa cài cắm gì.
            Bây giờ mình nên cài DirectAdmin hay controlpanel nào?

          4. Luân Trần Admin

            Khi cài HocVPS Script bạn cần đảm bảo VPS không cài bất kỳ một control panel nào khác, không thì VPS sẽ bị lỗi không hoạt động được nữa. Mình có ghi rõ trong trang hướng dẫn rồi: https://hocvps.com/script/
            Bạn mới làm quen với VPS nên dùng DirectAdmin, dễ dùng. Tuy nhiên mình luôn khuyến khích dùng HocVPS Script vì nó cực kì hiệu quả, không tốn tài nguyên như các control panel khác nên website sẽ hoạt động tốt hơn.

    1. Luân Trần Admin

      Đây là 1 file php nên bạn có thể up lên folder public_html rồi truy cập thẳng vào file qua trình duyệt.

  2. Vũ Duy 1 comment

    Anh cho e hỏi là cài opcache rồi, e đem code vứt lên sửa thì nó vẫn lưu cache lại nên khó xem thay đổi code, e muốn tạm thời off/on opcache thì làm ntn a nhỉ 🙂

  3. datecom 20 comment

    tình hình là hôm nay đọc bài này, check thì ấy phpinfo có zend opcache , chắc hocscrip có cài, nhưng có điều nó lại ở dạng disable, vậy làm thế nào để enable nó vậy bác Luân?

    1. Luân Trần Admin

      Sao bạn biết nó đang disable vậy, mặc định mình kích hoạt chạy luôn mà?

      1. datecom 20 comment

        em đọc bài trên và chạy thì nó báo cài rồi, nên check phpinfo() thì thấy cái zend :
        Opcode Caching Disabled
        bác có thể cài giúp em cái đó được không? 🙁

        1. Luân Trần Admin

          Bạn kiểm tra lại trong file cấu hình .INI của opcache ở thư mục /etc/php.d/ xem đã enable chưa?

  4. 1 comment

    Anh ơi cho em hỏi làm thế nào để xem file phpinfo() ? em gõ nguyên lệnh vào không thấy hiển thị gì cả. Trước đó có làm theo hướng dẫn của anh rồi

  5. Hữu Hùng 35 comment

    Em dùng hocvps script có sẵn cái này rồi.dùng luôn php 5.6
    Mà giờ em định hạ php xuống 5.4
    Vậy nó có gây lỗi không a??

    1. Luân Trần Admin

      Hạ xuống thì cài lại từ đầu nhé. HocVPS Script hỗ trợ sẵn luôn cái đó rồi.

      1. Hữu Hùng 35 comment

        Em chỉ cần chọn số 15 là “Nâng cấp sever” rồi chọn lại phiên bản php là được đúng k anh??

          1. Hữu Hùng 35 comment

            Nhọ thật ấy =))))
            Chắc em setup lại để chọn PHP 5.4 thôi 😀

  6. quyến 2 comment

    Không hiểu sao mình làm đúng những gì bạn chỉ. VPS 2 CPU RAM 4GB mà chạy online 1k5 thì CPU đã lên đến 70% rồi .

    1. Luân Trần Admin

      Nó còn phụ thuộc vào code bạn sử dụng nữa, WordPress sử dụng theme nào, có được tối ưu hay không…

      1. quyen 2 comment

        Mình chỉ mua theme về làm theo hocvps và chạy web thôi, ko chỉnh bất cứ gì .

        1. Luân Trần Admin

          Nếu là theme mua trên themeforest thì nó khá là nặng, nhiều chức năng, không được tối ưu đâu bạn. Tốt nhất là tự code riêng một theme để sử dụng ấy.

  7. Thanh Nam 36 comment

    Em đã tăng
    opcache.memory_consumption=256
    opcache.max_accelerated_files=8000
    nhưng khi chạy web viewer thì thông số lại về như cũ. Không biết tại sao.
    Ngoài ra memory usage là 48% và hit rate là 99%. Thông số khoảng bao nhiêu thì mình cần reset cache vậy ạ?

      1. Thanh Nam 36 comment

        Chuẩn luôn, em vừa restart lại là đc.Thông số bao nhiêu để reset cache là đẹp vậy anh?

    1. Luân Trần Admin

      Nó tự động chạy với file .PHP rồi, không cần phải config thêm đâu em.

  8. dlinh 16 comment

    anh luan ơi dùng cloudflare có giúp giảm tình trạng thiếu ram và cpu ko anh , em đăng định kết hợp nó.

  9. dlinh 16 comment

    Em biết cách khắc phục rùi anh. Chỉ cần chuyển dist thành memcache là dc. Vậy là cái này nó cũng cần chọn memcache nữa anh

  10. dlinh 16 comment

    Bác luân ơi em cài vps bàng hocvps script rùi. Hình như có cài tự động Zend OPcache rùi vậy có cần chỉnh sửa gì nữa ko bác

    1. Luân Trần Admin

      Nếu cần thì bạn điều chỉnh file cấu hình thôi, không thì cứ để đó mà dùng 😀

      1. dlinh 16 comment

        anh luân ơi em cài W3 Total Cache gặp lỗi W3 Total Cache Error: Files and directories could not be automatically created to complete the installation. use FTP form to allow W3 Total Cache make it automatically . em nghĩ nó cần nhập fpt nhưng em nhập vào lai không chính sác giờ làm sao đây anh

        1. Luân Trần Admin

          Bạn thử chạy menu hocvps, chọn chức năng phân quyền Webserver xem có hết không?

          1. dlinh 16 comment

            khắc phục được rùi, mà giờ lại thành ra lỗi này W3 Total Cache error:It appears Minify URL rewriting is not working. Please verify that all configuration files are included in the configuration file (and that you have reloaded / restarted nginx).
            Unfortunately minification will not function without custom rewrite rules. Please ask your server administrator for assistance. Also refer to the install page for the rules for your server.
            Technical info -> sau khi em cài Memcached. anh Luân giúp em với !

          2. Luân Trần Admin

            Cái Minify của W3 Total Cache mình không hiểu sao chưa dùng thành công trên bất kỳ VPS nào cả 🙁

    1. Luân Trần Admin

      Bạn cài đặt VPS theo hướng dẫn nào vậy? Phiên bản PHP hiện tại là bao nhiêu?

      1. ABA 8 comment

        Trước đó 1 tháng, Mình cài mới VPS, sau đó cài Hocvps script với php 5.6, hôm này thấy chậm, rồi mình cài thêm PHP Zend OPcache theo hướng dẫn bài viết này, cài đặt thì thành công, nhưng khởi động lại thì lỗi và không chạy được

        1. Luân Trần Admin

          Nếu lỗi chắc chỉ đoạn cấu hình thôi. Bạn gửi mình thông tin login VPS để vào check lỗi thêm nhé.

  11. Trung 1 comment

    Cài đặt Zend Opcahe xong ngon hẳn 😀
    ram đang sử dụng từ 90% giảm xuống còn 64%
    cpu không thấy vượt quá 15%

    Thanks Luân,

  12. Chanh 21 comment

    Sau khi cài ZEND OP,,, đăng nhập vào PhpMyadmin thì bị lỗi này! không đăng nhập vào được luôn a Luân?

    Warning in ./libraries/session.inc.php#101
    session_start(): open(/var/lib/php/session/sess_gkfg0ulfis0oss1bb3q0nj208skmqjbd, O_RDWR) failed: Permission denied (13)

    Backtrace

    ./libraries/session.inc.php#101: session_start()
    ./libraries/common.inc.php#349: require(./libraries/session.inc.php)
    ./index.php#12: require_once(./libraries/common.inc.php)

    1. Luân Trần Admin

      Bạn chỉ cần xóa cookie, sử dụng trình duyệt khác truy cập lại là ok. Nguyên nhân ở đây do sai session id

      1. Chanh 21 comment

        Sao không được nhỉ? em dùng trình duyệt khác, tab ẩn danh cũng không được luôn,, giờ thì nó bị lỗi này!

        Error during session start; please check your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser.

          1. Chanh 21 comment

            Ok…ngon lành cành đào rồi 🙂 sẵn tiện hỏi luôn: Em làm hệ thống web khoảng vài chục web lận và chỉ dùng mã nguồn Xenforo thôi thì có nên cài cái Zend PHP này không? em tính chỉ cài 1 cái này thôi, đang chạy bằng Hocvps.

          2. Luân Trần Admin

            Cứ dính đến PHP thì nên cài luôn cái Zend OPcache này nhé, không quan trọng dùng code gì.

      1. Phong 1 comment

        mình cài xong hết rồi. nhưng xem thì không rõ lệnh xem và cách xem cậu chỉ giúp được không

        [root@vultr ~]# wget https://raw.github.com/amnuts/opcache-gui/master/index.php -O op.php
        –2016-04-08 03:48:21– https://raw.github.com/amnuts/opcache-gui/master/index.php
        Resolving raw.github.com… 199.27.76.133
        Connecting to raw.github.com|199.27.76.133|:443… connected.
        HTTP request sent, awaiting response… 301 Moved Permanently
        Location: https://raw.githubusercontent.com/amnuts/opcache-gui/master/index.php [following]
        –2016-04-08 03:48:21– https://raw.githubusercontent.com/amnuts/opcache-gui/master/index.php
        Resolving raw.githubusercontent.com… 199.27.76.133
        Connecting to raw.githubusercontent.com|199.27.76.133|:443… connected.
        HTTP request sent, awaiting response… 200 OK
        Length: 39238 (38K) [text/plain]
        Saving to: “op.php”

        100%[======================================>] 39,238 –.-K/s in 0.001s

        2016-04-08 03:48:21 (29.6 MB/s) – “op.php” saved [39238/39238]

  13. Hoàng Ngọc Sửu 2 comment

    Nếu mình chọn option “Use mod_rewrite to serve cache files. (Recommended)” thì mới bị.
    Còn dùng “Use PHP to serve cache files” thì không sao.
    Nhưng bên dưới có tips “Mod_rewrite is fastest, PHP is almost as fast and easier to get working, while legacy caching is slower again, but more flexible and also easy to get working. New users should use PHP caching.”
    Mà hình như mod_rewrite chỉ Apache mới có hay sao á!

  14. Alehap 14 comment

    Luân ơi cho mình hỏi hocVPS script cài phpmyadmin vào path nào vậy bạn, mình định bỏ mấy cái viewer này vào chung port đó lun 😀
    Tks bạn nhiều

    1. Luân Trần Admin

      Path là /home/domain.com/private_html/ nhé bạn. Mình cũng toàn up code vào đây để sử dụng port luôn 😀

  15. Minh Quân 4 comment

    Luân ơi, mình xài vps DO, Script HocVPS, đã cài zend opcache, mình muốn hỏi chi tiết cách tắt và bật zend opcache! Giúp mình nhé! Thanks!

    1. Luân Trần Admin

      Để tắt thì bạn mở file cấu hình Zend OPcache lên rồi điều chỉnh thông số sau từ 1 thành 0

      ; Determines if Zend OPCache is enabled
      opcache.enable=1
  16. Viet IT 2 comment

    Chao anh Luan,

    Hiện e muốn tách database va web ra làm 2 VPS thì phải cấu hình thế nào ạ.
    Em connect thành công rồi mà nó không lấy được dữ liệu, anh chỉ em với.

    Cảm ơn anh nhiều

    1. Luân Trần Admin

      Magento vẫn cài đặt như thông thường, vì cache này hoạt động ở level server rồi bạn

  17. Khue Tran 16 comment

    Khi em làm bước 1 thì báo lỗi dù e đã sửa epel-release-7-2.noarch.rpm thành 7-5 (mới nhất). Em vẫn thấy lỗi nên kiểm tra lại php của e là 5.4 mặc dù khi cài hocvps e đã chọn 5.6 . A luân fix thế nào giúp em với.

  18. sincos 2 comment

    Cài trên: 5.3, 5.4

    cd /usr/local/src
    wget http://pecl.php.net/get/ZendOpcache
    tar xvfz ZendOpcache
    cd zendopcache-7.0.3
    phpize

    # Tim duong dan den php-config
    whereis php-config
    # Sau khi thay thi dien chinh xac vao dong sau
    ./configure –with-php-config=/usr/bin/php-config
    make
    make install

    # Sau khi make xong no bao thu muc chua lib da bien dich. Dua vao do de cau hinh ben duoi :Installing shared extensions: /usr/lib/php/modules/
    echo “zend_extension=/usr/lib/php/modules/opcache.so
    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” > /etc/php.d/opcache.ini

    # Khoi dong lai php
    service php-fpm restart

    1. vanthu 21 comment

      Mình cài trên 5.4
      Lúc mình chạy lệnh phpize thì bị lỗi -bash: phpize: command not found là sao bạn ơi?

  19. Thành 43 comment

    Nếu bạn dùng hocvps thì file nó có tên là 10.opcache.ini nhé , Cần dùng lệnh
    nano /etc/php.d/10.opcache.ini

  20. Minh Anh 7 comment

    Hi Anh,

    Cài rồi mà nó vẫn báo chưa cài anh ạ
    nano /etc/php.d/opcache.ini lệnh này trỏ đến file trắng tinh anh ạ

    The OPcache shared memory storage size.
    opcache.memory_consumption=128

    ; The maximum number of keys (scripts) in the OPcache hash table.
    ; Only numbers between 200 and 100000 are allowed.
    opcache.max_accelerated_files=4000

    Ko có thông số trên để chỉnh ạ.

    Cách xem PHPINFO() như nào vậy anh ?

    Thanks !

  21. Thành 43 comment

    Luận ơi mình cái OPcache xong là bị xung đột với plugin backwpup luôn không vào được wp-admin. Xóa đi thì vào wp-admin bt cài mới plug-in thì khi active lên là bị 502 tiếp tục không hiểu vì sao nhỉ?? Xung đột PHP à?

    1. Luân Trần Admin

      Vấn đề này mình không rõ rồi, nhưng chắc ko phải do cache gây ra đâu.

      1. Thành 43 comment

        Mình có post bài bên chiasecoupon.com và xác nhận 100% lỗi 502 là do OPcache gây ra nhé . Plugin nào có tập lệnh gôm file lại hoặc nén file là 502 error ngay

  22. hoang 2 comment

    mình php -v thì của mình là PHP 5.3.3
    trong này chỉ có hướng dẫn cho PHP 5.5 và 5.6
    giúp mình lệnh nào để nâng cấp được phiên bản PHP của mình lên với

    1. Luân Trần Admin

      Bạn cài đặt server theo hướng dẫn nào vậy? Hãy tham khảo lại hướng dẫn đó để biết cách nâng cấp.

    1. Luân Trần Admin

      Bạn hãy down file PHP đó về rồi up lên và truy cập vào là chạy được

  23. Neo 34 comment

    Luân cho hỏi, mình dùng nginx, php 5.5.15, cài xong opcode đã check Up and running rồi nhưng vào W3 total thì báo không có và không enable cho Page cache được.
    Thank Luân

    1. Luân Trần Admin

      Zend Opcache chạy ngầm, bạn không cần phải cài đặt cho W3 Total Cache. Bạn có thể dùng 1 trong số các Web Viewer để xem đang sử dụng bao nhiêu bộ nhớ làm cache.

  24. Đỗ Hoàng 11 comment

    Mình đã cài Hocvps Scripts. Định thực hiện cài : Zend Opcache gặp lỗi này khi run lệnh : yum –enablerepo=remi,remi-php55 install php-opcache
    ” thread.error: can’t start new thread ”
    Tóm lại là chưa thành công khi kiểm tra 😀

    Lỗi đó làm sao nhỉ L ?

        1. Luân Trần Admin

          Đây là vấn đề VPS của bạn, sorry mình chỉ support được đến vậy.

  25. kei 1 comment

    Hi @Luân Trần, bạn có thể làm 1 bài review về after và before khi sử dụng Opcache không?

    1. Luân Trần Admin

      Cài đặt xong là ok, nó sẽ hoạt động ngầm và tự cache các file PHP