php.ini文件
php.ini
文件中配置和调优,此文件的位置在不同的操作系统中是不同的,并且常规命令行对应 php.ini
和 PHP-FPM 对应的 php.ini
文件是分开的。在这里,我们假设配置PHP-FPM 对应于php.ini
,但是下面讲的优化措施适用于所有 php.ini
。注:我们首先应该使用 PHP Iniscan 工具扫描 php.ini,检查使用了安全方面的最佳实践。
内存
php.ini
中的 memory_limit
设置用于设定单个 PHP 进程可以使用的系统内存最大值。一共可以分配给 PHP 多少内存?以一个 2G 内存的 VPS 为例,这台设备中可能还运行了其他进程,如 MySQL、Nginx 等,那么留 512M 给 PHP 是合适的。
每个 PHP 进程平均耗费多少内存?这个要监控进程的内存使用量,可以使用命令行命令
top
,也可以在 PHP 脚本中调用memory_get_peak_usage()
函数,不管使用哪种方式,都要多次运行同一个脚本,然后取内存消耗的平均值。能负担起多少个 PHP-FPM 进程?假设我给 PHP 分配了 512M 内存,每个 PHP 进程平均耗费 15M 内存,那么可以负担起 34 个 PHP-FPM 进程。
有足够的系统资源吗?最后还需要确认有足够的系统资源运行 PHP 应用并处理预期的流量。
注:我们应该使用 Apache Bench 或 Siege 在类似生产环境的条件下对 PHP 应用做压力测试,以确定生产环境是否有足够的资源可用。
Zend OPcache
php.ini
文件中配置和优化 Zend OPcache 扩展所用的设置:opcache.memory_consumption = 64
:为操作码缓存分配的内存量(以MB为单位)。分配的内存量应能够存储应用程序中所有PHP脚本编译的操作码。该值可以根据应用程序的大小设置为不同的值。opcache.interned_strings_buffer = 16
:用于存储常驻字符串的内存量(以MB为单位)。什么是驻留字符串? PHP解释器将在其后找到同一字符串的多个实例,并将此字符串保存在内存中。如果再次使用相同的字符串,PHP解释器将使用指针,以节省内存。默认情况下,PHP驻留字符串在每个PHP进程中都是隔离的。
此设置允许PHP-FPM进程池将所有进程驻留字符串存储在共享缓冲区中,以便可以将其存储在PHP-FPM进程池中。在多个进程之间引用常驻字符串,从而节省了更多内存。
opcache.max_accelerated_files = 4000
:可以存储在操作码缓存中的PHP脚本的最大数量。取值范围是2000〜100,000。此值必须大于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
:此设置允许操作码使用更快的停机时间,将对象破坏和内存释放留给Zend Engine的内存管理器。
文件上传
file_uploads = 1
upload_max_filesize = 10M
max_file_uploads = 3
注:如果非要上传大文件,Web 服务器的配置也要做相应调整。除了在 php.ini
中设置之外,还要调整 Nginx 虚拟主机配置中的client_max_body_size
设置。
最长执行时间
php.ini
文件中的 max_execution_time
用于设置单个PHP进程在终止之前可以运行的最长时间。此设置默认为30秒,建议将其设置为5秒:max_execution_time = 5
注:在 PHP 脚本中可以调用 set_limit_time() 函数覆盖这个设置。
<?php
exec('echo "create-report.php" | at now');
echo 'report pending...';
create-report.php
在单独的后台进程中运行。运行之后,您可以更新数据库或将报告通过电子邮件发送给收件人。处理会话
session.save_handler = 'memcached'
session.save_path = '127.0.0.1:11211'
缓冲输出
output_buffering = 4096
implicit_flush = false
注:如果想要修改输出缓冲区的大小,确保使用的值是4(32位系统)或8(64位系统)的倍数。
真实路径缓存
print_r(realpath_cache_size());
,输出真实路径缓存的真正大小,最后,把真实路径缓存的大小改为这个真正的值。我们可以在 php.ini
文件中设置真实路径缓存的大小:realpath_cache_size = 64K

优网科技秉承"专业团队、品质服务" 的经营理念,诚信务实的服务了近万家客户,成为众多世界500强、集团和上市公司的长期合作伙伴!
优网科技成立于2001年,擅长网站建设、网站与各类业务系统深度整合,致力于提供完善的企业互联网解决方案。优网科技提供PC端网站建设(品牌展示型、官方门户型、营销商务型、电子商务型、信息门户型、DIY体验、720全景展厅及3D虚拟仿真)、移动端应用(手机站、APP开发)、微信定制开发(微信官网、微信商城、企业微信)、微信小程序定制开发等一系列互联网应用服务。