购买了服务器(现在主流配置都是双四核),下一步就要安装系统了。这里推荐用64位的Centos5.5,安装系统时我们要选择最小化安装(不要图形)。大家在用服务器时要记得一个原则,系统的安装包越少越好,这样机器才会更稳定。前面已经介绍过线上服务器的分区流程,如果遇到对磁盘I/O调用频繁的服务(例如MySQL),我们可以单独拿一个分区(如/data)出来,不要跟/装在一起,避免/分区被频繁调用,出现I/O瓶颈。至于单服务器的性能调优,本着稳定安全的原则,尽量不要改动系统原有的配置(Centos自身的文件和内存机制就很优秀),尤其是线上环境,稳定性要放在第一位来考虑。1.关闭不需要的服务 众知周知,服务越少,系统占用的资源也会越少,所以应关闭不需要的服务。这样做的好处是减少内存和CPU时间的占用。命令如下所示: <!--[if !supportLists]-->1. <!--[endif]--># 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的代码如下:
说明 setenforce 1将SELinux设置成为enforcing模式;setenforce 0将SELinux设置成为permissive模式。 另外,在lilo或grub的启动参数中增加:selinux=0,这样也可以关闭SELinux。 2.关闭不需要的tty 先编辑/etc/inittab,找到如下一段命令:
事实上没有必要使用这么多。应如何关闭不需要的进程呢?通常我们保留前两个控制台就可以了,把后面4个用#注释掉,并且无需重启,只需要执行init q这个命令即可,如下所示:init q 3.对TCP/IP网络参数进行调整 调整TCP/IP网络参数,可以增强抗SYN Flood的能力,命令如下所示:
修改history记录的命令如下所示:
不重启系统就可让其生效,如下所示:
我们可以定时校正服务器的时间,命令如下所示:
如果不准备提供打印服务,可停止默认设置为自动启动的打印服务,命令如下所示:
7.停止ipv6 在Centos5.5默认的状态下,ipv6是被启用的。因为我们不使用ipv6,所以,可以停止ipv6,以最大限度地保证安全和快速。首先确认一下ipv6是不是处于被启动的状态。
确认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命令,在最后一行添加如下代码:
正解做法应该为在Centos5.5的/etc/rc.local文件里添加如下命令行:
另外,ulimit -n命令并不能真正看到文件的最大文件打开数,大家可用如下脚本查看:
大家配置Centos5.5的网卡时,容易忽略的一项就是Linux启动时未启动网卡,其后果很明显,那就是你的Linux机器永远也没有IP地址,下面是一台线上服务器的配置:
一个Linux文件默认有3个时间。 atime:对此文件的访问时间。 ctime:此文件inode发生变化的时间。 mtime:此文件的修改时间。 如果有多个小文件(比如Web服务器的页面上有多个小图片),通常就没有必要记录文件的访问时间了,这样可以减少写磁盘的I/O。这要如何配置呢? 首先,修改文件系统的配置文件:vim /etc/fstab。然后,在包含大量小文件的分区中使用noatime和nodiratime这两个命令。例如: <!--[if !supportLists]-->1. <!--[endif]-->/dev/sda5 /data/pics ext3 noatime,nodiratime 0 0 这样文件被访问时就不会再产生写磁盘的I/O了。 1.5.3 优化Linux下的内核TCP参数以提高系统性能 内核的优化跟服务器的优化一样,应本着稳定安全的原则。下面以64位的Centos5.5下的Squid服务器为例来说明,待客户端与服务器端建立TCP/IP连接后就会关闭SOCKET,服务器端连接的端口状态也就变为TIME_WAIT了。那是不是所有执行主动关闭的SOCKET都会进入TIME_WAIT状态呢?有没有什么情况使主动关闭的SOCKET直接进入CLOSED状态呢?答案是主动关闭的一方在发送最后一个ACK后就会进入TIME_WAIT状态,并停留2MSL(Max Segment LifeTime)时间,这个是TCP/IP必不可少的,也就是“解决”不了的。 TCP/IP的设计者如此设计,主要原因有两个: 防止上一次连接中的包迷路后重新出现,影响新的连接(经过2MSL时间后,上一次连接中所有重复的包都会消失)。 为了可靠地关闭TCP连接。主动关闭方发送的最后一个ACK(FIN)有可能会丢失,如果丢失,被动方会重新发FIN,这时如果主动方处于CLOSED状态,就会响应RST而不是ACK。所以主动方要处于TIME_WAIT状态,而不能是CLOSED状态。另外,TIME_WAIT并不会占用很大的资源,除非受到攻击。 在Squid服务器中可输入查看当前连接统计数的命令,如下所示:
LISTEN:服务器在等待进入呼叫。 SYN_RECV:一个连接请求已经到达,等待确认。 SYN_SENT:应用已经开始,打开一个连接。 ESTABLISHED:正常数据传输状态。 FIN_WAIT1:应用说它已经完成。 FIN_WAIT2:另一边已同意释放。 CLOSING:两边同时尝试关闭。 TIME_WAIT:另一边已初始化一个释放。 LAST_ACK:等待所有分组死掉。 也就是说,这条命令可以把当前系统的网络连接状态分类汇总。 在Linux下高并发的Squid服务器中,TCP TIME_WAIT套接字数量经常可达两三万,服务器很容易就会被拖死。不过,我们可以通过修改Linux内核参数来减少Squid服务器的TIME_WAIT套接字数量,命令如下所示:
<!--[if !supportLists]-->1. <!--[endif]-->/sbin/sysctl -p 如果是用于Apache或Nginx等的Web服务器,或Nginx的反向代理,则只需要更改以下几项即可:
当然这些都只是最基本的更改,大家还可以根据自己的需求来更改内核的设置,同样也要本着稳定的原则,如果服务器不稳定的话,一切工作和努力都会白费。如果以上优化仍无法满足你的要求,有可能你需要定制你的服务器内核或升级服务器硬件。至于服务的配置优化,超出了本章的内容,大家可根据自己的需求有针对性地进行更改。 (责任编辑:IT) |