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.

175 Comments

  1. ProxyMz 9 comment

    Thằng này chẳng hiểu kiểu gì VPS mình RAM 30GB, 8Core mà ăn Max 100%, CPU thì thấy thằng PHP FPM ngún ghê thiệt lúc dùng bên VestaCP thì không bị sao.

  2. Tran Thanh 2 comment

    Bác Luân ơi. em cài hocvps dùng php 5.6 các thứ vẫn chạy bình thường chỉ có khi truy cập vào …op.php để xóa cache php thì bị lỗi http 500. Bác có thể chi em cách fix đc ko ?

  3. Phạm Hồng Vĩ 48 comment

    Mình sử dụng vps 1cpu 25gb ssd 1gb ram lúc nào cũng hit rate 100% , memory 100%.. vậy nên tăng opcache.memory_consumption và opcache.max_accelerated_files lên bao nhiêu là hợp lý ạ

  4. Quang Anh 21 comment

    Mình cấu hình lên 150Mb thì chỉ vài ngày lên 94% nên mình nâng lên 200Mb

    Cho mình hỏi việc nâng memory lên thế này có ảnh hưởng gì không?

  5. Duy 10 comment

    Anh ơi, e cài zend opcache rồi, nhưng lúc sửa file php đợi hơi lâu. E muốn cache php chỉ khoảng 10 giây thôi. E cấu hình ở tham số nào a nhỉ?

    1. Việt Phương Moderator

      10s thì cache làm gì bạn. Bạn cần sửa thì bạn xóa cache thôi

  6. Minh 9 comment

    Mình cài bị lỗi No package php-opcache available. là sao bạn nhỉ?
    (mình đã cài remi)

    1. Việt Phương Moderator

      Bạn cài EPEL chưa? PHP bạn phiên bản gì? Bạn kích hoạt remi đúng theo phiên bản PHP chứ?

      1. Minh 9 comment

        Mình dùng php 5.6, đã cài epel và remi đúng phiên bản, hay là package ko tồn tại trện server, phải tải riêng về nhỉ?

          1. Minh 9 comment

            Bạn ơi mình cài được rồi, dùng lệnh php-v nó báo:
            with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
            vậy là ok rồi đúng ko bạn? Nhưng trong total cache mình vẫn xám xịt mới lạ

          2. Việt Phương Moderator

            Được rồi bạn nhé. Bạn kiểm tra total cache ở đâu?

          3. Minh 9 comment

            Trong dashboard báo “Opcode cache: Not installed”
            còn trong opcode cache báo xám
            Mình dùng centos 6, php 5.6

          4. Việt Phương Moderator

            Dashboard nào bạn? Ý bạn là phpinfo() hay trang nào?

          5. Minh 9 comment

            vào wp total cacche dashboard, xong vào compatibility check ấy bạn

  7. Quan Nguyên Phát 52 comment

    Cho mình hỏi, VPS của mình cấu hình như sau: 2 vCore, RAM: 4096 MB, Storage: 60 GB SSD thì mình nên cấu hình PHP’s Zend Opcache như thế nào cho tối ưu (bộ nhớ, số file)
    Cảm ơn bạn.

    1. Cổ Ý Concept 8 comment

      Bạn thử với cấu hình như này nhé.

      opcache.memory_consumption=512
      opcache.interned_strings_buffer=32
      opcache.max_accelerated_files=1000000
      opcache.revalidate_freq=0
      opcache.enable_cli=1
      opcache.validate_permission=1
      opcache.use_cwd=1
      opcache.revalidate_path=1
      opcache.enable_file_override=1

  8. Phan Danh Hiếu 2 comment

    Mong anh Luân và các anh em giải đáp dùm.

    1. Mình có 6G video, 200 học viên học online thì mình nên mua VPS cấu hình như thế nào để đáp ứng?
    2. Video mình muốn bảo mật nên mình sẽ post và lưu trữ trên VPS thì có làm cho web mình chậm nhiều không?

    Trân trọng cảm ơn

    1. Thành 43 comment

      Nếu thế thì vị trí học viên và vps càn cùng quốc gia để tận dụng tối đa băng thông của vps và vps cần port speed 1 Gpbs để đủ băng thông. Còn vụ làm vps chậm hay không thì chắc chắn là có nếu như băng thông bị chiếm dụng hết.

  9. Minh 4 comment

    Nhờ em Luân update vào bài thông tin này:

    Nếu chạy nhiều site wordpress, hoặc các file giống nhau bị cache trên cùng 1 server cài Zen OPcache có thể gặp phải lỗi sau:

    PHP Fatal error: Cannot redeclare wp_get_server_protocol() (previously declared in /home/USER1/public_html/wp-includes/load.php:16) in /home/USER2/public_html/blog/wp-includes/load.php on line 16

    Cái này fix bằng cách thêm dòng sau vào file config của Zen OPcache:

    opcache.validate_permission=1

    Sau đó nhớ reset lại php-fpm:

    service php-fpm restart

    1. Thành 43 comment

      Làm sao để check được server mình có bị lỗi đó hay ko? Chắc phải đọc file log mới biết được hả bro?

  10. dung le 1 comment

    ad làm bài hướng dẫn bằng video sử dụng lamp hoặc sử dụng ubuntu để cahyj wep php trên đó đi ạ

    1. Việt Phương Moderator

      Bạn tham khảo các hướng dẫn khác trên mạng nhé. Hướng dẫn bằng video cũng không giải quyết nhiều vấn đề khi toàn bộ là cửa sổ dòng lệnh, không có thao tác chuột

    1. Việt Phương Moderator

      Bạn đặt trong phần port quản lý HocVPS ? Nếu thế bạn nhập user pass bên HocVPs Quản lý là ok mà

  11. Nam Thanh 36 comment

    Cập nhật thêm là em dùng filezilla để xem thì mặc định op.php sẽ nằm trong /home. em move file đó vào folder /home/domain.com của em và truy xuất lại bằng domain.com/op.php thì được.

    Nếu vậy sau này nhiều site, thì em phải copy từng op.php vào từng thư mục site khác đúng ko ạ. Em dùng hocvps script

    1. Việt Phương Moderator

      Em chạy lệnh wget ở đâu thì file sẽ tải về ở đó nhé. Ngoài ra, chỉ cần cài PHP Zend OPcache 1 lần là đủ. Và nó hoạt động trên toàn hệ thống PHP mà, đâu phải theo mỗi 1 site. Cái opcache-gui by amnuts là giúp theo dõi thôi

  12. Nam Thanh 36 comment

    Hi anh, em đã làm hướng dẫn cài opcache-gui by amnuts để view cái op.php. Nhưng khi truy xuất ip:port/op.php thì thấy yêu cầu nhập user name vs password. EM đã nhập username là root và pass của vps nhưng ko thấy phản hồi gì à.

    1. Việt Phương Moderator

      Các file muốn view được bằng browser thì nằm trong thư mục /home/domain.com/public_html em nhé. Khi đó em truy cập bằng doamin.com/file là được

  13. vui 2 comment

    cache tối đa 4.000 files trong THỜI gian bao lâu vậy bạn. thì cache file đó được reload lại????

      1. vui 2 comment

        Có cách nào tăng time cache lên không bạn, cache 60s thì ngắn quá. tầm 2 tiếng thì ok

  14. An 6 comment

    Luân cho hỏi câu nữa.
    Theo câu trả lời của Luân: Bạn mở file /etc/php.d/10-opcache.ini và chỉnh opcache.enable=1 thành opcache.enable=0 rồi restart lại php-fpm để tắt cache nhé. Thì như vậy là vô hiệu hóa OPCache à? Nếu vậy cài OPCache mà enable = 0 thì cũng vô nghĩa đúng không?

  15. An 6 comment

    Luân cho mình hỏi làm sao để xác định vị trí lưu file cài đặt của nó?

    1. Luân Trần Admin

      Đây là 1 extension của PHP nên nếu cài đặt thành công sẽ có file cấu hình .ini ở đây: /etc/php.d/

    2. An 6 comment

      Luân xem nghiên cứu lại, chứ mình chạy lệnh đó nhiều lần đều báo lỗi No package php-opcache available

  16. An 6 comment

    Chào Luân,
    Hiện tại mình chạy đến bước:
    yum –enablerepo=remi,remi-php55 install php-opcache

    thì nhận thông báo sau:
    No package php-opcache available.
    Error: Nothing to do

    Với lỗi này khắc phục thế nào?

    Đồng thời memcache thì thông số CACHESIZE để bao nhiêu là phù hợp với RAM 3GB?

    Cảm ơn Luân!

    1. Luân Trần Admin

      php -v của bạn output là gì?

      Cấu hình dung lượng memcache tùy theo số lượng page và dung lượng database của bạn. Cứ setup 1 giá trị nào đó rồi theo dõi dần, thiếu thì bổ sung thêm nha.

  17. An 1 comment

    Mình chạy lệnh yum –enablerepo=remi,remi-php55 install php-opcache thì báo No package php-opcache available., làm sao để khắc phục ạ?

  18. Kevin 6 comment

    Mình cài hocvps script và có 2 website wordpress chạy, tối đa 1 lúc chỉ khoảng 10 kết nối đồng thời cả 2 website.
    Mình để mặc định cấu hình opcache và có cài wp super cache cho cả 2 website, thấy Opcache lúc nào cũng báo dùng 99%, hit 100%

  19. Tommy Nguyen 36 comment

    Tăng bộ nhớ lên 300
    opcache.memory_consumption=300
    Nhưng khi vào op.php nó vẫn chỉ báo 128MB và Memory Usage luôn 100%.
    Luân có cách nào fix nó không?

        1. Luân Trần Admin

          Thường thì restart VPS là ok rồi.
          Lệnh restart PHP: service php-fpm restart

  20. Duy 10 comment

    CHo e hỏi chút là khi cài cái cache này khi sửa code nó cứ phải đợi 1 lúc mới có tác dụng.

    Vào đâu tùy chình tắt mở nó được a nhỉ.

    Sửa xong web thì mới cho bật cache lên

    1. Luân Trần Admin

      Bạn mở file /etc/php.d/10-opcache.ini và chỉnh opcache.enable=1 thành opcache.enable=0 rồi restart lại php-fpm để tắt cache nhé.