У Nginx та PHP-FPM закінчується зв’язок


9

Я постійно натрапляю на такі помилки,

[02-Jun-2012 01:52:04] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 19 idle, and 49 total children
[02-Jun-2012 01:52:05] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 19 idle, and 50 total children
[02-Jun-2012 01:52:06] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 19 idle, and 51 total children
[02-Jun-2012 03:10:51] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 18 idle, and 91 total children

Я змінив налаштування для php-fpm на ці,

pm.max_children = 150 (It was at 100, i got a max_children reached and upped to 150)
pm.start_servers = 75
pm.min_spare_servers = 20
pm.max_spare_servers = 150

У результаті

[02-Jun-2012 01:39:19] WARNING: [pool www] server reached pm.max_children setting (150), consider raising it

Щойно я запустив новий веб-сайт, який отримує на ньому значну кількість трафіку. Цей трафік законний, і користувачі отримують 504 тайм-аута шлюзу при досягненні ліміту.

У мене обмежено з'єднання з моїм сервером за допомогою IPTABLES, і я запускаю fail2ban і відслідковую журнали доступу до nginx. Трафік законний, я просто не вистачає місця для користувачів.

Зараз я працюю на двоядерній коробці з ubuntu 64bit.

free
             total       used       free     shared    buffers     cached
Mem:       6114284    5726984     387300          0     141612    4985384
-/+ buffers/cache:     599988    5514296
Swap:       524284       5804     518480

Мій php.ini max_input_time = 60

Мій конфігурація nginx є

worker_processes 4;
pid /var/run/nginx.pid;

events {
    worker_connections 19000;
    # multi_accept on;
}
worker_rlimit_nofile    20000;  #each connection needs a filehandle (or 2 if you are proxying)

client_max_body_size 30M;
client_body_timeout   10;
client_header_timeout 10;
keepalive_timeout     5 5;
send_timeout          10;

    location ~ \.php$ {
    try_files $uri /er/error.php;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_connect_timeout 60;
    fastcgi_send_timeout 180;
    fastcgi_read_timeout 180;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 256 16k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
    fastcgi_max_temp_file_size 0;
    fastcgi_intercept_errors on;
    fastcgi_pass unix:/tmp/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}

Що я можу зробити, щоб не припиняти зв’язок? Чому це все відбувається? Я стежу за своїм трафіком в режимі реального часу в Google Analytics, і коли кількість користувачів перевищує 120 моїх php-fpm.log сповнений цих попереджень ..

Відповіді:


5

Чи розглядали Ви, як дотримуватися тонких порад, поданих у повідомленні журналу, підвищуючи значення pm.max_children? У вас є завантаження пакетів безкоштовної оперативної пам’яті для їх розміщення.

Щоб відповісти на ваші запитання:

  • Що я можу зробити, щоб не припиняти зв’язок? Забезпечте більше з'єднань або зменшіть кількість отриманих з'єднань.
  • Чому це все відбувається? Тому що у вас постійно не вистачає зв’язків.

Вибачте, ця помилка була помічена після того, як я оновив її до 150 з 100 .... Так, у мене є. Який параметр я повинен встановити для всього мого барана?
E3pO

Ви повинні підняти його до того (free/mem_per_worker)+150, куди freeбуде обсяг пам'яті, який ви матимете після врахування потреб інших процесів, чиї потреби в пам’яті збільшуватимуться з більшим навантаженням, і mem_per_workerце максимальний об’єм пам’яті, який ви передбачаєте, що потребує кожен процес роботи PHP.
жіноча

4

У нас був такий самий випуск на наших веб-серверах.

Ви можете спробувати відновити дочірній процес у всіх запитах X, щоб уникнути витоку пам'яті. Це добре працювало в Apache і FPM, він також починає працювати добре.

 pm.max_requests = 50000

Це перезапустить дочірній процес кожні 50 кб запитів

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.