看板 PHP 關於我們 聯絡資訊
※ [本文轉錄自 Linux 看板 #1KG8Mwbz ] 作者: b60413 (None) 看板: Linux 標題: [問題] Ningx High Concurrent求解 時間: Fri Oct 17 10:57:58 2014 手邊有一台Server, 設備大概是16G, 16 Core CPU, 打算拿來建置一台Backend Web Server(只跑PHP), 套件部分使用Nginx(0.8.6)、PHP-fpm, 希望可以達到每秒鐘併發數在200~500之間, 實際架設後並使用ApacheBench測試(-n10000 -c200)的結果是, 只要當系統的TIME_WAIT達到6000(net.ipv4.tcp_max_tw_buckets)之後, 伺服器的反應開始下降(使用tshark觀察), 並且就卡住了, 最後ab會發出apr_socket_recv: Connection timed out (110)的訊息, 尤其反覆測試後, 在先前的TIME_WAIT釋放之前, Server都會處於非常慢的狀況, 請問有哪些細節是沒有注意到還可以持續優化的嗎? 還是這台機器的等級, 沒有辦法處理這麼高併發的數量? 中間, 有使用ss去觀察TIME_WAIT的timer倒數, 發現每次都是從60秒開始倒數, 請問有辦法降低這個數值嗎? 或者讓Nginx的連接在client關閉後, 直接將該資源回收掉嗎? 目前一直著眼在TIME_WAIT的問題, 是否我思考的方向有錯? 還請有經驗的指點迷津, 感謝. kernel參數調整如下, net.core.netdev_max_backlog = 262144 net.core.somaxconn = 262144 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 1200 net.ipv4.tcp_window_scaling = 0 net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_max_syn_backlog = 8192 net.ipv4.tcp_max_tw_buckets = 6000 net.ipv4.tcp_mem = 786432 10485760 15728640 net.ipv4.tcp_wmem = 4096 10485760 20971520 net.core.wmem_max = 20971520 net.ipv4.tcp_rmem = 4096 10485760 20971520 net.core.rmem_max = 20971520 /etc/limits.conf調整如下, * soft nofile 65535 * hard nofile 65535 Ningx的主要相關設定如下, worker_processes 8; worker_rlimit_nofile 65535; events { use epoll; worker_connections 51200; } PHP-fpm的主要相關設定如下, backlog = 8192 max_children = 256(static) rlimit_files = 65535 -- http://www.myspace.com/soundtrack0220 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.126.4.12 ※ 文章網址: http://www.ptt.cc/bbs/Linux/M.1413514682.A.97D.html ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: b60413 (140.126.4.12), 10/17/2014 10:58:52
Jerr: 先看看是不是 ram 吃完了, 然後試試看 max_requests = 16 10/17 11:03
b60413: 觀察記憶體的狀況, 記憶體至少都還有一半以上可以使用 10/17 12:23
b60413: 將PHP-FPM max_requests從1024調低成16, 還是沒有改善 10/17 12:23
b60413: demsg裡面一直報錯, 不過我想應該是TIME_WAIT的問題 10/17 12:24
b60413: printk: 3031 messages suppressed. 10/17 12:24
b60413: TCP: time wait bucket table overflow 10/17 12:25
bamchisu: 可以試試看php accelerators, ex: OpCode Caches 12/08 01:58