October 21, 2009

PHP OPCodes Cached with APC – part 2

Before reading this post, I recommend going over part 1 PHP OPCodes Cached with APC – part 1 In the first part we tackled what OPCodes are and how APC helps us streamline webserver performance by caching recurring script execution. In this second part, we will mostly look at the APC configuration main variable and thus further understand how the APC engine works. **APC cache size and shared memory ** apc.shm_segments By default this value is set to ‘1’; that is so say, there would be only one shared memory segment to allocate to the cache apc.shm.size This is the size in MB of each shared memory segment. The default is of 30Mb. Please note that you cannot set a higher value than the maximum size of shared memory segment defined in your kernel distribution. cat /proc/sys/kernel/shmmax 33554432 ... Read more

October 21, 2009

PHP OPCodes Cached with APC - part 1

There are many caching system in use to optimize the execution of PHP script on busy web/database servers. Today we will focus on the OPcode caching method using APC. Before we start… what is an OPcode? The OPcode is an executable code generated each time a PHP script is interpreted and compiled. Each time you visit a webpage, the webserver (apache for example) would generate an OPcode of the PHP script serving your request. They are therefore simply C data structure which are interpreted by the PHP Virtual Machine (Zend Engine). Now you can imagine, generating the OPcode can be a drain on the server and quite useless if the code does not change often. This is where the OPcode caching system comes into play; but before we go on, let’s see some OPcode example using the Vulcan Logic Disassembler. First, we create a file test.php in which we will execute a unix ls -l command test.php - <? system(“ls -l”); ?> wrk01:/var/www# php -d vld.active=1 test.php Branch analysis from position: 0 Return found filename: /var/www/test.php function name: (null) number of ops: 4 compiled vars: none line # op fetch ext return operands 2 0 SEND_VAL ‘ls+-l’ 1 DO_FCALL 1 ‘system’ 4 2 RETURN 1 3* ZEND_HANDLE_EXCEPTION Now let’s try a simple ( echo “hello world!” ) ... Read more