乐趣区

关于php:记一次PHP优化案例

网站架构简介:
当初很多的企业都是应用 lnmp 或者 lamp 来做企业的网站服务器架构,这两种网站的服务架构,咱们都是比拟相熟的;基于 nginx 的性能优于 Apache,现阶段的很多公司,都是逐步把 Apache 替换成 nginx,毕竟 nginx 的自带的高可用配置,反向代理等等性能相当突出。

Lnmp 网站服务器架构, 其实就是 linx+nginx+mysql+php 架构体系,架构装置我就不多说了。接下来咱们来谈谈,我遇到案例吧

案例:

有一天,后盾的共事,说后盾拜访很慢,而且有时候呈现 502 谬误。而后反馈给技术下级,接着又找到我解决一下(那时在喝着茶),而后我晓得又有事干了。

剖析:

而后我间接找到那个共事,问问是不是网络起因啊,我也叫其余的共事,拜访一下,还是呈现拜访忙的问题。这时我就晓得事件没那么简略了。公司利用的是 lnmp 网站服务器架构, 以前没有做太多的优化,接下来咱们须要优化网站的服务架构了

一、案例剖析。

咱们能够想到,既然是拜访迟缓,有时候间接拜访不了,以前是没问题的,到当初就忽然呈现了问题,那必然是咱们的 nginx 与 php 响应不过去导致的,起因可能是其余域名网站的用户连接数巨增导致的。那咱们找到问题的本源解决并优化就能够了。接着凭着本人的教训与百度,去解决问题。

二、问题解决与过程剖析

1Nginx优化:

1、查看 nginx的日志,找出谬误

`$` cat `/usr/local/nginx/logs/error.log` | grep `error`

没发现错误,失常

查看后盾域名的 access.logs

$ cat /var/log/access_nging.log | grep error

(这里没及时截到图,日志是被刷了,本地做了日志切割,并定时删除了)

发现日志日志外面能够找到 error 错误信息,并且有十几个 502 谬误。找到呈现的问题了。

2、问题剖析以及 nginx优化

1、nginx 关上文件数限度导致的。

1)、首先咱们想到可能的起因 nginx 的关上文件书的问题,减少 nginx 的关上文件数

进入 nginx 配置文件,发现关上文件数为 4096, 果不其然,关上文件数没有调到最佳,可能是这个起因导致的。咱们须要把 4096 改为 51200;保留从新加载 nginx

vim /usr/local/nginx/conf/nginx.conf

worker_rlimit_nofile 51200;

events {

worker_connections 51200;

}

service nginx relaod

2)、Linux 系统文件限度

咱们改了 nginx 的关上文件配置,不肯定有用,咱们须要看一下零碎的限度的关上文件数

ulimit –n

咱们能够看到零碎的文件关上数量也是 4096,接下来,咱们更改一下零碎的关上文件数,并配置永恒失效。

进入配置文件

vim /etc/security/limits.conf

更改参数:

  • soft nofile 65535
  • hard nofile 65535
  • soft nproc 65535
  • hard nproc 65535

    注:零碎限度能够轻易改,我只有比 nginx 的关上文件数大就好。

3、nginx的 fastcgi连接时间太短导致的。

个别 nginx 响应 php,都是通过 FastCGI 接口来调用,所以 fastcgi 参数配置很重要,当 HTTP 服务器每次遇到动静程序时,能够将其间接交付给 FastCGI 过程来执行,而后将失去的后果返回给浏览器,而很多 php 的网页都是采纳动静程序。所以 fastcgi 的配置,也起的至关重要的作用。所以这是一个优化不可短少的一部分。

进入 nginx.conf 配置文件

vim /usr/local/nginx/conf/nginx.conf

把 fastcgi 的 connect、send、read 的参数的工夫改成 300,配置如下:

从新加载 nginx

service nginx reload

4、拜访域名测试。

从新拜访域名,发现网页曾经加载进去了,继续拜访了几次,发现拜访还是有点慢,尽管拜访稳固了。到这里,咱们就能够把问题指向到 php 外面了,持续下一步的 php 优化。

2、Php 优化:

1、查看 php 日志

首先,咱们须要跟 nginx 的操作一样,须要先查看一下日志。

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 呈现告警了,而且是叫咱们减少 php 的,pm.start_servers, or pm.min/max_spare_servers 的值。

2、起因剖析

首先咱们,看到日志只是呈现这个正告,证实还不是很重大,至于为什么呈现源码交易这个正告,接下来咱们一起剖析一下。

首先咱们很明确的晓得,pm.start_servers,、pm.min/max_spare_servers 在 php 外面是起着啥作用先,为什么会呈现这个正告。我先把的以前的配置参数贴一下。

接下来咱们剖析一下这几个参数的作用:

参数剖析:

· pm= dynamic 示意 php 启用的动静模式 注:php 有动静和动态 (static) 两种工作模式,默认是动静模式。

· pm.max_children 示意动态下最大线程数

· pm.start_servers 示意动静下启动时的线程数,该参数大于 pm.min_spare_servers,小于 pm.max_spare_servers

· pm.min_spare_servers 示意动静下最小闲暇线程数

· pm.max_spare_servers 示意动静下最大闲暇线程数

工作模式:

Static模式

当工作模式设置为动态后,就只有 pm.max_children 项无效,即示意 php-fpm 工作时始终放弃的线程数。

Dynamic 模式

动静模式下,与他相干的参数有 pm.start_servers、pm.min_spare_servers、pm.max_spare_servers,别离示意开启的 php 过程数,最小的过程数、与最大的过程数。

模式比拟:

动态模式的话,比拟适宜一些内存比拟大一点的服务器,8G 及以上的,因为对于比拟大内存的服务器来说,设置为动态的话会提高效率。

动静模式适宜小内存机器,灵便调配过程,省内存。能够让 php 主动减少和缩小过程数,不过动态创建回收过程对服务器也是一种耗费。

3、php 参数优化

首先咱们须要考虑一下问题,如何去调试参数,达到优化的目标呢,一般来说开始的时候一个 php-fpm 过程只占用 3M 左右内存,然而运行一段时间后就会回升到 20-40M,这是因为 PHP 程序在执行实现后,或多或少会产生内存的泄露。

所以按理来说 php 的最大的过程数,大略是本地内存 /40,因为也要思考零碎占用内存的的这种状况,咱们不能间接把除解决的后果,当成的最大过程数,不然你会死翘翘的。

我的服务器是 8G 内存的,所以按理来说是,最大的 php 过程数是 200 左右,所以按这个参数我做了一下调整:

采纳动态模式,最大过程数设为 125-150 之间,搞定。

从新加载 php

service php-fpm relod

查看过程数:

netstat -anpo | grep php-fpm | wc -l

`128`

成果达到了

4、后果

从新拜访,发现拜访 php 页面快了很多,查看日志,没呈现告警了,后盾拜访也好了。

3、压测

一个网站的性能好不好,接受量有多高,这个咱们能够通过压测去,去获取数据,我这里简略介绍 ab 工具来做压测,用法如下

ab -n 1000000   -c 10000 (一个 php 文件)

- n 参数示意 你压力测试 总量

- c 参数示意 你的模仿的并发用户数

Ab 压力测试工具,是 apache 自带的,用起来也不便,只有本地有,就能够近程测你的服务器的性能了。集体感觉还是能够了,上面是模仿一千个用户拜访 100000 次的后果,但然你本人压测的时候,缓缓的晋升参数,测试你的网站的瓶颈。

退出移动版