本次整理了一些linux 系统方面的优化内容和大家分享,内包含 daemons优化、 安全优化、内核参数、 内存优化 、磁盘优化 、网络子系统的调优 、针对TCP和UDP的调优等方面的内容。
文档内容按照shell脚本格式编写,可以copy 内容改为脚本格式直接运行。能力有限,如有不妥之处,请各位好朋友们指点。
#!/bin/sh
###############################################################################################################################
#Linux 性能调优
#by kangjianhua
#date:20120208
#################################################################################################################################
#1 关闭daemons
#有些运行在服务器中的daemons (后台服务),并不是完全必要的。关闭这些daemons 可释
#放更多的内存、减少启动时间并减少CPU 处理的进程数。减少daemons 数量的同时也增强
#了服务器的安全性。缺省情况下,多数服务器都可以安全地停掉几个daemons
#xfs daemon
#/sbin/service xfs stop
#/sbin/chkconfig xfs off
#X 窗口字体服务
#注意:关闭xfs daemon 将导致不能启动X,因此只有在不需要启动GUI 图形的时候才可以
#关闭xfs daemon。使用startx 命令前,开启xfs daemon,恢复正常启动X。
#高级电源管理
/sbin/service apmd stop
/sbin/chkconfig apmd off
#自动挂载CD-ROM文件系统
/sbin/service autofs stop
/sbin/chkconfig autofs off
#unix系统命令支持
/sbin/service cpus stop
/sbin/chkconfig cpus off
#HP 办公系统支持
/sbin/service hpoj stop
/sbin/chkconfig hpoj off
#ISDN modem 支持
/sbin/service isdn stop
/sbin/chkconfig isdn off
#used in support of exporting NFS shares
/sbin/service netfs stop
/sbin/chkconfig netfs off
#used in support of exporting NFS shares
/sbin/service nfslock stop
/sbin/chkconfig nfslock off
#PCMCIA 服务支持
/sbin/service pcmcia stop
/sbin/chkconfig pcmcia off
#Dynamic port assignment for RPC services
/sbin/service portmap stop
/sbin/chkconfig portmap off
#红帽网络升级服务检查
/sbin/service rhnsd stop
/sbin/chkconfig rhnsd off
#mail transport Agent
/sbin/service sendmail stop
/sbin/chkconfig sendmail off
######################################################################################################################################
#2 关闭GUI
#修改文件/etc/inittab
#id:3:initdefault:
#注释掉ca::ctrlaltdel;/sbin/shutdown –t3 –r now(禁止热启动)
#####################################################################################################################################
# 3 改变内核参数
#Red Hat 也提供了图形界面下更改sysctl 参数的方式:
#输入 /usr/bin/redhat-config-proc
#net.ipv4.inet_peer_gc_maxtime 在较低的内存压力下garbage collector(gc)忽略存储内存池的频率,默认值是120
sysctl -w net.ipv4.inet_peer_gc_maxtime=240
#net.ipv4.inet_peer_gc_mintime 设置garbage collector可以清除内存的最小时间,如果你的服务器负载比较重,
#可以尝试增加这个值,默认值是10
sysctl -w net.ipv4.inet_peer_gc_mintime=80
#net.ipv4.inet_peer_maxttl Inet入口的最大存活时间,在这个时间之后新入口将过期,默认值是600
sysctl -w net.ipv4.inet_peer_maxttl=500
#net.ipv4.inet_peer_minttl Inet入口的最小存活时间,这个时间必须比net.ipv4.inet_peer_threshold参数小,默认值是120
sysctl -w net.ipv4.inet_peer_minttl=80
#net.ipv4.inet_peer_threshold 设定inet的存储容量,当这个限制达到后,入口将被丢掉,
#使用net.ipv4.inet_peer_gc_mintime限制超时限制,默认值是65644
sysctl -w net.ipv4.inet_peer_threshold=65644
#vm.hugetlb_pool 通常在使用Oracle或者DB2等数据库时会用到这个值,默认值是0
#sysctl -w vm.hugetlb_pool = 4608
#vm.inactive_clean_percent 指定应该被清除的非活动内存的百分比,默认值是5%
#sysctl -w vm.inactive_clean_percent = 30
#vm.pagecache 指定多少内存应该被用为页面缓存,这个参数对Oracle和DB2等数据库来说是很重要的,默认值是1 15 100。
#参数的三个值的含义:
#·做为页面缓存的最小内存百分比,默认是1%
#·缓存的初始化数量,默认是15%
#·做为页面缓存的最大内存百分比,默认是100%
sysctl -w vm.pagecache="1 50 100"
#kernel.panic_on_oops 启用内核对crash进程的检测和处理,kernel.panic参数必须设为1。该参数默认值为1(启用)
sysctl -w kernel.panic_on_oops=0
#kernel.pid_max 可以分配的最大的PID,默认值是32768
#sysctl -w kernel.pid_max=65536
#net.ipv4.tcp_tw_recycle 主要的tcp连接状态有ESTABLISHED,TIME_WAIT和CLOSED,这个参数可以快速的再生TIME_WAIT连接,默认是0(禁用)
sysctl -w net.ipv4.tcp_tw_recycle=0
#vm.overcommit_ratio 允许过载使用的内存百分比,默认是50%。
sysctl -w vm.overcommit_ratio=17
###############################################################################################################################################
#4 内存优化
#内存一般以每页4k字节分配。最小内存空白页设置是系统中内存数量的2倍;最低内存空白页设置是内存数量的4倍;
#最高内存空白页设置是系统内存的6倍。这些值在系统启动时决定。
#一般来讲在配置系统分配的虚拟内存配置上,我个人认为增大最高内存空白页是一种比较好的配置方式,以2G的内存配置为例:
echo "4096 8192 16384" > /proc/sys/vm/min_free_kbytes
# 配置kswapd daemon,指定Linux 的内存交换页数量
#sysctl -w vm.kswapd="1024 32 64"
#三个参数的描述如下:
#1 tries_base 相当于内核每次所交换的“页”的数量的四倍。对于有很多交换信息的系统,增加这个值可以改进性能。
#2 tries_min 是每次kswapd swaps 出去的pages 的最小数量。
#3 swap_cluster 是kswapd 即刻写如的pages 数量。数值小,会提高磁盘I/O 的性能;数值大可能也会对请求队列产生负面影响。
#如果要对这些参数进行改动,请使用工具vmstat 检查对性能的影响。
################################################################################################################################
#5 磁盘调优
# 配置Linux 内核如何更新dirty buffers 到磁盘。
#sysctl -w vm.bdflush = "30 500 0 0 500 3000 60 20 0"
#磁盘缓冲区用于暂存磁盘的数据
#vm.bdflush 有9 个参数,但是建议您只改变其中的3 个:
#1 nfract, 为排队写入磁盘前,bdflush daemon 允许的缓冲区最大百分比
#2 ndirty, 为bdflush 即刻写的最大缓冲区的值。如果这个值很大,bdflush 需要更多的时间完成磁盘的数据更新。
#7 nfract_sync, 发生同步前,缓冲区变dirty 的最大百分比。
####################################################################################################################################
#6网络子系统的调优
#开启TCP SYN cookies,保护服务器避免受syn-flood ***,包括服务取决denial-of-service (DoS) 或者分布式服务拒绝distributed denial-of-service (DDoS) (仅适用Red Hat Enterprise Linux AS)
sysctl -w net.ipv4.tcp_syncookies=1
#以下命令使服务器忽略来自被列入网关的服务器的重定向。因重定向可以被用来进行***,所以我们只接受有可靠来源的重定向。
sysctl -w net.ipv4.conf.eth0.secure_redirects=1
sysctl -w net.ipv4.conf.lo.secure_redirects=1
sysctl -w net.ipv4.conf.default.secure_redirects=1
sysctl -w net.ipv4.conf.all..secure_redirects=1
sysctl -w net.ipv4.conf.eth0.send_redirects=0
sysctl -w net.ipv4.conf.lo.send_redirects=0
sysctl -w net.ipv4.conf.default.send_redirects=0
sysctl -w net.ipv4.conf.all..send_redirects=0
#配置服务器拒绝接受广播风暴或者smurf ***attacks:
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1
#忽略所有icmp 包或者pings:
sysctl -w net.ipv4.icmp_echo_ignore_all=1
#有些路由器针对广播祯发送无效的回应,每个都产生警告并在内核产生日志.这些回应可以被忽略:
#sysctl -w net.ipv4.icmp_echo_ignore_bogus_error-responses=1
#################################################################################################################################
#7 针对TCP和UDP的调优
#连接数量非常大的服务器进行调优,对于同时支持很多连接的服务器,新的连接可以重新使用TIME-WAIT 套接字. 这对于Web服务器非常有效:
sysctl -w net.ipv4.tcp_tw_reuse=1
#使用该命令,还要启动TIME-WAIT 套接字状态的快速循环功能:
sysctl -w net.ipv4.tcp_tw_recycle=1
#通过改变tcp_fin_timeout 的值, 从FIN 序列到内存可以空闲出来处理新连接的时间缩短了,使性能得到改进.改变这个值的前要经过认真的监测,避免
因为死套接字造成内存溢出.
sysctl -w net.ipv4.tcp_fin_timeout=30
#服务器的一个问题是,同一时刻的大量TCP 连接里有很多的连接被打开但是没有使用. TCP的keepalive 功能检测到这些连接,缺省情况下,在2 小时之>后丢掉. 2 个小时的可能导致内存过度使用,降低性能.因此改成1800 秒(30 分钟)是个更好的选择:
sysctl -w net.ipv4.tcp_keepalive_time=1800
#对于所有协议的队列,设置最大系统发送缓存(wmem) 和接收缓存(rmem)到8MB
sysctl -w net.core.wmem_max=8388608
sysctl -w net.core.rmem_max=8388608
#使用如下命令发送和接收缓存.该命令设定了三个值:最小值、初始值和最大值,第三个值必须小于或等于wmem_max和rmem_max。
#sysctl -w net.ipv4.tcp_wmem_max="4096 87380 8388608"
#sysctl -w net.ipv4.tcp_rmem_max="4096 87380 8388608"
#关闭IPV6 ,修改配置文件 /etc/sysconfig/network
#把NETWORKING_IPV6=no掉