PHP优化
# 1.php-fpm参数调整
参数计算公式:
pm.start_servers=min_spare_servers + (max_spare_servers - min_spare_servers) / 2
1
修改配置文件:
vim php-fpm.conf
pm = dynamic #进程管理方式:static或dynamic 静态或动态方式
pm.max_children = 1024 #子进程的最大数量
pm.start_servers = 16 #php-fpm启动是创建的子进程数量
pm.min_spare_servers = 5 #空闲时最少启动的子进程数
pm.max_spare_servers = 20 #空闲时最大启动的子进程数
pm.process_idle_timeout = 15s #当pm=ondemand时才生效
pm.max_requests = 2048 #每个子进程处理的最大请求
slowlog = 日志位置
request_slowlog_timeout = 10
rlimit_files = 8196 #根据实际业务情况调整
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
静态方式static:php-fpm启动时就创建指定数目的进程,只有pm.max_children这个参数生效
动态方式dynamic:动态调整进程数量,当然并不是无限制的创建新进程,受pm.max_spare_servers参数影响,pm.max_children参数失效,后面3个参数生效;
动态适合小内存机器,灵活分配进程,省内存,动态创建回收进程对服务器资源也是一种消耗
静态适用于大内存机器(8G以上)
# 2.php.ini参数调整
vim php.ini
expose_php = Off 关闭php版本信息在http头中的泄露
register_globals = Off 关闭注册全局变量(高版本php.ini无此参数)
magic_quotes_gpc = On 打开以防止sql注入(高版本php.ini无此参数)
display_errors = Off 关闭错误日志输出(重要)
error_reporting = E_ALL 错误日志级别
log_errors = On
log_errors_max_len = 1024
error_log=日志路径
max_exection_time = 30 每个脚本运行的最长时间
memory_limit = 128M 每个脚本使用的最大内存
max_input_time = 60 每个脚本等待输入数据最长事件
upload_max_filesize = 2M 最大上传文件
memcache做session共享时调整以下参数:
session.save_handler = files 调整php session信息存放类型及位置
session.save_path = session存放路径
如果将session存放到memcache下,则需改成如下:
session.save_handler = memcache
session.save_path = "tcp://memcache地址:11211"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
PHP日志级别:
- ; E_ALL 所有错误和警告(除E_STRICT外)
- ; E_ERROR 致命的错误。脚本的执行被暂停。
- ; E_RECOVERABLE_ERROR 大多数的致命错误。
- ; E_WARNING 非致命的运行时错误,只是警告,脚本的执行不会停止。
- ; E_PARSE 编译时解析错误,解析错误应该只由分析器生成。
- ; E_NOTICE 脚本运行时产生的提醒(往往是我们写的脚本里面的一些bug,比如某个变量没有定义),这个错误不会导致任务中断。
- ; E_STRICT 脚本运行时产生的提醒信息,会包含一些php抛出的让我们要如何修改的建议信息。
- ; E_CORE_ERROR 在php启动后发生的致命性错误
- ; E_CORE_WARNING 在php启动后发生的非致命性错误,也就是警告信息
- ; E_COMPILE_ERROR php编译时产生的致命性错误
- ; E_COMPILE_WARNING php编译时产生的警告信息
- ; E_USER_ERROR 用户生成的错误
- ; E_USER_WARNING 用户生成的警告
- ; E_USER_NOTICE 用户生成的提醒
# 3.fastcgi调优
配合php-fpm,nginx配置文件:
vim nginx.conf
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m; 缓存目录位置、目录结构等级、关键字区域实际和非活动时间
fastcgi_connection_timeout 300; 指定连接到后端fastcgi的超时时间
fastcgi_send_timeout 300; 向fastcgi传送请求的超时时间
fastcgi_read_timeout 300; 接受fastcgi应答请求的超时时间
fastcgi_buffer_size 64k; 读取内容是临时存放至buffer
fastcgi_buffers 4 64k; 总共使用多大的buffer作为缓冲使用
fastcgi_busy_buffers_size 128k; 默认值是 fastcgi_buffer的2倍
fastcgi_temp_file_write_size 128k; 写入缓存文件使用多大的数据块,默认值是fastcgi_buffer的2倍
fastcgi_cache TEST; 开启fastcgi缓存并指定为TEST名称,降低cpu负载,防止502错误发生.
// 设置应答代码缓存时间,200和302应答缓存为1个小时,301一天, 其他1分钟
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 4. 使用tmpfs(虚拟内存)加速缓存目录
把tmpfs文件系统挂载到/tmp缓存目录下,例:
mount tmpfs /tmp -t tmpfs -o size=10M
1
# 5.使用缓存加速软件
xcache,eaccelerator,apc
推荐使用xcache;
# 6.PHP的并发量计算及监控脚本
最大并发量计算:
查看php加载的模块,尽量少安装PHP模块,最简单是最好(快)的:
php -m
1
查看执行一个php连接使用的内存:
pmap $(pgrep php-fpm | head -1)
1
根据服务器内存(去除系统及其他服务所用内存),计算php的最大并发 总内存/一个php连接所耗内存。
监控脚本
监控一个php进程所占用的内存,如果超过1%就kill掉:
#!/bin/sh
PIDS=`ps aux|grep php-cgi|grep -v grep|awk’{if($4>=1)print $2}’`
for PID in $PIDS
do
echo `date +%F….%T`>>/data/logs/phpkill.log
echo $PID >> /data/logs/phpkill.log
kill -9 $PID
done
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
检测php-fpm进程是否存活:
#!/bin/bash
netstat -tnlp | grep “php-cgi” >> /dev/null #2&> /data/logs/php_fasle.log
if [ "$?" -eq "1" ];then
# [ `netstat -tnlp | grep 9000 | awk '{ print $4}' | awk -F ":" '{print $2}'` -eq "1" ];then
/usr/local/webserver/php/sbin/php-fpm start
echo `date +%F….%T` “System memory OOM.Kill php-cgi. php-fpm service start. ” >> /data/logs/php_monitor.log
fi
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
通过http检测php是否执行:
#!/bin/bash
status=`curl -s –head “http://127.0.0.1:8080/chk.php” | awk ‘/HTTP/ {print $2}’`
if [ $status != "200" -a $status != "304" ]; then
/usr/local/webserver/php/sbin/php-fpm restart
echo `date +%F….%T` “php-fpm service restart” >> /data/logs/php_monitor.log
fi
1
2
3
4
5
6
2
3
4
5
6
上次更新: 2022/06/12, 15:48:09