关于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次的后果,但然你本人压测的时候,缓缓的晋升参数,测试你的网站的瓶颈。

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据