測試機器爲騰訊雲服務器1核1G內存,swap分區2G,停用除SSH外的全部服務,僅保留nginx,優化思路主要包括兩個層面:系統層面+nginx層面。html
1、系統層面nginx
一、調整同時打開文件數量apache
ulimit -n 20480
二、TCP最大鏈接數(somaxconn)服務器
echo 10000 > /proc/sys/net/core/somaxconn
三、TCP鏈接當即回收、回用(recycle、reuse)cookie
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
四、不作TCP洪水抵禦tcp
echo 0 > /proc/sys/net/ipv4/tcp_syncookies
也能夠直接使用優化後的配置,在/etc/sysctl.conf中加入:post
net.core.somaxconn = 20480 net.core.rmem_default = 262144 net.core.wmem_default = 262144 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_rmem = 4096 4096 16777216 net.ipv4.tcp_wmem = 4096 4096 16777216 net.ipv4.tcp_mem = 786432 2097152 3145728 net.ipv4.tcp_max_syn_backlog = 16384 net.core.netdev_max_backlog = 20000 net.ipv4.tcp_fin_timeout = 15 net.ipv4.tcp_max_syn_backlog = 16384 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_max_orphans = 131072
net.ipv4.tcp_syncookies = 0
使用:sysctl -p 生效測試
sysctl -p
2、nginx層面優化
修改nginx配置文件,nginx.confspa
增長work_rlimit_nofile和worker_connections數量,並禁用keepalive_timeout。
worker_processes 1; worker_rlimit_nofile 20000; events {
use epoll; worker_connections 20000;
multi_accept on; }
http {
keepalive_timeout 0;
}
重啓nginx
/usr/local/nginx/sbin/nginx -s reload
使用ab壓力測試
ab -c 10000 -n 150000 http://127.0.0.1/index.html
測試結果:
This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient) Completed 15000 requests Completed 30000 requests Completed 45000 requests Completed 60000 requests Completed 75000 requests Completed 90000 requests Completed 105000 requests Completed 120000 requests Completed 135000 requests Completed 150000 requests Finished 150000 requests Server Software: nginx/1.8.0 Server Hostname: 127.0.0.1 Server Port: 80 Document Path: /index.html Document Length: 612 bytes Concurrency Level: 10000 Time taken for tests: 19.185 seconds Complete requests: 150000 Failed requests: 0 Write errors: 0 Total transferred: 131180388 bytes HTML transferred: 95121324 bytes Requests per second: 7818.53 [#/sec] (mean) Time per request: 1279.013 [ms] (mean) Time per request: 0.128 [ms] (mean, across all concurrent requests) Transfer rate: 6677.33 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 650 547.9 522 7427 Processing: 212 519 157.4 496 958 Waiting: 0 404 139.7 380 845 Total: 259 1168 572.1 1066 7961 Percentage of the requests served within a certain time (ms) 50% 1066 66% 1236 75% 1295 80% 1320 90% 1855 95% 2079 98% 2264 99% 2318 100% 7961 (longest request)