Nginx与PHP优化实例

前言

目前大部分企业都是使用LNMP或者LAMP来做企业的网站服务器架构,这两种网站的服务架构,我们都是比较熟悉的服务架构,其实不管是什么服务架构,Nginx的优点都是比较明显的,基于nginx的性能要优于Apache,现阶段的很多公司,都是逐渐把Apache替换成了nginx,毕竟nginx的自带的高可用配置、反向代理、负载均衡等等功能相当突出。而其中很多服务都是需要优化的,本次来谈谈PHP的优化方案。

问题描述:有时候,我们会遇到后台服务访问非常慢,甚至出现502、504的错误状态码。其实第一想到的是网络延迟问题,其次就是网站服务架构的未做相关优化而导致的问题。如果不是网络延迟原因的话,那基本上就是服务器优化方面的问题。下面介绍Nginx与PHP一些比较常见的优化思路。

一、Nginx优化

1.1 查看日志

(1)查看Nginx的错误日志

看看是否有错误信息。

[root@zrs ~]# cat /usr/local/nginx/logs/error.log | grep error

(2)查看Nginx的访问日志

[root@zrs logs]# cat /usr/local/nginx/logs/access.log | grep error

如果错误日志没问题,那么在后台域名访问日志中可能就会报错。如果是在后台域名访问日志中出现错误,那么可以从以下几个方面来优化Nginx服务。

1.2 查看文件最大打开数

(1) Nginx打开文件数限制所导致

Nginx未做优化前的文件最大打开数。

在这里插入图片描述

思路: 增加Nginx的打开文件数(在配置文件nginx.conf中修改)

[root@zrs ~]# vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述

(2) Linux系统文件限制

改了nginx的打开文件配置,不一定有用,我们需要看一下系统的限制的打开文件数。

[root@zrs conf]# ulimit -n
1024

可以看到Linux系统文件打开数也被限制, 接下来,我们更改一下系统的打开文件数,并配置永久生效。

[root@zrs conf]# vim /etc/security/limits.conf

# 修改如下。系统限制可以随便改,我只要比nginx的打开文件数大就好。
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535

1.3 Nginx的FastCGI连接时间太短

一般Nginx响应php,都是通过FastCGI接口来调用,所以FastCGI参数配置很重要,当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器,而很多php的网页都是采用动态程序。所以FastCGI的配置,也起的至关重要的作用,因此这是一个优化不可缺少的一部分。

进入 nginx.conf 配置文件。

[root@zrs ~]# vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述

到此Nginx基本优化已经完成,这时可重新访问一下URL,虽然可以稳定加载页面,不过访问还是有些缓慢。接下来就该优化我们的PHP了。

二、PHP优化

2.1 查看PHP日志

同样,我们也是需要查看一下PHP的日志文件。

[root@zrs ~]# tail -n 100 /usr/local/php/var/log/php-fpm.log

在PHP日志里可能会出现各种警告,这时可根据告警提示去解决问题。比如说出现类似这种警告:

WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers)

出现上述警告如何处理?接下来看一下PHP的几个参数。

参数功能
pm=dynamic表示php启用的动态模式。
pm.max_children表示静态下最大线程数。
pm.start_servers表示动态下启动时的线程数(该参数大于pm.min_spare_servers,小于pm.max_spare_servers)。
pm.min_spare_servers表示动态下最小空闲线程数。
pm.max_spare_servers表示动态下最大空闲线程数。

php有动态(Dynamic)和静态(Static)两种工作模式,默认是动态模式。

  • 静态模式(Static)
    当工作模式设置为静态后,就只有pm.max_children项有效,即表示php-fpm工作时一直保持的线程数。
  • 动态模式(Dynamic)
    动态模式下,与他相关的参数有pm.start_servers、pm.min_spare_servers 、pm.max_spare_servers,分别表示开启的php进程数,最小的进程数、与最大的进程数。

两种工作模式比较

  • 静态模式(Static)
    静态模式比较适合一些内存比较大一点的服务器(8G及以上的),因为对于比较大内存的服务器来说,设置为静态的话会提高效率。
  • 动态模式(Dynamic)
    动态模式比较适合小内存机器,灵活分配进程,省内存。可以让php自动增加和减少进程数,不过动态创建回收进程对服务器也是一种消耗。

2.2 PHP参数优化

(1)设置php-fpm最大进程数

[root@zrs ~]# vim /etc/php-fpm.conf
[global]
...
; 动态方式下开启的php-fpm进程的最大数量
process.max = 2048
; 设置 fpm 在后台运行
daemonize = yes
; 设置进程可以打开的文件描述符数量
rlimit_files = 65535
; 设置FPM 的事件处理机制
events.mechanism = epoll
; 加载pool 配置
include = /etc/fpm.d/*.conf

(2)设置进程池

[root@zrs ~]# vim /etc/php-fpm.d/www.conf
[www]
...
; 设置动态dynamic进程池/静态static进程池
pm = dynamic
; 设置每个进程可处理的请求数,当进程达到这个请求数量后会自动释放在重新生成新的进程。避免内存泄漏等情况
pm.max_requests = 1500
; 终止请求超时时间。一个请求若处理大于20s ,则会自动kill掉。避免进程堆积
request_terminate_timeout = 20
; 限制 FPM 允许解析的脚本扩展名. 这里不限制,FPM可以解析任何扩展名的文件
security.limit_extensions = ""

(3)修改php上传文件的大小

[root@zrs ~]# vim /etc/php.ini
max_execution_time = 0 #默认的该脚本最久执行时间为30秒.就是说超过30秒,该脚本就停止执行,0为不限制时间
post_max_size = 150M   #默认POST数据大小为8M,可以按实际情况修改
upload_max_filesize = 100M #默认上传文件最大为2M,可以按实际情况修改。
#注:另外要说明的是,post_max_size 大于 upload_max_filesize 为佳

一般来说开始的时候一个php-fpm进程只占用3M左右内存,但是运行一段时间后就会上升到20-40M,所以php的最大的进程数大概是本地内存1/40,当然也 要考虑系统占用内存的这种情况,故不能直接把除处理的结果,当成的最大进程数。

比如服务器是8G内存的,所以按理来说是,最大的php进程数是200左右。此时可采用静态模式,最大进程数pm.max_children设为125-150之间,再重新加载一下PHP。最后使用netstat查看一下进程数:

[root@zrs ~]# netstat -anpo | grep php-fpm | wc -l

总结

  • 工作中出现的问题得根据报错的实际情况去解决,但最基本的服务器优化得提前做好,否则后期会很麻烦;
  • 从上述案例不难看出日志在排错中的重要性,基本上我们都可以通过日志文件内容信息解决出现的各种问题;
  • 知识是永远学不完的,需要不断努力、多交流,学会借鉴别人解决问题的方法和经验。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云计算-Security

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值