php.ini 配置参数详解及优化
php解释器在php.ini文件中配置和调优。
内存
memory_limit = 128
用于设定单个php进程可以使用的系统内存的最大值。
默认值是128M,这对大多数中小型php应用来说或许合适。可是如果运行的是微型php应用,可以降低这个值,例如设为64M,节省系统资源。
zend opcahce
确定要分配多少内存后,我们会配置php的zend opcache扩展。这个扩展用于缓存操作码。
每次http请求时,首先nginx把http请求转发给php-fpm,php-fpm再把请求交给某个php子进程处理。php进程找到相应的php脚本后,读取脚本,把php脚本编译成操作码(或字节码)格式,然后执行编译得到的操作码,生成响应。最后,把http响应发给nginx,nginx再把响应发给http客户端。这样的话每次http请求都要消耗很多资源。
我们可以缓存编译每个http脚本得到的操作码,加速这个处理过程。缓存后,我们可以从缓存中直接读取并执行预先编译好的操作码,不用每次处理http请求时都查找、读取和编译php脚本。
优化zend opcahce扩展的设置
opcache.memory_consumption=64 //php7默认是64
opcache.interned_strings_buffer=16 //php7默认是4
opcache.max_accelerated_files=4000 //php7默认是2000
opcache.validate_timestamps=1 //php7默认是1
opcache.revalidate_freq=0 //php7默认是2
opcache.fast_shutdown=1 //php7默认是0
opcache.memory_consumption=64
为操作码缓存分配的内存量(单位MB)。分配的内存量应该够保存应用中所有php脚本编译得到的操作码。如果是小型的php应用,脚本数较少,可以设为较低的值,例如16M
opcache.interned_strings_buffer=16
用来存储驻留字符串的内存量(单位MB)。
php解释器在背后会找到相同字符串的多个实例,把这个字符串保存在内存中,如果再次使用相同的字符串,php解释器会使用指针,这样能节省内存。默认情况下,php驻留的字符串会隔离在各个php进程中。这个设置能让php-fpm进程池中的所有进程把驻留字符串存储到共享的缓冲区中,以便在php-fpm进程池中的多个进程之间引用驻留字符串。这样能节省内存。这个的默认值是4M,可以设为16M
opcache.max_accelerated_files=4000
操作码缓存中最多能存储多少个php脚本。这个设置的值可以在200-100000之间的任何数。这个值一定要比php应用中的文件数量大。
opcache.validate_timestamps=1
这个值设为1时,经过一段时间后php会检查php脚本的内容是否变化。检查的时间间隔由opcache.revalidate_freq设置指定。如果这个设置的值为0,php不会检查php脚本的内容是否变化,我们必须手动清除缓存的操作码。建议开发环境中设为1,生产环境设为0
opcache.revalidate_freq=0
这个设置多久(单位是秒)检查一次php脚本的内容是否变化。缓存的好处是不用每次都重新编译php脚本。这个设置用于确定在多长时间内认为操作码是新的。 在这段时间之后,php会检查php脚本的内容是否有变化。如果有变化,php会重新编译脚本,再次缓存。
opcache.fast_shutdown=1
这个设置能让操作码使用更快的停机步骤,把对象析构和内存释放交给zend Enginer的内存管理器去完成。
文件上传
这个应该都懂
file_uploads = On
upload_max_filesize = 2M
max_file_uploads = 20
如果需要上传更大的文件,需要调整nginx配置中的client_max_body_size参数
最长执行时间
这个参数用于设定单个php进程在终止之前最长可以运行多少时间。
max_execution_time = 5 //默认是30
在php脚本中可以调用set_time_limit()函数来覆盖这个值。
如果需要运行更长的时间,则要在单独的进程中运行。
比如要生成报告,把结果制作成pdf文件,这个任务大概需要10分钟完成。我们要单独编译一个php文件,为create.php
<?php
exec('echo "create.php"|at now');
echo 'report pending...';
?>
处理会话
session.save_handle = 'memcached'
session.save_path = '127.0.0.1:11211'
缓存输出
如果在较少的块中发送更多的数据,而不是在较多的块中发送较少的数据,那么网络的效率会更多。也就是说,在较少的片段中把内容传递给访问者的浏览器,能减少http请求总数。
因此,我们要让php缓冲输出。默认情况下,php已经启用了输出缓冲功能。php缓冲4096字节的输出之后才会把其中的内容发送给web服务器。推荐设置
output_buffering = 4096
implicit_flush = false
真实路径缓存
php会缓存应用使用的真是路径,这样每次包含或导入文件时就无需不断搜素包含路径了。这个缓存叫真实缓存路径。如果运行的是大型php文件(Drupal和Composer组件等),使用了大量文件,增加php真实路径缓存的大小就能得到更好的性能。
真实路径缓存的默认大小是16K。这个缓存所需要的准确大小不容易确定,不过可以使用一个小技巧。首先,增加真实路径缓存的大小,设为特别大的值,例如256K。然后在这个php脚本的末尾加上print_r(realpath_cache_size());输出真实路径缓存的真正大小。最后,把真实路径缓存的大小改为这个真正的值。我们可以在php.ini文件中设置真实路径缓存的大小:
realpath_cache_size = 64K
已有 0 条评论