php 线上优化,php优化

[TOC]

# php7和php5兼容性检查

截止目前基本上绝大多数的PHP都可以完美的支持PHP7.0了。但是可能你恰好有一些历史遗留的脚本和程序,那么也好办,社区已经有好多的工具做兼容性检查,甚至给出直接的代码转译,以下是几个值得推荐的工具:

php7cc:一个很不错的工具,不过目前已经不再更新了。(github地址: /sstalle/php7cc)

php7mar:PHP 7迁移助手。 (github地址:/Alexia/php7mar)

使用方法:

~~~

php mar.php -f="/path/to/project/root/" -r="/path/to/output/"

~~~

phan:PHP脚本的静态分析器。 可以做当做php 7的语法检查器。(github地址:/phan/phan)

`phan --project-root-directory --progress-bar -o phan.out`

phpstan - PHP静态分析和兼容性检查工具。(github地址:/phpstan/phpstan)

# php7性能设置要点

## Opcache

首先,确保已经启用了OpCache。可以通过主配置文件php.ini或它独特的配置文件opcache.ini文件(例如/etc/php/7.2/fpm/conf.d/10-opcache.ini)。来进行设置。

~~~

zend_extension=opcache.so

opcache.enable=1

opcache.enable_cli=1

~~~

## 设置合适的realpath_cache_size

通过设置合宜的realpath_cache_size值可以改善你服务器的并发:

~~~

realpath_cache_size = 256k

realpath_cache_ttl = 300

~~~

equire,require_once,include,include_once这四个语句(并非函数)大家经常会用到,如果用这类语句去包含文件(相对路径)的话,那么PHP会去include_path所 指定的路径中去查找相关文件。一个应用中会存在大量的require_once语句调用,如果每次调用都去include_path中查找相应的文件,势 必会对应用的性能产生负面影响。为了避免这种负面效应产生的影响,PHPER们会使用文件的绝对路径来包含所需的文件,这样就减少了查询 include_path的次数。

其实,PHP自5.1.0起,就引入了RealpathCache。RealpathCache可以把PHP所用到文件的realpath进行缓存,以便PHP再使用这些文件的时候不需要再去include_path中查找,加快PHP的执行速度。

其中realpath_cache_size指定了realpath cache的大小,默认为16k,如果你觉得这个容量太小,可以适当增加;realpath_cache_ttl指定了缓存的过期时间,默认为120秒, 对于不经常修改的生产环境来说,这个数字可以调整的更大些。

由于realpath会 展开symlink(即软连接),所以如果你使用修改symlink目标这种方式发布应用的新版本的话,realpath cache会导致一些问题的出现:当你修改symlink使其指向一个新的release目录时候,由于realpath cache所缓存内容还没有过期,于是就会出现应用使用的还是旧的release,直到realpath cache所缓存内容过期失效为止(默认120秒),或者重启php-fpm。

## 禁止mysqlnd.collect_statistics

~~~

mysqlnd.collect_statistics = Off

mysqlnd.collect_memory_statistics = Off

~~~

线上服务器选择禁止这两个选项,可以减少不必要的数据库访问。如果需要相关统计,可以使用MySQL工具或者监控。

是否启用mysql内存访问统计,可以通过下列函数获取信息mysqli_get_client_stats(), mysqli_get_connection_stats(), mysqli_get_cache_stats()

生产环境为关闭

开发环境为打开

## 使用新的编译器

GCC 4.8编译器下编译时PHP才能开启Global Register for opline and execute_data支持, 这个会带来5%左右的性能提升。

## 开启Transparent HugePage (透传大页)

内存默认是以4KB分页的,而虚拟地址和内存地址需要转换,转化时候需要进行搜索,为了加速转换过程,可以通过内存TLB(Translation Lookaside Buffer)来。所以通过启用大内存页可以增加TLB 缓存命中,从而提高性能。

设置系统支持:

~~~

sysctl vm.nr_hugepages=512

~~~

php.ini 增加支持

~~~

opcache.huge_code_pages=1

~~~

关于这个值,很多实践后发现启用透传大页面后会带来系统负载过高,cpu占用过高问题,这时候通过关闭就可以解决。所以这个参数需要实际情况斟酌测试使用。

## 开启PGO

PHP是专门为一个项目服务,比如一个 Wordpress或者drupal站点,就可以使用PGO提高性能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值