存档

2017年8月 的存档

关于nginx+php-fpm中的一些优化(比如502+504错误)

2017年8月31日 没有评论

首先检查一下ulimit -n的值,SSH输入命令:

# ulimit -n
返回:65535

1、提升服务器的文件句柄打开

SSH命令:# vi /etc/security/limits.conf,在结尾处添加以下内容:

* soft nofile 65535
* hard nofile 65535

2、提升nginx的进程文件打开数

# vi /usr/local/nginx/conf/nginx.conf
查看 worker_rlimit_nofile 65535;

3、修改 php-fpm.conf 配置文件

前面确认了 ulimit -n 值为 65535,/usr/local/php/etc/php-fpm.conf 中的选项 rlimit_files 确保和此数值一致。

rlimit_files = 65535

4、修改 sysctl.conf

# vi /etc/sysctl.conf

底部添加

fs.file-max=65535

Edit…

vim /etc/php5/fpm/pool.d/www.conf

Set…

request_terminate_timeout = 300

Changes in Nginx Config

To increase the time limit for example.com by

vim /etc/nginx/sites-available/example.com
location ~ \.php$ {
	include /etc/nginx/fastcgi_params;
        fastcgi_pass  unix:/var/run/php5-fpm.sock;
	fastcgi_read_timeout 300; 
}

If you want to increase time-limit for all-sites on your server, you can edit main nginx.conf file:

vim /etc/nginx/nginx.conf

Add following in http{..} section

http {
	#...
        fastcgi_read_timeout 300; 
	#...
}

另外设置/etc/php/5.6/fpm/pool.d/www.conf中的request_terminate_timeout为0或者300(0s为关闭,就是无限执行下去。)

另外如何设置www.conf中的nginx运行方式:(老版本中apache-like是现在的dynamic)

如果设置成static,php-fpm进程数自始至终都是pm.max_children指定的数量,不再增加或减少。

如果设置成dynamic,则php-fpm进程数是动态的,最开始是pm.start_servers指定的数量,如果请求较多,则会自动增加,保证空闲的进程数不小于pm.min_spare_servers,如果进程数较多,也会进行相应清理,保证多余的进程数不多于pm.max_spare_servers。

这两种不同的进程管理方式,可以根据服务器的实际需求来进行调整。

这里先说一下涉及到这个的几个参数,他们分别是pmpm.max_childrenpm.start_serverspm.min_spare_serverspm.max_spare_servers

pm表示使用那种方式,有两个值可以选择,就是static(静态)或者dynamic(动态)。在更老一些的版本中,dynamic被称作apache-like。这个要注意看配置文件的说明。

下面4个参数的意思分别为:

pm.max_children:静态方式下开启的php-fpm进程数量。
pm.start_servers:动态方式下的起始php-fpm进程数量。
pm.min_spare_servers:动态方式下的最小php-fpm进程数量。
pm.max_spare_servers:动态方式下的最大php-fpm进程数量。

如果dm设置为static,那么其实只有pm.max_children这个参数生效。系统会开启设置数量的php-fpm进程。

如果dm设置为dynamic,那么pm.max_children参数失效,后面3个参数生效。系统会在php-fpm运行开始的时候启动pm.start_servers个php-fpm进程,然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之间调整php-fpm进程数。

那么,对于我们的服务器,选择哪种执行方式比较好呢?事实上,跟Apache一样,运行的PHP程序在执行完成后,或多或少会有内存泄露的问题。这也是为什么开始的时候一个php-fpm进程只占用3M左右内存,运行一段时间后就会上升到20-30M的原因了。

对于内存大的服务器(比如8G以上)来说,指定静态的max_children实际上更为妥当,因为这样不需要进行额外的进程数目控制,会提高效率。因为频繁开关php-fpm进程也会有时滞,所以内存够大的情况下开静态效果会更好。数量也可以根据 内存/30M 得到,比如8GB内存可以设置为100,那么php-fpm耗费的内存就能控制在 2G-3G的样子。如果内存稍微小点,比如1G,那么指定静态的进程数量更加有利于服务器的稳定。这样可以保证php-fpm只获取够用的内存,将不多的内存分配给其他应用去使用,会使系统的运行更加畅通。

对于小内存的服务器来说,比如256M内存的VPS,即使按照一个20M的内存量来算,10个php-cgi进程就将耗掉200M内存,那系统的崩溃就应该很正常了。因此应该尽量地控制php-fpm进程的数量,大体明确其他应用占用的内存后,给它指定一个静态的小数量,会让系统更加平稳一些。或者使用动态方式,因为动态方式会结束掉多余的进程,可以回收释放一些内存,所以推荐在内存较少的服务器或VPS上使用。具体最大数量根据 内存/20M 得到。比如说512M的VPS,建议pm.max_spare_servers设置为20。至于pm.min_spare_servers,则建议根据服务器的负载情况来设置,比较合适的值在5~10之间。

mysql出现too many connections修改优化(靠谱)

2017年8月21日 没有评论

show global variables like ‘open%’
即便你修改了ubuntu的ulimit为65535(ulimit -a查看),当你执行上方命令的时候,mysql仍然会是1024

修改方法:

sudo vim /etc/security/limits.conf
增加:
mysql soft nofile 65535
mysql hard nofile 65535

当然,为了使得nginx等等软件也同样,可以使用:

* soft nofile 65535
* hard nofile 65535

 

cd /etc/systemd/system
sudo mkdir mysql.service.d
sudo vim mysql.service.d/limits.conf

输入:
[Service]
LimitNOFILE=65535
LimitMEMLOCK=65535

修改mysql配置中的max_connections=13000就差不多了(13000*5<65535)

sudo systemctl daemon-reload

sudo systemctl restart mysql

应该就搞定了。参考文档:

https://stackoverflow.com/questions/30901041/can-not-increase-max-open-files-for-mysql-max-connections-in-ubuntu-15
https://unix.stackexchange.com/questions/152186/mysql-max-open-files-more-than-1024
http://blog.csdn.net/heizistudio/article/details/23669167
http://www.cnblogs.com/zhoujinyi/archive/2013/01/31/2883433.html

分类: mysql优化 标签: , , ,
css.php