作者b60413 (None)
看板PHP
标题Fw: [问题] Ningx High Concurrent求解
时间Fri Oct 17 10:58:52 2014
※ [本文转录自 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://webptt.com/cn.aspx?n=bbs/Linux/M.1413514682.A.97D.html
※ 发信站: 批踢踢实业坊(ptt.cc)
※ 转录者: b60413 (140.126.4.12), 10/17/2014 10:58:52
1F:推 Jerr: 先看看是不是 ram 吃完了, 然後试试看 max_requests = 16 10/17 11:03
2F:→ b60413: 观察记忆体的状况, 记忆体至少都还有一半以上可以使用 10/17 12:23
3F:→ b60413: 将PHP-FPM max_requests从1024调低成16, 还是没有改善 10/17 12:23
4F:→ b60413: demsg里面一直报错, 不过我想应该是TIME_WAIT的问题 10/17 12:24
5F:→ b60413: printk: 3031 messages suppressed. 10/17 12:24
6F:→ b60413: TCP: time wait bucket table overflow 10/17 12:25
7F:推 bamchisu: 可以试试看php accelerators, ex: OpCode Caches 12/08 01:58