Linux 优化实战(网络层面和系统层面的系统优化)
内核参数的优化必定需要修改内核的参数,而修改参数有两种方式。
1、使用echo value方式直接追加到文件里如echo "1" >/proc/sys/net/ipv4/tcp_syn_retries,但这种方法设备重启后又会恢复为默认值
2、把参数添加到/etc/sysctl.conf中,然后执行sysctl -p使参数生效,永久生效
当然了,建议使用永久生效的方法,因为优化的参数基本都是针对网络层面的优化,并不会对系统造成大的破坏。
常用的内核优化参数有以下:
net.ipv4.ip_default_ttl=128#伪装成Windows主机,ping本机时的ttl值为128,Linux系统为64.
net.ipv4.tcp_syn_retries = 1#表示本机向外发起TCP SYN连接超时重传的次数,通俗的说,tcp握手失败后重连次数,不超过#2,因为流量过大时,网络资源会很快耗尽,小站可提高数值,大站不要过大。
net.ipv4.tcp_synack_retries = 1#同上,其实1也就是象征性的重连,表示尽力了。真的网络有问题,多大都不行。
net.ipv4.tcp_keepalive_time = 600#如果某个TCP连接一直不活跃600秒后,内核才发起probe.如果probe 3次(每次15秒)不成功,内#核才彻底放弃,认为该连接已失效。
net.ipv4.tcp_keepalive_probes = 3#三个keep是一起的
net.ipv4.tcp_keepalive_intvl =15#这三个keep是一起的
net.ipv4.tcp_retries2 = 5#
net.ipv4.tcp_fin_timeout = 2#减少处于等待-连接状态的时间,类似网络垃圾链接,使系统可以处理更多的连接
net.ipv4.tcp_max_tw_buckets = 36000#系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。
net.ipv4.tcp_tw_recycle = 1#打开TIME-WAIT套接字重用功能,对于存在大量连接的Web服务器非常有效,表示允许将TIME_WAIT状态的socket重新用于新的TCP链接
net.ipv4.tcp_tw_reuse = 1#打开TIME-WAIT套接字重用功能,对于存在大量连接的Web服务器非常有效
net.ipv4.tcp_max_orphans = 32768#系统所能处理不属于任何进程的TCP sockets最大数量,设定系统中最多允许存在多少tcp套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,没有与用户文件句柄关联的tcp套接字符将立即被复位,同时给出警告信息。这个限制只是为了防止简单的DoS工具。一般在系统内存比较充足的情况下,可以增大这个参数的赋值
net.ipv4.tcp_syncookies = 1#防范洪水攻击
net.ipv4.tcp_max_syn_backlog = 16384#进入SYN包的最大请求队列.默认1024
net.ipv4.ip_local_port_range = 1024 65000#本机向外连接提供的端口范围
net.ipv4.ip_conntrack_max = 65536#最大网络连接数
net.ipv4.netfilter.ip_conntrack_max=65536#
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180#
net.core.somaxconn = 16384#选项默认值是128,这个参数用于调节系统同时发起的TCP连接数,在高并发的请求中,默认的值可能会导致链接超时或者重传,因此需要结合高并发请求数来调节此值。
net.core.netdev_max_backlog = 16384#表示当每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数目,一般默认值为128(可能不同的linux系统该数值也不同)。nginx服务器中定义NGX_LISTEN_BACKLOG默认为511。
net.ipv4.tcp_wmem = 8192 131072 16777216#定义TCP发送缓存的最小值、默认值、较大值。
net.ipv4.tcp_rmem = 32768 131072 16777216#定义了TCP接受缓存的最小值、默认值、较大值
net.ipv4.tcp_mem = 786432 1048576 1572864#增加TCP最大缓冲区大小
fs.inotify.max_queued_events = 327679
fs.inotify.max_user_instances = 128
fs.inotify.max_user_watches = 50000000#这六个最好是sysctl -a 查询出来是多少就写多少
[root@localhost ~]# sysctl -a | grep fs.inotify
fs.inotify.max_queued_events = 327679
fs.inotify.max_user_instances = 128#这个数值可以不用查询出的数值,一般为1024即可。
fs.inotify.max_user_watches = 50000000
sysctl -a 查出来是多少就写多少
================================================================================
vim /etc/security/limits.conf#末尾添加如下内容:系统最大打开文件数
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* soft nproc 65535
#如果65535不够,可以在增加。这个是针对用户层面的。limits.conf文件内的是针对所有用户的(因为是*,代表所有用户)。
fs.file-max = 1048575# 增加系统文件描述符限制 2^20-1。这个是在sysctr.conf文件内的,是针对系统的修改。
kernel.watchdog_thresh=60#防止系统太快崩溃,如果重新编译内核时并没有选择watchdog模块,无需配置。