浅谈今日网站问题:
今天出现这两种错误的次数异常频繁,主要原因是阿里云服务器无法承受我多进程的操作,比如多区域测试网站速度,清除缓存,使用多个插件等,最终导致内存不足,专业来说就是:用来解释执行php程序的php-fpm进程占用过多内存,导致 mysql服务无法启动。
mysql服务关闭,自然网站会出现数据库连接错误的问题。而502 Bad gateway主要是因为PHP-CGI进程终止,和php-fpm.conf的设置有关。一般是php-fpm进程关闭,或者phpcgi进程不够用,需要增加php-fpm.conf 中的max_children值。解决方法如下:
一、最简单的方法:
重启阿里云ECS,就可以恢复正常。平时不要多进程操作,给服务器增加压力。
二、ECS Linux开启swap,也就是设置虚拟内存
1、创建用于交换分区的文件
dd if=/dev/zero of=/mnt/swap bs=1M count=1024
解释:bs=1M代表增加的模块大小,count=1024代表1024个模块,也就是2G空间
RAM是4G以下时,swap设置为RAM的2倍;RAM4G以上,swap等于RAM即可
2、设置交换分区文件
mkswap /mnt/swap
3、启用交换分区文件
swapon /mnt/swap
4、设置开机时自启用swap分区
vim /etc/fstab #修改文件/etc/fstab中的swap行
/mnt/swap swap swap defaults 0 0 #然后添加该行语句
6、执行free -m命令查看效果
如果想增加虚拟内存swap:使用命令:dd if=/dev/zero of=/tmp/swap bs=1MB count=1024增加1G的swap空间。
使用mkswap /tmp/swap命令制作一个swap文件。
使用swapon /tmp/swap命令启动swap分区。
vim /etc/fstab 添加/tmp/swap swap swap defaults 0 0
三、针对数据库连接错误:
1、 启动mysql
/etc/init.d/mysqld start
如果无法启动时,需要关闭fpm
2、关闭php-fpm
/etc/init.d/php-fpm stop
3、重新启动mysql
/etc/init.d/mysqld start
注意:一般是这种原因,另外wordPress连接数据库的设置与mysql密码不一致,也会导致此现象出现。只需要重新设置密码,匹配密码即可!
四、针对502 Bad gateway问题:
1、开启php-fpm
/etc/init.d/php-fpm start
2、查看php fastcgi的进程数(max_children值)
netstat -anop | grep php-cgi | wc -l
netstat -anpo | grep php-fpm | wc -l
ps aux | grep php-fpm
3、假如使用的进程数等于或高于5个,说明需要增加。然后调整/alidata/server/php/etc/php-fpm.conf 的相关设置
比如你的ECS运行内存是1G,1M带宽
vim /alidata/server/php-5.5.7/etc/php-fpm.conf
查看以下参数:
pm = static(静态)或者 dynamic(动态)
pm.max_children:静态方式下开启的php-fpm进程数量
pm.start_servers:动态方式下的起始php-fpm进程数量
pm.min_spare_servers:动态方式下的最小php-fpm进程数
pm.max_spare_servers:动态方式下的最大php-fpm进程数量
如果 pm = static,那么pm.max_children参数生效。则修改
pm.max_children = 20 #子进程数增加到20
request_terminate_timeout = 600 #执行时间修改为10分钟
如果 pm = dynamic,那么pm.max_children参数失效,后面3个参数生效。则修改
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
当然这不是解决问题的所有方法,不过确实最常用最实用的方法,至此结束!