前言: 乘着这次空闲, 来记录下关于 PHP 和 PHP-FPM 配置文件的优化, 也方便以后自己复习.
先说 PHP 的
1,PHP 脚本执行时间
max_execution_time = 30
该选项设定 PHP 程序的最大执行时间, 如果一个 PHP 脚本被请求, 且该 PHP 脚本在 max_execution_time 时间内没能执行完毕, 则 PHP 不再继续执行, 直接给客户端返回超时错误. 没有特殊需要该选项可保持默认设置 30 秒, 如果您的 PHP 脚本确实需要长执行时间则可以适当增大该时间设置.
2,PHP 脚本处理内存占用
memory_limit = 8M
该选项指定 PHP 脚本处理所能占用的最大内存, 默认为 8MB, 如果您的服务器内存为 1GB 以上, 则该选项可以设置为 12MB 以获得更快的 PHP 脚本处理效率.
3,PHP 上传文件大小限制
- upload_max_filesize = 2M
- max_file_uploads = 3
该选项设定 PHP 所能允许最大上传文件大小, 默认为 2MB. 根据实际应用需求, 可以适当增大该设置, max_file_uploads 表示单次请求最多只能上传 3 个文件
4, 会话处理
- session.save_handler = 'memcached' // 存放方式
- session.save_path = '127.0.0.1:11211' // 存放路径
该选项用于配置会话的存储方式和存放路径, 默认是 file 文件方式, 默认方式会拖慢大型应用, 因为这个处理程序会把会话数据存储在硬盘中, 需要创建不必要的磁盘 I/O, 浪费时间.
以上就是一些常见的优化和配置了
再说下 PHP-FPM 的
说之前, 我们先了解下什么是 PHP-FPM.PHP-FPM(FastCGI Process Manager:FastCGI 进程管理器)是一个 https://baike.baidu.com/item/PHP - https://baike.baidu.com/item/FastCGI 管理器. 那么 PHP-FastCGI 又是什么呢?
FastCGI 是一个可伸缩地, 高速地在 HTTP 服务器和动态脚本语言间通信的接口(FastCGI 接口在 Linux 下是 socket(可以是文件 socket, 也可以是 ip socket)), 主要优点是把动态语言和 HTTP 服务器分离开来. 多数流行的 HTTP 服务器都支持 FastCGI, 包括 Apache,Nginx 和 lightpd.
好了, 这 2 个大概是了解了, 下面说下 PHP-FPM 的配置
1, 进程数
- pm = static // 使用方式; 还有一个 dynamic(动态)
- pm.max_children = 300 // 静态方式下开启的 php-fpm 进程数量
- pm.start_servers = 20 // 动态方式下的起始 php-fpm 进程数量
- pm.min_spare_servers = 5 // 动态方式下的最小 php-fpm 进程数
- pm.max_spare_servers = 30 // 动态方式下的最大 php-fpm 进程数量
关于选择静态还是动态
对于内存大的服务器 (比如 8G 以上) 来说, 指定静态的 max_children 实际上更为妥当, 因为这样不需要进行额外的进程数目控制, 会提高效率.
对于小内存的服务器来说, 比如 256M 内存的 VPS, 选择动态比较好, 因为动态方式会结束掉多余的进程, 可以回收释放一些内存, 所以推荐在内存较少的服务器或 VPS 上使用. 具体最大数量根据 内存 / 20M 得到.
2, 最大处理请求数
pm.max_requests = 10240
最大处理请求数是指一个 php-fpm 的 worker 进程在处理多少个请求后就终止掉, master 进程会重新 respawn 一个新的.
这个配置的主要目的是避免 php 解释器或程序引用的第三方库造成的内存泄露.
3, 最长执行时间
request_terminate_timeout = 30
最大执行时间在 php.ini 和 php-fpm.conf 里都可以配置, 配置项分别为 max_execution_time 和 request_terminate_timeout.
这两项都是用来配置一个 PHP 脚本的最大执行时间的. 当超过这个时间时, PHP-FPM 不只会终止脚本的执行,
还会终止执行脚本的 Worker 进程. 所以 Nginx 会发现与自己通信的连接断掉了, 就会返回给客户端 502 错误.
其作用及其影响参见: Nginx 中 502 和 504 错误详解 http://blog.csdn.net/dc_726/article/details/11950189
以上就是 PHP-FPM 配置文件的一些参数优化了
既然说到了 PHP-FPM 了, 那就简单介绍下 php-fpm 的高 CPU 使用率排查方法
1,CPU 使用率监控方法
1)top 命令
直接执行 top 命令后, 输入 1 就可以看到各个核心的 CPU 使用率.
2, 开启慢日志
- request_slowlog_timeout = 2
- slowlog = log/$pool.log.slow
配置输出 php-fpm 慢日志, 阀值为 2 秒
利用 sort/uniq 命令分析汇总 php-fpm 慢日志:
- [root@b28-12 log]# grep -v "^$" www.log.slow.tmp | cut -d " " -f 3,2 | sort | uniq -c | sort -k1,1nr | head -n 50
- 5181 run() /www/test.net/framework/web/filters/CFilter.php:41
- 5156 filter() /www/test.net/framework/web/filters/CFilterChain.php:131
- 2670 = /www/test.net/index.php
- 2636 run() /www/test.net/application/controllers/survey/index.php:665
- 2630 action() /www/test.net/application/controllers/survey/index.php:18
- 2625 run() /www/test.net/framework/web/actions/CAction.php:75
- 2605 runWithParams() /www/test.net/framework/web/CController.php:309
- 2604 runAction() /www/test.net/framework/web/filters/CFilterChain.php:134
- 2538 run() /www/test.net/framework/web/CController.php:292
- 2484 runActionWithFilters() /www/test.net/framework/web/CController.php:266
- 2251 run() /www/test.net/framework/web/CWebApplication.php:276
- 1799 translate() /www/test.net/application/libraries/Limesurvey_lang.php:118
- 1786 load_tables() /www/test.net/application/third_party/php-gettext/gettext.php:254
- 1447 runController() /www/test.net/framework/web/CWebApplication.php:135
参数解释:
sort: 对单词进行排序
uniq -c: 显示唯一的行, 并在每行行首加上本行在文件中出现的次数
sort -k1,1nr: 按照第一个字段, 数值排序, 且为逆序
head -10: 取前 10 行数据
好了, 以上就是 PHP 和 PHP-FPM 配置的一些参数优化调整了.
来源: https://www.cnblogs.com/chenhaoyu/p/9515716.html