CentOS系统安装之后并不能立即投入生产环境使用,往往需要先经过我们运维人员的优化才行。在此讲解几点关于Linux系统安装后的基础优化操作。注意:本次优化都是基于CentOS(5.8/6.4)。

下面我就为大家简单讲解几点关于Linux系统安装后的基础优化操作。

注意:本次优化都是基于CentOS(5.8/6.4)。关于5.8和6.4两者优化时的小区别,我会在文中提及的。

优化条目:

1

2

3

4

5

6

7

8

9

10

11

12

13

修改ip地址、网关、主机名、DNS等

关闭selinux,清空iptables

添加普通用户并进行sudo授权管理

更新yum源及必要软件安装

定时自动更新服务器时间

精简开机自启动服务

定时自动清理/var/spool/clientmqueue/目录垃圾文件,放置inode节点被占满

变更默认的ssh服务端口,禁止root用户远程连接

锁定关键文件系统

调整文件描述符大小

调整字符集,使其支持中文

去除系统及内核版本登录前的屏幕显示

内核参数优化

1、修改ip地址、网关、主机名、DNS等

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0 #网卡名字

BOOTPROTO=static #静态IP地址获取状态 如:DHCP表示自动获取IP地址

IPADDR=192.168.1.113 #IP地址

NETMASK=255.255.255.0 #子网掩码

ONBOOT=yes#引导时是否激活

GATEWAY=192.168.1.1

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=static

IPADDR=192.168.1.113

NETMASK=255.255.255.0

ONBOOT=yes

GATEWAY=192.168.1.1

[root@localhost ~]# vi /etc/sysconfig/network

HOSTNAME=c64 #修改主机名,重启生效

GATEWAY=192.168.1.1 #修改默认网关,如果上面eth0里面不配置网关的话,默认就使用这里的网关了。

[root@localhost ~]# cat /etc/sysconfig/network

HOSTNAME=c64

GATEWAY=192.168.1.1

我们也可以用 hostnamec64 来临时修改主机名,重新登录生效

修改DNS

[root@localhost ~]# vi /etc/resolv.conf #修改DNS信息

nameserver 114.114.114.114

nameserver 8.8.8.8

[root@localhost ~]# cat /etc/resolv.conf #查看修改后的DNS信息

nameserver 114.114.114.114

nameserver 8.8.8.8

[root@localhost ~]# service network restart #重启网卡,生效

重启网卡,也可以用下面的命令

[root@localhost ~]# /etc/init.d/network restart


2、关闭selinux,清空iptables

关闭selinux

1

2

3

4

5

6

[root@c64 ~]# sed �Ci ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config #修改配置文件则永久生效,但是必须要重启系统。

[root@c64 ~]# grep SELINUX=disabled /etc/selinux/config

SELINUX=disabled #查看更改后的结果

[root@c64 ~]# setenforce 0#临时生效命令

[root@c64 ~]# getenforce #查看selinux当前状态

Permissive

清空iptables

1

2

3

4

5

6

7

8

9

[root@c64 ~]# iptables �CF #清理防火墙规则

[root@c64 ~]# iptables �CL #查看防火墙规则

Chain INPUT (policy ACCEPT)

target prot opt source destination

Chain FORWARD (policy ACCEPT)

target prot opt source destination

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

[root@c64 ~]#/etc/init.d/iptables save #保存防火墙配置信息

3、添加普通用户并进行sudo授权管理

1

2

3

4

5

[root@c64 ~]# useradd sunsky

[root@c64 ~]# echo "123456"|passwd --stdin sunsky&&history �Cc

[root@c64 ~]# visudo

在root ALL=(ALL) ALL此行下,添加如下内容

sunsky ALL=(ALL) ALL

4、更新yum源及必要软件安装

yum安装软件,默认获取rpm包的途径从国外官方源,改成国内的源。

国内较快的两个站点:搜狐镜像站点、网易镜像站点

法1:自己配置好安装源配置文件,然后上传到linux。

法2:使用镜像站点配置好的yum安装源配置文件

1

2

3

[root@c64 ~]# cd /etc/yum.repos.d/

[root@c64 yum.repos.d]# /bin/mv CentOS-Base.repo CentOS-Base.repo.bak

[root@c64 yum.repos.d]# wget http://mirrors.163.com/.help/CentOS6-Base-163.repo

接下来执行如下命令,检测yum是否正常

1

2

[root@c64 yum.repos.d]# yum clean all #清空yum缓存

[root@c64 yum.repos.d]# yum makecache #建立yum缓存

然后使用如下命令将系统更新到最新

1

2

[root@c64 yum.repos.d]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY* #导入签名KEY到RPM

[root@c64 yum.repos.d]# yum upgrade-y #更新系统内核到最新

接下来就要安装几个必要的软件了

1

[root@c64 yum.repos.d]# yum install lrzsz ntpdate sysstat -y

lrzsz是一个上传下载的软件

sysstat是用来检测系统性能及效率的工具

5、定时自动更新服务器时间

1

2

[root@c64 ~]# echo '*/5 * * * * /usr/sbin/ntpdate time.windows.com >/dev/null 2 >&1' >>/var/spool/cron/root

[root@c64 ~]# echo '*/10 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1' >>/var/spool/cron/root

提示:CentOS6.4的时间同步命令路径不一样

6是/usr/sbin/ntpdate

5是/sbin/ntpdate

扩展:在机器数量少时,以上定时任务同步时间就可以了。如果机器数量大时,可以在网内另外部署一台时间同步服务器NTPServer。此处仅提及,不做部署。

时间同步服务器架构图:

\133048286.png\

6、精简开机自启动服务

刚装完操作系统可以只保留crondnetworksyslogsshd这四个服务。(Centos6.4rsyslog

1

2

3

4

5

6

7

[root@c64 ~]# for sun in `chkconfig --list|grep 3:on|awk '{print $1}'`;do chkconfig --level 3 $sun off;done

[root@c64 ~]# for sun in crond rsyslog sshd network;do chkconfig --level 3 $sun on;done

[root@c64 ~]# 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

7、定时自动清理/var/spool/clientmqueue/目录垃圾文件,放置inode节点被占满

本优化点,在6.4上可以忽略不需要操作即可!

1

2

3

4

[root@c64 ~]# mkdir /server/scripts -p

[root@c64 ~]# vi /server/scripts/spool_clean.sh

#!/bin/sh

find/var/spool/clientmqueue/-typef -mtime +30|xargsrm-f

然后将其加入到crontab定时任务中

1

[root@c64 ~]# echo '*/30 * * * * /bin/sh /server/scripts/spool_clean.sh >/dev/null 2>&1'>>/var/spool/cron/root

8、变更默认的ssh服务端口,禁止root用户远程连接

1

2

3

4

5

6

7

8

9

[root@c64 ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

[root@c64 ~]# vim /etc/ssh/sshd_config

Port 52113#ssh连接默认的端口

PermitRootLogin no #root用户黑客都知道,禁止它远程登录

PermitEmptyPasswords no #禁止空密码登录

UsednS no #不使用DNS

[root@c64 ~]# /etc/init.d/sshd reload #从新加载配置

[root@c64 ~]# netstat -lnt #查看端口信息

[root@c64 ~]# lsof -i tcp:52113

9、锁定关键文件系统

1

2

3

4

5

[root@c64 ~]# chattr +i /etc/passwd

[root@c64 ~]# chattr +i /etc/inittab

[root@c64 ~]# chattr +i /etc/group

[root@c64 ~]# chattr +i /etc/shadow

[root@c64 ~]# chattr +i /etc/gshadow

使用chattr命令后,为了安全我们需要将其改名

1

[root@c64 ~]# /bin/mv /usr/bin/chattr /usr/bin/任意名称

10、调整文件描述符大小

1

2

3

[root@localhost ~]# ulimit �Cn #查看文件描述符大小

1024

[root@localhost ~]# echo '* - nofile 65535' >> /etc/security/limits.conf

配置完成后,重新登录即可查看。

提示:也可以把ulimit-SHn65535命令加入到/etc/rc.local,然后每次重启生效

1

2

3

4

5

6

[root@c64 ~]# cat >>/etc/rc.local<<>

#open files

ulimit -HSn 65535

#stack size

ulimit -s 65535

EOF

扩展:文件描述符

文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于Unix、Linux这样的操作系统

习惯上,标准输入(standardinput)的文件描述符是0,标准输出(standardoutput)是1,标准错误(standarderror)是2。尽管这种习惯并非Unix内核的特性,但是因为一些shell和很多应用程序都使用这种习惯,因此,如果内核不遵循这种习惯的话,很多应用程序将不能使用。

11、调整字符集,使其支持中文

1

2

sed-i 's#LANG="en_US.UTF-8"#LANG="zh_CN.GB18030"#'/etc/sysconfig/i18n

source/etc/sysconfig/i18n

扩展:什么是字符集?

简单的说就是一套文字符号及其编码。常用的字符集有:

GBK定长双字节不是国际标准,支持系统不少

UTF-8非定长1-4字节广泛支持,MysqL也使用UTF-8

12、去除系统及内核版本登录前的屏幕显示

1

2

[root@c64 ~]# >/etc/redhat-release

[root@c64 ~]# >/etc/issue

13、内核参数优化

说明:本优化适合apache,Nginx,squid多种等web应用,特殊的业务也可能需要略作调整。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

[root@c64 ~]# vi /etc/sysctl.conf

#by sun in 20131001

net.ipv4.tcp_fin_timeout = 2

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_keepalive_time =600

net.ipv4.ip_local_port_range = 4000 65000

net.ipv4.tcp_max_syn_backlog = 16384

net.ipv4.tcp_max_tw_buckets = 36000

net.ipv4.route.gc_timeout = 100

net.ipv4.tcp_syn_retries = 1

net.ipv4.tcp_synack_retries = 1

net.core.somaxconn = 16384

net.core.netdev_max_backlog = 16384

net.ipv4.tcp_max_orphans = 16384

#一下参数是对iptables防火墙的优化,防火墙不开会有提示,可以忽略不理。

net.ipv4.ip_conntrack_max = 25000000

net.ipv4.netfilter.ip_conntrack_max = 25000000

net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180

net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120

net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60

net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120

[root@localhost ~]# sysctl �Cp #使配置文件生效

提示:由于CentOS6.X系统中的模块名不是ip_conntrack,而是nf_conntrack,所以在/etc/sysctl.conf优化时,需要把net.ipv4.netfilter.ip_conntrack_max这种老的参数,改成net.netfilter.nf_conntrack_max这样才可以。

即对防火墙的优化,在5.8上是

1

2

3

4

5

6

net.ipv4.ip_conntrack_max = 25000000

net.ipv4.netfilter.ip_conntrack_max = 25000000

net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180

net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120

net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60

net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120

在6.4上是

1

2

3

4

5

6

net.nf_conntrack_max = 25000000

net.netfilter.nf_conntrack_max = 25000000

net.netfilter.nf_conntrack_tcp_timeout_established = 180

net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120

net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60

net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120

另外,在此优化过程中可能会有报错:

1、5.8版本上

1

2

3

4

5

6

error: "net.ipv4.ip_conntrack_max"is an unkNown key

error: "net.ipv4.netfilter.ip_conntrack_max"is an unkNown key

error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_established"is an unkNown key

error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait"is an unkNown key

error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait"is an unkNown key

error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait"is an unkNown key

这个错误可能是你的防火墙没有开启或者自动处理可载入的模块ip_conntrack没有自动载入,解决办法有二,一是开启防火墙,二是自动处理开载入的模块ip_conntrack

1

2

modprobe ip_conntrack

echo "modprobe ip_conntrack">> /etc/rc.local

2、6.4版本上

1

2

3

4

5

6

error: "net.nf_conntrack_max"isan unkNown key

error: "net.netfilter.nf_conntrack_max"isan unkNown key

error: "net.netfilter.nf_conntrack_tcp_timeout_established"isan unkNown key

error: "net.netfilter.nf_conntrack_tcp_timeout_time_wait"isan unkNown key

error: "net.netfilter.nf_conntrack_tcp_timeout_close_wait"isan unkNown key

error: "net.netfilter.nf_conntrack_tcp_timeout_fin_wait"isan unkNown key

这个错误可能是你的防火墙没有开启或者自动处理可载入的模块ip_conntrack没有自动载入,解决办法有二,一是开启防火墙,二是自动处理开载入的模块ip_conntrack

1

2

modprobe nf_conntrack

echo "modprobe nf_conntrack">> /etc/rc.local

3、6.4版本上

1

2

3

error: "net.bridge.bridge-nf-call-ip6tables"isan unkNown key

error: "net.bridge.bridge-nf-call-iptables"isan unkNown key

error: "net.bridge.bridge-nf-call-arptables"isan unkNown key

这个错误是由于自动处理可载入的模块bridge没有自动载入,解决办法是自动处理开载入的模块ip_conntrack

1

2

modprobe bridge

echo "modprobe bridge">> /etc/rc.local

到此,我们Linux系统安装后的基础优化已经操作的差不多了,总结下来一共有13个优化点需要我们来熟知。后面我会出一个一键优化的shell脚本出来和大家一起交流学习。

本文出自 “老男孩linux培训” 博客,请务必保留此出处http://oldboy.blog.51cto.com/2561410/1336488

CentOS5.8/6.4linux生产环境若干优化实战的更多相关文章

  1. 当iOS应用程序进入后台时,TCP和UDP(与多播)连接会发生什么

    我创建了几个实验:设置1:我创建了一个TCPSender应用程序和一个TCPReceiver应用程序.在本次实验中,我在iOS设备上启动了TCPSender,在另一台iOS设备上启动了TCPReceiver.然后两者都经过验证已建立连接并发送和接收数据.然后我将TCPReceiver应用程序置于后台.TCPSender应用程序指示连接丢失和崩溃(是的,我打算这样).设置2:我创建了一个UDPSen

  2. iOS – 友好的NSDate格式

    我需要在我的应用程序中显示帖子的日期给用户,现在我用这种格式:“5月25日星期五”.如何格式化NSDate以阅读“2小时前”的内容?使其更加用户友好.解决方法NSDateFormatter不能做这样的事情;你将需要建立自己的规则.我想像:所以这是打印’x分钟前’或’x小时前’从日期起24小时,通常是一天.

  3. ios – AFNetworking / NSURLConnection接收NSPOSIXErrorDomain代码= 9“操作无法完成.坏文件描述符“

    有人在他们的AFNetworking操作中遇到这个错误吗?此外,如果我真的想要,如何故意关闭这个文件描述符?

  4. ios – Xcode上传错误:无法打开ssh会话. (16)

    注意:我们终于上传了该应用程序,但是我们并没有真正解决这个问题,所以如果有人可以分享一些有关这个问题的宝贵意见或经验,我将不胜感激.我也检查了以下2个类似的问题,但这些没有帮助:>Erroruploadingiosapplicationtoitunesconnect“failedtoopensshsession(16)”>AppStoresubmission/distributionerror“f

  5. 在iOS中,如何增加主机的HTTP连接限制?

    使用Xcode网络工具,我分析说,我每次只能建立每个主机的4个TCP连接.似乎iOS的每个主机的默认TCP连接限制为4.我们如何增加这个限制?

  6. 记一次云计算测试实验-openstack-icehouse-安装swift

    -----------------------controller:---------------------------------sourceadmin-openrc.shkeystoneuser-create--name=swift--pass=000000--email=swift@localhostkeystoneuser-role-add--user=swift--tenant=ser

  7. Swift开发:GCDAsyncSocket通信之TCP服务器

    overridefuncviewDidLoad(){super.viewDidLoad()clientSockets=NSMutableArray()msgTextView.backgroundColor=UIColor.grayColor()msgTextView.text="接收的客户端消息:\n"}//发送消息按钮@IBActionfuncsendBtnClick{ifclientSockets.count==0{return}letmsg=inputTextInput.text!//1.处理请求,

  8. Swift开发:GCDAsyncSocket通信之TCP 客户端

    varmainQueue=dispatch_get_main_queue()overridefuncviewDidLoad(){super.viewDidLoad()}//连接服务器按钮事件@IBActionfuncconBtnClick{do{clientSocket=GCDAsyncSocket()clientSocket.delegate=selfclientSocket.delegateQueue=dispatch_get_global_queue(0,0)tryclientSocket.conn

  9. 与Swift 2中的防火墙指针

    我正在尝试检查用户是否具有互联网连接,部分过程涉及使用UnsafePointer调用。与Swift2.x中的防火墙指针一起使用的正确方法是什么?

  10. Swift游乐场和模拟器错误(ipc / mig)服务器死机,无法启动iOS模拟器

    您的防火墙阻止调试器,您需要允许它连接:TCP出127.0.0.1:63748或者允许调试服务器进程打开访问.一旦启用它,并重新启动Xcode,所有的应该像一个魅力一样工作.注意/更新:如果您无法找到或允许调试服务器,只需暂时尝试禁用防火墙并重新启动xcode.操场是否奏效?哦,不要忘了确保你的助理视图打开,输出框显示.

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部