现在的位置: 首页 > 综合 > 正文

Centos5.5最小化安装后的优化

2014年03月18日 ⁄ 综合 ⁄ 共 6938字 ⁄ 字号 评论关闭

 

1.5.2 Centos5.5最小化安装后的优化(1)

《构建高可用Linux服务器》第1章Linux服务器构建基础,本章从Centos5.5 x86_64的安装、网络配置、日志分析、性能及状态监控、优化及虚拟化等方面对Linux硬件进行了全方位的说明,这些都是构建高性能及高可用Linux系统的基础,希望大家能够掌握此章内容。本节为大家介绍Centos5.5最小化安装后的优化。


    1.5.2 Centos5.5最小化安装后的优化(1)

    购买了服务器(现在主流配置都是双四核),下一步就要安装系统了。这里推荐用64位的Centos5.5,安装系统时我们要选择最小化安装(不要图形)。大家在用服务器时要记得一个原则,系统的安装包越少越好,这样机器才会更稳定。前面已经介绍过线上服务器的分区流程,如果遇到对磁盘I/O调用频繁的服务(例如MySQL),我们可以单独拿一个分区(如/data)出来,不要跟/装在一起,避免/分区被频繁调用,出现I/O瓶颈。至于单服务器的性能调优,本着稳定安全的原则,尽量不要改动系统原有的配置(Centos自身的文件和内存机制就很优秀),尤其是线上环境,稳定性要放在第一位来考虑。

    1.关闭不需要的服务

    众知周知,服务越少,系统占用的资源也会越少,所以应关闭不需要的服务。这样做的好处是减少内存和CPU时间的占用。命令如下所示:

    1. # ntsysv 

    下面列出需要启动的服务,未列出的服务一律关闭。

    crond

    Linux下的时间计划任务服务。

    irqbalance

    启用irqbalance服务,既可以提升性能,又可以降低能耗。irqbalance用于优化中断分配,它会自动收集系统数据以分析使用模式,并依据系统负载状况将工作置于Performance mode或Power-save mode状态。处于Performance mode时,irqbalance会将中断尽可能均匀地分发给各个CPU core,以充分利用CPU的多核,提升性能。处于Power-save mode时,irqbalance会将中断集中分配给第一个CPU,以保证其他空闲CPU的睡眠时间,降低能耗。现在的主流服务器都是双四核,所以这项我建议保留。

    network

    sshd

    syslog

    这是Linux的日志系统,必须要启动,否则机器出现问题时会找不到原因。

    再说一下两个比较特殊的服务,它们是iptables和SELinux。因为网站和系统之前均有硬件防火墙,如果没有特殊需求的话,均可选择关闭。要关闭它们可以在命令setup下操作,也可以使用命令行操作。

    关闭iptables的代码如下:

    1. service iptables stop && #chkconfig iptables off 

    关闭SELinux的方法如下:

    1. vim /etc/selinux/config 

    然后将文件中的selinux=""改为disabled,并重启。如果不想重启系统,使用命令setenforce 0,此命令可以暂时关闭SELinux,重启后失效。

    说明 setenforce 1将SELinux设置成为enforcing模式;setenforce 0将SELinux设置成为permissive模式。

    另外,在lilo或grub的启动参数中增加:selinux=0,这样也可以关闭SELinux。

    2.关闭不需要的tty

    先编辑/etc/inittab,找到如下一段命令:

    1. 1:2345:respawn:/sbin/mingetty tty1  
    2. 2:2345:respawn:/sbin/mingetty tty2  
    3. 3:2345:respawn:/sbin/mingetty tty3  
    4. 4:2345:respawn:/sbin/mingetty tty4  
    5. 5:2345:respawn:/sbin/mingetty tty5  
    6. 6:2345:respawn:/sbin/mingetty tty6 

    这段命令会使init为你打开了6个控制台,分别可以用[ALT+F1]到[ALT+F6]进行访问。此6个控制台默认都驻留在内存中,用ps -aux这个命令就可以看到,这是6个进程,如下所示:

    1. [root@localhost ~]# ps -aux| grep tty  
    2. Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ  
    3. root 3219 0.0 0.0  3792  488 tty1 Ss+ Mar16  0:00 /sbin/mingetty tty1  
    4. root 3220 0.0 0.0  3792  484 tty2 Ss+ Mar16  0:00 /sbin/mingetty tty2  
    5. root 3221 0.0 0.0  3792  488 tty3 Ss+ Mar16  0:00 /sbin/mingetty tty3  
    6. root 3222 0.0 0.0  3792  488 tty4 Ss+ Mar16  0:00 /sbin/mingetty tty4  
    7. root 3224 0.0 0.0  3792  488 tty5 Ss+ Mar16  0:00 /sbin/mingetty tty5  
    8. root 3226 0.0 0.0  3792  488 tty6 Ss+ Mar16  0:00 /sbin/mingetty tty6  
    9. root 3325 0.0 0.1 90548 6264 tty7 Ss+ Mar16  0:01  /usr/bin/Xorg :0 -br -audit 0 -auth /var/gdm/:0.Xauth -nolisten tcp vt7  
    10. root 6767 0.0 0.0 68284 1564 tty8 Ss+ Mar17  0:00 /bin/bash  
    11. root 31179 0.0 0.0 63372  756 pts/2S+  17:03  0:00 grep tty 

    事实上没有必要使用这么多。应如何关闭不需要的进程呢?通常我们保留前两个控制台就可以了,把后面4个用#注释掉,并且无需重启,只需要执行init q这个命令即可,如下所示:init q3.对TCP/IP网络参数进行调整

    调整TCP/IP网络参数,可以增强抗SYN Flood的能力,命令如下所示:

    1. # echo 'net.ipv4.tcp_syncookies = 1>> /etc/sysctl.conf  
    2. # sysctl -p 

       

    1.5.2 Centos5.5最小化安装后的优化(2)

    4.修改shell命令的history记录个数

    修改history记录的命令如下所示:

    1. # vi /etc/profile 

    找到histsize=1000,将其改为histsize=100(这条可根据实际情况而定)。

    不重启系统就可让其生效,如下所示:

    1. source /etc/profile 

    5.定时校正服务器的时间

    我们可以定时校正服务器的时间,命令如下所示:

    1. # yum install ntp  
    2. # crontab -e 

    加入如下一行:

    1. */5 * * * * ntpdate ntp.api.bz 

    #ntp.api.bz是一组NTP服务器集群,目前有6台服务器。这项服务是api.bz继http://sms.api.bz移动飞信免费短信发送接口之后的第二项免费API服务。

    6.停止打印服务

    如果不准备提供打印服务,可停止默认设置为自动启动的打印服务,命令如下所示:

    1. [root@sample ~]#/etc/rc.d/init.d/cups stop ← 停止打印服 务Stopping cups:    [OK]  ← 停止服务成功,出现“OK”  
    2. [root@sample ~]#chkconfig cups off ← 禁止打印服务自动启动  
    3. [root@sample ~]#chkconfig -list cups ← 确认打印服务自启动设置状态  
    4. cups0:off 1:off 2:off 3:off 4:off 5:off 6:off ← 0~ 6都为off的状态就OK(当前打印服务自启动被禁止) 

    7.停止ipv6

    在Centos5.5默认的状态下,ipv6是被启用的。因为我们不使用ipv6,所以,可以停止ipv6,以最大限度地保证安全和快速。首先确认一下ipv6是不是处于被启动的状态。

    1. [root@sample ~]#ifconfig -a ← 列出全部网络接口信息  
    2. eth0 Link encap:Ethernet HWaddr 00:0C:29:B6:16:A3  
    3. inet addr:192.168.0.13 Bcast:192.168.0.255 Mask:255.255.255.0  
    4. inet6 addr: fe80::20c:29ff:feb6:16a3/64 Scope:Link  
    5. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1  
    6. RX packets:84 errors:0 dropped:0 overruns:0 frame.:0  
    7. TX packets:93 errors:0 dropped:0 overruns:0 carrier:0  
    8. collisions:0 txqueuelen:1000  
    9. RX bytes:10288 (10.0 KiB) TX bytes:9337 (9.1 KiB)  
    10. Interrupt:185 Base address:0×1400  
    11.  
    12. lo Link encap:Local Loopback  
    13. inet addr:127.0.0.1 Mask:255.0.0.0  
    14. inet6 addr: ::1/128 Scope:Host  
    15. UP LOOPBACK RUNNING MTU:16436 Metric:1  
    16. RX packets:12 errors:0 dropped:0 overruns:0 frame.:0  
    17. TX packets:12 errors:0 dropped:0 overruns:0 carrier:0  
    18. collisions:0 txqueuelen:0  
    19. RX bytes:952 (952.0 b) TX bytes:952 (952.0 b)  
    20. sit0 Link encap:IPv6-in-IPv4 ← 确认ipv6是被启动的状态  
    21. NOARP MTU:1480 Metric:1  
    22. RX packets:0 errors:0 dropped:0 overruns:0 frame.:0  
    23. TX packets:0 errors:0 dropped:0 overruns:0 carrier:0  
    24. collisions:0 txqueuelen:0  
    25. RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) 

    然后修改相应配置文件,停止ipv6,如下所示:

    1. [root@sample ~]#vi /etc/modprobe.conf ← 修改相应配置文件,添加如下内容  
    2. alias net-pf-10 off  
    3. alias ipv6 off  
    4. echo "IPV6INIT=no>> /etc/sysconfig/network-scripts/ifcfg-eth0  
    5. [root@sample ~]#shutdown -r now ← 重新启动系统,使设置生效 

    最后确认ipv6的功能已经被关闭,如下所示:

    1. [root@sample ~]#ifconfig -a ← 列出全部网络接口信息  
    2. eth0 Link encap:Ethernet HWaddr 00:0C:29:B6:16:A3  
    3. inet addr:192.168.0.13 Bcast:192.168.0.255 Mask:255.255.255.0  
    4. inet6 addr: fe80::20c:29ff:feb6:16a3/64 Scope:Link  
    5. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1  
    6. RX packets:84 errors:0 dropped:0 overruns:0 frame.:0  
    7. TX packets:93 errors:0 dropped:0 overruns:0 carrier:0  
    8. collisions:0 txqueuelen:1000  
    9. RX bytes:10288 (10.0 KiB) TX bytes:9337 (9.1 KiB)  
    10. Interrupt:185 Base address:0×1400lo Link encap:Local Loopback  
    11. inet addr:127.0.0.1 Mask:255.0.0.0  
    12. inet6 addr: ::1/128 Scope:Host  
    13. UP LOOPBACK RUNNING MTU:16436 Metric:1  
    14. RX packets:12 errors:0 dropped:0 overruns:0 frame.:0  
    15. TX packets:12 errors:0 dropped:0 overruns:0 carrier:0  
    16. collisions:0 txqueuelen:0  
    17. RX bytes:952 (952.0 b) TX bytes:952 (952.0 b) 

    确认ipv6的相关信息没有被列出,说明ipv6功能已经关闭。

     
     

     

    1.5.2 Centos5.5最小化安装后的优化(3)

    8.调整Linux的最大文件打开数

    要调整一下Linux的最大文件打开数,否则squid在高负载时执行性能将会很低。另外,在Linux下面部署应用时,有时候会遇上Socket/File:Can’t open so many files这样的问题,这个值也会影响服务器的最大并发数。其实Linux是有文件句柄限制的,但默认不是很高,一般是1024,生产服务器很容易就会达到这个值,所以需要改动此值。刚开始我采用vim/etc/security/limit.conf命令,在最后一行添加如下代码:

    1. * soft nofile 60000  
    2. * hard nofile 65535 

    但重启后一切都还原了。

    正解做法应该为在Centos5.5的/etc/rc.local文件里添加如下命令行:

    1. ulimit -SHn 65535 

    当然了,我们也可以在Nginx的一些监控脚本里实时添加此命令行,达到重启也能生效的目的。

    另外,ulimit -n命令并不能真正看到文件的最大文件打开数,大家可用如下脚本查看:

    1. #!/bin/bash  
    2. for pid in 'ps aux |grep nginx |grep -v grep|awk '{print$2}''  
    3. do  
    4. cat /proc/${pid}/limits |grep 'Max open files'  
    5. done 

    9.启动网卡

    大家配置Centos5.5的网卡时,容易忽略的一项就是Linux启动时未启动网卡,其后果很明显,那就是你的Linux机器永远也没有IP地址,下面是一台线上服务器的配置:

    1. [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0  
    2. # Intel Corporation 82541GI Gigabit Ethernet Controller  
    3. DEVICE=eth0 
    4. BOOTPROTO=none 
    5. HWADDR=00:14:22:1B:71:20  
    6. IPV6INIT=yes 
    7. IPV6_AUTOCONF=yes 
    8. ONBOOT=yes →此项一定要记得为yes,它会在系统引导就启动你的网卡设备  
    9. NETMASK=255.255.255.192  
    10. IPADDR=203.93.236.146  
    11. GATEWAY=203.93.236.129  
    12. TYPE=Ethernet 
    13. PEERDNS=yes →允许从DHCP处获得的DNS覆盖本地的DNS  
    14. USERCTL=no~ →不允许普通用户修改网卡 

    10.关闭Centos5.5的写磁盘I/O功能

    一个Linux文件默认有3个时间。

    atime:对此文件的访问时间。

    ctime:此文件inode发生变化的时间。

    mtime:此文件的修改时间。

    如果有多个小文件(比如Web服务器的页面上有多个小图片),通常就没有必要记录文件的访问时间了,这样可以减少写磁盘的I/O。这要如何配置呢?

    首先,修改文件系统的配置文件:vim /etc/fstab。然后,在包含大量小文件的分区中使用noatime和nodiratime这两个命令。例如:

    1. /dev/sda5 /data/pics ext3 noatime,nodiratime 0 0 
    这样文件被访问时就不会再产生写磁盘的I/O了。 
     
     
     
     

    抱歉!评论已关闭.