php-fpm e nginx @ alta utilização da CPU?

5

Meu servidor está com o DigitalOcean com o seguinte plano:

2 Core Processor
2 GB Memory

Meu site está recebendo milhares de visitantes, no entanto, os dois núcleos de CPU são @ 100%:

Oproblemapareceestarcomphp-fpmenginx:workerprocess.Eufizdezenasdeotimizaçõesparaomeuservidor,noentanto,aindanãoconsigoacalmá-lo.

Aquiestámeunginx.conf:

userwww-data;worker_processes2;pid/run/nginx.pid;events{worker_connections2048;#multi_accepton;}http{###BasicSettings##sendfileon;tcp_nopushon;tcp_nodelayon;keepalive_timeout65;types_hash_max_size2048;server_tokensoff;ssl_protocolsTLSv1TLSv1.1TLSv1.2;#server_names_hash_bucket_size64;#server_name_in_redirectoff;include/etc/nginx/mime.types;default_typeapplication/octet-stream;###LoggingSettings##access_logoff;error_log/var/log/nginx/error.log;###GzipSettings##gzipon;gzip_disable"msie6";

    gzip_vary on;
    gzip_proxied expired no-cache no-store private auth;
    gzip_comp_level 2;
    gzip_min_length 1000;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # Buffers
    ##

    client_body_buffer_size 10K;
    client_header_buffer_size 1k;
    client_max_body_size 8m;
    large_client_header_buffers 2 1k;

    ##
    # nginx-naxsi config
    ##
    # Uncomment it if you installed nginx-naxsi
    ##

    #include /etc/nginx/naxsi_core.rules;

    ##
    # nginx-passenger config
    ##
    # Uncomment it if you installed nginx-passenger
    ##

    #passenger_root /usr;
    #passenger_ruby /usr/bin/ruby;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Aqui estão as opções que habilitei em www.conf do php-fpm:

user = www-data
group = www-data
listen = /var/run/php5-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = ondemand
pm.max_children = 20
pm.start_servers = 2
pm.min_spare_servers = 1
pm.process_idle_timeout = 10s;
pm.max_requests = 500
request_terminate_timeout = 20

Como posso manter meu servidor sobrecarregado? O que mais posso mudar?

    
por user5865490 01.02.2016 / 00:52

1 resposta

5

A execução do PHP é cara, em termos de uso da CPU e RAM. Sempre que puder evitar invocar o interpretador do PHP, você deve. O cache é a principal maneira de fazer isso, desde que o conteúdo não seja personalizado para cada usuário.

Meu pequeno AWS t2.micro pode servir por volta de 2.500 páginas por segundo a partir de seu cache Nginx, mas cerca de 20 páginas por segundo se o PHP (HHVM) tiver que ser invocado. Esse cache reduz minha fatura mensal, porque se eu tivesse que gerar páginas para cada usuário eu precisaria de um tamanho de instância muito mais poderoso, que custa mais.

Microcaching é uma opção que funciona bem para um site que muda rapidamente. Armazenar em cache por apenas 1 segundo pode ter enormes benefícios. É claro que, se o seu site estiver mudando, o aumento lento do tempo de cache reduzirá ainda mais a carga da CPU.

Outras opções incluem:  - Executando um interpretador PHP mais eficiente - PHP7 ou HHVM  - Otimizando seu código PHP  - Executando um CDN. Isso pode descarregar recursos estáticos facilmente e, se você definir os cabeçalhos de página (tempo de expiração e status de armazenamento em cache) e CDN corretamente, poderá veicular páginas diretamente. Eu uso CloudFlare com uma regra de página que diz "Cache Everything", incluindo HTML (que é gerado pelo PHP). Os resultados em um site mais rápido para os usuários, redução do uso de CPU e largura de banda e CloudFlare tem um plano gratuito que atende a muitas pessoas.

Você pode usar outros sistemas de cache, como o Varnish, que é frequentemente usado com o HAProxy para balanceamento de carga. Existe algum crossover entre estes dois produtos - o HAProxy pode fazer algum cache, o Varnish pode fazer algum balanceamento de carga. Mais informações sobre eles aqui .

    
por 01.02.2016 / 01:51