运维八一 运维八一
首页
运维杂记
编程浅尝
周积跬步
专栏
生活
关于
收藏
  • 分类
  • 标签
  • 归档
Source (opens new window)

运维八一

运维,运维!
首页
运维杂记
编程浅尝
周积跬步
专栏
生活
关于
收藏
  • 分类
  • 标签
  • 归档
Source (opens new window)
  • 操作系统

  • 域名解析

  • 公有云

  • CI&CD

  • 数据库

  • 负载均衡&反向代理

  • 存储系统

  • 容器&容器编排

  • 批量管理

  • 邮件系统

  • 监控系统

  • Web服务

    • HTTP介绍
    • nginx进阶
    • nginx优化
    • nginx容器化部署
    • Nginx反向代理问题
    • nginx日志切割脚本
    • nginx log各种过滤分析
    • nginx安全问题处理
    • Nginx location Rewrite参数
    • 查看apache、nginx、mysql、php编译参数
    • Tomcat优化
    • centos下tomcat启动很慢
    • tomcat升级
    • PHP优化
    • apache+tomcat负载均衡
    • apache部署
    • apache限制地址和用户访问
    • httpd虚拟主机
    • apache配置文件参数详解
    • apache优化
    • nginx&apache&lighttpd介绍
    • Lighttpd优化
    • web程序性能动态追踪简明手册
  • 虚拟化

  • 防火墙

  • 压测

  • 文件同步

  • 私有云

  • 日志系统

  • 代码仓库&版本管理

  • 安全审计

  • 远程拨号

  • 大数据

  • 统一认证

  • 消息队列

  • Apollo

  • 运维杂记
  • Web服务
lyndon
2022-06-10

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

静态方式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

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

# 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

检测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

通过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
上次更新: 2022/06/12, 15:48:09
tomcat升级
apache+tomcat负载均衡

← tomcat升级 apache+tomcat负载均衡→

最近更新
01
ctr和crictl显示镜像不一致
03-13
02
alpine镜像集成常用数据库客户端
03-13
03
create-cluster
02-26
更多文章>
Theme by Vdoing | Copyright © 2015-2024 op81.com
苏ICP备18041258号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式