刚重启完 php 服务,网站却慢得像蜗牛?点个页面要等 5 秒,用户全跑了,自己急得直冒汗?小编前阵子帮客户维护网站,就遇到过这情况,重启 php 后反而更卡,后来才发现是系统配置没调好。今天就说说不同系统下,php 重启后卡顿该咋解决,还有能提速的小技巧,新手也能看懂,一起往下看吧!
Linux 系统:这两个命令,先查问题再解决
Linux 是最常用的服务器系统,php 重启后卡顿,多半是进程或内存出了问题,一步一步来:
先查原因:到底卡在哪?
- 输
top
命令,看 php-fpm 的 CPU 和内存占用,要是超过 80%,就是进程太多或内存不够; - 再输
netstat -an | grep 9000
(9000 是 php 默认端口),看连接数是不是超过了设置的上限,太多连接会堵死。
小编上次查客户的服务器,php-fpm 进程跑到 100%,明显是进程数设少了,调大后立马不卡了。
解决方法:调进程数和内存
- 找到 php-fpm 的配置文件(一般在
/etc/php-fpm.d/www.conf
); - 改这两个参数:
pm.max_children = 20
(最多能启动 20 个进程,根据服务器内存调,1G 内存建议设 10-15);pm.start_servers = 5
(启动时先开 5 个进程,别一上来就开满);
- 改完重启 php-fpm:
sudo systemctl restart php-fpm
,试试网站是不是快了。
客户的服务器原来max_children
设成 5,用户一多就卡,改成 15 后,同时 100 人访问也顺顺当当。
Windows 系统:图形界面调设置,不用记命令
Windows 服务器用 php 的少,但卡起来更让人懵,其实调这两处就行:
- 打开 “服务”,找到 “PHP FastCGI Process Manager”,右键 “属性”;
- 点 “登录”,选 “本地系统账户”,勾 “允许服务与桌面交互”,之前客户的服务用了普通账户,权限不够导致卡顿;
- 再找 php 安装目录下的
php.ini
,改memory_limit = 128M
为256M
(内存够的话),保存后重启服务。
小编办公室的 Windows 服务器,就这么改的,重启 php 后,网站加载从 4 秒降到 1.5 秒,效果挺明显。
系统 | 卡顿常见原因 | 解决步骤 | 提速关键点 |
---|---|---|---|
Linux | 进程数太少、内存不够 | 调 www.conf 里的 max_children、重启 php-fpm | 进程数设成内存 G 数 ×2 |
Windows | 服务权限不够、内存限制低 | 改服务登录账户、调 php.ini 的 memory_limit | 内存限制至少 128M |
宝塔面板 | 缓存没开、进程池配置低 | 开 OPcache、调进程池最大连接数 | 缓存开关一定要打开 |
性能优化:这 3 个技巧,能让网站快 30%
光解决卡顿还不够,优化一下,网站能跑得更欢,小编亲测有效的方法:
开 OPcache 缓存,让 php 少干活
- 找到 php.ini,搜索
opcache.enable = Off
,改成On
; - 再改
opcache.memory_consumption = 64
为128
,保存后重启 php; - 效果:php 不用每次都解析代码,直接用缓存,小编的博客加了这个,页面加载快了一半。
不过有个小问题,改了代码后得手动清缓存(宝塔面板里有 “清空 OPcache” 按钮),不然看不到新内容,我第一次就因为这白改了代码。
调进程池:别让 php “累着”
- Linux 里,
pm = dynamic
(动态进程)比pm = static
(固定进程)更省资源,新手选动态; - 进程数别太多,1 核 CPU 最多设 10 个,多了会抢资源,小编的 2 核服务器设 15 个,刚好不卡。
加个缓存工具:Redis 帮 php 减负
- 装个 Redis(宝塔面板里一键安装就行),让它存会话和数据库查询结果;
- php 里配好 Redis,用户登录信息、商品列表这些,就不用每次查数据库了;
- 客户的电商网站加了 Redis 后,数据库压力降了 40%,php 处理速度自然快了。
自问自答:新手可能搞不懂的事
为啥重启 php 前不卡,重启后反而卡了?
多半是重启后 php 重新加载配置,新配置和服务器资源不匹配。比如原来进程数设高了,重启后系统内存不够,就卡了。小编上次给客户调配置,重启后卡,就是因为把max_children
设太高,降下来就好了。
不同 php 版本,优化参数一样吗?
不太一样!php7.4 以上支持 “JIT 编译”,在php.ini
里加opcache.jit = 1255
,能再快 10%;但 php5.6 就没这功能,别瞎加,加了反而报错。新手不知道版本的话,输php -v
查查。
用虚拟主机,不能改配置咋优化?
联系主机商,让他们调;或者用 “静态化” 插件,把 php 生成的页面存成 html,用户访问时直接读 html,不用麻烦 php,小编的个人博客就这么弄,虚拟主机也跑得挺快。
最后说点实在的
小编觉得,php 重启后卡顿,不是大问题,先查进程和内存,再调配置,基本都能解决。优化方面,OPcache 是必开的,简单又有效,新手先把这个弄好,再学其他技巧。
根据客户的数据,调对进程数 + 开 OPcache,网站响应速度平均能提升 30%,用户停留时间也会长不少。别嫌麻烦,多试几次,你也能让网站跑得飞快!