这样的问题在于,给了PHP足够多的进程之后,分配给数据库的内存就很有限(毕竟小土豆只有12G内存),所以在历年高峰,还是会挂掉的,往往都是挂掉的时候伴随内存爆掉,还得手动restart
。
当然,PHP5 的性能本身就要背很大的过;其次 laravel 臃肿的身材也得背很大的锅。因为没人愿意重写系统,只能在其他方向找突破。
首先被动刀的自然是 PHP,我们“与时俱进”地把 php 升级到了 remi 源上的 7.1 版本,没错,opcache
就是这么的诱人,也没让我们失望。php 版本切换对于 laravel5.1 最大点问题就是mcrypt
加密件,这个 Rex 同志已经给我们解决了,放链接https://blog.rexskz.info/laravel-and-php-version-trap.html。然后我们把子进程改为 pm = dynamic
,进行动态调配。我很随意的这么设置
pm.max_children = 800
pm.start_servers = 80
pm.min_spare_servers = 70
pm.max_spare_servers = 120
pm.process_idle_timeout = 10s
pm.max_requests = 200
不在这里再用中文讲每个参数的意义了,只讲讲最有意思的 pm.max_requests
。
; The number of requests each child process should execute before respawning.
; This can be useful to work around memory leaks in 3rd party libraries. For
; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS.
; Default Value: 0
emmm 每个进程处理多少个请求之后重启。默认是永不重启。我觉得...我们的小土豆芽,所谓 memory leaks
还是无法避免的,所以我们把这个配置稍微改的小了点,定次重启总比日后手动重启好很多。
除此之外,opcache
肯定是要开的咯,装好之后记得改一下配置,默认的配置还是很保守的。remi 对应的配置文件默认在 /etc/opt/remi/php71/php.d/10-opcache.ini
opcache.memory_consumption=256
opcache.revalidate_freq=60 ;没有动态的PHP的时候,这个值可以改的大一点
opcache.fast_shutdown=1
改改这仨,该调大调大,还是没有坏处滴。
因为怕 php 挂,所以写了个拙劣的jo本
#!/bin/bash
netcode=`curl -I -m 10 -o /dev/null -s -w %{http_code} http://my.nuaa.edu.cn/watch.php`
if [ $netcode != 200 ]
then
echo "`date +%Y%m%d-%H:%M:%S` php又挂啦...开始重启...emmm" >> /var/log/watchPhp
systemctl restart php71-php-fpm.service
echo "`date +%Y%m%d-%H:%M:%S` php重启结束!喵呜~" >> /var/log/watchPhp
fi
cron-tab
配置 * * * * * sh /root/network.sh
,每分钟来一次身体♂检查。
哇,很拙劣对不对,肯定会被大师傅耻笑的。
数据库方面,不用多说,最新版的 MariaDB ,缓存改大点,问题不大的(老师傅们当年并没有用 Redis...)
然后就是 Linux 大家都会注意到的问题了,不要倾向于使用 Swap
我把 /proc/sys/vm/swappiness
设置成了 5
还是比较激进的,现在的主流配置,5-15都是不错的选择呢~
关于 Swap
,DO 的这篇文档是真的不错,最早就是这里学到的,推荐。
呜呜,但愿别出啥大问题吧,要稳健。来年有空一定重写,呜呜。
ps:本文没有严格区分 进程
和 线程
哦