php.ini高性能的一些配置 - 技术分享网
  • 网站首页
  • IT技术笔记
    • PHP开发
    • SEO优化
    • 常用工具
  • 网站模板源码
    • 小程序源码
    • 网站源码
  • 共享网络资源
  • 更多功能
    • 留言吐槽
    • 文章归档
    • 我的邻居
    • 视频解析
    • 高清壁纸
    • 公告动态
    • 广告合作
    • 关于我们


  • 个人中心
  •  我的主页
  •  我要投稿
  •  会员服务
  •  修改资料
  •  退出登录
导航菜单
  • 网站首页
  • IT技术笔记
    • PHP开发
    • SEO优化
    • 常用工具
  • 网站模板源码
    • 小程序源码
    • 网站源码
  • 共享网络资源
  • 更多功能
    • 留言吐槽
    • 文章归档
    • 我的邻居
    • 视频解析
    • 高清壁纸
    • 公告动态
    • 广告合作
    • 关于我们
PHPPHP教程

php.ini高性能的一些配置

2023/3/6 韩俊  PHP开发 87 0

内存

默认设置
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 kB HugePages_Total: 512 HugePages_Free: 504 HugePages_Rsvd: 27 HugePages_Surp: 0 Hugepagesize: 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就是为你的项目量身打造的最高性能的编译版本.

点赞:0 分享 海报 收藏

上一篇
CSS选取第一个、最后一个、偶数、奇数、第n个标签元素
下一篇
javascript逻辑运算符“||”和“&&”
作者头像 作者名称 作者性别
韩俊
联系作者 作者主页

热门推荐

1 echo、print和print_r函数区别
2 精选常见go语言面试题及答案解析
3 什么是跨域?如何解决跨域问题?
4 php里说出array数组的常用函数及用法?
5 javascript逻辑运算符“||”和“&&”
6 css内联样式、外联样式与嵌套样式区别

评论列表

取消回复

    •  
      Login

      韩俊

      趁你现在还有时间,尽你自己最大的努力,努力做成你最想做的那件事,成为你最想成为的那种人,过着你最想过的那种生活。这个世界永远比你想的要更精彩,不要败给生活。

      站长 主页
      用户中心
      评论管理
      退出登陆
      • 714文章
      • 448评论
      • 73微语
  • 广告赞助

  • 二零二三年03月
    一二三四五六日
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
  • 分类

    • 网站模板源码
    • IT技术笔记
    • 好资源分享
    • 共享网络资源
  • 最新文章

      • php中构造函数与析构函数详解
        • PHP empty() isset() is_null() 区别与性能比较
          • php中define()与const的区别详解
            • 移动端万能追剧软件 免费分享下载
              • substr(),mb_substr()及mb_strcut函数用法与区别
                • php中http_build_query函数用法详解
                  • 万能追剧软件 体验激活码免费领取
                    • php file_get_contents与curl()函数对比
  • 热门文章

    • 酷狗音乐VIP账号 酷狗音乐会员账号共享2017.01.29更新
    • 芒果tv vip会员账号 芒果tv会员账号共享2017.01.29更新
    • 爱奇艺vip账号 爱奇艺/PPS会员账号共享2016.12.12更新
    • 优酷/土豆vip会员账号 优酷会员账号共享2017.01.29更新
    • 活动:免费获得爱奇艺VIP/PPS会员账号50天以上的使用权!
    • 酷我音乐VIP账号 酷我音乐会员账号共享2016.12.31更新
    • 暴风影音会员账号 暴风影音会员账号共享2016.12.31更新
    • m1905会员账号 m1905会员账号共享2016.10.21更新
  • 最新评论

    • https://www.vipshare8.com/content/uploadfile/202103/thum-490d1614564497.png

      回复了好奥v:如果没有解析成功,可以切换接口...

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=131241242441

      现在视频解析网站怎么用不了啦?

    • https://www.vipshare8.com/content/uploadfile/202103/thum-490d1614564497.png

      回复了全力以赴:已发送

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=471420954

      感谢大佬!麻烦您啦! 模板地址:htt...

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=czq8825

      老青这里没做完也就算了,上凳子之后剧情搞...

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=qleez

      感谢大佬!麻烦您啦! 模板地址:htt...

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=1184503826

      回复了韩俊:万分感谢!!!

    • https://www.vipshare8.com/content/uploadfile/202103/thum-490d1614564497.png

      回复了Moen:已发送

    • https://www.vipshare8.com/content/uploadfile/202103/thum-490d1614564497.png

      回复了慕子訓Chester:已发送

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=670578767

      感谢大佬!麻烦您啦! 模板地址:htt...

  • 网站统计 I 当前在线:877人

    • 本站管理:1位
    • 用户总数:577位
    • 置顶文章:2篇
    • 日志总数:714篇
    • 微语总数:73条
    • 评论总数:448条
    • 标签总数:78条
    • 页面总数:8页
    • 分类总数:11个
    • 链接总数:47条
    • 运行天数:2886天
    • 最后更新:3月22日
    • 登录
    • 注册
    • 找回
    Copyright © 2023技术分享网网站地图 豫ICP备19004194号-1

    免责声明:本站资源仅供用于学习和交流,本站部分素材内容来源于网络,如有侵权/投稿等,请及时联系站长.

    • 首页
    • 搜索
    • 用户

    大家都在搜

    • 好省
    • 全民娱乐
    • 酷狗会员账号共享
    • 搜狐视频会员账号
    • 2345网址导航
    • 华数tv会员账号
    • 起点账号共享
    • 腾讯VIP账号共享
    • 威客平台
    • 芒果tv会员
    • 百度文库下载
    • 掌阅会员账号
    • 哔哩哔哩vip会员账号
    • PHP
    • 经验分享
    • 网易云音乐会员
    • 
    • 