当前位置: 首页 > 科技观察

服务器部署:php.ini配置性能调优_0

时间:2023-03-20 01:50:42 科技观察

默认安装的PHP就像是在百货公司买的一件通用西装,合身,但并不完美。TunedPHP就像一件定制的西装,完全符合您的尺寸。但是需要注意的是,调优PHP只是提高PHP性能和效率的一种措施,对于糟糕的代码和无响应的API调用没有任何作用。php.ini文件PHP解释器在php.ini文件中配置和调优。这个文件的位置在不同的操作系统中是不一样的,命令行对应的php.ini和PHP-FPM对应的php.ini文件一般是分开的。这里我们假设配置了PHP-FPM对应的php.ini,但是下面提到的优化措施适用于所有的php.ini。注意:我们应该首先使用PHPIniscan工具扫描php.ini,以检查是否使用了安全最佳实践。内存在运行PHP时,需要关心每个PHP进程使用多少内存。php.ini中的memory_limit设置用于设置单个PHP进程可以使用的最大系统内存。该设置的默认值为128M,可能适合大多数中小型PHP应用程序。但是,如果您运行的是小型PHP应用程序,则可以减小此值以节省系统资源。相反,如果您运行的是内存密集型的PHP应用程序,则可以增加此值。该值的大小由可用的系统内存决定。确定分配给PHP的价值是一门艺术。在决定给PHP分配多少内存以及它能承受多少PHP-FPM进程时,可以根据以下维度信息来判断:Total可以给PHP分配多少内存?以2G内存的VPS为例。本设备中可能还运行着其他进程,如MySQL、Nginx等,所以预留512M给PHP比较合适。每个PHP进程平均消耗多少内存?要监控进程的内存使用情况,可以使用命令行命令top,或者调用PHP脚本中的memory_get_peak_usage()函数。无论使用哪种方法,都必须多次运行相同的方法。脚本,然后平均内存消耗。我可以承受多少个PHP-FPM进程?假设我给PHP分配了512M内存,每个PHP进程平均消耗15M内存,那么我可以负担得起34个PHP-FPM进程。是否有足够的系统资源?最后,您需要确认有足够的系统资源来运行PHP应用程序并处理预期的流量。注意:我们应该使用ApacheBench或Siege在类似生产的条件下对PHP应用程序进行压力测试,以确定生产环境是否有足够的可用资源。在ZendOPcache确定分配多少内存后,您可以配置PHP的ZendOPcache扩展。有关此扩展的更多信息,请参阅这篇文章:http://lavelacademy.org/post/4396.html。PHP5.5.0+内置此扩展,以下是用于配置和优化php.ini文件中的ZendOPcache扩展的设置:opcache.memory_consumption=64:memoryallocatedforopcodecache(inMB),allocatedmemory该卷应该能够保存应用程序中所有PHP脚本编译的操作码。这个值可以根据应用的体积设置成不同的值。opcache.interned_strings_buffer=16:用于存储常驻字符串的内存量(以MB为单位),什么是常驻字符串?PHP解释器会在后台找到同一个字符串的多个实例,并将这个字符串保存在内存中,如果同一个字符串再次被使用,PHP解释器会使用指针,这样做的目的是为了节省内存。默认情况下,PHP驻留字符串在每个PHP进程中都是隔离的。该设置允许PHP-FPM进程池将所有进程常驻字符串存储在一个共享缓冲区中,这样PHP-FPM进程池中的多个进程引用常驻字符串,可以节省更多的内存。opcache.max_accelerated_files=4000:操作码缓存中可以存储的PHP脚本的最大数量。该值的范围在2000到100000之间。该值必须大于PHP应用程序中的文件数。opcache.validate_timestamps=1:当该设置的值为1时,PHP会在一段时间后检查PHP脚本的内容是否发生变化,检查间隔由opcache.revalidate_freq设置指定。如果这个设置的值为0,PHP将不会检查PHP脚本的内容是否有变化,我们必须自己清除缓存的操作码。建议开发环境设置为1,生产环境设置为0。opcache.revalidate_freq=0:设置多长时间(以秒为单位)检查PHP脚本内容是否已更改。设置为0秒的意思是,只有当opcache.validate_timestamps设置为1时,PHP文件才会在每次请求时重新验证。所以在开发环境中每次都会重新校验PHP文件,而在生产环境中则不会。核实。opcache.fast_shutdown=1:此设置允许操作码使用更快的关闭步骤,将对象销毁和内存释放留给ZendEngine的内存管理器。文件上传如果您的应用程序允许文件上传,最好设置可以上传的最大文件大小。另外,最好设置一下可以同时上传的最大文件数:file_uploads=1upload_max_filesize=10Mmax_file_uploads=3PHP默认允许一次请求上传20个文件,最大上传文件为2MB。这里我设置了单次请求最多只能上传3个文件,每个文件最大10MB。这个值不要设置太大,否则会超时。注意:如果需要上传大文件,需要相应调整Web服务器的配置。除了在php.ini中设置外,还要调整Nginx虚拟主机配置中的client_max_body_size设置。最大执行时间php.ini文件中的max_execution_time用于设置单个PHP进程在终止前可以运行的最长时间。此设置默认为30秒,建议设置为5秒:max_execution_time=5注意:可以通过调用PHP脚本中的set_limit_time()函数来覆盖此设置。假设我们要生成一份报告,并将结果制作成PDF文件。这个任务可能需要10分钟才能完成,我们当然不想让PHP请求等待10分钟。我们应该编写一个单独的PHP文件,让它在单独的后台运行In-processexecution,thewebapplicationcanspawnaseparatebackgroundprocessinjustfewmilliseconds,然后返回HTTP响应:create-report.phprunsina单独的后台进程,并可以在运行后更新数据库,或通过电子邮件将报告发送给收件人。但是,这种用法很少见。大多数时候,我们使用异步消费队列来实现类似的功能。在安全性、可扩展性和可维护性方面,效果更好。相关组件包括轻量级消息队列PHPResque等。处理会话PHP的默认会话处理程序会降低大型应用程序的速度,因为该处理程序将会话数据存储在磁盘上,从而产生不必要的磁盘I/O并浪费时间。我们应该将会话数据保存在内存中,例如使用Memcached或Redis。这有一个额外的好处,就是以后更容易扩展。如果会话数据存储在硬盘中,不方便添加额外的服务器。如果会话数据存储在Memcached或Redis中,任何分布式PHP-FPM服务器都可以访问会话数据。如果要在Memcached中保存session数据,需要做如下配置:session.save_handler='memcached'session.save_path='127.0.0.1:11211'bufferoutputifmoredataissentinflessblocksthanSendinglessdatainmorechunks使网络更有效率,也就是说,以更少的块将内容传送到访问者的浏览器减少了HTTP请求的总数。因此,我们需要让PHP缓冲输出。默认情况下,PHP启用了输出缓冲功能。PHP在将内容发送到Web服务器之前缓冲4096字节的输出。推荐配置如下:output_buffering=4096implicit_flush=false注意:如果要修改输出缓冲区的大小,请确保使用的值是4(32位系统)或8(64位系统)的倍数.真实路径缓存PHP会缓存应用程序使用的文件路径,这样你就不需要在每次包含或导入文件时都去搜索包含路径。这种缓存称为真实路径缓存(realpathcache)。如果您正在运行一个大型PHP文件(例如Composer组件),使用大量文件,增加PHP真实路径缓存的大小可以带来更好的性能。真实路径缓存的默认大小是16K。这个缓存需要的具体大小不好确定,但是可以使用一个技巧:首先增加真实路径缓存的大小,设置一个特别大的值,比如256K,然后,在添加print_r(realpath_cache_size());在PHP脚本的最后输出真实路径缓存的真实大小,最后,将真实路径缓存大小更改为这个真实值。我们可以在php.ini文件中设置真实路径缓存的大小:realpath_cache_size=64K