Monday, November 16, 2015

Alternate PHP Cache (APC)

https://stackoverflow.com/questions/29187601/difference-between-apc-apcu-and-opcache

There is no need for APC (or any of the similar sort of bytecode caching extensions like XCache) as of PHP 5.5 and later. The PHP developers directly integrated what they call OPCache into the core of the product. Not only does this provide greater overall product stability, it is officially supported by the PHP developers.
If you need a specific feature from APC that is not in OPCache (e.g. APCu functionality), then you should start a discussion on the php-dev mailing list.
Finally, a good rule of thumb is to only run versions of PHP that are listed on the php.net homepage. While distros will generally backport security fixes, newer versions of PHP have more useful features. Newer versions of PHP also generally have significant performance benefits that may allow you to bypass needing additional PECL extensions such as APCu.


http://webtolearning.blogspot.co.id/2012/07/alternate-php-cache-apc.html
http://anandarajpandey.com/2014/07/15/how-to-install-apc-in-centos-for-php-better-performance-opcode/
https://firebearstudio.com/blog/the-best-php-accelerators.html

Jika Anda seorang administrator sistem dan Anda ingin mengoptimalkan kinerja situs PHP Anda seperti Drupal, Wordpress, hasil coding kamu sendiri atau programmer lain, ada hal baik jika kamu tahu tentang Alternate PHP Cache atau disingkat APC.

Alternate PHP Cache (APC) adalah opcode cache yang free dan open untuk PHP. Tujuannya adalah untuk memberikan free, open, and robust framework untuk caching dan mengoptimalkan kode PHP intermediate.

Bagaimana Cara Kerca APC
Hal pertama yang perlu kamu ketahui, adalah bagaimana program PHP dijalankan oleh Zend Engine, berikut ini adalah langkah-langkah untuk mengetahui script PHP kamu kode mana yang benar-benar digunakan oleh Engine, ini umumnya dikenal sebagai "opcodes".
  1. Langkah pertama adalah membaca kode PHP dari filesystem dan memasukkannya ke dalam memori.
  2. Lexing: Bagian dalam kode php diubah menjadi token atau Lexicons.
  3. Parsing: Selama tahap ini, token diproses untuk mendapatkan meaningful expressions.
  4. Compiling : expressions yang didapatkan dikompilasi menjadi opcodes.
  5. Executing: opcodes yang dijalankan akan mendapatkan hasil akhir.
Tujuan dari APC dari langkah-langkah 1 sampai 4, adalah caching pada segmen memori bersama opcodes yang dihasilkan dan kemudian mengkopinya ke dalam proses eksekusi sehingga Zend benar-benar dapat menjalankan opcodes.

Dari lampzone.wordpress.com

Berikut langkah-langkah rinci tentang APC
  1. Selama modul init time (Minit), APC menggunakan mmap untuk memetakan file ke dalam shared memory.
  2. Selama request time, APC menggantikan zend_compile_file () dengan my_compile_file sendiri ().
Apa yang dilakukan my_compile_file?
  1. Jika APC tidak bisa menemukan file dalam cache, APC akan memanggil zend_compile_file untuk compile file
  2. Mendapatkan opcodes kembali dan menyimpannya ke dalam shared memory yang membaca / menulis dari proses Apache child yang berbeda. (Kita berbicara tentang Apache prefork MPM di sini.)
  3. Juga menyimpan kelas dan tabel fungsi dalam shared memory.
  4. Mengkopi opcodes ke dalam proses memori proses Apache child sehingga Zend dapat mengeksekusi kode.
Teorinya kurang lebih demikian, mari kita lihat sekarang bagaimana menginstal dan mengkonfigurasinya.
Instalasi APC
APC adalah ekstensi PHP sehingga Anda memiliki 2 cara untuk menginstalnya:

1) Instal APC dari repositori distro kamu.
Saya sarankan untuk menggunakan cara ini bila memungkinkan, untuk menjaga segala sesuatu yang kamu miliki di komputer/server kamu. Menginstall APC dari repositori adalah praktek yang baik
Di Debian dan Ubuntu, APC tersedia di repositori utama dengan nama ini :
root@xubuntu-home:~# apt-cache search apc php
php-apc - APC (Alternative PHP Cache) module for PHP 5
Jadi kamu dapat menginstalnya dengan menuliskan script perintah
sudo aptitude install php-apc
Sementara jika kamu menggunakan Red Hat Enterprise, Centos atau Fedora kamu dapat menggunakan script perintah ini:
sudo yum install php-pecl-apc
2) Cara kedua untuk menginstal APC adalah dengan PECL, dengan metode ini kamu akan men-download last source dan meng-compile-nya di komputer kamu. Di Debian dan Ubuntu ini pasti bekerja (nama paket dapat berubah tergantung pada versi Ubuntu / Debian)
$ Sudo apt-get install php-pear php5-dev apache2-threaded-dev build-essential
$ Sudo pecl install apc
Konfigurasi APC
APC Setelah terinstal harus diaktifkan pada file konfigurasi PHP: php.ini, jika kamu telah menginstal APC dari paket, APC tersebut sudah diaktifkan dan kamu hanya tinggal me-restart Apache (atau daemon FastCGI seperti FPM) untuk melihat bagian APC di phpinfo () yang akan mengkonfirmasi APC setelah diaktifkan.

Jika tidak, kamu harus menyertakan dalam php.ini baris ini:
extension = apc.so
Ini cukup untuk memiliki APC dipasang dengan semua parameter default, tapi mungkin kamu ingin mengubah beberapa nilai default. Di antara parameter ada “apc.shm_size”, yang menentukan berapa banyak memori yang digunakan untuk APC, defaultnya adalah 30 MB, tergantung pada aplikasi kamu dan RAM pada server 64, 128 atau bahkan 512 MB.

Berikut ini adalah konfigurasi yang disarankan untuk box dengan RAM 1Gb:

# cat /etc/php5/conf.d/apc.ini
extension=apc.so
apc.enabled=1
apc.shm_size=128
apc.cache_by_default="1"
apc.shm_segments="1"
apc.ttl="7200"
apc.user_ttl="7200"
apc.gc_ttl="1800"
apc.optimization = 0
apc.num_files_hint="1024"
apc.use_request_time = 1
apc.mmap_file_mask="/tmp/apc.XXXXXX"
apc.enable_cli="0"
apc.slam_defense="0"
apc.file_update_protection="2"
apc.max_file_size="1M"
apc.stat="1"
apc.write_lock="1"
apc.report_autofilter="0"
apc.include_once_override="0"
apc.rfc1867="0"
apc.rfc1867_prefix="upload_"
apc.rfc1867_name="APC_UPLOAD_PROGRESS"
apc.rfc1867_freq="0"
apc.localcache="0"
apc.localcache.size="512"
apc.coredump_unmap="0"
Untuk penjelasan lengkap dari pengaturan ini, lihat dokumentasi online.
APC termasuk halaman web di mana kamu dapat melihat penggunaan cache, termasuk fragmentasi dan informasi berguna lainnya. Salin apc.php file (terletak di / usr / share / doc / php-apc / apc.php untuk Debian dan Ubuntu) ke dalam document root kamu dan mengarahkan browser kamu ke sana untuk melihat layar seperti ini :

Dari sini kamu dapat melihat hits / misses% dan statistik penting: Cache jumlah penuh, nomor ini memberitahu berapa banyak waktu cache telah terisi penuh, jika nomor ini naik terlalu cepat kamu mungkin harus meningkatkan ukuran cache.

Satu kata peringatan: Jika kamu tidak restart Apache atau PHP-FPM secara berkala, cache kamu bisa menjadi terfragmentasi, karena kamu akan dapat melihat dengan mengunjungi halaman web. Untuk menghindari hal ini, secara berkala kamu harus mengosongkan cache. Saya menggunakan pengaturan cron yang sekali sehari menyebut sebuah halaman web di situs saya, yang saya sebut apc-clear.php, yang mengosongkan cache. Hal ini juga memeriksa bahwa alamat invoking itu bersifat lokal sehingga tidak dapat dipanggil dari luar. Berikut adalah isi dari APC-clear.php:

<?php
if (in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', '::1')))
{
  apc_clear_cache();
  apc_clear_cache('user');
  apc_clear_cache('opcode');
  echo json_encode(array('success' => true));
}
else
{
  die('SUPER TOP SECRET');
}

Dan ini adalah cron saya:
0 6 * * * /usr/bin/curl --silent http://myserver.com/subdir/apc-clear.php

Kesimpulan
Seperti yang kamu lihat dalam artikel ini, menyiapkan APC sangat mudah dan akan meningkatkan throughput dari halaman php kamu berkali-kali, jadi mengapa kamu tidak mencobanya?

 https://www.virtualmin.com/node/15258
For APC running on virtual servers for opcode caching:
Remove apc.ini from /etc/php.d. Do not add the APC configuration into /etc/php.ini (main php.ini which is probably a template used for creation of new virtual servers).
Instead, enable APC on a per-domain basis by modifying the respective /home/domainname.com/etc/php5/php.ini

http://gregrickaby.com/the-perfect-apc-configuration/



APC installation comes with apc.php file, which can be use to monitor APC performance. This file can be found inside APC package  OR can be download from http://pecl.php.net/package/APC ( unzip and look for apc.php file).
Once apc.php is downloaded copy it to your domain so that you can assess it.
Now from browser, you can go to  http://domain.com/apc.php. I prefer to wait for a day to see the APC performance so we can have clear idea how well our configuration did.

Sample output of APC:
apc1
Here, we clearly see that APC is not performing very well as we have 44% misses. To optimize this we can reduce the memory and also we can increase max_file_size and also TTL time so that more can be cached in APC.  Normally when missed rate is more than 10% ,  its better to reconfigure the settings of APC.
Well tuned APC will look like below: 
APC INFO  luke.savvysme.com.au   128.199.188.56-s