美文网首页DevOps
另一个低配置PHP服务环境优化设置

另一个低配置PHP服务环境优化设置

作者: 松撻 | 来源:发表于2018-07-01 16:34 被阅读21次

    一、nginx配置

    编辑配置文件:

    vim /etc/nginx/nginx.conf
    

    1、找到:worker_processes改为:worker_processes 2;
    nginx运行的进程数,一般设置成和CPU的核数相同。

    2、找到:worker_rlimit_nofile改为:worker_rlimit_nofile 40960;
    worker_rlimit_nofile是nginx能打开文件的最大句柄数。

    3、找到:worker_connections改为:worker_connections 10240;
    nginx进程所允许的最大的连接数,max_clients = worker_processes * worker_connections

    4、找到:keepalive_timeout改为:keepalive_timeout 60;
    设置连接超时时间为60。

    5、开启gzip,找到gzip的相关参数:

    gzip on;
    gzip_static on;
    gzip_comp_level 5;
    gzip_min_length 1024;
    

    增加并修改(相同的直接覆盖):

    gzip on; #支持gzip压缩。
    gzip_static on;#支持静态缓存模块。
    gzip_comp_level 5;#gzip压缩等级,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢。
    gzip_min_length 1024;#设置允许压缩的页面最小字节数。
    gzip_buffers 4 8k;#gzip压缩缓存,是按块大小的倍数申请内存空间,这里以8k为一块,以8k的4倍大小申请内存。
    gzip_types text/xml text/css text/javascript application/x-javascript application/xml;#设置需要压缩的MIME类型。
    gzip_vary on;#vary header支持。
    gzip_http_version 1.1;#用于识别http协议的版本。
    

    二、php-fpm配置

    vim /etc/php-fpm.d/www.conf
    

    以下配置是在pm = dynamic模式下的配置。
    1、找到:pm.max_children改为:pm.max_children = 8;
    php-fpm子进程副本创建的最大数,创建的越多并发能力越强。同时修改空闲时进程数pm.min_spare_serverspm.max_spare_servers,不能比pm.max_children大。
    2、找到:;pm.max_requests = 500将注释去掉并改为:pm.max_requests = 2000
    接收多少次请求后重新建立php-fpm子进程。PS:dynamic这种模式很像apache的prefork方式。
    3、找到:;request_terminate_timeout = 0将注释去掉并改为:request_terminate_timeout = 100设置php脚本最大执行时间。

    一个nginx进程要占510MB内存,一个php-fpm进程要占1525MB左右的内存。

    三、nginx预防500、502、504

    1、nginx 500错
    nginx出现500错误,很大一部分原因是因为nginx打开的文件描述符数量限制太小导致的,可参考下面“(四)中的修改系统ulimit限制”。
    nginx.conf中worker_rlimit_nofile也要改成40960。
    2、nginx 502错
    nginx 502 bad gateway是最常见的报错了,主要原因是php fastcgi的进程数在大并发下来不及处理请求,导致请求被丢弃。
    如果有多余内存可以加大php-fpm进程数,修改max_children参数。

    网上的其它办法:
    部分PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间,例如

    ......
    http
    {
    ......
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    ......
    }
    ......
    

    PS:nginx.conf基本结构如下,不要加错地方。

    XXXXXXXX
    XXXXXXXX
    events{
    XXXXXXXXXXXX
    ...
    }
    http{
    XXX添加在这个位置XXXX
     server{
     XXXXXXXXXXXX
     ...
     }
    ...
    }
    

    另外修改request_terminate_timeout,控制php脚本最大运行时间可以改善该问题。php-cgi进程数不够用、php执行时间长、或者是php-cgi进程死掉,都会出现502错误。
    3、nginx 504错
    504 Gateway Time-out,一般是由于nginx默认的fastcgi进程响应的缓冲区太小造成的, 这将导致fastcgi进程被挂起。
    增加几个fastcgi的配置:

    fastcgi_buffers 4 256k;
    fastcgi_buffer_size 128K;
    fastcgi_busy_buffers_size 256K;
    fastcgi_temp_file_write_size 256K;
    

    四、系统相关
    1、修改网络参数

    vim /etc/sysctl.conf
    

    添加:

    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    

    2、修改系统ulimit限制

    vim /etc/security/limits.conf
    

    增加两行:

    * soft nofile 40960
    * hard nofile 40960
    
    vim /etc/pam.d/login
    

    增加如下一行:

    session required pam_limits.so
    

    在profile文件中增加一行:

    echo "ulimit -SHn 40960" >> /etc/profile
    

    重启系统生效。

    五、mysql配置

    vim /etc/my.cnf
    

    由于内存较小,不使用InnoDB,还是用回mysql5.1.x的MyISAM。如果内存足够还是推荐使用InnoDB。

    在[mysqld]内添加:

    loose-skip-innodb
    default-storage-engine = MyISAM
    
    skip-external-locking
    skip-name-resolve
    skip-networking
    
    key_buffer_size = 32M
    max_allowed_packet = 2M
    table_cache = 64
    sort_buffer_size = 1M
    net_buffer_length = 8K
    read_buffer_size = 1M
    read_rnd_buffer_size = 1M
    myisam_sort_buffer_size = 16M
    thread_cache_size = 8 //add
    query_cache_size = 32M //add
    

    六、php配置

    vim /etc/php.ini
    

    1、找到:

    zlib.output_compression = Off
    ;zlib.output_compression_level = -1
    

    改为:

    zlib.output_compression = On
    zlib.output_compression_level = 5
    

    开启php gzip压缩。这里和nginx gzip压缩的东西不同,nginx是压缩html,css,javascript。php gzip是用来压缩php。

    2、找到:memory_limit = 128M改为:memory_limit = 32M
    修改php脚本使用的最大内存数。
    最后重启nginx、php-fpm、mysql:

    service nginx restart
    service php-fpm restart
    service mysqld restart
    

    相关文章

      网友评论

        本文标题:另一个低配置PHP服务环境优化设置

        本文链接:https://www.haomeiwen.com/subject/rrxhuftx.html