Daha hızlı tepki süreleri için Nginx + PHP-FPM'yi Optimize (OpenX AdServing için)

6 Cevap php

Şu anda OpenX reklam veren için Nginx + PHP-FPM'yi koşuyorum. Şu anda benim yanıt süreleri bile düşük yük zamanlarında, korkunç. Ancak, benim CPU ve bellek kaynaklarının ince, bu yüzden darboğaz ne olduğunu anlamaya görünüyor olamaz.

Nginx ve php-fpm için geçerli benim config:

worker_processes 20;
worker_rlimit_nofile 50000;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  15000;
    multi_accept off;
    use epoll;
}

http {
    include       /etc/nginx/mime.types;

    access_log  /var/log/nginx/access.log;

    sendfile        on;
    tcp_nopush     off;

    keepalive_timeout  0;
    #keepalive_timeout  65;
    tcp_nodelay        on;

    gzip  on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    gzip_comp_level 2;
    gzip_proxied    any;
    gzip_types    text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;

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

server {
    listen   80;
    server_name  localhost;
    access_log  /var/log/nginx/localhost.access.log;

# Default location
    location / {
        root   /var/www;
        index  index.php;
    }

## Parse all .php file in the /var/www directory
    location ~ .php$ {
        fastcgi_pass   localhost:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_param  QUERY_STRING     $query_string;
        fastcgi_param  REQUEST_METHOD   $request_method;
        fastcgi_param  CONTENT_TYPE     $content_type;
        fastcgi_param  CONTENT_LENGTH   $content_length;
        fastcgi_ignore_client_abort     off;
    }

PHP-FPM:
rlimit_files = 50000
max_children = 500

Ben sadece PHP-FPM için değiştirdik PHP-FPM Paramaters dahil.

Herkes bu yüzden daha fazla istekleri hizmet edebilir optimize konusunda herhangi bir ipucu var mı? Ben şu anda korkunç yanıt süreleri görüyorum.

6 Cevap

Öncelikle, yol çok işçi ve limitleri aşırı yüksek ayarlayın. Yalnız php-fpm için en fazla çalışan sayısı biraz sunucu da çıkmaza sokacaktır. Bir sunucu üzerinde sınırlarını kapağını açmak mutlaka onu hızlandırmak olmaz ama aslında tam tersi bir etkisi olabilir.

  1. İşçi Sayısı: 20 Bir 20 işlemci / çekirdek makine yoksa işçiler aşırı içerik değiştirmeyi olacak gibi, aslında bir olumsuz etkiye neden konum biraz mantıklı. Eğer bir çift çekirdekli işlemci çalıştıran ediyorsanız, 2 işçi yeterli olacaktır.

  2. İşçi Bağlantılar: Yine, sadece göklerin içine bir sınırı atma sorunları çözmez. Lütfen ulimit-n çıktı 1024 gibi bir şey ise, o zaman işçi bağlantıları 1024 ya da daha az (hatta belki 768) ayarlanmış olması gerekir, onun özellikle PHP gibi bir şey ile 2 x 1024 eşzamanlı bağlantı olacak ki düşüktür.

  3. Kök konumu ve PHP ayarları, sen server {} seviyesi değil konum düzeyde kök yönergesini koyarsanız http://wiki.nginx.org/Pitfalls, en iyi çalışır bakın. Eğer $ document_root olarak SCRIPT_FILENAME değer olarak $ document_root $ fastcgi_script_name kullanabilirsiniz bunu bir kez otomatik olarak aşağıda yer blokları aktarılacaktır.

  4. Diğer bir deyişle, doğrudan statik dosyaları işlemek isteyebilirsiniz:

    location ~* \.(ico|css|js|gif|jpe?g|png)$ {
        expires max;
        add_header Pragma public;
        add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    }
    
  5. PHP Accelerator, yani APC (apc.enabled = 1 ile php.ini) ya XCache kullanın ve bu memory_limit gibi php ayarları, dikkatli olun. Sadece koç 2GB ile bir sistemi varsa Örneğin, 128MB her bir sınırı ile 500 işçi sağlamak için çok az mantıklı. Özellikle gerçek ayrıca sunucu üzerinde diğer hizmetleri çalıştırıyorsanız.

You should definitely reduce the number of workers as I doubt you have 20 cores/processors. Additionally, I'd look into your database server, there's a big possibility that the problem is there.

Ayrıca size worker_rlimit_nofile 50000, sana işletim sistemi genellikle 1024 (varsayılan) sınırını ayarlamak olduğunu bilmek umut, yazarak akım sınırı ne istemek için deneyebilirsiniz artırdı ettik ulimit -n

Sen ulimit -n 50000 init.d veya visit this other question on stackoverflow limits.conf kalıcı nasıl kullanılacağını öğrenmek için bu komutu yürüterek NoFile (açık dosya sayısı) sabit limitini yükseltmek Geniş sınırlar sistemini ayarlayın.

Koymak için de yararlı olacaktır:

access_log off;

Herhalde olarak gerçekten bu istekleri üzerine istatistik nesil umurumda değil.

Eğer makine üzerinde 20 işlemcileri veya çekirdeği var mı? Ayrıca belki işletim sistemi için varsayılan olayları deneyin ... yerine daha nginx belki daha fcgi işlemleri ... muhtemelen 2 ile başlayan - 4 nginx işçilerin yeterli ...

Kesinlikle yol millet olarak çok mayıs işçi belirtmiştik. Ben şahsen php opcode önbelleğe alma için APC üzerinde XCache tercih ederim. Yüklemek modifiye centmin oto bash kabuk nginx / php-fpm yapılandırması kontrol gereken komut http://vbtechsupport.com/796/

Gerçekten nginx ve php5-fpm ile max performans bastırıyor bir sanattır. Gerçekten hizmet vermekteyiz içeriğinin türünü anlamakta alır.

Örneğin, ben senin yapılandırmasında herhangi try_files kullanımı, ya da önbellekli her türlü göremiyorum. Eğer nginx ile geliyor biliyor musunuz yerleşik memcache desteği? Görüntüleri ve html / css, yanı sıra php sayfaları önbelleğe alabilir. Tıklamalar için çok önem veriyorsanız, bu tıklamalar hala görüntüler olmasa bile sayılır.

Erisim.log log veya hatalar.log, sen php gerekmez modülleri devre dışı, masa kilitleme azaltmak disk azaltmak için InnoDB yıkama yöntemi ile oynamak için InnoDB kullanmak, mysql son sürümünü kullanmayın, mount tmpfs sizin afiş koymak katılır SQL, vb yoluyla istendiğinde, diskte geçici dosyaların oluşturulmasını azaltmak için mysql maksimum bellek tabloları artırmak yazıyor

Nginx çok büyük ve karmaşık bir formül sadece bir parçasıdır. Ben bile TCP Stack ve Ağ Kartı performansı, Swap kullanımı, bellek kullanımı, ya da (eğer varsa) OpenX yoluyla hizmet olabilir HTML / CSS gzip sıkıştırmasını optimize Çekirdek params bahsetmedim.

Ve evet, söz üstümde diğerleri gibi, ayarlarınız aşırı bakmak ve temel optimizasyon kavramları anlayış eksikliği göstermektedir. Diğer bir deyişle, profesyonel :-) işe