内存
默认设置
memory_limit = 128M
单个进程可使用的内存最大值,这个值的设定可以从以下几点考虑:
- 这对于大多数中小型 PHP 应用来说或许合适,不过,如果运行的是微型 PHP 应用,可以降低这个值,以便节省系统资源
- 应用的类型。如果是内存集中型应用,可增加该值;
-
这个值的大小由可用的系统内存决定,确定给 PHP 分配多少值是一门艺术,决定给 PHP 分配多少内存,以及能负担起多少个 PHP-FPM 进程时,可以根据以下维度信息进行判断:
- 一共可以分配给 PHP 多少内存?以一个 2G 内存的 VPS 为例,这台设备中可能还运行了其他进程,如 MySQL、Nginx 等,那么留 512M 给 PHP 是合适的。
-
每个 PHP 进程平均耗费多少内存?这个要监控进程的内存使用量,可以使用命令行命令 top,也可以在 PHP 脚本中调用
memory_get_peak_usage()
函数,不管使用哪种方式,都要多次运行同一个脚本,然后取内存消耗的平均值。 - 能负担起多少个 PHP-FPM 进程?假设我给 PHP 分配了 512M 内存,每个 PHP 进程平均耗费 15M 内存,那么可以负担起 34 个 PHP-FPM 进程。
- 有足够的系统资源吗?最后还需要确认有足够的系统资源运行 PHP 应用并处理预期的流量。
文件上传
默认设置
file_uploads = On
max_file_uploads = 20
upload_max_filesize = 2M
post_max_size = 100M
max_execution_time = 30 值 为 0 代表没有限制
-
设置
max_file_uploads
来决定同时允许多少个文件上传; -
设置
upload_max_filesize
来决定每个文件上传的最大值; -
如果是长时间任务,尽量使用队列来处理,因此,可适当缩短
max_execution_time
的值; - 设置post_max_size来决定post请求能上传的文件最大值
- 注意, Web 服务器也可以设置文件上传大小及超时时间,不能仅仅以 php.ini 的设置为准
- 如果非要上传大文件,Web 服务器的配置也要做相应调整。除了在 php.ini 中设置之外,还要调整 Nginx 虚拟主机配置中的 client_max_body_size 设置。
会话
PHP 的会话默认是保存在硬盘中
session.save_handler = files //默认
在实际应用中,应当将会话保存在内存中。可使用 Memcached 或者 Redis。这样做主要有两个好处:
- 提高速度;
- 有助于后期的扩展,如果会话数据存储在硬盘中,不便于增加额外的服务器,如果把会话数据存放在 Memcached 或 Redis 里,任何一台分布式 PHP-FPM 服务器都能访问会话数据。
缓冲输出
output_buffering = 4096 //缓冲输出 默认值
- 在较少的片段中把内容传递给访问者的浏览器,能减少 HTTP 请求总数。 因此,我们要让 PHP 缓冲输出,默认情况下,PHP 已经启用了输出缓冲功能,PHP 缓冲 4096 字节的输出之后才会把内容发送给 Web 服务器。
- 如果想要修改输出缓冲区的大小,确保使用的值是4(32位系统)或8(64位系统)的倍数。
真实路径缓存
真实路径缓存 默认值
realpath_cache_size = 4M
realpath_cache_ttl = 120
- PHP 会缓存应用使用的文件路径,这样每次包含或导入文件时就无需不断搜索包含路径了,这个缓存叫真实路径缓存(realpath cache),如果运行的是大型的 PHP 文件(如 Composer 组件),使用了大量文件,增加 PHP 真实路径缓存的大小能得到更好的性能。
- 真实路径缓存所需的准确大小不容易确定,不过可以使用一个小技巧:首先,增加真实路径缓存的大小,设置为特别大的一个值,如 10M,然后,在一个 PHP 脚本的末尾加上 print_r(realpath_cache_size());,输出真实路径缓存的真正大小,最后,把真实路径缓存的大小改为这个真正的值。我们可以在 php.ini 文件中设置真实路径缓存的大小:
Zend OPcache
启用Opcache非常简单, 在php.ini配置文件中加入 zend_extension = php_opcache.dll //windows下开启 zend_extension = opcache.so //linux下开启 opcache.enable = 1 //开启opcache opcache.enable_cli = 1 //是否在CLI(即命令行时)启用opcache opcache.memory_consumption = 128 //这个配置表示你想要分配给 OPcache 的内存空间(单位:MB),设置一个大于 64 的值即可 opcache.interned_strings_buffer = 64 //这个配置表示你想要分配给实际字符串的空间(单位:MB),设置一个大于 16 的值即可 opcache.max_accelerated_files = 2000 //这个配置表示可以缓存多少个脚本,将这个值尽可能设置为与项目包含的脚本数接近(或更大)。 opcache.validate_timestamps = 0 //该配置值用于重新验证脚本,如果设置为 0(性能最佳),需要手动在每次 PHP 代码更改后手动清除 OPcache(使用 opcache_reset() 或者 opcache_invalidate() 函数来手动重置 OPcache,也可以 通过重启 Web 服务器来使文件系统更改生效)。如果你不想要手动清除,可以将其设置为 1 并通过 opcache.revalidate_freq 配置重新验证间隔,这可能会消耗一些性能,因为需要每隔 x 秒检查更改。 opcache.revalidate_freq = 60 opcache.save_comments = 1 //这个配置会在脚本中保留注释,并且一些库依赖于这个配置。 opcache.fast_shutdown = 1 //开启快速停止续发事件,依赖于Zend引擎的内存管理模块,一次释放全部请求变量的内存,而不是依次释放内存块 opcache.file_cache = /tmp //让Opcache把opcode缓存缓存到外部文件中, 对于一些脚本, 会有很明显的性能提升.这样PHP就会在/tmp目录下Cache一些Opcode的二进制导出文件, 可以跨PHP生命周期存在.
不建议在开发过程中开启Opcache
原因很明显,开启了Opcache之后,开发人员修改的内容不会立即显示和生效,因为受到opcache.revalidate_freq=60的影响,所以建议在开发并测试之后,测试性能时再行打开测试,当然,生产环境一直都要开着Opcache了哦。
不建议将Opcache指标设置太大
Opcache各项指标配置大小或是否开启,需要结合项目实际情况需求及Opcache官方建议的配置,项目的实际情况分析.
我们如何去查看和分析当前的Opcache加速效果那?答案是可以使用下Github上开源的项目:https://github.com/rlerdorf/opcache-status
HugePage
首先在系统中开启HugePages, 然后开启Opcache的huge_code_pages.
以CentOS 6.5为例, 通过:
$sudo sysctl vm.nr_hugepages=512 分配512个预留的大页内存: $ cat /proc/meminfo | grep Huge AnonHugePages: 106496 kBHugePages_Total: 512HugePages_Free: 504HugePages_Rsvd: 27HugePages_Surp: 0Hugepagesize: 2048 kB
然后在php.ini中加入:
opcache.huge_code_pages=1
这样一来, PHP会把自身的text段, 以及内存分配中的huge都采用大内存页来保存, 减少TLB miss, 从而提高性能.
PGO
如果你的PHP是专门为一个项目服务, 比如只是为你的Wordpress, 或者drupal, 或者其他什么, 那么你就可以尝试通过PGO, 来提升PHP, 专门为你的这个项目提高性能.
具体的, 以wordpress 4.1为优化场景.. 首先在编译PHP的时候首先:
$ make prof-gen 然后用你的项目训练PHP, 比如对于Wordpress: $ sapi/cgi/php-cgi -T 100 /home/huixinchen/local/www/htdocs/wordpress/index.php >/dev/null 也就是让php-cgi跑100遍wordpress的首页, 从而生成一些在这个过程中的profile信息.
最后: $ make prof-clean$ make prof-use && make install
这个时候你编译得到的PHP7就是为你的项目量身打造的最高性能的编译版本.
本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
如有侵权请发送邮件至1943759704@qq.com删除
码农资源网 » php.ini高性能的一些配置