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
posted on 2017-06-27 12:54  绿旋风-1  阅读(683)  评论(0编辑  收藏  举报