Vraag php-fpm en nginx @ high CPU-gebruik?


Mijn server is bij DigitalOcean met het volgende plan:

2 Core Processor
2 GB Memory

Mijn website ontvangt duizenden bezoekers, maar beide CPU-kernen zijn @ 100%:

enter image description here

Het probleem lijkt te zijn met php-fpm en nginx: worker process. Ik heb tientallen optimalisaties gemaakt voor mijn server, maar ik kan het nog steeds niet kalmeren.

Hier is mijn nginx.conf:

user www-data;
worker_processes 2;
pid /run/nginx.pid;

events {
    worker_connections 2048;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    server_tokens off;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # Logging Settings
    ##

    access_log off;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    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/*;
}

Hier zijn de opties die ik heb ingeschakeld in php-fpm's www.conf:

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

Hoe kan ik voorkomen dat mijn server overbelast? Wat kan ik nog meer veranderen?


5
2018-01-31 23:52


oorsprong


Kun je pagina caching plaatsen? Cachen voor zelfs 1 seconde kan de belasting enorm verminderen, en nginx is goed in caching. Uiteraard hoeft u alleen ingelogde gebruikers te bezoeken, maar dit kan uw CPU-gebruik met 95% verminderen. nginx.com/blog/benefits-of-microcaching-nginx - Tim
@Tim Microcaching lijkt het te hebben gedaan. De server kaatst soms tot 100% CPU-gebruik, maar komt vrijwel onmiddellijk weer terug. - user5865490
Geweldig :) Ik zal het onderstaande antwoord uitbreiden, zodat het anderen kan helpen. - Tim


antwoorden:


PHP draaien is duur, in termen van CPU-gebruik en RAM. Telkens wanneer u kunt voorkomen dat u de PHP-interpreter gebruikt, moet u dit doen. Caching is de belangrijkste manier om dit te doen, zolang de inhoud niet voor elke gebruiker op maat wordt gegenereerd.

Mijn kleine AWS t2.micro kan ongeveer 2500 pagina's per seconde van zijn Nginx-cache serveren, maar ongeveer 20 pagina's per seconde als PHP (HHVM) moet worden aangeroepen. Deze cache verlaagt mijn maandelijkse factuur, want als ik pagina's voor elke gebruiker zou moeten genereren, zou ik een veel krachtigere instantiegrootte nodig hebben, die meer kost.

Microcaching is een optie die goed werkt voor een snel veranderende site. Cachen voor slechts 1 seconde kan enorme voordelen hebben. Natuurlijk, als uw site langzaam aan het veranderen is, zal het verhogen van de cacheduur de CPU-belasting verder verminderen.

Een andere opties zijn:  - Een efficiëntere PHP-interpreter uitvoeren - PHP7 of HHVM  - Optimalisatie van uw PHP-code  - Een CDN uitvoeren. Hierdoor kunt u eenvoudig statische bronnen ontladen en als u uw paginakopteksten (vervaltijd en cachestatus) en CDN correct instelt, kan deze pagina's rechtstreeks weergeven. ik gebruik CloudFlare met een paginaregel die aangeeft dat hij "alles moet cachen", inclusief HTML (die wordt gegenereerd door PHP). De resultaten in een snellere website voor gebruikers, minder CPU- en bandbreedtegebruik en CloudFlare hebben een gratis abonnement dat voor veel mensen geschikt is.

U kunt andere caching-systemen zoals Varnish gebruiken, die vaak wordt gebruikt met HAProxy voor taakverdeling. Er is een overgang tussen deze twee producten - HAProxy kan wat caching uitvoeren, Varnish kan wat taakverdeling uitvoeren. Meer informatie over hen hier.


5
2018-02-01 00:51