centos性能优化全记录 VPS服务器生产环境必备

之前每次装完系统后就是优化,每优化一次都耗费不少时间,这次决定做一个记录,方便自己,也方便收藏张小三资源网的朋友们。基本 上所有的VPS或服务器商家都有centos系统,就采用使用更广泛的centos系统做记录吧,虽然小三非常钟情于debian,奈何国内的很多商家抠 门的没有debian镜像,我想说不为用户考虑的服务商都不是好商家,因为我曾经想买国内一家比较有名商家的VPS,结果没有debian6,果断放弃了 呵呵,完美主义有时真的挺累。
centos系统优化必须做的几件事:

一:设置系统字符集
二:更新centos系统源
三:修改ip为静态获取,修改DNS及主机名
四:centos删除不必要的系统用户和群组
五:创建普通用户并进行sudo授权管理
六:修改S@SH端口和root账号
七:清空iptables,创建自己的防火墙规则
八:精简开机自启动服务
九:内核参数优化
十:设置一些全局变量
一:设置系统字符集
vi /etc/sysconfig/i18n
英文提示修改为:LANG=”en_US.UTF-8″
中文提示修改为:LANG=”zh_CN.UTF-8″

二:更新centos系统源

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

更换为阿里云centos6更新源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

阿里云centos5更新源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo

yum makecache
开始更新系统以及内核
yum upgrade
如果不希望升级到高版本,可采用下面的升级命令
yum --exclude=kernel* centos-release* update

三:修改ip为静态获取,修改DNS及主机名
备份网络配置
mv /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0.ori

vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 #网卡设备名称
TYPE=Ethernet #网络类型为以太网模式
IPADDR=192.168.1.10 #IP
NETMASK=255.255.255.0 #网卡对应的网络掩码
GATEWAY=192.168.1.1 #网关地址
ONBOOT=yes #是否启动引导的时候激活YES
BOOTPROTO=static #静态IP地址 dhcp为动态
NM_CONTROLLED=no #设备eth0是否可以由Network Manager图形管理工具托管
可选参数
IPV6INIT=no
IPV6_AUTOCONF=no
HWADDR=00:0C:29:D0:C7:B5 #以太网设备的对应的物理地址
UUID=080a457b-6a53-4a3a-9155-a23c1146c2c6 #通用唯一识别码

vi /etc/sysconfig/network
#是否使用网络,必须设置为yes。
NETWORKING=yes
NETWORKING_IPV6=no
#设置本机的主机名,这里设置的主机名要和/etc/hosts中设置的主机名对应
HOSTNAME=zxsdw.localdomain
#设置本机连接的网关的IP地址。例如,网关为10.0.0.1或者192.168.1.1
GATEWAY=192.168.1.1
修改主机DNS
vi /etc/resolv.conf
nameserver 8.8.8.8
nameserver 4.4.4.4
修改HOSTS
vi /etc/hosts
127.0.0.1 zxsdw.localdomain
#order hosts,bind     #解析器查询顺序是文件/etc/hosts,然后是DNS
#允许主机拥有多个ip地址
multi on
#禁止ip地址欺骗
nospoof on

重启网卡生效设置两种方法
service network restart
或者
/etc/init.d/network restart
四:centos删除没有必要的系统用户和群组
 
awk -F ":" '{print $1}' /etc/passwd
userdel adm
userdel lp
userdel sync
userdel shutdown
userdel halt
userdel news
userdel uucp
userdel operator
userdel games
userdel gopher

五:创建普通用户并进行sudo授权管理
[root@localhost~]# useradd user
[root@localhost~]# echo "123456" | passwd --stdin user  #设置密码
[root@localhost~]# vi /etc/sudoers  #或visudo打开,添加user用户所有权限
root    ALL=(ALL)       ALL
user    ALL=(ALL)       ALL

六:修改S@ SH端口和root账号
[root@localhost~]# vi /etc/ssh/sshd_config

Port xxxxx #设置SSH登陆端口最大不要超过65536
PermitRootLogin no #禁止root用户登陆
PermitEmptyPasswords no #禁止空密码登录
UseDNSno #关闭DNS查询
#小提醒:记得把修改后的端口号加入iptables中奥。

另外如果个人喜好用钥匙登陆的话也可以看这篇文章:使用密钥登录VPS服务器

七:清空iptables,创建自己的防火墙规则
iptables -F #清空所选链。这等于把所有规则一个个的删除。
iptables -X #删除指定的用户自定义链。
iptables -Z #把所有链的包及字节的计数器清空。
vi /etc/sysconfig/iptables添加如下内容。
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
#-A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
/etc/init.d/iptables save
chkconfig --level 345 iptables on
service iptables restart
八:精简开机自启动服务

查看自启动服务chkconfig --list|grep 3:on
 
或者运行如下命令开启需要的服务
for sun in crond rsyslog sshd network iptables;do chkconfig --level 3 $sun on;done


九:内核参数优化

查看内核默认参数
cat /proc/sys/net/ipv4/xxxx
cat /proc/sys/net/core/xxxx
vi /etc/sysctl.conf
添加如下参数
#关闭IPV6
net.ipv6.conf.all.disable_ipv6 = 1

#禁止转发
net.ipv4.ip_forward = 0

net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kern.maxfiles = 65536
#kern.maxfilesperproc = 32768
#kern.maxfilesperproc: 1735
(maxfilesperproc网上很多资料写的是32768,除非用异步I/O或大量线程,打开这么多的文件恐怕是不太正常的。个人建议不做修改,保留默认。)

#设置端口范围
net.ipv4.ip_local_port_range = 1000 61000

#TCP发送(w)接收(r)缓存256KB,最大缓存512KB
net.core.wmem_default = 262144
net.core.rmem_default = 262144
net.core.rmem_max = 524288
net.core.wmem_max = 524288

#默认128通,可加大。定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数。listen调用指定最大accept队列,当请求连接大于该值,后进的请求会被丢弃,nginx默认511就改511吧,内核默认128 保守的话也可设置为256,查阅资料建议是1000+
net.core.somaxconn = 511

#在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目(保守点可1000)。
net.core.netdev_max_backlog = 4096

#TCP的连接管理

当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击
net.ipv4.tcp_syncookies = 1

进入SYN包的最大请求队列.默认1024.对重负载服务器,增加该值显然有好处.
net.ipv4.tcp_max_syn_backlog = 4096

详解:http://www.piao2010.com/tags/tcp_max_syn_backlog
http://www.blogjava.net/yongboy/archive/2014/08/20/417165.html

下面两个值定义了SYN的重试次数,默认5,重试次数减少可防范少量SYN攻击。
net.ipv4.tcp_synack_retries = 3
net.ipv4.tcp_syn_retries = 4

http://baiying.blog.51cto.com/1068039/702840/
http://tech.uc.cn/?p=1790

#TCP连接的保持优化
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 5

如果某个TCP连接在idle 1200秒后,内核发起probe.
如果probe 5次(每次30秒)不成功,内核才彻底放弃,认为该连接已失效。
对服务器而言,显然默认值太大. 可如上调整。

#net.ipv4.tcp_tw_reuse = 1
#时间戳
net.ipv4.tcp_timestamps = 0
时间戳详解http://blog.csdn.net/gzh0222/article/details/8000508

net.ipv4.tcp_fin_timeout = 30


下面参数可自行考虑。
#默认18W,降低只是抵御简单DOS,不要人为降低,做NAT网络干净可适当增加
#net.ipv4.tcp_max_tw_buckets = 20000
#除非得到技术专家的建议,请不要随意修改这个值默认是0。
#net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_sack = 1
该文件表示是否启用有选择的应答(Selective Acknowledgment),这可以通过有选择地应答乱序接收到的报文来提高性能(这样可以让发送者只发送丢失的报文段);(对于广域网通信来说)这个选项应该启用,但是这会增加对 CPU 的占用。 缺省设置:1

net.ipv4.tcp_window_scaling = 1
该文件表示设置tcp/ip会话的滑动窗口大小是否可变。参数值为布尔值,为1时表示可变,为0时表示不可变。tcp/ip通常使用的窗口最大可达到65535 字节,对于高速网络,该值可能太小,这时候如果启用了该功能,可以使tcp/ip滑动窗口大小增大数个数量级,从而提高数据传输的能力。   缺省设置:1

十:设置一些全局变量

闭重启ctl-alt-delete组合键
vi /etc/init/control-alt-delete.conf
#exec /sbin/shutdown -r now "Control-Alt-Deletepressed"

#设置自动退出终端,防止非法关闭ssh客户端造成登录进程过多,可以设置大一些,单位为秒
echo "TMOUT=3600">> /etc/profile
#历史命令记录数量设置为10条
sed -i "s/HISTSIZE=1000/HISTSIZE=10/" /etc/profile
#立即生效source /etc/profile

#centos6.5已经不自动安装sendmail了所以没必要走这一步优化
mkdir -p /server/scripts
vi /server/scripts/spool_clean.sh
#!/bin/sh
find/var/spool/clientmqueue/-typef -mtime +30|xargsrm-f
设置完成记得reboot重启生效。
内核优化里net.ipv4.tcp_tw_reuse = 1 开启此参数可能造成未知问题
net.ipv4.tcp_wmem(tcp_mem | tcp_rmem)默认情况下, 协议栈通常是按net.core.wmem_default 和net.core.wmem_max 的值来分配内存的。
net.core.wmem_default = 262144 (256KB)
net.core.rmem_default = 262144
net.core.rmem_max = 524288 (524kb)
net.core.wmem_max = 524288 (524kb)
参考:
my.oschina.net/u/162204/blog/53754
colobu.com/2014/09/18/linux-tcpip-tuning/
lvtao.net/server/sysctl.html
wenku.baidu.com/view/5ff10fbf6294dd88d0d26b73.html?re=view
360doc.com/content/14/0606/16/3300331_384326124.shtml
aixchina.net/club/viewthread.php?tid=76434
jaseywang.me/2012/05/09/%E5%85%B3%E4%BA%8E-out-of-socket-memory-%E7%9A%84%E8%A7%A3%E9%87%8A-2/
cnblogs.com/shanyou/archive/2012/01/29/2330997.html

分割线
感谢打赏
江西数库信息技术有限公司
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS