阿里云服务器ECS    
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新 [咨询更多]
阿里云存储OSS
简单易用、多重冗余、数据备份高可靠、多层次安全防护安全性更强、低成本 [咨询更多]
阿里云数据库RDS
稳定可靠、可弹性伸缩、更拥有容灾、备份、恢复、监控、迁移等方面的全套解决方案 [咨询更多]
阿里云安全产品
DDoS高防IP、web应用防火墙、安骑士、sll证书、态势感知众多阿里云安全产品热销中 [咨询更多]
阿里云折扣优惠    
云服务器ECS、数据库、负载均衡等产品新购、续费、升级联系客服获取更多专属折扣 [咨询更多]
系统的基础优化
2020-9-8    点击量:
  系统的基础优化  建议对CentOS 6.8系统做如下的基础优化,比如更新yum源提升速度,关闭不必要开启的服务等。
  
  1. 更新yum官方源
  
  CentOS 6.8系统自带的更新源速度较慢,想必各位都有所感受。为了让CentOS 6.8系统使用速度更快的yum更新源,运维人员都会选择更换源,笔者一般会选择网易的更新源,详细步骤如下所示。
  
  1)下载repo文件,命令如下所示:wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
  
  2)备份并替换系统的repo文件,命令如下所示:cd /etc/yum.repos.d/mv CentOS-Base.repo CentOS-Base.repo.bakmv CentOS6-Base-163.repo CentOS-Base.repo
  
  3)执行yum源更新,如下。
  
  yum clean all #清除yum缓存
  
  yum makecache #重建缓存
  
  yum update    #升级Linux系统
  
  增加epel源,详细步骤如下。
  
  1)下载rpm文件并进行安装,命令如下:
  
  wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpmrpm -ivh epel-release-6-8.noarch.rpm
  
  2)安装yum-priorities源优先级工具,命令如下:
  
  yum install yum-priorities
  
  yum-priorities源优先级工具是yum-plugin-priroites插件,用来给yum源分优先级。比如说系统存在官方源、epel、pup-petlabs三个yum源,三个yum源中可能含有相同的软件,yum管理器为了分辨更新系统或者安装软件的时候用哪个yum源的软件,则会用上该工具。如果说,设置官方的yum源优先级最高,epelyum源第二,puppetlabs第三(用1到99来表示,1最高),那在安装程序的时候,就会先寻找官方的yum源,如果源里面有需要的程序,那就停止寻找,直接安装找到的,如果没有找到,则依次寻找epel和rpmfusion的源。
  
  如果说三个yum源都含有同一个软件,那就安装优先级最高的yum源中的程序。添加优先级的过程比较简单,只需要编辑对应的repo文件,在文件最末添加如下内容即可:
  
  priority=对应优先级数字
  
  注意,要想开启yum源优先级功能,确保priorities.conf文件里面有如下内容,需要先打开此文件,打开的命令如下:vim /etc/yum/pluginconf.d/priorities.conf确保文件里面包含如下内容:
  
  [main]
  
  enabled=1
  
  2. 关闭不需要的服务
  
  众所周知,服务越少,系统占用的资源就会越少,所以建议大家把不需要的服务关闭掉,这样做的好处是减少内存和CPU资源占用。首先可以看下系统中存在着哪些已经启动的服务,查看命令如下:ntsysv
  
  下面列出需要启动的服务,未列出的服务根据实际情况关闭:   •crond:自动计划任务。
  
  •network:Linux系统的网络服务,这个非常重要,不开启此服务的话,服务器是不能联网的。
  
  •sshd:OpenSSH服务器守护进程。
  
  •rsyslog:Linux的日志系统服务,必须要启动。
  
  3. 关闭不需要的TTY
  
  可用vim编辑器打开vim/etc/init/start-ttys.conf文件,文件内容如下所示:
  
  start on stopped rc RUNLEVEL=[2345]
  
  env ACTIVE_CONSOLES=/dev/tty[1-6]
  
  env X_TTY=/dev/tty1
  
  task
  
  script
  
  . /etc/sysconfig/init
  
  for tty in $(echo $ACTIVE_CONSOLES) ; do
  
  [ "$RUNLEVEL" = "5" -a "$tty" = "$X_TTY" ] &&
  
  continue
  
  initctl start tty TTY=$tty
  
  done
  
  end script
  
  这段代码会使init打开6个控制台,可分别用ALT+F1到ALT+F6进行访问。此6个控制台默认都驻留在内存中,用psaux命令就可以看到,如下:
  
  ps aux | grep tty | grpe -v grep
  
  命令显示结果如下所示:
  
  root   1118 0.0 0.1  4064  596 tty1   Ss+ 13:14  0:00/sbin/mingetty /dev/tty1
  
  root   1120 0.0 0.1  4064  596 tty2   Ss+ 13:14  0:00/sbin/mingetty /dev/tty2
  
  root   1122 0.0 0.1  4064  596 tty3   Ss+ 13:14  0:00/sbin/mingetty /dev/tty3
  
  root   1124 0.0 0.1  4064  596 tty4   Ss+ 13:14  0:00/sbin/mingetty /dev/tty4
  
  root   1126 0.0 0.1  4064  600 tty5   Ss+ 13:14  0:00/sbin/mingetty /dev/tty5
  
  root   1128 0.0 0.1  4064  600 tty6   Ss+ 13:14  0:00/sbin/mingetty /dev/tty6
  
  事实上没有必要使用这么多TTY,那如何关闭不需要的进程呢?
  
  通常保留两个控制台就可以了,打开/etc/init/start-ttys.conf文件,注意以下代码内容:
  
  env ACTIVE_CONSOLES=/dev/tty[1-6]
  
  将[1-6]修改为[1-2],然后打开/etc/sysconfig/init文件,注意以下代码内容:
  
  ACTIVE_CONSOLES=/dev/tty[1-6]
  
  将[1-6]修改为[1-2],并重启机器即可,我们依旧使用ps aux命令查看tty个数,如下所示:
  
  root   1105 0.0 0.1  4064  600 tty1   Ss+ 13:48  0:00/sbin/mingetty /dev/tty1
  
  root   1107 0.0 0.1  4064  600 tty2   Ss+ 13:48  0:00/sbin/mingetty /dev/tty2
  
  4. 对TCP/IP网络参数进行调整
  
  调整TCP/IP网络参数可以加强抗SYN Flood的能力,命令如下所示:
  
  echo 'net.ipv4.tcp_syncookies = 1' >> /etc/sysctl.conf
  
  sysctl -p
  
  5. 修改SHELL命令的history记录个数
  
  用vim编辑器打开/etc/profile文件,关注HIST-SIZE=1000:
  
  vi /etc/profile
  
  找到HISTSIZE=1000后,将其改为HISTSIZE=100(这条可
  
  根据实际工作环境而定)。
  
  不需要重启系统就可让其生效,如下所示:
  
  source /etc/profile
  
  6. 定时校正服务器的时间
  
  我们可以定时校正服务器的时间,命令如下所示:
  
  yum install ntp
  
  crontab -e
  
  加入一行:
  
  */5 * * * * /usr/sbin/ntpdate ntp.api.bz>>/dev/null 2>&1
  
  调试crontab时间可以参考工具https://crontab.guru。
  
  ntp.api.bz是一组NTP服务器集群,之前是6台服务器,位于上海电信;现在是3台服务器,分散到上海和浙江电信,可用dig命令查看:
  
  dig ntp.api.bz
  
  命令显示结果如下所示:
  
  ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.1 <<>>
  
  ntp.api.bz
  
  ;; global options: +cmd
  
  ;; Got answer:
  
  ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61931
  
  ;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 2, ADDITIONAL: 2
  
  ;; QUESTION SECTION:
  
  ;ntp.api.bz.INA
  
  ;; ANSWER SECTION:
  
  ntp.api.bz.600INCNAMEtime.asia.apple.com.
  
  time.asia.apple.com.3172INCNAMEtime-ios.g.aaplimg.com.
  
  time-ios.g.aaplimg.com.600INA17.253.84.125
  
  time-ios.g.aaplimg.com.600INA17.253.84.253
  
  time-ios.g.aaplimg.com.600INA17.253.72.243
  
  ;; AUTHORITY SECTION:
  
  g.aaplimg.com.31INNSa.gslb.aaplimg.com.
  
  g.aaplimg.com.31INNSb.gslb.aaplimg.com.
  
  ;; ADDITIONAL SECTION:
  
  a.gslb.aaplimg.com.28200INA17.253.201.8
  
  b.gslb.aaplimg.com.60802INA17.253.206.8
  
  ;; Query time: 30 msec
  
  ;; SERVER: 192.168.1.1#53(192.168.1.1)
  
  ;; WHEN: Sun Apr 23 09:43:19 2017
  
  ;; MSG SIZE  rcvd: 211
  
  7. 停止IPv6网络服务
  
  在CentOS 6.8默认的状态下,IPv6是被启用的,可用如下命令查看:lsmod | grep ipv6命令显示结果如下:
  
  nf_conntrack_ipv6       8748   2
  
  nf_defrag_ipv6         11182   1 nf_conntrack_ipv6nf_conntrack           79357   2 nf_conntrack_ipv6,xt_stateipv6                  321422  23 ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6
  
  有些网络和应用程序还不支持IPv6,因此,禁用IPv6可以说是一个非常好的选择,以此加强系统的安全性,提高系统的整体性能。不过,首先要确认一下IPv6是否处于被启动的状态,命令如下:
  
  ifconfig -a ← 列出全部网络接口信息
  
  命令结果如下所示:
  
  eth0      Link encap:Ethernet  HWaddr 00:16:3E:7F:67:C3            inet addr:192.168.1.207  Bcast:192.168.1.255  Mask:255.255.255.0
  
  inet6 addr: fe80::216:3eff:fe7f:67c3/64 Scope:Link
  
  UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
  
  RX packets:405835 errors:0 dropped:0 overruns:0 frame:0          TX packets:197486 errors:0 dropped:0 overruns:0 carrier:0
  
  collisions:0 txqueuelen:1000
  
  RX bytes:327950786 (312.7 MiB)  TX bytes:17186162 (16.3 MiB)          Interrupt:24
  
  lo        Link encap:Local Loopback            inet addr:127.0.0.1  Mask:255.0.0.0
  
  inet6 addr: ::1/128 Scope:Host          UP LOOPBACK RUNNING  MTU:16436  Metric:1          RX packets:0 errors:0 dropped:0 overruns:0 frame:0          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:0
  
  RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
  
  然后修改相应配置文件,停止ipv6,命令如下:
  
  echo "install ipv6 /bin/true" > /etc/modprobe.d/disable-ipv6.conf
  
  #每当系统需要加载IPv6模块时,强制执行/bin/true来代替实际加载的模块
  
  echo "IPV6INIT=no" >> /etc/sysconfig/network-scripts/ifcfg-eth0
  
  #禁用基于IPv6网络,使之不会被触发启动
  
  如果关闭ipv6选项,在安装LVS服务的机器上面运行ipvsadm会出现如下报错:
  
  FATAL:Error inserting ip_vs(/lib/mod-ules/2.6.32-573.7.1.el6.x86_64/kernel/net/netfilter/ipvs/ip_vs.ko):Unknown symbol in module,or unknown pa-rameter(see dmesg)
  
  Can't initialize ipvs:Protocol not available
  
  Are you sure that IP Virtual Server is built in the kernel
  
  or as module?
  
  所以此选项的优化应该根据实际情况来定,如果有需要安装LVS服务的机器建议略过此项优化。
  
  8. 调整修改文件描述符限制
  
  在Linux系统中,所有东西都可以看成是文件,文件又可分为普通文件、目录文件、链接文件和设备文件。文件描述符是内核为了高效管理已被打开的文件所创建的索引,是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符。程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误。如果此时去打开一个新的文件,它的文件描述符会是3。大家在运行Linux系统下的服务应用时(例如Squid服务),打开的文件太多就会提示“Too manyopen files”,出现这句提示的原因是程序打开的文件连接数量超过系统设定值。这主要是因为文件描述符是系统的一个重要资源,虽然说系统内存有多少就可以打开多少的文件描述符,但是在实际实现过程中内核会做相应的处理,一般最大打开文件数会是系统内存的10%(以KB来计算)(称之为系统级限制,比如4G内存的机器可以为419430),查看系统级别的最大打开文件数可以使用sysctl-a|grep fs.file-max命令查看。与此同时,内核为了不让某一个进程消耗掉所有的文件资源,它也会对单个进程最大打开文件数做默认值处理(称之为用户级限制),默认值一般是1024,可以使用ulimit-n命令查看。
  
  如何修改文件描述符限制(也称之文件最大打开数)的值呢?我们可以参考下面的步骤。
  
  1)修改用户级限制
  
  在/etc/security/limits.conf文件里添加如下内容:
  
  * soft nofile 65535
  
  * hard nofile 65535
  
  soft的数值应该是小于或等于hard值,soft的限制不能比hard限制高。
  
  2)修改系统限制可以把fs.file-max=419430添加到/etc/sysctl.conf中,使用sysctl-p即不需要重启系统也可生效,具体步骤如下所示:
  
  echo "fs.file-max=419430" >> /etc/sysctl.conf
  
  sysctl -p
  
  用户级限制:ulimit命令看到的是用户级的最大文件描述符限制,也就是说每一个用户登录后执行的程序占用文件描述符的总数不能超过这个限制。
  
  系统级限制:sysctl命令和proc文件系统中查看到的数值是一样的,这属于系统级限制,它是限制所有用户打开文件描述符的总和。
  
  另外,ulimit-n命令并不能真正看到文件的最大文件打开数,可用如下脚本查看:
  
  #!/bin/bash
  
  for pid in `ps aux |grep nginx |grep -v grep|awk '{print $2}'`
  
  do
  
  cat /proc/${pid}/limits |grep 'Max open files'
  
  在线上环境找一台CMS业务机器执行此脚本,显示结果如下所示:
  
  Max open files            65535                65535                filesMax open files            65535                65535                filesMax open files            65535                65535                filesMax open files            65535                65535                filesMax open files            65535                65535                filesMax open files            65535                65535                filesMax open files            65535                65535                filesMax open files            65535                65535                filesMax open files            65535                65535                filesMax open files            65535                65535                files
  
  9. 正确启动网卡
  
  大家配置CentOS 6.8的网卡IP地址时,最容易忽略的一项就是CentOS系统启动时未启动网卡,其后果很明显,那就是你的Linux机器永远没有IP地址。下面是一台线上环境服务器网卡文件/etc/sysconfig/network-scripts/ifcfg-eth0文件的配置内容。DEVICE=eth0
  
  BOOTPROTO=static
  
  HWADDR=00:14:22:1B:71:20
  
  IPV6INIT=no
  
  IPV6_AUTOCONF=yes
  
  ONBOOT=yes   →此项一定要记得更改为yes,它会在系统引导就启动你的网卡设备NETMASK=255.255.255.192
  
  IPADDR=203.93.236.146
  
  GATEWAY=203.93.236.129
  
  TYPE=Ethernet PEERDNS=yes   →允许从DHCP处获得的DNS覆盖本地的DNSUSERCTL=no    →不允许普通用户修改网卡10. 关闭写磁盘I/O功能
  
  Linux文件默认有3个时间,如下所示:
  
  •atime:对此文件的Access(访问)时间。
  
  •ctime:此文件inode发生Change(状态变化)的时间。
  
  •mtime:此文件的Modify(修改)时间。
  
  我们可以用stat命令查看文件的这些相关时间,如下所示:
  
  stat install.log
  
  命令显示结果如下所示:
  
  File: "install.log"
  
  Size: 46503      Blocks: 104        IO Block: 4096   普通
  
  文件
  
  Device: 802h/2050d Inode: 786434      Links: 1
  
  Access: (0644/-rw-r--r--)  Uid: (  626/    yucy)   Gid:
  
  (  626/    yucy)
  
  Access: 2015-09-08 19:02:49.838428672 +0800
  
  Modify: 2014-12-15 12:05:12.808264055 +0800
  
  Change: 2015-07-06 11:05:22.731778396 +0800
  
  如果有多个小文件(比如Web服务器的页面上有多个小图片),通常就没有必要记录文件的访问时间了,这样可以减少写磁盘的I/O,可这要如何配置呢?
  
  首先,修改文件系统的配置文件/etc/fstab,然后,在包含大量小文件的分区中使用noatime和nodiratime这两个命令。
  
  例如:
  
  /dev/sda5 /data/pics ext3 noatime,nodiratime 0 0
  
  这样文件被访问时就不会再产生写磁盘的I/O了。
  
  11. 修改SSH登录配置
  
  SSH服务配置优化,请保持机器中至少有一个具有sudo权限的用户,下面的配置会禁止root远程登录,代码内容如下所示:sed -i 's@#PermitRootLogin yes@PermitRootLogin no@' /etc/ssh/sshd_config
  
  #禁止root远程登录
  
  sed -i 's@#PermitEmptyPasswords no@PermitEmptyPasswords
  
  no@'
  
  /etc/ssh/sshd_config #禁止空密码登录
  
  sed -i 's@#UseDNS yes@UseDNS no@' /etc/ssh/sshd_config/etc/ssh/sshd_config #关闭SSH反向查询,以加快SSH访问速度
  
  12. 增加具有sudo权限的用户
  
  添加用户的步骤和过程比较简便(这里略过),由于系统已经禁止了root远程登录,因此需要一个具有sudo权限的admin用户,权限跟root相当,这里用visudo命令,在打开的文件内容里找到如下内容:
  
  ## Allow root to run any commands anywhere
  
  root    ALL=(ALL)       ALL
  
  然后添加如下内容:
  
  yhc   ALL=(ALL)       ALL
  
  如果在进行sudo切换时不想输入密码,可以做如下更改:
  
  yhc  ALL=(ALL) NOPASSWD:ALL
推荐文章更多
联系客服免费领取更多阿里云产品新购、续费升级折扣,叠加官网活动折上折更优惠