一、背景
随着访问量的逐步上升,需要榨干单一服务器的性能,达到利益最大化
二、解决方案
1)、linux 系统优化:
nginx 每访问完一个文件后,linux系统将会对它的 Access,即访问时间进行修改
/dev/sdb1 /data ext3 defaults,noatime,nodiratime 0 0
要挂载的对象 挂载目录 系统类型 文件系统访问权限,禁止修改访问时间 开机后是否检测 出问题后是否转储
2)、优化资源限制
ulimit -n 查询单个用户对文件描述符的限制,即打开文件的个数,默认值为 1024
ulimit -u 查询单个用户最多拥有的进程数,即一个用户能打开的最大进程数量,默认8040
vi /etc/security/limits.conf
soft nofile 65535
hard nofile 65535
soft nproc 65535
hard nproc 65535
重启系统后生效
3)、优化内核TCP选项
修改以下Linux内核参数(vi /etc/sysctl.conf):
net.ipv4.tcp_max_tw_buckets = 6000 //设置 timewait 的值,默认:180000
net.ipv4.ip_local_port_range = 1024 65000 //设置系统允许打开的端口范围
net.ipv4.tcp_tw_recycle = 1 //设置是否启用 timewait 快速回收
net.ipv4.tcp_tw_reuse = 1 //设置是否开启重新使用,即允许将 TIME-WAIT sockets 重新用于新的 TCP 连接
net.ipv4.tcp_syncookies = 1 //设置是否开启 SYN Cookies,如果启用该功能,那么当出现 SYN等待队列溢出时,则使用cookie处理
net.core.somaxconn = 262144 //web应用中listen函数的backlog默认会将内核参数的 net.core.somaxconn限制到128,而NGINX_LISTEN_BACKLOG默认为 511,所以必须要调整这个值
net.core.netdev_max_backlog = 262144 //设置被输送到队列数据包的最大数目,在网卡接收数据包的速率比内核处理数据包的速率快时,那么就会出现排队现象,此参数即用来设置队列的大小
net.ipv4.tcp_max_orphans = 262144 //设置Linux能够处理不属于任何进程的套接字数量(“孤儿”进程),在快速、大量的连接中这种进程会很多,因此要适当的设置改参数,如果这种孤儿进程套接字数量大于指定的值,那么在使用 dmesg 查看时,会出现 too many of orphaned sockets 的警告
net.ipv4.tcp_max_syn_backlog = 262144 //用于记录尚未收到客户端确认信息的连接请求的最大值
net.ipv4.tcp_timestamps = 0 //设置使用时间戳作为序列号,通过这样的设置可以避免序列号被重复使用。在高速、高并发环境中,这种情况是存在的,因此通过时间戳能够让这些被看作是异常的数据包被内核接收。参数为0,代表关闭。
net.ipv4.tcp_synack_retries = 1 //设置 SYN 重试次数,在 TCP 的3次握手中的第2次握手,内核需要发送一个回应前面一个 SYN 的 ACK 的SYN,即 为了打开对方的连接,内核发出的 SYN 的次数。减小该参数的值有利于避免 DDos 攻击。
net.ipv4.tcp_syn_retries = 1 //设置内核放弃建立连接之前发送 SYN 包的数量
net.ipv4.tcp_fin_timeout = 1 //如果套接字由本端要求关闭,这个参数决定了它保持在 FIN-WAIT-2 状态的时间。对端可以出错并永远不关闭连接,甚至意外宕机。可以按此设置,但即便是一个轻载的 web 服务器,也有因为大量的死套接字而内存溢出的风险,FIN-WAIT-2 的危险性比 FIN-WAIT-1 要小,因为FIN-WAIT-2最多只消耗 1.5KB 内存,但是生存周期要长一些。
net.ipv4.tcp_keepalive_time = 30 //设置 TCP 发送 keepalive 消息的频度
4)、关闭不必要的日志记录(按照级别选择)
5)、使用 epoll
6)、服务uedbet官网手机版最新优化
worker_connections 65535
keepalive_timeout 60
client_header_buffer_size 8K
worker_rlimit_nofile 65535
7)、内存使用优化(TCMalloc)
tar -zxvf libunwind-1.2.tar.gz
cd libunwind....
CFLAGS=-fPIC ./configure
make CFLAGS=-fPIC
make CFLAGS=-fPIC install
在安装 google-perftools 时还需要添加 --enable-frame-pointers 选项
tar -zxvf google-perftools-.....tar.gz
cd google.....
./configure --prefix=/usr/local/google-perftools
make;make install;
安装 Nginx 时添加选项: --with-google_perftools_module
添加粗体uedbet官网手机版最新项:
events{}
google_perftools_profiles /tmp/tcmalloc
http{}
检查uedbet西甲体育投注: lsof -n | grep tcmalloc
nginx 11746 nobody 10w REG 253,0 0 11850490 /tmp/tcmalloc.11746 //代表生效
8)、针对下载限制流量:
server{
limit_rate_after 3m;
limit_rate 512K;
}
9)、限制用户并发连接数
http{
limit_conn_zone $binary_remote_addr zone=perip:10m; //存储会话状态
}
server{
limit_conn perip 1; //限制并发数为1
}
附:个人单机部分uedbet官网手机版最新方案
user nginx; #uedbet官网手机版最新用户
worker_processes 1; #允许进程数cpu * 核数 或者一般为 4/8,默认uedbet官网手机版最新 1
error_log /var/log/nginx/error.log; #错误日志 error PATH [ debug | info | notice | warn | error | crit ]
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
pid /var/run/nginx.pid; #进程号存放位置
worker_rlimit_nofile 65535; #一个nginx进程打开的最多文件描述符数目
events {
use epoll; #使用哪种事件模型:nginx 编译时 对内核版本高于 2.6.18的版本
multi_accept on; #nginx得到一个新连接时,接收尽可能多的连接
worker_connections 65535; #worker进程最大打开连接数ulimit -n
}
http {
client_body_timeout 1s; #用户请求体超时时间
client_max_body_size 12m; #判断请求体 Content-Length来判断请求体大小是否超过uedbet官网手机版最新值
include mime.types; #引入MIME类型
default_type application/octet-stream; #设置默认MIME类型
server_tokens off; #关闭在错误页面以及服务器头部输出nginx 版本信息
log_format main '$remote_addr - $uri - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; #日志格式
#access_log logs/access.log main;
access_log /var/log/nginx/access.log main; #请求日志
sendfile on; #是否开启高效文件传输模式
sendfile_max_chunk 100k; #每个进程每次调用传输数量的值不能大于设定值
tcp_nopush on; #告诉nginx在一个数据包里发送所有头文件,而不是一个一个发送,仅对 sendfile 有效
#keepalive_timeout 0;
keepalive_timeout 65 20; #设置与客户端长连接的超时时间
limit_req_log_level warn; #设置延时消息日志级别
limit_req_zone $binary_remote_addr zone=reqPerIp:10m rate=5r/s; #设置请求地址会话存储区域
limit_conn_zone $binary_remote_addr zone=perip:10m; #储存会话状态,用于限制用户并发连接数
#gzipuedbet官网手机版最新;
gzip on;
gzip_http_version 1.0; #对指定的HTTP请求协议版本进行压缩
gzip_disable "MSIE [1-6]."; #对一些特定的用户代理不使用压缩
gzip_types text/plain application/x-javascript text/css text/javascriptimage/jpeg image/gif image/png;
gzip_min_length 1024; #设置响应体的最小长度
gzip_comp_level 3; #设定压缩级别1-9;1-最小压缩率,最快;9-最大压缩率,最慢,占用CPU资源最大
gzip_vary on; #设定是否响应数据包添加 Vary:Accept-Encoding HTTP 头(header)
# Load config files from the /etc/nginx/conf.d directory
# The default server is in conf.d/default.conf
include /etc/nginx/conf.d/*.conf;
}