linux 内核优化&系统初始化
Posted 疯飙的蜗牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 内核优化&系统初始化相关的知识,希望对你有一定的参考价值。
整理资料,发现只记录了参数,没有备注,故重新整理下:
1、首先贴出一个常用
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.ip_local_reserved_ports = 41490,41488
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_buckets = 40000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.optmem_max = 81920
net.core.somaxconn = 65535
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_fin_timeout = 30
vm.swappiness = 0
net.ipv4.ip_local_reserved_ports = 80,8001-8100,8888-8890
vm.max_map_count=655360
net.ipv4.ip_local_port_range = 1024 65535
2、针对各项进行详细解释下
net.ipv4.ip_forward = 0
#关闭路由转发,vpn等需要开启
#出于安全考虑,Linux系统默认是禁止数据包转发的。
#所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包。这通常就是路由器所要实现的功能。net.ipv4.conf.default.rp_filter = 1
#开启数据包源地址的校验,可减少ddos攻击,防止IP欺骗
#0:不开启源地址校验。
#1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。
#2:开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),如果反向路径不同,则直接丢弃该数据包net.ipv4.conf.default.accept_source_route = 0
#禁止IP源路由kernel.sysrq = 0
#使用sysrq组合是debug内核常用的工具方法,为安全起见设为0关闭
#sysrq是内建与linux内核的调试工具,只要内核没有完全锁住,不管什么操作,使用其都可以搜集到系统内存使用、cpu任务处理、进程运行状态等系统运行信息kernel.core_uses_pid = 1
#控制core文件的文件名是否添加pid作为扩展
#系统不寻常退出时,内核会在当前工作目录下生成一个core文件,使用gdb来查看。
#若系统生成的core文件不带其它任何扩展名称,则全部命名为core,新生成的core文件会覆盖原来的core文件net.ipv4.tcp_syncookies = 1
#每个消息队列的大小(单位:字节)限制,打开syncookie缓解syn flood攻击
#在服务器收到tcp syn包并返回tcp syn+ack包时,不专门分配一个数据区,而是根据这个syn包计算出一个cookie值
#在收到tcp ack包时,根据cookie检查包的合法性。如果合法,再分配专门的数据区进行处理未来的tcp连接,默认0,1表示开启kernel.msgmnb = 65536
#该文件指定在一个消息队列中最大的字节数 缺省设置:16384。kernel.msgmax = 65536
#该文件指定了从一个进程发送到另一个进程的消息最大长度。进程间的消息传递是在内核的内存中进行的。不会交换到硬盘上。所以如果增加该值,则将增加操作系统所使用的内存数量。kernel.shmmax = 68719476736
#该参数定义了共享内存段的最大尺寸(以字节为单位)。默认是32M。kernel.shmall = 4294967296
#该参数表示统一一次可以使用的共享内存总量(以页为单位)。默认是2097152,通常不需要修改。net.ipv4.tcp_max_tw_buckets = 40000
#所允许存在time_wait状态的最大数值,超过则立刻被清楚并且警告
#如不是类似nginx之类的中间代理,不担心端口耗尽,可以在内存大的情况增加这个值net.ipv4.tcp_sack = 1
#关闭tcp_sack
#开启有选择的应答
#可以通过有选择的应答乱序收到的报文来提高性能net.ipv4.tcp_window_scaling = 1
#支持更大的TCP窗口. 如果TCP窗口最大超过65535(64K), 必须设置该数值为1net.core.wmem_default = 8388608
#为TCP socket预留用于发送缓冲的内存默认值(单位:字节)net.core.rmem_default = 8388608
#为TCP socket预留用于接收缓冲的内存默认值(单位:字节)net.core.rmem_max = 16777216
#为TCP socket预留用于接收缓冲的内存最大值(单位:字节)net.core.wmem_max = 16777216
#为TCP socket预留用于发送缓冲的内存最大值(单位:字节)net.core.netdev_max_backlog = 262144
#每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目net.core.optmem_max = 81920
#表示每个socket所允许的最大缓冲区的大小(字节)net.core.somaxconn = 65535
#表示socket监听(listen)的backlog上限,默认为128net.ipv4.tcp_max_orphans = 3276800
#系统所能处理不属于任何进程的TCP sockets最大数量
net.ipv4.tcp_max_syn_backlog = 262144
#记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存的系统则是128net.ipv4.tcp_timestamps = 0
#时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉net.ipv4.tcp_synack_retries = 1
#为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量net.ipv4.tcp_syn_retries = 1
#在内核放弃建立连接之前发送SYN包的数量net.ipv4.tcp_tw_recycle = 1
#开启TCP连接中time_wait sockets的快速回收,默认是0,表示关闭net.ipv4.tcp_tw_reuse = 1
#开启TCP连接复用功能,允许将time_wait sockets重新用于新的TCP连接(主要针对time_wait连接),默认是0,表示关闭net.ipv4.tcp_mem = 94500000 915000000 927000000
#1st低于此值,TCP没有内存压力,2nd进入内存压力阶段,3rdTCP拒绝分配socket(单位:内存页)net.ipv4.tcp_rmem = 4096 87380 8388608
#TCP读buffernet.ipv4.tcp_wmem = 4096 87380 8388608
#TCP写buffer
#为自动调优定义每个socket使用的内存
#第一个值为socket的发送缓冲区分配的最小字节数
#第二个值是默认值,会被vmem_default覆盖,缓冲区在系统负载不重的情况下可以增长到这个值
#第三个值是发送缓冲区空间的最大字节数,会被wmem_max覆盖net.ipv4.tcp_keepalive_time = 1200
#在TCP开始发送保持连接探测之前,连接空闲的秒数,默认7200秒net.ipv4.tcp_keepalive_intvl = 60
#CP保持连接探测之间的秒数。默认值75net.ipv4.tcp_keepalive_probes = 3
#探测的最大数目,在放弃连接和终止连接之前,如果没有从另一端获得响应。默认为9net.ipv4.tcp_fin_timeout = 30
#表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间vm.swappiness = 0
#默认值为60,它表示激活交换之前可用内存的百分比。值越低,使用的交换越少,并且物理内存中保留的内存页越多。
# 0:禁用交换
# 1:不完全禁用交换的最小数量
# 10:当系统中有足够内存时为提高性能而推荐的值
# 100:主动交换net.ipv4.ip_local_reserved_ports = 80
#预留端口,避免占用vm.max_map_count=655360
#一个进程可以拥有的vma虚拟内存区域的数量。默认65536
#虚拟内存区域是一个连续的虚拟地址空间区域。在进程的生命周期中,每当程序尝试在内存中映射文件,链接到共享内存段,或者分配堆空间的时候,这些区域将被创建。
#调优这个值将限制进程可拥有VMA的数量。限制一个进程拥有VMA的总数可能导致应用程序出错,因为当进程达到了VMA上线但又只能释放少量的内存给其他的内核进程使用时,操作系统会抛出内存不足的错误。
#如果你的操作系统在NORMAL区域仅占用少量的内存,那么调低这个值可以帮助释放内存给内核用。net.ipv4.ip_local_port_range = 1024 65535
#对外连接端口范围,默认为32768-61000
3、centos 初始化脚本都包括什么
#!/bin/bash
set -e
set -x
#关闭selinux
if /usr/sbin/sestatus | /bin/fgrep 'enable'; then
/usr/sbin/setenforce 0;
/bin/sed -ri '/^SELINUX=\\w+$/ s//SELINUX=disabled/' /etc/selinux/config;
fi;
#开机自启动文件,添加执行权限
chmod 755 /etc/rc.d/rc.local
#添加自己的dns
dnsinfo=`cat /etc/resolv.conf |grep '192.168.1.1'|wc -l`
if [ $dnsinfo -gt 1 ];then
echo "nameserver 192.168.1.1" >>/etc/resolv.conf
fi
#关闭chronyd时钟同步服务,使用ntp进行时间同步,这个主要看运行的什么服务,chrony比ntp更好,但是在我们服务上不适用
if [ `systemctl list-unit-files |grep chronyd.service |awk ' if($2) print $2 '`x = "enabled"x ];then
`systemctl stop chronyd`
`systemctl disable chronyd`
fi
#设置东八区,开启ntp定期时间同步
/usr/bin/timedatectl set-timezone Asia/Shanghai
/usr/sbin/ntpdate 192.168.1.1; ##自己搭建的
echo '1 1 * * * /usr/sbin/ntpdate 192.168.1.1' >> /var/spool/cron/root
#system && kernel set
echo 'net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.ip_local_reserved_ports = 41490,41488
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_buckets = 40000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.optmem_max = 81920
net.core.somaxconn = 65535
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_fin_timeout = 30
vm.swappiness = 0
net.ipv4.ip_local_reserved_ports = 80
vm.max_map_count=655360
net.ipv4.ip_local_port_range = 1024 65535' > /etc/sysctl.conf
limits_num=`cat /etc/security/limits.conf|grep 102400|wc -l`
if [ $limits_num -ge 2]; then
echo "is already here"
break
else
sed -i '/# End of file/ i\\* soft nofile 102400' /etc/security/limits.conf
sed -i '/# End of file/ i\\* hard nofile 102400' /etc/security/limits.conf
fi
sed -i 's/* soft nproc 1024/* soft nproc 65535/g' /etc/security/limits.d/20-nproc.conf
ulimit -n 102400
sysctl -p
#####iptables
systemctl stop firewalld
systemctl disable firewalld
#建立data数据存储目录
if [ -d /data ];then
echo "the dir data is already"
else
mkdir /data
fi
chmod 777 -R /data
#创建一个具有sudo 权限的组,并建立一个ops运维帐号
group_admin=`cat /etc/group |grep admin |wc -l`
if [ $group_admin -ge 1 ];then
echo "the group admin is already "
else
groupadd admin
echo "%admin ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
useradd ops -g admin
echo "ops:ops1234"|chpasswd
fi
####添加自己做的yum源
/usr/bin/wget -c -O /etc/yum.repos.d/yoyi.repo http://yum.zijide.com/yum/mirror/yum-new.repo
/usr/bin/yum clean all
/usr/bin/yum makecache fast
####更新一些常用的包
/usr/bin/yum install net-tools git wireshark cmake compat-libstdc++-33 libjpeg libpng libpng-devel freetype freetype-devel gcc gcc-c++ gdb apr apr-devel apr-util-devel apr-util db4 db4-devel expat expat-devel boost boost-devel libevent libevent-devel openssl openssl-devel bzip2 bzip2-devel flex byacc readline readline-devel pcre pcre-devel python python-devel vim wget curl libcurl-devel m4 bison emacs libxml2 libxml2-devel libstdc++ libstdc++-devel ncurses ncurses-devel lrzsz openssh-clients lzo make sysstat rdate rsync lzma dmidecode pciutils ftp telnet libtool glib2-devel libtool-ltdl libtool-ltdl-devel uuid file uuid-devel e2fsprogs-devel libuuid-devel libxslt-devel man subversion subversion-devel zip unzip patch lzo-devel lsof man-pages fprintd-pam screen nc python-crypto m2crypto crypto-utils lynx enca libjpeg-devel expect scons zip unzip strace mailx lsof tcpdump nmap tmux mtr ntpdate net-snmp net-snmp-devel gd-devel jpeg-devel ntsysv setuptool netconfig psacct bind-utils iotop tmpwatch libaio perl-DBD-mysql perl-DBI perl-devel jemalloc -y
#####去除系统及内核版本登录前的屏幕显示
cat /dev/null >/etc/issue
#安装zabbix监控,更改自己的监控服务器ip,默认被动模式
yum -y install zabbix-agent
sed -i "s/Server=127.0.0.1/Server=192.168.1.2/g" /etc/zabbix/zabbix_agentd.conf
systemctl restart zabbix-agent
#安装clamav
yum -y install clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-scanner-systemd clamav-devel clamav-lib clamav-server-systemd
sed -i -e "s/^Example/#Example/" /etc/freshclam.conf
sed -i -e "s/^Example/#Example/" /etc/clamd.d/scan.conf
echo "LocalSocket /var/run/clamd.scan/clamd.sock" >> /etc/clamd.d/scan.conf
ln -sb '/usr/lib/systemd/system/clamd@scan.service' '/etc/systemd/system/multi-user.target.wants/clamd@scan.service'
systemctl restart clamd@scan
####锁定关键文件系统
chattr +i /etc/passwd
chattr +i /etc/group
chattr +i /etc/shadow
以上是关于linux 内核优化&系统初始化的主要内容,如果未能解决你的问题,请参考以下文章
Linux内存从0到1学习笔记(九,内存优化调试之一 - kswapd0)