Nginx充当广告服务器的反向代理,每分钟接收20k个请求。在100ms内发生的响应从广告服务器的nginx的Nginx和sysctl配置 - 性能设置
运行在虚拟机与配置 128GB RAM 4个vCPU 100GB HDD
上述考虑,什么是Nginx的良好环境,也sysctl.conf的
Nginx充当广告服务器的反向代理,每分钟接收20k个请求。在100ms内发生的响应从广告服务器的nginx的Nginx和sysctl配置 - 性能设置
运行在虚拟机与配置 128GB RAM 4个vCPU 100GB HDD
上述考虑,什么是Nginx的良好环境,也sysctl.conf的
请记住,内核调整是复杂的,需要大量的评估,直到你得到正确的结果。如果有人发现一个错误,请让我知道,以便我可以调整我自己的配置:-)
另外,如果此服务器只运行Nginx,您的内存对于请求数量是相当高的,您可以检查您有多少在高峰时段使用并相应调整。
检查一个重要的事情是文件描述符的数量,在你的情况下,我将它设置为65.000,以应付每秒20.000+个请求。原因是在正常情况下,您只需要大约4.000个文件描述符,因为您有4.000个同时打开的连接(20.000 * 2 * 0.1)。但是,如果发生后端问题,加载广告可能需要1秒或更长时间。在这种情况下simultanious打开的连接的数量会更高:
20.000 * 2 * 1.5 = 60.000.
所以将它设置为65K将在我看来是一个保存值。
您可以通过检查文件描述符的数量:
cat /proc/sys/fs/file-max
如果这是65000下面你就需要设置到/etc/sysctl.conf:
fs.file-max = 65000
也为Nginx的,您需要添加以下文件中:/etc/systemd/system/nginx.service.d/override.conf
[Service]
LimitNOFILE=65000
在nginx.conf文件:
worker_rlimit_nofile 65000;
添加的情况下,你将需要申请更改:
sudo systemctl -p
sudo systemctl daemon-reload
sudo systemctl restart nginx
这些设置后,以下设置将让你开始:
vm.swappiness = 0 # The kernel will swap only to avoid an out of memory condition
vm.min_free_kbytes = 327680 # The kernel will start swapping when memory is below this limit (300MB)
vm.vfs_cache_pressure = 125 # reclaim memory which is used for caching of VFS caches quickly
vm.dirty_ratio = 15 # Write pages to disk when 15% of memory is dirty
vm.dirty_background_ratio = 10 # System can start writing pages to disk when 15% of memory is dirty
另外,我在我的sysctl配置中使用以下安全设置,并配合上面的可调参数。随意使用它们,for credits
# Avoid a smurf attack
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Turn on protection for bad icmp error messages
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Turn on syncookies for SYN flood attack protection
net.ipv4.tcp_syncookies = 1
# Turn on and log spoofed, source routed, and redirect packets
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
# No source routed packets here
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Turn on reverse path filtering
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Make sure no one can alter the routing tables
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
# Don't act as a router
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# Turn on execshild
kernel.exec-shield = 1
kernel.randomize_va_space = 1
当你进行代理请求,我将以下内容添加到您的sysctl.conf的文件,以确保您没有运行出端口,它是可选的,但如果你正在运行到问题是东西要记住:
net.ipv4.ip_local_port_range=1024 65000
正如我一般评价的默认设置,并相应地调整我没有提供IPv4和IPv4的。tcp_选项。你可以在下面找到一个例子,但请不要复制和粘贴,你需要做一些阅读,然后再开始调整这些变量。
# Increase TCP max buffer size setable using setsockopt()
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608
# Increase Linux auto tuning TCP buffer limits
# min, default, and max number of bytes to use
# set max to at least 4MB, or higher if you use very high BDP paths
# Tcp Windows etc
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_window_scaling = 1
以上参数是不是你应该考虑,有很多,你可以调整,为example多个参数的一切: