T086ѧϰ�� | վ��ѧԺ | �����ĵ� | ���� | Ъ���� | IP��ַ��ѯ | �������� | ���ջ��� | �����ֵ� | ���ù��� | ������Ϣ��ѯ

php���� PHP APC dz��

�� ����ʱ�䣺2011-06-07 | ���壺�� �� С��
[����]PHP APC�ṩ���ֻ��湦�ܣ�������Opcode(Ŀ���ļ�)�����dz�֮Ϊapc_compiler_cache��ͬʱ�����ṩһЩ�ӿ�����PHP������Ա���û�����פ�����ڴ��У����dz�֮Ϊapc_user_cache������������Ҫ����php-apc�����á� ��װ...

PHP APC�ṩ���ֻ��湦�ܣ�������Opcode(Ŀ���ļ�)�����dz�֮Ϊapc_compiler_cache��ͬʱ�����ṩһЩ�ӿ�����PHP������Ա���û�����פ�����ڴ��У����dz�֮Ϊapc_user_cache������������Ҫ����php-apc�����á�

 

��װPHP APC

��Ϊ���Ի�������������ʹ�õ���CentOS5.3��2.6.18-128.el5PAE�� + Apache2.0(prefork) + php5.2�����ǿ���ȥpecl apc����APC-3.0.19.tgz

[cc lang='bash']
# tar -xzvf APC-3.0.19.tgz
#cd APC-3.0.19
# /usr/bin/phpize
# ./configure --enable-apc --enable-mmap --enable-apc-spinlocks --disable-apc-pthreadmutex
#make
#make install
[/cc]
ע��:��������֧��mmap��ͬʱ����spinlocks��������Spinlocks��Facebook�Ƽ�ʹ�ã�ͬʱҲ��APC�������Ƽ�ʹ�õ������ơ�

PHP APC ����

������ʹ�õ�ϵͳ�������ҵIJ��Ի�����һ���Ļ���������/etc/php.dĿ¼�´����ļ�apc.ini��������������д��/etc/php.d/apc.ini�ļ��������������һЩ���õ������ã�������̽�֡������ص����÷���һ�����͡�

apc.enabled=1
apc.enabledĬ��ֵ��1����������0����APC������������Ϊ0��ʱ����ͬ����extension=apc.soҲע�͵����������Խ�Լ�ڴ���Դ����һ��������APC���ܣ����Ỻ��Opcodes�������ڴ档

APC��Ȼ�����ݻ������ڴ����棬���Ǿ��б�Ҫ���������ڴ���Դ�޶���ͨ�����������ÿ����޶�APC����ʹ�õ��ڴ��ռ���С��apc.shm_segmentsָ����ʹ�ù����ڴ���������apc.shm_size��ָ����һ�鹲���ڴ��ռ���С����λ��M�����ԣ�����APCʹ�õ��ڴ���СӦ���� apc.shm_segments * apc.shm_size = 30M�������Ե���һ�鹲���ڴ��Ĵ�С�ռ䡣��Ȼ,һ�鹲���ڴ�����ֵ���ܲ���ϵͳ���Ƶģ������ܳ���/proc/sys/kernel/shmmax��С������APC���������ڴ���ʱ�򣬻�ʧ�ܡ���apc.shm_size�ﵽ�����޵�ʱ����������ͨ������apc.shm_segments������APCʹ�ø������ڴ��ռ䡣�����Ƽ�����������APCʹ���ڴ��ռ��Ļ����ȿ���apc.shm_size��������apc.shm_segments��������ֵ�����Ը���apc.php�����������й滮��������ֵ��ע�����ǣ�ÿһ�ε�����Ҫ����httpd�ػ����̣������������¼���apc.soģ�顣������httpd�ػ�����������apc.soģ���ͻ����ء�apc.so���س�ʼ����ʱ����ͨ��mmap���������ڴ�ָ����С���ڴ棬��apc.shm_size * apc.shm_segments�����ң�����ʹ�õ��������ڴ�ӳ�䷽ʽ��ͨ��ӳ��һ�������豸/dev/zero���ṩһ��"����"�ģ������������ڴ湩APC������
Ϊ����֤���ϳ���������ע�͵�apc.ini���ã�����д������php�ű��۲�apc.soģ����ʼ���ķ������ڴ��ռ䡣

[cc lang='php']
//@file: apc_load.php
if (!extension_loaded('apc')) {
dl('apc.so'); #����apc.so�
echo posix_getpid(); #//������ǰ���̵�pid,������������������14735
ob_flush();
flush();
sleep(3600); #�ý��̽�������״̬.���������ǿ��Թ۲��ڴ���������
}
?>
[/cc]
[cc lang='bash']
#strace -p `cat /var/run/httpd.pid`
open("/var/www/html/apc_load.php", O_RDONLY) = 13
...
mmap2(NULL, 31457280, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0) = 0xb5ce7000
...
nanosleep({3600, 0},
[/cc]

��ɫ���֣����ǿ��Կ�����ͨ��mmapϵͳ�ں˵��÷�����30M(31457280/1024/1024)�ڴ��ռ䡣PROT_READ|PROT_WRITE��ʾ���ڴ��ռ��ɹ���ȡ��д�롣MAP_SHARED��ʾ���ڴ��ռ������������ǹ����ģ�����������Ҳ���Խ��ж�ȡ��д�룬���ǿ���ͨ��apc.php���й����ÿ��ڴ��ռ����������ڴ��趨��MAP_ANONYMOUS����ʾ����ӳ�䡣����fd=-1��ʾ����,��Ϊ����ӳ���������豸/dev/zero��������0��ʾ��ƫ���������ǻ�����ͨ������ӳ���ļ��鿴�ÿ��ڴ��ľ�������
[cc lang='bash']
#cat /proc/14735/smaps

 

 

b5ce7000-b7ae7000 rw-s 00000000 00:08 633695 /dev/zero (deleted)
Size: 30720 kB
Rss: 44 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 44 kB
[/cc]
���Ժ����׵ط�����ʼ��ַ0xb5ce7000������mmapϵͳ�ں˵��÷��صĵ�ַһ�����ÿ��ڴ��ǿɶ�дrw�������������̹���s����/dev/zero����ӳ���ļ������ļ��ڵ���633695�����У�size��ʾ���̿���ʹ�õ��ڴ��ռ䣬��rss����ʾʵ�ʷ������ڴ��ռ䣬����Private_Dirty���Կ�����ʵ�ʷ�����44kb�ڴ����ɵ�ǰ�����Լ������ġ�

apc.num_files_hint = 1000
apc.user_entries_hint = 4096

��������ָ��apc�����ж��ٸ�������Ŀ��apc.num_files_hint˵�������ƿ��ܻ��ж��ٸ��ļ���Ӧ��opcodes��Ҫ�����ɣ�����Լ�����ж��ٸ�apc_compiler_cache��Ŀ������apc.user_entries_hint��˵�������ƿ��ܻ��ж��ٸ�apc_userdata_cache��Ŀ��Ҫ�����档������Ŀ�в�ʹ��apc_store()�����û����ݵĻ�����ֵ�����趨�ø�С��Ҳ����˵apc.num_files_hint��apc.user_entries_hint֮�;�����APC�������󻺴�������Ŀ��������׼ȷ������������ֵ���Եõ����Ѳ�ѯ���ܡ���Ȼ�������㲻����Ҫ���ж��ٻ���(��������ʵ��)�������£������Բ����޸����������á�
����apc.user_entries_hintҪ������Ŀʵ�ʿ���ʹ����apc_store()��Ŀ������ֵ��С�����϶��ԣ�apc.num_files_hint����ͨ��find��������׵ع�������С���������ǵ�web��Ŀ��/var/vhosts,��ʹ��������find�������Դ��µ�ͳ�Ƶ�ǰapc.num_files_hint��Ŀ.

[cc lang='bash']
#find /var/vhosts \( -name “*.php” -or -name “*.inc” \) -type f -print |wc -l
1442
[/cc]

apc.stat = 1
apc.stat_ctime = 0

������������ֻ��apc_compiler_cache�������أ�����Ӱ��apc_user_cache������ǰ���ᵽ��apc_complier_cache,�������Ķ�����phpԴ�ļ�һһ��Ӧ��opcodes(Ŀ���ļ�)��PHPԴ�ļ������ڴ����豸��,��֮����Ӧ��OpcodesĿ���ļ�λ���ڴ��ռ�(�����ڴ�)����ô��phpԴ�ļ����޸��Ժ�,��ô֪ͨ�����ڴ��ռ���opcodes��?ÿ�ν��յ���������APC����ȥ�����򿪵�phpԴ�ļ��������޸�ʱ��,�����ļ��������޸�ʱ������Ӧ���ڴ��ռ仺��������¼�������޸�ʱ�䲻һ�µĻ���APC������Ϊ�������ڴ��ռ���OpcodeĿ���ļ�(��������)�Ѿ������ˣ�acp�Ὣ���������������ұ����½����õ���Opcode�����ǹ��ĵ��ǣ�����û�и����κ�phpԴ�ļ���ÿ�ν��ܵ�http��������APC��������ϵͳ�ں˵���stat()����ȡphpԴ�ļ������޸�ʱ�����ǿ���ͨ����apc.stat����Ϊ0��Ҫ��APC��ȥ����Opcodes����Ӧ��phpԴ�ļ��Ƿ������ˡ��������Ի������ѵ�����,����Ҳ�Ƽ���ô������������������һ�㲻�õľ��ǣ�һ����PHPԴ�ļ�������֮������Ҫ����httpd�ػ����̻��ߵ���apc_cache_clear()��������APC��������֤phpԴ�ļ��뻺�����ڴ��ռ���Opcodes��һ�¡�

[cc lang='php']
define('ROOTP', dirname(__FILE__) . '/');
include(ROOTP . 'i1.php');
require(ROOTP . 'i2.php');
include_once(ROOTP . 'i3.php');
require_once(ROOTP . 'i4.php');
require(ROOTP . 'i5.php');
include(ROOTP . 'i6.php');
?>
[/cc]
[cc lang='bash']
# strace -e trace=file -p `cat /var/run/httpd.pid`
getcwd("/var/www/html", 4096) = 14
stat64("/var/www/html/i1.php", {st_mode=S_IFREG|0644, st_size=39, ...}) = 0
stat64("/var/www/html/i2.php", {st_mode=S_IFREG|0644, st_size=39, ...}) = 0
lstat64("/var", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/var/www", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/var/www/html", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/var/www/html/i3.php", {st_mode=S_IFREG|0644, st_size=39, ...}) = 0
open("/var/www/html/i3.php", O_RDONLY) = 12
stat64("/var/www/html/i3.php", {st_mode=S_IFREG|0644, st_size=39, ...}) = 0
lstat64("/var", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/var/www", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/var/www/html", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/var/www/html/i4.php", {st_mode=S_IFREG|0644, st_size=39, ...}) = 0
open("/var/www/html/i4.php", O_RDONLY) = 12
stat64("/var/www/html/i4.php", {st_mode=S_IFREG|0644, st_size=39, ...}) = 0
stat64("/var/www/html/i5.php", {st_mode=S_IFREG|0644, st_size=39, ...}) = 0
stat64("/var/www/html/i6.php", {st_mode=S_IFREG|0644, st_size=39, ...}) = 0
chdir("/tmp") = 0

# strace -e trace=file -p `cat /var/run/httpd.pid`
getcwd("/var/www/html", 4096) = 14
open("/var/www/html/i3.php", O_RDONLY) = 12
open("/var/www/html/i4.php", O_RDONLY) = 12
chdir("/tmp") = 0
[/cc]
�Աȿɼ�����apc.stat=0ʱ��ʡ�˺ܶ�ϵͳ�ں˵���,����û�п���ϵͳ�ں˵���stat64�ˡ����У�i3.php��i4.php�ֱ���php��include_once��require_once�������ã���Ҫ����fstat()ϵͳ�ں˵����������ļ��Ƿ��򿪹����������ܽǶȳ����Ļ�,require��require_once���ܸ��ѡ�

����apc.stat_ctime�����岢�Ǻܴ�������apc.stat_ctimeֵΪ1ʱ������phpԴ�ļ��Ĵ���ʱ��(ctime)����phpԴ�ļ��������޸�ʱ��(mtime)ʱ������������mtimeʱ���ᱻphpԴ�ļ���ctime�����棬���򻺴�������mtime��Ȼ��¼ΪphpԴ�ļ���mtime���������Ƿ�ֹͨ��cvs, svn����rsync�ȹ���ˢ��phpԴ�ļ���mtime�������ᵼ��APCͨ���ȶ�phpԴ�ļ��Ĵ���ʱ��ctime����������������û�й��ڡ������Ƽ��ñ���Ĭ��ֵ����apc.stat_ctime = 0

apc.ttl=0
apc.user_ttl=0

�����������������ڡ�����ttl��ʾTime To Live����ζ��ָ��ʱ���󻺴������ᱻ����������0��ʾ�������ڡ�����ǰ��������APC�ܻ�������Ŀ�����޶��ģ���������ttl�����������ڵĻ�����������Ŀ�������߻����ռ䲻����֮���Ļ��涼��ʧ�ܡ�
����apc.ttl������apc_compiler_cache����apc.ttl����0ʱ��ÿ�����󶼻��Ա����ε�����ʱ������һ������ʱ��֮���Dz��Ǵ���apc.ttl����������apc.ttl�����ᱻ�ϻ�����Ŀ�����ˣ��ᱻ������
�Ƚ�����˼����apc.user_ttl������Ҫ������apc_user_cache���档����֪�����������͵Ļ�����ͨ��apc_store($key, $var, $ttl = 0)�����Ļ������󡣺���apc_store()��ָ����$ttl��php.ini���趨��apc.user_ttl��ʲô��ͬ�������DZȽϹ��ĵġ���Ϊ����ͬ��������apc_userdata_cache���档��������������֪�����ж�apc_user_cache�������ڵ������ǣ���apc.user_ttl����0,������http����ʱ������һ��http����ʱ��֮������apc.user_ttl������Ϊ��Ӧ�Ļ�����Ŀ�ѹ���;���ߣ�user.data.ttl(php����apc_store()��ָ����$ttl)����0��������http����ʱ���뻺�����󴴽�ʱ��ctime֮������user.data.ttl����ͬ����Ϊ������Ŀ�ѹ��ڣ��ᱻ������
�����Ƽ�������������Ŀ��Ϊ�ȶ�������apc.stat����Ϊ0��ͬʱapc.shm_size��apc.num_files_hint���ú����Ļ���apc.ttl��������Ϊ0����apc_compiler_cache�������գ�ֱ������httpd�ػ����̻��ߵ��ú���apc_cache_clear()�建�档����apc.user_ttl����������Ϊ0���ɿ�����Ա����apc_store()������ʱ��������$ttl��ָ���û����������������ڡ�

apc.slam_defense=0
apc.write_lock=1
apc.file_update_protection=2

֮���԰����������÷���һ�����ͣ�����Ϊ���ǵ�����������������apc.file_update_protection�������⣬���ĵ�λ��ʱ�䵥λ�롣������ǰhttp����ʱ����phpԴ�ļ������޸�ʱ��mtime֮��С��apc.file_update_protectionʱ�䣬APC�򲻻Ỻ����phpԴ�ļ���֮��Ӧ��Opcodes��ֱ����������ij�η��ʣ����ҷ���ʱ����phpԴ�ļ��������޸�ʱ������apc.file_update_protectionʱ�䣬��֮��Ӧ��Opcodes�Żᱻ���浽�����ڴ��ռ䡣�������ĺô��ǣ������ױ��û����ʵ��������޸ĵ�Դ�ļ��������Ƽ��ڿ�����������ֵ�������õø���һ�㣬������Ӫ�����������Ƽ�����Ĭ��ֵ���ɡ�
��������վ�������ܴ���ʱ�򣬿��ܳ�����http�ػ�����fork�Ķ����ӽ���ͬʱ����ͬһ��Opcodes��������ͨ��apc.slam_defense�����Լ������������ķ������ʡ����磬apc.slam_defenseֵ����Ϊ60��ʱ�򣬵�����δ������Opcodes��ÿ100����60���Dz������ġ����ڲ�������������վ�������Ƽ���ֵ�趨Ϊ0,���ڲ������ߵ���վ���ǿ��Ը���ͳ���ʵ��ص�����ֵ����apc.write_lock��һ������ֵ������ֵ����Ϊ1��ʱ�򣬵���������ͬʱ����ͬһ��Opcodesʱ�����������Ǹ����̻�����Ч����������Ч��ͨ��apc.write_lock���ã���Ч�ر����˻���д�����ij��֡�

apc.max_file_size=1M
apc.filters = NULL
apc.cache_by_default=1

���������÷���һ��������Ϊ���Ƕ��������ƻ��档����apc.max_file_size��ʾ����phpԴ�ļ�������1M������֮��Ӧ��opcodes�������档��apc.filtersָ��һ���ļ������б����Զ���(,)��������apc.cache_by_default����1ʱ����apc.filters�б���ָ�����ļ�����ƥ�����ļ����ᱻ���档�෴��apc.cache_by_default����0ʱ����������acp.filters�б���ָ�����ļ���ƥ�����ļ���

 

�ܽ�

1,ʹ��Spinlocks�����ƣ��ܹ��ﵽ�������ܡ�
2,APC�ṩ��apc.php�����ڼ���������APC���档��Ҫ�����޸Ĺ���Ա��������
3,APCĬ��ͨ��mmap����ӳ�䴴�������ڴ棬�������󶼴���������"����"���ڴ��ռ䡣��APC���й����ù����ڴ�
4,������Ҫͨ��ͳ�Ƶ���apc.shm_size��apc.num_files_hints��apc.user_entries_hint��ֵ��ֱ������
5,�ðɣ��ҳ���apc.stat = 0 ���Ի��ø��ѵ����ܡ�Ҫ����ʲô�����Խ���.
6,PHPԤ���峣��������ʹ��apc_define_constants()������������APC�����߽���˵pecl hidef���ܸ��ѣ�����define�ɣ����ǵ�Ч�ġ�
7,����apc_store()������ϵͳ���õ�PHP��������������������Ӧ��(��httpd�ػ�����ֱ��httpd�ػ����̹ر�)��ʹ��APC��Memcached�����á��ؾ���Ҫ�������紫��Э��tcp��
8,APC������ͨ������apc_store()����Ƶ���������û����ݣ�������һЩ����������

ԭ�ģ�http://www.perfgeeks.com/?p=298

  • ת����ע����Դ��ITѧϰ�� ��ַ��http://www.t086.com/ �����������Ƽ�������
  • �ر������� ��վ�������ر�������ֹת�ص�ר�������������¿�������ת�أ���������ע��������ԭʼ���ߡ����°�Ȩ������ԭʼ�������С����ڱ���վת�����µĸ��˺���վ�����DZ�ʾ������л�⡣������վת�ص������а�Ȩ��������ϵ���ǣ����ǻᾡ�����Ը�����
������ѯ Health Check Gulangyu
© 2017 T086ѧϰ�� - T086.com(ԭitlearner.com)
RunTime:8.37ms QueryTime:7