1、关闭SELinux功能
修改配置文件(永久生效)
[root@redis_slave1 ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#' /etc/selinux/config
##用sed命令修改SELinux的状态
[root@redis_slave1 ~]# grep SELINUX=disable /etc/selinux/config ##检查是否修改成功
SELINUX=disabled
2、设定运行级别为3(文本模式)
[root@redis_slave1 ~]# grep 3:initdefault /etc/inittab ##表示已经是文本模式 id:3:initdefault: [root@redis_slave1 ~]# runlevel ##显示当前的运行级别 N 3 [root@redis_slave1 ~]# init 5 ##切换为5运行级别,如果装了桌面程序可用startx
3、优化开机启动项
1)重要的开机启动服务项
sshd 远程连接程序
rsyslog 日志相关软件
network 网络服务
sysstat 监测系统性能效率软件包,包含(iostat、mpstat、sar)
crond 计划任务
可以先全部关闭,然后再打开所需要的服务,命令如下: [root@redis_slave1 ~]# for richy in `chkconfig --list |grep 3:on|awk '{print $1}'`;do chkconfig --level 3 $richy off;done [root@redis_slave1 ~]# for richy in crond network rsyslog sshd sysstat ;do chkconfig --level 3 $richy on ;done 第二种快速处理方法:一条命令即可实现,(shell循环): [root@redis_slave1 ~]# for richy in `chkconfig --list |grep "3:on"|awk '{print $1}'|grep -vE "crond|network|sshd|rsyslog|sysstat"`;do chkconfig $richy off ;done [root@redis_slave1 ~]# chkconfig --list |grep "3:on" crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:off rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off sysstat 0:off 1:on 2:on 3:on 4:on 5:on 6:off
4、关闭iptables防火墙
在日常工作中,一般只有配置外网IP的Linux才需要开启防火墙,但即使有外网IP,高并发,高流量的业务服务器仍然不能开启防火墙,因为开启后会有较大的性能损失,导致网站访问速度慢,所以最好使用硬件防火墙了。
5、更改SSH服务器端远程登录的配置
Windows远程端口为3389,管理员是administrator,普通用户是guest;Linux管理用户是root,普通用户可以有多个,远程端口默认为22,。为了安全,我们需更改自己的SSH远程端口:
[root@localhost ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak [root@localhost ~]# vim /etc/ssh/sshd_config Port 60022 ##端口范围0-65535,建议大于1024 PermitRootLogin no ##是否允许密码为空的用户登陆 PermitEmptyPasswords no ##是否允许root用户登陆,[yes | no | without-password | forced-commands-only] UseDNS no ##指定sshd是否应该对远程主机名进行反向解析,已检查此主机名是否与其IP地址真实对应,默认为yes GSSAPIAuthentication no ##解决Linux之间使用SSH远程连接慢的问题
6、设置Linux服务器时间同步
利用定时任务每5分钟执行一次时间同步: root@localhost ~]# echo '*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1' >>/var/spool/cron/root [root@localhost ~]# crontab -l */5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1
7、调整Linux系统文件描述符数量
文件描述符是由无符号整数表示的句柄,进程使用它来标识打开的文件。文件描述符与包括相关信息(如文件的打开模式、文件的位置类型、文件的初始类型等)的文件对象相关联,这些信息被称作文件的上下文。对于内核而言,所有打开的文件都是通过文件描述符引用的。当打开一个文件,或创建一个文件,内核向进程返回一个文件描述符。当读或者写一个文件时,使用open或creat返回文件的描述符标识该文件,并将其作为参数传递给read或write,Linux服务器文件描述符设置情况可以用ulimit -n 命令,
[root@localhost ~]# ulimit -n 1024 但是对于高并发的服务器来说,这个默认设置是不够的,需要调整;可以直接编辑/etc/security/limits.conf 在结尾加上这一句: * - nofile 65535 或者直接向文件追加一句 [root@localhost ~]# echo '* - nofile 65535' >>/etc/security/limits.conf 说明:配置完成后需要重新登录才能生效 [root@localhost ~]$ ulimit -n 65535 也可以使用脚本直接把“ulimit -SHn 65535”加入到开机启动,每次开机时生效: [root@localhost ~]# cat >>/etc/rc.local<<EOF > #-s use the 'soft' resource limit > #-H use the 'hard' resource limit > #-n the maximum number of open file descriptors > ulimit -HSn 65535 > #-s the maximum stack size > ulimit -s 65535 > EOF
8、历史记录数以及登陆超时环境变量设置
[root@localhost ~]# echo 'export TMOUT=300' >>/etc/profile [root@localhost ~]# echo 'export HISTSIZE=1000' >>/etc/profile [root@localhost ~]# echo 'export HISTFILESIZE=10' >>/etc/profile [root@localhost ~]# tail -3 /etc/profile export TMOUT=300 ##连接超时时间控制变量 export HISTSIZE=1000 ##命令行的历史记录数量变量 export HISTFILESIZE=10 ##历史记录文件的命令数量变量(~/.bash_history) [root@localhost ~]# source /etc/profile
linux内核调优:
方法只对拥有大量TIME_WAIT状态的连接导致系统资源消耗有效,如果不是这种情况下,效果可能不明显。可以使用netstat命令去查TIME_WAIT状态的连接状态,输入下面的组合命令,查看当前TCP连接的状态和对应的连接数量:
netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’
这个命令会输出类似下面的结果:
LAST_ACK 16
SYN_RECV 348
ESTABLISHED 70
FIN_WAIT1 229
FIN_WAIT2 30
CLOSING 33
TIME_WAIT 18098
我们只用关心TIME_WAIT的个数,在这里可以看到,有18000多个TIME_WAIT,这样就占用了18000多个端口。
要知道端口的数量只有65535个,占用一个少一个,会严重的影响到后继的新连接。这种情况下,我们就有必要调整下Linux的TCP内核参数,让系统更快的释放TIME_WAIT连接。
用vim打开配置文件:#vim /etc/sysctl.conf
在这个文件中,加入下面的几行内容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
输入下面的命令,让内核参数生效:#sysctl -p
简单的说明上面的参数的含义:
net.ipv4.tcp_syncookies = 1
#表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1
#表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1
#表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭;
net.ipv4.tcp_fin_timeout
#修改系统默认的 TIMEOUT 时间。
在经过这样的调整之后,除了会进一步提升服务器的负载能力之外,还能够防御小流量程度的DoS、CC和SYN攻击。
此外,如果你的连接数本身就很多,我们可以再优化一下TCP的可使用端口范围,进一步提升服务器的并发能力。依然是往上面的参数文件中,加入下面这些配置:
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
#这几个参数,建议只在流量非常大的服务器上开启,会有显著的效果。一般的流量小的服务器上,没有必要去设置这几个参数。
net.ipv4.tcp_keepalive_time = 1200
#表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
net.ipv4.ip_local_port_range = 10000 65000
#表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为10000到65000。(注意:这里不要将最低值设的太低,否则可能会占用掉正常的端口!)
net.ipv4.tcp_max_syn_backlog = 8192
#表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets = 6000