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 ปริมาณการใช้งานถูกต้องตามกฎหมายทั้งหมดฉันเพิ่งจะเหลือผู้ใช้

ฉันกำลังใช้งานกล่องดูอัลคอร์ที่มีอูบุนตู 64 บิต

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? คุณมี RAM ฟรีจำนวนมากเพื่อรองรับพวกมัน

เพื่อตอบคำถามของคุณ:

  • ฉันจะทำอย่างไรเพื่อหยุดการเชื่อมต่อที่หมด จัดเตรียมการเชื่อมต่อเพิ่มเติมหรือลดจำนวนการเชื่อมต่อที่คุณได้รับ
  • ทำไมสิ่งนี้ถึงเกิดขึ้น? เพราะคุณขาดการเชื่อมต่อ

ขออภัยข้อผิดพลาดนั้นได้รับการประทับเวลาหลังจากฉันอัปเดตเป็น 150 จาก 100 .... ใช่ฉันมี ฉันควรตั้งค่าอะไรให้กับแรมทั้งหมดของฉัน
E3pO

คุณควรจะยกมันไป(free/mem_per_worker)+150ซึ่งfreeเป็นจำนวนหน่วยความจำที่คุณจะมีหลังจากที่คำนึงถึงความต้องการของกระบวนการอื่น ๆ ที่มีหน่วยความจำความต้องการจะเพิ่มขึ้นด้วยการโหลดมากขึ้นและmem_per_workerเป็นจำนวนเงินสูงสุดของหน่วยความจำที่คุณคาดหวังในแต่ละขั้นตอนการปฏิบัติงานที่กำหนดให้ PHP
womble

4

เรามีปัญหาเดียวกันกับเว็บเซิร์ฟเวอร์ของเรา

คุณสามารถลองเกิดกระบวนการย่อยกับคำขอ X ทุกคำขอเพื่อหลีกเลี่ยงการรั่วไหลของหน่วยความจำ มันทำงานได้ดีใน Apache และ FPM ก็เริ่มทำงานได้ดีเช่นกัน

 pm.max_requests = 50000

สิ่งนี้จะเริ่มกระบวนการลูกใหม่ทุกคำขอ 50k

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.